diff --git a/contracts/.gas-snapshot b/contracts/.gas-snapshot index e793f8ce549..5a32426c5a0 100644 --- a/contracts/.gas-snapshot +++ b/contracts/.gas-snapshot @@ -1,142 +1,835 @@ -ArbitrumCrossDomainForwarder_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 37568) -ArbitrumCrossDomainForwarder_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 12963) -ArbitrumCrossDomainForwarder_Constructor:test_InitialState() (gas: 22163) -ArbitrumCrossDomainForwarder_Forward:test_Forward() (gas: 47867) -ArbitrumCrossDomainForwarder_Forward:test_ForwardRevert() (gas: 22181) -ArbitrumCrossDomainForwarder_Forward:test_NotCallableByUnknownAddress() (gas: 16056) -ArbitrumCrossDomainForwarder_TransferL1Ownership:test_CallableByL1Owner() (gas: 41453) -ArbitrumCrossDomainForwarder_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 19290) -ArbitrumCrossDomainForwarder_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 18637) -ArbitrumCrossDomainForwarder_TransferL1Ownership:test_NotCallableByNonOwners() (gas: 13242) -ArbitrumCrossDomainGovernor_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 37568) -ArbitrumCrossDomainGovernor_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 12963) -ArbitrumCrossDomainGovernor_Constructor:test_InitialState() (gas: 22186) -ArbitrumCrossDomainGovernor_Forward:test_CallableByL2Owner() (gas: 50003) -ArbitrumCrossDomainGovernor_Forward:test_Forward() (gas: 47896) -ArbitrumCrossDomainGovernor_Forward:test_ForwardRevert() (gas: 24326) -ArbitrumCrossDomainGovernor_Forward:test_NotCallableByUnknownAddress() (gas: 18233) -ArbitrumCrossDomainGovernor_ForwardDelegate:test_BubbleUpRevert() (gas: 19386) -ArbitrumCrossDomainGovernor_ForwardDelegate:test_CallableByCrossDomainMessengerAddressOrL1Owner() (gas: 60874) -ArbitrumCrossDomainGovernor_ForwardDelegate:test_CallableByL2Owner() (gas: 63003) -ArbitrumCrossDomainGovernor_ForwardDelegate:test_NotCallableByUnknownAddress() (gas: 18245) -ArbitrumCrossDomainGovernor_ForwardDelegate:test_RevertsBatchWhenOneCallFails() (gas: 64368) -ArbitrumCrossDomainGovernor_TransferL1Ownership:test_CallableByL1Owner() (gas: 41453) -ArbitrumCrossDomainGovernor_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 19290) -ArbitrumCrossDomainGovernor_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 18637) -ArbitrumCrossDomainGovernor_TransferL1Ownership:test_NotCallableByNonOwners() (gas: 13242) -ArbitrumSequencerUptimeFeed_AggregatorV3Interface:test_AggregatorV3Interface() (gas: 104862) -ArbitrumSequencerUptimeFeed_AggregatorV3Interface:test_Return0WhenRoundDoesNotExistYet() (gas: 19967) -ArbitrumSequencerUptimeFeed_Constants:test_InitialState() (gas: 8518) -ArbitrumSequencerUptimeFeed_ProtectReadsOnAggregatorV2V3InterfaceFunctions:test_AggregatorV2V3InterfaceAllowReadsIfConsumingContractIsWhitelisted() (gas: 604370) -ArbitrumSequencerUptimeFeed_ProtectReadsOnAggregatorV2V3InterfaceFunctions:test_AggregatorV2V3InterfaceDisallowReadsIfConsumingContractIsNotWhitelisted() (gas: 574432) -ArbitrumSequencerUptimeFeed_UpdateStatus:test_IgnoreOutOfOrderUpdates() (gas: 99629) -ArbitrumSequencerUptimeFeed_UpdateStatus:test_RevertIfNotL2CrossDomainMessengerAddr() (gas: 15447) -ArbitrumSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenStatusChangeAndNoTimeChange() (gas: 114625) -ArbitrumSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenStatusChangeAndTimeChange() (gas: 114708) -ArbitrumValidator_Validate:test_PostSequencerOffline() (gas: 69086) -OptimismCrossDomainForwarder_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 47160) -OptimismCrossDomainForwarder_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22160) -OptimismCrossDomainForwarder_Constructor:test_InitialState() (gas: 21998) -OptimismCrossDomainForwarder_Forward:test_Forward() (gas: 58281) -OptimismCrossDomainForwarder_Forward:test_ForwardRevert() (gas: 32560) -OptimismCrossDomainForwarder_Forward:test_NotCallableByUnknownAddress() (gas: 13867) -OptimismCrossDomainForwarder_TransferL1Ownership:test_CallableByL1Owner() (gas: 48933) -OptimismCrossDomainForwarder_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28753) -OptimismCrossDomainForwarder_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 16448) -OptimismCrossDomainForwarder_TransferL1Ownership:test_NotCallableByNonOwners() (gas: 11053) -OptimismCrossDomainGovernor_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 47160) -OptimismCrossDomainGovernor_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22160) -OptimismCrossDomainGovernor_Constructor:test_InitialState() (gas: 22021) -OptimismCrossDomainGovernor_Forward:test_CallableByL2Owner() (gas: 47846) -OptimismCrossDomainGovernor_Forward:test_Forward() (gas: 58330) -OptimismCrossDomainGovernor_Forward:test_ForwardRevert() (gas: 32619) -OptimismCrossDomainGovernor_Forward:test_NotCallableByUnknownAddress() (gas: 16047) -OptimismCrossDomainGovernor_ForwardDelegate:test_BubbleUpRevert() (gas: 29189) -OptimismCrossDomainGovernor_ForwardDelegate:test_CallableByCrossDomainMessengerAddressOrL1Owner() (gas: 72942) -OptimismCrossDomainGovernor_ForwardDelegate:test_CallableByL2Owner() (gas: 72947) -OptimismCrossDomainGovernor_ForwardDelegate:test_NotCallableByUnknownAddress() (gas: 16059) -OptimismCrossDomainGovernor_ForwardDelegate:test_RevertsBatchWhenOneCallFails() (gas: 76156) -OptimismCrossDomainGovernor_TransferL1Ownership:test_CallableByL1Owner() (gas: 48933) -OptimismCrossDomainGovernor_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28753) -OptimismCrossDomainGovernor_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 16448) -OptimismCrossDomainGovernor_TransferL1Ownership:test_NotCallableByNonOwners() (gas: 11053) -OptimismSequencerUptimeFeed_AggregatorV3Interface:test_AggregatorV3Interface() (gas: 72400) -OptimismSequencerUptimeFeed_AggregatorV3Interface:test_RevertGetAnswerWhenRoundDoesNotExistYet() (gas: 17653) -OptimismSequencerUptimeFeed_AggregatorV3Interface:test_RevertGetRoundDataWhenRoundDoesNotExistYet() (gas: 17893) -OptimismSequencerUptimeFeed_AggregatorV3Interface:test_RevertGetTimestampWhenRoundDoesNotExistYet() (gas: 17642) -OptimismSequencerUptimeFeed_Constructor:test_InitialState() (gas: 22050) -OptimismSequencerUptimeFeed_ProtectReadsOnAggregatorV2V3InterfaceFunctions:test_AggregatorV2V3InterfaceAllowReadsIfConsumingContractIsWhitelisted() (gas: 601594) -OptimismSequencerUptimeFeed_ProtectReadsOnAggregatorV2V3InterfaceFunctions:test_AggregatorV2V3InterfaceDisallowReadsIfConsumingContractIsNotWhitelisted() (gas: 574437) -OptimismSequencerUptimeFeed_UpdateStatus:test_IgnoreOutOfOrderUpdates() (gas: 67873) -OptimismSequencerUptimeFeed_UpdateStatus:test_RevertIfNotL2CrossDomainMessengerAddr() (gas: 13079) -OptimismSequencerUptimeFeed_UpdateStatus:test_RevertIfNotL2CrossDomainMessengerAddrAndNotL1SenderAddr() (gas: 23542) -OptimismSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenNoChange() (gas: 77322) -OptimismSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenStatusChangeAndNoTimeChange() (gas: 96182) -OptimismSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenStatusChangeAndTimeChange() (gas: 96265) -OptimismValidator_SetGasLimit:test_CorrectlyUpdatesTheGasLimit() (gas: 18671) -OptimismValidator_Validate:test_PostSequencerOffline() (gas: 74790) -OptimismValidator_Validate:test_PostSequencerStatusWhenThereIsNotStatusChange() (gas: 74869) -OptimismValidator_Validate:test_RevertsIfCalledByAnAccountWithNoAccess() (gas: 15571) -ScrollCrossDomainForwarder_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 47255) -ScrollCrossDomainForwarder_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22212) -ScrollCrossDomainForwarder_Constructor:test_InitialState() (gas: 21674) -ScrollCrossDomainForwarder_Forward:test_Forward() (gas: 58348) -ScrollCrossDomainForwarder_Forward:test_ForwardRevert() (gas: 32618) -ScrollCrossDomainForwarder_Forward:test_NotCallableByUnknownAddress() (gas: 13867) -ScrollCrossDomainForwarder_TransferL1Ownership:test_CallableByL1Owner() (gas: 48999) -ScrollCrossDomainForwarder_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28819) -ScrollCrossDomainForwarder_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 16448) -ScrollCrossDomainForwarder_TransferL1Ownership:test_NotCallableByNonOwners() (gas: 11053) -ScrollCrossDomainGovernor_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 47255) -ScrollCrossDomainGovernor_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22212) -ScrollCrossDomainGovernor_Constructor:test_InitialState() (gas: 21697) -ScrollCrossDomainGovernor_Forward:test_CallableByL2Owner() (gas: 47841) -ScrollCrossDomainGovernor_Forward:test_Forward() (gas: 58392) -ScrollCrossDomainGovernor_Forward:test_ForwardRevert() (gas: 32674) -ScrollCrossDomainGovernor_Forward:test_NotCallableByUnknownAddress() (gas: 16044) -ScrollCrossDomainGovernor_ForwardDelegate:test_BubbleUpRevert() (gas: 29250) -ScrollCrossDomainGovernor_ForwardDelegate:test_CallableByCrossDomainMessengerAddressOrL1Owner() (gas: 73009) -ScrollCrossDomainGovernor_ForwardDelegate:test_CallableByL2Owner() (gas: 73014) -ScrollCrossDomainGovernor_ForwardDelegate:test_NotCallableByUnknownAddress() (gas: 16056) -ScrollCrossDomainGovernor_ForwardDelegate:test_RevertsBatchWhenOneCallFails() (gas: 76224) -ScrollCrossDomainGovernor_TransferL1Ownership:test_CallableByL1Owner() (gas: 48999) -ScrollCrossDomainGovernor_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28819) -ScrollCrossDomainGovernor_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 16448) -ScrollCrossDomainGovernor_TransferL1Ownership:test_NotCallableByNonOwners() (gas: 11053) -ScrollSequencerUptimeFeed_AggregatorV3Interface:test_AggregatorV3Interface() (gas: 72423) -ScrollSequencerUptimeFeed_AggregatorV3Interface:test_RevertGetAnswerWhenRoundDoesNotExistYet() (gas: 17653) -ScrollSequencerUptimeFeed_AggregatorV3Interface:test_RevertGetRoundDataWhenRoundDoesNotExistYet() (gas: 17893) -ScrollSequencerUptimeFeed_AggregatorV3Interface:test_RevertGetTimestampWhenRoundDoesNotExistYet() (gas: 17642) -ScrollSequencerUptimeFeed_Constructor:test_InitialState() (gas: 173935) -ScrollSequencerUptimeFeed_ProtectReadsOnAggregatorV2V3InterfaceFunctions:test_AggregatorV2V3InterfaceAllowReadsIfConsumingContractIsWhitelisted() (gas: 601594) -ScrollSequencerUptimeFeed_ProtectReadsOnAggregatorV2V3InterfaceFunctions:test_AggregatorV2V3InterfaceDisallowReadsIfConsumingContractIsNotWhitelisted() (gas: 574437) -ScrollSequencerUptimeFeed_UpdateStatus:test_IgnoreOutOfOrderUpdates() (gas: 67919) -ScrollSequencerUptimeFeed_UpdateStatus:test_RevertIfNotL2CrossDomainMessengerAddr() (gas: 13079) -ScrollSequencerUptimeFeed_UpdateStatus:test_RevertIfNotL2CrossDomainMessengerAddrAndNotL1SenderAddr() (gas: 23542) -ScrollSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenNoChange() (gas: 77368) -ScrollSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenStatusChangeAndNoTimeChange() (gas: 96228) -ScrollSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenStatusChangeAndTimeChange() (gas: 96311) -ScrollValidator_SetGasLimit:test_CorrectlyUpdatesTheGasLimit() (gas: 18805) -ScrollValidator_Validate:test_PostSequencerOffline() (gas: 78326) -ScrollValidator_Validate:test_PostSequencerStatusWhenThereIsNotStatusChange() (gas: 78411) -ScrollValidator_Validate:test_RevertsIfCalledByAnAccountWithNoAccess() (gas: 15571) -ZKSyncSequencerUptimeFeed_AggregatorV3Interface:test_AggregatorV3Interface() (gas: 67166) -ZKSyncSequencerUptimeFeed_AggregatorV3Interface:test_RevertGetAnswerWhenRoundDoesNotExistYet() (gas: 17653) -ZKSyncSequencerUptimeFeed_AggregatorV3Interface:test_RevertGetRoundDataWhenRoundDoesNotExistYet() (gas: 17893) -ZKSyncSequencerUptimeFeed_AggregatorV3Interface:test_RevertGetTimestampWhenRoundDoesNotExistYet() (gas: 17642) -ZKSyncSequencerUptimeFeed_Constructor:test_InitialState() (gas: 22054) -ZKSyncSequencerUptimeFeed_ProtectReadsOnAggregatorV2V3InterfaceFunctions:test_AggregatorV2V3InterfaceAllowReadsIfConsumingContractIsWhitelisted() (gas: 601614) -ZKSyncSequencerUptimeFeed_ProtectReadsOnAggregatorV2V3InterfaceFunctions:test_AggregatorV2V3InterfaceDisallowReadsIfConsumingContractIsNotWhitelisted() (gas: 574443) -ZKSyncSequencerUptimeFeed_UpdateStatus:test_IgnoreOutOfOrderUpdates() (gas: 61924) -ZKSyncSequencerUptimeFeed_UpdateStatus:test_RevertIfNotL2CrossDomainMessengerAddr() (gas: 13035) -ZKSyncSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenNoChange() (gas: 71379) -ZKSyncSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenStatusChangeAndNoTimeChange() (gas: 90241) -ZKSyncSequencerUptimeFeed_UpdateStatus:test_UpdateStatusWhenStatusChangeAndTimeChange() (gas: 90324) -ZKSyncValidator_Constructor:test_ConstructingRevertedWithInvalidChainId() (gas: 103725) -ZKSyncValidator_Constructor:test_ConstructingRevertedWithZeroL1BridgeAddress() (gas: 81440) -ZKSyncValidator_Constructor:test_ConstructingRevertedWithZeroL2UpdateFeedAddress() (gas: 81497) -ZKSyncValidator_GetChainId:test_CorrectlyGetsTheChainId() (gas: 8350) -ZKSyncValidator_GetSetL2GasPerPubdataByteLimit:test_CorrectlyGetsAndUpdatesTheGasPerPubdataByteLimit() (gas: 18915) -ZKSyncValidator_Validate:test_PostSequencerOffline() (gas: 52255) -ZKSyncValidator_Validate:test_PostSequencerStatusWhenThereIsNotStatusChange() (gas: 52355) -ZKSyncValidator_Validate:test_RevertsIfCalledByAnAccountWithNoAccess() (gas: 15644) \ No newline at end of file +BurnFromMintTokenPool_lockOrBurn:test_PoolBurn() (gas: 238950) +BurnFromMintTokenPool_lockOrBurn:test_RevertWhen_ChainNotAllowed() (gas: 20450) +BurnFromMintTokenPool_lockOrBurn:test_RevertWhen_PoolBurnRevertNotHealthy() (gas: 28089) +BurnFromMintTokenPool_lockOrBurn:test_setup() (gas: 24178) +BurnMintTokenPool_lockOrBurn:test_PoolBurn() (gas: 236872) +BurnMintTokenPool_lockOrBurn:test_RevertWhen_ChainNotAllowed() (gas: 20609) +BurnMintTokenPool_lockOrBurn:test_RevertWhen_PoolBurnRevertNotHealthy() (gas: 28089) +BurnMintTokenPool_lockOrBurn:test_Setup() (gas: 17819) +BurnMintTokenPool_releaseOrMint:test_PoolMint() (gas: 102527) +BurnMintTokenPool_releaseOrMint:test_RevertWhen_ChainNotAllowed() (gas: 20436) +BurnMintTokenPool_releaseOrMint:test_RevertWhen_PoolMintNotHealthy() (gas: 27764) +BurnMintWithLockReleaseFlagTokenPool_lockOrBurn:test_LockOrBurn_CorrectReturnData() (gas: 237292) +BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn() (gas: 239012) +BurnWithFromMintTokenPool_lockOrBurn:test_RevertWhen_ChainNotAllowed() (gas: 20450) +BurnWithFromMintTokenPool_lockOrBurn:test_RevertWhen_PoolBurnRevertNotHealthy() (gas: 28089) +BurnWithFromMintTokenPool_lockOrBurn:test_Setup() (gas: 24169) +CCIPClientExample_sanity:test_ImmutableExamples() (gas: 2074109) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero() (gas: 289391) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero() (gas: 289610) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_ChainSelectorNotFound() (gas: 292395) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_ChainSelectorNotSet() (gas: 288925) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_FChainTooHigh() (gas: 336557) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_FMustBePositive() (gas: 290757) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_FTooHigh() (gas: 290201) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_NotEnoughTransmitters() (gas: 1192814) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_NotEnoughTransmittersEmptyAddresses() (gas: 308847) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_OfframpAddressCannotBeZero() (gas: 289043) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_RMNHomeAddressCannotBeZero() (gas: 289236) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_TooManySigners() (gas: 776542) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_ZeroP2PId() (gas: 293622) +CCIPHome__validateConfig:test_RevertWhen__validateConfig_ZeroSignerKey() (gas: 293652) +CCIPHome__validateConfig:test__validateConfig() (gas: 300016) +CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners() (gas: 332965) +CCIPHome__validateConfig:test__validateConfigSmallerFChain() (gas: 459322) +CCIPHome_applyChainConfigUpdates:test_RevertWhen__applyChainConfigUpdates_FChainNotPositive() (gas: 187800) +CCIPHome_applyChainConfigUpdates:test_RevertWhen_applyChainConfigUpdates_nodeNotInRegistry() (gas: 18065) +CCIPHome_applyChainConfigUpdates:test_RevertWhen_applyChainConfigUpdates_selectorNotFound() (gas: 14956) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs() (gas: 350127) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs() (gas: 282241) +CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes() (gas: 373692) +CCIPHome_beforeCapabilityConfigSet:test_RevertWhen_beforeCapabilityConfigSet_DONIdMismatch() (gas: 38008) +CCIPHome_beforeCapabilityConfigSet:test_RevertWhen_beforeCapabilityConfigSet_InnerCallReverts() (gas: 11725) +CCIPHome_beforeCapabilityConfigSet:test_RevertWhen_beforeCapabilityConfigSet_InvalidSelector() (gas: 11056) +CCIPHome_beforeCapabilityConfigSet:test_RevertWhen_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall() (gas: 37045) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet() (gas: 1455733) +CCIPHome_constructor:test_RevertWhen_constructor_CapabilitiesRegistryAddressZero() (gas: 63905) +CCIPHome_constructor:test_constructor() (gas: 3547489) +CCIPHome_getAllConfigs:test_getAllConfigs() (gas: 2772793) +CCIPHome_getCapabilityConfiguration:test_getCapabilityConfiguration() (gas: 9073) +CCIPHome_getConfigDigests:test_getConfigDigests() (gas: 2547587) +CCIPHome_promoteCandidateAndRevokeActive:test_RevertWhen_promoteCandidateAndRevokeActive_CanOnlySelfCall() (gas: 9087) +CCIPHome_promoteCandidateAndRevokeActive:test_RevertWhen_promoteCandidateAndRevokeActive_ConfigDigestMismatch() (gas: 23075) +CCIPHome_promoteCandidateAndRevokeActive:test_RevertWhen_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed() (gas: 8840) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_multiplePlugins() (gas: 5113791) +CCIPHome_revokeCandidate:test_RevertWhen_revokeCandidate_CanOnlySelfCall() (gas: 9001) +CCIPHome_revokeCandidate:test_RevertWhen_revokeCandidate_ConfigDigestMismatch() (gas: 19084) +CCIPHome_revokeCandidate:test_RevertWhen_revokeCandidate_RevokingZeroDigestNotAllowed() (gas: 8773) +CCIPHome_revokeCandidate:test_revokeCandidate() (gas: 30647) +CCIPHome_setCandidate:test_RevertWhen_setCandidate_CanOnlySelfCall() (gas: 29277) +CCIPHome_setCandidate:test_RevertWhen_setCandidate_ConfigDigestMismatch() (gas: 1395432) +CCIPHome_setCandidate:test_setCandidate() (gas: 1365392) +CCIPHome_supportsInterface:test_supportsInterface() (gas: 9885) +DefensiveExampleTest:test_HappyPath() (gas: 200517) +DefensiveExampleTest:test_Recovery() (gas: 424996) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1491953) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting() (gas: 10445) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting_RevertWhen_NotEnoughGasForSupportsInterface() (gas: 5966) +EtherSenderReceiverTest_ccipReceive:testFuzz_ccipReceive(uint256) (runs: 257, μ: 27583, ~: 49844) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96964) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49797) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17460) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongTokenAmount() (gas: 15748) +EtherSenderReceiverTest_ccipSend:testFuzz_ccipSend(uint256,uint256) (runs: 257, μ: 78259, ~: 76795) +EtherSenderReceiverTest_ccipSend:testFuzz_ccipSend_feeToken(uint256,uint256) (runs: 257, μ: 124328, ~: 100474) +EtherSenderReceiverTest_ccipSend:test_RevertWhen_ccipSends_insufficientFee_feeToken() (gas: 100005) +EtherSenderReceiverTest_ccipSend:test_RevertWhen_ccipSends_insufficientFee_native() (gas: 76235) +EtherSenderReceiverTest_ccipSend:test_RevertWhen_ccipSends_insufficientFee_weth() (gas: 99984) +EtherSenderReceiverTest_ccipSend:test_ccipSend_feeToken() (gas: 145087) +EtherSenderReceiverTest_ccipSend:test_ccipSend_native() (gas: 80451) +EtherSenderReceiverTest_ccipSend:test_ccipSend_nativeExcess() (gas: 80616) +EtherSenderReceiverTest_ccipSend:test_ccipSend_weth() (gas: 96167) +EtherSenderReceiverTest_constructor:test_constructor() (gas: 17582) +EtherSenderReceiverTest_getFee:test_getFee() (gas: 27482) +EtherSenderReceiverTest_validateFeeToken:test_RevertWhen_validateFeeTokens_feeToken_tokenAmountNotEqualToMsgValue() (gas: 20396) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_feeToken() (gas: 16700) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_native() (gas: 16611) +EtherSenderReceiverTest_validatedMessage:testFuzz_validatedMessage_msgSenderOverwrite(bytes) (runs: 257, μ: 25886, ~: 25840) +EtherSenderReceiverTest_validatedMessage:testFuzz_validatedMessage_tokenAddressOverwrite(address) (runs: 257, μ: 25438, ~: 25438) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_dataOverwrittenToMsgSender() (gas: 25455) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_emptyDataOverwrittenToMsgSender() (gas: 25372) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_invalidTokenAmounts() (gas: 17955) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_tokenOverwrittenToWeth() (gas: 25327) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_validMessage_extraArgs() (gas: 26347) +FactoryBurnMintERC20_approve:test_Approve() (gas: 55786) +FactoryBurnMintERC20_approve:test_RevertWhen_InvalidAddresss() (gas: 10681) +FactoryBurnMintERC20_burn:test_BasicBurn() (gas: 172448) +FactoryBurnMintERC20_burn:test_RevertWhen_BurnFromZeroAddresss() (gas: 47412) +FactoryBurnMintERC20_burn:test_RevertWhen_ExceedsBalances() (gas: 21983) +FactoryBurnMintERC20_burn:test_RevertWhen_SenderNotBurners() (gas: 13541) +FactoryBurnMintERC20_burnFrom:test_BurnFrom() (gas: 58290) +FactoryBurnMintERC20_burnFrom:test_RevertWhen_ExceedsBalances() (gas: 36164) +FactoryBurnMintERC20_burnFrom:test_RevertWhen_InsufficientAllowances() (gas: 22113) +FactoryBurnMintERC20_burnFrom:test_RevertWhen_SenderNotBurners() (gas: 13541) +FactoryBurnMintERC20_burnFromAlias:test_BurnFrom() (gas: 58264) +FactoryBurnMintERC20_burnFromAlias:test_RevertWhen_ExceedsBalances() (gas: 36128) +FactoryBurnMintERC20_burnFromAlias:test_RevertWhen_InsufficientAllowances() (gas: 22068) +FactoryBurnMintERC20_burnFromAlias:test_RevertWhen_SenderNotBurners() (gas: 13496) +FactoryBurnMintERC20_constructor:test_Constructor() (gas: 1450297) +FactoryBurnMintERC20_decreaseApproval:test_DecreaseApproval() (gas: 31420) +FactoryBurnMintERC20_getCCIPAdmin:test_getCCIPAdmin() (gas: 12740) +FactoryBurnMintERC20_getCCIPAdmin:test_setCCIPAdmin() (gas: 23852) +FactoryBurnMintERC20_grantMintAndBurnRoles:test_GrantMintAndBurnRoles() (gas: 121216) +FactoryBurnMintERC20_grantRole:test_GrantBurnAccess() (gas: 53386) +FactoryBurnMintERC20_grantRole:test_GrantMany() (gas: 961708) +FactoryBurnMintERC20_grantRole:test_GrantMintAccess() (gas: 94181) +FactoryBurnMintERC20_increaseApproval:test_IncreaseApproval() (gas: 44421) +FactoryBurnMintERC20_mint:test_BasicMint() (gas: 149826) +FactoryBurnMintERC20_mint:test_RevertWhen_MaxSupplyExceededs() (gas: 50711) +FactoryBurnMintERC20_mint:test_RevertWhen_SenderNotMinters() (gas: 11373) +FactoryBurnMintERC20_supportsInterface:test_SupportsInterface() (gas: 11539) +FactoryBurnMintERC20_transfer:test_RevertWhen_InvalidAddresss() (gas: 10723) +FactoryBurnMintERC20_transfer:test_Transfer() (gas: 42505) +FeeQuoter_applyDestChainConfigUpdates:testFuzz_applyDestChainConfigUpdates_Success((uint64,(bool,uint16,uint32,uint32,uint32,uint16,uint32,uint16,uint16,uint16,uint32,uint32,uint64,uint32,uint32,bool,bytes4))) (runs: 257, μ: 95942, ~: 96402) +FeeQuoter_applyDestChainConfigUpdates:test_RevertWhen_InvalidChainFamilySelector() (gas: 16946) +FeeQuoter_applyDestChainConfigUpdates:test_RevertWhen_InvalidDestChainConfigDestChainSelectorEqZero() (gas: 16857) +FeeQuoter_applyDestChainConfigUpdates:test_RevertWhen_applyDestChainConfigUpdatesDefaultTxGasLimitEqZero() (gas: 16877) +FeeQuoter_applyDestChainConfigUpdates:test_RevertWhen_applyDestChainConfigUpdatesDefaultTxGasLimitGtMaxPerMessageGasLimit() (gas: 41471) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates() (gas: 141541) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesZeroInput() (gas: 12536) +FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates() (gas: 162691) +FeeQuoter_applyFeeTokensUpdates:test_RevertWhen_OnlyCallableByOwner() (gas: 12203) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:testFuzz_applyPremiumMultiplierWeiPerEthUpdates_Success((address,uint64)) (runs: 257, μ: 38919, ~: 39307) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_RevertWhen_OnlyCallableByOwnerOrAdmin() (gas: 11506) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesMultipleTokens() (gas: 54793) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesSingleToken() (gas: 45276) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesZeroInput() (gas: 12380) +FeeQuoter_applyTokenTransferFeeConfigUpdates:testFuzz_ApplyTokenTransferFeeConfig_Success((uint32,uint32,uint16,uint32,uint32,bool)[2]) (runs: 257, μ: 159579, ~: 159632) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeConfig() (gas: 88736) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeZeroInput() (gas: 13218) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_RevertWhen_InvalidDestBytesOverhead() (gas: 17189) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_RevertWhen_OnlyCallableByOwnerOrAdmin() (gas: 12305) +FeeQuoter_constructor:test_RevertWhen_InvalidLinkTokenEqZeroAddress() (gas: 106818) +FeeQuoter_constructor:test_RevertWhen_InvalidMaxFeeJuelsPerMsg() (gas: 111147) +FeeQuoter_constructor:test_RevertWhen_InvalidStalenessThreshold() (gas: 111179) +FeeQuoter_constructor:test_Setup() (gas: 5039899) +FeeQuoter_convertTokenAmount:testFuzz_ConvertTokenAmount_Success(uint256,uint224,uint160,uint224) (runs: 257, μ: 85620, ~: 85328) +FeeQuoter_convertTokenAmount:test_ConvertTokenAmount() (gas: 68417) +FeeQuoter_convertTokenAmount:test_RevertWhen_LinkTokenNotSupported() (gas: 29299) +FeeQuoter_getDataAvailabilityCost:testFuzz_CalculateDataAvailabilityCost_Success(uint64,uint32,uint16,uint16,uint112,uint64,uint32,uint32) (runs: 257, μ: 82788, ~: 82933) +FeeQuoter_getDataAvailabilityCost:testFuzz_ZeroDataAvailabilityGasPriceAlwaysCalculatesZeroDataAvailabilityCost_Success(uint64,uint32,uint32) (runs: 257, μ: 15228, ~: 15228) +FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost() (gas: 96377) +FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost() (gas: 21075) +FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCostUnsupportedDestChainSelector() (gas: 14836) +FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices() (gas: 73123) +FeeQuoter_getTokenAndGasPrices:test_RevertWhen_StaleGasPrice() (gas: 26493) +FeeQuoter_getTokenAndGasPrices:test_RevertWhen_UnsupportedChain() (gas: 16218) +FeeQuoter_getTokenAndGasPrices:test_StalenessCheckDisabled() (gas: 111926) +FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice() (gas: 109013) +FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed() (gas: 68180) +FeeQuoter_getTokenPrice:test_GetTokenPrice_LocalMoreRecent() (gas: 33568) +FeeQuoter_getTokenPrices:test_GetTokenPrices() (gas: 78534) +FeeQuoter_getTokenTransferCost:testFuzz_TokenTransferFeeDuplicateTokens_Success(uint256,uint256) (runs: 257, μ: 60683, ~: 60696) +FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee() (gas: 37322) +FeeQuoter_getTokenTransferCost:test_FeeTokenBpsFee() (gas: 35101) +FeeQuoter_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas() (gas: 28149) +FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee() (gas: 96077) +FeeQuoter_getTokenTransferCost:test_NoTokenTransferChargesZeroFee() (gas: 20587) +FeeQuoter_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas() (gas: 27978) +FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas() (gas: 27979) +FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee() (gas: 40537) +FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults() (gas: 29706) +FeeQuoter_getValidatedFee:testFuzz_EnforceOutOfOrder(bool,bool) (runs: 257, μ: 55615, ~: 55054) +FeeQuoter_getValidatedFee:test_EmptyMessage() (gas: 83608) +FeeQuoter_getValidatedFee:test_HighGasMessage() (gas: 240058) +FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer() (gas: 143671) +FeeQuoter_getValidatedFee:test_RevertWhen_DestinationChainNotEnabled() (gas: 18472) +FeeQuoter_getValidatedFee:test_RevertWhen_EnforceOutOfOrder() (gas: 53397) +FeeQuoter_getValidatedFee:test_RevertWhen_InvalidEVMAddress() (gas: 22662) +FeeQuoter_getValidatedFee:test_RevertWhen_MessageGasLimitTooHigh() (gas: 29930) +FeeQuoter_getValidatedFee:test_RevertWhen_MessageTooLarge() (gas: 100430) +FeeQuoter_getValidatedFee:test_RevertWhen_NotAFeeToken() (gas: 21298) +FeeQuoter_getValidatedFee:test_RevertWhen_TooManyTokens() (gas: 23419) +FeeQuoter_getValidatedFee:test_SingleTokenMessage() (gas: 115178) +FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier() (gas: 63919) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPrice() (gas: 58905) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed() (gas: 65115) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals() (gas: 1897724) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals() (gas: 1897766) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals() (gas: 1877822) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals() (gas: 1897564) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals() (gas: 1897700) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value() (gas: 1897534) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod() (gas: 65233) +FeeQuoter_getValidatedTokenPrice:test_RevertWhen_OverflowFeedPrice() (gas: 1897163) +FeeQuoter_getValidatedTokenPrice:test_RevertWhen_TokenNotSupported() (gas: 14182) +FeeQuoter_getValidatedTokenPrice:test_RevertWhen_TokenNotSupportedFeed() (gas: 116988) +FeeQuoter_getValidatedTokenPrice:test_RevertWhen_UnderflowFeedPrice() (gas: 1895862) +FeeQuoter_getValidatedTokenPrice:test_StaleFeeToken() (gas: 61854) +FeeQuoter_onReport:test_OnReport_SkipPriceUpdateWhenStaleUpdateReceived() (gas: 52631) +FeeQuoter_onReport:test_RevertWhen_onReportWhen_InvalidForwarder() (gas: 29701) +FeeQuoter_onReport:test_RevertWhen_onReportWhen_TokenNotSupported() (gas: 35418) +FeeQuoter_onReport:test_onReport() (gas: 89096) +FeeQuoter_onReport:test_onReport_withKeystoneForwarderContract() (gas: 122724) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsDefault() (gas: 17207) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV1() (gas: 18283) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV2() (gas: 18391) +FeeQuoter_parseEVMExtraArgsFromBytes:test_RevertWhen_EVMExtraArgsEnforceOutOfOrder() (gas: 21263) +FeeQuoter_parseEVMExtraArgsFromBytes:test_RevertWhen_EVMExtraArgsGasLimitTooHigh() (gas: 18373) +FeeQuoter_parseEVMExtraArgsFromBytes:test_RevertWhen_EVMExtraArgsInvalidExtraArgsTag() (gas: 17849) +FeeQuoter_processMessageArgs:test_RevertWhen_applyTokensTransferFeeConfigUpdates_InvalidFeeRange() (gas: 21152) +FeeQuoter_processMessageArgs:test_RevertWhen_processMessageArgs_InvalidEVMAddressDestToken() (gas: 44980) +FeeQuoter_processMessageArgs:test_RevertWhen_processMessageArgs_InvalidExtraArgs() (gas: 19980) +FeeQuoter_processMessageArgs:test_RevertWhen_processMessageArgs_MalformedEVMExtraArgs() (gas: 20408) +FeeQuoter_processMessageArgs:test_RevertWhen_processMessageArgs_MessageFeeTooHigh() (gas: 17972) +FeeQuoter_processMessageArgs:test_RevertWhen_processMessageArgs_SourceTokenDataTooLarge() (gas: 123241) +FeeQuoter_processMessageArgs:test_RevertWhen_processMessageArgs_TokenAmountArraysMismatching() (gas: 42284) +FeeQuoter_processMessageArgs:test_processMessageArgs_WitEVMExtraArgsV2() (gas: 28669) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithConvertedTokenAmount() (gas: 30001) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithCorrectPoolReturnData() (gas: 76624) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithEVMExtraArgsV1() (gas: 28300) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithEmptyEVMExtraArgs() (gas: 26158) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithLinkTokenAmount() (gas: 19641) +FeeQuoter_supportsInterface:test_SupportsInterface() (gas: 13264) +FeeQuoter_updatePrices:test_OnlyGasPrice() (gas: 23912) +FeeQuoter_updatePrices:test_OnlyTokenPrice() (gas: 28761) +FeeQuoter_updatePrices:test_RevertWhen_OnlyCallableByUpdater() (gas: 12255) +FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller() (gas: 74821) +FeeQuoter_updatePrices:test_UpdateMultiplePrices() (gas: 146024) +FeeQuoter_updateTokenPriceFeeds:test_FeedNotUpdated() (gas: 52517) +FeeQuoter_updateTokenPriceFeeds:test_FeedUnset() (gas: 66506) +FeeQuoter_updateTokenPriceFeeds:test_MultipleFeedUpdate() (gas: 93647) +FeeQuoter_updateTokenPriceFeeds:test_RevertWhen_FeedUpdatedByNonOwner() (gas: 20053) +FeeQuoter_updateTokenPriceFeeds:test_SingleFeedUpdate() (gas: 53215) +FeeQuoter_updateTokenPriceFeeds:test_ZeroFeeds() (gas: 12471) +FeeQuoter_validateDestFamilyAddress:test_RevertWhen_InvalidEVMAddress() (gas: 10985) +FeeQuoter_validateDestFamilyAddress:test_RevertWhen_InvalidEVMAddressEncodePacked() (gas: 10744) +FeeQuoter_validateDestFamilyAddress:test_RevertWhen_InvalidEVMAddressPrecompiles() (gas: 4055822) +FeeQuoter_validateDestFamilyAddress:test_ValidEVMAddress() (gas: 6789) +FeeQuoter_validateDestFamilyAddress:test_ValidNonEVMAddress() (gas: 6514) +HybridLockReleaseUSDCTokenPool_TransferLiquidity:test_RevertWhen_cannotTransferLiquidityDuringPendingMigration() (gas: 176881) +HybridLockReleaseUSDCTokenPool_TransferLiquidity:test_transferLiquidity() (gas: 167013) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_PrimaryMechanism() (gas: 130356) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_RevertWhen_WhileMigrationPause() (gas: 109804) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_onLockReleaseMechanism() (gas: 140104) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_onLockReleaseMechanism_thenSwitchToPrimary() (gas: 202967) +HybridLockReleaseUSDCTokenPool_releaseOrMint:test_OnLockReleaseMechanism() (gas: 206218) +HybridLockReleaseUSDCTokenPool_releaseOrMint:test_RevertWhen_WhileMigrationPause() (gas: 102796) +HybridLockReleaseUSDCTokenPool_releaseOrMint:test_incomingMessageWithPrimaryMechanism() (gas: 260387) +LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity() (gas: 3222607) +LockReleaseTokenPool_lockOrBurn:testFuzz_LockOrBurnNoAllowList_Success(uint256) (runs: 257, μ: 52322, ~: 52056) +LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList() (gas: 72828) +LockReleaseTokenPool_lockOrBurn:test_RevertWhen_LockOrBurnWithAllowList() (gas: 22923) +LockReleaseTokenPool_lockOrBurn:test_RevertWhen_PoolBurnRevertNotHealthy() (gas: 32449) +LockReleaseTokenPool_provideLiquidity:testFuzz_ExceedsAllowance(uint256) (runs: 257, μ: 17797, ~: 17797) +LockReleaseTokenPool_provideLiquidity:testFuzz_ProvideLiquidity_Success(uint256) (runs: 257, μ: 60147, ~: 60401) +LockReleaseTokenPool_provideLiquidity:test_RevertWhen_LiquidityNotAccepted() (gas: 3218910) +LockReleaseTokenPool_provideLiquidity:test_RevertWhen_Unauthorized() (gas: 11489) +LockReleaseTokenPool_releaseOrMint:testFuzz_ReleaseOrMint_Success(address,uint256) (runs: 257, μ: 222227, ~: 232806) +LockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint() (gas: 217898) +LockReleaseTokenPool_releaseOrMint:test_RevertWhen_ChainNotAllowed() (gas: 68535) +LockReleaseTokenPool_releaseOrMint:test_RevertWhen_PoolMintNotHealthy() (gas: 27918) +LockReleaseTokenPool_setRebalancer:test_RevertWhen_SetRebalancer() (gas: 11003) +LockReleaseTokenPool_setRebalancer:test_SetRebalancer() (gas: 18183) +LockReleaseTokenPool_supportsInterface:test_SupportsInterface() (gas: 10251) +LockReleaseTokenPool_transferLiquidity:test_RevertWhen_transferLiquidity_transferTooMuch() (gas: 56079) +LockReleaseTokenPool_transferLiquidity:test_transferLiquidity() (gas: 83263) +LockReleaseTokenPool_withdrawalLiquidity:testFuzz_WithdrawalLiquidity_Success(uint256) (runs: 257, μ: 64793, ~: 65147) +LockReleaseTokenPool_withdrawalLiquidity:test_RevertWhen_InsufficientLiquidity() (gas: 60197) +LockReleaseTokenPool_withdrawalLiquidity:test_RevertWhen_Unauthorized() (gas: 11420) +MerkleMultiProofTest:testFuzz_MerkleMulti1of4(bytes32,bytes32,bytes32) (runs: 257, μ: 9909, ~: 9908) +MerkleMultiProofTest:testFuzz_MerkleMulti2of4(bytes32,bytes32,bytes32,bytes32) (runs: 257, μ: 11613, ~: 11618) +MerkleMultiProofTest:testFuzz_MerkleMulti3of4(bytes32,bytes32,bytes32,bytes32) (runs: 257, μ: 11629, ~: 11633) +MerkleMultiProofTest:testFuzz_MerkleMulti4of4(bytes32,bytes32,bytes32,bytes32) (runs: 257, μ: 11585, ~: 11590) +MerkleMultiProofTest:testFuzz_MerkleRoot2(bytes32,bytes32) (runs: 257, μ: 8140, ~: 8145) +MerkleMultiProofTest:test_CVE_2023_34459() (gas: 5456) +MerkleMultiProofTest:test_MerkleRoot256() (gas: 396915) +MerkleMultiProofTest:test_MerkleRootSingleLeaf() (gas: 3684) +MerkleMultiProofTest:test_RevertWhen_EmptyLeaf() (gas: 3563) +MerkleMultiProofTest:test_SpecSync_gas() (gas: 34152) +MessageTransformerOffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageTransformer() (gas: 62268) +MessageTransformerOffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageTransformer_RevertWhen_UnknownChain() (gas: 54475) +MessageTransformerOnRamp_forwardFromRouter:test_MessageTransformerError_Revert() (gas: 206072) +MessageTransformerOnRamp_forwardFromRouter:test_forwardFromRouter_WithMessageTransformer_Success() (gas: 244553) +MockRouterTest:test_RevertWhen_ccipSendWithInsufficientNativeTokens() (gas: 34041) +MockRouterTest:test_RevertWhen_ccipSendWithInvalidEVMExtraArgs() (gas: 106708) +MockRouterTest:test_RevertWhen_ccipSendWithInvalidMsgValue() (gas: 60855) +MockRouterTest:test_RevertWhen_ccipSendWithLinkFeeTokenbutInsufficientAllowance() (gas: 63473) +MockRouterTest:test_ccipSendWithEVMExtraArgsV1() (gas: 110081) +MockRouterTest:test_ccipSendWithEVMExtraArgsV2() (gas: 132594) +MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue() (gas: 126679) +MockRouterTest:test_ccipSendWithSufficientNativeFeeTokens() (gas: 44038) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigs() (gas: 317373) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigsBothLanes() (gas: 134278) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_RevertWhen_ConfigRateMoreThanCapacity() (gas: 16608) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_RevertWhen_ConfigRateZero() (gas: 16688) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_RevertWhen_DiableConfigCapacityNonZero() (gas: 16663) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_RevertWhen_DisableConfigRateNonZero() (gas: 16624) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_RevertWhen_OnlyCallableByOwner() (gas: 17496) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_RevertWhen_ZeroChainSelector() (gas: 17186) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfig() (gas: 76755) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfigOutbound() (gas: 76797) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfig() (gas: 54084) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfigWithNoDifference() (gas: 38924) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroConfigs() (gas: 12505) +MultiAggregateRateLimiter_constructor:test_Constructor() (gas: 2102740) +MultiAggregateRateLimiter_constructor:test_ConstructorNoAuthorizedCallers() (gas: 1986594) +MultiAggregateRateLimiter_getTokenBucket:test_GetTokenBucket() (gas: 30888) +MultiAggregateRateLimiter_getTokenBucket:test_Refill() (gas: 48378) +MultiAggregateRateLimiter_getTokenBucket:test_RevertWhen_TimeUnderflow() (gas: 15914) +MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue() (gas: 17616) +MultiAggregateRateLimiter_getTokenValue:test_RevertWhen_NoTokenPrices() (gas: 21707) +MultiAggregateRateLimiter_onInboundMessage:test_RevertWhen_ValidateMessageFromUnauthorizedCaller() (gas: 14746) +MultiAggregateRateLimiter_onInboundMessage:test_RevertWhen_ValidateMessageWithRateLimitExceeded() (gas: 46815) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains() (gas: 211462) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken() (gas: 58832) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithNoTokens() (gas: 17918) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitDisabled() (gas: 45460) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset() (gas: 77765) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens() (gas: 50967) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains() (gas: 310077) +MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes() (gas: 51611) +MultiAggregateRateLimiter_onOutboundMessage:test_RevertWhen_onOutboundMessage_ValidateMessageFromUnauthorizedCaller() (gas: 15956) +MultiAggregateRateLimiter_onOutboundMessage:test_RevertWhen_onOutboundMessage_ValidateMessageWithRateLimitExceeded() (gas: 48480) +MultiAggregateRateLimiter_onOutboundMessage:test_ValidateMessageWithNoTokens() (gas: 19379) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains() (gas: 211014) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken() (gas: 60544) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitDisabled() (gas: 47112) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset() (gas: 78506) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens() (gas: 52677) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains() (gas: 309835) +MultiAggregateRateLimiter_setFeeQuoter:test_Owner() (gas: 19146) +MultiAggregateRateLimiter_setFeeQuoter:test_RevertWhen_OnlyOwner() (gas: 11022) +MultiAggregateRateLimiter_setFeeQuoter:test_RevertWhen_ZeroAddress() (gas: 10632) +MultiAggregateRateLimiter_updateRateLimitTokens:test_RevertWhen_NonOwner() (gas: 18969) +MultiAggregateRateLimiter_updateRateLimitTokens:test_RevertWhen_ZeroDestToken() (gas: 18478) +MultiAggregateRateLimiter_updateRateLimitTokens:test_RevertWhen_ZeroDestToken_AbiEncoded() (gas: 14157) +MultiAggregateRateLimiter_updateRateLimitTokens:test_RevertWhen_ZeroSourceToken() (gas: 18385) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensMultipleChains() (gas: 281364) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensSingleChain() (gas: 255770) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_AddsAndRemoves() (gas: 205543) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_RemoveNonExistentToken() (gas: 29151) +MultiOCR3Base_setOCR3Configs:testFuzz_SetConfig_Success((bytes32,uint8,uint8,bool,address[],address[]),uint64) (runs: 256, μ: 12400698, ~: 12155010) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_FMustBePositive() (gas: 59437) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_FTooHigh() (gas: 44086) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_MoreTransmittersThanSigners() (gas: 104799) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_NoTransmitters() (gas: 18732) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_RepeatSignerAddress() (gas: 283771) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_RepeatTransmitterAddress() (gas: 422464) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_SignerCannotBeZeroAddress() (gas: 141821) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_StaticConfigChange() (gas: 807733) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_TooManySigners() (gas: 160363) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_TooManyTransmitters() (gas: 113853) +MultiOCR3Base_setOCR3Configs:test_RevertWhen_TransmitterCannotBeZeroAddress() (gas: 254113) +MultiOCR3Base_setOCR3Configs:test_SetConfigIgnoreSigners() (gas: 512335) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithSigners() (gas: 829238) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithSignersMismatchingTransmitters() (gas: 680660) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithoutSigners() (gas: 457485) +MultiOCR3Base_setOCR3Configs:test_SetConfigsZeroInput() (gas: 12437) +MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs() (gas: 2142785) +MultiOCR3Base_setOCR3Configs:test_UpdateConfigSigners() (gas: 861909) +MultiOCR3Base_setOCR3Configs:test_UpdateConfigTransmittersWithoutSigners() (gas: 476109) +MultiOCR3Base_transmit:testFuzz_TransmitSignersWithSignatures_Success(uint8,uint64) (runs: 257, μ: 23602, ~: 24163) +MultiOCR3Base_transmit:test_RevertWhen_ConfigDigestMismatch() (gas: 42722) +MultiOCR3Base_transmit:test_RevertWhen_ForkedChain() (gas: 48346) +MultiOCR3Base_transmit:test_RevertWhen_InsufficientSignatures() (gas: 76942) +MultiOCR3Base_transmit:test_RevertWhen_NonUniqueSignature() (gas: 65634) +MultiOCR3Base_transmit:test_RevertWhen_SignatureOutOfRegistration() (gas: 33353) +MultiOCR3Base_transmit:test_RevertWhen_TooManySignatures() (gas: 79590) +MultiOCR3Base_transmit:test_RevertWhen_TransmitWithExtraCalldataArgs() (gas: 47094) +MultiOCR3Base_transmit:test_RevertWhen_TransmitWithLessCalldataArgs() (gas: 25585) +MultiOCR3Base_transmit:test_RevertWhen_UnAuthorizedTransmitter() (gas: 24160) +MultiOCR3Base_transmit:test_RevertWhen_UnauthorizedSigner() (gas: 60984) +MultiOCR3Base_transmit:test_RevertWhen_UnconfiguredPlugin() (gas: 39758) +MultiOCR3Base_transmit:test_RevertWhen_ZeroSignatures() (gas: 32898) +MultiOCR3Base_transmit:test_TransmitSigners_gas() (gas: 33559) +MultiOCR3Base_transmit:test_TransmitWithoutSignatureVerification_gas() (gas: 18638) +NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 123595) +NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed() (gas: 45935) +NonceManager_applyPreviousRampsUpdates:test_RevertWhen_applyPreviousRampsUpdatesWhen_PreviousRampAlreadySetOffRamp() (gas: 43351) +NonceManager_applyPreviousRampsUpdates:test_RevertWhen_applyPreviousRampsUpdatesWhen_PreviousRampAlreadySetOnRamp() (gas: 43173) +NonceManager_applyPreviousRampsUpdates:test_RevertWhen_applyPreviousRampsUpdatesWhen_PreviousRampAlreadySetOnRampAndOffRamp_Revert() (gas: 64724) +NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate() (gas: 66937) +NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12145) +NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 179151) +NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 146340) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 182621) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 245579) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 213980) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedSenderNoncesReadsPreviousRamp() (gas: 60418) +NonceManager_getIncrementedOutboundNonce:test_getIncrementedOutboundNonce() (gas: 37974) +NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce() (gas: 38746) +NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce_SkippedIncorrectNonce() (gas: 23739) +NonceManager_getIncrementedOutboundNonce:test_incrementNoncesInboundAndOutbound() (gas: 71886) +NonceManager_getOutboundNonce:test_getOutboundNonce_Upgrade() (gas: 105567) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceNewSenderStartsAtZero() (gas: 166712) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceStartsAtV1Nonce() (gas: 196745) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeSenderNoncesReadsPreviousRamp() (gas: 141040) +OffRamp_afterOC3ConfigSet:test_RevertWhen_afterOCR3ConfigSet_SignatureVerificationDisabled() (gas: 5978190) +OffRamp_applySourceChainConfigUpdates:testFuzz_applySourceChainConfigUpdate_Success((address,uint64,bool,bytes)) (runs: 33, μ: 300644, ~: 288337) +OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains() (gas: 626140) +OffRamp_applySourceChainConfigUpdates:test_AddNewChain() (gas: 166441) +OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates() (gas: 16671) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain() (gas: 180998) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp() (gas: 168513) +OffRamp_applySourceChainConfigUpdates:test_RevertWhen_InvalidOnRampUpdate() (gas: 274542) +OffRamp_applySourceChainConfigUpdates:test_RevertWhen_RouterAddress() (gas: 13427) +OffRamp_applySourceChainConfigUpdates:test_RevertWhen_ZeroOnRampAddress() (gas: 72716) +OffRamp_applySourceChainConfigUpdates:test_RevertWhen_ZeroSourceChainSelector() (gas: 15483) +OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed() (gas: 284861) +OffRamp_batchExecute:test_MultipleReportsDifferentChains() (gas: 326763) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain() (gas: 171097) +OffRamp_batchExecute:test_MultipleReportsSameChain() (gas: 270062) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate() (gas: 162056) +OffRamp_batchExecute:test_RevertWhen_OutOfBoundsGasLimitsAccess() (gas: 181295) +OffRamp_batchExecute:test_RevertWhen_ZeroReports() (gas: 10643) +OffRamp_batchExecute:test_SingleReport() (gas: 149862) +OffRamp_batchExecute:test_Unhealthy() (gas: 533830) +OffRamp_ccipReceive:test_RevertWhen_Always() (gas: 9253) +OffRamp_commit:test_OnlyGasPriceUpdates() (gas: 112973) +OffRamp_commit:test_OnlyTokenPriceUpdates() (gas: 112927) +OffRamp_commit:test_PriceSequenceNumberCleared() (gas: 355361) +OffRamp_commit:test_ReportAndPriceUpdate() (gas: 164209) +OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 141051) +OffRamp_commit:test_RevertWhen_CommitOnRampMismatch() (gas: 92591) +OffRamp_commit:test_RevertWhen_FailedRMNVerifications() (gas: 63304) +OffRamp_commit:test_RevertWhen_InvalidInterval() (gas: 65947) +OffRamp_commit:test_RevertWhen_InvalidIntervalMinLargerThanMax() (gas: 69745) +OffRamp_commit:test_RevertWhen_InvalidRoot() (gas: 64997) +OffRamp_commit:test_RevertWhen_NoConfig() (gas: 6322647) +OffRamp_commit:test_RevertWhen_NoConfigWithOtherConfigPresent() (gas: 6739333) +OffRamp_commit:test_RevertWhen_OnlyPriceUpdateStaleReport() (gas: 121016) +OffRamp_commit:test_RevertWhen_RootAlreadyCommitted() (gas: 147858) +OffRamp_commit:test_RevertWhen_SourceChainNotEnabled() (gas: 61419) +OffRamp_commit:test_RevertWhen_UnauthorizedTransmitter() (gas: 125315) +OffRamp_commit:test_RevertWhen_Unhealthy() (gas: 60260) +OffRamp_commit:test_RevertWhen_ZeroEpochAndRound() (gas: 53376) +OffRamp_commit:test_RootWithRMNDisabled() (gas: 153873) +OffRamp_commit:test_StaleReportWithRoot() (gas: 232101) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot() (gas: 206722) +OffRamp_constructor:test_Constructor() (gas: 6285149) +OffRamp_constructor:test_RevertWhen_SourceChainSelector() (gas: 137198) +OffRamp_constructor:test_RevertWhen_ZeroChainSelector() (gas: 103925) +OffRamp_constructor:test_RevertWhen_ZeroNonceManager() (gas: 101774) +OffRamp_constructor:test_RevertWhen_ZeroOnRampAddress() (gas: 162635) +OffRamp_constructor:test_RevertWhen_ZeroRMNRemote() (gas: 101626) +OffRamp_constructor:test_RevertWhen_ZeroTokenAdminRegistry() (gas: 101717) +OffRamp_execute:test_LargeBatch() (gas: 3381210) +OffRamp_execute:test_MultipleReports() (gas: 292193) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures() (gas: 365511) +OffRamp_execute:test_RevertWhen_IncorrectArrayType() (gas: 17510) +OffRamp_execute:test_RevertWhen_NoConfig() (gas: 6365280) +OffRamp_execute:test_RevertWhen_NoConfigWithOtherConfigPresent() (gas: 7140878) +OffRamp_execute:test_RevertWhen_NonArray() (gas: 27531) +OffRamp_execute:test_RevertWhen_UnauthorizedTransmitter() (gas: 141105) +OffRamp_execute:test_RevertWhen_WrongConfigWithSigners() (gas: 7039258) +OffRamp_execute:test_RevertWhen_ZeroReports() (gas: 17220) +OffRamp_execute:test_SingleReport() (gas: 169095) +OffRamp_executeSingleMessage:test_RevertWhen_executeSingleMessageWhen_MessageSender() (gas: 18659) +OffRamp_executeSingleMessage:test_RevertWhen_executeSingleMessageWhen_MessageValidationError() (gas: 85780) +OffRamp_executeSingleMessage:test_RevertWhen_executeSingleMessageWhen_TokenHandlingError() (gas: 109569) +OffRamp_executeSingleMessage:test_RevertWhen_executeSingleMessageWhen_WithFailingValidationNoRouterCall() (gas: 213065) +OffRamp_executeSingleMessage:test_RevertWhen_executeSingleMessageWhen_ZeroGasDONExecution() (gas: 44705) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 51855) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 20758) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 230669) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 87710) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 260187) +OffRamp_executeSingleReport:testFuzz_InterleavingOrderedAndUnorderedMessages_Success(bool[7]) (runs: 257, μ: 1323107, ~: 1324654) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 455857) +OffRamp_executeSingleReport:test_ReceiverError() (gas: 181042) +OffRamp_executeSingleReport:test_RevertWhen_DisabledSourceChain() (gas: 28685) +OffRamp_executeSingleReport:test_RevertWhen_EmptyReport() (gas: 15448) +OffRamp_executeSingleReport:test_RevertWhen_ManualExecutionNotYetEnabled() (gas: 48264) +OffRamp_executeSingleReport:test_RevertWhen_MismatchingDestChainSelector() (gas: 34092) +OffRamp_executeSingleReport:test_RevertWhen_NonExistingSourceChain() (gas: 28846) +OffRamp_executeSingleReport:test_RevertWhen_RetryFailedMessageWithoutManualExecution() (gas: 191223) +OffRamp_executeSingleReport:test_RevertWhen_RootNotCommitted() (gas: 40672) +OffRamp_executeSingleReport:test_RevertWhen_RouterYULCall() (gas: 401539) +OffRamp_executeSingleReport:test_RevertWhen_TokenDataMismatch() (gas: 73753) +OffRamp_executeSingleReport:test_RevertWhen_UnexpectedTokenData() (gas: 26847) +OffRamp_executeSingleReport:test_RevertWhen_UnhealthySingleChainCurse() (gas: 529474) +OffRamp_executeSingleReport:test_SingleMessageNoTokens() (gas: 205760) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain() (gas: 241847) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered() (gas: 185753) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver() (gas: 244165) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 134901) +OffRamp_executeSingleReport:test_SkippedIncorrectNonce() (gas: 58298) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes() (gas: 392646) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE() (gas: 562931) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 511312) +OffRamp_executeSingleReport:test_Unhealthy() (gas: 529453) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain() (gas: 439803) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage() (gas: 158283) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered() (gas: 128667) +OffRamp_getExecutionState:testFuzz_Differential_Success(uint64,uint16[500],uint8[500]) (runs: 33, μ: 8333210, ~: 7822501) +OffRamp_getExecutionState:test_FillExecutionState() (gas: 3955662) +OffRamp_getExecutionState:test_GetDifferentChainExecutionState() (gas: 121311) +OffRamp_getExecutionState:test_GetExecutionState() (gas: 90102) +OffRamp_manuallyExecute:test_RevertWhen_ManualExecGasLimitMismatchSingleReport() (gas: 81957) +OffRamp_manuallyExecute:test_RevertWhen_manuallyExecute_DestinationGasAmountCountMismatch() (gas: 74376) +OffRamp_manuallyExecute:test_RevertWhen_manuallyExecute_FailedTx() (gas: 199803) +OffRamp_manuallyExecute:test_RevertWhen_manuallyExecute_ForkedChain() (gas: 27282) +OffRamp_manuallyExecute:test_RevertWhen_manuallyExecute_GasLimitMismatchMultipleReports() (gas: 166416) +OffRamp_manuallyExecute:test_RevertWhen_manuallyExecute_InvalidReceiverExecutionGasLimit() (gas: 27780) +OffRamp_manuallyExecute:test_RevertWhen_manuallyExecute_InvalidTokenGasOverride() (gas: 55328) +OffRamp_manuallyExecute:test_RevertWhen_manuallyExecute_MultipleReportsWithSingleCursedLane() (gas: 294781) +OffRamp_manuallyExecute:test_RevertWhen_manuallyExecute_SourceChainSelectorMismatch() (gas: 158710) +OffRamp_manuallyExecute:test_manuallyExecute() (gas: 212859) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched() (gas: 165988) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit() (gas: 479635) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails() (gas: 2229911) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride() (gas: 213409) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride() (gas: 734673) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages() (gas: 337996) +OffRamp_releaseOrMintSingleToken:test_RevertWhen__releaseOrMintSingleToken_NotACompatiblePool() (gas: 37627) +OffRamp_releaseOrMintSingleToken:test_RevertWhen_releaseOrMintSingleTokenWhen_TokenHandlingError_transfer() (gas: 75429) +OffRamp_releaseOrMintSingleToken:test_RevertWhen_releaseOrMintTokenWhen_TokenHandlingError_BalanceOf() (gas: 37412) +OffRamp_releaseOrMintSingleToken:test_RevertWhen_releaseOrMintToken_InvalidDataLength() (gas: 36797) +OffRamp_releaseOrMintSingleToken:test_RevertWhen_releaseOrMintToken_ReleaseOrMintBalanceMismatch() (gas: 84560) +OffRamp_releaseOrMintSingleToken:test_RevertWhen_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool() (gas: 76715) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken() (gas: 94629) +OffRamp_releaseOrMintTokens:testFuzz_releaseOrMintTokens_AnyRevertIsCaught(address) (runs: 1025, μ: 24619, ~: 24619) +OffRamp_releaseOrMintTokens:test_RevertWhen_releaseOrMintTokensWhenInvalidDataLengthReturnData() (gas: 62835) +OffRamp_releaseOrMintTokens:test_RevertWhen_releaseOrMintTokensWhenPoolDoesNotSupportDest() (gas: 71527) +OffRamp_releaseOrMintTokens:test_RevertWhen_releaseOrMintTokensWhen_PoolIsNotAPool() (gas: 23864) +OffRamp_releaseOrMintTokens:test_RevertWhen_releaseOrMintTokensWhen_TokenHandlingError() (gas: 148691) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 161157) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 163023) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 174276) +OffRamp_setDynamicConfig:test_RevertWhen_FeeQuoterZeroAddress() (gas: 11476) +OffRamp_setDynamicConfig:test_RevertWhen_NonOwner() (gas: 13964) +OffRamp_setDynamicConfig:test_SetDynamicConfig() (gas: 25442) +OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor() (gas: 47493) +OffRamp_trialExecute:test_trialExecute() (gas: 263887) +OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 120968) +OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 132278) +OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 282122) +OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy() (gas: 244294) +OnRamp_applyAllowlistUpdates:test_RevertWhen_applyAllowlistUpdates() (gas: 67084) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates() (gas: 325979) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17190) +OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates() (gas: 65874) +OnRamp_applyDestChainConfigUpdates:test_RevertWhen_ApplyDestChainConfigUpdates_WithInvalidChainSelector() (gas: 12885) +OnRamp_constructor:test_Constructor() (gas: 2694375) +OnRamp_constructor:test_RevertWhen_Constructor_EnableAllowList_ForwardFromRouter() (gas: 2616155) +OnRamp_constructor:test_RevertWhen_Constructor_InvalidConfigChainSelectorEqZero() (gas: 95223) +OnRamp_constructor:test_RevertWhen_Constructor_InvalidConfigNonceManagerEqAddressZero() (gas: 93187) +OnRamp_constructor:test_RevertWhen_Constructor_InvalidConfigRMNProxyEqAddressZero() (gas: 98163) +OnRamp_constructor:test_RevertWhen_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero() (gas: 93178) +OnRamp_forwardFromRouter:testFuzz_ForwardFromRouter_Success(address,address,uint96) (runs: 257, μ: 302875, ~: 302831) +OnRamp_forwardFromRouter:test_ForwardFromRouter() (gas: 145675) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2() (gas: 146509) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue() (gas: 115688) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 146073) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 144349) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 146314) +OnRamp_forwardFromRouter:test_ForwardFromRouter_ConfigurableSourceRouter() (gas: 140952) +OnRamp_forwardFromRouter:test_RevertWhen_InvalidExtraArgsTag() (gas: 38513) +OnRamp_forwardFromRouter:test_RevertWhen_MessageFeeTooHigh() (gas: 36646) +OnRamp_forwardFromRouter:test_RevertWhen_MessageInterceptionError() (gas: 143273) +OnRamp_forwardFromRouter:test_RevertWhen_MultiCannotSendZeroTokens() (gas: 36553) +OnRamp_forwardFromRouter:test_RevertWhen_OriginalSender() (gas: 18288) +OnRamp_forwardFromRouter:test_RevertWhen_Paused() (gas: 38497) +OnRamp_forwardFromRouter:test_RevertWhen_Permissions() (gas: 23616) +OnRamp_forwardFromRouter:test_RevertWhen_SourceTokenDataTooLarge() (gas: 4087114) +OnRamp_forwardFromRouter:test_RevertWhen_UnAllowedOriginalSender() (gas: 23970) +OnRamp_forwardFromRouter:test_RevertWhen_UnsupportedToken() (gas: 75871) +OnRamp_forwardFromRouter:test_RevertWhen_forwardFromRouter_UnsupportedToken() (gas: 38580) +OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered() (gas: 187412) +OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce() (gas: 213767) +OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 147320) +OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception() (gas: 275043) +OnRamp_getFee:test_EmptyMessage() (gas: 99005) +OnRamp_getFee:test_GetFeeOfZeroForTokenMessage() (gas: 86961) +OnRamp_getFee:test_RevertWhen_EnforceOutOfOrder() (gas: 65339) +OnRamp_getFee:test_RevertWhen_NotAFeeTokenButPricedToken() (gas: 35142) +OnRamp_getFee:test_RevertWhen_Unhealthy() (gas: 17048) +OnRamp_getFee:test_SingleTokenMessage() (gas: 114125) +OnRamp_getSupportedTokens:test_RevertWhen_GetSupportedTokens() (gas: 10627) +OnRamp_getTokenPool:test_GetTokenPool() (gas: 35382) +OnRamp_setDynamicConfig:test_RevertWhen_setDynamicConfig_InvalidConfigFeeAggregatorEqAddressZero() (gas: 11561) +OnRamp_setDynamicConfig:test_RevertWhen_setDynamicConfig_InvalidConfigFeeQuoterEqAddressZero() (gas: 13197) +OnRamp_setDynamicConfig:test_RevertWhen_setDynamicConfig_InvalidConfigInvalidConfig() (gas: 11570) +OnRamp_setDynamicConfig:test_RevertWhen_setDynamicConfig_InvalidConfigOnlyOwner() (gas: 11964) +OnRamp_setDynamicConfig:test_RevertWhen_setDynamicConfig_InvalidConfigReentrancyGuardEnteredEqTrue() (gas: 13245) +OnRamp_setDynamicConfig:test_setDynamicConfig() (gas: 56650) +OnRamp_withdrawFeeTokens:testFuzz_WithdrawFeeTokens_Success(uint256[5]) (runs: 257, μ: 7228839, ~: 7228839) +OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens() (gas: 125835) +PingPong_ccipReceive:test_CcipReceive() (gas: 166158) +PingPong_setCounterpart:testFuzz_CounterPartAddress_Success(uint64,address) (runs: 257, μ: 22746, ~: 22779) +PingPong_setCounterpartAddress:testFuzz_CounterPartAddress_Success(address) (runs: 257, μ: 16805, ~: 16805) +PingPong_setCounterpartChainSelector:testFuzz_CounterPartChainSelector_Success(uint64) (runs: 257, μ: 14827, ~: 14882) +PingPong_setOutOfOrderExecution:test_OutOfOrderExecution() (gas: 20350) +PingPong_setPaused:test_Pausing() (gas: 17738) +PingPong_startPingPong:test_StartPingPong_With_OOO() (gas: 145309) +PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered() (gas: 170962) +RMNHome_getConfigDigests:test_getConfigDigests() (gas: 1081176) +RMNHome_promoteCandidateAndRevokeActive:test_RevertWhen_promoteCandidateAndRevokeActive_ConfigDigestMismatch() (gas: 23903) +RMNHome_promoteCandidateAndRevokeActive:test_RevertWhen_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed() (gas: 10597) +RMNHome_promoteCandidateAndRevokeActive:test_RevertWhen_promoteCandidateAndRevokeActive_OnlyOwner() (gas: 10821) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive() (gas: 1086556) +RMNHome_revokeCandidate:test_RevertWhen_revokeCandidate_ConfigDigestMismatch() (gas: 19063) +RMNHome_revokeCandidate:test_RevertWhen_revokeCandidate_OnlyOwner() (gas: 10912) +RMNHome_revokeCandidate:test_RevertWhen_revokeCandidate_RevokingZeroDigestNotAllowed() (gas: 10628) +RMNHome_revokeCandidate:test_revokeCandidate() (gas: 28085) +RMNHome_setCandidate:test_RevertWhen_setCandidate_ConfigDigestMismatch() (gas: 599522) +RMNHome_setCandidate:test_RevertWhen_setCandidate_OnlyOwner() (gas: 15186) +RMNHome_setCandidate:test_setCandidate() (gas: 590250) +RMNHome_setDynamicConfig:test_RevertWhen_setDynamicConfig_DigestNotFound() (gas: 30252) +RMNHome_setDynamicConfig:test_RevertWhen_setDynamicConfig_MinObserversTooHigh() (gas: 18938) +RMNHome_setDynamicConfig:test_RevertWhen_setDynamicConfig_OnlyOwner() (gas: 13987) +RMNHome_setDynamicConfig:test_setDynamicConfig() (gas: 105498) +RMNHome_validateStaticAndDynamicConfig:test_RevertWhen_validateStaticAndDynamicConfig_DuplicateOffchainPublicKey() (gas: 19195) +RMNHome_validateStaticAndDynamicConfig:test_RevertWhen_validateStaticAndDynamicConfig_DuplicatePeerId() (gas: 19097) +RMNHome_validateStaticAndDynamicConfig:test_RevertWhen_validateStaticAndDynamicConfig_DuplicateSourceChain() (gas: 20776) +RMNHome_validateStaticAndDynamicConfig:test_RevertWhen_validateStaticAndDynamicConfig_NotEnoughObservers() (gas: 21772) +RMNHome_validateStaticAndDynamicConfig:test_RevertWhen_validateStaticAndDynamicConfig_OutOfBoundsNodesLength() (gas: 148054) +RMNHome_validateStaticAndDynamicConfig:test_RevertWhen_validateStaticAndDynamicConfig_OutOfBoundsObserverNodeIndex() (gas: 20911) +RMNProxy_constructor:test_Constructor() (gas: 302031) +RMNProxy_isCursed:test_IsCursed_GlobalCurseSubject() (gas: 89809) +RMNProxy_isCursed:test_RevertWhen_call_ARMCallEmptyContract() (gas: 19217) +RMNProxy_isCursed:test_isCursed_RevertWhen_isCursedReasonForwarded() (gas: 20011) +RMNProxy_setARM:test_SetARM() (gas: 16599) +RMNProxy_setARM:test_SetARMzero() (gas: 11275) +RMNRemote_constructor:test_constructor() (gas: 8410) +RMNRemote_curse:test_RevertWhen_curse_AlreadyCursed_duplicateSubject() (gas: 154526) +RMNRemote_curse:test_RevertWhen_curse_calledByNonOwner() (gas: 18769) +RMNRemote_curse:test_curse() (gas: 149422) +RMNRemote_global_curses:test_isCursed_globalCurseSubject() (gas: 71707) +RMNRemote_isBlessed:test_RevertWhen_isBlessedWhen_IsBlessedNotAvailable() (gas: 1455432) +RMNRemote_isBlessed:test_isBlessed() (gas: 17588) +RMNRemote_setConfig:test_RevertWhen_setConfig_ZeroValueNotAllowed() (gas: 38023) +RMNRemote_setConfig:test_RevertWhen_setConfig_duplicateOnChainPublicKey() (gas: 320039) +RMNRemote_setConfig:test_RevertWhen_setConfig_invalidSignerOrder() (gas: 76200) +RMNRemote_setConfig:test_RevertWhen_setConfig_notEnoughSigners() (gas: 50305) +RMNRemote_setConfig:test_setConfig_addSigner_removeSigner() (gas: 994169) +RMNRemote_uncurse:test_RevertWhen_uncurse_NotCursed_duplicatedUncurseSubject() (gas: 51924) +RMNRemote_uncurse:test_RevertWhen_uncurse_calledByNonOwner() (gas: 18647) +RMNRemote_uncurse:test_uncurse() (gas: 40136) +RMNRemote_verify_withConfigNotSet:test_RevertWhen_verifys() (gas: 13655) +RMNRemote_verify_withConfigSet:test_verify() (gas: 86470) +RMNRemote_verify_withConfigSet:test_verify_RevertWhen_InvalidSignature() (gas: 85624) +RMNRemote_verify_withConfigSet:test_verify_RevertWhen_OutOfOrderSignatures_duplicateSignature() (gas: 94093) +RMNRemote_verify_withConfigSet:test_verify_RevertWhen_OutOfOrderSignatures_not_sorted() (gas: 100867) +RMNRemote_verify_withConfigSet:test_verify_RevertWhen_ThresholdNotMet() (gas: 303094) +RMNRemote_verify_withConfigSet:test_verify_RevertWhen_UnexpectedSigner() (gas: 437584) +RateLimiter_constructor:test_Constructor() (gas: 19820) +RateLimiter_consume:test_ConsumeAggregateValue() (gas: 31633) +RateLimiter_consume:test_ConsumeTokens() (gas: 20369) +RateLimiter_consume:test_ConsumeUnlimited() (gas: 40923) +RateLimiter_consume:test_Refill() (gas: 37562) +RateLimiter_consume:test_RevertWhen_AggregateValueMaxCapacityExceeded() (gas: 16067) +RateLimiter_consume:test_RevertWhen_AggregateValueRateLimitReached() (gas: 22529) +RateLimiter_consume:test_RevertWhen_ConsumingMoreThanUint128() (gas: 15881) +RateLimiter_consume:test_RevertWhen_RateLimitReachedOverConsecutiveBlocks() (gas: 25881) +RateLimiter_consume:test_RevertWhen_TokenMaxCapacityExceeded() (gas: 18469) +RateLimiter_consume:test_RevertWhen_TokenRateLimitReached() (gas: 24982) +RateLimiter_currentTokenBucketState:test_CurrentTokenBucketState() (gas: 39126) +RateLimiter_currentTokenBucketState:test_Refill() (gas: 47182) +RateLimiter_setTokenBucketConfig:test_SetRateLimiterConfig() (gas: 38645) +RegistryModuleOwnerCustom_constructor:test_RevertWhen_constructor() (gas: 36125) +RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_RevertWhen_registerAccessControlDefaultAdmin() (gas: 20156) +RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_registerAccessControlDefaultAdmin() (gas: 130641) +RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_RevertWhen_registerAdminViaGetCCIPAdmin() (gas: 19819) +RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin() (gas: 130136) +RegistryModuleOwnerCustom_registerAdminViaOwner:test_RevertWhen_registerAdminViaOwner() (gas: 19647) +RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner() (gas: 129941) +Router_applyRampUpdates:testFuzz_applyRampUpdates_OffRampUpdates(address[20]) (runs: 257, μ: 2452358, ~: 2452063) +Router_applyRampUpdates:testFuzz_applyRampUpdates_OnRampUpdates((uint64,address)[]) (runs: 257, μ: 3554066, ~: 3712415) +Router_applyRampUpdates:test_RevertWhen_applyRampUpdatesWhen_OffRampMismatch() (gas: 89626) +Router_applyRampUpdates:test_RevertWhen_applyRampUpdatesWhen_OnlyOwner() (gas: 12367) +Router_applyRampUpdates:test_applyRampUpdates_OffRampUpdatesWithRouting() (gas: 10413055) +Router_applyRampUpdates:test_applyRampUpdates_OnRampDisable() (gas: 56445) +Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 124772) +Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 212207) +Router_ccipSend:test_InvalidMsgValue() (gas: 27856) +Router_ccipSend:test_NativeFeeToken() (gas: 185309) +Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 62458) +Router_ccipSend:test_NativeFeeTokenOverpay() (gas: 186726) +Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 54550) +Router_ccipSend:test_NonLinkFeeToken() (gas: 219896) +Router_ccipSend:test_RevertWhen_FeeTokenAmountTooLow() (gas: 64874) +Router_ccipSend:test_RevertWhen_UnsupportedDestinationChain() (gas: 20452) +Router_ccipSend:test_RevertWhen_WhenNotHealthy() (gas: 18358) +Router_ccipSend:test_WrappedNativeFeeToken() (gas: 187548) +Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 133929) +Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 221408) +Router_constructor:test_Constructor() (gas: 13148) +Router_getArmProxy:test_getArmProxy() (gas: 10573) +Router_getFee:test_GetFeeSupportedChain() (gas: 52021) +Router_getFee:test_RevertWhen_UnsupportedDestinationChain() (gas: 17418) +Router_getSupportedTokens:test_RevertWhen_GetSupportedTokens() (gas: 10627) +Router_recoverTokens:test_RecoverTokens() (gas: 52668) +Router_recoverTokens:test_RevertWhen_RecoverTokensInvalidRecipient() (gas: 11410) +Router_recoverTokens:test_RevertWhen_RecoverTokensNoFunds() (gas: 20221) +Router_recoverTokens:test_RevertWhen_RecoverTokensNonOwner() (gas: 11259) +Router_recoverTokens:test_RevertWhen_RecoverTokensValueReceiver() (gas: 349717) +Router_routeMessage:testFuzz_routeMessage_ExecutionEvent_Success(bytes) (runs: 257, μ: 93191, ~: 83802) +Router_routeMessage:test_RevertWhen_routeMessage_OnlyOffRamp() (gas: 20812) +Router_routeMessage:test_RevertWhen_routeMessage_WhenNotHealthy() (gas: 18224) +Router_routeMessage:test_routeMessage_AutoExec() (gas: 38071) +Router_routeMessage:test_routeMessage_ExecutionEvent() (gas: 153593) +Router_routeMessage:test_routeMessage_ManualExec() (gas: 31120) +Router_setWrappedNative:testFuzz_SetWrappedNative_Success(address) (runs: 257, μ: 16789, ~: 16789) +Router_setWrappedNative:test_RevertWhen_OnlyOwner() (gas: 11052) +TokenAdminRegistry_acceptAdminRole:test_RevertWhen_acceptAdminRole_OnlyPendingAdministrator() (gas: 51465) +TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole() (gas: 44236) +TokenAdminRegistry_addRegistryModule:test_RevertWhen_addRegistryModule_OnlyOwner() (gas: 12681) +TokenAdminRegistry_addRegistryModule:test_addRegistryModule() (gas: 67093) +TokenAdminRegistry_getAllConfiguredTokens:testFuzz_getAllConfiguredTokens_Success(uint8) (runs: 257, μ: 6489724, ~: 3636473) +TokenAdminRegistry_getAllConfiguredTokens:test_getAllConfiguredTokens_outOfBounds() (gas: 11363) +TokenAdminRegistry_getPool:test_getPool() (gas: 17679) +TokenAdminRegistry_getPools:test_getPools() (gas: 40271) +TokenAdminRegistry_isAdministrator:test_isAdministrator() (gas: 106335) +TokenAdminRegistry_proposeAdministrator:testFuzz_proposeAdministrator_Success(address[50],address[50]) (runs: 257, μ: 5962386, ~: 5974044) +TokenAdminRegistry_proposeAdministrator:test_RevertWhen_proposeAdministrator_AlreadyRegistered() (gas: 104411) +TokenAdminRegistry_proposeAdministrator:test_RevertWhen_proposeAdministrator_OnlyRegistryModule() (gas: 15620) +TokenAdminRegistry_proposeAdministrator:test_RevertWhen_proposeAdministrator_ZeroAddress() (gas: 15198) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_module() (gas: 113043) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_owner() (gas: 107992) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_reRegisterWhileUnclaimed() (gas: 116200) +TokenAdminRegistry_removeRegistryModule:test_RevertWhen_removeRegistryModule_OnlyOwner() (gas: 12626) +TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule() (gas: 54757) +TokenAdminRegistry_setPool:test_RevertWhen_setPool_InvalidTokenPoolToken() (gas: 19269) +TokenAdminRegistry_setPool:test_RevertWhen_setPool_OnlyAdministrator() (gas: 18214) +TokenAdminRegistry_setPool:test_setPool() (gas: 36207) +TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool() (gas: 30852) +TokenAdminRegistry_transferAdminRole:test_RevertWhen_transferAdminRole_OnlyAdministrator() (gas: 18179) +TokenAdminRegistry_transferAdminRole:test_transferAdminRole() (gas: 49558) +TokenPoolFactory_constructor:test_RevertWhen_constructor() (gas: 1137307) +TokenPoolFactory_createTokenPool:test_createTokenPoolLockRelease_ExistingToken_predict() (gas: 12646379) +TokenPoolFactory_createTokenPool:test_createTokenPool_BurnFromMintTokenPool() (gas: 6526762) +TokenPoolFactory_createTokenPool:test_createTokenPool_ExistingRemoteToken_AndPredictPool() (gas: 13480657) +TokenPoolFactory_createTokenPool:test_createTokenPool_RemoteTokenHasDifferentDecimals() (gas: 13488141) +TokenPoolFactory_createTokenPool:test_createTokenPool_WithNoExistingRemoteContracts_predict() (gas: 13819502) +TokenPoolFactory_createTokenPool:test_createTokenPool_WithNoExistingTokenOnRemoteChain() (gas: 6315855) +TokenPoolFactory_createTokenPool:test_createTokenPool_WithRemoteTokenAndRemotePool() (gas: 6523352) +TokenPoolWithAllowList_applyAllowListUpdates:test_RevertWhen_AllowListNotEnabled() (gas: 2840476) +TokenPoolWithAllowList_applyAllowListUpdates:test_RevertWhen_OnlyOwner() (gas: 12119) +TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowList() (gas: 178482) +TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero() (gas: 23580) +TokenPoolWithAllowList_getAllowList:test_GetAllowList() (gas: 23908) +TokenPoolWithAllowList_getAllowListEnabled:test_GetAllowListEnabled() (gas: 8386) +TokenPoolWithAllowList_setRouter:test_RevertWhen_ZeroAddressNotAllowed() (gas: 10684) +TokenPoolWithAllowList_setRouter:test_SetRouter() (gas: 24994) +TokenPool_addRemotePool:test_RevertWhen_NonExistentChain() (gas: 14248) +TokenPool_addRemotePool:test_RevertWhen_PoolAlreadyAdded() (gas: 117153) +TokenPool_addRemotePool:test_RevertWhen_ZeroLengthAddressNotAllowed() (gas: 13991) +TokenPool_addRemotePool:test_addRemotePool() (gas: 157121) +TokenPool_addRemotePool:test_addRemotePool_MultipleActive() (gas: 453937) +TokenPool_applyChainUpdates:test_RevertWhen_applyChainUpdates_InvalidRateLimitRate() (gas: 455571) +TokenPool_applyChainUpdates:test_RevertWhen_applyChainUpdates_NonExistentChain() (gas: 15006) +TokenPool_applyChainUpdates:test_RevertWhen_applyChainUpdates_OnlyCallableByOwner() (gas: 11790) +TokenPool_applyChainUpdates:test_RevertWhen_applyChainUpdates_ZeroAddressNotAllowed() (gas: 226519) +TokenPool_applyChainUpdates:test_applyChainUpdates() (gas: 592354) +TokenPool_applyChainUpdates:test_applyChainUpdates_UpdatesRemotePoolHashes() (gas: 1077690) +TokenPool_calculateLocalAmount:test_RevertWhen_calculateLocalAmountWhen_HighAmountOverflows() (gas: 2838977) +TokenPool_calculateLocalAmount:test_RevertWhen_calculateLocalAmountWhen_HighLocalDecimalsOverflows() (gas: 2838532) +TokenPool_calculateLocalAmount:test_RevertWhen_calculateLocalAmountWhen_HighRemoteDecimalsOverflows() (gas: 9574) +TokenPool_calculateLocalAmount:test_RevertWhen_calculateLocalAmountWhen_LowRemoteDecimalsOverflows() (gas: 2838566) +TokenPool_calculateLocalAmount:test_calculateLocalAmount() (gas: 93680) +TokenPool_constructor:test_RevertWhen_constructorWhen_InvalidDecimalArgs() (gas: 77881) +TokenPool_constructor:test_RevertWhen_constructorWhen_ZeroAddressNotAllowed() (gas: 71649) +TokenPool_constructor:test_constructor() (gas: 21930) +TokenPool_constructor:test_constructor_DecimalCallFails() (gas: 2836717) +TokenPool_getRemotePool:test_getRemotePools() (gas: 330476) +TokenPool_onlyOffRamp:test_RevertWhen_CallerIsNotARampOnRouter() (gas: 21505) +TokenPool_onlyOffRamp:test_RevertWhen_ChainNotAllowed() (gas: 240413) +TokenPool_onlyOffRamp:test_onlyOffRamp() (gas: 94348) +TokenPool_onlyOnRamp:test_RevertWhen_CallerIsNotARampOnRouter() (gas: 21157) +TokenPool_onlyOnRamp:test_RevertWhen_ChainNotAllowed() (gas: 204376) +TokenPool_onlyOnRamp:test_onlyOnRamp() (gas: 49257) +TokenPool_parseRemoteDecimals:test_RevertWhen_parseRemoteDecimalsWhen_InvalidRemoteChainDecimals_DigitTooLarge() (gas: 10701) +TokenPool_parseRemoteDecimals:test_RevertWhen_parseRemoteDecimalsWhen_InvalidRemoteChainDecimals_WrongType() (gas: 11549) +TokenPool_parseRemoteDecimals:test_parseRemoteDecimals() (gas: 14030) +TokenPool_parseRemoteDecimals:test_parseRemoteDecimals_NoDecimalsDefaultsToLocalDecimals() (gas: 9705) +TokenPool_removeRemotePool:test_RevertWhen_InvalidRemotePoolForChain() (gas: 17497) +TokenPool_removeRemotePool:test_RevertWhen_NonExistentChain() (gas: 14314) +TokenPool_removeRemotePool:test_removeRemotePool() (gas: 188402) +TokenPool_setChainRateLimiterConfig:testFuzz_SetChainRateLimiterConfig_Success(uint128,uint128,uint32) (runs: 257, μ: 75918, ~: 75726) +TokenPool_setChainRateLimiterConfig:test_RevertWhen_NonExistentChain() (gas: 17259) +TokenPool_setChainRateLimiterConfig:test_RevertWhen_OnlyOwnerOrRateLimitAdmin() (gas: 15285) +TokenPool_setChainRateLimiterConfigs:testFuzz_SetChainRateLimiterConfigs_Success(uint128,uint128,uint32) (runs: 257, μ: 78717, ~: 78521) +TokenPool_setChainRateLimiterConfigs:test_RevertWhen_MismatchedArrayLengths() (gas: 23933) +TokenPool_setChainRateLimiterConfigs:test_RevertWhen_NonExistentChain() (gas: 19483) +TokenPool_setChainRateLimiterConfigs:test_RevertWhen_OnlyOwnerOrRateLimitAdmin() (gas: 16481) +TokenPool_setRateLimitAdmin:test_RevertWhen_SetRateLimitAdmin() (gas: 10958) +TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin() (gas: 37630) +USDCBridgeMigrator_BurnLockedUSDC:test_PrimaryMechanism() (gas: 130520) +USDCBridgeMigrator_BurnLockedUSDC:test_RevertWhen_WhileMigrationPause() (gas: 109960) +USDCBridgeMigrator_BurnLockedUSDC:test_RevertWhen_invalidPermissions() (gas: 39494) +USDCBridgeMigrator_BurnLockedUSDC:test_lockOrBurn_then_BurnInCCTPMigration() (gas: 303986) +USDCBridgeMigrator_BurnLockedUSDC:test_onLockReleaseMechanism() (gas: 140171) +USDCBridgeMigrator_BurnLockedUSDC:test_onLockReleaseMechanism_thenSwitchToPrimary() (gas: 203330) +USDCBridgeMigrator_cancelMigrationProposal:test_RevertWhen_cannotCancelANonExistentMigrationProposal() (gas: 12647) +USDCBridgeMigrator_cancelMigrationProposal:test_cancelExistingCCTPMigrationProposal() (gas: 56117) +USDCBridgeMigrator_excludeTokensFromBurn:test_RevertWhen_excludeTokensWhenNoMigrationProposalPending() (gas: 13602) +USDCBridgeMigrator_proposeMigration:test_RevertWhen_ChainNotUsingLockRelease() (gas: 15788) +USDCBridgeMigrator_provideLiquidity:test_PrimaryMechanism() (gas: 130538) +USDCBridgeMigrator_provideLiquidity:test_RevertWhen_WhileMigrationPause() (gas: 109916) +USDCBridgeMigrator_provideLiquidity:test_RevertWhen_cannotModifyLiquidityWithoutPermissions() (gas: 13367) +USDCBridgeMigrator_provideLiquidity:test_RevertWhen_cannotProvideLiquidityWhenMigrationProposalPending() (gas: 67423) +USDCBridgeMigrator_provideLiquidity:test_RevertWhen_cannotProvideLiquidity_AfterMigration() (gas: 307844) +USDCBridgeMigrator_provideLiquidity:test_RevertWhen_invalidPermissions() (gas: 39494) +USDCBridgeMigrator_provideLiquidity:test_lockOrBurn_then_BurnInCCTPMigration() (gas: 303986) +USDCBridgeMigrator_provideLiquidity:test_onLockReleaseMechanism() (gas: 140260) +USDCBridgeMigrator_provideLiquidity:test_onLockReleaseMechanism_thenSwitchToPrimary() (gas: 203331) +USDCBridgeMigrator_releaseOrMint:test_OnLockReleaseMechanism() (gas: 206251) +USDCBridgeMigrator_releaseOrMint:test_RevertWhen_WhileMigrationPause() (gas: 102851) +USDCBridgeMigrator_releaseOrMint:test_incomingMessageWithPrimaryMechanism() (gas: 260440) +USDCBridgeMigrator_releaseOrMint:test_unstickManualTxAfterMigration_destChain() (gas: 142763) +USDCBridgeMigrator_releaseOrMint:test_unstickManualTxAfterMigration_homeChain() (gas: 505520) +USDCBridgeMigrator_updateChainSelectorMechanism:test_PrimaryMechanism() (gas: 130520) +USDCBridgeMigrator_updateChainSelectorMechanism:test_RevertWhen_WhileMigrationPause() (gas: 109960) +USDCBridgeMigrator_updateChainSelectorMechanism:test_RevertWhen_cannotRevertChainMechanism_afterMigration() (gas: 307370) +USDCBridgeMigrator_updateChainSelectorMechanism:test_RevertWhen_invalidPermissions() (gas: 39494) +USDCBridgeMigrator_updateChainSelectorMechanism:test_lockOrBurn_then_BurnInCCTPMigration() (gas: 303968) +USDCBridgeMigrator_updateChainSelectorMechanism:test_onLockReleaseMechanism() (gas: 140260) +USDCBridgeMigrator_updateChainSelectorMechanism:test_onLockReleaseMechanism_thenSwitchToPrimary() (gas: 203312) +USDCTokenPool__validateMessage:testFuzz_ValidateMessage_Success(uint32,uint64) (runs: 257, μ: 8324, ~: 8324) +USDCTokenPool__validateMessage:test_RevertWhen_ValidateInvalidMessage() (gas: 26052) +USDCTokenPool_lockOrBurn:testFuzz_LockOrBurnWithAllowList_Success(bytes32,uint256) (runs: 257, μ: 137700, ~: 137492) +USDCTokenPool_lockOrBurn:testFuzz_LockOrBurn_Success(bytes32,uint256) (runs: 257, μ: 132378, ~: 132236) +USDCTokenPool_lockOrBurn:test_LockOrBurn() (gas: 128094) +USDCTokenPool_lockOrBurn:test_RevertWhen_CallerIsNotARampOnRouter() (gas: 28574) +USDCTokenPool_lockOrBurn:test_RevertWhen_LockOrBurnWithAllowList() (gas: 23128) +USDCTokenPool_lockOrBurn:test_RevertWhen_UnknownDomain() (gas: 426909) +USDCTokenPool_releaseOrMint:testFuzz_ReleaseOrMint_Success(address,uint256) (runs: 257, μ: 265096, ~: 264962) +USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx() (gas: 260189) +USDCTokenPool_releaseOrMint:test_RevertWhen_TokenMaxCapacityExceeded() (gas: 40380) +USDCTokenPool_releaseOrMint:test_RevertWhen_UnlockingUSDCFailed() (gas: 88352) +USDCTokenPool_setDomains:testFuzz_SetDomains_Success(bytes32[5],uint32[5],uint64[5]) (runs: 33, μ: 499035, ~: 503769) +USDCTokenPool_setDomains:test_RevertWhen_InvalidDomain() (gas: 66368) +USDCTokenPool_setDomains:test_RevertWhen_OnlyOwner() (gas: 11302) +USDCTokenPool_supportsInterface:test_SupportsInterface() (gas: 10108) \ No newline at end of file diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 019626e6a67..0acefd4a3a0 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -6,7 +6,7 @@ BurnMintTokenPool_releaseOrMint:test_PoolMint() (gas: 102527) BurnMintWithLockReleaseFlagTokenPool_lockOrBurn:test_LockOrBurn_CorrectReturnData() (gas: 237292) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn() (gas: 239012) BurnWithFromMintTokenPool_lockOrBurn:test_Setup() (gas: 24169) -CCIPClientExample_sanity:test_ImmutableExamples() (gas: 2072849) +CCIPClientExample_sanity:test_ImmutableExamples() (gas: 2074109) CCIPHome__validateConfig:test__validateConfig() (gas: 300016) CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners() (gas: 332965) CCIPHome__validateConfig:test__validateConfigSmallerFChain() (gas: 459322) @@ -24,7 +24,7 @@ CCIPHome_setCandidate:test_setCandidate() (gas: 1365392) CCIPHome_supportsInterface:test_supportsInterface() (gas: 9885) DefensiveExampleTest:test_HappyPath() (gas: 200517) DefensiveExampleTest:test_Recovery() (gas: 424996) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1490237) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1491953) ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting() (gas: 10445) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96964) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49797) @@ -142,6 +142,9 @@ MerkleMultiProofTest:test_CVE_2023_34459() (gas: 5456) MerkleMultiProofTest:test_MerkleRoot256() (gas: 396915) MerkleMultiProofTest:test_MerkleRootSingleLeaf() (gas: 3684) MerkleMultiProofTest:test_SpecSync_gas() (gas: 34152) +MessageTransformerOffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageTransformer() (gas: 62268) +MessageTransformerOnRamp_forwardFromRouter:test_MessageTransformerError_Revert() (gas: 206072) +MessageTransformerOnRamp_forwardFromRouter:test_forwardFromRouter_WithMessageTransformer_Success() (gas: 244553) MockRouterTest:test_ccipSendWithEVMExtraArgsV1() (gas: 110081) MockRouterTest:test_ccipSendWithEVMExtraArgsV2() (gas: 132594) MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue() (gas: 126679) @@ -192,112 +195,112 @@ NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 123595) NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed() (gas: 45935) NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate() (gas: 66937) NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12145) -NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 178906) -NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 146095) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 182376) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 245089) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 213735) +NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 179151) +NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 146340) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 182621) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 245579) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 213980) NonceManager_getInboundNonce:test_getInboundNonce_UpgradedSenderNoncesReadsPreviousRamp() (gas: 60418) NonceManager_getIncrementedOutboundNonce:test_getIncrementedOutboundNonce() (gas: 37974) NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce() (gas: 38746) NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce_SkippedIncorrectNonce() (gas: 23739) NonceManager_getIncrementedOutboundNonce:test_incrementNoncesInboundAndOutbound() (gas: 71886) -NonceManager_getOutboundNonce:test_getOutboundNonce_Upgrade() (gas: 105254) -NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceNewSenderStartsAtZero() (gas: 166086) -NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceStartsAtV1Nonce() (gas: 195806) -NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeSenderNoncesReadsPreviousRamp() (gas: 140101) +NonceManager_getOutboundNonce:test_getOutboundNonce_Upgrade() (gas: 105567) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceNewSenderStartsAtZero() (gas: 166712) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceStartsAtV1Nonce() (gas: 196745) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeSenderNoncesReadsPreviousRamp() (gas: 141040) OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains() (gas: 626140) OffRamp_applySourceChainConfigUpdates:test_AddNewChain() (gas: 166441) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates() (gas: 16671) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain() (gas: 180998) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp() (gas: 168513) OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed() (gas: 284861) -OffRamp_batchExecute:test_MultipleReportsDifferentChains() (gas: 326028) -OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain() (gas: 170852) -OffRamp_batchExecute:test_MultipleReportsSameChain() (gas: 269327) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate() (gas: 161811) -OffRamp_batchExecute:test_SingleReport() (gas: 149617) -OffRamp_batchExecute:test_Unhealthy() (gas: 533326) +OffRamp_batchExecute:test_MultipleReportsDifferentChains() (gas: 326763) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain() (gas: 171097) +OffRamp_batchExecute:test_MultipleReportsSameChain() (gas: 270062) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate() (gas: 162056) +OffRamp_batchExecute:test_SingleReport() (gas: 149862) +OffRamp_batchExecute:test_Unhealthy() (gas: 533830) OffRamp_commit:test_OnlyGasPriceUpdates() (gas: 112973) OffRamp_commit:test_OnlyTokenPriceUpdates() (gas: 112927) -OffRamp_commit:test_PriceSequenceNumberCleared() (gas: 355397) +OffRamp_commit:test_PriceSequenceNumberCleared() (gas: 355361) OffRamp_commit:test_ReportAndPriceUpdate() (gas: 164209) OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 141051) OffRamp_commit:test_RootWithRMNDisabled() (gas: 153873) OffRamp_commit:test_StaleReportWithRoot() (gas: 232101) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot() (gas: 206722) -OffRamp_constructor:test_Constructor() (gas: 6269512) -OffRamp_execute:test_LargeBatch() (gas: 3373860) -OffRamp_execute:test_MultipleReports() (gas: 291458) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures() (gas: 364776) -OffRamp_execute:test_SingleReport() (gas: 168850) -OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 51610) -OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 20514) -OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 230418) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 87465) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 259935) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 455358) -OffRamp_executeSingleReport:test_ReceiverError() (gas: 180797) -OffRamp_executeSingleReport:test_SingleMessageNoTokens() (gas: 205270) -OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain() (gas: 241357) -OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered() (gas: 185263) -OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver() (gas: 243920) -OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 134656) +OffRamp_constructor:test_Constructor() (gas: 6285149) +OffRamp_execute:test_LargeBatch() (gas: 3381210) +OffRamp_execute:test_MultipleReports() (gas: 292193) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures() (gas: 365511) +OffRamp_execute:test_SingleReport() (gas: 169095) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 51855) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 20758) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 230669) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 87710) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 260187) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 455857) +OffRamp_executeSingleReport:test_ReceiverError() (gas: 181042) +OffRamp_executeSingleReport:test_SingleMessageNoTokens() (gas: 205760) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain() (gas: 241847) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered() (gas: 185753) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver() (gas: 244165) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 134901) OffRamp_executeSingleReport:test_SkippedIncorrectNonce() (gas: 58298) -OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes() (gas: 392394) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE() (gas: 562427) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 510808) -OffRamp_executeSingleReport:test_Unhealthy() (gas: 528949) -OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain() (gas: 439299) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage() (gas: 158038) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered() (gas: 128422) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes() (gas: 392646) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE() (gas: 562931) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 511312) +OffRamp_executeSingleReport:test_Unhealthy() (gas: 529453) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain() (gas: 439803) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage() (gas: 158283) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered() (gas: 128667) OffRamp_getExecutionState:test_FillExecutionState() (gas: 3955662) OffRamp_getExecutionState:test_GetDifferentChainExecutionState() (gas: 121311) OffRamp_getExecutionState:test_GetExecutionState() (gas: 90102) -OffRamp_manuallyExecute:test_manuallyExecute() (gas: 212368) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched() (gas: 165742) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit() (gas: 479145) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails() (gas: 2229662) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride() (gas: 212918) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride() (gas: 732218) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages() (gas: 337015) +OffRamp_manuallyExecute:test_manuallyExecute() (gas: 212859) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched() (gas: 165988) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit() (gas: 479635) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails() (gas: 2229911) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride() (gas: 213409) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride() (gas: 734673) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages() (gas: 337996) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken() (gas: 94629) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 161157) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 163023) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 174276) OffRamp_setDynamicConfig:test_SetDynamicConfig() (gas: 25442) OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor() (gas: 47493) -OffRamp_trialExecute:test_trialExecute() (gas: 263635) -OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 120721) -OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 132031) -OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 281380) +OffRamp_trialExecute:test_trialExecute() (gas: 263887) +OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 120968) +OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 132278) +OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 282122) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy() (gas: 244294) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates() (gas: 325979) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17190) OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates() (gas: 65874) -OnRamp_constructor:test_Constructor() (gas: 2672129) -OnRamp_forwardFromRouter:test_ForwardFromRouter() (gas: 145362) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2() (gas: 146196) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue() (gas: 115375) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145760) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 144036) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 146001) -OnRamp_forwardFromRouter:test_ForwardFromRouter_ConfigurableSourceRouter() (gas: 140639) -OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered() (gas: 186473) -OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce() (gas: 212828) -OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 147007) -OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception() (gas: 274726) +OnRamp_constructor:test_Constructor() (gas: 2694375) +OnRamp_forwardFromRouter:test_ForwardFromRouter() (gas: 145675) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2() (gas: 146509) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue() (gas: 115688) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 146073) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 144349) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 146314) +OnRamp_forwardFromRouter:test_ForwardFromRouter_ConfigurableSourceRouter() (gas: 140952) +OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered() (gas: 187412) +OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce() (gas: 213767) +OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 147320) +OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception() (gas: 275043) OnRamp_getFee:test_EmptyMessage() (gas: 99005) OnRamp_getFee:test_GetFeeOfZeroForTokenMessage() (gas: 86961) OnRamp_getFee:test_SingleTokenMessage() (gas: 114125) OnRamp_getTokenPool:test_GetTokenPool() (gas: 35382) OnRamp_setDynamicConfig:test_setDynamicConfig() (gas: 56650) OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens() (gas: 125835) -PingPong_ccipReceive:test_CcipReceive() (gas: 165845) +PingPong_ccipReceive:test_CcipReceive() (gas: 166158) PingPong_setOutOfOrderExecution:test_OutOfOrderExecution() (gas: 20350) PingPong_setPaused:test_Pausing() (gas: 17738) -PingPong_startPingPong:test_StartPingPong_With_OOO() (gas: 144996) -PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered() (gas: 170649) +PingPong_startPingPong:test_StartPingPong_With_OOO() (gas: 145309) +PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered() (gas: 170962) RMNHome_getConfigDigests:test_getConfigDigests() (gas: 1081176) RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive() (gas: 1086556) RMNHome_revokeCandidate:test_revokeCandidate() (gas: 28085) @@ -327,17 +330,17 @@ RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetC RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner() (gas: 129941) Router_applyRampUpdates:test_applyRampUpdates_OffRampUpdatesWithRouting() (gas: 10413055) Router_applyRampUpdates:test_applyRampUpdates_OnRampDisable() (gas: 56445) -Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 124459) -Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 211890) +Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 124772) +Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 212207) Router_ccipSend:test_InvalidMsgValue() (gas: 27856) -Router_ccipSend:test_NativeFeeToken() (gas: 184996) +Router_ccipSend:test_NativeFeeToken() (gas: 185309) Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 62458) -Router_ccipSend:test_NativeFeeTokenOverpay() (gas: 186413) +Router_ccipSend:test_NativeFeeTokenOverpay() (gas: 186726) Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 54550) -Router_ccipSend:test_NonLinkFeeToken() (gas: 219583) -Router_ccipSend:test_WrappedNativeFeeToken() (gas: 187235) -Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 133616) -Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 221091) +Router_ccipSend:test_NonLinkFeeToken() (gas: 219896) +Router_ccipSend:test_WrappedNativeFeeToken() (gas: 187548) +Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 133929) +Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 221408) Router_constructor:test_Constructor() (gas: 13148) Router_getArmProxy:test_getArmProxy() (gas: 10573) Router_getFee:test_GetFeeSupportedChain() (gas: 52021) diff --git a/contracts/scripts/native_solc_compile_all_ccip b/contracts/scripts/native_solc_compile_all_ccip index 8c3168c4fc3..dcdebe2517d 100755 --- a/contracts/scripts/native_solc_compile_all_ccip +++ b/contracts/scripts/native_solc_compile_all_ccip @@ -15,16 +15,24 @@ FOUNDRY_PROJECT_SUFFIX="-compile" CONTRACTS_DIR="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; cd ../ && pwd -P )" export FOUNDRY_PROFILE="$PROJECT"$FOUNDRY_PROJECT_SUFFIX +# first argument is the contract path, second argument is whether to use the --via-ir flag compileContract() { local contract contract=$(basename "$1") echo "Compiling" "$contract" + local viaIR="" + if [[ "$2" =~ "true" ]]; then + echo "via-ir flag enabled" + viaIR="--via-ir" + fi + local command command="forge build $CONTRACTS_DIR/src/v0.8/$PROJECT/"$1.sol" \ --root $CONTRACTS_DIR \ $(getOptimizations "$contract") \ --extra-output-files bin abi \ + $viaIR \ -o $CONTRACTS_DIR/solc/$PROJECT/$contract" $command @@ -81,4 +89,8 @@ compileContract test/helpers/CCIPReaderTester # Offchain test encoding utils compileContract test/helpers/EncodingUtils +# Message Transformer On/OffRamps +compileContract offRamp/MessageTransformerOffRamp true +compileContract onRamp/MessageTransformerOnRamp + diff --git a/contracts/src/v0.8/ccip/interfaces/IMessageTransformer.sol b/contracts/src/v0.8/ccip/interfaces/IMessageTransformer.sol new file mode 100644 index 00000000000..89ad3b826c4 --- /dev/null +++ b/contracts/src/v0.8/ccip/interfaces/IMessageTransformer.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {Internal} from "../libraries/Internal.sol"; + +/// @notice Interface for plug-in message hook contracts that transform OffRamp & OnRamp messages. +/// The transformer functions are expected to revert on transform failures. +interface IMessageTransformer { + /// @notice Common error that can be thrown on transform failures and used by consumers + /// @param errorReason abi encoded revert reason + error MessageTransformError(bytes errorReason); + + /// @notice Transforms the given OffRamp message. Reverts on transform failure + /// @param message to transform + /// @return transformed message + function transformInboundMessage( + Internal.Any2EVMRampMessage memory message + ) external returns (Internal.Any2EVMRampMessage memory); + + /// @notice Transforms the given OnRamp message. Reverts on transform failure + /// @param message to transform + /// @return transformed message + function transformOutboundMessage( + Internal.EVM2AnyRampMessage memory message + ) external returns (Internal.EVM2AnyRampMessage memory); +} diff --git a/contracts/src/v0.8/ccip/offRamp/MessageTransformerOffRamp.sol b/contracts/src/v0.8/ccip/offRamp/MessageTransformerOffRamp.sol new file mode 100644 index 00000000000..c780fe30a31 --- /dev/null +++ b/contracts/src/v0.8/ccip/offRamp/MessageTransformerOffRamp.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {IMessageTransformer} from "../interfaces/IMessageTransformer.sol"; +import {Internal} from "../libraries/Internal.sol"; +import {OffRamp} from "./OffRamp.sol"; + +/// @notice OffRamp that uses a message transformer to transform messages before execution +contract MessageTransformerOffRamp is OffRamp { + address internal s_messageTransformer; + + constructor( + StaticConfig memory staticConfig, + DynamicConfig memory dynamicConfig, + SourceChainConfigArgs[] memory sourceChainConfigs, + address messageTransformerAddr + ) OffRamp(staticConfig, dynamicConfig, sourceChainConfigs) { + if (address(messageTransformerAddr) == address(0)) { + revert ZeroAddressNotAllowed(); + } + s_messageTransformer = messageTransformerAddr; + } + + function getMessageTransformerAddress() external view returns (address) { + return s_messageTransformer; + } + + function _beforeExecuteSingleMessage( + Internal.Any2EVMRampMessage memory message + ) internal override returns (Internal.Any2EVMRampMessage memory transformedMessage) { + try IMessageTransformer(s_messageTransformer).transformInboundMessage(message) returns ( + Internal.Any2EVMRampMessage memory m + ) { + transformedMessage = m; + } catch (bytes memory err) { + revert IMessageTransformer.MessageTransformError(err); + } + return transformedMessage; + } +} diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 2b6f075bc7a..f2a3a9853a7 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -552,6 +552,15 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { return (Internal.MessageExecutionState.SUCCESS, ""); } + /// @notice hook for applying custom logic to the input message before executeSingleMessage() + /// @param message initial message + /// @return transformedMessage modified message + function _beforeExecuteSingleMessage( + Internal.Any2EVMRampMessage memory message + ) internal virtual returns (Internal.Any2EVMRampMessage memory transformedMessage) { + return message; + } + /// @notice Executes a single message. /// @param message The message that will be executed. /// @param offchainTokenData Token transfer data to be passed to TokenPool. @@ -565,6 +574,9 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { uint32[] calldata tokenGasOverrides ) external { if (msg.sender != address(this)) revert CanOnlySelfCall(); + + message = _beforeExecuteSingleMessage(message); + Client.EVMTokenAmount[] memory destTokenAmounts = new Client.EVMTokenAmount[](0); if (message.tokenAmounts.length > 0) { destTokenAmounts = _releaseOrMintTokens( diff --git a/contracts/src/v0.8/ccip/onRamp/MessageTransformerOnRamp.sol b/contracts/src/v0.8/ccip/onRamp/MessageTransformerOnRamp.sol new file mode 100644 index 00000000000..af46d7093cb --- /dev/null +++ b/contracts/src/v0.8/ccip/onRamp/MessageTransformerOnRamp.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {IMessageTransformer} from "../interfaces/IMessageTransformer.sol"; +import {Internal} from "../libraries/Internal.sol"; +import {OnRamp} from "./OnRamp.sol"; + +/// @notice OnRamp that uses a message transformer to transform messages from router +contract MessageTransformerOnRamp is OnRamp { + address internal s_messageTransformer; + + error ZeroAddressNotAllowed(); + + constructor( + StaticConfig memory staticConfig, + DynamicConfig memory dynamicConfig, + DestChainConfigArgs[] memory destChainConfigs, + address messageTransformerAddr + ) OnRamp(staticConfig, dynamicConfig, destChainConfigs) { + if (address(messageTransformerAddr) == address(0)) { + revert ZeroAddressNotAllowed(); + } + s_messageTransformer = messageTransformerAddr; + } + + function getMessageTransformerAddress() external view returns (address) { + return s_messageTransformer; + } + + function _postProcessMessage( + Internal.EVM2AnyRampMessage memory message + ) internal override returns (Internal.EVM2AnyRampMessage memory transformedMessage) { + try IMessageTransformer(s_messageTransformer).transformOutboundMessage(message) returns ( + Internal.EVM2AnyRampMessage memory m + ) { + transformedMessage = m; + } catch (bytes memory err) { + revert IMessageTransformer.MessageTransformError(err); + } + return transformedMessage; + } +} diff --git a/contracts/src/v0.8/ccip/onRamp/OnRamp.sol b/contracts/src/v0.8/ccip/onRamp/OnRamp.sol index fb0cbedd5e7..9f28948572a 100644 --- a/contracts/src/v0.8/ccip/onRamp/OnRamp.sol +++ b/contracts/src/v0.8/ccip/onRamp/OnRamp.sol @@ -239,6 +239,8 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, Ownable2StepMsgSender newMessage.tokenAmounts[i].destExecData = destExecDataPerToken[i]; } + newMessage = _postProcessMessage(newMessage); + // Hash only after all fields have been set. newMessage.header.messageId = Internal._hash( newMessage, @@ -257,6 +259,15 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, Ownable2StepMsgSender return newMessage.header.messageId; } + /// @notice hook for applying custom logic to the message from router + /// @param message router message + /// @return transformedMessage modified message + function _postProcessMessage( + Internal.EVM2AnyRampMessage memory message + ) internal virtual returns (Internal.EVM2AnyRampMessage memory transformedMessage) { + return message; + } + /// @notice Uses a pool to lock or burn a token. /// @param tokenAndAmount Token address and amount to lock or burn. /// @param destChainSelector Target destination chain selector of the message. diff --git a/contracts/src/v0.8/ccip/test/helpers/MessageTransformerHelper.sol b/contracts/src/v0.8/ccip/test/helpers/MessageTransformerHelper.sol new file mode 100644 index 00000000000..f273d88c573 --- /dev/null +++ b/contracts/src/v0.8/ccip/test/helpers/MessageTransformerHelper.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.26; + +import {IMessageTransformer} from "../../interfaces/IMessageTransformer.sol"; +import {Internal} from "../../libraries/Internal.sol"; + +// This helper is used to test the On/OffRamps +contract MessageTransformerHelper is IMessageTransformer { + error UnknownChain(); + + bool public s_shouldRevert; + + function setShouldRevert( + bool _shouldRevert + ) external { + s_shouldRevert = _shouldRevert; + } + + /// @inheritdoc IMessageTransformer + function transformInboundMessage( + Internal.Any2EVMRampMessage memory message + ) public view returns (Internal.Any2EVMRampMessage memory) { + if (s_shouldRevert) { + revert UnknownChain(); + } + return message; + } + + /// @inheritdoc IMessageTransformer + function transformOutboundMessage( + Internal.EVM2AnyRampMessage memory message + ) public view returns (Internal.EVM2AnyRampMessage memory) { + if (s_shouldRevert) { + revert UnknownChain(); + } + return message; + } +} diff --git a/contracts/src/v0.8/ccip/test/offRamp/OffRamp/MessageTransformerOffRamp.executeSingleMessage.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRamp/MessageTransformerOffRamp.executeSingleMessage.t.sol new file mode 100644 index 00000000000..ad5e8e2ab29 --- /dev/null +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp/MessageTransformerOffRamp.executeSingleMessage.t.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {Router} from "../../../Router.sol"; +import {IMessageTransformer} from "../../../interfaces/IMessageTransformer.sol"; +import {Internal} from "../../../libraries/Internal.sol"; +import {MessageTransformerOffRamp} from "../../../offRamp/MessageTransformerOffRamp.sol"; +import {OffRamp} from "../../../offRamp/OffRamp.sol"; + +import {MessageTransformerHelper} from "../../helpers/MessageTransformerHelper.sol"; +import {OffRampSetup} from "./OffRampSetup.t.sol"; + +contract MessageTransformerOffRamp_executeSingleMessage is OffRampSetup { + MessageTransformerOffRamp internal s_messageTransformerOffRamp; + + function setUp() public virtual override { + super.setUp(); + s_messageTransformerOffRamp = new MessageTransformerOffRamp( + s_offRamp.getStaticConfig(), + s_offRamp.getDynamicConfig(), + new OffRamp.SourceChainConfigArgs[](0), + address(s_inboundMessageTransformer) + ); + + OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](1); + sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({ + router: s_destRouter, + sourceChainSelector: SOURCE_CHAIN_SELECTOR_1, + onRamp: ON_RAMP_ADDRESS_1, + isEnabled: true + }); + s_messageTransformerOffRamp.applySourceChainConfigUpdates(sourceChainConfigs); + + Router.OnRamp[] memory onRampUpdates = new Router.OnRamp[](0); + Router.OffRamp[] memory offRampUpdates = new Router.OffRamp[](2 * sourceChainConfigs.length); + + for (uint256 i = 0; i < sourceChainConfigs.length; ++i) { + uint64 sourceChainSelector = sourceChainConfigs[i].sourceChainSelector; + + offRampUpdates[2 * i] = + Router.OffRamp({sourceChainSelector: sourceChainSelector, offRamp: address(s_messageTransformerOffRamp)}); + offRampUpdates[2 * i + 1] = Router.OffRamp({ + sourceChainSelector: sourceChainSelector, + offRamp: s_inboundNonceManager.getPreviousRamps(sourceChainSelector).prevOffRamp + }); + } + + s_destRouter.applyRampUpdates(onRampUpdates, new Router.OffRamp[](0), offRampUpdates); + } + + function test_executeSingleMessage_WithMessageTransformer() public { + vm.stopPrank(); + vm.startPrank(address(s_messageTransformerOffRamp)); + Internal.Any2EVMRampMessage memory message = + _generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1); + s_messageTransformerOffRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0)); + } + + function test_executeSingleMessage_WithMessageTransformer_RevertWhen_UnknownChain() public { + vm.stopPrank(); + vm.startPrank(address(s_messageTransformerOffRamp)); + Internal.Any2EVMRampMessage memory message = + _generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1); + // Fail with any error (UnknownChain in this case) to check if OffRamp wraps the error with MessageTransformError during the revert + s_inboundMessageTransformer.setShouldRevert(true); + vm.expectRevert( + abi.encodeWithSelector( + IMessageTransformer.MessageTransformError.selector, + abi.encodeWithSelector(MessageTransformerHelper.UnknownChain.selector) + ) + ); + s_messageTransformerOffRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0)); + } +} diff --git a/contracts/src/v0.8/ccip/test/offRamp/OffRamp/OffRampSetup.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRamp/OffRampSetup.t.sol index daf496c9d75..c98e92b0470 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp/OffRampSetup.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp/OffRampSetup.t.sol @@ -14,6 +14,7 @@ import {OffRamp} from "../../../offRamp/OffRamp.sol"; import {FeeQuoterSetup} from "../../feeQuoter/FeeQuoterSetup.t.sol"; import {MaybeRevertingBurnMintTokenPool} from "../../helpers/MaybeRevertingBurnMintTokenPool.sol"; import {MessageInterceptorHelper} from "../../helpers/MessageInterceptorHelper.sol"; +import {MessageTransformerHelper} from "../../helpers/MessageTransformerHelper.sol"; import {OffRampHelper} from "../../helpers/OffRampHelper.sol"; import {MaybeRevertMessageReceiver} from "../../helpers/receivers/MaybeRevertMessageReceiver.sol"; import {MultiOCR3BaseSetup} from "../../ocr/MultiOCR3Base/MultiOCR3BaseSetup.t.sol"; @@ -38,6 +39,7 @@ contract OffRampSetup is FeeQuoterSetup, MultiOCR3BaseSetup { OffRampHelper internal s_offRamp; MessageInterceptorHelper internal s_inboundMessageInterceptor; + MessageTransformerHelper internal s_inboundMessageTransformer; NonceManager internal s_inboundNonceManager; bytes32 internal s_configDigestExec; @@ -53,6 +55,7 @@ contract OffRampSetup is FeeQuoterSetup, MultiOCR3BaseSetup { MultiOCR3BaseSetup.setUp(); s_inboundMessageInterceptor = new MessageInterceptorHelper(); + s_inboundMessageTransformer = new MessageTransformerHelper(); s_receiver = new MaybeRevertMessageReceiver(false); s_secondary_receiver = new MaybeRevertMessageReceiver(false); s_reverting_receiver = new MaybeRevertMessageReceiver(true); diff --git a/contracts/src/v0.8/ccip/test/onRamp/OnRamp/MessageTransformerOnRamp.forwardFromRouter.t.sol b/contracts/src/v0.8/ccip/test/onRamp/OnRamp/MessageTransformerOnRamp.forwardFromRouter.t.sol new file mode 100644 index 00000000000..0a001bceee3 --- /dev/null +++ b/contracts/src/v0.8/ccip/test/onRamp/OnRamp/MessageTransformerOnRamp.forwardFromRouter.t.sol @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {AuthorizedCallers} from "../../../../shared/access/AuthorizedCallers.sol"; +import {IERC20} from "../../../../vendor/openzeppelin-solidity/v4.8.3/contracts/interfaces/IERC20.sol"; +import {NonceManager} from "../../../NonceManager.sol"; +import {Router} from "../../../Router.sol"; +import {IMessageTransformer} from "../../../interfaces/IMessageTransformer.sol"; +import {Client} from "../../../libraries/Client.sol"; +import {Internal} from "../../../libraries/Internal.sol"; +import {MessageTransformerOnRamp} from "../../../onRamp/MessageTransformerOnRamp.sol"; +import {OnRamp} from "../../../onRamp/OnRamp.sol"; +import {MessageTransformerHelper} from "../../helpers/MessageTransformerHelper.sol"; +import {OnRampSetup} from "./OnRampSetup.t.sol"; + +contract MessageTransformerOnRamp_forwardFromRouter is OnRampSetup { + MessageTransformerOnRamp internal s_messageTransformerOnRamp; + MessageTransformerHelper internal s_messageTransformer; + + function setUp() public virtual override { + super.setUp(); + s_messageTransformer = new MessageTransformerHelper(); + s_messageTransformerOnRamp = new MessageTransformerOnRamp( + s_onRamp.getStaticConfig(), + s_onRamp.getDynamicConfig(), + _generateDestChainConfigArgs(s_sourceRouter), + address(s_messageTransformer) + ); + s_metadataHash = keccak256( + abi.encode( + Internal.EVM_2_ANY_MESSAGE_HASH, SOURCE_CHAIN_SELECTOR, DEST_CHAIN_SELECTOR, address(s_messageTransformerOnRamp) + ) + ); + address[] memory authorizedCallers = new address[](1); + authorizedCallers[0] = address(s_messageTransformerOnRamp); + + NonceManager(s_outboundNonceManager).applyAuthorizedCallerUpdates( + AuthorizedCallers.AuthorizedCallerArgs({addedCallers: authorizedCallers, removedCallers: new address[](0)}) + ); + + Router.OnRamp[] memory onRampUpdates = new Router.OnRamp[](1); + onRampUpdates[0] = + Router.OnRamp({destChainSelector: DEST_CHAIN_SELECTOR, onRamp: address(s_messageTransformerOnRamp)}); + + Router.OffRamp[] memory offRampUpdates = new Router.OffRamp[](2); + offRampUpdates[0] = Router.OffRamp({sourceChainSelector: SOURCE_CHAIN_SELECTOR, offRamp: makeAddr("offRamp0")}); + offRampUpdates[1] = Router.OffRamp({sourceChainSelector: SOURCE_CHAIN_SELECTOR, offRamp: makeAddr("offRamp1")}); + s_sourceRouter.applyRampUpdates(onRampUpdates, new Router.OffRamp[](0), offRampUpdates); + vm.startPrank(address(s_sourceRouter)); + } + + function test_forwardFromRouter_WithMessageTransformer_Success() public { + Client.EVM2AnyMessage memory message = _generateEmptyMessage(); + message.extraArgs = Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: GAS_LIMIT * 2})); + uint256 feeAmount = 1234567890; + message.tokenAmounts = new Client.EVMTokenAmount[](1); + message.tokenAmounts[0].amount = 1e18; + message.tokenAmounts[0].token = s_sourceTokens[0]; + IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_messageTransformerOnRamp), feeAmount); + vm.expectEmit(); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, 1, _messageToEvent(message, 1, 1, feeAmount, OWNER)); + s_messageTransformerOnRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER); + } + + function test_MessageTransformerError_Revert() public { + Client.EVM2AnyMessage memory message = _generateEmptyMessage(); + message.extraArgs = Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: GAS_LIMIT * 2})); + uint256 feeAmount = 1234567890; + message.tokenAmounts = new Client.EVMTokenAmount[](1); + message.tokenAmounts[0].amount = 1e18; + message.tokenAmounts[0].token = s_sourceTokens[0]; + IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_messageTransformerOnRamp), feeAmount); + + // Fail with any error (UnknownChain in this case) to check if OnRamp wraps the error with MessageTransformError during the revert + s_messageTransformer.setShouldRevert(true); + vm.expectRevert( + abi.encodeWithSelector( + IMessageTransformer.MessageTransformError.selector, + abi.encodeWithSelector(MessageTransformerHelper.UnknownChain.selector) + ) + ); + s_messageTransformerOnRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER); + } +} diff --git a/core/gethwrappers/ccip/generated/message_transformer_offramp/message_transformer_offramp.go b/core/gethwrappers/ccip/generated/message_transformer_offramp/message_transformer_offramp.go new file mode 100644 index 00000000000..68b8db06d39 --- /dev/null +++ b/core/gethwrappers/ccip/generated/message_transformer_offramp/message_transformer_offramp.go @@ -0,0 +1,2634 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package message_transformer_offramp + +import ( + "errors" + "fmt" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientAny2EVMMessage struct { + MessageId [32]byte + SourceChainSelector uint64 + Sender []byte + Data []byte + DestTokenAmounts []ClientEVMTokenAmount +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type InternalAny2EVMRampMessage struct { + Header InternalRampMessageHeader + Sender []byte + Data []byte + Receiver common.Address + GasLimit *big.Int + TokenAmounts []InternalAny2EVMTokenTransfer +} + +type InternalAny2EVMTokenTransfer struct { + SourcePoolAddress []byte + DestTokenAddress common.Address + DestGasAmount uint32 + ExtraData []byte + Amount *big.Int +} + +type InternalExecutionReport struct { + SourceChainSelector uint64 + Messages []InternalAny2EVMRampMessage + OffchainTokenData [][][]byte + Proofs [][32]byte + ProofFlagBits *big.Int +} + +type InternalGasPriceUpdate struct { + DestChainSelector uint64 + UsdPerUnitGas *big.Int +} + +type InternalMerkleRoot struct { + SourceChainSelector uint64 + OnRampAddress []byte + MinSeqNr uint64 + MaxSeqNr uint64 + MerkleRoot [32]byte +} + +type InternalPriceUpdates struct { + TokenPriceUpdates []InternalTokenPriceUpdate + GasPriceUpdates []InternalGasPriceUpdate +} + +type InternalRampMessageHeader struct { + MessageId [32]byte + SourceChainSelector uint64 + DestChainSelector uint64 + SequenceNumber uint64 + Nonce uint64 +} + +type InternalTokenPriceUpdate struct { + SourceToken common.Address + UsdPerToken *big.Int +} + +type MultiOCR3BaseConfigInfo struct { + ConfigDigest [32]byte + F uint8 + N uint8 + IsSignatureVerificationEnabled bool +} + +type MultiOCR3BaseOCRConfig struct { + ConfigInfo MultiOCR3BaseConfigInfo + Signers []common.Address + Transmitters []common.Address +} + +type MultiOCR3BaseOCRConfigArgs struct { + ConfigDigest [32]byte + OcrPluginType uint8 + F uint8 + IsSignatureVerificationEnabled bool + Signers []common.Address + Transmitters []common.Address +} + +type OffRampDynamicConfig struct { + FeeQuoter common.Address + PermissionLessExecutionThresholdSeconds uint32 + IsRMNVerificationDisabled bool + MessageInterceptor common.Address +} + +type OffRampGasLimitOverride struct { + ReceiverExecutionGasLimit *big.Int + TokenGasOverrides []uint32 +} + +type OffRampSourceChainConfig struct { + Router common.Address + IsEnabled bool + MinSeqNr uint64 + OnRamp []byte +} + +type OffRampSourceChainConfigArgs struct { + Router common.Address + SourceChainSelector uint64 + IsEnabled bool + OnRamp []byte +} + +type OffRampStaticConfig struct { + ChainSelector uint64 + GasForCallExactCheck uint16 + RmnRemote common.Address + TokenAdminRegistry common.Address + NonceManager common.Address +} + +var MessageTransformerOffRampMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\",\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"messageTransformerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applySourceChainConfigUpdates\",\"inputs\":[{\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\",\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ccipReceive\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structClient.Any2EVMMessage\",\"components\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structClient.EVMTokenAmount[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"commit\",\"inputs\":[{\"name\":\"reportContext\",\"type\":\"bytes32[2]\",\"internalType\":\"bytes32[2]\"},{\"name\":\"report\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"rs\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"ss\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"rawVs\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"reportContext\",\"type\":\"bytes32[2]\",\"internalType\":\"bytes32[2]\"},{\"name\":\"report\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeSingleMessage\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structInternal.Any2EVMRampMessage\",\"components\":[{\"name\":\"header\",\"type\":\"tuple\",\"internalType\":\"structInternal.RampMessageHeader\",\"components\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"sender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"components\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destTokenAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destGasAmount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"offchainTokenData\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAllSourceChainConfigs\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"minSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"onRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getExecutionState\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumInternal.MessageExecutionState\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestPriceSequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMerkleRoot\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMessageTransformerAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSourceChainConfig\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.SourceChainConfig\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"minSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"onRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestConfigDetails\",\"inputs\":[{\"name\":\"ocrPluginType\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"ocrConfig\",\"type\":\"tuple\",\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"components\":[{\"name\":\"configInfo\",\"type\":\"tuple\",\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"components\":[{\"name\":\"configDigest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"F\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"n\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"signers\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"transmitters\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"manuallyExecute\",\"inputs\":[{\"name\":\"reports\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.ExecutionReport[]\",\"components\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messages\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"components\":[{\"name\":\"header\",\"type\":\"tuple\",\"internalType\":\"structInternal.RampMessageHeader\",\"components\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"sender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"components\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destTokenAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destGasAmount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\",\"internalType\":\"bytes[][]\"},{\"name\":\"proofs\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proofFlagBits\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\",\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"components\":[{\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOCR3Configs\",\"inputs\":[{\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"components\":[{\"name\":\"configDigest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"ocrPluginType\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"F\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"signers\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"transmitters\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AlreadyAttempted\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CommitReportAccepted\",\"inputs\":[{\"name\":\"merkleRoots\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"components\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"onRampAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"minSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"merkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"priceUpdates\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"components\":[{\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"components\":[{\"name\":\"sourceToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"usdPerToken\",\"type\":\"uint224\",\"internalType\":\"uint224\"}]},{\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.GasPriceUpdate[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"usdPerUnitGas\",\"type\":\"uint224\",\"internalType\":\"uint224\"}]}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigSet\",\"inputs\":[{\"name\":\"ocrPluginType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"},{\"name\":\"configDigest\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"signers\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"},{\"name\":\"transmitters\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"},{\"name\":\"F\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutionStateChanged\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"messageId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"state\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasUsed\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RootRemoved\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SkippedAlreadyExecutedMessage\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SkippedReportExecution\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SourceChainConfigSet\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sourceConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"minSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"onRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SourceChainSelectorAdded\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaticConfigSet\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transmitted\",\"inputs\":[{\"name\":\"ocrPluginType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"configDigest\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CanOnlySelfCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CommitOnRampMismatch\",\"inputs\":[{\"name\":\"reportOnRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"configOnRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"ConfigDigestMismatch\",\"inputs\":[{\"name\":\"expected\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"actual\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"EmptyBatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyReport\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ExecutionError\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"ForkedChain\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"actual\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidConfig\",\"inputs\":[{\"name\":\"errorType\",\"type\":\"uint8\",\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\"}]},{\"type\":\"error\",\"name\":\"InvalidDataLength\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"got\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidInterval\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"min\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"max\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidManualExecutionGasLimit\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"newLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidManualExecutionTokenGasOverride\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"tokenIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"oldLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenGasOverride\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageDestChainSelector\",\"inputs\":[{\"name\":\"messageDestChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidNewState\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"newState\",\"type\":\"uint8\",\"internalType\":\"enumInternal.MessageExecutionState\"}]},{\"type\":\"error\",\"name\":\"InvalidOnRampUpdate\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LeavesCannotBeEmpty\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ManualExecutionGasAmountCountMismatch\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ManualExecutionGasLimitMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ManualExecutionNotYetEnabled\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MessageTransformError\",\"inputs\":[{\"name\":\"errorReason\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"MessageValidationError\",\"inputs\":[{\"name\":\"errorReason\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonUniqueSignatures\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotACompatiblePool\",\"inputs\":[{\"name\":\"notPool\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OracleCannotBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReceiverError\",\"inputs\":[{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"ReleaseOrMintBalanceMismatch\",\"inputs\":[{\"name\":\"amountReleased\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balancePre\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balancePost\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"RootAlreadyCommitted\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"merkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"RootNotCommitted\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignaturesOutOfRegistration\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SourceChainNotEnabled\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"SourceChainSelectorMismatch\",\"inputs\":[{\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"StaleCommitReport\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StaticConfigCannotBeChanged\",\"inputs\":[{\"name\":\"ocrPluginType\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"TokenDataMismatch\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"TokenHandlingError\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"UnauthorizedSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedTransmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedTokenData\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongMessageLength\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"actual\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"WrongNumberOfSignatures\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroChainSelectorNotAllowed\",\"inputs\":[]}]", + Bin: "0x610140806040523461088f57617bd9803803809161001d82856108c5565b8339810190808203610160811261088f5760a0811261088f5760405160a081016001600160401b038111828210176108945760405261005b836108e8565b815260208301519061ffff8216820361088f57602081019182526040840151936001600160a01b038516850361088f576040820194855261009e606082016108fc565b946060830195865260806100b38184016108fc565b84820190815295609f19011261088f57604051936100d0856108aa565b6100dc60a084016108fc565b855260c08301519363ffffffff8516850361088f576020860194855261010460e08501610910565b966040870197885261011961010086016108fc565b606088019081526101208601519095906001600160401b03811161088f5781018b601f8201121561088f5780519b6001600160401b038d11610894578c60051b91604051809e6020850161016d90836108c5565b81526020019281016020019082821161088f5760208101935b82851061078f57505050505061014061019f91016108fc565b98331561077e57600180546001600160a01b031916331790554660805284516001600160a01b031615801561076c575b801561075a575b6107385782516001600160401b0316156107495782516001600160401b0390811660a090815286516001600160a01b0390811660c0528351811660e0528451811661010052865161ffff90811661012052604080519751909416875296519096166020860152955185169084015251831660608301525190911660808201527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b79190a182516001600160a01b031615610738579151600480548351865160ff60c01b90151560c01b1663ffffffff60a01b60a09290921b919091166001600160a01b039485166001600160c81b0319909316831717179091558351600580549184166001600160a01b031990921691909117905560408051918252925163ffffffff166020820152935115159184019190915290511660608201529091907fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee90608090a16000915b81518310156106805760009260208160051b8401015160018060401b036020820151169081156106715780516001600160a01b031615610662578186526008602052604086206060820151916001820192610399845461091d565b610603578254600160a81b600160e81b031916600160a81b1783556040518581527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb990602090a15b805180159081156105d8575b506105c9578051906001600160401b0382116105b55761040d855461091d565b601f8111610570575b50602090601f83116001146104f857918091600080516020617bb98339815191529695949360019a9b9c926104ed575b5050600019600383901b1c191690881b1783555b60408101518254915160a089811b8a9003801960ff60a01b1990951693151590911b60ff60a01b1692909217929092169116178155610498846109da565b506104e26040519283926020845254888060a01b038116602085015260ff8160a01c1615156040850152888060401b039060a81c16606084015260808084015260a0830190610957565b0390a201919061033e565b015190503880610446565b858b52818b20919a601f198416905b8181106105585750916001999a9b8492600080516020617bb9833981519152989796958c951061053f575b505050811b01835561045a565b015160001960f88460031b161c19169055388080610532565b828d0151845560209c8d019c60019094019301610507565b858b5260208b20601f840160051c810191602085106105ab575b601f0160051c01905b8181106105a05750610416565b8b8155600101610593565b909150819061058a565b634e487b7160e01b8a52604160045260248afd5b6342bcdf7f60e11b8952600489fd5b9050602082012060405160208101908b8252602081526105f96040826108c5565b51902014386103ed565b825460a81c6001600160401b03166001141580610634575b156103e157632105803760e11b89526004859052602489fd5b5060405161064d816106468188610957565b03826108c5565b6020815191012081516020830120141561061b565b6342bcdf7f60e11b8652600486fd5b63c656089560e01b8652600486fd5b6001600160a01b0381161561073857600b8054600160401b600160e01b031916604092831b600160401b600160e01b03161790555161714b9081610a6e823960805181614367015260a0518181816105590152615582015260c0518181816105bc015281816136c601528181613c52015261550f015260e0518181816105f80152615f3f01526101005181818161063401526159c101526101205181818161058001528181612cfc015281816160730152616da90152f35b6342bcdf7f60e11b60005260046000fd5b63c656089560e01b60005260046000fd5b5081516001600160a01b0316156101d6565b5080516001600160a01b0316156101cf565b639b15e16f60e01b60005260046000fd5b84516001600160401b03811161088f5782016080818603601f19011261088f57604051906107bc826108aa565b60208101516001600160a01b038116810361088f5782526107df604082016108e8565b60208301526107f060608201610910565b604083015260808101516001600160401b03811161088f57602091010185601f8201121561088f5780516001600160401b0381116108945760405191610840601f8301601f1916602001846108c5565b818352876020838301011161088f5760005b82811061087a5750509181600060208096949581960101526060820152815201940193610186565b80602080928401015182828701015201610852565b600080fd5b634e487b7160e01b600052604160045260246000fd5b608081019081106001600160401b0382111761089457604052565b601f909101601f19168101906001600160401b0382119082101761089457604052565b51906001600160401b038216820361088f57565b51906001600160a01b038216820361088f57565b5190811515820361088f57565b90600182811c9216801561094d575b602083101461093757565b634e487b7160e01b600052602260045260246000fd5b91607f169161092c565b600092918154916109678361091d565b80835292600181169081156109bd575060011461098357505050565b60009081526020812093945091925b8383106109a3575060209250010190565b600181602092949394548385870101520191019190610992565b915050602093945060ff929192191683830152151560051b010190565b80600052600760205260406000205415600014610a675760065468010000000000000000811015610894576001810180600655811015610a51577ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0181905560065460009182526007602052604090912055600190565b634e487b7160e01b600052603260045260246000fd5b5060009056fe6080604052600436101561001257600080fd5b60003560e01c806304666f9c1461016757806306285c69146101625780631056edee1461015d578063181f5a77146101585780633f4b04aa146101535780635215505b1461014e5780635e36480c146101495780635e7bb0081461014457806360987c201461013f5780637437ff9f1461013a57806379ba5097146101355780637edf52f41461013057806385572ffb1461012b5780638da5cb5b14610126578063c673e58414610121578063ccd37ba31461011c578063de5e0b9a14610117578063e9d68a8e14610112578063f2fde38b1461010d578063f58e03fc146101085763f716f99f1461010357600080fd5b611f07565b611dac565b611cb8565b611bec565b611b2f565b611a87565b6119be565b611880565b61180e565b611593565b6114aa565b6113bc565b611320565b6110d9565b610b04565b610966565b61080d565b610790565b6106c0565b610507565b6103a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6080810190811067ffffffffffffffff8211176101b757604052565b61016c565b60a0810190811067ffffffffffffffff8211176101b757604052565b6040810190811067ffffffffffffffff8211176101b757604052565b6060810190811067ffffffffffffffff8211176101b757604052565b60c0810190811067ffffffffffffffff8211176101b757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101b757604052565b6040519061027c60c08361022c565b565b6040519061027c60a08361022c565b6040519061027c6101008361022c565b6040519061027c60408361022c565b67ffffffffffffffff81116101b75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116036102e257565b600080fd5b67ffffffffffffffff8116036102e257565b359061027c826102e7565b801515036102e257565b359061027c82610304565b67ffffffffffffffff81116101b757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261035f82610319565b9161036d604051938461022c565b8294818452818301116102e2578281602093846000960137010152565b9080601f830112156102e2578160206103a593359101610353565b90565b346102e25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25760043567ffffffffffffffff81116102e257366023820112156102e257806004013590610403826102ac565b90610411604051928361022c565b8282526024602083019360051b820101903682116102e25760248101935b8285106104415761043f84612082565b005b843567ffffffffffffffff81116102e257820160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82360301126102e2576040519161048d8361019b565b602482013561049b816102c4565b835260448201356104ab816102e7565b602084015260648201356104be81610304565b604084015260848201359267ffffffffffffffff84116102e2576104ec60209493602486953692010161038a565b606082015281520194019361042f565b60009103126102e257565b346102e25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25761053e6123e0565b506106bc60405161054e816101bc565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815261ffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604082015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016606082015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016608082015260405191829182919091608073ffffffffffffffffffffffffffffffffffffffff8160a084019567ffffffffffffffff815116855261ffff6020820151166020860152826040820151166040860152826060820151166060860152015116910152565b0390f35b346102e25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e257602073ffffffffffffffffffffffffffffffffffffffff600b5460401c16604051908152f35b6040519061072460208361022c565b60008252565b60005b83811061073d5750506000910152565b818101518382015260200161072d565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936107898151809281875287808801910161072a565b0116010190565b346102e25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e2576106bc60408051906107d1818361022c565b601182527f4f666652616d7020312e362e302d64657600000000000000000000000000000060208301525191829160208352602083019061074d565b346102e25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e257602067ffffffffffffffff600b5416604051908152f35b90608060606103a59373ffffffffffffffffffffffffffffffffffffffff815116845260208101511515602085015267ffffffffffffffff6040820151166040850152015191816060820152019061074d565b6040810160408252825180915260206060830193019060005b818110610946575050506020818303910152815180825260208201916020808360051b8301019401926000915b8383106108fb57505050505090565b9091929394602080610937837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951610853565b970193019301919392906108ec565b825167ffffffffffffffff168552602094850194909201916001016108bf565b346102e25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e2576006546109a1816102ac565b906109af604051928361022c565b8082527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06109dc826102ac565b0160005b818110610aa25750506109f281612432565b9060005b818110610a0e5750506106bc604051928392836108a6565b80610a46610a2d610a206001946153cc565b67ffffffffffffffff1690565b610a3783876124c2565b9067ffffffffffffffff169052565b610a86610a81610a67610a5984886124c2565b5167ffffffffffffffff1690565b67ffffffffffffffff166000526008602052604060002090565b6125e6565b610a9082876124c2565b52610a9b81866124c2565b50016109f6565b602090610aad61240b565b828287010152016109e0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60041115610af257565b610ab9565b906004821015610af25752565b346102e25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e2576020610b56600435610b44816102e7565b60243590610b51826102e7565b6126a5565b610b636040518092610af7565bf35b91908260a09103126102e257604051610b7d816101bc565b6080808294803584526020810135610b94816102e7565b60208501526040810135610ba7816102e7565b60408501526060810135610bba816102e7565b6060850152013591610bcb836102e7565b0152565b359061027c826102c4565b63ffffffff8116036102e257565b359061027c82610bda565b81601f820112156102e257803590610c0a826102ac565b92610c18604051948561022c565b82845260208085019360051b830101918183116102e25760208101935b838510610c4457505050505090565b843567ffffffffffffffff81116102e257820160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126102e25760405191610c90836101bc565b602082013567ffffffffffffffff81116102e257856020610cb39285010161038a565b83526040820135610cc3816102c4565b6020840152610cd460608301610be8565b604084015260808201359267ffffffffffffffff84116102e25760a083610d0288602080988198010161038a565b606084015201356080820152815201940193610c35565b919091610140818403126102e257610d2f61026d565b92610d3a8183610b65565b845260a082013567ffffffffffffffff81116102e25781610d5c91840161038a565b602085015260c082013567ffffffffffffffff81116102e25781610d8191840161038a565b6040850152610d9260e08301610bcf565b6060850152610100820135608085015261012082013567ffffffffffffffff81116102e257610dc19201610bf3565b60a0830152565b9080601f830112156102e2578135610ddf816102ac565b92610ded604051948561022c565b81845260208085019260051b820101918383116102e25760208201905b838210610e1957505050505090565b813567ffffffffffffffff81116102e257602091610e3c87848094880101610d19565b815201910190610e0a565b81601f820112156102e257803590610e5e826102ac565b92610e6c604051948561022c565b82845260208085019360051b830101918183116102e25760208101935b838510610e9857505050505090565b843567ffffffffffffffff81116102e257820183603f820112156102e2576020810135610ec4816102ac565b91610ed2604051938461022c565b8183526020808085019360051b83010101918683116102e25760408201905b838210610f0b575050509082525060209485019401610e89565b813567ffffffffffffffff81116102e257602091610f308a848080958901010161038a565b815201910190610ef1565b929190610f47816102ac565b93610f55604051958661022c565b602085838152019160051b81019283116102e257905b828210610f7757505050565b8135815260209182019101610f6b565b9080601f830112156102e2578160206103a593359101610f3b565b81601f820112156102e257803590610fb9826102ac565b92610fc7604051948561022c565b82845260208085019360051b830101918183116102e25760208101935b838510610ff357505050505090565b843567ffffffffffffffff81116102e257820160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126102e25761103a61027e565b91611047602083016102f9565b8352604082013567ffffffffffffffff81116102e25785602061106c92850101610dc8565b6020840152606082013567ffffffffffffffff81116102e25785602061109492850101610e47565b604084015260808201359267ffffffffffffffff84116102e25760a0836110c2886020809881980101610f87565b606084015201356080820152815201940193610fe4565b346102e25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25760043567ffffffffffffffff81116102e257611128903690600401610fa2565b60243567ffffffffffffffff81116102e257366023820112156102e257806004013591611154836102ac565b91611162604051938461022c565b8383526024602084019460051b820101903682116102e25760248101945b8286106111915761043f85856126ee565b853567ffffffffffffffff81116102e2578201366043820112156102e25760248101356111bd816102ac565b916111cb604051938461022c565b818352602060248185019360051b83010101903682116102e25760448101925b828410611205575050509082525060209586019501611180565b833567ffffffffffffffff81116102e25760249083010160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082360301126102e25760405190611255826101d8565b60208101358252604081013567ffffffffffffffff81116102e257602091010136601f820112156102e25780359061128c826102ac565b9161129a604051938461022c565b80835260208084019160051b830101913683116102e257602001905b8282106112d557505050918160209384809401528152019301926111eb565b6020809183356112e481610bda565b8152019101906112b6565b9181601f840112156102e25782359167ffffffffffffffff83116102e2576020808501948460051b0101116102e257565b346102e25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25760043567ffffffffffffffff81116102e25761136f903690600401610d19565b60243567ffffffffffffffff81116102e25761138f9036906004016112ef565b916044359267ffffffffffffffff84116102e2576113b461043f9436906004016112ef565b939092612b85565b346102e25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e2576113f3612f39565b506106bc6040516114038161019b565b60ff60045473ffffffffffffffffffffffffffffffffffffffff8116835263ffffffff8160a01c16602084015260c01c161515604082015273ffffffffffffffffffffffffffffffffffffffff60055416606082015260405191829182919091606073ffffffffffffffffffffffffffffffffffffffff81608084019582815116855263ffffffff6020820151166020860152604081015115156040860152015116910152565b346102e25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25760005473ffffffffffffffffffffffffffffffffffffffff81163303611569577fffffffffffffffffffffffff00000000000000000000000000000000000000006001549133828416176001551660005573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f02b543c60000000000000000000000000000000000000000000000000000000060005260046000fd5b346102e25760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25760006040516115d08161019b565b6004356115dc816102c4565b81526024356115ea81610bda565b60208201526044356115fb81610304565b604082015260643561160c816102c4565b60608201526116196140d4565b73ffffffffffffffffffffffffffffffffffffffff815116156117e6576117e0816116b773ffffffffffffffffffffffffffffffffffffffff7fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee94511673ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455565b60208101516004547fffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff77ffffffff000000000000000000000000000000000000000078ff0000000000000000000000000000000000000000000000006040860151151560c01b169360a01b169116171760045561178f61174e606083015173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006005541617600555565b60405191829182919091606073ffffffffffffffffffffffffffffffffffffffff81608084019582815116855263ffffffff6020820151166020860152604081015115156040860152015116910152565b0390a180f35b6004827f8579befe000000000000000000000000000000000000000000000000000000008152fd5b346102e25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25760043567ffffffffffffffff81116102e2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a091360301126102e257600080fd5b346102e25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b6004359060ff821682036102e257565b359060ff821682036102e257565b906020808351928381520192019060005b81811061190e5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611901565b906103a59160208152606082518051602084015260ff602082015116604084015260ff60408201511682840152015115156080820152604061198b602084015160c060a085015260e08401906118f0565b9201519060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828503019101526118f0565b346102e25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25760ff6119f76118d2565b606060408051611a06816101f4565b611a0e612f39565b815282602082015201521660005260026020526106bc60406000206003611a7660405192611a3b846101f4565b611a4481612f5e565b8452604051611a6181611a5a8160028601612f97565b038261022c565b6020850152611a5a6040518094819301612f97565b60408201526040519182918261193a565b346102e25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e257600435611ac2816102e7565b67ffffffffffffffff6024359116600052600a6020526040600020906000526020526020604060002054604051908152f35b906004916044116102e257565b9181601f840112156102e25782359167ffffffffffffffff83116102e257602083818601950101116102e257565b346102e25760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e257611b6736611af4565b60443567ffffffffffffffff81116102e257611b87903690600401611b01565b60649291923567ffffffffffffffff81116102e257611baa9036906004016112ef565b608435949167ffffffffffffffff86116102e257611bcf61043f9636906004016112ef565b94909360a43596613681565b9060206103a5928181520190610853565b346102e25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25767ffffffffffffffff600435611c30816102e7565b611c3861240b565b501660005260086020526106bc60406000206001611ca760405192611c5c8461019b565b67ffffffffffffffff815473ffffffffffffffffffffffffffffffffffffffff8116865260ff8160a01c161515602087015260a81c166040850152611a5a6040518094819301612529565b606082015260405191829182611bdb565b346102e25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25773ffffffffffffffffffffffffffffffffffffffff600435611d08816102c4565b611d106140d4565b16338114611d8257807fffffffffffffffffffffffff0000000000000000000000000000000000000000600054161760005573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278600080a3005b7fdad89dca0000000000000000000000000000000000000000000000000000000060005260046000fd5b346102e25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e257611de436611af4565b60443567ffffffffffffffff81116102e257611e04903690600401611b01565b918282016020838203126102e25782359067ffffffffffffffff82116102e257611e2f918401610fa2565b604051906020611e3f818461022c565b600083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810160005b818110611e915750505061043f9491611e81916143c1565b611e89613ce0565b928392614cf3565b60608582018401528201611e69565b9080601f830112156102e2578135611eb7816102ac565b92611ec5604051948561022c565b81845260208085019260051b8201019283116102e257602001905b828210611eed5750505090565b602080918335611efc816102c4565b815201910190611ee0565b346102e25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e25760043567ffffffffffffffff81116102e257366023820112156102e257806004013590611f62826102ac565b90611f70604051928361022c565b8282526024602083019360051b820101903682116102e25760248101935b828510611f9e5761043f84613cfc565b843567ffffffffffffffff81116102e257820160c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82360301126102e257611fe561026d565b9160248201358352611ff9604483016118e2565b602084015261200a606483016118e2565b604084015261201b6084830161030e565b606084015260a482013567ffffffffffffffff81116102e2576120449060243691850101611ea0565b608084015260c48201359267ffffffffffffffff84116102e257612072602094936024869536920101611ea0565b60a0820152815201940193611f8e565b61208a6140d4565b60005b81518110156123dc576120a081836124c2565b51906120b7602083015167ffffffffffffffff1690565b9167ffffffffffffffff83169081156123b2576121076120ee6120ee835173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b156122e45761212a8467ffffffffffffffff166000526008602052604060002090565b90606081015191600181019561214087546124d6565b612324576121c87ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb9916121ad8475010000000000000000000000000000000000000000007fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff825416179055565b60405167ffffffffffffffff90911681529081906020820190565b0390a15b8251801590811561230e575b506122e4576122c56122846122db936122147f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b9660019a61419c565b61226a6122246040830151151590565b85547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016178555565b5173ffffffffffffffffffffffffffffffffffffffff1690565b829073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b6122ce846168b2565b50604051918291826142c7565b0390a20161208d565b7f8579befe0000000000000000000000000000000000000000000000000000000060005260046000fd5b9050602084012061231d61411f565b14386121d8565b600167ffffffffffffffff612345845467ffffffffffffffff9060a81c1690565b16141580612393575b61235857506121cc565b7f420b006e0000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b6000fd5b5061239d876125cb565b6020815191012084516020860120141561234e565b7fc65608950000000000000000000000000000000000000000000000000000000060005260046000fd5b5050565b604051906123ed826101bc565b60006080838281528260208201528260408201528260608201520152565b604051906124188261019b565b606080836000815260006020820152600060408201520152565b9061243c826102ac565b612449604051918261022c565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061247782946102ac565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051156124bd5760200190565b612481565b80518210156124bd5760209160051b010190565b90600182811c9216801561251f575b60208310146124f057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916124e5565b60009291815491612539836124d6565b808352926001811690811561258f575060011461255557505050565b60009081526020812093945091925b838310612575575060209250010190565b600181602092949394548385870101520191019190612564565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b9061027c6125df9260405193848092612529565b038361022c565b90600160606040516125f78161019b565b610bcb819567ffffffffffffffff815473ffffffffffffffffffffffffffffffffffffffff8116855260ff8160a01c161515602086015260a81c1660408401526126476040518096819301612529565b038461022c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b908160051b918083046020149015171561269357565b61264e565b9190820391821161269357565b6126b182607f9261431f565b9116906801fffffffffffffffe67ffffffffffffffff83169260011b169180830460021490151715612693576003911c166004811015610af25790565b6126f6614365565b80518251810361293c5760005b8181106127165750509061027c916143c1565b61272081846124c2565b51602081019081515161273384886124c2565b51928351820361293c5790916000925b808410612757575050505050600101612703565b91949398612769848b989395986124c2565b5151986127778888516124c2565b5199806128d8575b5060a08a01988b60206127958b8d5151936124c2565b51015151036128805760005b8a515181101561286b576127dd6127d46127ca8f60206127c28f87936124c2565b5101516124c2565b5163ffffffff1690565b63ffffffff1690565b8b816127ee575b50506001016127a1565b6127d460406128018561280d94516124c2565b51015163ffffffff1690565b9081811061281c57508b6127e4565b8d51516040517f48e617b30000000000000000000000000000000000000000000000000000000081526004810191909152602481019390935260448301919091526064820152608490fd5b0390fd5b50985098509893949095600101929091612743565b61238f8b5161289c6060825192015167ffffffffffffffff1690565b7f70a193fd0000000000000000000000000000000000000000000000000000000060005260049190915267ffffffffffffffff16602452604490565b60808b015181101561277f5761238f908b6128fb885167ffffffffffffffff1690565b9051517f7531a8c60000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff909116600452602452604452606490565b7f83e3f5640000000000000000000000000000000000000000000000000000000060005260046000fd5b60405190612973826101d8565b60006020838281520152565b6040519061298e60208361022c565b600080835282815b8281106129a257505050565b6020906129ad612966565b82828501015201612996565b8051825267ffffffffffffffff60208201511660208301526080612a016129ef604084015160a0604087015260a086019061074d565b6060840151858203606087015261074d565b9101519160808183039101526020808351928381520192019060005b818110612a2a5750505090565b8251805173ffffffffffffffffffffffffffffffffffffffff1685526020908101518186015260409094019390920191600101612a1d565b9060206103a59281815201906129b9565b6040513d6000823e3d90fd5b3d15612aaa573d90612a9082610319565b91612a9e604051938461022c565b82523d6000602084013e565b606090565b9060206103a592818152019061074d565b81601f820112156102e2578051612ad681610319565b92612ae4604051948561022c565b818452602082840101116102e2576103a5916020808501910161072a565b90916060828403126102e2578151612b1981610304565b92602083015167ffffffffffffffff81116102e257604091612b3c918501612ac0565b92015190565b9293606092959461ffff612b7373ffffffffffffffffffffffffffffffffffffffff946080885260808801906129b9565b97166020860152604085015216910152565b9391929093303303612f0f57612b9a906148a6565b92612ba361297f565b9460a08501518051612eba575b5050505050805191612bcf6020845194015167ffffffffffffffff1690565b906020830151916040840192612bfd845192612be961027e565b97885267ffffffffffffffff166020880152565b60408601526060850152608084015273ffffffffffffffffffffffffffffffffffffffff612c4060055473ffffffffffffffffffffffffffffffffffffffff1690565b1680612e0b575b5051511580612dff575b8015612ddc575b8015612da6575b6123dc57612d259181612ca46120ee612c8a610a676020600097510167ffffffffffffffff90511690565b5473ffffffffffffffffffffffffffffffffffffffff1690565b9083612ccc6060608084015193015173ffffffffffffffffffffffffffffffffffffffff1690565b93604051968795869485937f3cf979830000000000000000000000000000000000000000000000000000000085527f00000000000000000000000000000000000000000000000000000000000000009060048601612b42565b03925af1908115612da157600090600092612d7a575b5015612d445750565b612867906040519182917f0a8d6e8c00000000000000000000000000000000000000000000000000000000835260048301612aaf565b9050612d9991503d806000833e612d91818361022c565b810190612b02565b509038612d3b565b612a73565b50612dd7612dd3612dce606084015173ffffffffffffffffffffffffffffffffffffffff1690565b614b68565b1590565b612c5f565b50606081015173ffffffffffffffffffffffffffffffffffffffff163b15612c58565b50608081015115612c51565b803b156102e257600060405180927f08d450a1000000000000000000000000000000000000000000000000000000008252818381612e4c8a60048301612a62565b03925af19081612e9f575b50612e9957612867612e67612a7f565b6040519182917f09c2532500000000000000000000000000000000000000000000000000000000835260048301612aaf565b38612c47565b80612eae6000612eb49361022c565b806104fc565b38612e57565b8596506020612f04960151612ee6606089015173ffffffffffffffffffffffffffffffffffffffff1690565b90612efe60208a510167ffffffffffffffff90511690565b92614a32565b903880808080612bb0565b7f371a73280000000000000000000000000000000000000000000000000000000060005260046000fd5b60405190612f468261019b565b60006060838281528260208201528260408201520152565b90604051612f6b8161019b565b606060ff600183958054855201548181166020850152818160081c16604085015260101c161515910152565b906020825491828152019160005260206000209060005b818110612fbb5750505090565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612fae565b9061027c6125df9260405193848092612f97565b35907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821682036102e257565b81601f820112156102e25780359061303b826102ac565b92613049604051948561022c565b82845260208085019360061b830101918183116102e257602001925b828410613073575050505090565b6040848303126102e2576020604091825161308d816101d8565b8635613098816102e7565b81526130a5838801612ffb565b83820152815201930192613065565b81601f820112156102e2578035906130cb826102ac565b926130d9604051948561022c565b82845260208085019360051b830101918183116102e25760208101935b83851061310557505050505090565b843567ffffffffffffffff81116102e257820160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126102e25760405191613151836101bc565b602082013561315f816102e7565b835260408201359267ffffffffffffffff84116102e25760a08361318a88602080988198010161038a565b85840152606081013561319c816102e7565b604084015260808101356131af816102e7565b6060840152013560808201528152019401936130f6565b81601f820112156102e2578035906131dd826102ac565b926131eb604051948561022c565b82845260208085019360061b830101918183116102e257602001925b828410613215575050505090565b6040848303126102e2576020604091825161322f816101d8565b863581528287013583820152815201930192613207565b6020818303126102e25780359067ffffffffffffffff82116102e257016060818303126102e2576040519161327a836101f4565b813567ffffffffffffffff81116102e25782016040818303126102e257604051906132a4826101d8565b803567ffffffffffffffff81116102e257810183601f820112156102e25780356132cd816102ac565b916132db604051938461022c565b81835260208084019260061b820101908682116102e257602001915b81831061337657505050825260208101359067ffffffffffffffff82116102e25761332491849101613024565b60208201528352602082013567ffffffffffffffff81116102e2578161334b9184016130b4565b6020840152604082013567ffffffffffffffff81116102e25761336e92016131c6565b604082015290565b6040838803126102e25760206040918251613390816101d8565b853561339b816102c4565b81526133a8838701612ffb565b838201528152019201916132f7565b9080602083519182815201916020808360051b8301019401926000915b8383106133e357505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519067ffffffffffffffff82511681526080806134408585015160a08786015260a085019061074d565b9367ffffffffffffffff604082015116604085015267ffffffffffffffff60608201511660608501520151910152970193019301919392906133d4565b9173ffffffffffffffffffffffffffffffffffffffff6134ab921683526060602084015260608301906133b7565b9060408183039101526020808351928381520192019060005b8181106134d15750505090565b82518051855260209081015181860152604090940193909201916001016134c4565b906020808351928381520192019060005b8181106135115750505090565b8251805167ffffffffffffffff1685526020908101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168186015260409094019390920191600101613504565b9190604081019083519160408252825180915260206060830193019060005b81811061359b5750505060206103a5939401519060208184039101526134f3565b8251805173ffffffffffffffffffffffffffffffffffffffff1686526020908101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16818701526040909501949092019160010161357a565b9060206103a592818152019061355b565b908160209103126102e257516103a581610304565b909161362e6103a59360408452604084019061074d565b916020818403910152612529565b67ffffffffffffffff60019116019067ffffffffffffffff821161269357565b90916136736103a5936040845260408401906133b7565b91602081840391015261355b565b92969395919097949761369682820182613246565b986136aa612dd360045460ff9060c01c1690565b613c29575b89518051511590811591613c1a575b50613ae8575b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16999860208a019860005b8a518051821015613a86578161371a916124c2565b518d61372e825167ffffffffffffffff1690565b6040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608083901b1660048201529091602090829060249082905afa908115612da157600091613a58575b50613a21576137a390614be8565b602082018051602081519101209060018301916137bf836125cb565b60208151910120036139eb5750508054604083015167ffffffffffffffff9081169160a81c1681148015906139c1575b613953575060808201519081156139295761384282613833613819865167ffffffffffffffff1690565b67ffffffffffffffff16600052600a602052604060002090565b90600052602052604060002090565b546138da5782916138bd6138d39261387061386b606060019998015167ffffffffffffffff1690565b61363c565b7fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff7cffffffffffffffff00000000000000000000000000000000000000000083549260a81b169116179055565b61383361381942945167ffffffffffffffff1690565b5501613705565b506138f061238f925167ffffffffffffffff1690565b7f32cf0cbf0000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff16600452602452604490565b7f504570e30000000000000000000000000000000000000000000000000000000060005260046000fd5b8261238f9161397f606061396f845167ffffffffffffffff1690565b93015167ffffffffffffffff1690565b7fd5e0f0d60000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff92831660045290821660245216604452606490565b506139da610a20606085015167ffffffffffffffff1690565b67ffffffffffffffff8216116137ef565b516128676040519283927fb80d8fa900000000000000000000000000000000000000000000000000000000845260048401613617565b7ffdbd6a720000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b613a79915060203d8111613a7f575b613a71818361022c565b810190613602565b38613795565b503d613a67565b5050613ae29496989b507f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e461027c9b613ada949597999b51905190613ad06040519283928361365c565b0390a13691610f3b565b943691610f3b565b93615087565b613afe602086015b3567ffffffffffffffff1690565b600b5467ffffffffffffffff82811691161015613be557613b4e9067ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600b541617600b55565b613b736120ee6120ee60045473ffffffffffffffffffffffffffffffffffffffff1690565b8a5190803b156102e257613bbb6000929183926040519485809481937f3937306f000000000000000000000000000000000000000000000000000000008352600483016135f1565b03925af18015612da157613bd0575b506136c4565b80612eae6000613bdf9361022c565b38613bca565b5060208a0151516136c4577f226111670000000000000000000000000000000000000000000000000000000060005260046000fd5b602091500151511515386136be565b60208a01518051613c3b575b506136af565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169060408c0151823b156102e257613cbc926000926040518095819482937f70a9089e000000000000000000000000000000000000000000000000000000008452306004850161347d565b03915afa8015612da15715613c355780612eae6000613cda9361022c565b38613c35565b60405190613cef60208361022c565b6000808352366020840137565b613d046140d4565b60005b81518110156123dc57613d1a81836124c2565b51906040820160ff613d2d825160ff1690565b16156140a357602083015160ff1692613d538460ff166000526002602052604060002090565b9160018301918254613d6e613d688260ff1690565b60ff1690565b61404f5750613db7613d836060830151151590565b84547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1690151560101b62ff000016178455565b60a08101918251610100815111613f93578051156140205760038601613de5613ddf82612fe7565b8a616575565b6060840151613e93575b947fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f54794600294613e6f613e41613e8d9a96613e3a8760019f9c613e35613e859a8f61676a565b6152b4565b5160ff1690565b84547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff821617909455565b5190818555519060405195869501908886615348565b0390a16167f9565b01613d07565b97946002879395970196613eaf613ea989612fe7565b88616575565b608085015194610100865111613ff1578551613ed7613d68613ed28a5160ff1690565b6152a0565b1015613fc2578551845111613f9357613e6f613e417fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f54798613e3a8760019f613e35613e8d9f9a8f613f7b60029f613f75613e859f8f90613e358492613f3d845160ff1690565b90805490917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911660089190911b61ff0016179055565b8261665e565b505050979c9f50975050969a50505094509450613def565b7f367f56a200000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f367f56a200000000000000000000000000000000000000000000000000000000600052600360045260246000fd5b7f367f56a200000000000000000000000000000000000000000000000000000000600052600260045260246000fd5b7f367f56a200000000000000000000000000000000000000000000000000000000600052600560045260246000fd5b60101c60ff1661406a6140656060840151151590565b151590565b90151514613db7577f87f6037c0000000000000000000000000000000000000000000000000000000060005260ff861660045260246000fd5b7f367f56a20000000000000000000000000000000000000000000000000000000060005261238f6024906000600452565b73ffffffffffffffffffffffffffffffffffffffff6001541633036140f557565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b6040516020810190600082526020815261413a60408261022c565b51902090565b81811061414b575050565b60008155600101614140565b9190601f811161416657505050565b61027c926000526020600020906020601f840160051c83019310614192575b601f0160051c0190614140565b9091508190614185565b919091825167ffffffffffffffff81116101b7576141c4816141be84546124d6565b84614157565b6020601f8211600114614222578190614213939495600092614217575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055565b0151905038806141e1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169061425584600052602060002090565b9160005b8181106142af57509583600195969710614278575b505050811b019055565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c1916905538808061426e565b9192602060018192868b015181550194019201614259565b90600160a06103a5936020815267ffffffffffffffff845473ffffffffffffffffffffffffffffffffffffffff8116602084015260ff81851c161515604084015260a81c166060820152608080820152019101612529565b9067ffffffffffffffff614361921660005260096020526701ffffffffffffff60406000209160071c1667ffffffffffffffff16600052602052604060002090565b5490565b7f00000000000000000000000000000000000000000000000000000000000000004681036143905750565b7f0f01ce85000000000000000000000000000000000000000000000000000000006000526004524660245260446000fd5b9190918051156144815782511592602091604051926143e0818561022c565b600084527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810160005b81811061445d5750505060005b8151811015614455578061443e614430600193856124c2565b518815614444578690615496565b01614417565b61444e83876124c2565b5190615496565b505050509050565b829060405161446b816101d8565b600081526060838201528282890101520161440a565b7fc2e5347d0000000000000000000000000000000000000000000000000000000060005260046000fd5b91908260a09103126102e2576040516144c3816101bc565b60808082948051845260208101516144da816102e7565b602085015260408101516144ed816102e7565b60408501526060810151614500816102e7565b6060850152015191610bcb836102e7565b519061027c826102c4565b519061027c82610bda565b81601f820112156102e25780519061453e826102ac565b9261454c604051948561022c565b82845260208085019360051b830101918183116102e25760208101935b83851061457857505050505090565b845167ffffffffffffffff81116102e257820160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126102e257604051916145c4836101bc565b602082015167ffffffffffffffff81116102e2578560206145e792850101612ac0565b835260408201516145f7816102c4565b60208401526146086060830161451c565b604084015260808201519267ffffffffffffffff84116102e25760a083614636886020809881980101612ac0565b606084015201516080820152815201940193614569565b6020818303126102e25780519067ffffffffffffffff82116102e25701610140818303126102e25761467d61026d565b9161468881836144ab565b835260a082015167ffffffffffffffff81116102e257816146aa918401612ac0565b602084015260c082015167ffffffffffffffff81116102e257816146cf918401612ac0565b60408401526146e060e08301614511565b6060840152610100820151608084015261012082015167ffffffffffffffff81116102e25761470f9201614527565b60a082015290565b9080602083519182815201916020808360051b8301019401926000915b83831061474357505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085600195030186528851906080806147d1614791855160a0865260a086019061074d565b73ffffffffffffffffffffffffffffffffffffffff87870151168786015263ffffffff60408701511660408601526060860151858203606087015261074d565b93015191015297019301930191939290614734565b6103a59167ffffffffffffffff6080835180518452826020820151166020850152826040820151166040850152826060820151166060850152015116608082015260a061485861484660208501516101408486015261014085019061074d565b604085015184820360c086015261074d565b606084015173ffffffffffffffffffffffffffffffffffffffff1660e0840152926080810151610100840152015190610120818403910152614717565b9060206103a59281815201906147e6565b600061494481926040516148b981610210565b6148c16123e0565b81526060602082015260606040820152836060820152836080820152606060a08201525061490e6120ee6120ee600b5473ffffffffffffffffffffffffffffffffffffffff9060401c1690565b906040519485809481937f4546c6e500000000000000000000000000000000000000000000000000000000835260048301614895565b03925af160009181614993575b506103a557612867614961612a7f565b6040519182917f828ebdfb00000000000000000000000000000000000000000000000000000000835260048301612aaf565b6149b19192503d806000833e6149a9818361022c565b81019061464d565b9038614951565b91908110156124bd5760051b0190565b356103a581610bda565b91908110156124bd5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102e257019081359167ffffffffffffffff83116102e25760200182360381136102e2579190565b909294919397968151967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0614a7f614a698a6102ac565b99614a776040519b8c61022c565b808b526102ac565b0160005b818110614b5157505060005b8351811015614b445780614ad68c8a8a8a614ad0614ac9878d614ac2828f8f9d8f9e60019f81614af2575b5050506124c2565b51976149d2565b3691610353565b93615eb0565b614ae0828c6124c2565b52614aeb818b6124c2565b5001614a8f565b63ffffffff614b0a614b058585856149b8565b6149c8565b1615614aba57614b3a92614b2192614b05926149b8565b6040614b2d85856124c2565b51019063ffffffff169052565b8f8f908391614aba565b5096985050505050505050565b602090614b5c612966565b82828d01015201614a83565b614b927f85572ffb000000000000000000000000000000000000000000000000000000008261639e565b9081614bac575b81614ba2575090565b6103a5915061633e565b9050614bb781616278565b1590614b99565b614b927faff2afbf000000000000000000000000000000000000000000000000000000008261639e565b67ffffffffffffffff1680600052600860205260406000209060ff825460a01c1615614c12575090565b7fed053c590000000000000000000000000000000000000000000000000000000060005260045260246000fd5b608401908160841161269357565b60a001908160a01161269357565b9190820180921161269357565b60031115610af257565b6003821015610af25752565b9061027c604051614c8e816101d8565b602060ff829554818116845260081c169101614c72565b80548210156124bd5760005260206000200190600090565b60ff60019116019060ff821161269357565b60ff601b9116019060ff821161269357565b90606092604091835260208301370190565b6001600052600260205293614d277fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0612f5e565b93853594614d3485614c3f565b6060820190614d438251151590565b615059575b80360361502857508151878103614ff65750614d62614365565b60016000526003602052614dbe614db97fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c5b3373ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b614c7e565b60026020820151614dce81614c68565b614dd781614c68565b149081614f81575b5015614f575751614e3e575b50505050507f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef090614e21613af060019460200190565b6040805192835267ffffffffffffffff91909116602083015290a2565b614e5f613d68614e5a602085969799989a955194015160ff1690565b614cbd565b03614f2d578151835103614f0357614efb6000614e2194613af094614ea97f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef09960019b3691610353565b60208151910120604051614ef281614ec689602083019586614ce1565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261022c565b5190208a616400565b948394614deb565b7fa75d88af0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f71253a250000000000000000000000000000000000000000000000000000000060005260046000fd5b7fda0f08e80000000000000000000000000000000000000000000000000000000060005260046000fd5b60016000526002602052614fee91506120ee90614fce90614fc860037fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e05b01915160ff1690565b90614ca5565b905473ffffffffffffffffffffffffffffffffffffffff9160031b1c1690565b331438614ddf565b7f93df584c00000000000000000000000000000000000000000000000000000000600052600452602487905260446000fd5b7f8e1192e1000000000000000000000000000000000000000000000000000000006000526004523660245260446000fd5b6150829061507c61507261506d875161267d565b614c4d565b61507c885161267d565b90614c5b565b614d48565b600080526002602052949093909290916150c07fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b612f5e565b948635956150cd83614c3f565b60608201906150dc8251151590565b61527d575b8036036150285750815188810361524b57506150fb614365565b600080526003602052615130614db97f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff614d94565b6002602082015161514081614c68565b61514981614c68565b149081615202575b5015614f575751615194575b5050505050507f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef090614e21613af060009460200190565b6151b0613d68614e5a602087989a999b96975194015160ff1690565b03614f2d578351865103614f03576000967f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef096614e2195614ea96151f994613af0973691610353565b9483943861515d565b60008052600260205261524391506120ee90614fce90614fc860037fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b614fbf565b331438615151565b7f93df584c00000000000000000000000000000000000000000000000000000000600052600452602488905260446000fd5b61529b9061507c61529161506d895161267d565b61507c8a5161267d565b6150e1565b60ff166003029060ff821691820361269357565b81519167ffffffffffffffff83116101b7576801000000000000000083116101b757602090825484845580851061532b575b500190600052602060002060005b8381106153015750505050565b600190602073ffffffffffffffffffffffffffffffffffffffff85511694019381840155016152f4565b615342908460005285846000209182019101614140565b386152e6565b95949392909160ff61536d93168752602087015260a0604087015260a0860190612f97565b84810360608601526020808351928381520192019060005b8181106153a05750505090608061027c9294019060ff169052565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101615385565b6006548110156124bd5760066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015490565b67ffffffffffffffff6103a5949381606094168352166020820152816040820152019061074d565b6040906103a593928152816020820152019061074d565b92919067ffffffffffffffff908160649516600452166024526004811015610af257604452565b9493926154806060936154919388526020880190610af7565b60806040870152608086019061074d565b930152565b906154a9825167ffffffffffffffff1690565b81516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608084901b16600482015290151593919067ffffffffffffffff8216906020816024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa908115612da157600091615d17575b50615cd4576020830191825151948515615c8957604085018051518703615c5f5761557f87612432565b957f00000000000000000000000000000000000000000000000000000000000000006155b560016155af87614be8565b016125cb565b6020815191012060405161561681614ec66020820194868b8767ffffffffffffffff6060929594938160808401977f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f85521660208401521660408201520152565b5190209067ffffffffffffffff1660005b8a8110615b91575050508060806060615647930151910151908886616a6c565b978815615b595760005b8881106156645750505050505050505050565b5a6156708289516124c2565b5180516060015161568b9067ffffffffffffffff16886126a5565b61569481610ae8565b8015908d8283159384615b46575b15615b025760608815615a8357506156c960206156bf898d6124c2565b5101519242612698565b6004546156de9060a01c63ffffffff166127d4565b108015615a70575b15615a38576156f5878b6124c2565b5151615a22575b8451608001516157159067ffffffffffffffff16610a20565b615943575b506157268689516124c2565b5160a0850151518151036158ec579361578d9695938c938f9661576c8e958c92615766615760606089510167ffffffffffffffff90511690565b89616a9f565b86616bb9565b9a908096615787606088510167ffffffffffffffff90511690565b90616b2a565b615882575b505061579d82610ae8565b60028203615820575b6001966158167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b9367ffffffffffffffff9351926158076157fe8b6157f6606088015167ffffffffffffffff1690565b96519b6124c2565b51985a90612698565b91604051958695169885615467565b0390a45b01615651565b9150919394925061583082610ae8565b60038203615844578b929493918a916157a6565b51606001517f926c5a3e0000000000000000000000000000000000000000000000000000000060005261238f919067ffffffffffffffff1689615440565b61588b84610ae8565b600384036157925790929495506158a3919350610ae8565b6158b3578b92918a913880615792565b849051516128676040519283927f2b11b8d900000000000000000000000000000000000000000000000000000000845260048401615429565b61238f8b615907606088510167ffffffffffffffff90511690565b7f1cfe6d8b0000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff91821660045216602452604490565b61594c83610ae8565b615957575b3861571a565b83516080015167ffffffffffffffff16602080860151918c6159a660405194859384937fe0e03cae00000000000000000000000000000000000000000000000000000000855260048501615401565b0381600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115612da157600091615a04575b5061595157505050505060019061581a565b615a1c915060203d8111613a7f57613a71818361022c565b386159f2565b615a2c878b6124c2565b515160808601526156fc565b7fa9cfc8620000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff8b1660045260246000fd5b50615a7a83610ae8565b600383146156e6565b915083615a8f84610ae8565b156156fc57506001959450615afa9250615ad791507f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe6512093510167ffffffffffffffff90511690565b6040805167ffffffffffffffff808c168252909216602083015290918291820190565b0390a161581a565b505050506001929150615afa615ad760607f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c93510167ffffffffffffffff90511690565b50615b5083610ae8565b600383146156a2565b7f7dd17a7e0000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff841660045260246000fd5b615b9c818a516124c2565b5180516040015167ffffffffffffffff16838103615c28575080516020015167ffffffffffffffff16898103615beb575090615bda84600193616947565b615be4828d6124c2565b5201615627565b7f6c95f1eb0000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff808a166004521660245260446000fd5b7f38432a220000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b7f57e0e0830000000000000000000000000000000000000000000000000000000060005260046000fd5b61238f615c9e865167ffffffffffffffff1690565b7fced9e4960000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff16600452602490565b5092915050613a215760405167ffffffffffffffff9190911681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d89493390602090a1565b615d30915060203d602011613a7f57613a71818361022c565b38615555565b908160209103126102e257516103a5816102c4565b906103a5916020815260e0615e40615e0d615d748551610100602087015261012086019061074d565b602086015167ffffffffffffffff166040860152604086015173ffffffffffffffffffffffffffffffffffffffff16606086015260608601516080860152615dd9608087015160a087019073ffffffffffffffffffffffffffffffffffffffff169052565b60a08601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08683030160c087015261074d565b60c08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858303018486015261074d565b920151906101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08285030191015261074d565b60409073ffffffffffffffffffffffffffffffffffffffff6103a59493168152816020820152019061074d565b908160209103126102e2575190565b91939293615ebc612966565b50602083015173ffffffffffffffffffffffffffffffffffffffff166040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152909590926020848060248101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415612da157600094616247575b5073ffffffffffffffffffffffffffffffffffffffff84169586158015616235575b6161f15761606f61609892614ec692615fbf615fb86127d460408c015163ffffffff1690565b8c89616d4b565b9690996080810151615fee6060835193015193615fda61028d565b96875267ffffffffffffffff166020870152565b73ffffffffffffffffffffffffffffffffffffffff8a166040860152606085015273ffffffffffffffffffffffffffffffffffffffff8d16608085015260a084015260c083015260e08201526040519283917f3907753700000000000000000000000000000000000000000000000000000000602084015260248301615d4b565b82857f000000000000000000000000000000000000000000000000000000000000000092616dff565b949091156161bc575080516020810361618a5750906160c1826020808a95518301019101615ea1565b9573ffffffffffffffffffffffffffffffffffffffff841603616113575b505050505061610b6160ef61029d565b73ffffffffffffffffffffffffffffffffffffffff9093168352565b602082015290565b6161269361612091612698565b91616d4b565b50908082108015616177575b61613e578084816160df565b61238f927fa966e21f00000000000000000000000000000000000000000000000000000000600052929190606493600452602452604452565b50826161838284612698565b1415616132565b7f78ef802400000000000000000000000000000000000000000000000000000000600052602060045260245260446000fd5b6128676040519283927f9fe2f95a00000000000000000000000000000000000000000000000000000000845260048401615e74565b7fae9b4ce90000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff851660045260246000fd5b50616242612dd386614bbe565b615f92565b61626a91945060203d602011616271575b616262818361022c565b810190615d36565b9238615f70565b503d616258565b60405160208101917f01ffc9a70000000000000000000000000000000000000000000000000000000083527fffffffff000000000000000000000000000000000000000000000000000000006024830152602482526162d860448361022c565b6179185a10616314576020926000925191617530fa6000513d82616308575b5081616301575090565b9050151590565b602011159150386162f7565b7fea7f4b120000000000000000000000000000000000000000000000000000000060005260046000fd5b60405160208101917f01ffc9a70000000000000000000000000000000000000000000000000000000083527f01ffc9a7000000000000000000000000000000000000000000000000000000006024830152602482526162d860448361022c565b604051907fffffffff0000000000000000000000000000000000000000000000000000000060208301937f01ffc9a7000000000000000000000000000000000000000000000000000000008552166024830152602482526162d860448361022c565b919390926000948051946000965b86881061641f575050505050505050565b60208810156124bd5760206000616437878b1a614ccf565b6164418b876124c2565b51906164786164508d8a6124c2565b5160405193849389859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15612da1576164cb614db96000516164a68960ff166000526003602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90600160208301516164dc81614c68565b6164e581614c68565b0361654b576165026164f8835160ff1690565b60ff600191161b90565b8116616521576165186164f86001935160ff1690565b1797019661640e565b7ff67bc7c40000000000000000000000000000000000000000000000000000000060005260046000fd5b7fca31867a0000000000000000000000000000000000000000000000000000000060005260046000fd5b91909160005b83518110156165e85760019060ff8316600052600360205260006165e16040822073ffffffffffffffffffffffffffffffffffffffff6165bb858a6124c2565b511673ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b550161657b565b50509050565b815181547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9190911617815590602001516003811015610af25781547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1660089190911b61ff0016179055565b919060005b81518110156165e85761667961226a82846124c2565b906166a2616698836164a68860ff166000526003602052604060002090565b5460081c60ff1690565b6166ab81614c68565b61673c5773ffffffffffffffffffffffffffffffffffffffff8216156167125761670c6001926167076166dc61029d565b60ff85168152916166f08660208501614c72565b6164a68960ff166000526003602052604060002090565b6165ee565b01616663565b7fd6c62c9b0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f367f56a2000000000000000000000000000000000000000000000000000000006000526004805260246000fd5b919060005b81518110156165e85761678561226a82846124c2565b906167a4616698836164a68860ff166000526003602052604060002090565b6167ad81614c68565b61673c5773ffffffffffffffffffffffffffffffffffffffff821615616712576167f36001926167076167de61029d565b60ff85168152916166f0600260208501614c72565b0161676f565b60ff1680600052600260205260ff60016040600020015460101c1690801560001461687857501561684e577fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600b5416600b55565b7f2f7b1ba20000000000000000000000000000000000000000000000000000000060005260046000fd5b6001146168825750565b61688857565b7ff718e9a00000000000000000000000000000000000000000000000000000000060005260046000fd5b8060005260076020526040600020541560001461693057600654680100000000000000008110156101b7576001810160065560006006548210156124bd57600690527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01819055600654906000526007602052604060002055600190565b50600090565b9060206103a5928181520190614717565b61413a81518051906169f8616973606086015173ffffffffffffffffffffffffffffffffffffffff1690565b614ec661698b606085015167ffffffffffffffff1690565b936169a56080808a015192015167ffffffffffffffff1690565b906040519586946020860198899367ffffffffffffffff60809473ffffffffffffffffffffffffffffffffffffffff82959998949960a089019a8952166020880152166040860152606085015216910152565b519020614ec66020840151602081519101209360a0604082015160208151910120910151604051616a3181614ec6602082019485616936565b51902090604051958694602086019889919260a093969594919660c08401976000855260208501526040840152606083015260808201520152565b9267ffffffffffffffff92616a8092616f25565b9116600052600a60205260406000209060005260205260406000205490565b607f8216906801fffffffffffffffe67ffffffffffffffff83169260011b16918083046002149015171561269357616b279167ffffffffffffffff616ae4858461431f565b921660005260096020526701ffffffffffffff60406000209460071c169160036001831b921b191617929067ffffffffffffffff16600052602052604060002090565b55565b9091607f83166801fffffffffffffffe67ffffffffffffffff82169160011b16908082046002149015171561269357616b63848461431f565b6004831015610af25767ffffffffffffffff616b279416600052600960205260036701ffffffffffffff60406000209660071c1693831b921b191617929067ffffffffffffffff16600052602052604060002090565b9190303b156102e25790616c0292916040519384937f60987c200000000000000000000000000000000000000000000000000000000085526060600486015260648501906147e6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848203016024850152815180825260208201916020808360051b8301019401926000915b838310616cfa5750505050507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8382030160448401526020808351928381520192019060005b818110616cdb575050509080600092038183305af19081616cc6575b50616cbb57616cb6612a7f565b600391565b6002906103a5610715565b80612eae6000616cd59361022c565b38616ca9565b825163ffffffff16845285945060209384019390920191600101616c8d565b91939596509193602080616d38837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895161074d565b9701930193019092879695949293616c47565b6040517f70a0823100000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091166024820152919291616dce90616da58160448101614ec6565b84837f000000000000000000000000000000000000000000000000000000000000000092616dff565b929091156161bc575080516020810361618a575090616df9826020806103a595518301019101615ea1565b93612698565b939193616e0c6084610319565b94616e1a604051968761022c565b60848652616e286084610319565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602088019601368737833b15616efb575a90808210616ed1578291038060061c90031115616ea7576000918291825a9560208451940192f1905a9003923d9060848211616e9e575b6000908287523e929190565b60849150616e92565b7f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b7fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b80519282519084156170d657610101851115806170ca575b15616fe057818501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601956101008711616fe05786156170ba57616f8287612432565b9660009586978795885b84811061701e5750505050507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe018095149384617014575b50508261700a575b505015616fe057616fdc916124c2565b5190565b7f09bde3390000000000000000000000000000000000000000000000000000000060005260046000fd5b1490503880616fcc565b1492503880616fc4565b6001811b828116036170ac57868a10156170975761704060018b019a856124c2565b51905b8c888c1015617083575061705b60018c019b866124c2565b515b818d11616fe05761707c828f9261707690600196617100565b926124c2565b5201616f8c565b60018d019c617091916124c2565b5161705d565b6170a560018c019b8d6124c2565b5190617043565b6170a56001890198846124c2565b505050509050616fdc91506124b0565b50610101821115616f3d565b7f11a6b2640000000000000000000000000000000000000000000000000000000060005260046000fd5b8181101561711257906103a591617117565b6103a5915b9060405190602082019260018452604083015260608201526060815261413a60808261022c56fea164736f6c634300081a000a49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b", +} + +var MessageTransformerOffRampABI = MessageTransformerOffRampMetaData.ABI + +var MessageTransformerOffRampBin = MessageTransformerOffRampMetaData.Bin + +func DeployMessageTransformerOffRamp(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig OffRampStaticConfig, dynamicConfig OffRampDynamicConfig, sourceChainConfigs []OffRampSourceChainConfigArgs, messageTransformerAddr common.Address) (common.Address, *types.Transaction, *MessageTransformerOffRamp, error) { + parsed, err := MessageTransformerOffRampMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MessageTransformerOffRampBin), backend, staticConfig, dynamicConfig, sourceChainConfigs, messageTransformerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &MessageTransformerOffRamp{address: address, abi: *parsed, MessageTransformerOffRampCaller: MessageTransformerOffRampCaller{contract: contract}, MessageTransformerOffRampTransactor: MessageTransformerOffRampTransactor{contract: contract}, MessageTransformerOffRampFilterer: MessageTransformerOffRampFilterer{contract: contract}}, nil +} + +type MessageTransformerOffRamp struct { + address common.Address + abi abi.ABI + MessageTransformerOffRampCaller + MessageTransformerOffRampTransactor + MessageTransformerOffRampFilterer +} + +type MessageTransformerOffRampCaller struct { + contract *bind.BoundContract +} + +type MessageTransformerOffRampTransactor struct { + contract *bind.BoundContract +} + +type MessageTransformerOffRampFilterer struct { + contract *bind.BoundContract +} + +type MessageTransformerOffRampSession struct { + Contract *MessageTransformerOffRamp + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type MessageTransformerOffRampCallerSession struct { + Contract *MessageTransformerOffRampCaller + CallOpts bind.CallOpts +} + +type MessageTransformerOffRampTransactorSession struct { + Contract *MessageTransformerOffRampTransactor + TransactOpts bind.TransactOpts +} + +type MessageTransformerOffRampRaw struct { + Contract *MessageTransformerOffRamp +} + +type MessageTransformerOffRampCallerRaw struct { + Contract *MessageTransformerOffRampCaller +} + +type MessageTransformerOffRampTransactorRaw struct { + Contract *MessageTransformerOffRampTransactor +} + +func NewMessageTransformerOffRamp(address common.Address, backend bind.ContractBackend) (*MessageTransformerOffRamp, error) { + abi, err := abi.JSON(strings.NewReader(MessageTransformerOffRampABI)) + if err != nil { + return nil, err + } + contract, err := bindMessageTransformerOffRamp(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MessageTransformerOffRamp{address: address, abi: abi, MessageTransformerOffRampCaller: MessageTransformerOffRampCaller{contract: contract}, MessageTransformerOffRampTransactor: MessageTransformerOffRampTransactor{contract: contract}, MessageTransformerOffRampFilterer: MessageTransformerOffRampFilterer{contract: contract}}, nil +} + +func NewMessageTransformerOffRampCaller(address common.Address, caller bind.ContractCaller) (*MessageTransformerOffRampCaller, error) { + contract, err := bindMessageTransformerOffRamp(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MessageTransformerOffRampCaller{contract: contract}, nil +} + +func NewMessageTransformerOffRampTransactor(address common.Address, transactor bind.ContractTransactor) (*MessageTransformerOffRampTransactor, error) { + contract, err := bindMessageTransformerOffRamp(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MessageTransformerOffRampTransactor{contract: contract}, nil +} + +func NewMessageTransformerOffRampFilterer(address common.Address, filterer bind.ContractFilterer) (*MessageTransformerOffRampFilterer, error) { + contract, err := bindMessageTransformerOffRamp(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MessageTransformerOffRampFilterer{contract: contract}, nil +} + +func bindMessageTransformerOffRamp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MessageTransformerOffRampMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MessageTransformerOffRamp.Contract.MessageTransformerOffRampCaller.contract.Call(opts, result, method, params...) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.MessageTransformerOffRampTransactor.contract.Transfer(opts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.MessageTransformerOffRampTransactor.contract.Transact(opts, method, params...) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MessageTransformerOffRamp.Contract.contract.Call(opts, result, method, params...) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.contract.Transfer(opts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.contract.Transact(opts, method, params...) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "ccipReceive", arg0) + + if err != nil { + return err + } + + return err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) CcipReceive(arg0 ClientAny2EVMMessage) error { + return _MessageTransformerOffRamp.Contract.CcipReceive(&_MessageTransformerOffRamp.CallOpts, arg0) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) CcipReceive(arg0 ClientAny2EVMMessage) error { + return _MessageTransformerOffRamp.Contract.CcipReceive(&_MessageTransformerOffRamp.CallOpts, arg0) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) GetAllSourceChainConfigs(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "getAllSourceChainConfigs") + + if err != nil { + return *new([]uint64), *new([]OffRampSourceChainConfig), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + out1 := *abi.ConvertType(out[1], new([]OffRampSourceChainConfig)).(*[]OffRampSourceChainConfig) + + return out0, out1, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) GetAllSourceChainConfigs() ([]uint64, []OffRampSourceChainConfig, error) { + return _MessageTransformerOffRamp.Contract.GetAllSourceChainConfigs(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) GetAllSourceChainConfigs() ([]uint64, []OffRampSourceChainConfig, error) { + return _MessageTransformerOffRamp.Contract.GetAllSourceChainConfigs(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "getDynamicConfig") + + if err != nil { + return *new(OffRampDynamicConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OffRampDynamicConfig)).(*OffRampDynamicConfig) + + return out0, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) GetDynamicConfig() (OffRampDynamicConfig, error) { + return _MessageTransformerOffRamp.Contract.GetDynamicConfig(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) GetDynamicConfig() (OffRampDynamicConfig, error) { + return _MessageTransformerOffRamp.Contract.GetDynamicConfig(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) GetExecutionState(opts *bind.CallOpts, sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "getExecutionState", sourceChainSelector, sequenceNumber) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) GetExecutionState(sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) { + return _MessageTransformerOffRamp.Contract.GetExecutionState(&_MessageTransformerOffRamp.CallOpts, sourceChainSelector, sequenceNumber) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) GetExecutionState(sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) { + return _MessageTransformerOffRamp.Contract.GetExecutionState(&_MessageTransformerOffRamp.CallOpts, sourceChainSelector, sequenceNumber) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) GetLatestPriceSequenceNumber(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "getLatestPriceSequenceNumber") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) GetLatestPriceSequenceNumber() (uint64, error) { + return _MessageTransformerOffRamp.Contract.GetLatestPriceSequenceNumber(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) GetLatestPriceSequenceNumber() (uint64, error) { + return _MessageTransformerOffRamp.Contract.GetLatestPriceSequenceNumber(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) GetMerkleRoot(opts *bind.CallOpts, sourceChainSelector uint64, root [32]byte) (*big.Int, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "getMerkleRoot", sourceChainSelector, root) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) GetMerkleRoot(sourceChainSelector uint64, root [32]byte) (*big.Int, error) { + return _MessageTransformerOffRamp.Contract.GetMerkleRoot(&_MessageTransformerOffRamp.CallOpts, sourceChainSelector, root) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) GetMerkleRoot(sourceChainSelector uint64, root [32]byte) (*big.Int, error) { + return _MessageTransformerOffRamp.Contract.GetMerkleRoot(&_MessageTransformerOffRamp.CallOpts, sourceChainSelector, root) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) GetMessageTransformerAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "getMessageTransformerAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) GetMessageTransformerAddress() (common.Address, error) { + return _MessageTransformerOffRamp.Contract.GetMessageTransformerAddress(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) GetMessageTransformerAddress() (common.Address, error) { + return _MessageTransformerOffRamp.Contract.GetMessageTransformerAddress(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (OffRampSourceChainConfig, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "getSourceChainConfig", sourceChainSelector) + + if err != nil { + return *new(OffRampSourceChainConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OffRampSourceChainConfig)).(*OffRampSourceChainConfig) + + return out0, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) GetSourceChainConfig(sourceChainSelector uint64) (OffRampSourceChainConfig, error) { + return _MessageTransformerOffRamp.Contract.GetSourceChainConfig(&_MessageTransformerOffRamp.CallOpts, sourceChainSelector) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) GetSourceChainConfig(sourceChainSelector uint64) (OffRampSourceChainConfig, error) { + return _MessageTransformerOffRamp.Contract.GetSourceChainConfig(&_MessageTransformerOffRamp.CallOpts, sourceChainSelector) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) GetStaticConfig(opts *bind.CallOpts) (OffRampStaticConfig, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "getStaticConfig") + + if err != nil { + return *new(OffRampStaticConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OffRampStaticConfig)).(*OffRampStaticConfig) + + return out0, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) GetStaticConfig() (OffRampStaticConfig, error) { + return _MessageTransformerOffRamp.Contract.GetStaticConfig(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) GetStaticConfig() (OffRampStaticConfig, error) { + return _MessageTransformerOffRamp.Contract.GetStaticConfig(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) LatestConfigDetails(opts *bind.CallOpts, ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "latestConfigDetails", ocrPluginType) + + if err != nil { + return *new(MultiOCR3BaseOCRConfig), err + } + + out0 := *abi.ConvertType(out[0], new(MultiOCR3BaseOCRConfig)).(*MultiOCR3BaseOCRConfig) + + return out0, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) LatestConfigDetails(ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) { + return _MessageTransformerOffRamp.Contract.LatestConfigDetails(&_MessageTransformerOffRamp.CallOpts, ocrPluginType) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) LatestConfigDetails(ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) { + return _MessageTransformerOffRamp.Contract.LatestConfigDetails(&_MessageTransformerOffRamp.CallOpts, ocrPluginType) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) Owner() (common.Address, error) { + return _MessageTransformerOffRamp.Contract.Owner(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) Owner() (common.Address, error) { + return _MessageTransformerOffRamp.Contract.Owner(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _MessageTransformerOffRamp.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) TypeAndVersion() (string, error) { + return _MessageTransformerOffRamp.Contract.TypeAndVersion(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampCallerSession) TypeAndVersion() (string, error) { + return _MessageTransformerOffRamp.Contract.TypeAndVersion(&_MessageTransformerOffRamp.CallOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MessageTransformerOffRamp.contract.Transact(opts, "acceptOwnership") +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) AcceptOwnership() (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.AcceptOwnership(&_MessageTransformerOffRamp.TransactOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.AcceptOwnership(&_MessageTransformerOffRamp.TransactOpts) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactor) ApplySourceChainConfigUpdates(opts *bind.TransactOpts, sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOffRamp.contract.Transact(opts, "applySourceChainConfigUpdates", sourceChainConfigUpdates) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) ApplySourceChainConfigUpdates(sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.ApplySourceChainConfigUpdates(&_MessageTransformerOffRamp.TransactOpts, sourceChainConfigUpdates) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorSession) ApplySourceChainConfigUpdates(sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.ApplySourceChainConfigUpdates(&_MessageTransformerOffRamp.TransactOpts, sourceChainConfigUpdates) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactor) Commit(opts *bind.TransactOpts, reportContext [2][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) { + return _MessageTransformerOffRamp.contract.Transact(opts, "commit", reportContext, report, rs, ss, rawVs) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) Commit(reportContext [2][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.Commit(&_MessageTransformerOffRamp.TransactOpts, reportContext, report, rs, ss, rawVs) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorSession) Commit(reportContext [2][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.Commit(&_MessageTransformerOffRamp.TransactOpts, reportContext, report, rs, ss, rawVs) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactor) Execute(opts *bind.TransactOpts, reportContext [2][32]byte, report []byte) (*types.Transaction, error) { + return _MessageTransformerOffRamp.contract.Transact(opts, "execute", reportContext, report) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) Execute(reportContext [2][32]byte, report []byte) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.Execute(&_MessageTransformerOffRamp.TransactOpts, reportContext, report) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorSession) Execute(reportContext [2][32]byte, report []byte) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.Execute(&_MessageTransformerOffRamp.TransactOpts, reportContext, report) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactor) ExecuteSingleMessage(opts *bind.TransactOpts, message InternalAny2EVMRampMessage, offchainTokenData [][]byte, tokenGasOverrides []uint32) (*types.Transaction, error) { + return _MessageTransformerOffRamp.contract.Transact(opts, "executeSingleMessage", message, offchainTokenData, tokenGasOverrides) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) ExecuteSingleMessage(message InternalAny2EVMRampMessage, offchainTokenData [][]byte, tokenGasOverrides []uint32) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.ExecuteSingleMessage(&_MessageTransformerOffRamp.TransactOpts, message, offchainTokenData, tokenGasOverrides) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorSession) ExecuteSingleMessage(message InternalAny2EVMRampMessage, offchainTokenData [][]byte, tokenGasOverrides []uint32) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.ExecuteSingleMessage(&_MessageTransformerOffRamp.TransactOpts, message, offchainTokenData, tokenGasOverrides) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactor) ManuallyExecute(opts *bind.TransactOpts, reports []InternalExecutionReport, gasLimitOverrides [][]OffRampGasLimitOverride) (*types.Transaction, error) { + return _MessageTransformerOffRamp.contract.Transact(opts, "manuallyExecute", reports, gasLimitOverrides) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) ManuallyExecute(reports []InternalExecutionReport, gasLimitOverrides [][]OffRampGasLimitOverride) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.ManuallyExecute(&_MessageTransformerOffRamp.TransactOpts, reports, gasLimitOverrides) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorSession) ManuallyExecute(reports []InternalExecutionReport, gasLimitOverrides [][]OffRampGasLimitOverride) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.ManuallyExecute(&_MessageTransformerOffRamp.TransactOpts, reports, gasLimitOverrides) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactor) SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) { + return _MessageTransformerOffRamp.contract.Transact(opts, "setDynamicConfig", dynamicConfig) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) SetDynamicConfig(dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.SetDynamicConfig(&_MessageTransformerOffRamp.TransactOpts, dynamicConfig) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorSession) SetDynamicConfig(dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.SetDynamicConfig(&_MessageTransformerOffRamp.TransactOpts, dynamicConfig) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactor) SetOCR3Configs(opts *bind.TransactOpts, ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOffRamp.contract.Transact(opts, "setOCR3Configs", ocrConfigArgs) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) SetOCR3Configs(ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.SetOCR3Configs(&_MessageTransformerOffRamp.TransactOpts, ocrConfigArgs) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorSession) SetOCR3Configs(ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.SetOCR3Configs(&_MessageTransformerOffRamp.TransactOpts, ocrConfigArgs) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _MessageTransformerOffRamp.contract.Transact(opts, "transferOwnership", to) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.TransferOwnership(&_MessageTransformerOffRamp.TransactOpts, to) +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _MessageTransformerOffRamp.Contract.TransferOwnership(&_MessageTransformerOffRamp.TransactOpts, to) +} + +type MessageTransformerOffRampAlreadyAttemptedIterator struct { + Event *MessageTransformerOffRampAlreadyAttempted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampAlreadyAttemptedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampAlreadyAttempted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampAlreadyAttempted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampAlreadyAttemptedIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampAlreadyAttemptedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampAlreadyAttempted struct { + SourceChainSelector uint64 + SequenceNumber uint64 + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterAlreadyAttempted(opts *bind.FilterOpts) (*MessageTransformerOffRampAlreadyAttemptedIterator, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "AlreadyAttempted") + if err != nil { + return nil, err + } + return &MessageTransformerOffRampAlreadyAttemptedIterator{contract: _MessageTransformerOffRamp.contract, event: "AlreadyAttempted", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchAlreadyAttempted(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampAlreadyAttempted) (event.Subscription, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "AlreadyAttempted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampAlreadyAttempted) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "AlreadyAttempted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseAlreadyAttempted(log types.Log) (*MessageTransformerOffRampAlreadyAttempted, error) { + event := new(MessageTransformerOffRampAlreadyAttempted) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "AlreadyAttempted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampCommitReportAcceptedIterator struct { + Event *MessageTransformerOffRampCommitReportAccepted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampCommitReportAcceptedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampCommitReportAccepted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampCommitReportAccepted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampCommitReportAcceptedIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampCommitReportAcceptedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampCommitReportAccepted struct { + MerkleRoots []InternalMerkleRoot + PriceUpdates InternalPriceUpdates + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterCommitReportAccepted(opts *bind.FilterOpts) (*MessageTransformerOffRampCommitReportAcceptedIterator, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "CommitReportAccepted") + if err != nil { + return nil, err + } + return &MessageTransformerOffRampCommitReportAcceptedIterator{contract: _MessageTransformerOffRamp.contract, event: "CommitReportAccepted", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchCommitReportAccepted(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampCommitReportAccepted) (event.Subscription, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "CommitReportAccepted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampCommitReportAccepted) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "CommitReportAccepted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseCommitReportAccepted(log types.Log) (*MessageTransformerOffRampCommitReportAccepted, error) { + event := new(MessageTransformerOffRampCommitReportAccepted) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "CommitReportAccepted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampConfigSetIterator struct { + Event *MessageTransformerOffRampConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampConfigSetIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampConfigSet struct { + OcrPluginType uint8 + ConfigDigest [32]byte + Signers []common.Address + Transmitters []common.Address + F uint8 + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterConfigSet(opts *bind.FilterOpts) (*MessageTransformerOffRampConfigSetIterator, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return &MessageTransformerOffRampConfigSetIterator{contract: _MessageTransformerOffRamp.contract, event: "ConfigSet", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampConfigSet) (event.Subscription, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampConfigSet) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseConfigSet(log types.Log) (*MessageTransformerOffRampConfigSet, error) { + event := new(MessageTransformerOffRampConfigSet) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampDynamicConfigSetIterator struct { + Event *MessageTransformerOffRampDynamicConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampDynamicConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampDynamicConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampDynamicConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampDynamicConfigSetIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampDynamicConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampDynamicConfigSet struct { + DynamicConfig OffRampDynamicConfig + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterDynamicConfigSet(opts *bind.FilterOpts) (*MessageTransformerOffRampDynamicConfigSetIterator, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "DynamicConfigSet") + if err != nil { + return nil, err + } + return &MessageTransformerOffRampDynamicConfigSetIterator{contract: _MessageTransformerOffRamp.contract, event: "DynamicConfigSet", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchDynamicConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampDynamicConfigSet) (event.Subscription, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "DynamicConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampDynamicConfigSet) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "DynamicConfigSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseDynamicConfigSet(log types.Log) (*MessageTransformerOffRampDynamicConfigSet, error) { + event := new(MessageTransformerOffRampDynamicConfigSet) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "DynamicConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampExecutionStateChangedIterator struct { + Event *MessageTransformerOffRampExecutionStateChanged + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampExecutionStateChangedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampExecutionStateChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampExecutionStateChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampExecutionStateChangedIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampExecutionStateChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampExecutionStateChanged struct { + SourceChainSelector uint64 + SequenceNumber uint64 + MessageId [32]byte + MessageHash [32]byte + State uint8 + ReturnData []byte + GasUsed *big.Int + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterExecutionStateChanged(opts *bind.FilterOpts, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (*MessageTransformerOffRampExecutionStateChangedIterator, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "ExecutionStateChanged", sourceChainSelectorRule, sequenceNumberRule, messageIdRule) + if err != nil { + return nil, err + } + return &MessageTransformerOffRampExecutionStateChangedIterator{contract: _MessageTransformerOffRamp.contract, event: "ExecutionStateChanged", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchExecutionStateChanged(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampExecutionStateChanged, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (event.Subscription, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "ExecutionStateChanged", sourceChainSelectorRule, sequenceNumberRule, messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampExecutionStateChanged) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "ExecutionStateChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseExecutionStateChanged(log types.Log) (*MessageTransformerOffRampExecutionStateChanged, error) { + event := new(MessageTransformerOffRampExecutionStateChanged) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "ExecutionStateChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampOwnershipTransferRequestedIterator struct { + Event *MessageTransformerOffRampOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MessageTransformerOffRampOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &MessageTransformerOffRampOwnershipTransferRequestedIterator{contract: _MessageTransformerOffRamp.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampOwnershipTransferRequested) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseOwnershipTransferRequested(log types.Log) (*MessageTransformerOffRampOwnershipTransferRequested, error) { + event := new(MessageTransformerOffRampOwnershipTransferRequested) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampOwnershipTransferredIterator struct { + Event *MessageTransformerOffRampOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MessageTransformerOffRampOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &MessageTransformerOffRampOwnershipTransferredIterator{contract: _MessageTransformerOffRamp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampOwnershipTransferred) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseOwnershipTransferred(log types.Log) (*MessageTransformerOffRampOwnershipTransferred, error) { + event := new(MessageTransformerOffRampOwnershipTransferred) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampRootRemovedIterator struct { + Event *MessageTransformerOffRampRootRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampRootRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampRootRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampRootRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampRootRemovedIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampRootRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampRootRemoved struct { + Root [32]byte + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterRootRemoved(opts *bind.FilterOpts) (*MessageTransformerOffRampRootRemovedIterator, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "RootRemoved") + if err != nil { + return nil, err + } + return &MessageTransformerOffRampRootRemovedIterator{contract: _MessageTransformerOffRamp.contract, event: "RootRemoved", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchRootRemoved(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampRootRemoved) (event.Subscription, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "RootRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampRootRemoved) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "RootRemoved", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseRootRemoved(log types.Log) (*MessageTransformerOffRampRootRemoved, error) { + event := new(MessageTransformerOffRampRootRemoved) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "RootRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampSkippedAlreadyExecutedMessageIterator struct { + Event *MessageTransformerOffRampSkippedAlreadyExecutedMessage + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampSkippedAlreadyExecutedMessageIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampSkippedAlreadyExecutedMessage) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampSkippedAlreadyExecutedMessage) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampSkippedAlreadyExecutedMessageIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampSkippedAlreadyExecutedMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampSkippedAlreadyExecutedMessage struct { + SourceChainSelector uint64 + SequenceNumber uint64 + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterSkippedAlreadyExecutedMessage(opts *bind.FilterOpts) (*MessageTransformerOffRampSkippedAlreadyExecutedMessageIterator, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "SkippedAlreadyExecutedMessage") + if err != nil { + return nil, err + } + return &MessageTransformerOffRampSkippedAlreadyExecutedMessageIterator{contract: _MessageTransformerOffRamp.contract, event: "SkippedAlreadyExecutedMessage", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchSkippedAlreadyExecutedMessage(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampSkippedAlreadyExecutedMessage) (event.Subscription, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "SkippedAlreadyExecutedMessage") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampSkippedAlreadyExecutedMessage) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "SkippedAlreadyExecutedMessage", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseSkippedAlreadyExecutedMessage(log types.Log) (*MessageTransformerOffRampSkippedAlreadyExecutedMessage, error) { + event := new(MessageTransformerOffRampSkippedAlreadyExecutedMessage) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "SkippedAlreadyExecutedMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampSkippedReportExecutionIterator struct { + Event *MessageTransformerOffRampSkippedReportExecution + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampSkippedReportExecutionIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampSkippedReportExecution) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampSkippedReportExecution) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampSkippedReportExecutionIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampSkippedReportExecutionIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampSkippedReportExecution struct { + SourceChainSelector uint64 + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterSkippedReportExecution(opts *bind.FilterOpts) (*MessageTransformerOffRampSkippedReportExecutionIterator, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "SkippedReportExecution") + if err != nil { + return nil, err + } + return &MessageTransformerOffRampSkippedReportExecutionIterator{contract: _MessageTransformerOffRamp.contract, event: "SkippedReportExecution", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchSkippedReportExecution(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampSkippedReportExecution) (event.Subscription, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "SkippedReportExecution") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampSkippedReportExecution) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "SkippedReportExecution", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseSkippedReportExecution(log types.Log) (*MessageTransformerOffRampSkippedReportExecution, error) { + event := new(MessageTransformerOffRampSkippedReportExecution) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "SkippedReportExecution", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampSourceChainConfigSetIterator struct { + Event *MessageTransformerOffRampSourceChainConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampSourceChainConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampSourceChainConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampSourceChainConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampSourceChainConfigSetIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampSourceChainConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampSourceChainConfigSet struct { + SourceChainSelector uint64 + SourceConfig OffRampSourceChainConfig + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterSourceChainConfigSet(opts *bind.FilterOpts, sourceChainSelector []uint64) (*MessageTransformerOffRampSourceChainConfigSetIterator, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "SourceChainConfigSet", sourceChainSelectorRule) + if err != nil { + return nil, err + } + return &MessageTransformerOffRampSourceChainConfigSetIterator{contract: _MessageTransformerOffRamp.contract, event: "SourceChainConfigSet", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchSourceChainConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampSourceChainConfigSet, sourceChainSelector []uint64) (event.Subscription, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "SourceChainConfigSet", sourceChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampSourceChainConfigSet) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "SourceChainConfigSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseSourceChainConfigSet(log types.Log) (*MessageTransformerOffRampSourceChainConfigSet, error) { + event := new(MessageTransformerOffRampSourceChainConfigSet) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "SourceChainConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampSourceChainSelectorAddedIterator struct { + Event *MessageTransformerOffRampSourceChainSelectorAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampSourceChainSelectorAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampSourceChainSelectorAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampSourceChainSelectorAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampSourceChainSelectorAddedIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampSourceChainSelectorAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampSourceChainSelectorAdded struct { + SourceChainSelector uint64 + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterSourceChainSelectorAdded(opts *bind.FilterOpts) (*MessageTransformerOffRampSourceChainSelectorAddedIterator, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "SourceChainSelectorAdded") + if err != nil { + return nil, err + } + return &MessageTransformerOffRampSourceChainSelectorAddedIterator{contract: _MessageTransformerOffRamp.contract, event: "SourceChainSelectorAdded", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchSourceChainSelectorAdded(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampSourceChainSelectorAdded) (event.Subscription, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "SourceChainSelectorAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampSourceChainSelectorAdded) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "SourceChainSelectorAdded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseSourceChainSelectorAdded(log types.Log) (*MessageTransformerOffRampSourceChainSelectorAdded, error) { + event := new(MessageTransformerOffRampSourceChainSelectorAdded) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "SourceChainSelectorAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampStaticConfigSetIterator struct { + Event *MessageTransformerOffRampStaticConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampStaticConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampStaticConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampStaticConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampStaticConfigSetIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampStaticConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampStaticConfigSet struct { + StaticConfig OffRampStaticConfig + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterStaticConfigSet(opts *bind.FilterOpts) (*MessageTransformerOffRampStaticConfigSetIterator, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "StaticConfigSet") + if err != nil { + return nil, err + } + return &MessageTransformerOffRampStaticConfigSetIterator{contract: _MessageTransformerOffRamp.contract, event: "StaticConfigSet", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchStaticConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampStaticConfigSet) (event.Subscription, error) { + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "StaticConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampStaticConfigSet) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "StaticConfigSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseStaticConfigSet(log types.Log) (*MessageTransformerOffRampStaticConfigSet, error) { + event := new(MessageTransformerOffRampStaticConfigSet) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "StaticConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOffRampTransmittedIterator struct { + Event *MessageTransformerOffRampTransmitted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOffRampTransmittedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampTransmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOffRampTransmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOffRampTransmittedIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOffRampTransmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOffRampTransmitted struct { + OcrPluginType uint8 + ConfigDigest [32]byte + SequenceNumber uint64 + Raw types.Log +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) FilterTransmitted(opts *bind.FilterOpts, ocrPluginType []uint8) (*MessageTransformerOffRampTransmittedIterator, error) { + + var ocrPluginTypeRule []interface{} + for _, ocrPluginTypeItem := range ocrPluginType { + ocrPluginTypeRule = append(ocrPluginTypeRule, ocrPluginTypeItem) + } + + logs, sub, err := _MessageTransformerOffRamp.contract.FilterLogs(opts, "Transmitted", ocrPluginTypeRule) + if err != nil { + return nil, err + } + return &MessageTransformerOffRampTransmittedIterator{contract: _MessageTransformerOffRamp.contract, event: "Transmitted", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) WatchTransmitted(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampTransmitted, ocrPluginType []uint8) (event.Subscription, error) { + + var ocrPluginTypeRule []interface{} + for _, ocrPluginTypeItem := range ocrPluginType { + ocrPluginTypeRule = append(ocrPluginTypeRule, ocrPluginTypeItem) + } + + logs, sub, err := _MessageTransformerOffRamp.contract.WatchLogs(opts, "Transmitted", ocrPluginTypeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOffRampTransmitted) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "Transmitted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRampFilterer) ParseTransmitted(log types.Log) (*MessageTransformerOffRampTransmitted, error) { + event := new(MessageTransformerOffRampTransmitted) + if err := _MessageTransformerOffRamp.contract.UnpackLog(event, "Transmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRamp) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _MessageTransformerOffRamp.abi.Events["AlreadyAttempted"].ID: + return _MessageTransformerOffRamp.ParseAlreadyAttempted(log) + case _MessageTransformerOffRamp.abi.Events["CommitReportAccepted"].ID: + return _MessageTransformerOffRamp.ParseCommitReportAccepted(log) + case _MessageTransformerOffRamp.abi.Events["ConfigSet"].ID: + return _MessageTransformerOffRamp.ParseConfigSet(log) + case _MessageTransformerOffRamp.abi.Events["DynamicConfigSet"].ID: + return _MessageTransformerOffRamp.ParseDynamicConfigSet(log) + case _MessageTransformerOffRamp.abi.Events["ExecutionStateChanged"].ID: + return _MessageTransformerOffRamp.ParseExecutionStateChanged(log) + case _MessageTransformerOffRamp.abi.Events["OwnershipTransferRequested"].ID: + return _MessageTransformerOffRamp.ParseOwnershipTransferRequested(log) + case _MessageTransformerOffRamp.abi.Events["OwnershipTransferred"].ID: + return _MessageTransformerOffRamp.ParseOwnershipTransferred(log) + case _MessageTransformerOffRamp.abi.Events["RootRemoved"].ID: + return _MessageTransformerOffRamp.ParseRootRemoved(log) + case _MessageTransformerOffRamp.abi.Events["SkippedAlreadyExecutedMessage"].ID: + return _MessageTransformerOffRamp.ParseSkippedAlreadyExecutedMessage(log) + case _MessageTransformerOffRamp.abi.Events["SkippedReportExecution"].ID: + return _MessageTransformerOffRamp.ParseSkippedReportExecution(log) + case _MessageTransformerOffRamp.abi.Events["SourceChainConfigSet"].ID: + return _MessageTransformerOffRamp.ParseSourceChainConfigSet(log) + case _MessageTransformerOffRamp.abi.Events["SourceChainSelectorAdded"].ID: + return _MessageTransformerOffRamp.ParseSourceChainSelectorAdded(log) + case _MessageTransformerOffRamp.abi.Events["StaticConfigSet"].ID: + return _MessageTransformerOffRamp.ParseStaticConfigSet(log) + case _MessageTransformerOffRamp.abi.Events["Transmitted"].ID: + return _MessageTransformerOffRamp.ParseTransmitted(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (MessageTransformerOffRampAlreadyAttempted) Topic() common.Hash { + return common.HexToHash("0x3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120") +} + +func (MessageTransformerOffRampCommitReportAccepted) Topic() common.Hash { + return common.HexToHash("0x35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4") +} + +func (MessageTransformerOffRampConfigSet) Topic() common.Hash { + return common.HexToHash("0xab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547") +} + +func (MessageTransformerOffRampDynamicConfigSet) Topic() common.Hash { + return common.HexToHash("0xcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee") +} + +func (MessageTransformerOffRampExecutionStateChanged) Topic() common.Hash { + return common.HexToHash("0x05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b") +} + +func (MessageTransformerOffRampOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (MessageTransformerOffRampOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (MessageTransformerOffRampRootRemoved) Topic() common.Hash { + return common.HexToHash("0x202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12") +} + +func (MessageTransformerOffRampSkippedAlreadyExecutedMessage) Topic() common.Hash { + return common.HexToHash("0x3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c") +} + +func (MessageTransformerOffRampSkippedReportExecution) Topic() common.Hash { + return common.HexToHash("0xaab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d894933") +} + +func (MessageTransformerOffRampSourceChainConfigSet) Topic() common.Hash { + return common.HexToHash("0x49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b") +} + +func (MessageTransformerOffRampSourceChainSelectorAdded) Topic() common.Hash { + return common.HexToHash("0xf4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb9") +} + +func (MessageTransformerOffRampStaticConfigSet) Topic() common.Hash { + return common.HexToHash("0xb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b7") +} + +func (MessageTransformerOffRampTransmitted) Topic() common.Hash { + return common.HexToHash("0x198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0") +} + +func (_MessageTransformerOffRamp *MessageTransformerOffRamp) Address() common.Address { + return _MessageTransformerOffRamp.address +} + +type MessageTransformerOffRampInterface interface { + CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error + + GetAllSourceChainConfigs(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) + + GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, error) + + GetExecutionState(opts *bind.CallOpts, sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) + + GetLatestPriceSequenceNumber(opts *bind.CallOpts) (uint64, error) + + GetMerkleRoot(opts *bind.CallOpts, sourceChainSelector uint64, root [32]byte) (*big.Int, error) + + GetMessageTransformerAddress(opts *bind.CallOpts) (common.Address, error) + + GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (OffRampSourceChainConfig, error) + + GetStaticConfig(opts *bind.CallOpts) (OffRampStaticConfig, error) + + LatestConfigDetails(opts *bind.CallOpts, ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + ApplySourceChainConfigUpdates(opts *bind.TransactOpts, sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) + + Commit(opts *bind.TransactOpts, reportContext [2][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) + + Execute(opts *bind.TransactOpts, reportContext [2][32]byte, report []byte) (*types.Transaction, error) + + ExecuteSingleMessage(opts *bind.TransactOpts, message InternalAny2EVMRampMessage, offchainTokenData [][]byte, tokenGasOverrides []uint32) (*types.Transaction, error) + + ManuallyExecute(opts *bind.TransactOpts, reports []InternalExecutionReport, gasLimitOverrides [][]OffRampGasLimitOverride) (*types.Transaction, error) + + SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) + + SetOCR3Configs(opts *bind.TransactOpts, ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterAlreadyAttempted(opts *bind.FilterOpts) (*MessageTransformerOffRampAlreadyAttemptedIterator, error) + + WatchAlreadyAttempted(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampAlreadyAttempted) (event.Subscription, error) + + ParseAlreadyAttempted(log types.Log) (*MessageTransformerOffRampAlreadyAttempted, error) + + FilterCommitReportAccepted(opts *bind.FilterOpts) (*MessageTransformerOffRampCommitReportAcceptedIterator, error) + + WatchCommitReportAccepted(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampCommitReportAccepted) (event.Subscription, error) + + ParseCommitReportAccepted(log types.Log) (*MessageTransformerOffRampCommitReportAccepted, error) + + FilterConfigSet(opts *bind.FilterOpts) (*MessageTransformerOffRampConfigSetIterator, error) + + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampConfigSet) (event.Subscription, error) + + ParseConfigSet(log types.Log) (*MessageTransformerOffRampConfigSet, error) + + FilterDynamicConfigSet(opts *bind.FilterOpts) (*MessageTransformerOffRampDynamicConfigSetIterator, error) + + WatchDynamicConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampDynamicConfigSet) (event.Subscription, error) + + ParseDynamicConfigSet(log types.Log) (*MessageTransformerOffRampDynamicConfigSet, error) + + FilterExecutionStateChanged(opts *bind.FilterOpts, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (*MessageTransformerOffRampExecutionStateChangedIterator, error) + + WatchExecutionStateChanged(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampExecutionStateChanged, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (event.Subscription, error) + + ParseExecutionStateChanged(log types.Log) (*MessageTransformerOffRampExecutionStateChanged, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MessageTransformerOffRampOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*MessageTransformerOffRampOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MessageTransformerOffRampOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*MessageTransformerOffRampOwnershipTransferred, error) + + FilterRootRemoved(opts *bind.FilterOpts) (*MessageTransformerOffRampRootRemovedIterator, error) + + WatchRootRemoved(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampRootRemoved) (event.Subscription, error) + + ParseRootRemoved(log types.Log) (*MessageTransformerOffRampRootRemoved, error) + + FilterSkippedAlreadyExecutedMessage(opts *bind.FilterOpts) (*MessageTransformerOffRampSkippedAlreadyExecutedMessageIterator, error) + + WatchSkippedAlreadyExecutedMessage(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampSkippedAlreadyExecutedMessage) (event.Subscription, error) + + ParseSkippedAlreadyExecutedMessage(log types.Log) (*MessageTransformerOffRampSkippedAlreadyExecutedMessage, error) + + FilterSkippedReportExecution(opts *bind.FilterOpts) (*MessageTransformerOffRampSkippedReportExecutionIterator, error) + + WatchSkippedReportExecution(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampSkippedReportExecution) (event.Subscription, error) + + ParseSkippedReportExecution(log types.Log) (*MessageTransformerOffRampSkippedReportExecution, error) + + FilterSourceChainConfigSet(opts *bind.FilterOpts, sourceChainSelector []uint64) (*MessageTransformerOffRampSourceChainConfigSetIterator, error) + + WatchSourceChainConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampSourceChainConfigSet, sourceChainSelector []uint64) (event.Subscription, error) + + ParseSourceChainConfigSet(log types.Log) (*MessageTransformerOffRampSourceChainConfigSet, error) + + FilterSourceChainSelectorAdded(opts *bind.FilterOpts) (*MessageTransformerOffRampSourceChainSelectorAddedIterator, error) + + WatchSourceChainSelectorAdded(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampSourceChainSelectorAdded) (event.Subscription, error) + + ParseSourceChainSelectorAdded(log types.Log) (*MessageTransformerOffRampSourceChainSelectorAdded, error) + + FilterStaticConfigSet(opts *bind.FilterOpts) (*MessageTransformerOffRampStaticConfigSetIterator, error) + + WatchStaticConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampStaticConfigSet) (event.Subscription, error) + + ParseStaticConfigSet(log types.Log) (*MessageTransformerOffRampStaticConfigSet, error) + + FilterTransmitted(opts *bind.FilterOpts, ocrPluginType []uint8) (*MessageTransformerOffRampTransmittedIterator, error) + + WatchTransmitted(opts *bind.WatchOpts, sink chan<- *MessageTransformerOffRampTransmitted, ocrPluginType []uint8) (event.Subscription, error) + + ParseTransmitted(log types.Log) (*MessageTransformerOffRampTransmitted, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} diff --git a/core/gethwrappers/ccip/generated/message_transformer_onramp/message_transformer_onramp.go b/core/gethwrappers/ccip/generated/message_transformer_onramp/message_transformer_onramp.go new file mode 100644 index 00000000000..0effea76154 --- /dev/null +++ b/core/gethwrappers/ccip/generated/message_transformer_onramp/message_transformer_onramp.go @@ -0,0 +1,1937 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package message_transformer_onramp + +import ( + "errors" + "fmt" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientEVM2AnyMessage struct { + Receiver []byte + Data []byte + TokenAmounts []ClientEVMTokenAmount + FeeToken common.Address + ExtraArgs []byte +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type InternalEVM2AnyRampMessage struct { + Header InternalRampMessageHeader + Sender common.Address + Data []byte + Receiver []byte + ExtraArgs []byte + FeeToken common.Address + FeeTokenAmount *big.Int + FeeValueJuels *big.Int + TokenAmounts []InternalEVM2AnyTokenTransfer +} + +type InternalEVM2AnyTokenTransfer struct { + SourcePoolAddress common.Address + DestTokenAddress []byte + ExtraData []byte + Amount *big.Int + DestExecData []byte +} + +type InternalRampMessageHeader struct { + MessageId [32]byte + SourceChainSelector uint64 + DestChainSelector uint64 + SequenceNumber uint64 + Nonce uint64 +} + +type OnRampAllowlistConfigArgs struct { + DestChainSelector uint64 + AllowlistEnabled bool + AddedAllowlistedSenders []common.Address + RemovedAllowlistedSenders []common.Address +} + +type OnRampDestChainConfigArgs struct { + DestChainSelector uint64 + Router common.Address + AllowlistEnabled bool +} + +type OnRampDynamicConfig struct { + FeeQuoter common.Address + ReentrancyGuardEntered bool + MessageInterceptor common.Address + FeeAggregator common.Address + AllowlistAdmin common.Address +} + +type OnRampStaticConfig struct { + ChainSelector uint64 + RmnRemote common.Address + NonceManager common.Address + TokenAdminRegistry common.Address +} + +var MessageTransformerOnRampMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"internalType\":\"structOnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"structOnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowlistAdmin\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"destChainConfigs\",\"type\":\"tuple[]\",\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"allowlistEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"messageTransformerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyAllowlistUpdates\",\"inputs\":[{\"name\":\"allowlistConfigArgsItems\",\"type\":\"tuple[]\",\"internalType\":\"structOnRamp.AllowlistConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"allowlistEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"addedAllowlistedSenders\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"removedAllowlistedSenders\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyDestChainConfigUpdates\",\"inputs\":[{\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"allowlistEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forwardFromRouter\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structClient.EVM2AnyMessage\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structClient.EVMTokenAmount[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAllowedSendersList\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"configuredAddresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDestChainConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"allowlistEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"structOnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowlistAdmin\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getExpectedNextSequenceNumber\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structClient.EVM2AnyMessage\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structClient.EVMTokenAmount[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMessageTransformerAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPoolBySourceToken\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sourceToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPoolV1\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedTokens\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"structOnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowlistAdmin\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AllowListAdminSet\",\"inputs\":[{\"name\":\"allowlistAdmin\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllowListSendersAdded\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"senders\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllowListSendersRemoved\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"senders\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CCIPMessageSent\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"message\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"components\":[{\"name\":\"header\",\"type\":\"tuple\",\"internalType\":\"structInternal.RampMessageHeader\",\"components\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"feeValueJuels\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"components\":[{\"name\":\"sourcePoolAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destExecData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigSet\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowlistAdmin\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DestChainConfigSet\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIRouter\"},{\"name\":\"allowlistEnabled\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"feeAggregator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CannotSendZeroTokens\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAllowListRequest\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidConfig\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDestChainConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MessageTransformError\",\"inputs\":[{\"name\":\"errorReason\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"MustBeCalledByRouter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwnerOrAllowlistAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RouterMustSetOriginalSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SenderNotAllowed\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnsupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]}]", + Bin: "0x610100604052346105a15761401e8038038061001a816105db565b92833981019080820361016081126105a157608081126105a15761003c6105bc565b9161004681610600565b835260208101516001600160a01b03811681036105a1576020840190815261007060408301610614565b916040850192835260a061008660608301610614565b6060870190815294607f1901126105a15760405160a081016001600160401b038111828210176105a6576040526100bf60808301610614565b81526100cd60a08301610628565b602082019081526100e060c08401610614565b90604083019182526100f460e08501610614565b92606081019384526101096101008601610614565b608082019081526101208601519095906001600160401b0381116105a15781018b601f820112156105a1578051906001600160401b0382116105a6578160051b602001610155906105db565b9c8d838152602001926060028201602001918183116105a157602001925b828410610533575050505061014061018b9101610614565b98331561052257600180546001600160a01b0319163317905580516001600160401b0316158015610510575b80156104fe575b80156104ec575b6104bf57516001600160401b0316608081905295516001600160a01b0390811660a08190529751811660c08190529851811660e081905282519091161580156104da575b80156104d0575b6104bf57815160028054855160ff60a01b90151560a01b166001600160a01b039384166001600160a81b0319909216919091171790558451600380549183166001600160a01b03199283161790558651600480549184169183169190911790558751600580549190931691161790557fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f1986101209860606102af6105bc565b8a8152602080820193845260408083019586529290910194855281519a8b5291516001600160a01b03908116928b019290925291518116918901919091529051811660608801529051811660808701529051151560a08601529051811660c08501529051811660e0840152905116610100820152a160005b82518110156104185761033a8184610635565b516001600160401b0361034d8386610635565b5151169081156104035760008281526006602090815260409182902081840151815494840151600160401b600160e81b03198616604883901b600160481b600160e81b031617901515851b68ff000000000000000016179182905583516001600160401b0390951685526001600160a01b031691840191909152811c60ff1615159082015260019291907fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef590606090a201610327565b5063c35aa79d60e01b60005260045260246000fd5b506001600160a01b031680156104ae57600780546001600160a01b0319169190911790556040516139be908161066082396080518181816103ee01528181610c15015281816122690152612a53015260a0518181816122a2015281816127bf0152612a8c015260c05181818161113f015281816122de0152612ac8015260e05181818161231a01528181612b0401526131030152f35b6342bcdf7f60e11b60005260046000fd5b6306b7c75960e31b60005260046000fd5b5082511515610210565b5084516001600160a01b031615610209565b5088516001600160a01b0316156101c5565b5087516001600160a01b0316156101be565b5086516001600160a01b0316156101b7565b639b15e16f60e01b60005260046000fd5b6060848303126105a15760405190606082016001600160401b038111838210176105a65760405261056385610600565b82526020850151906001600160a01b03821682036105a1578260209283606095015261059160408801610628565b6040820152815201930192610173565b600080fd5b634e487b7160e01b600052604160045260246000fd5b60405190608082016001600160401b038111838210176105a657604052565b6040519190601f01601f191682016001600160401b038111838210176105a657604052565b51906001600160401b03821682036105a157565b51906001600160a01b03821682036105a157565b519081151582036105a157565b80518210156106495760209160051b010190565b634e487b7160e01b600052603260045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c90816306285c69146129ed575080631056edee1461299b578063181f5a771461291c57806320487ded146126e35780632716072b1461243357806327e936f11461202d57806348a98aa414611faa5780635cb80c5d14611ced5780636def4ce714611c5e5780637437ff9f14611b4157806379ba509714611a5c5780638da5cb5b14611a0a5780639041be3d1461195d578063972b46121461188f578063c9b146b3146114c6578063df0aa9e914610237578063f2fde38b1461014a5763fbca3b74146100e757600080fd5b346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014757600490610121612cf9565b507f9e7177c8000000000000000000000000000000000000000000000000000000008152fd5b80fd5b50346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475773ffffffffffffffffffffffffffffffffffffffff610197612d4f565b61019f61362f565b1633811461020f57807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b50346101475760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475761026f612cf9565b67ffffffffffffffff602435116114c25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602435360301126114c2576102b6612d72565b60025460ff8160a01c1661149a577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001760025567ffffffffffffffff8216835260066020526040832073ffffffffffffffffffffffffffffffffffffffff82161561147257805460ff8160401c16611404575b60481c73ffffffffffffffffffffffffffffffffffffffff1633036113dc5773ffffffffffffffffffffffffffffffffffffffff6003541680611368575b50805467ffffffffffffffff811667ffffffffffffffff811461133b579067ffffffffffffffff60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009493011692839116179055604051906103e082612bc3565b84825267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602083015267ffffffffffffffff841660408301526060820152836080820152610441602480350160243560040161329b565b6104506004602435018061329b565b61045e6064602435016131a7565b936104736044602435016024356004016132ec565b9490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06104b96104a387612d2a565b966104b16040519889612c18565b808852612d2a565b018a5b81811061132457505061050d93929161050191604051986104dc8a612bdf565b895273ffffffffffffffffffffffffffffffffffffffff8a1660208a0152369161336c565b6040870152369161336c565b606084015273ffffffffffffffffffffffffffffffffffffffff6020926040516105378582612c18565b88815260808601521660a084015260443560c08401528560e084015261010083015261056d6044602435016024356004016132ec565b61057981969296612d2a565b906105876040519283612c18565b8082528382018097368360061b8201116113205780915b8360061b820183106112e95750505050865b6105c46044602435016024356004016132ec565b905081101561093a576105d78183613258565b51906105f26105eb6004602435018061329b565b369161336c565b916105fb613340565b5085810151156109125773ffffffffffffffffffffffffffffffffffffffff610626818351166130a4565b169283158015610868575b61082557908a6106de92888873ffffffffffffffffffffffffffffffffffffffff8d838701518280895116926040519761066a89612bc3565b885267ffffffffffffffff87890196168652816040890191168152606088019283526080880193845267ffffffffffffffff6040519b8c998a997f9a4575b9000000000000000000000000000000000000000000000000000000008b5260048b01525160a060248b015260c48a0190612cb6565b965116604488015251166064860152516084850152511660a4830152038183885af191821561081a578b92610773575b50600193828492898061076c9651930151910151916040519361073085612bc3565b84528a8401526040830152606082015260405161074d8982612c18565b8c81526080820152610100890151906107668383613258565b52613258565b50016105b0565b91503d808c843e6107848184612c18565b82019187818403126108125780519067ffffffffffffffff821161081657019360408584031261081257604051916107bb83612bfc565b855167ffffffffffffffff811161080e57846107d89188016133a3565b8352888601519267ffffffffffffffff841161080e5761080061076c958795600199016133a3565b8a820152935091509361070e565b8d80fd5b8b80fd5b8c80fd5b6040513d8d823e3d90fd5b60248b73ffffffffffffffffffffffffffffffffffffffff8451167fbf16aab6000000000000000000000000000000000000000000000000000000008252600452fd5b506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf0000000000000000000000000000000000000000000000000000000060048201528781602481885afa908115610907578c916108d2575b5015610631565b90508781813d8311610900575b6108e98183612c18565b81010312610812576108fa90612e31565b386108cb565b503d6108df565b6040513d8e823e3d90fd5b60048a7f5cf04449000000000000000000000000000000000000000000000000000000008152fd5b50957f430d138c0000000000000000000000000000000000000000000000000000000081939497839773ffffffffffffffffffffffffffffffffffffffff600254169187610a2c8c6109fc6109936064602435016131a7565b9161010073ffffffffffffffffffffffffffffffffffffffff6109c060846024350160243560040161329b565b92909301519467ffffffffffffffff6040519e8f9d8e521660048d01521660248b015260443560448b015260c060648b015260c48a0191612e8e565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8883030160848901526133e5565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8684030160a48701525191828152019190855b898282106112ae575050505082809103915afa9384156112a357828390849385976111b9575b5060e0890152156110d05750815b67ffffffffffffffff6080885101911690526080860152805b61010086015151811015610ae45780610ac960019286613258565b516080610adb836101008b0151613258565b51015201610aae565b50838180610b8588604051610af881612bdf565b610b006131c8565b8152838882015260606040820152606080820152606060808201528360a08201528360c08201528360e082015260606101008201525073ffffffffffffffffffffffffffffffffffffffff60075416906040519485809481937f8a06fadb000000000000000000000000000000000000000000000000000000008352600483016134d0565b03925af1839181610e17575b50610bdf5783610b9f61367a565b90610bdb6040519283927f828ebdfb00000000000000000000000000000000000000000000000000000000845260048401526024830190612cb6565b0390fd5b91604051848101907f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321825267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604082015267ffffffffffffffff8416606082015230608082015260808152610c5f60a082612c18565b51902073ffffffffffffffffffffffffffffffffffffffff8585015116845167ffffffffffffffff6080816060840151169201511673ffffffffffffffffffffffffffffffffffffffff60a08801511660c088015191604051938a850195865260408501526060840152608083015260a082015260a08152610ce260c082612c18565b51902060608501518681519101206040860151878151910120610100870151604051610d4881610d1c8c8201948d865260408301906133e5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612c18565b51902091608088015189815191012093604051958a870197885260408701526060860152608085015260a084015260c083015260e082015260e08152610d9061010082612c18565b51902082515267ffffffffffffffff60608351015116907f192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f3267ffffffffffffffff60405192169180610de286826134d0565b0390a37fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff600254166002555151604051908152f35b9091503d8085833e610e298183612c18565b81019085818303126110cc5780519067ffffffffffffffff82116110c4570190818103916101a083126110c45760a060405193610e6585612bdf565b126110c457604051610e7681612bc3565b81518152610e858883016134bb565b88820152610e95604083016134bb565b6040820152610ea6606083016134bb565b6060820152610eb7608083016134bb565b60808201528352610eca60a08201613083565b8784015260c081015167ffffffffffffffff81116110c85782610eee9183016133a3565b604084015260e081015167ffffffffffffffff81116110c85782610f139183016133a3565b606084015261010081015167ffffffffffffffff81116110c85782610f399183016133a3565b6080840152610f4b6101208201613083565b60a084015261014081015160c084015261016081015160e08401526101808101519067ffffffffffffffff82116110c8570181601f820112156110c4578051610f9381612d2a565b92610fa16040519485612c18565b818452888085019260051b840101928184116110c057898101925b848410610fd55750505050506101008201529085610b91565b835167ffffffffffffffff81116110bc57820160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126110bc576040519061102182612bc3565b61102c8d8201613083565b8252604081015167ffffffffffffffff811161081657858e611050928401016133a3565b8d830152606081015167ffffffffffffffff811161081657858e611076928401016133a3565b60408301526080810151606083015260a08101519067ffffffffffffffff821161081657916110ac868f809694819601016133a3565b6080820152815201930192610fbc565b8a80fd5b8880fd5b8580fd5b8680fd5b8480fd5b73ffffffffffffffffffffffffffffffffffffffff604051917fea458c0c00000000000000000000000000000000000000000000000000000000835267ffffffffffffffff8816600484015216602482015283816044818673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af19081156111ae578391611175575b50610a95565b90508381813d83116111a7575b61118c8183612c18565b810103126111a35761119d906134bb565b3861116f565b8280fd5b503d611182565b6040513d85823e3d90fd5b9650505090503d8083863e6111ce8186612c18565b8401906080858303126111a3578451946111e9858201612e31565b95604082015167ffffffffffffffff81116110c4578461120a9184016133a3565b9160608101519067ffffffffffffffff82116110c8570184601f820112156110c457805161123781612d2a565b956112456040519788612c18565b818752888088019260051b840101928184116110c057898101925b8484106112765750505050509590929538610a87565b835167ffffffffffffffff81116110bc578b91611298858480948701016133a3565b815201930192611260565b6040513d84823e3d90fd5b8351805173ffffffffffffffffffffffffffffffffffffffff1686528101518186015289975088965060409094019390920191600101610a61565b6040833603126110bc5786604091825161130281612bfc565b61130b86612d95565b8152828601358382015281520192019161059e565b8980fd5b60209061132f613340565b82828a010152016104bc565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b803b156110cc578460405180927fe0a0e5060000000000000000000000000000000000000000000000000000000082528183816113ae6024356004018b60048401612ecd565b03925af180156113d1571561037e57846113ca91959295612c18565b923861037e565b6040513d87823e3d90fd5b6004847f1c0a3529000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526002830160205260409020546103405760248573ffffffffffffffffffffffffffffffffffffffff857fd0d2597600000000000000000000000000000000000000000000000000000000835216600452fd5b6004847fa4ec7479000000000000000000000000000000000000000000000000000000008152fd5b6004847f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b50346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760043567ffffffffffffffff81116114c257611516903690600401612db6565b73ffffffffffffffffffffffffffffffffffffffff600154163303611847575b919081907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301915b84811015611843578060051b820135838112156110cc578201916080833603126110cc576040519461159286612b78565b61159b84612d15565b86526115a960208501612d42565b9660208701978852604085013567ffffffffffffffff81116111a3576115d290369087016131f3565b9460408801958652606081013567ffffffffffffffff811161183f576115fa913691016131f3565b60608801908152875167ffffffffffffffff1683526006602052604080842099518a547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff169015159182901b68ff000000000000000016178a55909590815151611717575b5095976001019550815b855180518210156116a857906116a173ffffffffffffffffffffffffffffffffffffffff61169983600195613258565b511689613753565b5001611669565b505095909694506001929193519081516116c8575b505001939293611561565b61170d67ffffffffffffffff7fc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d42158692511692604051918291602083526020830190612de7565b0390a238806116bd565b9893959296919094979860001461180857600184019591875b865180518210156117ad5761175a8273ffffffffffffffffffffffffffffffffffffffff92613258565b51168015611776579061176f6001928a6136c2565b5001611730565b60248a67ffffffffffffffff8e51167f463258ff000000000000000000000000000000000000000000000000000000008252600452fd5b50509692955090929796937f330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc32816117fe67ffffffffffffffff8a51169251604051918291602083526020830190612de7565b0390a2388061165f565b60248767ffffffffffffffff8b51167f463258ff000000000000000000000000000000000000000000000000000000008252600452fd5b8380fd5b8380f35b73ffffffffffffffffffffffffffffffffffffffff60055416330315611536576004837f905d7d9b000000000000000000000000000000000000000000000000000000008152fd5b50346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475767ffffffffffffffff6118d0612cf9565b16808252600660205260ff604083205460401c16908252600660205260016040832001916040518093849160208254918281520191845260208420935b81811061194457505061192292500383612c18565b61194060405192839215158352604060208401526040830190612de7565b0390f35b845483526001948501948794506020909301920161190d565b50346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475767ffffffffffffffff61199e612cf9565b1681526006602052600167ffffffffffffffff604083205416019067ffffffffffffffff82116119dd5760208267ffffffffffffffff60405191168152f35b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b503461014757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014757602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461014757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014757805473ffffffffffffffffffffffffffffffffffffffff81163303611b19577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b503461014757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014757611b786131c8565b5060a0604051611b8781612bc3565b60ff60025473ffffffffffffffffffffffffffffffffffffffff81168352831c161515602082015273ffffffffffffffffffffffffffffffffffffffff60035416604082015273ffffffffffffffffffffffffffffffffffffffff60045416606082015273ffffffffffffffffffffffffffffffffffffffff600554166080820152611c5c604051809273ffffffffffffffffffffffffffffffffffffffff60808092828151168552602081015115156020860152826040820151166040860152826060820151166060860152015116910152565bf35b50346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014757604060609167ffffffffffffffff611ca4612cf9565b1681526006602052205473ffffffffffffffffffffffffffffffffffffffff6040519167ffffffffffffffff8116835260ff8160401c161515602084015260481c166040820152f35b50346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760043567ffffffffffffffff81116114c257611d3d903690600401612db6565b9073ffffffffffffffffffffffffffffffffffffffff6004541690835b83811015611fa65773ffffffffffffffffffffffffffffffffffffffff611d858260051b84016131a7565b1690604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481845afa928315611f9b578793611f68575b5082611ddd575b506001915001611d5a565b8460405193611e7960208601957fa9059cbb00000000000000000000000000000000000000000000000000000000875283602482015282604482015260448152611e28606482612c18565b8a80604098895193611e3a8b86612c18565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020860152519082895af1611e7261367a565b90866138e5565b805180611eb5575b505060207f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e9160019651908152a338611dd2565b8192949596935090602091810103126110c0576020611ed49101612e31565b15611ee55792919085903880611e81565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b9092506020813d8211611f93575b81611f8360209383612c18565b810103126110c857519138611dcb565b3d9150611f76565b6040513d89823e3d90fd5b8480f35b50346101475760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014757611fe2612cf9565b506024359073ffffffffffffffffffffffffffffffffffffffff8216820361014757602061200f836130a4565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b50346101475760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760405161206981612bc3565b612071612d4f565b815260243580151581036111a3576020820190815260443573ffffffffffffffffffffffffffffffffffffffff8116810361183f57604083019081526120b5612d72565b90606084019182526084359273ffffffffffffffffffffffffffffffffffffffff841684036110c457608085019384526120ed61362f565b73ffffffffffffffffffffffffffffffffffffffff855116158015612414575b801561240a575b6123e2579273ffffffffffffffffffffffffffffffffffffffff859381809461012097827fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f19a51167fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002555115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff00000000000000000000000000000000000000006002549260a01b1691161760025551167fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035551167fffffffffffffffffffffffff0000000000000000000000000000000000000000600454161760045551167fffffffffffffffffffffffff000000000000000000000000000000000000000060055416176005556123de6040519161225e83612b78565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016835273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602084015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604084015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016606084015261238e604051809473ffffffffffffffffffffffffffffffffffffffff6060809267ffffffffffffffff8151168552826020820151166020860152826040820151166040860152015116910152565b608083019073ffffffffffffffffffffffffffffffffffffffff60808092828151168552602081015115156020860152826040820151166040860152826060820151166060860152015116910152565ba180f35b6004867f35be3ac8000000000000000000000000000000000000000000000000000000008152fd5b5080511515612114565b5073ffffffffffffffffffffffffffffffffffffffff8351161561210d565b50346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576004359067ffffffffffffffff8211610147573660238301121561014757816004013561248f81612d2a565b9261249d6040519485612c18565b818452602460606020860193028201019036821161183f57602401915b81831061263b575050506124cc61362f565b805b8251811015612637576124e18184613258565b5167ffffffffffffffff6124f58386613258565b51511690811561260b57907fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef5606060019493838752600660205260ff604088206125cc604060208501519483547fffffff0000000000000000000000000000000000000000ffffffffffffffffff7cffffffffffffffffffffffffffffffffffffffff0000000000000000008860481b1691161784550151151582907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff68ff0000000000000000835492151560401b169116179055565b5473ffffffffffffffffffffffffffffffffffffffff6040519367ffffffffffffffff8316855216602084015260401c1615156040820152a2016124ce565b602484837fc35aa79d000000000000000000000000000000000000000000000000000000008252600452fd5b5080f35b60608336031261183f576040516060810181811067ffffffffffffffff8211176126b65760405261266b84612d15565b8152602084013573ffffffffffffffffffffffffffffffffffffffff811681036110c45791816060936020809401526126a660408701612d42565b60408201528152019201916124ba565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346101475760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475761271b612cf9565b60243567ffffffffffffffff81116111a35760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126111a3576040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff000000000000000000000000000000008360801b16600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156129115784916128d7575b506128a15761284e9160209173ffffffffffffffffffffffffffffffffffffffff60025416906040518095819482937fd8694ccd0000000000000000000000000000000000000000000000000000000084526004019060048401612ecd565b03915afa9081156112a357829161286b575b602082604051908152f35b90506020813d602011612899575b8161288660209383612c18565b810103126114c257602091505138612860565b3d9150612879565b60248367ffffffffffffffff847ffdbd6a7200000000000000000000000000000000000000000000000000000000835216600452fd5b90506020813d602011612909575b816128f260209383612c18565b8101031261183f5761290390612e31565b386127ef565b3d91506128e5565b6040513d86823e3d90fd5b503461014757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147575061194060405161295d604082612c18565b601081527f4f6e52616d7020312e362e302d646576000000000000000000000000000000006020820152604051918291602083526020830190612cb6565b503461014757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014757602073ffffffffffffffffffffffffffffffffffffffff60075416604051908152f35b9050346114c257817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126114c25780612a29606092612b78565b82815282602082015282604082015201526080604051612a4881612b78565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166060820152611c5c604051809273ffffffffffffffffffffffffffffffffffffffff6060809267ffffffffffffffff8151168552826020820151166020860152826040820151166040860152015116910152565b6080810190811067ffffffffffffffff821117612b9457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff821117612b9457604052565b610120810190811067ffffffffffffffff821117612b9457604052565b6040810190811067ffffffffffffffff821117612b9457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612b9457604052565b67ffffffffffffffff8111612b9457601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110612ca65750506000910152565b8181015183820152602001612c96565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612cf281518092818752878088019101612c93565b0116010190565b6004359067ffffffffffffffff82168203612d1057565b600080fd5b359067ffffffffffffffff82168203612d1057565b67ffffffffffffffff8111612b945760051b60200190565b35908115158203612d1057565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203612d1057565b6064359073ffffffffffffffffffffffffffffffffffffffff82168203612d1057565b359073ffffffffffffffffffffffffffffffffffffffff82168203612d1057565b9181601f84011215612d105782359167ffffffffffffffff8311612d10576020808501948460051b010111612d1057565b906020808351928381520192019060005b818110612e055750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612df8565b51908115158203612d1057565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811215612d1057016020813591019167ffffffffffffffff8211612d10578136038313612d1057565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9067ffffffffffffffff9093929316815260406020820152612f43612f06612ef58580612e3e565b60a0604086015260e0850191612e8e565b612f136020860186612e3e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0858403016060860152612e8e565b9060408401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811215612d105784016020813591019267ffffffffffffffff8211612d10578160061b36038413612d10578281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0016080840152818152602001929060005b818110613044575050506130118473ffffffffffffffffffffffffffffffffffffffff6130016060613041979801612d95565b1660a08401526080810190612e3e565b9160c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc082860301910152612e8e565b90565b90919360408060019273ffffffffffffffffffffffffffffffffffffffff61306b89612d95565b16815260208881013590820152019501929101612fce565b519073ffffffffffffffffffffffffffffffffffffffff82168203612d1057565b73ffffffffffffffffffffffffffffffffffffffff604051917fbbe4f6db00000000000000000000000000000000000000000000000000000000835216600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561319b5760009061314e575b73ffffffffffffffffffffffffffffffffffffffff91501690565b506020813d602011613193575b8161316860209383612c18565b81010312612d105761318e73ffffffffffffffffffffffffffffffffffffffff91613083565b613133565b3d915061315b565b6040513d6000823e3d90fd5b3573ffffffffffffffffffffffffffffffffffffffff81168103612d105790565b604051906131d582612bc3565b60006080838281528260208201528260408201528260608201520152565b9080601f83011215612d1057813561320a81612d2a565b926132186040519485612c18565b81845260208085019260051b820101928311612d1057602001905b8282106132405750505090565b6020809161324d84612d95565b815201910190613233565b805182101561326c5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612d10570180359067ffffffffffffffff8211612d1057602001918136038313612d1057565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612d10570180359067ffffffffffffffff8211612d1057602001918160061b36038313612d1057565b6040519061334d82612bc3565b6060608083600081528260208201528260408201526000838201520152565b92919261337882612c59565b916133866040519384612c18565b829481845281830111612d10578281602093846000960137010152565b81601f82011215612d105780516133b981612c59565b926133c76040519485612c18565b81845260208284010111612d10576130419160208085019101612c93565b9080602083519182815201916020808360051b8301019401926000915b83831061341157505050505090565b90919293946020806134ac837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289519073ffffffffffffffffffffffffffffffffffffffff8251168152608061349161347f8685015160a08886015260a0850190612cb6565b60408501518482036040860152612cb6565b92606081015160608401520151906080818403910152612cb6565b97019301930191939290613402565b519067ffffffffffffffff82168203612d1057565b90613041916020815267ffffffffffffffff6080835180516020850152826020820151166040850152826040820151166060850152826060820151168285015201511660a082015273ffffffffffffffffffffffffffffffffffffffff60208301511660c08201526101006135c461358f61355c60408601516101a060e08701526101c0860190612cb6565b60608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08683030185870152612cb6565b60808501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085830301610120860152612cb6565b9273ffffffffffffffffffffffffffffffffffffffff60a08201511661014084015260c081015161016084015260e08101516101808401520151906101a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828503019101526133e5565b73ffffffffffffffffffffffffffffffffffffffff60015416330361365057565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b3d156136a5573d9061368b82612c59565b916136996040519384612c18565b82523d6000602084013e565b606090565b805482101561326c5760005260206000200190600090565b600082815260018201602052604090205461374c5780549068010000000000000000821015612b9457826137356137008460018096018555846136aa565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b905580549260005201602052604060002055600190565b5050600090565b90600182019181600052826020526040600020548015156000146138dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116138ad578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116138ad57818103613876575b50505080548015613847577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061380882826136aa565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b61389661388661370093866136aa565b90549060031b1c928392866136aa565b9055600052836020526040600020553880806137d0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50505050600090565b9192901561396057508151156138f9575090565b3b156139025790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156139735750805190602001fd5b610bdb906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190612cb656fea164736f6c634300081a000a", +} + +var MessageTransformerOnRampABI = MessageTransformerOnRampMetaData.ABI + +var MessageTransformerOnRampBin = MessageTransformerOnRampMetaData.Bin + +func DeployMessageTransformerOnRamp(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig OnRampStaticConfig, dynamicConfig OnRampDynamicConfig, destChainConfigs []OnRampDestChainConfigArgs, messageTransformerAddr common.Address) (common.Address, *types.Transaction, *MessageTransformerOnRamp, error) { + parsed, err := MessageTransformerOnRampMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MessageTransformerOnRampBin), backend, staticConfig, dynamicConfig, destChainConfigs, messageTransformerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &MessageTransformerOnRamp{address: address, abi: *parsed, MessageTransformerOnRampCaller: MessageTransformerOnRampCaller{contract: contract}, MessageTransformerOnRampTransactor: MessageTransformerOnRampTransactor{contract: contract}, MessageTransformerOnRampFilterer: MessageTransformerOnRampFilterer{contract: contract}}, nil +} + +type MessageTransformerOnRamp struct { + address common.Address + abi abi.ABI + MessageTransformerOnRampCaller + MessageTransformerOnRampTransactor + MessageTransformerOnRampFilterer +} + +type MessageTransformerOnRampCaller struct { + contract *bind.BoundContract +} + +type MessageTransformerOnRampTransactor struct { + contract *bind.BoundContract +} + +type MessageTransformerOnRampFilterer struct { + contract *bind.BoundContract +} + +type MessageTransformerOnRampSession struct { + Contract *MessageTransformerOnRamp + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type MessageTransformerOnRampCallerSession struct { + Contract *MessageTransformerOnRampCaller + CallOpts bind.CallOpts +} + +type MessageTransformerOnRampTransactorSession struct { + Contract *MessageTransformerOnRampTransactor + TransactOpts bind.TransactOpts +} + +type MessageTransformerOnRampRaw struct { + Contract *MessageTransformerOnRamp +} + +type MessageTransformerOnRampCallerRaw struct { + Contract *MessageTransformerOnRampCaller +} + +type MessageTransformerOnRampTransactorRaw struct { + Contract *MessageTransformerOnRampTransactor +} + +func NewMessageTransformerOnRamp(address common.Address, backend bind.ContractBackend) (*MessageTransformerOnRamp, error) { + abi, err := abi.JSON(strings.NewReader(MessageTransformerOnRampABI)) + if err != nil { + return nil, err + } + contract, err := bindMessageTransformerOnRamp(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MessageTransformerOnRamp{address: address, abi: abi, MessageTransformerOnRampCaller: MessageTransformerOnRampCaller{contract: contract}, MessageTransformerOnRampTransactor: MessageTransformerOnRampTransactor{contract: contract}, MessageTransformerOnRampFilterer: MessageTransformerOnRampFilterer{contract: contract}}, nil +} + +func NewMessageTransformerOnRampCaller(address common.Address, caller bind.ContractCaller) (*MessageTransformerOnRampCaller, error) { + contract, err := bindMessageTransformerOnRamp(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampCaller{contract: contract}, nil +} + +func NewMessageTransformerOnRampTransactor(address common.Address, transactor bind.ContractTransactor) (*MessageTransformerOnRampTransactor, error) { + contract, err := bindMessageTransformerOnRamp(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampTransactor{contract: contract}, nil +} + +func NewMessageTransformerOnRampFilterer(address common.Address, filterer bind.ContractFilterer) (*MessageTransformerOnRampFilterer, error) { + contract, err := bindMessageTransformerOnRamp(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampFilterer{contract: contract}, nil +} + +func bindMessageTransformerOnRamp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MessageTransformerOnRampMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MessageTransformerOnRamp.Contract.MessageTransformerOnRampCaller.contract.Call(opts, result, method, params...) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.MessageTransformerOnRampTransactor.contract.Transfer(opts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.MessageTransformerOnRampTransactor.contract.Transact(opts, method, params...) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MessageTransformerOnRamp.Contract.contract.Call(opts, result, method, params...) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.contract.Transfer(opts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.contract.Transact(opts, method, params...) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) GetAllowedSendersList(opts *bind.CallOpts, destChainSelector uint64) (GetAllowedSendersList, + + error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "getAllowedSendersList", destChainSelector) + + outstruct := new(GetAllowedSendersList) + if err != nil { + return *outstruct, err + } + + outstruct.IsEnabled = *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.ConfiguredAddresses = *abi.ConvertType(out[1], new([]common.Address)).(*[]common.Address) + + return *outstruct, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) GetAllowedSendersList(destChainSelector uint64) (GetAllowedSendersList, + + error) { + return _MessageTransformerOnRamp.Contract.GetAllowedSendersList(&_MessageTransformerOnRamp.CallOpts, destChainSelector) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) GetAllowedSendersList(destChainSelector uint64) (GetAllowedSendersList, + + error) { + return _MessageTransformerOnRamp.Contract.GetAllowedSendersList(&_MessageTransformerOnRamp.CallOpts, destChainSelector) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) GetDestChainConfig(opts *bind.CallOpts, destChainSelector uint64) (GetDestChainConfig, + + error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "getDestChainConfig", destChainSelector) + + outstruct := new(GetDestChainConfig) + if err != nil { + return *outstruct, err + } + + outstruct.SequenceNumber = *abi.ConvertType(out[0], new(uint64)).(*uint64) + outstruct.AllowlistEnabled = *abi.ConvertType(out[1], new(bool)).(*bool) + outstruct.Router = *abi.ConvertType(out[2], new(common.Address)).(*common.Address) + + return *outstruct, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) GetDestChainConfig(destChainSelector uint64) (GetDestChainConfig, + + error) { + return _MessageTransformerOnRamp.Contract.GetDestChainConfig(&_MessageTransformerOnRamp.CallOpts, destChainSelector) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) GetDestChainConfig(destChainSelector uint64) (GetDestChainConfig, + + error) { + return _MessageTransformerOnRamp.Contract.GetDestChainConfig(&_MessageTransformerOnRamp.CallOpts, destChainSelector) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) GetDynamicConfig(opts *bind.CallOpts) (OnRampDynamicConfig, error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "getDynamicConfig") + + if err != nil { + return *new(OnRampDynamicConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OnRampDynamicConfig)).(*OnRampDynamicConfig) + + return out0, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) GetDynamicConfig() (OnRampDynamicConfig, error) { + return _MessageTransformerOnRamp.Contract.GetDynamicConfig(&_MessageTransformerOnRamp.CallOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) GetDynamicConfig() (OnRampDynamicConfig, error) { + return _MessageTransformerOnRamp.Contract.GetDynamicConfig(&_MessageTransformerOnRamp.CallOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) GetExpectedNextSequenceNumber(opts *bind.CallOpts, destChainSelector uint64) (uint64, error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "getExpectedNextSequenceNumber", destChainSelector) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) GetExpectedNextSequenceNumber(destChainSelector uint64) (uint64, error) { + return _MessageTransformerOnRamp.Contract.GetExpectedNextSequenceNumber(&_MessageTransformerOnRamp.CallOpts, destChainSelector) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) GetExpectedNextSequenceNumber(destChainSelector uint64) (uint64, error) { + return _MessageTransformerOnRamp.Contract.GetExpectedNextSequenceNumber(&_MessageTransformerOnRamp.CallOpts, destChainSelector) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) GetFee(opts *bind.CallOpts, destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "getFee", destChainSelector, message) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) GetFee(destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + return _MessageTransformerOnRamp.Contract.GetFee(&_MessageTransformerOnRamp.CallOpts, destChainSelector, message) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) GetFee(destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + return _MessageTransformerOnRamp.Contract.GetFee(&_MessageTransformerOnRamp.CallOpts, destChainSelector, message) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) GetMessageTransformerAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "getMessageTransformerAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) GetMessageTransformerAddress() (common.Address, error) { + return _MessageTransformerOnRamp.Contract.GetMessageTransformerAddress(&_MessageTransformerOnRamp.CallOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) GetMessageTransformerAddress() (common.Address, error) { + return _MessageTransformerOnRamp.Contract.GetMessageTransformerAddress(&_MessageTransformerOnRamp.CallOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) GetPoolBySourceToken(opts *bind.CallOpts, arg0 uint64, sourceToken common.Address) (common.Address, error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "getPoolBySourceToken", arg0, sourceToken) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) GetPoolBySourceToken(arg0 uint64, sourceToken common.Address) (common.Address, error) { + return _MessageTransformerOnRamp.Contract.GetPoolBySourceToken(&_MessageTransformerOnRamp.CallOpts, arg0, sourceToken) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) GetPoolBySourceToken(arg0 uint64, sourceToken common.Address) (common.Address, error) { + return _MessageTransformerOnRamp.Contract.GetPoolBySourceToken(&_MessageTransformerOnRamp.CallOpts, arg0, sourceToken) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) GetStaticConfig(opts *bind.CallOpts) (OnRampStaticConfig, error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "getStaticConfig") + + if err != nil { + return *new(OnRampStaticConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OnRampStaticConfig)).(*OnRampStaticConfig) + + return out0, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) GetStaticConfig() (OnRampStaticConfig, error) { + return _MessageTransformerOnRamp.Contract.GetStaticConfig(&_MessageTransformerOnRamp.CallOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) GetStaticConfig() (OnRampStaticConfig, error) { + return _MessageTransformerOnRamp.Contract.GetStaticConfig(&_MessageTransformerOnRamp.CallOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) GetSupportedTokens(opts *bind.CallOpts, arg0 uint64) ([]common.Address, error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "getSupportedTokens", arg0) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) GetSupportedTokens(arg0 uint64) ([]common.Address, error) { + return _MessageTransformerOnRamp.Contract.GetSupportedTokens(&_MessageTransformerOnRamp.CallOpts, arg0) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) GetSupportedTokens(arg0 uint64) ([]common.Address, error) { + return _MessageTransformerOnRamp.Contract.GetSupportedTokens(&_MessageTransformerOnRamp.CallOpts, arg0) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) Owner() (common.Address, error) { + return _MessageTransformerOnRamp.Contract.Owner(&_MessageTransformerOnRamp.CallOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) Owner() (common.Address, error) { + return _MessageTransformerOnRamp.Contract.Owner(&_MessageTransformerOnRamp.CallOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _MessageTransformerOnRamp.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) TypeAndVersion() (string, error) { + return _MessageTransformerOnRamp.Contract.TypeAndVersion(&_MessageTransformerOnRamp.CallOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampCallerSession) TypeAndVersion() (string, error) { + return _MessageTransformerOnRamp.Contract.TypeAndVersion(&_MessageTransformerOnRamp.CallOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MessageTransformerOnRamp.contract.Transact(opts, "acceptOwnership") +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) AcceptOwnership() (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.AcceptOwnership(&_MessageTransformerOnRamp.TransactOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.AcceptOwnership(&_MessageTransformerOnRamp.TransactOpts) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactor) ApplyAllowlistUpdates(opts *bind.TransactOpts, allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOnRamp.contract.Transact(opts, "applyAllowlistUpdates", allowlistConfigArgsItems) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) ApplyAllowlistUpdates(allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.ApplyAllowlistUpdates(&_MessageTransformerOnRamp.TransactOpts, allowlistConfigArgsItems) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactorSession) ApplyAllowlistUpdates(allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.ApplyAllowlistUpdates(&_MessageTransformerOnRamp.TransactOpts, allowlistConfigArgsItems) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactor) ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOnRamp.contract.Transact(opts, "applyDestChainConfigUpdates", destChainConfigArgs) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) ApplyDestChainConfigUpdates(destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.ApplyDestChainConfigUpdates(&_MessageTransformerOnRamp.TransactOpts, destChainConfigArgs) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactorSession) ApplyDestChainConfigUpdates(destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.ApplyDestChainConfigUpdates(&_MessageTransformerOnRamp.TransactOpts, destChainConfigArgs) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactor) ForwardFromRouter(opts *bind.TransactOpts, destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) { + return _MessageTransformerOnRamp.contract.Transact(opts, "forwardFromRouter", destChainSelector, message, feeTokenAmount, originalSender) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) ForwardFromRouter(destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.ForwardFromRouter(&_MessageTransformerOnRamp.TransactOpts, destChainSelector, message, feeTokenAmount, originalSender) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactorSession) ForwardFromRouter(destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.ForwardFromRouter(&_MessageTransformerOnRamp.TransactOpts, destChainSelector, message, feeTokenAmount, originalSender) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactor) SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) { + return _MessageTransformerOnRamp.contract.Transact(opts, "setDynamicConfig", dynamicConfig) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) SetDynamicConfig(dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.SetDynamicConfig(&_MessageTransformerOnRamp.TransactOpts, dynamicConfig) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactorSession) SetDynamicConfig(dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.SetDynamicConfig(&_MessageTransformerOnRamp.TransactOpts, dynamicConfig) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _MessageTransformerOnRamp.contract.Transact(opts, "transferOwnership", to) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.TransferOwnership(&_MessageTransformerOnRamp.TransactOpts, to) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.TransferOwnership(&_MessageTransformerOnRamp.TransactOpts, to) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactor) WithdrawFeeTokens(opts *bind.TransactOpts, feeTokens []common.Address) (*types.Transaction, error) { + return _MessageTransformerOnRamp.contract.Transact(opts, "withdrawFeeTokens", feeTokens) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampSession) WithdrawFeeTokens(feeTokens []common.Address) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.WithdrawFeeTokens(&_MessageTransformerOnRamp.TransactOpts, feeTokens) +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampTransactorSession) WithdrawFeeTokens(feeTokens []common.Address) (*types.Transaction, error) { + return _MessageTransformerOnRamp.Contract.WithdrawFeeTokens(&_MessageTransformerOnRamp.TransactOpts, feeTokens) +} + +type MessageTransformerOnRampAllowListAdminSetIterator struct { + Event *MessageTransformerOnRampAllowListAdminSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOnRampAllowListAdminSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampAllowListAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampAllowListAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOnRampAllowListAdminSetIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOnRampAllowListAdminSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOnRampAllowListAdminSet struct { + AllowlistAdmin common.Address + Raw types.Log +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) FilterAllowListAdminSet(opts *bind.FilterOpts, allowlistAdmin []common.Address) (*MessageTransformerOnRampAllowListAdminSetIterator, error) { + + var allowlistAdminRule []interface{} + for _, allowlistAdminItem := range allowlistAdmin { + allowlistAdminRule = append(allowlistAdminRule, allowlistAdminItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.FilterLogs(opts, "AllowListAdminSet", allowlistAdminRule) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampAllowListAdminSetIterator{contract: _MessageTransformerOnRamp.contract, event: "AllowListAdminSet", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) WatchAllowListAdminSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampAllowListAdminSet, allowlistAdmin []common.Address) (event.Subscription, error) { + + var allowlistAdminRule []interface{} + for _, allowlistAdminItem := range allowlistAdmin { + allowlistAdminRule = append(allowlistAdminRule, allowlistAdminItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.WatchLogs(opts, "AllowListAdminSet", allowlistAdminRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOnRampAllowListAdminSet) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "AllowListAdminSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) ParseAllowListAdminSet(log types.Log) (*MessageTransformerOnRampAllowListAdminSet, error) { + event := new(MessageTransformerOnRampAllowListAdminSet) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "AllowListAdminSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOnRampAllowListSendersAddedIterator struct { + Event *MessageTransformerOnRampAllowListSendersAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOnRampAllowListSendersAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampAllowListSendersAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampAllowListSendersAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOnRampAllowListSendersAddedIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOnRampAllowListSendersAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOnRampAllowListSendersAdded struct { + DestChainSelector uint64 + Senders []common.Address + Raw types.Log +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) FilterAllowListSendersAdded(opts *bind.FilterOpts, destChainSelector []uint64) (*MessageTransformerOnRampAllowListSendersAddedIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.FilterLogs(opts, "AllowListSendersAdded", destChainSelectorRule) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampAllowListSendersAddedIterator{contract: _MessageTransformerOnRamp.contract, event: "AllowListSendersAdded", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) WatchAllowListSendersAdded(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampAllowListSendersAdded, destChainSelector []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.WatchLogs(opts, "AllowListSendersAdded", destChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOnRampAllowListSendersAdded) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "AllowListSendersAdded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) ParseAllowListSendersAdded(log types.Log) (*MessageTransformerOnRampAllowListSendersAdded, error) { + event := new(MessageTransformerOnRampAllowListSendersAdded) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "AllowListSendersAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOnRampAllowListSendersRemovedIterator struct { + Event *MessageTransformerOnRampAllowListSendersRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOnRampAllowListSendersRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampAllowListSendersRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampAllowListSendersRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOnRampAllowListSendersRemovedIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOnRampAllowListSendersRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOnRampAllowListSendersRemoved struct { + DestChainSelector uint64 + Senders []common.Address + Raw types.Log +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) FilterAllowListSendersRemoved(opts *bind.FilterOpts, destChainSelector []uint64) (*MessageTransformerOnRampAllowListSendersRemovedIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.FilterLogs(opts, "AllowListSendersRemoved", destChainSelectorRule) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampAllowListSendersRemovedIterator{contract: _MessageTransformerOnRamp.contract, event: "AllowListSendersRemoved", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) WatchAllowListSendersRemoved(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampAllowListSendersRemoved, destChainSelector []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.WatchLogs(opts, "AllowListSendersRemoved", destChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOnRampAllowListSendersRemoved) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "AllowListSendersRemoved", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) ParseAllowListSendersRemoved(log types.Log) (*MessageTransformerOnRampAllowListSendersRemoved, error) { + event := new(MessageTransformerOnRampAllowListSendersRemoved) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "AllowListSendersRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOnRampCCIPMessageSentIterator struct { + Event *MessageTransformerOnRampCCIPMessageSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOnRampCCIPMessageSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampCCIPMessageSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampCCIPMessageSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOnRampCCIPMessageSentIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOnRampCCIPMessageSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOnRampCCIPMessageSent struct { + DestChainSelector uint64 + SequenceNumber uint64 + Message InternalEVM2AnyRampMessage + Raw types.Log +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) FilterCCIPMessageSent(opts *bind.FilterOpts, destChainSelector []uint64, sequenceNumber []uint64) (*MessageTransformerOnRampCCIPMessageSentIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.FilterLogs(opts, "CCIPMessageSent", destChainSelectorRule, sequenceNumberRule) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampCCIPMessageSentIterator{contract: _MessageTransformerOnRamp.contract, event: "CCIPMessageSent", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) WatchCCIPMessageSent(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampCCIPMessageSent, destChainSelector []uint64, sequenceNumber []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.WatchLogs(opts, "CCIPMessageSent", destChainSelectorRule, sequenceNumberRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOnRampCCIPMessageSent) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "CCIPMessageSent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) ParseCCIPMessageSent(log types.Log) (*MessageTransformerOnRampCCIPMessageSent, error) { + event := new(MessageTransformerOnRampCCIPMessageSent) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "CCIPMessageSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOnRampConfigSetIterator struct { + Event *MessageTransformerOnRampConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOnRampConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOnRampConfigSetIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOnRampConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOnRampConfigSet struct { + StaticConfig OnRampStaticConfig + DynamicConfig OnRampDynamicConfig + Raw types.Log +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) FilterConfigSet(opts *bind.FilterOpts) (*MessageTransformerOnRampConfigSetIterator, error) { + + logs, sub, err := _MessageTransformerOnRamp.contract.FilterLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return &MessageTransformerOnRampConfigSetIterator{contract: _MessageTransformerOnRamp.contract, event: "ConfigSet", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampConfigSet) (event.Subscription, error) { + + logs, sub, err := _MessageTransformerOnRamp.contract.WatchLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOnRampConfigSet) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) ParseConfigSet(log types.Log) (*MessageTransformerOnRampConfigSet, error) { + event := new(MessageTransformerOnRampConfigSet) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOnRampDestChainConfigSetIterator struct { + Event *MessageTransformerOnRampDestChainConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOnRampDestChainConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampDestChainConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampDestChainConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOnRampDestChainConfigSetIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOnRampDestChainConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOnRampDestChainConfigSet struct { + DestChainSelector uint64 + SequenceNumber uint64 + Router common.Address + AllowlistEnabled bool + Raw types.Log +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) FilterDestChainConfigSet(opts *bind.FilterOpts, destChainSelector []uint64) (*MessageTransformerOnRampDestChainConfigSetIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.FilterLogs(opts, "DestChainConfigSet", destChainSelectorRule) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampDestChainConfigSetIterator{contract: _MessageTransformerOnRamp.contract, event: "DestChainConfigSet", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) WatchDestChainConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampDestChainConfigSet, destChainSelector []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.WatchLogs(opts, "DestChainConfigSet", destChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOnRampDestChainConfigSet) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "DestChainConfigSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) ParseDestChainConfigSet(log types.Log) (*MessageTransformerOnRampDestChainConfigSet, error) { + event := new(MessageTransformerOnRampDestChainConfigSet) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "DestChainConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOnRampFeeTokenWithdrawnIterator struct { + Event *MessageTransformerOnRampFeeTokenWithdrawn + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOnRampFeeTokenWithdrawnIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampFeeTokenWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampFeeTokenWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOnRampFeeTokenWithdrawnIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOnRampFeeTokenWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOnRampFeeTokenWithdrawn struct { + FeeAggregator common.Address + FeeToken common.Address + Amount *big.Int + Raw types.Log +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) FilterFeeTokenWithdrawn(opts *bind.FilterOpts, feeAggregator []common.Address, feeToken []common.Address) (*MessageTransformerOnRampFeeTokenWithdrawnIterator, error) { + + var feeAggregatorRule []interface{} + for _, feeAggregatorItem := range feeAggregator { + feeAggregatorRule = append(feeAggregatorRule, feeAggregatorItem) + } + var feeTokenRule []interface{} + for _, feeTokenItem := range feeToken { + feeTokenRule = append(feeTokenRule, feeTokenItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.FilterLogs(opts, "FeeTokenWithdrawn", feeAggregatorRule, feeTokenRule) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampFeeTokenWithdrawnIterator{contract: _MessageTransformerOnRamp.contract, event: "FeeTokenWithdrawn", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) WatchFeeTokenWithdrawn(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampFeeTokenWithdrawn, feeAggregator []common.Address, feeToken []common.Address) (event.Subscription, error) { + + var feeAggregatorRule []interface{} + for _, feeAggregatorItem := range feeAggregator { + feeAggregatorRule = append(feeAggregatorRule, feeAggregatorItem) + } + var feeTokenRule []interface{} + for _, feeTokenItem := range feeToken { + feeTokenRule = append(feeTokenRule, feeTokenItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.WatchLogs(opts, "FeeTokenWithdrawn", feeAggregatorRule, feeTokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOnRampFeeTokenWithdrawn) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "FeeTokenWithdrawn", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) ParseFeeTokenWithdrawn(log types.Log) (*MessageTransformerOnRampFeeTokenWithdrawn, error) { + event := new(MessageTransformerOnRampFeeTokenWithdrawn) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "FeeTokenWithdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOnRampOwnershipTransferRequestedIterator struct { + Event *MessageTransformerOnRampOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOnRampOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOnRampOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOnRampOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOnRampOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MessageTransformerOnRampOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampOwnershipTransferRequestedIterator{contract: _MessageTransformerOnRamp.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOnRampOwnershipTransferRequested) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) ParseOwnershipTransferRequested(log types.Log) (*MessageTransformerOnRampOwnershipTransferRequested, error) { + event := new(MessageTransformerOnRampOwnershipTransferRequested) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MessageTransformerOnRampOwnershipTransferredIterator struct { + Event *MessageTransformerOnRampOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MessageTransformerOnRampOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MessageTransformerOnRampOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MessageTransformerOnRampOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *MessageTransformerOnRampOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MessageTransformerOnRampOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MessageTransformerOnRampOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &MessageTransformerOnRampOwnershipTransferredIterator{contract: _MessageTransformerOnRamp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MessageTransformerOnRamp.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MessageTransformerOnRampOwnershipTransferred) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRampFilterer) ParseOwnershipTransferred(log types.Log) (*MessageTransformerOnRampOwnershipTransferred, error) { + event := new(MessageTransformerOnRampOwnershipTransferred) + if err := _MessageTransformerOnRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetAllowedSendersList struct { + IsEnabled bool + ConfiguredAddresses []common.Address +} +type GetDestChainConfig struct { + SequenceNumber uint64 + AllowlistEnabled bool + Router common.Address +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRamp) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _MessageTransformerOnRamp.abi.Events["AllowListAdminSet"].ID: + return _MessageTransformerOnRamp.ParseAllowListAdminSet(log) + case _MessageTransformerOnRamp.abi.Events["AllowListSendersAdded"].ID: + return _MessageTransformerOnRamp.ParseAllowListSendersAdded(log) + case _MessageTransformerOnRamp.abi.Events["AllowListSendersRemoved"].ID: + return _MessageTransformerOnRamp.ParseAllowListSendersRemoved(log) + case _MessageTransformerOnRamp.abi.Events["CCIPMessageSent"].ID: + return _MessageTransformerOnRamp.ParseCCIPMessageSent(log) + case _MessageTransformerOnRamp.abi.Events["ConfigSet"].ID: + return _MessageTransformerOnRamp.ParseConfigSet(log) + case _MessageTransformerOnRamp.abi.Events["DestChainConfigSet"].ID: + return _MessageTransformerOnRamp.ParseDestChainConfigSet(log) + case _MessageTransformerOnRamp.abi.Events["FeeTokenWithdrawn"].ID: + return _MessageTransformerOnRamp.ParseFeeTokenWithdrawn(log) + case _MessageTransformerOnRamp.abi.Events["OwnershipTransferRequested"].ID: + return _MessageTransformerOnRamp.ParseOwnershipTransferRequested(log) + case _MessageTransformerOnRamp.abi.Events["OwnershipTransferred"].ID: + return _MessageTransformerOnRamp.ParseOwnershipTransferred(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (MessageTransformerOnRampAllowListAdminSet) Topic() common.Hash { + return common.HexToHash("0xb8c9b44ae5b5e3afb195f67391d9ff50cb904f9c0fa5fd520e497a97c1aa5a1e") +} + +func (MessageTransformerOnRampAllowListSendersAdded) Topic() common.Hash { + return common.HexToHash("0x330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc3281") +} + +func (MessageTransformerOnRampAllowListSendersRemoved) Topic() common.Hash { + return common.HexToHash("0xc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d421586") +} + +func (MessageTransformerOnRampCCIPMessageSent) Topic() common.Hash { + return common.HexToHash("0x192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f32") +} + +func (MessageTransformerOnRampConfigSet) Topic() common.Hash { + return common.HexToHash("0xc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f1") +} + +func (MessageTransformerOnRampDestChainConfigSet) Topic() common.Hash { + return common.HexToHash("0xd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef5") +} + +func (MessageTransformerOnRampFeeTokenWithdrawn) Topic() common.Hash { + return common.HexToHash("0x508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e") +} + +func (MessageTransformerOnRampOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (MessageTransformerOnRampOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_MessageTransformerOnRamp *MessageTransformerOnRamp) Address() common.Address { + return _MessageTransformerOnRamp.address +} + +type MessageTransformerOnRampInterface interface { + GetAllowedSendersList(opts *bind.CallOpts, destChainSelector uint64) (GetAllowedSendersList, + + error) + + GetDestChainConfig(opts *bind.CallOpts, destChainSelector uint64) (GetDestChainConfig, + + error) + + GetDynamicConfig(opts *bind.CallOpts) (OnRampDynamicConfig, error) + + GetExpectedNextSequenceNumber(opts *bind.CallOpts, destChainSelector uint64) (uint64, error) + + GetFee(opts *bind.CallOpts, destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) + + GetMessageTransformerAddress(opts *bind.CallOpts) (common.Address, error) + + GetPoolBySourceToken(opts *bind.CallOpts, arg0 uint64, sourceToken common.Address) (common.Address, error) + + GetStaticConfig(opts *bind.CallOpts) (OnRampStaticConfig, error) + + GetSupportedTokens(opts *bind.CallOpts, arg0 uint64) ([]common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + ApplyAllowlistUpdates(opts *bind.TransactOpts, allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) + + ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) + + ForwardFromRouter(opts *bind.TransactOpts, destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) + + SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + WithdrawFeeTokens(opts *bind.TransactOpts, feeTokens []common.Address) (*types.Transaction, error) + + FilterAllowListAdminSet(opts *bind.FilterOpts, allowlistAdmin []common.Address) (*MessageTransformerOnRampAllowListAdminSetIterator, error) + + WatchAllowListAdminSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampAllowListAdminSet, allowlistAdmin []common.Address) (event.Subscription, error) + + ParseAllowListAdminSet(log types.Log) (*MessageTransformerOnRampAllowListAdminSet, error) + + FilterAllowListSendersAdded(opts *bind.FilterOpts, destChainSelector []uint64) (*MessageTransformerOnRampAllowListSendersAddedIterator, error) + + WatchAllowListSendersAdded(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampAllowListSendersAdded, destChainSelector []uint64) (event.Subscription, error) + + ParseAllowListSendersAdded(log types.Log) (*MessageTransformerOnRampAllowListSendersAdded, error) + + FilterAllowListSendersRemoved(opts *bind.FilterOpts, destChainSelector []uint64) (*MessageTransformerOnRampAllowListSendersRemovedIterator, error) + + WatchAllowListSendersRemoved(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampAllowListSendersRemoved, destChainSelector []uint64) (event.Subscription, error) + + ParseAllowListSendersRemoved(log types.Log) (*MessageTransformerOnRampAllowListSendersRemoved, error) + + FilterCCIPMessageSent(opts *bind.FilterOpts, destChainSelector []uint64, sequenceNumber []uint64) (*MessageTransformerOnRampCCIPMessageSentIterator, error) + + WatchCCIPMessageSent(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampCCIPMessageSent, destChainSelector []uint64, sequenceNumber []uint64) (event.Subscription, error) + + ParseCCIPMessageSent(log types.Log) (*MessageTransformerOnRampCCIPMessageSent, error) + + FilterConfigSet(opts *bind.FilterOpts) (*MessageTransformerOnRampConfigSetIterator, error) + + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampConfigSet) (event.Subscription, error) + + ParseConfigSet(log types.Log) (*MessageTransformerOnRampConfigSet, error) + + FilterDestChainConfigSet(opts *bind.FilterOpts, destChainSelector []uint64) (*MessageTransformerOnRampDestChainConfigSetIterator, error) + + WatchDestChainConfigSet(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampDestChainConfigSet, destChainSelector []uint64) (event.Subscription, error) + + ParseDestChainConfigSet(log types.Log) (*MessageTransformerOnRampDestChainConfigSet, error) + + FilterFeeTokenWithdrawn(opts *bind.FilterOpts, feeAggregator []common.Address, feeToken []common.Address) (*MessageTransformerOnRampFeeTokenWithdrawnIterator, error) + + WatchFeeTokenWithdrawn(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampFeeTokenWithdrawn, feeAggregator []common.Address, feeToken []common.Address) (event.Subscription, error) + + ParseFeeTokenWithdrawn(log types.Log) (*MessageTransformerOnRampFeeTokenWithdrawn, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MessageTransformerOnRampOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*MessageTransformerOnRampOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MessageTransformerOnRampOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MessageTransformerOnRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*MessageTransformerOnRampOwnershipTransferred, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 3370efd2261..9beddbea455 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -157,7 +157,7 @@ type OffRampStaticConfig struct { var OffRampMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\",\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applySourceChainConfigUpdates\",\"inputs\":[{\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\",\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ccipReceive\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structClient.Any2EVMMessage\",\"components\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structClient.EVMTokenAmount[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"commit\",\"inputs\":[{\"name\":\"reportContext\",\"type\":\"bytes32[2]\",\"internalType\":\"bytes32[2]\"},{\"name\":\"report\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"rs\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"ss\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"rawVs\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"reportContext\",\"type\":\"bytes32[2]\",\"internalType\":\"bytes32[2]\"},{\"name\":\"report\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeSingleMessage\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structInternal.Any2EVMRampMessage\",\"components\":[{\"name\":\"header\",\"type\":\"tuple\",\"internalType\":\"structInternal.RampMessageHeader\",\"components\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"sender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"components\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destTokenAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destGasAmount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"offchainTokenData\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAllSourceChainConfigs\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"minSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"onRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getExecutionState\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumInternal.MessageExecutionState\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestPriceSequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMerkleRoot\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSourceChainConfig\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.SourceChainConfig\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"minSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"onRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestConfigDetails\",\"inputs\":[{\"name\":\"ocrPluginType\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"ocrConfig\",\"type\":\"tuple\",\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"components\":[{\"name\":\"configInfo\",\"type\":\"tuple\",\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"components\":[{\"name\":\"configDigest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"F\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"n\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"signers\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"transmitters\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"manuallyExecute\",\"inputs\":[{\"name\":\"reports\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.ExecutionReport[]\",\"components\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messages\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"components\":[{\"name\":\"header\",\"type\":\"tuple\",\"internalType\":\"structInternal.RampMessageHeader\",\"components\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"sender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"components\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destTokenAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destGasAmount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\",\"internalType\":\"bytes[][]\"},{\"name\":\"proofs\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proofFlagBits\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\",\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"components\":[{\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"structOffRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOCR3Configs\",\"inputs\":[{\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"components\":[{\"name\":\"configDigest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"ocrPluginType\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"F\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"signers\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"transmitters\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AlreadyAttempted\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CommitReportAccepted\",\"inputs\":[{\"name\":\"merkleRoots\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"components\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"onRampAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"minSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"merkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"priceUpdates\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"components\":[{\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"components\":[{\"name\":\"sourceToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"usdPerToken\",\"type\":\"uint224\",\"internalType\":\"uint224\"}]},{\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.GasPriceUpdate[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"usdPerUnitGas\",\"type\":\"uint224\",\"internalType\":\"uint224\"}]}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigSet\",\"inputs\":[{\"name\":\"ocrPluginType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"},{\"name\":\"configDigest\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"signers\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"},{\"name\":\"transmitters\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"},{\"name\":\"F\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutionStateChanged\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"messageId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"state\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasUsed\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RootRemoved\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SkippedAlreadyExecutedMessage\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SkippedReportExecution\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SourceChainConfigSet\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sourceConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"minSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"onRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SourceChainSelectorAdded\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaticConfigSet\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transmitted\",\"inputs\":[{\"name\":\"ocrPluginType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"configDigest\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CanOnlySelfCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CommitOnRampMismatch\",\"inputs\":[{\"name\":\"reportOnRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"configOnRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"ConfigDigestMismatch\",\"inputs\":[{\"name\":\"expected\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"actual\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"EmptyBatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyReport\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ExecutionError\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"ForkedChain\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"actual\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidConfig\",\"inputs\":[{\"name\":\"errorType\",\"type\":\"uint8\",\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\"}]},{\"type\":\"error\",\"name\":\"InvalidDataLength\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"got\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidInterval\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"min\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"max\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidManualExecutionGasLimit\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"newLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidManualExecutionTokenGasOverride\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"tokenIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"oldLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenGasOverride\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageDestChainSelector\",\"inputs\":[{\"name\":\"messageDestChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidNewState\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"newState\",\"type\":\"uint8\",\"internalType\":\"enumInternal.MessageExecutionState\"}]},{\"type\":\"error\",\"name\":\"InvalidOnRampUpdate\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LeavesCannotBeEmpty\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ManualExecutionGasAmountCountMismatch\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ManualExecutionGasLimitMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ManualExecutionNotYetEnabled\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MessageValidationError\",\"inputs\":[{\"name\":\"errorReason\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonUniqueSignatures\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotACompatiblePool\",\"inputs\":[{\"name\":\"notPool\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OracleCannotBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReceiverError\",\"inputs\":[{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"ReleaseOrMintBalanceMismatch\",\"inputs\":[{\"name\":\"amountReleased\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balancePre\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balancePost\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"RootAlreadyCommitted\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"merkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"RootNotCommitted\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignaturesOutOfRegistration\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SourceChainNotEnabled\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"SourceChainSelectorMismatch\",\"inputs\":[{\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"StaleCommitReport\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StaticConfigCannotBeChanged\",\"inputs\":[{\"name\":\"ocrPluginType\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"TokenDataMismatch\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"TokenHandlingError\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"UnauthorizedSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedTransmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedTokenData\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongMessageLength\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"actual\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"WrongNumberOfSignatures\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroChainSelectorNotAllowed\",\"inputs\":[]}]", - Bin: "0x6101408060405234610848576162ef803803809161001d828561087e565b833981019080820361014081126108485760a08112610848576040519060a082016001600160401b0381118382101761084d5760405261005c836108a1565b825260208301519261ffff84168403610848576020830193845260408101516001600160a01b0381168103610848576040840190815261009e606083016108b5565b946060850195865260806100b38185016108b5565b86820190815294609f19011261084857604051946100d086610863565b6100dc60a085016108b5565b865260c08401519463ffffffff86168603610848576020870195865261010460e086016108c9565b976040880198895261011961010087016108b5565b6060890190815261012087015190966001600160401b03821161084857018a601f820112156108485780519a6001600160401b038c1161084d578b60051b916020806040519e8f9061016d8388018361087e565b81520193820101908282116108485760208101935b828510610748575050505050331561073757600180546001600160a01b031916331790554660805284516001600160a01b0316158015610725575b8015610713575b6106f15782516001600160401b0316156107025782516001600160401b0390811660a090815286516001600160a01b0390811660c0528351811660e0528451811661010052865161ffff90811661012052604080519751909416875296519096166020860152955185169084015251831660608301525190911660808201527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b79190a182516001600160a01b0316156106f1579151600480548351865160ff60c01b90151560c01b1663ffffffff60a01b60a09290921b919091166001600160a01b039485166001600160c81b0319909316831717179091558351600580549184166001600160a01b031990921691909117905560408051918252925163ffffffff166020820152935115159184019190915290511660608201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee90608090a160005b815181101561066b576020600582901b8301810151908101516001600160401b031690600090821561065c5780516001600160a01b03161561064d57828252600860205260408220906060810151600183019361038585546108d6565b6105ee578354600160a81b600160e81b031916600160a81b1784556040518681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb990602090a15b815180159081156105c3575b506105b4578151916001600160401b0383116105a0576103f986546108d6565b601f811161055b575b50602091601f84116001146104e257926001989796949281926000805160206162cf8339815191529795926104d7575b5050600019600383901b1c191690881b1783555b60408101518254915160a089811b8a9003801960ff60a01b1990951693151590911b60ff60a01b169290921792909216911617815561048484610993565b506104ce6040519283926020845254888060a01b038116602085015260ff8160a01c1615156040850152888060401b039060a81c16606084015260808084015260a0830190610910565b0390a201610328565b015190503880610432565b9190601f198416878452828420935b818110610543575092600199989795939285926000805160206162cf83398151915298968c951061052a575b505050811b018355610446565b015160001960f88460031b161c1916905538808061051d565b929360206001819287860151815501950193016104f1565b86835260208320601f850160051c81019160208610610596575b601f0160051c01905b81811061058b5750610402565b83815560010161057e565b9091508190610575565b634e487b7160e01b82526041600452602482fd5b6342bcdf7f60e11b8152600490fd5b905060208301206040516020810190838252602081526105e460408261087e565b51902014386103d9565b835460a81c6001600160401b0316600114158061061f575b156103cd57632105803760e11b81526004869052602490fd5b50604051610638816106318189610910565b038261087e565b60208151910120825160208401201415610606565b6342bcdf7f60e11b8252600482fd5b63c656089560e01b8252600482fd5b6040516158a89081610a2782396080518161368c015260a05181818161048e01526141a1015260c0518181816104e401528181612cba0152818161310e015261413b015260e051818181610513015261497e01526101005181818161054201526145640152610120518181816104b50152818161243401528181614a7101526155dd0152f35b6342bcdf7f60e11b60005260046000fd5b63c656089560e01b60005260046000fd5b5081516001600160a01b0316156101c4565b5080516001600160a01b0316156101bd565b639b15e16f60e01b60005260046000fd5b84516001600160401b0381116108485782016080818603601f190112610848576040519061077582610863565b60208101516001600160a01b0381168103610848578252610798604082016108a1565b60208301526107a9606082016108c9565b604083015260808101516001600160401b03811161084857602091010185601f820112156108485780516001600160401b03811161084d57604051916107f9601f8301601f19166020018461087e565b81835287602083830101116108485760005b8281106108335750509181600060208096949581960101526060820152815201940193610182565b8060208092840101518282870101520161080b565b600080fd5b634e487b7160e01b600052604160045260246000fd5b608081019081106001600160401b0382111761084d57604052565b601f909101601f19168101906001600160401b0382119082101761084d57604052565b51906001600160401b038216820361084857565b51906001600160a01b038216820361084857565b5190811515820361084857565b90600182811c92168015610906575b60208310146108f057565b634e487b7160e01b600052602260045260246000fd5b91607f16916108e5565b60009291815491610920836108d6565b8083529260018116908115610976575060011461093c57505050565b60009081526020812093945091925b83831061095c575060209250010190565b60018160209294939454838587010152019101919061094b565b915050602093945060ff929192191683830152151560051b010190565b80600052600760205260406000205415600014610a20576006546801000000000000000081101561084d576001810180600655811015610a0a577ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0181905560065460009182526007602052604090912055600190565b634e487b7160e01b600052603260045260246000fd5b5060009056fe6080604052600436101561001257600080fd5b60003560e01c806304666f9c1461015757806306285c6914610152578063181f5a771461014d5780633f4b04aa146101485780635215505b146101435780635e36480c1461013e5780635e7bb0081461013957806360987c20146101345780637437ff9f1461012f57806379ba50971461012a5780637edf52f41461012557806385572ffb146101205780638da5cb5b1461011b578063c673e58414610116578063ccd37ba314610111578063de5e0b9a1461010c578063e9d68a8e14610107578063f2fde38b14610102578063f58e03fc146100fd5763f716f99f146100f857600080fd5b6118d4565b6117b7565b61172c565b611691565b6115f5565b611571565b6114c6565b6113de565b6113a8565b6111e2565b611162565b6110b9565b61103e565b610e39565b6108ce565b610789565b61067c565b61061d565b61043d565b61031f565b634e487b7160e01b600052604160045260246000fd5b608081019081106001600160401b0382111761018d57604052565b61015c565b60a081019081106001600160401b0382111761018d57604052565b604081019081106001600160401b0382111761018d57604052565b606081019081106001600160401b0382111761018d57604052565b90601f801991011681019081106001600160401b0382111761018d57604052565b6040519061021360c0836101e3565b565b6040519061021360a0836101e3565b60405190610213610100836101e3565b604051906102136040836101e3565b6001600160401b03811161018d5760051b60200190565b6001600160a01b0381160361026b57565b600080fd5b600435906001600160401b038216820361026b57565b35906001600160401b038216820361026b57565b8015150361026b57565b35906102138261029a565b6001600160401b03811161018d57601f01601f191660200190565b9291926102d6826102af565b916102e460405193846101e3565b82948184528183011161026b578281602093846000960137010152565b9080601f8301121561026b5781602061031c933591016102ca565b90565b3461026b57602036600319011261026b576004356001600160401b03811161026b573660238201121561026b5780600401359061035b82610243565b9061036960405192836101e3565b8282526024602083019360051b8201019036821161026b5760248101935b8285106103995761039784611a0f565b005b84356001600160401b03811161026b5782016080602319823603011261026b57604051916103c683610172565b60248201356103d48161025a565b83526103e260448301610286565b602084015260648201356103f58161029a565b60408401526084820135926001600160401b03841161026b57610422602094936024869536920101610301565b6060820152815201940193610387565b600091031261026b57565b3461026b57600036600319011261026b576000608060405161045e81610192565b82815282602082015282604082015282606082015201526105bc60405161048481610192565b6001600160401b037f000000000000000000000000000000000000000000000000000000000000000016815261ffff7f00000000000000000000000000000000000000000000000000000000000000001660208201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660408201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660608201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660808201526040519182918291909160806001600160a01b038160a08401956001600160401b03815116855261ffff6020820151166020860152826040820151166040860152826060820151166060860152015116910152565b0390f35b604051906105cf6020836101e3565b60008252565b60005b8381106105e85750506000910152565b81810151838201526020016105d8565b90602091610611815180928185528580860191016105d5565b601f01601f1916010190565b3461026b57600036600319011261026b576105bc604080519061064081836101e3565b601182527f4f666652616d7020312e362e302d6465760000000000000000000000000000006020830152519182916020835260208301906105f8565b3461026b57600036600319011261026b5760206001600160401b03600b5416604051908152f35b906080606061031c936001600160a01b0381511684526020810151151560208501526001600160401b03604082015116604085015201519181606082015201906105f8565b6040810160408252825180915260206060830193019060005b81811061076a575050506020818303910152815180825260208201916020808360051b8301019401926000915b83831061073d57505050505090565b909192939460208061075b600193601f1986820301875289516106a3565b9701930193019193929061072e565b82516001600160401b0316855260209485019490920191600101610701565b3461026b57600036600319011261026b576006546107a681610243565b906107b460405192836101e3565b808252601f196107c382610243565b0160005b8181106108855750506107d981611ce2565b9060005b8181106107f55750506105bc604051928392836106e8565b8061082b610813610807600194614022565b6001600160401b031690565b61081d8387611d3c565b906001600160401b03169052565b61086961086461084b61083e8488611d3c565b516001600160401b031690565b6001600160401b03166000526008602052604060002090565b611e28565b6108738287611d3c565b5261087e8186611d3c565b50016107dd565b602090610890611cbb565b828287010152016107c7565b634e487b7160e01b600052602160045260246000fd5b600411156108bc57565b61089c565b9060048210156108bc5752565b3461026b57604036600319011261026b576108e7610270565b602435906001600160401b038216820361026b5760209161090791611ec4565b61091460405180926108c1565bf35b91908260a091031261026b5760405161092e81610192565b60806109738183958035855261094660208201610286565b602086015261095760408201610286565b604086015261096860608201610286565b606086015201610286565b910152565b35906102138261025a565b63ffffffff81160361026b57565b359061021382610983565b81601f8201121561026b578035906109b382610243565b926109c160405194856101e3565b82845260208085019360051b8301019181831161026b5760208101935b8385106109ed57505050505090565b84356001600160401b03811161026b57820160a0818503601f19011261026b5760405191610a1a83610192565b60208201356001600160401b03811161026b57856020610a3c92850101610301565b83526040820135610a4c8161025a565b6020840152610a5d60608301610991565b60408401526080820135926001600160401b03841161026b5760a083610a8a886020809881980101610301565b6060840152013560808201528152019401936109de565b9190916101408184031261026b57610ab7610204565b92610ac28183610916565b845260a08201356001600160401b03811161026b5781610ae3918401610301565b602085015260c08201356001600160401b03811161026b5781610b07918401610301565b6040850152610b1860e08301610978565b606085015261010082013560808501526101208201356001600160401b03811161026b57610b46920161099c565b60a0830152565b9080601f8301121561026b578135610b6481610243565b92610b7260405194856101e3565b81845260208085019260051b8201019183831161026b5760208201905b838210610b9e57505050505090565b81356001600160401b03811161026b57602091610bc087848094880101610aa1565b815201910190610b8f565b81601f8201121561026b57803590610be282610243565b92610bf060405194856101e3565b82845260208085019360051b8301019181831161026b5760208101935b838510610c1c57505050505090565b84356001600160401b03811161026b57820183603f8201121561026b576020810135610c4781610243565b91610c5560405193846101e3565b8183526020808085019360051b830101019186831161026b5760408201905b838210610c8e575050509082525060209485019401610c0d565b81356001600160401b03811161026b57602091610cb28a8480809589010101610301565b815201910190610c74565b929190610cc981610243565b93610cd760405195866101e3565b602085838152019160051b810192831161026b57905b828210610cf957505050565b8135815260209182019101610ced565b9080601f8301121561026b5781602061031c93359101610cbd565b81601f8201121561026b57803590610d3b82610243565b92610d4960405194856101e3565b82845260208085019360051b8301019181831161026b5760208101935b838510610d7557505050505090565b84356001600160401b03811161026b57820160a0818503601f19011261026b57610d9d610215565b91610daa60208301610286565b835260408201356001600160401b03811161026b57856020610dce92850101610b4d565b602084015260608201356001600160401b03811161026b57856020610df592850101610bcb565b60408401526080820135926001600160401b03841161026b5760a083610e22886020809881980101610d09565b606084015201356080820152815201940193610d66565b3461026b57604036600319011261026b576004356001600160401b03811161026b57610e69903690600401610d24565b6024356001600160401b03811161026b573660238201121561026b57806004013591610e9483610243565b91610ea260405193846101e3565b8383526024602084019460051b8201019036821161026b5760248101945b828610610ed1576103978585611f0c565b85356001600160401b03811161026b5782013660438201121561026b576024810135610efc81610243565b91610f0a60405193846101e3565b818352602060248185019360051b830101019036821161026b5760448101925b828410610f44575050509082525060209586019501610ec0565b83356001600160401b03811161026b576024908301016040601f19823603011261026b5760405190610f75826101ad565b6020810135825260408101356001600160401b03811161026b57602091010136601f8201121561026b57803590610fab82610243565b91610fb960405193846101e3565b80835260208084019160051b8301019136831161026b57602001905b828210610ff45750505091816020938480940152815201930192610f2a565b60208091833561100381610983565b815201910190610fd5565b9181601f8401121561026b578235916001600160401b03831161026b576020808501948460051b01011161026b57565b3461026b57606036600319011261026b576004356001600160401b03811161026b5761106e903690600401610aa1565b6024356001600160401b03811161026b5761108d90369060040161100e565b91604435926001600160401b03841161026b576110b161039794369060040161100e565b939092612318565b3461026b57600036600319011261026b576110d26125e5565b506105bc6040516110e281610172565b60ff6004546001600160a01b038116835263ffffffff8160a01c16602084015260c01c16151560408201526001600160a01b036005541660608201526040519182918291909160606001600160a01b0381608084019582815116855263ffffffff6020820151166020860152604081015115156040860152015116910152565b3461026b57600036600319011261026b576000546001600160a01b03811633036111d1576001600160a01b0319600154913382841617600155166000556001600160a01b033391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b63015aa1e360e11b60005260046000fd5b3461026b57608036600319011261026b57600060405161120181610172565b60043561120d8161025a565b815260243561121b81610983565b602082015260443561122c8161029a565b604082015260643561123d8161025a565b606082015261124a613489565b6001600160a01b038151161561139957611393816112a96001600160a01b037fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9451166001600160a01b03166001600160a01b03196004541617600455565b60208101516004547fffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff77ffffffff000000000000000000000000000000000000000078ff0000000000000000000000000000000000000000000000006040860151151560c01b169360a01b169116171760045561134f61133360608301516001600160a01b031690565b6001600160a01b03166001600160a01b03196005541617600555565b6040519182918291909160606001600160a01b0381608084019582815116855263ffffffff6020820151166020860152604081015115156040860152015116910152565b0390a180f35b6342bcdf7f60e11b8252600482fd5b3461026b57602036600319011261026b576004356001600160401b03811161026b5760a090600319903603011261026b57600080fd5b3461026b57600036600319011261026b5760206001600160a01b0360015416604051908152f35b6004359060ff8216820361026b57565b359060ff8216820361026b57565b906020808351928381520192019060005b8181106114415750505090565b82516001600160a01b0316845260209384019390920191600101611434565b9061031c9160208152606082518051602084015260ff602082015116604084015260ff6040820151168284015201511515608082015260406114b1602084015160c060a085015260e0840190611423565b9201519060c0601f1982850301910152611423565b3461026b57602036600319011261026b5760ff6114e1611405565b6060604080516114f0816101c8565b6114f86125e5565b815282602082015201521660005260026020526105bc6040600020600361156060405192611525846101c8565b61152e8161260a565b845260405161154b816115448160028601612643565b03826101e3565b60208501526115446040518094819301612643565b604082015260405191829182611460565b3461026b57604036600319011261026b5761158a610270565b6001600160401b036024359116600052600a6020526040600020906000526020526020604060002054604051908152f35b9060049160441161026b57565b9181601f8401121561026b578235916001600160401b03831161026b576020838186019501011161026b57565b3461026b5760c036600319011261026b5761160f366115bb565b6044356001600160401b03811161026b5761162e9036906004016115c8565b6064929192356001600160401b03811161026b5761165090369060040161100e565b60843594916001600160401b03861161026b5761167461039796369060040161100e565b94909360a43596612c75565b90602061031c9281815201906106a3565b3461026b57602036600319011261026b576001600160401b036116b2610270565b6116ba611cbb565b501660005260086020526105bc6040600020600161171b604051926116de84610172565b6001600160401b0381546001600160a01b038116865260ff8160a01c161515602087015260a81c1660408501526115446040518094819301611d8a565b606082015260405191829182611680565b3461026b57602036600319011261026b576001600160a01b036004356117518161025a565b611759613489565b163381146117a657806001600160a01b031960005416176000556001600160a01b03600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278600080a3005b636d6c4ee560e11b60005260046000fd5b3461026b57606036600319011261026b576117d1366115bb565b6044356001600160401b03811161026b576117f09036906004016115c8565b9182820160208382031261026b578235906001600160401b03821161026b5761181a918401610d24565b60405190602061182a81846101e3565b60008352601f19810160005b81811061185e57505050610397949161184e916136cd565b611856613184565b928392613a33565b60608582018401528201611836565b9080601f8301121561026b57813561188481610243565b9261189260405194856101e3565b81845260208085019260051b82010192831161026b57602001905b8282106118ba5750505090565b6020809183356118c98161025a565b8152019101906118ad565b3461026b57602036600319011261026b576004356001600160401b03811161026b573660238201121561026b5780600401359061191082610243565b9061191e60405192836101e3565b8282526024602083019360051b8201019036821161026b5760248101935b82851061194c57610397846131a0565b84356001600160401b03811161026b57820160c0602319823603011261026b57611974610204565b916024820135835261198860448301611415565b602084015261199960648301611415565b60408401526119aa608483016102a4565b606084015260a48201356001600160401b03811161026b576119d2906024369185010161186d565b608084015260c4820135926001600160401b03841161026b576119ff60209493602486953692010161186d565b60a082015281520194019361193c565b611a17613489565b60005b8151811015611cb757611a2d8183611d3c565b5190611a4360208301516001600160401b031690565b916001600160401b038316908115611ca657611a78611a6c611a6c83516001600160a01b031690565b6001600160a01b031690565b15611c0d57611a9a846001600160401b03166000526008602052604060002090565b906060810151916001810195611ab08754611d50565b611c3457611b237ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb991611b0984750100000000000000000000000000000000000000000067ffffffffffffffff60a81b19825416179055565b6040516001600160401b0390911681529081906020820190565b0390a15b82518015908115611c1e575b50611c0d57611bee611bd2611c0493611b6f7f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b9660019a61352b565b611bc5611b7f6040830151151590565b85547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016178555565b516001600160a01b031690565b82906001600160a01b03166001600160a01b0319825416179055565b611bf78461504a565b50604051918291826135fc565b0390a201611a1a565b6342bcdf7f60e11b60005260046000fd5b90506020840120611c2d6134ae565b1438611b33565b60016001600160401b03611c5384546001600160401b039060a81c1690565b16141580611c87575b611c665750611b27565b632105803760e11b6000526001600160401b031660045260246000fd5b6000fd5b50611c9187611e0d565b60208151910120845160208601201415611c5c565b63c656089560e01b60005260046000fd5b5050565b60405190611cc882610172565b606080836000815260006020820152600060408201520152565b90611cec82610243565b611cf960405191826101e3565b8281528092611d0a601f1991610243565b0190602036910137565b634e487b7160e01b600052603260045260246000fd5b805115611d375760200190565b611d14565b8051821015611d375760209160051b010190565b90600182811c92168015611d80575b6020831014611d6a57565b634e487b7160e01b600052602260045260246000fd5b91607f1691611d5f565b60009291815491611d9a83611d50565b8083529260018116908115611df05750600114611db657505050565b60009081526020812093945091925b838310611dd6575060209250010190565b600181602092949394548385870101520191019190611dc5565b915050602093945060ff929192191683830152151560051b010190565b90610213611e219260405193848092611d8a565b03836101e3565b9060016060604051611e3981610172565b611e8281956001600160401b0381546001600160a01b038116855260ff8160a01c161515602086015260a81c166040840152611e7b6040518096819301611d8a565b03846101e3565b0152565b634e487b7160e01b600052601160045260246000fd5b908160051b9180830460201490151715611eb257565b611e86565b91908203918211611eb257565b611ed082607f92613646565b9116906801fffffffffffffffe6001600160401b0383169260011b169180830460021490151715611eb2576003911c1660048110156108bc5790565b611f1461368a565b80518251810361210b5760005b818110611f3457505090610213916136cd565b611f3e8184611d3c565b516020810190815151611f518488611d3c565b51928351820361210b5790916000925b808410611f75575050505050600101611f21565b91949398611f87848b98939598611d3c565b515198611f95888851611d3c565b5199806120c2575b5060a08a01988b6020611fb38b8d515193611d3c565b51015151036120855760005b8a515181101561207057611ffb611ff2611fe88f6020611fe08f8793611d3c565b510151611d3c565b5163ffffffff1690565b63ffffffff1690565b8b8161200c575b5050600101611fbf565b611ff2604061201f8561202b9451611d3c565b51015163ffffffff1690565b9081811061203a57508b612002565b8d51516040516348e617b360e01b81526004810191909152602481019390935260448301919091526064820152608490fd5b0390fd5b50985098509893949095600101929091611f61565b611c838b516120a0606082519201516001600160401b031690565b6370a193fd60e01b6000526004919091526001600160401b0316602452604490565b60808b0151811015611f9d57611c83908b6120e488516001600160401b031690565b905151633a98d46360e11b6000526001600160401b03909116600452602452604452606490565b6320f8fd5960e21b60005260046000fd5b60405190612129826101ad565b60006020838281520152565b604051906121446020836101e3565b600080835282815b82811061215857505050565b60209061216361211c565b8282850101520161214c565b805182526001600160401b03602082015116602083015260806121b66121a4604084015160a0604087015260a08601906105f8565b606084015185820360608701526105f8565b9101519160808183039101526020808351928381520192019060005b8181106121df5750505090565b825180516001600160a01b0316855260209081015181860152604090940193909201916001016121d2565b90602061031c92818152019061216f565b6040513d6000823e3d90fd5b3d15612252573d90612238826102af565b9161224660405193846101e3565b82523d6000602084013e565b606090565b90602061031c9281815201906105f8565b909160608284031261026b57815161227f8161029a565b9260208301516001600160401b03811161026b5783019080601f8301121561026b578151916122ad836102af565b916122bb60405193846101e3565b8383526020848301011161026b576040926122dc91602080850191016105d5565b92015190565b9293606092959461ffff6123066001600160a01b039460808852608088019061216f565b97166020860152604085015216910152565b929093913033036125d45761232b612135565b9460a0850151805161258d575b5050505050805191612356602084519401516001600160401b031690565b906020830151916040840192612383845192612370610215565b9788526001600160401b03166020880152565b6040860152606085015260808401526001600160a01b036123ac6005546001600160a01b031690565b1680612510575b5051511580612504575b80156124ee575b80156124c5575b611cb75761245d9181612402611a6c6123f561084b602060009751016001600160401b0390511690565b546001600160a01b031690565b908361241d606060808401519301516001600160a01b031690565b604051633cf9798360e01b815296879586948593917f000000000000000000000000000000000000000000000000000000000000000090600486016122e2565b03925af19081156124c057600090600092612499575b501561247c5750565b6040516302a35ba360e21b815290819061206c9060048301612257565b90506124b891503d806000833e6124b081836101e3565b810190612268565b509038612473565b61221b565b506124e96124e56124e060608401516001600160a01b031690565b6138f4565b1590565b6123cb565b5060608101516001600160a01b03163b156123c4565b506080810151156123bd565b803b1561026b57600060405180926308d450a160e01b82528183816125388a6004830161220a565b03925af19081612572575b5061256c5761206c612553612227565b6040516309c2532560e01b815291829160048301612257565b386123b3565b806125816000612587936101e3565b80610432565b38612543565b85965060206125c99601516125ac60608901516001600160a01b031690565b906125c360208a51016001600160401b0390511690565b926137db565b903880808080612338565b6306e34e6560e31b60005260046000fd5b604051906125f282610172565b60006060838281528260208201528260408201520152565b9060405161261781610172565b606060ff600183958054855201548181166020850152818160081c16604085015260101c161515910152565b906020825491828152019160005260206000209060005b8181106126675750505090565b82546001600160a01b031684526020909301926001928301920161265a565b90610213611e219260405193848092612643565b35906001600160e01b038216820361026b57565b81601f8201121561026b578035906126c582610243565b926126d360405194856101e3565b82845260208085019360061b8301019181831161026b57602001925b8284106126fd575050505090565b60408483031261026b5760206040918251612717816101ad565b61272087610286565b815261272d83880161269a565b838201528152019301926126ef565b81601f8201121561026b5780359061275382610243565b9261276160405194856101e3565b82845260208085019360051b8301019181831161026b5760208101935b83851061278d57505050505090565b84356001600160401b03811161026b57820160a0818503601f19011261026b57604051916127ba83610192565b6127c660208301610286565b83526040820135926001600160401b03841161026b5760a0836127f0886020809881980101610301565b8584015261280060608201610286565b604084015261281160808201610286565b60608401520135608082015281520194019361277e565b81601f8201121561026b5780359061283f82610243565b9261284d60405194856101e3565b82845260208085019360061b8301019181831161026b57602001925b828410612877575050505090565b60408483031261026b5760206040918251612891816101ad565b863581528287013583820152815201930192612869565b60208183031261026b578035906001600160401b03821161026b570160608183031261026b57604051916128db836101c8565b81356001600160401b03811161026b57820160408183031261026b5760405190612904826101ad565b80356001600160401b03811161026b57810183601f8201121561026b57803561292c81610243565b9161293a60405193846101e3565b81835260208084019260061b8201019086821161026b57602001915b8183106129d25750505082526020810135906001600160401b03821161026b57612982918491016126ae565b6020820152835260208201356001600160401b03811161026b57816129a891840161273c565b602084015260408201356001600160401b03811161026b576129ca9201612828565b604082015290565b60408388031261026b57602060409182516129ec816101ad565b85356129f78161025a565b8152612a0483870161269a565b83820152815201920191612956565b9080602083519182815201916020808360051b8301019401926000915b838310612a3f57505050505090565b9091929394602080600192601f198582030186528851906001600160401b038251168152608080612a7d8585015160a08786015260a08501906105f8565b936001600160401b0360408201511660408501526001600160401b036060820151166060850152015191015297019301930191939290612a30565b916001600160a01b03612ad992168352606060208401526060830190612a13565b9060408183039101526020808351928381520192019060005b818110612aff5750505090565b8251805185526020908101518186015260409094019390920191600101612af2565b906020808351928381520192019060005b818110612b3f5750505090565b825180516001600160401b031685526020908101516001600160e01b03168186015260409094019390920191600101612b32565b9190604081019083519160408252825180915260206060830193019060005b818110612bb357505050602061031c93940151906020818403910152612b21565b825180516001600160a01b031686526020908101516001600160e01b03168187015260409095019490920191600101612b92565b90602061031c928181520190612b73565b9081602091031261026b575161031c8161029a565b9091612c2461031c936040845260408401906105f8565b916020818403910152611d8a565b6001600160401b036001911601906001600160401b038211611eb257565b9091612c6761031c93604084526040840190612a13565b916020818403910152612b73565b929693959190979497612c8a828201826128a8565b98612c9e6124e560045460ff9060c01c1690565b6130f2575b895180515115908115916130e3575b5061300a575b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316999860208a019860005b8a518051821015612fa85781612d0191611d3c565b518d612d1482516001600160401b031690565b604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b1660048201529091602090829060249082905afa9081156124c057600091612f7a575b50612f5d57612d6390613942565b60208201805160208151910120906001830191612d7f83611e0d565b6020815191012003612f40575050805460408301516001600160401b039081169160a81c168114801590612f18575b612ec657506080820151908115612eb557612dff82612df0612dd786516001600160401b031690565b6001600160401b0316600052600a602052604060002090565b90600052602052604060002090565b54612e81578291612e65612e7a92612e2c612e2760606001999801516001600160401b031690565b612c32565b67ffffffffffffffff60a81b197cffffffffffffffff00000000000000000000000000000000000000000083549260a81b169116179055565b612df0612dd74294516001600160401b031690565b5501612cec565b50612e96611c8392516001600160401b031690565b6332cf0cbf60e01b6000526001600160401b0316600452602452604490565b63504570e360e01b60005260046000fd5b82611c8391612ef06060612ee184516001600160401b031690565b9301516001600160401b031690565b636af0786b60e11b6000526001600160401b0392831660045290821660245216604452606490565b50612f3061080760608501516001600160401b031690565b6001600160401b03821611612dae565b5161206c60405192839263b80d8fa960e01b845260048401612c0d565b637edeb53960e11b6000526001600160401b031660045260246000fd5b612f9b915060203d8111612fa1575b612f9381836101e3565b810190612bf8565b38612d55565b503d612f89565b50506130049496989b507f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e46102139b612ffc949597999b51905190612ff260405192839283612c50565b0390a13691610cbd565b943691610cbd565b93613d11565b61301f602086015b356001600160401b031690565b600b546001600160401b03828116911610156130c757613055906001600160401b03166001600160401b0319600b541617600b55565b61306d611a6c611a6c6004546001600160a01b031690565b8a5190803b1561026b57604051633937306f60e01b815291600091839182908490829061309d9060048301612be7565b03925af180156124c0576130b2575b50612cb8565b8061258160006130c1936101e3565b386130ac565b5060208a015151612cb857632261116760e01b60005260046000fd5b60209150015151151538612cb2565b60208a01518051613104575b50612ca3565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169060408c0151823b1561026b57604051633854844f60e11b815292600092849283918291613160913060048501612ab8565b03915afa80156124c057156130fe5780612581600061317e936101e3565b386130fe565b604051906131936020836101e3565b6000808352366020840137565b6131a8613489565b60005b8151811015611cb7576131be8183611d3c565b51906040820160ff6131d1825160ff1690565b161561347357602083015160ff16926131f78460ff166000526002602052604060002090565b916001830191825461321261320c8260ff1690565b60ff1690565b613438575061323f6132276060830151151590565b845462ff0000191690151560101b62ff000016178455565b60a081019182516101008151116133e057805115613422576003860161326d61326782612686565b8a614df8565b60608401516132fd575b947fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547946002946132d96132c96132f79a966132c28760019f9c6132bd6132ef9a8f614f59565b613f25565b5160ff1690565b845460ff191660ff821617909455565b5190818555519060405195869501908886613fab565b0390a1614fdb565b016131ab565b9794600287939597019661331961331389612686565b88614df8565b60808501519461010086511161340c57855161334161320c61333c8a5160ff1690565b613f11565b10156133f65785518451116133e0576132d96132c97fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547986132c28760019f6132bd6132f79f9a8f6133c860029f6133c26132ef9f8f906132bd84926133a7845160ff1690565b908054909161ff001990911660089190911b61ff0016179055565b82614e8c565b505050979c9f50975050969a50505094509450613277565b631b3fab5160e11b600052600160045260246000fd5b631b3fab5160e11b600052600360045260246000fd5b631b3fab5160e11b600052600260045260246000fd5b631b3fab5160e11b600052600560045260246000fd5b60101c60ff1661345361344e6060840151151590565b151590565b9015151461323f576321fd80df60e21b60005260ff861660045260246000fd5b631b3fab5160e11b600090815260045260246000fd5b6001600160a01b0360015416330361349d57565b6315ae3a6f60e11b60005260046000fd5b604051602081019060008252602081526134c96040826101e3565b51902090565b8181106134da575050565b600081556001016134cf565b9190601f81116134f557505050565b610213926000526020600020906020601f840160051c83019310613521575b601f0160051c01906134cf565b9091508190613514565b91909182516001600160401b03811161018d576135528161354c8454611d50565b846134e6565b6020601f8211600114613593578190613584939495600092613588575b50508160011b916000199060031b1c19161790565b9055565b01519050388061356f565b601f198216906135a884600052602060002090565b9160005b8181106135e4575095836001959697106135cb575b505050811b019055565b015160001960f88460031b161c191690553880806135c1565b9192602060018192868b0151815501940192016135ac565b90600160a061031c93602081526001600160401b0384546001600160a01b038116602084015260ff81851c161515604084015260a81c166060820152608080820152019101611d8a565b906001600160401b03613686921660005260096020526701ffffffffffffff60406000209160071c166001600160401b0316600052602052604060002090565b5490565b7f00000000000000000000000000000000000000000000000000000000000000004681036136b55750565b630f01ce8560e01b6000526004524660245260446000fd5b91909180511561376f5782511592602091604051926136ec81856101e3565b60008452601f19810160005b81811061374b5750505060005b8151811015613743578061372c61371e60019385611d3c565b5188156137325786906140ea565b01613705565b61373c8387611d3c565b51906140ea565b505050509050565b8290604051613759816101ad565b60008152606083820152828289010152016136f8565b63c2e5347d60e01b60005260046000fd5b9190811015611d375760051b0190565b3561031c81610983565b9190811015611d375760051b81013590601e198136030182121561026b5701908135916001600160401b03831161026b57602001823603811361026b579190565b909294919397968151966137ee88610243565b976137fc604051998a6101e3565b80895261380b601f1991610243565b0160005b8181106138dd57505060005b83518110156138d057806138628c8a8a8a61385c613855878d61384e828f8f9d8f9e60019f8161387e575b505050611d3c565b519761379a565b36916102ca565b9361492f565b61386c828c611d3c565b52613877818b611d3c565b500161381b565b63ffffffff613896613891858585613780565b613790565b1615613846576138c6926138ad9261389192613780565b60406138b98585611d3c565b51019063ffffffff169052565b8f8f908391613846565b5096985050505050505050565b6020906138e861211c565b82828d0101520161380f565b6139056385572ffb60e01b82614c92565b908161391f575b81613915575090565b61031c9150614c64565b905061392a81614be9565b159061390c565b61390563aff2afbf60e01b82614c92565b6001600160401b031680600052600860205260406000209060ff825460a01c161561396b575090565b63ed053c5960e01b60005260045260246000fd5b6084019081608411611eb257565b60a001908160a011611eb257565b91908201809211611eb257565b600311156108bc57565b60038210156108bc5752565b906102136040516139ce816101ad565b602060ff829554818116845260081c1691016139b2565b8054821015611d375760005260206000200190600090565b60ff60019116019060ff8211611eb257565b60ff601b9116019060ff8211611eb257565b90606092604091835260208301370190565b6001600052600260205293613a677fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e061260a565b93853594613a748561397f565b6060820190613a838251151590565b613ce3575b803603613ccb57508151878103613cb25750613aa261368a565b60016000526003602052613af1613aec7fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c5b336001600160a01b0316600052602052604060002090565b6139be565b60026020820151613b01816139a8565b613b0a816139a8565b149081613c4a575b5015613c395751613b70575b50505050507f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef090613b5461301260019460200190565b604080519283526001600160401b0391909116602083015290a2565b613b9161320c613b8c602085969799989a955194015160ff1690565b6139fd565b03613c28578151835103613c1757613c0f6000613b549461301294613bdb7f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef09960019b36916102ca565b60208151910120604051613c0681613bf889602083019586613a21565b03601f1981018352826101e3565b5190208a614cc2565b948394613b1e565b63a75d88af60e01b60005260046000fd5b6371253a2560e01b60005260046000fd5b631b41e11d60e31b60005260046000fd5b60016000526002602052613caa9150611a6c90613c9790613c9160037fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e05b01915160ff1690565b906139e5565b90546001600160a01b039160031b1c1690565b331438613b12565b6324f7d61360e21b600052600452602487905260446000fd5b638e1192e160e01b6000526004523660245260446000fd5b613d0c90613d06613cfc613cf78751611e9c565b61398d565b613d068851611e9c565b9061399b565b613a88565b60008052600260205294909390929091613d4a7fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b61260a565b94863595613d578361397f565b6060820190613d668251151590565b613eee575b803603613ccb57508151888103613ed55750613d8561368a565b600080526003602052613dba613aec7f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff613ad4565b60026020820151613dca816139a8565b613dd3816139a8565b149081613e8c575b5015613c395751613e1e575b5050505050507f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef090613b5461301260009460200190565b613e3a61320c613b8c602087989a999b96975194015160ff1690565b03613c28578351865103613c17576000967f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef096613b5495613bdb613e83946130129736916102ca565b94839438613de7565b600080526002602052613ecd9150611a6c90613c9790613c9160037fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b613c88565b331438613ddb565b6324f7d61360e21b600052600452602488905260446000fd5b613f0c90613d06613f02613cf78951611e9c565b613d068a51611e9c565b613d6b565b60ff166003029060ff8216918203611eb257565b8151916001600160401b03831161018d5768010000000000000000831161018d576020908254848455808510613f8e575b500190600052602060002060005b838110613f715750505050565b60019060206001600160a01b038551169401938184015501613f64565b613fa59084600052858460002091820191016134cf565b38613f56565b95949392909160ff613fd093168752602087015260a0604087015260a0860190612643565b84810360608601526020808351928381520192019060005b818110614003575050509060806102139294019060ff169052565b82516001600160a01b0316845260209384019390920191600101613fe8565b600654811015611d375760066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015490565b6001600160401b0361031c94938160609416835216602082015281604082015201906105f8565b60409061031c9392815281602082015201906105f8565b9291906001600160401b039081606495166004521660245260048110156108bc57604452565b9493926140d46060936140e593885260208801906108c1565b6080604087015260808601906105f8565b930152565b906140fc82516001600160401b031690565b8151604051632cbc26bb60e01b815267ffffffffffffffff60801b608084901b1660048201529015159391906001600160401b038216906020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156124c057600091614818575b506147d65760208301918251519485156147a6576040850180515187036147955761419e87611ce2565b957f00000000000000000000000000000000000000000000000000000000000000006141d460016141ce87613942565b01611e0d565b6020815191012060405161423481613bf86020820194868b876001600160401b036060929594938160808401977f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f85521660208401521660408201520152565b519020906001600160401b031660005b8a81106146fd57505050806080606061426493015191015190888661528b565b9788156146df5760005b8881106142815750505050505050505050565b5a61428d828951611d3c565b518051606001516142a7906001600160401b031688611ec4565b6142b0816108b2565b8015908d82831593846146cc575b15614689576060881561460c57506142e560206142db898d611d3c565b5101519242611eb7565b6004546142fa9060a01c63ffffffff16611ff2565b1080156145f9575b156145db57614311878b611d3c565b51516145c5575b845160800151614330906001600160401b0316610807565b61450d575b50614341868951611d3c565b5160a0850151518151036144d157936143a69695938c938f966143868e958c9261438061437a60608951016001600160401b0390511690565b896152bd565b86615464565b9a9080966143a060608851016001600160401b0390511690565b90615345565b61447f575b50506143b6826108b2565b60028203614437575b60019661442d7f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b936001600160401b0393519261441e6144158b61440d60608801516001600160401b031690565b96519b611d3c565b51985a90611eb7565b916040519586951698856140bb565b0390a45b0161426e565b91509193949250614447826108b2565b6003820361445b578b929493918a916143bf565b51606001516349362d1f60e11b600052611c8391906001600160401b031689614095565b614488846108b2565b600384036143ab5790929495506144a09193506108b2565b6144b0578b92918a9138806143ab565b5151604051632b11b8d960e01b815290819061206c9087906004840161407e565b611c838b6144eb60608851016001600160401b0390511690565b631cfe6d8b60e01b6000526001600160401b0391821660045216602452604490565b614516836108b2565b614521575b38614335565b8351608001516001600160401b0316602080860151918c61455660405194859384936370701e5760e11b855260048501614057565b038160006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156124c0576000916145a7575b5061451b575050505050600190614431565b6145bf915060203d8111612fa157612f9381836101e3565b38614595565b6145cf878b611d3c565b51516080860152614318565b6354e7e43160e11b6000526001600160401b038b1660045260246000fd5b50614603836108b2565b60038314614302565b915083614618846108b2565b1561431857506001959450614681925061465f91507f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe651209351016001600160401b0390511690565b604080516001600160401b03808c168252909216602083015290918291820190565b0390a1614431565b50505050600192915061468161465f60607f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c9351016001600160401b0390511690565b506146d6836108b2565b600383146142be565b633ee8bd3f60e11b6000526001600160401b03841660045260246000fd5b614708818a51611d3c565b518051604001516001600160401b031683810361477857508051602001516001600160401b031689810361475557509061474484600193615183565b61474e828d611d3c565b5201614244565b636c95f1eb60e01b6000526001600160401b03808a166004521660245260446000fd5b631c21951160e11b6000526001600160401b031660045260246000fd5b6357e0e08360e01b60005260046000fd5b611c836147ba86516001600160401b031690565b63676cf24b60e11b6000526001600160401b0316600452602490565b5092915050612f5d576040516001600160401b039190911681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d89493390602090a1565b614831915060203d602011612fa157612f9381836101e3565b38614174565b9081602091031261026b575161031c8161025a565b9061031c916020815260e06148ea6148d5614875855161010060208701526101208601906105f8565b60208601516001600160401b0316604086015260408601516001600160a01b03166060860152606086015160808601526148bf608087015160a08701906001600160a01b03169052565b60a0860151858203601f190160c08701526105f8565b60c0850151848203601f1901848601526105f8565b92015190610100601f19828503019101526105f8565b6040906001600160a01b0361031c949316815281602082015201906105f8565b9081602091031261026b575190565b9193929361493b61211c565b5060208301516001600160a01b031660405163bbe4f6db60e01b81526001600160a01b038216600482015290959092602084806024810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9384156124c057600094614bb8575b506001600160a01b0384169586158015614ba6575b614b8857614a6d614a9692613bf8926149f16149ea611ff260408c015163ffffffff1690565b8c896155a5565b9690996080810151614a1f6060835193015193614a0c610224565b9687526001600160401b03166020870152565b6001600160a01b038a16604086015260608501526001600160a01b038d16608085015260a084015260c083015260e0820152604051633907753760e01b60208201529283916024830161484c565b82857f000000000000000000000000000000000000000000000000000000000000000092615633565b94909115614b6c5750805160208103614b53575090614abf826020808a95518301019101614920565b956001600160a01b03841603614af7575b5050505050614aef614ae0610234565b6001600160a01b039093168352565b602082015290565b614b0a93614b0491611eb7565b916155a5565b50908082108015614b40575b614b2257808481614ad0565b63a966e21f60e01b6000908152600493909352602452604452606490fd5b5082614b4c8284611eb7565b1415614b16565b631e3be00960e21b600052602060045260245260446000fd5b61206c604051928392634ff17cad60e11b845260048401614900565b63ae9b4ce960e01b6000526001600160a01b03851660045260246000fd5b50614bb36124e586613931565b6149c4565b614bdb91945060203d602011614be2575b614bd381836101e3565b810190614837565b92386149af565b503d614bc9565b60405160208101916301ffc9a760e01b835263ffffffff60e01b602483015260248252614c176044836101e3565b6179185a10614c53576020926000925191617530fa6000513d82614c47575b5081614c40575090565b9050151590565b60201115915038614c36565b63753fa58960e11b60005260046000fd5b60405160208101916301ffc9a760e01b83526301ffc9a760e01b602483015260248252614c176044836101e3565b6040519060208201926301ffc9a760e01b845263ffffffff60e01b16602483015260248252614c176044836101e3565b919390926000948051946000965b868810614ce1575050505050505050565b6020881015611d375760206000614cf9878b1a613a0f565b614d038b87611d3c565b5190614d3a614d128d8a611d3c565b5160405193849389859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156124c057614d80613aec600051614d688960ff166000526003602052604060002090565b906001600160a01b0316600052602052604060002090565b9060016020830151614d91816139a8565b614d9a816139a8565b03614de757614db7614dad835160ff1690565b60ff600191161b90565b8116614dd657614dcd614dad6001935160ff1690565b17970196614cd0565b633d9ef1f160e21b60005260046000fd5b636518c33d60e11b60005260046000fd5b91909160005b8351811015614e515760019060ff831660005260036020526000614e4a604082206001600160a01b03614e31858a611d3c565b51166001600160a01b0316600052602052604060002090565b5501614dfe565b50509050565b8151815460ff191660ff91909116178155906020015160038110156108bc57815461ff00191660089190911b61ff0016179055565b919060005b8151811015614e5157614ea7611bc58284611d3c565b90614ed0614ec683614d688860ff166000526003602052604060002090565b5460081c60ff1690565b614ed9816139a8565b614f44576001600160a01b03821615614f3357614f2d600192614f28614efd610234565b60ff8516815291614f1186602085016139b2565b614d688960ff166000526003602052604060002090565b614e57565b01614e91565b63d6c62c9b60e01b60005260046000fd5b631b3fab5160e11b6000526004805260246000fd5b919060005b8151811015614e5157614f74611bc58284611d3c565b90614f93614ec683614d688860ff166000526003602052604060002090565b614f9c816139a8565b614f44576001600160a01b03821615614f3357614fd5600192614f28614fc0610234565b60ff8516815291614f116002602085016139b2565b01614f5e565b60ff1680600052600260205260ff60016040600020015460101c16908015600014615029575015615018576001600160401b0319600b5416600b55565b6317bd8dd160e11b60005260046000fd5b6001146150335750565b61503957565b6307b8c74d60e51b60005260046000fd5b806000526007602052604060002054156000146150c8576006546801000000000000000081101561018d57600181016006556000600654821015611d3757600690527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01819055600654906000526007602052604060002055600190565b50600090565b9080602083519182815201916020808360051b8301019401926000915b8383106150fa57505050505090565b9091929394602080600192601f1985820301865288519060808061515d61512a855160a0865260a08601906105f8565b6001600160a01b0387870151168786015263ffffffff6040870151166040860152606086015185820360608701526105f8565b930151910152970193019301919392906150eb565b90602061031c9281815201906150ce565b6134c981518051906152176151a260608601516001600160a01b031690565b613bf86151b960608501516001600160401b031690565b936151d26080808a01519201516001600160401b031690565b90604051958694602086019889936001600160401b036080946001600160a01b0382959998949960a089019a8952166020880152166040860152606085015216910152565b519020613bf86020840151602081519101209360a060408201516020815191012091015160405161525081613bf8602082019485615172565b51902090604051958694602086019889919260a093969594919660c08401976000855260208501526040840152606083015260808201520152565b926001600160401b039261529e926156f0565b9116600052600a60205260406000209060005260205260406000205490565b607f8216906801fffffffffffffffe6001600160401b0383169260011b169180830460021490151715611eb257615342916001600160401b036153008584613646565b921660005260096020526701ffffffffffffff60406000209460071c169160036001831b921b19161792906001600160401b0316600052602052604060002090565b55565b9091607f83166801fffffffffffffffe6001600160401b0382169160011b169080820460021490151715611eb25761537d8484613646565b60048310156108bc576001600160401b036153429416600052600960205260036701ffffffffffffff60406000209660071c1693831b921b19161792906001600160401b0316600052602052604060002090565b9080602083519182815201916020808360051b8301019401926000915b8383106153fd57505050505090565b909192939460208061541b600193601f1986820301875289516105f8565b970193019301919392906153ee565b906020808351928381520192019060005b8181106154485750505090565b825163ffffffff1684526020938401939092019160010161543b565b91606092303b1561026b5761556660a0926155546000956155426040519889978897630304c3e160e51b89528260048a01526001600160401b0360808251805160648d01528260208201511660848d01528260408201511660a48d015282868201511660c48d015201511660e48a015261552361550e6154f78b61014061010460208701519201526101a48d01906105f8565b60408401518c8203606319016101248e01526105f8565b938201516001600160a01b03166101448b0152565b60808101516101648a01520151878203606319016101848901526150ce565b858103600319016024870152906153d1565b8381036003190160448501529061542a565b038183305af19081615590575b5061558557615580612227565b600391565b60029061031c6105c0565b80612581600061559f936101e3565b38615573565b6040516370a0823160e01b60208201526001600160a01b039091166024820152919291615602906155d98160448101613bf8565b84837f000000000000000000000000000000000000000000000000000000000000000092615633565b92909115614b6c5750805160208103614b5357509061562d8260208061031c95518301019101614920565b93611eb7565b93919361564060846102af565b9461564e60405196876101e3565b6084865261565c60846102af565b602087019590601f1901368737833b156156df575a908082106156ce578291038060061c900311156156bd576000918291825a9560208451940192f1905a9003923d90608482116156b4575b6000908287523e929190565b608491506156a8565b6337c3be2960e01b60005260046000fd5b632be8ca8b60e21b60005260046000fd5b63030ed58f60e21b60005260046000fd5b805192825190841561584c5761010185111580615840575b1561576f5781850194600019860195610100871161576f5786156158305761572f87611ce2565b9660009586978795885b84811061579457505050505060011901809514938461578a575b505082615780575b50501561576f5761576b91611d3c565b5190565b6309bde33960e01b60005260046000fd5b149050388061575b565b1492503880615753565b6001811b8281160361582257868a101561580d576157b660018b019a85611d3c565b51905b8c888c10156157f957506157d160018c019b86611d3c565b515b818d1161576f576157f2828f926157ec9060019661585d565b92611d3c565b5201615739565b60018d019c61580791611d3c565b516157d3565b61581b60018c019b8d611d3c565b51906157b9565b61581b600189019884611d3c565b50505050905061576b9150611d2a565b50610101821115615708565b630469ac9960e21b60005260046000fd5b8181101561586f579061031c91615874565b61031c915b906040519060208201926001845260408301526060820152606081526134c96080826101e356fea164736f6c634300081a000a49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b", + Bin: "0x610140806040523461084857616351803803809161001d828561087e565b833981019080820361014081126108485760a08112610848576040519060a082016001600160401b0381118382101761084d5760405261005c836108a1565b825260208301519261ffff84168403610848576020830193845260408101516001600160a01b0381168103610848576040840190815261009e606083016108b5565b946060850195865260806100b38185016108b5565b86820190815294609f19011261084857604051946100d086610863565b6100dc60a085016108b5565b865260c08401519463ffffffff86168603610848576020870195865261010460e086016108c9565b976040880198895261011961010087016108b5565b6060890190815261012087015190966001600160401b03821161084857018a601f820112156108485780519a6001600160401b038c1161084d578b60051b916020806040519e8f9061016d8388018361087e565b81520193820101908282116108485760208101935b828510610748575050505050331561073757600180546001600160a01b031916331790554660805284516001600160a01b0316158015610725575b8015610713575b6106f15782516001600160401b0316156107025782516001600160401b0390811660a090815286516001600160a01b0390811660c0528351811660e0528451811661010052865161ffff90811661012052604080519751909416875296519096166020860152955185169084015251831660608301525190911660808201527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b79190a182516001600160a01b0316156106f1579151600480548351865160ff60c01b90151560c01b1663ffffffff60a01b60a09290921b919091166001600160a01b039485166001600160c81b0319909316831717179091558351600580549184166001600160a01b031990921691909117905560408051918252925163ffffffff166020820152935115159184019190915290511660608201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee90608090a160005b815181101561066b576020600582901b8301810151908101516001600160401b031690600090821561065c5780516001600160a01b03161561064d57828252600860205260408220906060810151600183019361038585546108d6565b6105ee578354600160a81b600160e81b031916600160a81b1784556040518681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb990602090a15b815180159081156105c3575b506105b4578151916001600160401b0383116105a0576103f986546108d6565b601f811161055b575b50602091601f84116001146104e257926001989796949281926000805160206163318339815191529795926104d7575b5050600019600383901b1c191690881b1783555b60408101518254915160a089811b8a9003801960ff60a01b1990951693151590911b60ff60a01b169290921792909216911617815561048484610993565b506104ce6040519283926020845254888060a01b038116602085015260ff8160a01c1615156040850152888060401b039060a81c16606084015260808084015260a0830190610910565b0390a201610328565b015190503880610432565b9190601f198416878452828420935b8181106105435750926001999897959392859260008051602061633183398151915298968c951061052a575b505050811b018355610446565b015160001960f88460031b161c1916905538808061051d565b929360206001819287860151815501950193016104f1565b86835260208320601f850160051c81019160208610610596575b601f0160051c01905b81811061058b5750610402565b83815560010161057e565b9091508190610575565b634e487b7160e01b82526041600452602482fd5b6342bcdf7f60e11b8152600490fd5b905060208301206040516020810190838252602081526105e460408261087e565b51902014386103d9565b835460a81c6001600160401b0316600114158061061f575b156103cd57632105803760e11b81526004869052602490fd5b50604051610638816106318189610910565b038261087e565b60208151910120825160208401201415610606565b6342bcdf7f60e11b8252600482fd5b63c656089560e01b8252600482fd5b60405161590a9081610a278239608051816136a4015260a0518181816104700152614203015260c0518181816104c601528181612cd201528181613126015261419d015260e0518181816104f501526149e001526101005181818161052401526145c60152610120518181816104970152818161244c01528181614ad3015261563f0152f35b6342bcdf7f60e11b60005260046000fd5b63c656089560e01b60005260046000fd5b5081516001600160a01b0316156101c4565b5080516001600160a01b0316156101bd565b639b15e16f60e01b60005260046000fd5b84516001600160401b0381116108485782016080818603601f190112610848576040519061077582610863565b60208101516001600160a01b0381168103610848578252610798604082016108a1565b60208301526107a9606082016108c9565b604083015260808101516001600160401b03811161084857602091010185601f820112156108485780516001600160401b03811161084d57604051916107f9601f8301601f19166020018461087e565b81835287602083830101116108485760005b8281106108335750509181600060208096949581960101526060820152815201940193610182565b8060208092840101518282870101520161080b565b600080fd5b634e487b7160e01b600052604160045260246000fd5b608081019081106001600160401b0382111761084d57604052565b601f909101601f19168101906001600160401b0382119082101761084d57604052565b51906001600160401b038216820361084857565b51906001600160a01b038216820361084857565b5190811515820361084857565b90600182811c92168015610906575b60208310146108f057565b634e487b7160e01b600052602260045260246000fd5b91607f16916108e5565b60009291815491610920836108d6565b8083529260018116908115610976575060011461093c57505050565b60009081526020812093945091925b83831061095c575060209250010190565b60018160209294939454838587010152019101919061094b565b915050602093945060ff929192191683830152151560051b010190565b80600052600760205260406000205415600014610a20576006546801000000000000000081101561084d576001810180600655811015610a0a577ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0181905560065460009182526007602052604090912055600190565b634e487b7160e01b600052603260045260246000fd5b5060009056fe6080604052600436101561001257600080fd5b60003560e01c806304666f9c1461015757806306285c6914610152578063181f5a771461014d5780633f4b04aa146101485780635215505b146101435780635e36480c1461013e5780635e7bb0081461013957806360987c20146101345780637437ff9f1461012f57806379ba50971461012a5780637edf52f41461012557806385572ffb146101205780638da5cb5b1461011b578063c673e58414610116578063ccd37ba314610111578063de5e0b9a1461010c578063e9d68a8e14610107578063f2fde38b14610102578063f58e03fc146100fd5763f716f99f146100f857600080fd5b6118b6565b611799565b61170e565b611673565b6115d7565b611553565b6114a8565b6113c0565b61138a565b6111c4565b611144565b61109b565b611020565b610e1b565b6108b0565b61076b565b61065e565b6105ff565b61043d565b61031f565b634e487b7160e01b600052604160045260246000fd5b608081019081106001600160401b0382111761018d57604052565b61015c565b60a081019081106001600160401b0382111761018d57604052565b604081019081106001600160401b0382111761018d57604052565b606081019081106001600160401b0382111761018d57604052565b90601f801991011681019081106001600160401b0382111761018d57604052565b6040519061021360c0836101e3565b565b6040519061021360a0836101e3565b60405190610213610100836101e3565b604051906102136040836101e3565b6001600160401b03811161018d5760051b60200190565b6001600160a01b0381160361026b57565b600080fd5b600435906001600160401b038216820361026b57565b35906001600160401b038216820361026b57565b8015150361026b57565b35906102138261029a565b6001600160401b03811161018d57601f01601f191660200190565b9291926102d6826102af565b916102e460405193846101e3565b82948184528183011161026b578281602093846000960137010152565b9080601f8301121561026b5781602061031c933591016102ca565b90565b3461026b57602036600319011261026b576004356001600160401b03811161026b573660238201121561026b5780600401359061035b82610243565b9061036960405192836101e3565b8282526024602083019360051b8201019036821161026b5760248101935b82851061039957610397846119f1565b005b84356001600160401b03811161026b5782016080602319823603011261026b57604051916103c683610172565b60248201356103d48161025a565b83526103e260448301610286565b602084015260648201356103f58161029a565b60408401526084820135926001600160401b03841161026b57610422602094936024869536920101610301565b6060820152815201940193610387565b600091031261026b57565b3461026b57600036600319011261026b57610456611c9d565b5061059e60405161046681610192565b6001600160401b037f000000000000000000000000000000000000000000000000000000000000000016815261ffff7f00000000000000000000000000000000000000000000000000000000000000001660208201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660408201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660608201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660808201526040519182918291909160806001600160a01b038160a08401956001600160401b03815116855261ffff6020820151166020860152826040820151166040860152826060820151166060860152015116910152565b0390f35b604051906105b16020836101e3565b60008252565b60005b8381106105ca5750506000910152565b81810151838201526020016105ba565b906020916105f3815180928185528580860191016105b7565b601f01601f1916010190565b3461026b57600036600319011261026b5761059e604080519061062281836101e3565b601182527f4f666652616d7020312e362e302d6465760000000000000000000000000000006020830152519182916020835260208301906105da565b3461026b57600036600319011261026b5760206001600160401b03600b5416604051908152f35b906080606061031c936001600160a01b0381511684526020810151151560208501526001600160401b03604082015116604085015201519181606082015201906105da565b6040810160408252825180915260206060830193019060005b81811061074c575050506020818303910152815180825260208201916020808360051b8301019401926000915b83831061071f57505050505090565b909192939460208061073d600193601f198682030187528951610685565b97019301930191939290610710565b82516001600160401b03168552602094850194909201916001016106e3565b3461026b57600036600319011261026b5760065461078881610243565b9061079660405192836101e3565b808252601f196107a582610243565b0160005b8181106108675750506107bb81611cef565b9060005b8181106107d757505061059e604051928392836106ca565b8061080d6107f56107e9600194614084565b6001600160401b031690565b6107ff8387611d49565b906001600160401b03169052565b61084b61084661082d6108208488611d49565b516001600160401b031690565b6001600160401b03166000526008602052604060002090565b611e35565b6108558287611d49565b526108608186611d49565b50016107bf565b602090610872611cc8565b828287010152016107a9565b634e487b7160e01b600052602160045260246000fd5b6004111561089e57565b61087e565b90600482101561089e5752565b3461026b57604036600319011261026b576108c9610270565b602435906001600160401b038216820361026b576020916108e991611ed1565b6108f660405180926108a3565bf35b91908260a091031261026b5760405161091081610192565b60806109558183958035855261092860208201610286565b602086015261093960408201610286565b604086015261094a60608201610286565b606086015201610286565b910152565b35906102138261025a565b63ffffffff81160361026b57565b359061021382610965565b81601f8201121561026b5780359061099582610243565b926109a360405194856101e3565b82845260208085019360051b8301019181831161026b5760208101935b8385106109cf57505050505090565b84356001600160401b03811161026b57820160a0818503601f19011261026b57604051916109fc83610192565b60208201356001600160401b03811161026b57856020610a1e92850101610301565b83526040820135610a2e8161025a565b6020840152610a3f60608301610973565b60408401526080820135926001600160401b03841161026b5760a083610a6c886020809881980101610301565b6060840152013560808201528152019401936109c0565b9190916101408184031261026b57610a99610204565b92610aa481836108f8565b845260a08201356001600160401b03811161026b5781610ac5918401610301565b602085015260c08201356001600160401b03811161026b5781610ae9918401610301565b6040850152610afa60e0830161095a565b606085015261010082013560808501526101208201356001600160401b03811161026b57610b28920161097e565b60a0830152565b9080601f8301121561026b578135610b4681610243565b92610b5460405194856101e3565b81845260208085019260051b8201019183831161026b5760208201905b838210610b8057505050505090565b81356001600160401b03811161026b57602091610ba287848094880101610a83565b815201910190610b71565b81601f8201121561026b57803590610bc482610243565b92610bd260405194856101e3565b82845260208085019360051b8301019181831161026b5760208101935b838510610bfe57505050505090565b84356001600160401b03811161026b57820183603f8201121561026b576020810135610c2981610243565b91610c3760405193846101e3565b8183526020808085019360051b830101019186831161026b5760408201905b838210610c70575050509082525060209485019401610bef565b81356001600160401b03811161026b57602091610c948a8480809589010101610301565b815201910190610c56565b929190610cab81610243565b93610cb960405195866101e3565b602085838152019160051b810192831161026b57905b828210610cdb57505050565b8135815260209182019101610ccf565b9080601f8301121561026b5781602061031c93359101610c9f565b81601f8201121561026b57803590610d1d82610243565b92610d2b60405194856101e3565b82845260208085019360051b8301019181831161026b5760208101935b838510610d5757505050505090565b84356001600160401b03811161026b57820160a0818503601f19011261026b57610d7f610215565b91610d8c60208301610286565b835260408201356001600160401b03811161026b57856020610db092850101610b2f565b602084015260608201356001600160401b03811161026b57856020610dd792850101610bad565b60408401526080820135926001600160401b03841161026b5760a083610e04886020809881980101610ceb565b606084015201356080820152815201940193610d48565b3461026b57604036600319011261026b576004356001600160401b03811161026b57610e4b903690600401610d06565b6024356001600160401b03811161026b573660238201121561026b57806004013591610e7683610243565b91610e8460405193846101e3565b8383526024602084019460051b8201019036821161026b5760248101945b828610610eb3576103978585611f19565b85356001600160401b03811161026b5782013660438201121561026b576024810135610ede81610243565b91610eec60405193846101e3565b818352602060248185019360051b830101019036821161026b5760448101925b828410610f26575050509082525060209586019501610ea2565b83356001600160401b03811161026b576024908301016040601f19823603011261026b5760405190610f57826101ad565b6020810135825260408101356001600160401b03811161026b57602091010136601f8201121561026b57803590610f8d82610243565b91610f9b60405193846101e3565b80835260208084019160051b8301019136831161026b57602001905b828210610fd65750505091816020938480940152815201930192610f0c565b602080918335610fe581610965565b815201910190610fb7565b9181601f8401121561026b578235916001600160401b03831161026b576020808501948460051b01011161026b57565b3461026b57606036600319011261026b576004356001600160401b03811161026b57611050903690600401610a83565b6024356001600160401b03811161026b5761106f903690600401610ff0565b91604435926001600160401b03841161026b57611093610397943690600401610ff0565b939092612325565b3461026b57600036600319011261026b576110b46125fd565b5061059e6040516110c481610172565b60ff6004546001600160a01b038116835263ffffffff8160a01c16602084015260c01c16151560408201526001600160a01b036005541660608201526040519182918291909160606001600160a01b0381608084019582815116855263ffffffff6020820151166020860152604081015115156040860152015116910152565b3461026b57600036600319011261026b576000546001600160a01b03811633036111b3576001600160a01b0319600154913382841617600155166000556001600160a01b033391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b63015aa1e360e11b60005260046000fd5b3461026b57608036600319011261026b5760006040516111e381610172565b6004356111ef8161025a565b81526024356111fd81610965565b602082015260443561120e8161029a565b604082015260643561121f8161025a565b606082015261122c6134a1565b6001600160a01b038151161561137b576113758161128b6001600160a01b037fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9451166001600160a01b03166001600160a01b03196004541617600455565b60208101516004547fffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff77ffffffff000000000000000000000000000000000000000078ff0000000000000000000000000000000000000000000000006040860151151560c01b169360a01b169116171760045561133161131560608301516001600160a01b031690565b6001600160a01b03166001600160a01b03196005541617600555565b6040519182918291909160606001600160a01b0381608084019582815116855263ffffffff6020820151166020860152604081015115156040860152015116910152565b0390a180f35b6342bcdf7f60e11b8252600482fd5b3461026b57602036600319011261026b576004356001600160401b03811161026b5760a090600319903603011261026b57600080fd5b3461026b57600036600319011261026b5760206001600160a01b0360015416604051908152f35b6004359060ff8216820361026b57565b359060ff8216820361026b57565b906020808351928381520192019060005b8181106114235750505090565b82516001600160a01b0316845260209384019390920191600101611416565b9061031c9160208152606082518051602084015260ff602082015116604084015260ff604082015116828401520151151560808201526040611493602084015160c060a085015260e0840190611405565b9201519060c0601f1982850301910152611405565b3461026b57602036600319011261026b5760ff6114c36113e7565b6060604080516114d2816101c8565b6114da6125fd565b8152826020820152015216600052600260205261059e6040600020600361154260405192611507846101c8565b61151081612622565b845260405161152d81611526816002860161265b565b03826101e3565b6020850152611526604051809481930161265b565b604082015260405191829182611442565b3461026b57604036600319011261026b5761156c610270565b6001600160401b036024359116600052600a6020526040600020906000526020526020604060002054604051908152f35b9060049160441161026b57565b9181601f8401121561026b578235916001600160401b03831161026b576020838186019501011161026b57565b3461026b5760c036600319011261026b576115f13661159d565b6044356001600160401b03811161026b576116109036906004016115aa565b6064929192356001600160401b03811161026b57611632903690600401610ff0565b60843594916001600160401b03861161026b57611656610397963690600401610ff0565b94909360a43596612c8d565b90602061031c928181520190610685565b3461026b57602036600319011261026b576001600160401b03611694610270565b61169c611cc8565b5016600052600860205261059e604060002060016116fd604051926116c084610172565b6001600160401b0381546001600160a01b038116865260ff8160a01c161515602087015260a81c1660408501526115266040518094819301611d97565b606082015260405191829182611662565b3461026b57602036600319011261026b576001600160a01b036004356117338161025a565b61173b6134a1565b1633811461178857806001600160a01b031960005416176000556001600160a01b03600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278600080a3005b636d6c4ee560e11b60005260046000fd5b3461026b57606036600319011261026b576117b33661159d565b6044356001600160401b03811161026b576117d29036906004016115aa565b9182820160208382031261026b578235906001600160401b03821161026b576117fc918401610d06565b60405190602061180c81846101e3565b60008352601f19810160005b818110611840575050506103979491611830916136e5565b61183861319c565b928392613a95565b60608582018401528201611818565b9080601f8301121561026b57813561186681610243565b9261187460405194856101e3565b81845260208085019260051b82010192831161026b57602001905b82821061189c5750505090565b6020809183356118ab8161025a565b81520191019061188f565b3461026b57602036600319011261026b576004356001600160401b03811161026b573660238201121561026b578060040135906118f282610243565b9061190060405192836101e3565b8282526024602083019360051b8201019036821161026b5760248101935b82851061192e57610397846131b8565b84356001600160401b03811161026b57820160c0602319823603011261026b57611956610204565b916024820135835261196a604483016113f7565b602084015261197b606483016113f7565b604084015261198c608483016102a4565b606084015260a48201356001600160401b03811161026b576119b4906024369185010161184f565b608084015260c4820135926001600160401b03841161026b576119e160209493602486953692010161184f565b60a082015281520194019361191e565b6119f96134a1565b60005b8151811015611c9957611a0f8183611d49565b5190611a2560208301516001600160401b031690565b916001600160401b038316908115611c8857611a5a611a4e611a4e83516001600160a01b031690565b6001600160a01b031690565b15611bef57611a7c846001600160401b03166000526008602052604060002090565b906060810151916001810195611a928754611d5d565b611c1657611b057ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb991611aeb84750100000000000000000000000000000000000000000067ffffffffffffffff60a81b19825416179055565b6040516001600160401b0390911681529081906020820190565b0390a15b82518015908115611c00575b50611bef57611bd0611bb4611be693611b517f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b9660019a613543565b611ba7611b616040830151151590565b85547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016178555565b516001600160a01b031690565b82906001600160a01b03166001600160a01b0319825416179055565b611bd9846150ac565b5060405191829182613614565b0390a2016119fc565b6342bcdf7f60e11b60005260046000fd5b90506020840120611c0f6134c6565b1438611b15565b60016001600160401b03611c3584546001600160401b039060a81c1690565b16141580611c69575b611c485750611b09565b632105803760e11b6000526001600160401b031660045260246000fd5b6000fd5b50611c7387611e1a565b60208151910120845160208601201415611c3e565b63c656089560e01b60005260046000fd5b5050565b60405190611caa82610192565b60006080838281528260208201528260408201528260608201520152565b60405190611cd582610172565b606080836000815260006020820152600060408201520152565b90611cf982610243565b611d0660405191826101e3565b8281528092611d17601f1991610243565b0190602036910137565b634e487b7160e01b600052603260045260246000fd5b805115611d445760200190565b611d21565b8051821015611d445760209160051b010190565b90600182811c92168015611d8d575b6020831014611d7757565b634e487b7160e01b600052602260045260246000fd5b91607f1691611d6c565b60009291815491611da783611d5d565b8083529260018116908115611dfd5750600114611dc357505050565b60009081526020812093945091925b838310611de3575060209250010190565b600181602092949394548385870101520191019190611dd2565b915050602093945060ff929192191683830152151560051b010190565b90610213611e2e9260405193848092611d97565b03836101e3565b9060016060604051611e4681610172565b611e8f81956001600160401b0381546001600160a01b038116855260ff8160a01c161515602086015260a81c166040840152611e886040518096819301611d97565b03846101e3565b0152565b634e487b7160e01b600052601160045260246000fd5b908160051b9180830460201490151715611ebf57565b611e93565b91908203918211611ebf57565b611edd82607f9261365e565b9116906801fffffffffffffffe6001600160401b0383169260011b169180830460021490151715611ebf576003911c16600481101561089e5790565b611f216136a2565b8051825181036121185760005b818110611f4157505090610213916136e5565b611f4b8184611d49565b516020810190815151611f5e8488611d49565b5192835182036121185790916000925b808410611f82575050505050600101611f2e565b91949398611f94848b98939598611d49565b515198611fa2888851611d49565b5199806120cf575b5060a08a01988b6020611fc08b8d515193611d49565b51015151036120925760005b8a515181101561207d57612008611fff611ff58f6020611fed8f8793611d49565b510151611d49565b5163ffffffff1690565b63ffffffff1690565b8b81612019575b5050600101611fcc565b611fff604061202c856120389451611d49565b51015163ffffffff1690565b9081811061204757508b61200f565b8d51516040516348e617b360e01b81526004810191909152602481019390935260448301919091526064820152608490fd5b0390fd5b50985098509893949095600101929091611f6e565b611c658b516120ad606082519201516001600160401b031690565b6370a193fd60e01b6000526004919091526001600160401b0316602452604490565b60808b0151811015611faa57611c65908b6120f188516001600160401b031690565b905151633a98d46360e11b6000526001600160401b03909116600452602452604452606490565b6320f8fd5960e21b60005260046000fd5b60405190612136826101ad565b60006020838281520152565b604051906121516020836101e3565b600080835282815b82811061216557505050565b602090612170612129565b82828501015201612159565b805182526001600160401b03602082015116602083015260806121c36121b1604084015160a0604087015260a08601906105da565b606084015185820360608701526105da565b9101519160808183039101526020808351928381520192019060005b8181106121ec5750505090565b825180516001600160a01b0316855260209081015181860152604090940193909201916001016121df565b90602061031c92818152019061217c565b6040513d6000823e3d90fd5b3d1561225f573d90612245826102af565b9161225360405193846101e3565b82523d6000602084013e565b606090565b90602061031c9281815201906105da565b909160608284031261026b57815161228c8161029a565b9260208301516001600160401b03811161026b5783019080601f8301121561026b578151916122ba836102af565b916122c860405193846101e3565b8383526020848301011161026b576040926122e991602080850191016105b7565b92015190565b9293606092959461ffff6123136001600160a01b039460808852608088019061217c565b97166020860152604085015216910152565b93919290933033036125ec5761233a90613798565b92612343612142565b9460a085015180516125a5575b505050505080519161236e602084519401516001600160401b031690565b90602083015191604084019261239b845192612388610215565b9788526001600160401b03166020880152565b6040860152606085015260808401526001600160a01b036123c46005546001600160a01b031690565b1680612528575b505151158061251c575b8015612506575b80156124dd575b611c9957612475918161241a611a4e61240d61082d602060009751016001600160401b0390511690565b546001600160a01b031690565b9083612435606060808401519301516001600160a01b031690565b604051633cf9798360e01b815296879586948593917f000000000000000000000000000000000000000000000000000000000000000090600486016122ef565b03925af19081156124d8576000906000926124b1575b50156124945750565b6040516302a35ba360e21b81529081906120799060048301612264565b90506124d091503d806000833e6124c881836101e3565b810190612275565b50903861248b565b612228565b506125016124fd6124f860608401516001600160a01b031690565b613956565b1590565b6123e3565b5060608101516001600160a01b03163b156123dc565b506080810151156123d5565b803b1561026b57600060405180926308d450a160e01b82528183816125508a60048301612217565b03925af1908161258a575b506125845761207961256b612234565b6040516309c2532560e01b815291829160048301612264565b386123cb565b80612599600061259f936101e3565b80610432565b3861255b565b85965060206125e19601516125c460608901516001600160a01b031690565b906125db60208a51016001600160401b0390511690565b9261383d565b903880808080612350565b6306e34e6560e31b60005260046000fd5b6040519061260a82610172565b60006060838281528260208201528260408201520152565b9060405161262f81610172565b606060ff600183958054855201548181166020850152818160081c16604085015260101c161515910152565b906020825491828152019160005260206000209060005b81811061267f5750505090565b82546001600160a01b0316845260209093019260019283019201612672565b90610213611e2e926040519384809261265b565b35906001600160e01b038216820361026b57565b81601f8201121561026b578035906126dd82610243565b926126eb60405194856101e3565b82845260208085019360061b8301019181831161026b57602001925b828410612715575050505090565b60408483031261026b576020604091825161272f816101ad565b61273887610286565b81526127458388016126b2565b83820152815201930192612707565b81601f8201121561026b5780359061276b82610243565b9261277960405194856101e3565b82845260208085019360051b8301019181831161026b5760208101935b8385106127a557505050505090565b84356001600160401b03811161026b57820160a0818503601f19011261026b57604051916127d283610192565b6127de60208301610286565b83526040820135926001600160401b03841161026b5760a083612808886020809881980101610301565b8584015261281860608201610286565b604084015261282960808201610286565b606084015201356080820152815201940193612796565b81601f8201121561026b5780359061285782610243565b9261286560405194856101e3565b82845260208085019360061b8301019181831161026b57602001925b82841061288f575050505090565b60408483031261026b57602060409182516128a9816101ad565b863581528287013583820152815201930192612881565b60208183031261026b578035906001600160401b03821161026b570160608183031261026b57604051916128f3836101c8565b81356001600160401b03811161026b57820160408183031261026b576040519061291c826101ad565b80356001600160401b03811161026b57810183601f8201121561026b57803561294481610243565b9161295260405193846101e3565b81835260208084019260061b8201019086821161026b57602001915b8183106129ea5750505082526020810135906001600160401b03821161026b5761299a918491016126c6565b6020820152835260208201356001600160401b03811161026b57816129c0918401612754565b602084015260408201356001600160401b03811161026b576129e29201612840565b604082015290565b60408388031261026b5760206040918251612a04816101ad565b8535612a0f8161025a565b8152612a1c8387016126b2565b8382015281520192019161296e565b9080602083519182815201916020808360051b8301019401926000915b838310612a5757505050505090565b9091929394602080600192601f198582030186528851906001600160401b038251168152608080612a958585015160a08786015260a08501906105da565b936001600160401b0360408201511660408501526001600160401b036060820151166060850152015191015297019301930191939290612a48565b916001600160a01b03612af192168352606060208401526060830190612a2b565b9060408183039101526020808351928381520192019060005b818110612b175750505090565b8251805185526020908101518186015260409094019390920191600101612b0a565b906020808351928381520192019060005b818110612b575750505090565b825180516001600160401b031685526020908101516001600160e01b03168186015260409094019390920191600101612b4a565b9190604081019083519160408252825180915260206060830193019060005b818110612bcb57505050602061031c93940151906020818403910152612b39565b825180516001600160a01b031686526020908101516001600160e01b03168187015260409095019490920191600101612baa565b90602061031c928181520190612b8b565b9081602091031261026b575161031c8161029a565b9091612c3c61031c936040845260408401906105da565b916020818403910152611d97565b6001600160401b036001911601906001600160401b038211611ebf57565b9091612c7f61031c93604084526040840190612a2b565b916020818403910152612b8b565b929693959190979497612ca2828201826128c0565b98612cb66124fd60045460ff9060c01c1690565b61310a575b895180515115908115916130fb575b50613022575b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316999860208a019860005b8a518051821015612fc05781612d1991611d49565b518d612d2c82516001600160401b031690565b604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b1660048201529091602090829060249082905afa9081156124d857600091612f92575b50612f7557612d7b906139a4565b60208201805160208151910120906001830191612d9783611e1a565b6020815191012003612f58575050805460408301516001600160401b039081169160a81c168114801590612f30575b612ede57506080820151908115612ecd57612e1782612e08612def86516001600160401b031690565b6001600160401b0316600052600a602052604060002090565b90600052602052604060002090565b54612e99578291612e7d612e9292612e44612e3f60606001999801516001600160401b031690565b612c4a565b67ffffffffffffffff60a81b197cffffffffffffffff00000000000000000000000000000000000000000083549260a81b169116179055565b612e08612def4294516001600160401b031690565b5501612d04565b50612eae611c6592516001600160401b031690565b6332cf0cbf60e01b6000526001600160401b0316600452602452604490565b63504570e360e01b60005260046000fd5b82611c6591612f086060612ef984516001600160401b031690565b9301516001600160401b031690565b636af0786b60e11b6000526001600160401b0392831660045290821660245216604452606490565b50612f486107e960608501516001600160401b031690565b6001600160401b03821611612dc6565b5161207960405192839263b80d8fa960e01b845260048401612c25565b637edeb53960e11b6000526001600160401b031660045260246000fd5b612fb3915060203d8111612fb9575b612fab81836101e3565b810190612c10565b38612d6d565b503d612fa1565b505061301c9496989b507f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e46102139b613014949597999b5190519061300a60405192839283612c68565b0390a13691610c9f565b943691610c9f565b93613d73565b613037602086015b356001600160401b031690565b600b546001600160401b03828116911610156130df5761306d906001600160401b03166001600160401b0319600b541617600b55565b613085611a4e611a4e6004546001600160a01b031690565b8a5190803b1561026b57604051633937306f60e01b81529160009183918290849082906130b59060048301612bff565b03925af180156124d8576130ca575b50612cd0565b8061259960006130d9936101e3565b386130c4565b5060208a015151612cd057632261116760e01b60005260046000fd5b60209150015151151538612cca565b60208a0151805161311c575b50612cbb565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169060408c0151823b1561026b57604051633854844f60e11b815292600092849283918291613178913060048501612ad0565b03915afa80156124d8571561311657806125996000613196936101e3565b38613116565b604051906131ab6020836101e3565b6000808352366020840137565b6131c06134a1565b60005b8151811015611c99576131d68183611d49565b51906040820160ff6131e9825160ff1690565b161561348b57602083015160ff169261320f8460ff166000526002602052604060002090565b916001830191825461322a6132248260ff1690565b60ff1690565b613450575061325761323f6060830151151590565b845462ff0000191690151560101b62ff000016178455565b60a081019182516101008151116133f85780511561343a576003860161328561327f8261269e565b8a614e5a565b6060840151613315575b947fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547946002946132f16132e161330f9a966132da8760019f9c6132d56133079a8f614fbb565b613f87565b5160ff1690565b845460ff191660ff821617909455565b519081855551906040519586950190888661400d565b0390a161503d565b016131c3565b9794600287939597019661333161332b8961269e565b88614e5a565b6080850151946101008651116134245785516133596132246133548a5160ff1690565b613f73565b101561340e5785518451116133f8576132f16132e17fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547986132da8760019f6132d561330f9f9a8f6133e060029f6133da6133079f8f906132d584926133bf845160ff1690565b908054909161ff001990911660089190911b61ff0016179055565b82614eee565b505050979c9f50975050969a5050509450945061328f565b631b3fab5160e11b600052600160045260246000fd5b631b3fab5160e11b600052600360045260246000fd5b631b3fab5160e11b600052600260045260246000fd5b631b3fab5160e11b600052600560045260246000fd5b60101c60ff1661346b6134666060840151151590565b151590565b90151514613257576321fd80df60e21b60005260ff861660045260246000fd5b631b3fab5160e11b600090815260045260246000fd5b6001600160a01b036001541633036134b557565b6315ae3a6f60e11b60005260046000fd5b604051602081019060008252602081526134e16040826101e3565b51902090565b8181106134f2575050565b600081556001016134e7565b9190601f811161350d57505050565b610213926000526020600020906020601f840160051c83019310613539575b601f0160051c01906134e7565b909150819061352c565b91909182516001600160401b03811161018d5761356a816135648454611d5d565b846134fe565b6020601f82116001146135ab57819061359c9394956000926135a0575b50508160011b916000199060031b1c19161790565b9055565b015190503880613587565b601f198216906135c084600052602060002090565b9160005b8181106135fc575095836001959697106135e3575b505050811b019055565b015160001960f88460031b161c191690553880806135d9565b9192602060018192868b0151815501940192016135c4565b90600160a061031c93602081526001600160401b0384546001600160a01b038116602084015260ff81851c161515604084015260a81c166060820152608080820152019101611d97565b906001600160401b0361369e921660005260096020526701ffffffffffffff60406000209160071c166001600160401b0316600052602052604060002090565b5490565b7f00000000000000000000000000000000000000000000000000000000000000004681036136cd5750565b630f01ce8560e01b6000526004524660245260446000fd5b91909180511561378757825115926020916040519261370481856101e3565b60008452601f19810160005b8181106137635750505060005b815181101561375b578061374461373660019385611d49565b51881561374a57869061414c565b0161371d565b6137548387611d49565b519061414c565b505050509050565b8290604051613771816101ad565b6000815260608382015282828901015201613710565b63c2e5347d60e01b60005260046000fd5b60405160c081018181106001600160401b0382111761018d5760609160a0916040526137c2611c9d565b815282602082015282604082015260008382015260006080820152015290565b9190811015611d445760051b0190565b3561031c81610965565b9190811015611d445760051b81013590601e198136030182121561026b5701908135916001600160401b03831161026b57602001823603811361026b579190565b9092949193979681519661385088610243565b9761385e604051998a6101e3565b80895261386d601f1991610243565b0160005b81811061393f57505060005b835181101561393257806138c48c8a8a8a6138be6138b7878d6138b0828f8f9d8f9e60019f816138e0575b505050611d49565b51976137fc565b36916102ca565b93614991565b6138ce828c611d49565b526138d9818b611d49565b500161387d565b63ffffffff6138f86138f38585856137e2565b6137f2565b16156138a8576139289261390f926138f3926137e2565b604061391b8585611d49565b51019063ffffffff169052565b8f8f9083916138a8565b5096985050505050505050565b60209061394a612129565b82828d01015201613871565b6139676385572ffb60e01b82614cf4565b9081613981575b81613977575090565b61031c9150614cc6565b905061398c81614c4b565b159061396e565b61396763aff2afbf60e01b82614cf4565b6001600160401b031680600052600860205260406000209060ff825460a01c16156139cd575090565b63ed053c5960e01b60005260045260246000fd5b6084019081608411611ebf57565b60a001908160a011611ebf57565b91908201809211611ebf57565b6003111561089e57565b600382101561089e5752565b90610213604051613a30816101ad565b602060ff829554818116845260081c169101613a14565b8054821015611d445760005260206000200190600090565b60ff60019116019060ff8211611ebf57565b60ff601b9116019060ff8211611ebf57565b90606092604091835260208301370190565b6001600052600260205293613ac97fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0612622565b93853594613ad6856139e1565b6060820190613ae58251151590565b613d45575b803603613d2d57508151878103613d145750613b046136a2565b60016000526003602052613b53613b4e7fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c5b336001600160a01b0316600052602052604060002090565b613a20565b60026020820151613b6381613a0a565b613b6c81613a0a565b149081613cac575b5015613c9b5751613bd2575b50505050507f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef090613bb661302a60019460200190565b604080519283526001600160401b0391909116602083015290a2565b613bf3613224613bee602085969799989a955194015160ff1690565b613a5f565b03613c8a578151835103613c7957613c716000613bb69461302a94613c3d7f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef09960019b36916102ca565b60208151910120604051613c6881613c5a89602083019586613a83565b03601f1981018352826101e3565b5190208a614d24565b948394613b80565b63a75d88af60e01b60005260046000fd5b6371253a2560e01b60005260046000fd5b631b41e11d60e31b60005260046000fd5b60016000526002602052613d0c9150611a4e90613cf990613cf360037fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e05b01915160ff1690565b90613a47565b90546001600160a01b039160031b1c1690565b331438613b74565b6324f7d61360e21b600052600452602487905260446000fd5b638e1192e160e01b6000526004523660245260446000fd5b613d6e90613d68613d5e613d598751611ea9565b6139ef565b613d688851611ea9565b906139fd565b613aea565b60008052600260205294909390929091613dac7fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b612622565b94863595613db9836139e1565b6060820190613dc88251151590565b613f50575b803603613d2d57508151888103613f375750613de76136a2565b600080526003602052613e1c613b4e7f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff613b36565b60026020820151613e2c81613a0a565b613e3581613a0a565b149081613eee575b5015613c9b5751613e80575b5050505050507f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef090613bb661302a60009460200190565b613e9c613224613bee602087989a999b96975194015160ff1690565b03613c8a578351865103613c79576000967f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef096613bb695613c3d613ee59461302a9736916102ca565b94839438613e49565b600080526002602052613f2f9150611a4e90613cf990613cf360037fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b613cea565b331438613e3d565b6324f7d61360e21b600052600452602488905260446000fd5b613f6e90613d68613f64613d598951611ea9565b613d688a51611ea9565b613dcd565b60ff166003029060ff8216918203611ebf57565b8151916001600160401b03831161018d5768010000000000000000831161018d576020908254848455808510613ff0575b500190600052602060002060005b838110613fd35750505050565b60019060206001600160a01b038551169401938184015501613fc6565b6140079084600052858460002091820191016134e7565b38613fb8565b95949392909160ff61403293168752602087015260a0604087015260a086019061265b565b84810360608601526020808351928381520192019060005b818110614065575050509060806102139294019060ff169052565b82516001600160a01b031684526020938401939092019160010161404a565b600654811015611d445760066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015490565b6001600160401b0361031c94938160609416835216602082015281604082015201906105da565b60409061031c9392815281602082015201906105da565b9291906001600160401b0390816064951660045216602452600481101561089e57604452565b94939261413660609361414793885260208801906108a3565b6080604087015260808601906105da565b930152565b9061415e82516001600160401b031690565b8151604051632cbc26bb60e01b815267ffffffffffffffff60801b608084901b1660048201529015159391906001600160401b038216906020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156124d85760009161487a575b50614838576020830191825151948515614808576040850180515187036147f75761420087611cef565b957f00000000000000000000000000000000000000000000000000000000000000006142366001614230876139a4565b01611e1a565b6020815191012060405161429681613c5a6020820194868b876001600160401b036060929594938160808401977f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f85521660208401521660408201520152565b519020906001600160401b031660005b8a811061475f5750505080608060606142c69301519101519088866152ed565b9788156147415760005b8881106142e35750505050505050505050565b5a6142ef828951611d49565b51805160600151614309906001600160401b031688611ed1565b61431281610894565b8015908d828315938461472e575b156146eb576060881561466e5750614347602061433d898d611d49565b5101519242611ec4565b60045461435c9060a01c63ffffffff16611fff565b10801561465b575b1561463d57614373878b611d49565b5151614627575b845160800151614392906001600160401b03166107e9565b61456f575b506143a3868951611d49565b5160a08501515181510361453357936144089695938c938f966143e88e958c926143e26143dc60608951016001600160401b0390511690565b8961531f565b866154c6565b9a90809661440260608851016001600160401b0390511690565b906153a7565b6144e1575b505061441882610894565b60028203614499575b60019661448f7f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b936001600160401b039351926144806144778b61446f60608801516001600160401b031690565b96519b611d49565b51985a90611ec4565b9160405195869516988561411d565b0390a45b016142d0565b915091939492506144a982610894565b600382036144bd578b929493918a91614421565b51606001516349362d1f60e11b600052611c6591906001600160401b0316896140f7565b6144ea84610894565b6003840361440d579092949550614502919350610894565b614512578b92918a91388061440d565b5151604051632b11b8d960e01b8152908190612079908790600484016140e0565b611c658b61454d60608851016001600160401b0390511690565b631cfe6d8b60e01b6000526001600160401b0391821660045216602452604490565b61457883610894565b614583575b38614397565b8351608001516001600160401b0316602080860151918c6145b860405194859384936370701e5760e11b8552600485016140b9565b038160006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156124d857600091614609575b5061457d575050505050600190614493565b614621915060203d8111612fb957612fab81836101e3565b386145f7565b614631878b611d49565b5151608086015261437a565b6354e7e43160e11b6000526001600160401b038b1660045260246000fd5b5061466583610894565b60038314614364565b91508361467a84610894565b1561437a575060019594506146e392506146c191507f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe651209351016001600160401b0390511690565b604080516001600160401b03808c168252909216602083015290918291820190565b0390a1614493565b5050505060019291506146e36146c160607f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c9351016001600160401b0390511690565b5061473883610894565b60038314614320565b633ee8bd3f60e11b6000526001600160401b03841660045260246000fd5b61476a818a51611d49565b518051604001516001600160401b03168381036147da57508051602001516001600160401b03168981036147b75750906147a6846001936151e5565b6147b0828d611d49565b52016142a6565b636c95f1eb60e01b6000526001600160401b03808a166004521660245260446000fd5b631c21951160e11b6000526001600160401b031660045260246000fd5b6357e0e08360e01b60005260046000fd5b611c6561481c86516001600160401b031690565b63676cf24b60e11b6000526001600160401b0316600452602490565b5092915050612f75576040516001600160401b039190911681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d89493390602090a1565b614893915060203d602011612fb957612fab81836101e3565b386141d6565b9081602091031261026b575161031c8161025a565b9061031c916020815260e061494c6149376148d7855161010060208701526101208601906105da565b60208601516001600160401b0316604086015260408601516001600160a01b0316606086015260608601516080860152614921608087015160a08701906001600160a01b03169052565b60a0860151858203601f190160c08701526105da565b60c0850151848203601f1901848601526105da565b92015190610100601f19828503019101526105da565b6040906001600160a01b0361031c949316815281602082015201906105da565b9081602091031261026b575190565b9193929361499d612129565b5060208301516001600160a01b031660405163bbe4f6db60e01b81526001600160a01b038216600482015290959092602084806024810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9384156124d857600094614c1a575b506001600160a01b0384169586158015614c08575b614bea57614acf614af892613c5a92614a53614a4c611fff60408c015163ffffffff1690565b8c89615607565b9690996080810151614a816060835193015193614a6e610224565b9687526001600160401b03166020870152565b6001600160a01b038a16604086015260608501526001600160a01b038d16608085015260a084015260c083015260e0820152604051633907753760e01b6020820152928391602483016148ae565b82857f000000000000000000000000000000000000000000000000000000000000000092615695565b94909115614bce5750805160208103614bb5575090614b21826020808a95518301019101614982565b956001600160a01b03841603614b59575b5050505050614b51614b42610234565b6001600160a01b039093168352565b602082015290565b614b6c93614b6691611ec4565b91615607565b50908082108015614ba2575b614b8457808481614b32565b63a966e21f60e01b6000908152600493909352602452604452606490fd5b5082614bae8284611ec4565b1415614b78565b631e3be00960e21b600052602060045260245260446000fd5b612079604051928392634ff17cad60e11b845260048401614962565b63ae9b4ce960e01b6000526001600160a01b03851660045260246000fd5b50614c156124fd86613993565b614a26565b614c3d91945060203d602011614c44575b614c3581836101e3565b810190614899565b9238614a11565b503d614c2b565b60405160208101916301ffc9a760e01b835263ffffffff60e01b602483015260248252614c796044836101e3565b6179185a10614cb5576020926000925191617530fa6000513d82614ca9575b5081614ca2575090565b9050151590565b60201115915038614c98565b63753fa58960e11b60005260046000fd5b60405160208101916301ffc9a760e01b83526301ffc9a760e01b602483015260248252614c796044836101e3565b6040519060208201926301ffc9a760e01b845263ffffffff60e01b16602483015260248252614c796044836101e3565b919390926000948051946000965b868810614d43575050505050505050565b6020881015611d445760206000614d5b878b1a613a71565b614d658b87611d49565b5190614d9c614d748d8a611d49565b5160405193849389859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156124d857614de2613b4e600051614dca8960ff166000526003602052604060002090565b906001600160a01b0316600052602052604060002090565b9060016020830151614df381613a0a565b614dfc81613a0a565b03614e4957614e19614e0f835160ff1690565b60ff600191161b90565b8116614e3857614e2f614e0f6001935160ff1690565b17970196614d32565b633d9ef1f160e21b60005260046000fd5b636518c33d60e11b60005260046000fd5b91909160005b8351811015614eb35760019060ff831660005260036020526000614eac604082206001600160a01b03614e93858a611d49565b51166001600160a01b0316600052602052604060002090565b5501614e60565b50509050565b8151815460ff191660ff919091161781559060200151600381101561089e57815461ff00191660089190911b61ff0016179055565b919060005b8151811015614eb357614f09611ba78284611d49565b90614f32614f2883614dca8860ff166000526003602052604060002090565b5460081c60ff1690565b614f3b81613a0a565b614fa6576001600160a01b03821615614f9557614f8f600192614f8a614f5f610234565b60ff8516815291614f738660208501613a14565b614dca8960ff166000526003602052604060002090565b614eb9565b01614ef3565b63d6c62c9b60e01b60005260046000fd5b631b3fab5160e11b6000526004805260246000fd5b919060005b8151811015614eb357614fd6611ba78284611d49565b90614ff5614f2883614dca8860ff166000526003602052604060002090565b614ffe81613a0a565b614fa6576001600160a01b03821615614f9557615037600192614f8a615022610234565b60ff8516815291614f73600260208501613a14565b01614fc0565b60ff1680600052600260205260ff60016040600020015460101c1690801560001461508b57501561507a576001600160401b0319600b5416600b55565b6317bd8dd160e11b60005260046000fd5b6001146150955750565b61509b57565b6307b8c74d60e51b60005260046000fd5b8060005260076020526040600020541560001461512a576006546801000000000000000081101561018d57600181016006556000600654821015611d4457600690527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01819055600654906000526007602052604060002055600190565b50600090565b9080602083519182815201916020808360051b8301019401926000915b83831061515c57505050505090565b9091929394602080600192601f198582030186528851906080806151bf61518c855160a0865260a08601906105da565b6001600160a01b0387870151168786015263ffffffff6040870151166040860152606086015185820360608701526105da565b9301519101529701930193019193929061514d565b90602061031c928181520190615130565b6134e1815180519061527961520460608601516001600160a01b031690565b613c5a61521b60608501516001600160401b031690565b936152346080808a01519201516001600160401b031690565b90604051958694602086019889936001600160401b036080946001600160a01b0382959998949960a089019a8952166020880152166040860152606085015216910152565b519020613c5a6020840151602081519101209360a06040820151602081519101209101516040516152b281613c5a6020820194856151d4565b51902090604051958694602086019889919260a093969594919660c08401976000855260208501526040840152606083015260808201520152565b926001600160401b039261530092615752565b9116600052600a60205260406000209060005260205260406000205490565b607f8216906801fffffffffffffffe6001600160401b0383169260011b169180830460021490151715611ebf576153a4916001600160401b03615362858461365e565b921660005260096020526701ffffffffffffff60406000209460071c169160036001831b921b19161792906001600160401b0316600052602052604060002090565b55565b9091607f83166801fffffffffffffffe6001600160401b0382169160011b169080820460021490151715611ebf576153df848461365e565b600483101561089e576001600160401b036153a49416600052600960205260036701ffffffffffffff60406000209660071c1693831b921b19161792906001600160401b0316600052602052604060002090565b9080602083519182815201916020808360051b8301019401926000915b83831061545f57505050505090565b909192939460208061547d600193601f1986820301875289516105da565b97019301930191939290615450565b906020808351928381520192019060005b8181106154aa5750505090565b825163ffffffff1684526020938401939092019160010161549d565b91606092303b1561026b576155c860a0926155b66000956155a46040519889978897630304c3e160e51b89528260048a01526001600160401b0360808251805160648d01528260208201511660848d01528260408201511660a48d015282868201511660c48d015201511660e48a01526155856155706155598b61014061010460208701519201526101a48d01906105da565b60408401518c8203606319016101248e01526105da565b938201516001600160a01b03166101448b0152565b60808101516101648a0152015187820360631901610184890152615130565b85810360031901602487015290615433565b8381036003190160448501529061548c565b038183305af190816155f2575b506155e7576155e2612234565b600391565b60029061031c6105a2565b806125996000615601936101e3565b386155d5565b6040516370a0823160e01b60208201526001600160a01b0390911660248201529192916156649061563b8160448101613c5a565b84837f000000000000000000000000000000000000000000000000000000000000000092615695565b92909115614bce5750805160208103614bb557509061568f8260208061031c95518301019101614982565b93611ec4565b9391936156a260846102af565b946156b060405196876101e3565b608486526156be60846102af565b602087019590601f1901368737833b15615741575a90808210615730578291038060061c9003111561571f576000918291825a9560208451940192f1905a9003923d9060848211615716575b6000908287523e929190565b6084915061570a565b6337c3be2960e01b60005260046000fd5b632be8ca8b60e21b60005260046000fd5b63030ed58f60e21b60005260046000fd5b80519282519084156158ae57610101851115806158a2575b156157d1578185019460001986019561010087116157d15786156158925761579187611cef565b9660009586978795885b8481106157f65750505050506001190180951493846157ec575b5050826157e2575b5050156157d1576157cd91611d49565b5190565b6309bde33960e01b60005260046000fd5b14905038806157bd565b14925038806157b5565b6001811b8281160361588457868a101561586f5761581860018b019a85611d49565b51905b8c888c101561585b575061583360018c019b86611d49565b515b818d116157d157615854828f9261584e906001966158bf565b92611d49565b520161579b565b60018d019c61586991611d49565b51615835565b61587d60018c019b8d611d49565b519061581b565b61587d600189019884611d49565b5050505090506157cd9150611d37565b5061010182111561576a565b630469ac9960e21b60005260046000fd5b818110156158d1579061031c916158d6565b61031c915b906040519060208201926001845260408301526060820152606081526134e16080826101e356fea164736f6c634300081a000a49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b", } var OffRampABI = OffRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/onramp/onramp.go b/core/gethwrappers/ccip/generated/onramp/onramp.go index 9e00fb7a88b..b864e2c76d6 100644 --- a/core/gethwrappers/ccip/generated/onramp/onramp.go +++ b/core/gethwrappers/ccip/generated/onramp/onramp.go @@ -101,7 +101,7 @@ type OnRampStaticConfig struct { var OnRampMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"internalType\":\"structOnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"structOnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowlistAdmin\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"allowlistEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyAllowlistUpdates\",\"inputs\":[{\"name\":\"allowlistConfigArgsItems\",\"type\":\"tuple[]\",\"internalType\":\"structOnRamp.AllowlistConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"allowlistEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"addedAllowlistedSenders\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"removedAllowlistedSenders\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyDestChainConfigUpdates\",\"inputs\":[{\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contractIRouter\"},{\"name\":\"allowlistEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forwardFromRouter\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structClient.EVM2AnyMessage\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structClient.EVMTokenAmount[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAllowedSendersList\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"configuredAddresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDestChainConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"allowlistEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"structOnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowlistAdmin\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getExpectedNextSequenceNumber\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structClient.EVM2AnyMessage\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structClient.EVMTokenAmount[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPoolBySourceToken\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sourceToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPoolV1\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedTokens\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"structOnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowlistAdmin\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AllowListAdminSet\",\"inputs\":[{\"name\":\"allowlistAdmin\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllowListSendersAdded\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"senders\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllowListSendersRemoved\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"senders\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CCIPMessageSent\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"message\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"components\":[{\"name\":\"header\",\"type\":\"tuple\",\"internalType\":\"structInternal.RampMessageHeader\",\"components\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"feeValueJuels\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"components\":[{\"name\":\"sourcePoolAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destExecData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigSet\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contractIRMNRemote\"},{\"name\":\"nonceManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageInterceptor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowlistAdmin\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DestChainConfigSet\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sequenceNumber\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIRouter\"},{\"name\":\"allowlistEnabled\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"feeAggregator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CannotSendZeroTokens\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAllowListRequest\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidConfig\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDestChainConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MustBeCalledByRouter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwnerOrAllowlistAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RouterMustSetOriginalSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SenderNotAllowed\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnsupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]}]", - Bin: "0x6101006040523461055f57613c018038038061001a81610599565b92833981019080820390610140821261055f576080821261055f5761003d61057a565b90610047816105be565b82526020810151906001600160a01b038216820361055f5760208301918252610072604082016105d2565b926040810193845260a0610088606084016105d2565b6060830190815295607f19011261055f5760405160a081016001600160401b03811182821017610564576040526100c1608084016105d2565b81526100cf60a084016105e6565b602082019081526100e260c085016105d2565b91604081019283526100f660e086016105d2565b936060820194855261010b61010087016105d2565b6080830190815261012087015190966001600160401b03821161055f57018a601f8201121561055f578051906001600160401b0382116105645760209b8c6060610159828660051b01610599565b9e8f8681520194028301019181831161055f57602001925b8284106104f1575050505033156104e057600180546001600160a01b0319163317905580516001600160401b03161580156104ce575b80156104bc575b80156104aa575b61047d57516001600160401b0316608081905295516001600160a01b0390811660a08190529751811660c08190529851811660e08190528251909116158015610498575b801561048e575b61047d57815160028054855160ff60a01b90151560a01b166001600160a01b039384166001600160a81b0319909216919091171790558451600380549183166001600160a01b03199283161790558651600480549184169183169190911790558751600580549190931691161790557fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f19861012098606061029f61057a565b8a8152602080820193845260408083019586529290910194855281519a8b5291516001600160a01b03908116928b019290925291518116918901919091529051811660608801529051811660808701529051151560a08601529051811660c08501529051811660e0840152905116610100820152a16000905b805182101561040b5761032b82826105f3565b51916001600160401b0361033f82846105f3565b5151169283156103f65760008481526006602090815260409182902081840151815494840151600160401b600160e81b03198616604883901b600160481b600160e81b031617901515851b68ff000000000000000016179182905583516001600160401b0390951685526001600160a01b031691840191909152811c60ff1615159082015291926001927fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef590606090a20190610318565b8363c35aa79d60e01b60005260045260246000fd5b6040516135e3908161061e82396080518181816103e301528181610b39015281816120c8015261286b015260a0518181816121010152818161261e01526128a4015260c051818181610efc0152818161213d01526128e0015260e0518181816121790152818161291c0152612edd0152f35b6306b7c75960e31b60005260046000fd5b5082511515610200565b5084516001600160a01b0316156101f9565b5088516001600160a01b0316156101b5565b5087516001600160a01b0316156101ae565b5086516001600160a01b0316156101a7565b639b15e16f60e01b60005260046000fd5b60608483031261055f5760405190606082016001600160401b0381118382101761056457604052610521856105be565b82526020850151906001600160a01b038216820361055f578260209283606095015261054f604088016105e6565b6040820152815201930192610171565b600080fd5b634e487b7160e01b600052604160045260246000fd5b60405190608082016001600160401b0381118382101761056457604052565b6040519190601f01601f191682016001600160401b0381118382101761056457604052565b51906001600160401b038216820361055f57565b51906001600160a01b038216820361055f57565b5190811515820361055f57565b80518210156106075760209160051b010190565b634e487b7160e01b600052603260045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c90816306285c691461280557508063181f5a771461278657806320487ded146125425780632716072b1461229257806327e936f114611e8c57806348a98aa414611e095780635cb80c5d14611b215780636def4ce714611a925780637437ff9f1461195957806379ba5097146118745780638da5cb5b146118225780639041be3d14611775578063972b4612146116a7578063c9b146b3146112da578063df0aa9e91461022c578063f2fde38b1461013f5763fbca3b74146100dc57600080fd5b3461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57600490610116612af4565b507f9e7177c8000000000000000000000000000000000000000000000000000000008152fd5b80fd5b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5773ffffffffffffffffffffffffffffffffffffffff61018c612b4a565b610194613280565b1633811461020457807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b503461013c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57610264612af4565b67ffffffffffffffff602435116112d65760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602435360301126112d6576102ab612b6d565b60025460ff8160a01c166112ae577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001760025567ffffffffffffffff8216835260066020526040832073ffffffffffffffffffffffffffffffffffffffff82161561128657805460ff8160401c16611218575b60481c73ffffffffffffffffffffffffffffffffffffffff1633036111f05773ffffffffffffffffffffffffffffffffffffffff6003541680611183575b50805467ffffffffffffffff811667ffffffffffffffff8114611156579067ffffffffffffffff60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009493011692839116179055604051906103d5826129db565b84825267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602083015267ffffffffffffffff8416604083015260608201528360808201526104366024803501602435600401613060565b61044560046024350180613060565b610453606460243501612f97565b936104686044602435016024356004016130b1565b9490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06104ae61049887612b25565b966104a66040519889612a13565b808852612b25565b018a5b81811061113f575050604051968761012081011067ffffffffffffffff6101208a011117611112576101208801604052875273ffffffffffffffffffffffffffffffffffffffff8816602088015261051c939291610510913691613131565b60408701523691613131565b606084015273ffffffffffffffffffffffffffffffffffffffff6020926040516105468582612a13565b88815260808601521660a084015260443560c08401528560e084015261010083015261057c6044602435016024356004016130b1565b61058881969296612b25565b906105966040519283612a13565b8082528382018097368360061b8201116110895780915b8360061b820183106110d75750505050865b6105d36044602435016024356004016130b1565b9050811015610959576105e6818361301d565b516106006105f960046024350180613060565b3691613131565b90610609613105565b5085810151156109315773ffffffffffffffffffffffffffffffffffffffff61063481835116612e7e565b169182158015610887575b61084457908a6106ee949392888873ffffffffffffffffffffffffffffffffffffffff8d838701518280895116926040519761067a896129db565b885267ffffffffffffffff87890196168652816040890191168152606088019283526080880193845267ffffffffffffffff6040519d8e998a997f9a4575b9000000000000000000000000000000000000000000000000000000008b5260048b01525160a060248b015260c48a0190612ab1565b965116604488015251166064860152516084850152511660a4830152038183865af1938415610839578b94610783575b5061077c918484928980600198519301519101519160405193610740856129db565b84528a8401526040830152606082015260405161075d8982612a13565b8c8152608082015261010089015190610776838361301d565b5261301d565b50016105bf565b93503d91828c863e6107958386612a13565b878584810103126108355784519167ffffffffffffffff83116108315760408387018588010312610831576040516107cc816129f7565b8387015167ffffffffffffffff811161082d576107f09086890190868a0101613168565b81528984880101519467ffffffffffffffff861161082d578761077c96889661081f9360019b01920101613168565b8a820152955091509161071e565b8e80fd5b8c80fd5b8b80fd5b6040513d8d823e3d90fd5b60248b73ffffffffffffffffffffffffffffffffffffffff8451167fbf16aab6000000000000000000000000000000000000000000000000000000008252600452fd5b506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf0000000000000000000000000000000000000000000000000000000060048201528781602481875afa908115610926578c916108f1575b501561063f565b90508781813d831161091f575b6109088183612a13565b810103126108355761091990612c2c565b386108ea565b503d6108fe565b6040513d8e823e3d90fd5b60048a7f5cf04449000000000000000000000000000000000000000000000000000000008152fd5b50867f430d138c00000000000000000000000000000000000000000000000000000000839282979873ffffffffffffffffffffffffffffffffffffffff600254169187610a496109ad606460243501612f97565b610a198c61010073ffffffffffffffffffffffffffffffffffffffff6109dd608460243501602435600401613060565b92909301519467ffffffffffffffff6040519e8f9d8e521660048d01521660248b015260443560448b015260c060648b015260c48a0191612c89565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8883030160848901526131aa565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8684030160a48701525191828152019190855b8982821061109c575050505082809103915afa9586156110915785869087938899610f7f575b5060e087015215610e8d5750845b67ffffffffffffffff6080865101911690526080840152835b61010084015151811015610b015780610ae66001928861301d565b516080610af88361010089015161301d565b51015201610acb565b509092604051848101907f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321825267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604082015267ffffffffffffffff8416606082015230608082015260808152610b8360a082612a13565b51902073ffffffffffffffffffffffffffffffffffffffff602085015116845167ffffffffffffffff6080816060840151169201511673ffffffffffffffffffffffffffffffffffffffff60a08801511660c088015191604051938a850195865260408501526060840152608083015260a082015260a08152610c0760c082612a13565b51902060608501518681519101206040860151878151910120610100870151604051610c6d81610c418c8201948d865260408301906131aa565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612a13565b51902091608088015189815191012093604051958a870197885260408701526060860152608085015260a084015260c083015260e082015260e08152610cb561010082612a13565b51902082515267ffffffffffffffff60608351015116907f192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f3260405185815267ffffffffffffffff608086518051898501528289820151166040850152826040820151166060850152826060820151168285015201511660a082015273ffffffffffffffffffffffffffffffffffffffff60208601511660c082015280610e58610ddf610daa610d7560408a01516101a060e08701526101c0860190612ab1565b60608a01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086830301610100870152612ab1565b60808901517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085830301610120860152612ab1565b73ffffffffffffffffffffffffffffffffffffffff60a08901511661014084015260c088015161016084015260e088015161018084015267ffffffffffffffff610100890151967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858403016101a086015216956131aa565b0390a37fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff600254166002555151604051908152f35b73ffffffffffffffffffffffffffffffffffffffff604051917fea458c0c00000000000000000000000000000000000000000000000000000000835267ffffffffffffffff8516600484015216602482015283816044818973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610f74578691610f32575b50610ab2565b90508381813d8311610f6d575b610f498183612a13565b81010312610f69575167ffffffffffffffff81168103610f695787610f2c565b8580fd5b503d610f3f565b6040513d88823e3d90fd5b9850505090503d908186883e610f958288612a13565b6080878381010312610f6957865196610faf858201612c2c565b97604082015167ffffffffffffffff811161108d57610fd390858401908401613168565b9160608101519467ffffffffffffffff861161108957808201601f87840101121561108957858201519161100683612b25565b966110146040519889612a13565b838852898801928083018b8660051b848601010111610831578a82840101935b8b8660051b84860101018510611054575050505050509790929789610aa4565b845167ffffffffffffffff811161082d578c809261107c829383878a0191898b010101613168565b8152019501949050611034565b8980fd5b8880fd5b6040513d87823e3d90fd5b8351805173ffffffffffffffffffffffffffffffffffffffff168652810151818601528c975088965060409094019390920191600101610a7e565b60408336031261110e578660409182516110f0816129f7565b6110f986612b90565b815282860135838201528152019201916105ad565b8a80fd5b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60209061114a613105565b82828a010152016104b1565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b803b156111ec578460405180927fe0a0e5060000000000000000000000000000000000000000000000000000000082528183816111c96024356004018b60048401612cc8565b03925af18015611091571561037357846111e591959295612a13565b9238610373565b8480fd5b6004847f1c0a3529000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526002830160205260409020546103355760248573ffffffffffffffffffffffffffffffffffffffff857fd0d2597600000000000000000000000000000000000000000000000000000000835216600452fd5b6004847fa4ec7479000000000000000000000000000000000000000000000000000000008152fd5b6004847f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5760043567ffffffffffffffff81116112d65761132a903690600401612bb1565b73ffffffffffffffffffffffffffffffffffffffff60015416330361165f575b919081907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301915b8481101561165b578060051b820135838112156111ec578201916080833603126111ec57604051946113a686612990565b6113af84612b10565b86526113bd60208501612b3d565b9660208701978852604085013567ffffffffffffffff8111611657576113e69036908701612fb8565b9460408801958652606081013567ffffffffffffffff81116116535761140e91369101612fb8565b60608801908152875167ffffffffffffffff1683526006602052604080842099518a547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff169015159182901b68ff000000000000000016178a5590959081515161152b575b5095976001019550815b855180518210156114bc57906114b573ffffffffffffffffffffffffffffffffffffffff6114ad8360019561301d565b511689613374565b500161147d565b505095909694506001929193519081516114dc575b505001939293611375565b61152167ffffffffffffffff7fc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d42158692511692604051918291602083526020830190612be2565b0390a238806114d1565b9893959296919094979860001461161c57600184019591875b865180518210156115c15761156e8273ffffffffffffffffffffffffffffffffffffffff9261301d565b5116801561158a57906115836001928a6132e3565b5001611544565b60248a67ffffffffffffffff8e51167f463258ff000000000000000000000000000000000000000000000000000000008252600452fd5b50509692955090929796937f330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc328161161267ffffffffffffffff8a51169251604051918291602083526020830190612be2565b0390a23880611473565b60248767ffffffffffffffff8b51167f463258ff000000000000000000000000000000000000000000000000000000008252600452fd5b8380fd5b8280fd5b8380f35b73ffffffffffffffffffffffffffffffffffffffff6005541633031561134a576004837f905d7d9b000000000000000000000000000000000000000000000000000000008152fd5b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5767ffffffffffffffff6116e8612af4565b16808252600660205260ff604083205460401c16908252600660205260016040832001916040518093849160208254918281520191845260208420935b81811061175c57505061173a92500383612a13565b61175860405192839215158352604060208401526040830190612be2565b0390f35b8454835260019485019487945060209093019201611725565b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5767ffffffffffffffff6117b6612af4565b1681526006602052600167ffffffffffffffff604083205416019067ffffffffffffffff82116117f55760208267ffffffffffffffff60405191168152f35b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b503461013c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461013c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57805473ffffffffffffffffffffffffffffffffffffffff81163303611931577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b503461013c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c576080604051611996816129db565b828152826020820152826040820152826060820152015260a06040516119bb816129db565b60ff60025473ffffffffffffffffffffffffffffffffffffffff81168352831c161515602082015273ffffffffffffffffffffffffffffffffffffffff60035416604082015273ffffffffffffffffffffffffffffffffffffffff60045416606082015273ffffffffffffffffffffffffffffffffffffffff600554166080820152611a90604051809273ffffffffffffffffffffffffffffffffffffffff60808092828151168552602081015115156020860152826040820151166040860152826060820151166060860152015116910152565bf35b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57604060609167ffffffffffffffff611ad8612af4565b1681526006602052205473ffffffffffffffffffffffffffffffffffffffff6040519167ffffffffffffffff8116835260ff8160401c161515602084015260481c166040820152f35b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5760043567ffffffffffffffff81116112d657611b71903690600401612bb1565b9073ffffffffffffffffffffffffffffffffffffffff6004541690835b83811015611e055773ffffffffffffffffffffffffffffffffffffffff611bb98260051b8401612f97565b1690604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481845afa928315611dfa578793611dc3575b5082611c11575b506001915001611b8e565b8460405193611ccc60208601957fa9059cbb00000000000000000000000000000000000000000000000000000000875283602482015282604482015260448152611c5c606482612a13565b8a80604098895193611c6e8b86612a13565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020860152519082895af13d15611dbb573d90611caf82612a54565b91611cbc8a519384612a13565b82523d8d602084013e5b86613506565b805180611d08575b505060207f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e9160019651908152a338611c06565b81929495969350906020918101031261108d576020611d279101612c2c565b15611d385792919085903880611cd4565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b606090611cc6565b9092506020813d8211611df2575b81611dde60209383612a13565b81010312611dee57519138611bff565b8680fd5b3d9150611dd1565b6040513d89823e3d90fd5b8480f35b503461013c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57611e41612af4565b506024359073ffffffffffffffffffffffffffffffffffffffff8216820361013c576020611e6e83612e7e565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b503461013c5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57604051611ec8816129db565b611ed0612b4a565b81526024358015158103611657576020820190815260443573ffffffffffffffffffffffffffffffffffffffff811681036116535760408301908152611f14612b6d565b90606084019182526084359273ffffffffffffffffffffffffffffffffffffffff84168403610f695760808501938452611f4c613280565b73ffffffffffffffffffffffffffffffffffffffff855116158015612273575b8015612269575b612241579273ffffffffffffffffffffffffffffffffffffffff859381809461012097827fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f19a51167fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002555115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff00000000000000000000000000000000000000006002549260a01b1691161760025551167fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035551167fffffffffffffffffffffffff0000000000000000000000000000000000000000600454161760045551167fffffffffffffffffffffffff0000000000000000000000000000000000000000600554161760055561223d604051916120bd83612990565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016835273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602084015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604084015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660608401526121ed604051809473ffffffffffffffffffffffffffffffffffffffff6060809267ffffffffffffffff8151168552826020820151166020860152826040820151166040860152015116910152565b608083019073ffffffffffffffffffffffffffffffffffffffff60808092828151168552602081015115156020860152826040820151166040860152826060820151166060860152015116910152565ba180f35b6004867f35be3ac8000000000000000000000000000000000000000000000000000000008152fd5b5080511515611f73565b5073ffffffffffffffffffffffffffffffffffffffff83511615611f6c565b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c576004359067ffffffffffffffff821161013c573660238301121561013c5781600401356122ee81612b25565b926122fc6040519485612a13565b818452602460606020860193028201019036821161165357602401915b81831061249a5750505061232b613280565b805b825181101561249657612340818461301d565b5167ffffffffffffffff612354838661301d565b51511690811561246a57907fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef5606060019493838752600660205260ff6040882061242b604060208501519483547fffffff0000000000000000000000000000000000000000ffffffffffffffffff7cffffffffffffffffffffffffffffffffffffffff0000000000000000008860481b1691161784550151151582907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff68ff0000000000000000835492151560401b169116179055565b5473ffffffffffffffffffffffffffffffffffffffff6040519367ffffffffffffffff8316855216602084015260401c1615156040820152a20161232d565b602484837fc35aa79d000000000000000000000000000000000000000000000000000000008252600452fd5b5080f35b606083360312611653576040516060810181811067ffffffffffffffff821117612515576040526124ca84612b10565b8152602084013573ffffffffffffffffffffffffffffffffffffffff81168103610f6957918160609360208094015261250560408701612b3d565b6040820152815201920191612319565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b503461013c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5761257a612af4565b60243567ffffffffffffffff81116116575760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112611657576040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff000000000000000000000000000000008360801b16600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561277b578491612741575b5061270b576126ad9160209173ffffffffffffffffffffffffffffffffffffffff60025416906040518095819482937fd8694ccd0000000000000000000000000000000000000000000000000000000084526004019060048401612cc8565b03915afa9081156127005782916126ca575b602082604051908152f35b90506020813d6020116126f8575b816126e560209383612a13565b810103126112d6576020915051386126bf565b3d91506126d8565b6040513d84823e3d90fd5b60248367ffffffffffffffff847ffdbd6a7200000000000000000000000000000000000000000000000000000000835216600452fd5b90506020813d602011612773575b8161275c60209383612a13565b810103126116535761276d90612c2c565b3861264e565b3d915061274f565b6040513d86823e3d90fd5b503461013c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57506117586040516127c7604082612a13565b601081527f4f6e52616d7020312e362e302d646576000000000000000000000000000000006020820152604051918291602083526020830190612ab1565b9050346112d657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126112d65780612841606092612990565b8281528260208201528260408201520152608060405161286081612990565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166060820152611a90604051809273ffffffffffffffffffffffffffffffffffffffff6060809267ffffffffffffffff8151168552826020820151166020860152826040820151166040860152015116910152565b6080810190811067ffffffffffffffff8211176129ac57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff8211176129ac57604052565b6040810190811067ffffffffffffffff8211176129ac57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176129ac57604052565b67ffffffffffffffff81116129ac57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110612aa15750506000910152565b8181015183820152602001612a91565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612aed81518092818752878088019101612a8e565b0116010190565b6004359067ffffffffffffffff82168203612b0b57565b600080fd5b359067ffffffffffffffff82168203612b0b57565b67ffffffffffffffff81116129ac5760051b60200190565b35908115158203612b0b57565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203612b0b57565b6064359073ffffffffffffffffffffffffffffffffffffffff82168203612b0b57565b359073ffffffffffffffffffffffffffffffffffffffff82168203612b0b57565b9181601f84011215612b0b5782359167ffffffffffffffff8311612b0b576020808501948460051b010111612b0b57565b906020808351928381520192019060005b818110612c005750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612bf3565b51908115158203612b0b57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811215612b0b57016020813591019167ffffffffffffffff8211612b0b578136038313612b0b57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9067ffffffffffffffff9093929316815260406020820152612d3e612d01612cf08580612c39565b60a0604086015260e0850191612c89565b612d0e6020860186612c39565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0858403016060860152612c89565b9060408401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811215612b0b5784016020813591019267ffffffffffffffff8211612b0b578160061b36038413612b0b578281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0016080840152818152602001929060005b818110612e3f57505050612e0c8473ffffffffffffffffffffffffffffffffffffffff612dfc6060612e3c979801612b90565b1660a08401526080810190612c39565b9160c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc082860301910152612c89565b90565b90919360408060019273ffffffffffffffffffffffffffffffffffffffff612e6689612b90565b16815260208881013590820152019501929101612dc9565b73ffffffffffffffffffffffffffffffffffffffff604051917fbbe4f6db00000000000000000000000000000000000000000000000000000000835216600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612f8b57600091612f28575b5073ffffffffffffffffffffffffffffffffffffffff1690565b6020813d602011612f83575b81612f4160209383612a13565b810103126112d657519073ffffffffffffffffffffffffffffffffffffffff8216820361013c575073ffffffffffffffffffffffffffffffffffffffff612f0e565b3d9150612f34565b6040513d6000823e3d90fd5b3573ffffffffffffffffffffffffffffffffffffffff81168103612b0b5790565b9080601f83011215612b0b578135612fcf81612b25565b92612fdd6040519485612a13565b81845260208085019260051b820101928311612b0b57602001905b8282106130055750505090565b6020809161301284612b90565b815201910190612ff8565b80518210156130315760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612b0b570180359067ffffffffffffffff8211612b0b57602001918136038313612b0b57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612b0b570180359067ffffffffffffffff8211612b0b57602001918160061b36038313612b0b57565b60405190613112826129db565b6060608083600081528260208201528260408201526000838201520152565b92919261313d82612a54565b9161314b6040519384612a13565b829481845281830111612b0b578281602093846000960137010152565b81601f82011215612b0b57805161317e81612a54565b9261318c6040519485612a13565b81845260208284010111612b0b57612e3c9160208085019101612a8e565b9080602083519182815201916020808360051b8301019401926000915b8383106131d657505050505090565b9091929394602080613271837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289519073ffffffffffffffffffffffffffffffffffffffff825116815260806132566132448685015160a08886015260a0850190612ab1565b60408501518482036040860152612ab1565b92606081015160608401520151906080818403910152612ab1565b970193019301919392906131c7565b73ffffffffffffffffffffffffffffffffffffffff6001541633036132a157565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b80548210156130315760005260206000200190600090565b600082815260018201602052604090205461336d57805490680100000000000000008210156129ac57826133566133218460018096018555846132cb565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b905580549260005201602052604060002055600190565b5050600090565b90600182019181600052826020526040600020548015156000146134fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116134ce578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116134ce57818103613497575b50505080548015613468577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061342982826132cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6134b76134a761332193866132cb565b90549060031b1c928392866132cb565b9055600052836020526040600020553880806133f1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50505050600090565b91929015613581575081511561351a575090565b3b156135235790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156135945750805190602001fd5b6135d2906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190612ab1565b0390fdfea164736f6c634300081a000a", + Bin: "0x6101006040523461055f57613c2b8038038061001a81610599565b92833981019080820390610140821261055f576080821261055f5761003d61057a565b90610047816105be565b82526020810151906001600160a01b038216820361055f5760208301918252610072604082016105d2565b926040810193845260a0610088606084016105d2565b6060830190815295607f19011261055f5760405160a081016001600160401b03811182821017610564576040526100c1608084016105d2565b81526100cf60a084016105e6565b602082019081526100e260c085016105d2565b91604081019283526100f660e086016105d2565b936060820194855261010b61010087016105d2565b6080830190815261012087015190966001600160401b03821161055f57018a601f8201121561055f578051906001600160401b0382116105645760209b8c6060610159828660051b01610599565b9e8f8681520194028301019181831161055f57602001925b8284106104f1575050505033156104e057600180546001600160a01b0319163317905580516001600160401b03161580156104ce575b80156104bc575b80156104aa575b61047d57516001600160401b0316608081905295516001600160a01b0390811660a08190529751811660c08190529851811660e08190528251909116158015610498575b801561048e575b61047d57815160028054855160ff60a01b90151560a01b166001600160a01b039384166001600160a81b0319909216919091171790558451600380549183166001600160a01b03199283161790558651600480549184169183169190911790558751600580549190931691161790557fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f19861012098606061029f61057a565b8a8152602080820193845260408083019586529290910194855281519a8b5291516001600160a01b03908116928b019290925291518116918901919091529051811660608801529051811660808701529051151560a08601529051811660c08501529051811660e0840152905116610100820152a16000905b805182101561040b5761032b82826105f3565b51916001600160401b0361033f82846105f3565b5151169283156103f65760008481526006602090815260409182902081840151815494840151600160401b600160e81b03198616604883901b600160481b600160e81b031617901515851b68ff000000000000000016179182905583516001600160401b0390951685526001600160a01b031691840191909152811c60ff1615159082015291926001927fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef590606090a20190610318565b8363c35aa79d60e01b60005260045260246000fd5b60405161360d908161061e82396080518181816103e301528181610b64015281816120aa015261284d015260a0518181816120e3015281816126000152612886015260c051818181610f270152818161211f01526128c2015260e05181818161215b015281816128fe0152612edc0152f35b6306b7c75960e31b60005260046000fd5b5082511515610200565b5084516001600160a01b0316156101f9565b5088516001600160a01b0316156101b5565b5087516001600160a01b0316156101ae565b5086516001600160a01b0316156101a7565b639b15e16f60e01b60005260046000fd5b60608483031261055f5760405190606082016001600160401b0381118382101761056457604052610521856105be565b82526020850151906001600160a01b038216820361055f578260209283606095015261054f604088016105e6565b6040820152815201930192610171565b600080fd5b634e487b7160e01b600052604160045260246000fd5b60405190608082016001600160401b0381118382101761056457604052565b6040519190601f01601f191682016001600160401b0381118382101761056457604052565b51906001600160401b038216820361055f57565b51906001600160a01b038216820361055f57565b5190811515820361055f57565b80518210156106075760209160051b010190565b634e487b7160e01b600052603260045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c90816306285c69146127e757508063181f5a771461276857806320487ded146125245780632716072b1461227457806327e936f114611e6e57806348a98aa414611deb5780635cb80c5d14611b035780636def4ce714611a745780637437ff9f1461195757806379ba5097146118725780638da5cb5b146118205780639041be3d14611773578063972b4612146116a5578063c9b146b3146112d8578063df0aa9e91461022c578063f2fde38b1461013f5763fbca3b74146100dc57600080fd5b3461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57600490610116612af3565b507f9e7177c8000000000000000000000000000000000000000000000000000000008152fd5b80fd5b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5773ffffffffffffffffffffffffffffffffffffffff61018c612b49565b6101946132aa565b1633811461020457807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b503461013c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57610264612af3565b67ffffffffffffffff602435116112d45760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602435360301126112d4576102ab612b6c565b60025460ff8160a01c166112ac577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001760025567ffffffffffffffff8216835260066020526040832073ffffffffffffffffffffffffffffffffffffffff82161561128457805460ff8160401c16611216575b60481c73ffffffffffffffffffffffffffffffffffffffff1633036111ee5773ffffffffffffffffffffffffffffffffffffffff6003541680611181575b50805467ffffffffffffffff811667ffffffffffffffff8114611154579067ffffffffffffffff60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009493011692839116179055604051906103d5826129bd565b84825267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602083015267ffffffffffffffff841660408301526060820152836080820152610436602480350160243560040161308a565b6104456004602435018061308a565b610453606460243501612f96565b936104686044602435016024356004016130db565b9490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06104ae61049887612b24565b966104a66040519889612a12565b808852612b24565b018a5b81811061113d5750506105029392916104f691604051986104d18a6129d9565b895273ffffffffffffffffffffffffffffffffffffffff8a1660208a0152369161315b565b6040870152369161315b565b606084015273ffffffffffffffffffffffffffffffffffffffff60209260405161052c8582612a12565b88815260808601521660a084015260443560c08401528560e08401526101008301526105626044602435016024356004016130db565b61056e81969296612b24565b9061057c6040519283612a12565b8082528382018097368360061b8201116110b45780915b8360061b820183106111025750505050865b6105b96044602435016024356004016130db565b905081101561093f576105cc8183613047565b516105e66105df6004602435018061308a565b369161315b565b906105ef61312f565b5085810151156109175773ffffffffffffffffffffffffffffffffffffffff61061a81835116612e7d565b16918215801561086d575b61082a57908a6106d4949392888873ffffffffffffffffffffffffffffffffffffffff8d8387015182808951169260405197610660896129bd565b885267ffffffffffffffff87890196168652816040890191168152606088019283526080880193845267ffffffffffffffff6040519d8e998a997f9a4575b9000000000000000000000000000000000000000000000000000000008b5260048b01525160a060248b015260c48a0190612ab0565b965116604488015251166064860152516084850152511660a4830152038183865af193841561081f578b94610769575b50610762918484928980600198519301519101519160405193610726856129bd565b84528a840152604083015260608201526040516107438982612a12565b8c815260808201526101008901519061075c8383613047565b52613047565b50016105a5565b93503d91828c863e61077b8386612a12565b8785848101031261081b5784519167ffffffffffffffff83116108175760408387018588010312610817576040516107b2816129f6565b8387015167ffffffffffffffff8111610813576107d69086890190868a0101613192565b81528984880101519467ffffffffffffffff861161081357876107629688966108059360019b01920101613192565b8a8201529550915091610704565b8e80fd5b8c80fd5b8b80fd5b6040513d8d823e3d90fd5b60248b73ffffffffffffffffffffffffffffffffffffffff8451167fbf16aab6000000000000000000000000000000000000000000000000000000008252600452fd5b506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf0000000000000000000000000000000000000000000000000000000060048201528781602481875afa90811561090c578c916108d7575b5015610625565b90508781813d8311610905575b6108ee8183612a12565b8101031261081b576108ff90612c2b565b386108d0565b503d6108e4565b6040513d8e823e3d90fd5b60048a7f5cf04449000000000000000000000000000000000000000000000000000000008152fd5b50867f430d138c00000000000000000000000000000000000000000000000000000000839282979873ffffffffffffffffffffffffffffffffffffffff600254169187610a2f610993606460243501612f96565b6109ff8c61010073ffffffffffffffffffffffffffffffffffffffff6109c360846024350160243560040161308a565b92909301519467ffffffffffffffff6040519e8f9d8e521660048d01521660248b015260443560448b015260c060648b015260c48a0191612c88565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8883030160848901526131d4565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8684030160a48701525191828152019190855b898282106110c7575050505082809103915afa9586156110bc5785869087938899610faa575b5060e087015215610eb85750845b67ffffffffffffffff6080865101911690526080840152835b61010084015151811015610ae75780610acc60019288613047565b516080610ade83610100890151613047565b51015201610ab1565b5090926060610100604051610afb816129d9565b610b03612fb7565b8152838782015282604082015282808201528260808201528360a08201528360c08201528360e08201520152604051848101907f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321825267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604082015267ffffffffffffffff8416606082015230608082015260808152610bae60a082612a12565b51902073ffffffffffffffffffffffffffffffffffffffff602085015116845167ffffffffffffffff6080816060840151169201511673ffffffffffffffffffffffffffffffffffffffff60a08801511660c088015191604051938a850195865260408501526060840152608083015260a082015260a08152610c3260c082612a12565b51902060608501518681519101206040860151878151910120610100870151604051610c9881610c6c8c8201948d865260408301906131d4565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612a12565b51902091608088015189815191012093604051958a870197885260408701526060860152608085015260a084015260c083015260e082015260e08152610ce061010082612a12565b51902082515267ffffffffffffffff60608351015116907f192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f3260405185815267ffffffffffffffff608086518051898501528289820151166040850152826040820151166060850152826060820151168285015201511660a082015273ffffffffffffffffffffffffffffffffffffffff60208601511660c082015280610e83610e0a610dd5610da060408a01516101a060e08701526101c0860190612ab0565b60608a01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086830301610100870152612ab0565b60808901517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085830301610120860152612ab0565b73ffffffffffffffffffffffffffffffffffffffff60a08901511661014084015260c088015161016084015260e088015161018084015267ffffffffffffffff610100890151967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858403016101a086015216956131d4565b0390a37fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff600254166002555151604051908152f35b73ffffffffffffffffffffffffffffffffffffffff604051917fea458c0c00000000000000000000000000000000000000000000000000000000835267ffffffffffffffff8516600484015216602482015283816044818973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610f9f578691610f5d575b50610a98565b90508381813d8311610f98575b610f748183612a12565b81010312610f94575167ffffffffffffffff81168103610f945787610f57565b8580fd5b503d610f6a565b6040513d88823e3d90fd5b9850505090503d908186883e610fc08288612a12565b6080878381010312610f9457865196610fda858201612c2b565b97604082015167ffffffffffffffff81116110b857610ffe90858401908401613192565b9160608101519467ffffffffffffffff86116110b457808201601f8784010112156110b457858201519161103183612b24565b9661103f6040519889612a12565b838852898801928083018b8660051b848601010111610817578a82840101935b8b8660051b8486010101851061107f575050505050509790929789610a8a565b845167ffffffffffffffff8111610813578c80926110a7829383878a0191898b010101613192565b815201950194905061105f565b8980fd5b8880fd5b6040513d87823e3d90fd5b8351805173ffffffffffffffffffffffffffffffffffffffff168652810151818601528c975088965060409094019390920191600101610a64565b6040833603126111395786604091825161111b816129f6565b61112486612b8f565b81528286013583820152815201920191610593565b8a80fd5b60209061114861312f565b82828a010152016104b1565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b803b156111ea578460405180927fe0a0e5060000000000000000000000000000000000000000000000000000000082528183816111c76024356004018b60048401612cc7565b03925af180156110bc571561037357846111e391959295612a12565b9238610373565b8480fd5b6004847f1c0a3529000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526002830160205260409020546103355760248573ffffffffffffffffffffffffffffffffffffffff857fd0d2597600000000000000000000000000000000000000000000000000000000835216600452fd5b6004847fa4ec7479000000000000000000000000000000000000000000000000000000008152fd5b6004847f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5760043567ffffffffffffffff81116112d457611328903690600401612bb0565b73ffffffffffffffffffffffffffffffffffffffff60015416330361165d575b919081907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301915b84811015611659578060051b820135838112156111ea578201916080833603126111ea57604051946113a486612972565b6113ad84612b0f565b86526113bb60208501612b3c565b9660208701978852604085013567ffffffffffffffff8111611655576113e49036908701612fe2565b9460408801958652606081013567ffffffffffffffff81116116515761140c91369101612fe2565b60608801908152875167ffffffffffffffff1683526006602052604080842099518a547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff169015159182901b68ff000000000000000016178a55909590815151611529575b5095976001019550815b855180518210156114ba57906114b373ffffffffffffffffffffffffffffffffffffffff6114ab83600195613047565b51168961339e565b500161147b565b505095909694506001929193519081516114da575b505001939293611373565b61151f67ffffffffffffffff7fc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d42158692511692604051918291602083526020830190612be1565b0390a238806114cf565b9893959296919094979860001461161a57600184019591875b865180518210156115bf5761156c8273ffffffffffffffffffffffffffffffffffffffff92613047565b5116801561158857906115816001928a61330d565b5001611542565b60248a67ffffffffffffffff8e51167f463258ff000000000000000000000000000000000000000000000000000000008252600452fd5b50509692955090929796937f330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc328161161067ffffffffffffffff8a51169251604051918291602083526020830190612be1565b0390a23880611471565b60248767ffffffffffffffff8b51167f463258ff000000000000000000000000000000000000000000000000000000008252600452fd5b8380fd5b8280fd5b8380f35b73ffffffffffffffffffffffffffffffffffffffff60055416330315611348576004837f905d7d9b000000000000000000000000000000000000000000000000000000008152fd5b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5767ffffffffffffffff6116e6612af3565b16808252600660205260ff604083205460401c16908252600660205260016040832001916040518093849160208254918281520191845260208420935b81811061175a57505061173892500383612a12565b61175660405192839215158352604060208401526040830190612be1565b0390f35b8454835260019485019487945060209093019201611723565b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5767ffffffffffffffff6117b4612af3565b1681526006602052600167ffffffffffffffff604083205416019067ffffffffffffffff82116117f35760208267ffffffffffffffff60405191168152f35b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b503461013c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461013c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57805473ffffffffffffffffffffffffffffffffffffffff8116330361192f577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b503461013c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5761198e612fb7565b5060a060405161199d816129bd565b60ff60025473ffffffffffffffffffffffffffffffffffffffff81168352831c161515602082015273ffffffffffffffffffffffffffffffffffffffff60035416604082015273ffffffffffffffffffffffffffffffffffffffff60045416606082015273ffffffffffffffffffffffffffffffffffffffff600554166080820152611a72604051809273ffffffffffffffffffffffffffffffffffffffff60808092828151168552602081015115156020860152826040820151166040860152826060820151166060860152015116910152565bf35b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57604060609167ffffffffffffffff611aba612af3565b1681526006602052205473ffffffffffffffffffffffffffffffffffffffff6040519167ffffffffffffffff8116835260ff8160401c161515602084015260481c166040820152f35b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5760043567ffffffffffffffff81116112d457611b53903690600401612bb0565b9073ffffffffffffffffffffffffffffffffffffffff6004541690835b83811015611de75773ffffffffffffffffffffffffffffffffffffffff611b9b8260051b8401612f96565b1690604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481845afa928315611ddc578793611da5575b5082611bf3575b506001915001611b70565b8460405193611cae60208601957fa9059cbb00000000000000000000000000000000000000000000000000000000875283602482015282604482015260448152611c3e606482612a12565b8a80604098895193611c508b86612a12565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020860152519082895af13d15611d9d573d90611c9182612a53565b91611c9e8a519384612a12565b82523d8d602084013e5b86613530565b805180611cea575b505060207f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e9160019651908152a338611be8565b8192949596935090602091810103126110b8576020611d099101612c2b565b15611d1a5792919085903880611cb6565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b606090611ca8565b9092506020813d8211611dd4575b81611dc060209383612a12565b81010312611dd057519138611be1565b8680fd5b3d9150611db3565b6040513d89823e3d90fd5b8480f35b503461013c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57611e23612af3565b506024359073ffffffffffffffffffffffffffffffffffffffff8216820361013c576020611e5083612e7d565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b503461013c5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57604051611eaa816129bd565b611eb2612b49565b81526024358015158103611655576020820190815260443573ffffffffffffffffffffffffffffffffffffffff811681036116515760408301908152611ef6612b6c565b90606084019182526084359273ffffffffffffffffffffffffffffffffffffffff84168403610f945760808501938452611f2e6132aa565b73ffffffffffffffffffffffffffffffffffffffff855116158015612255575b801561224b575b612223579273ffffffffffffffffffffffffffffffffffffffff859381809461012097827fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f19a51167fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002555115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff00000000000000000000000000000000000000006002549260a01b1691161760025551167fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035551167fffffffffffffffffffffffff0000000000000000000000000000000000000000600454161760045551167fffffffffffffffffffffffff0000000000000000000000000000000000000000600554161760055561221f6040519161209f83612972565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016835273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602084015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604084015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660608401526121cf604051809473ffffffffffffffffffffffffffffffffffffffff6060809267ffffffffffffffff8151168552826020820151166020860152826040820151166040860152015116910152565b608083019073ffffffffffffffffffffffffffffffffffffffff60808092828151168552602081015115156020860152826040820151166040860152826060820151166060860152015116910152565ba180f35b6004867f35be3ac8000000000000000000000000000000000000000000000000000000008152fd5b5080511515611f55565b5073ffffffffffffffffffffffffffffffffffffffff83511615611f4e565b503461013c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c576004359067ffffffffffffffff821161013c573660238301121561013c5781600401356122d081612b24565b926122de6040519485612a12565b818452602460606020860193028201019036821161165157602401915b81831061247c5750505061230d6132aa565b805b8251811015612478576123228184613047565b5167ffffffffffffffff6123368386613047565b51511690811561244c57907fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef5606060019493838752600660205260ff6040882061240d604060208501519483547fffffff0000000000000000000000000000000000000000ffffffffffffffffff7cffffffffffffffffffffffffffffffffffffffff0000000000000000008860481b1691161784550151151582907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff68ff0000000000000000835492151560401b169116179055565b5473ffffffffffffffffffffffffffffffffffffffff6040519367ffffffffffffffff8316855216602084015260401c1615156040820152a20161230f565b602484837fc35aa79d000000000000000000000000000000000000000000000000000000008252600452fd5b5080f35b606083360312611651576040516060810181811067ffffffffffffffff8211176124f7576040526124ac84612b0f565b8152602084013573ffffffffffffffffffffffffffffffffffffffff81168103610f945791816060936020809401526124e760408701612b3c565b60408201528152019201916122fb565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b503461013c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c5761255c612af3565b60243567ffffffffffffffff81116116555760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112611655576040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff000000000000000000000000000000008360801b16600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561275d578491612723575b506126ed5761268f9160209173ffffffffffffffffffffffffffffffffffffffff60025416906040518095819482937fd8694ccd0000000000000000000000000000000000000000000000000000000084526004019060048401612cc7565b03915afa9081156126e25782916126ac575b602082604051908152f35b90506020813d6020116126da575b816126c760209383612a12565b810103126112d4576020915051386126a1565b3d91506126ba565b6040513d84823e3d90fd5b60248367ffffffffffffffff847ffdbd6a7200000000000000000000000000000000000000000000000000000000835216600452fd5b90506020813d602011612755575b8161273e60209383612a12565b810103126116515761274f90612c2b565b38612630565b3d9150612731565b6040513d86823e3d90fd5b503461013c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013c57506117566040516127a9604082612a12565b601081527f4f6e52616d7020312e362e302d646576000000000000000000000000000000006020820152604051918291602083526020830190612ab0565b9050346112d457817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126112d45780612823606092612972565b8281528260208201528260408201520152608060405161284281612972565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166060820152611a72604051809273ffffffffffffffffffffffffffffffffffffffff6060809267ffffffffffffffff8151168552826020820151166020860152826040820151166040860152015116910152565b6080810190811067ffffffffffffffff82111761298e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761298e57604052565b610120810190811067ffffffffffffffff82111761298e57604052565b6040810190811067ffffffffffffffff82111761298e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761298e57604052565b67ffffffffffffffff811161298e57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110612aa05750506000910152565b8181015183820152602001612a90565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612aec81518092818752878088019101612a8d565b0116010190565b6004359067ffffffffffffffff82168203612b0a57565b600080fd5b359067ffffffffffffffff82168203612b0a57565b67ffffffffffffffff811161298e5760051b60200190565b35908115158203612b0a57565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203612b0a57565b6064359073ffffffffffffffffffffffffffffffffffffffff82168203612b0a57565b359073ffffffffffffffffffffffffffffffffffffffff82168203612b0a57565b9181601f84011215612b0a5782359167ffffffffffffffff8311612b0a576020808501948460051b010111612b0a57565b906020808351928381520192019060005b818110612bff5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612bf2565b51908115158203612b0a57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811215612b0a57016020813591019167ffffffffffffffff8211612b0a578136038313612b0a57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9067ffffffffffffffff9093929316815260406020820152612d3d612d00612cef8580612c38565b60a0604086015260e0850191612c88565b612d0d6020860186612c38565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0858403016060860152612c88565b9060408401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811215612b0a5784016020813591019267ffffffffffffffff8211612b0a578160061b36038413612b0a578281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0016080840152818152602001929060005b818110612e3e57505050612e0b8473ffffffffffffffffffffffffffffffffffffffff612dfb6060612e3b979801612b8f565b1660a08401526080810190612c38565b9160c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc082860301910152612c88565b90565b90919360408060019273ffffffffffffffffffffffffffffffffffffffff612e6589612b8f565b16815260208881013590820152019501929101612dc8565b73ffffffffffffffffffffffffffffffffffffffff604051917fbbe4f6db00000000000000000000000000000000000000000000000000000000835216600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612f8a57600091612f27575b5073ffffffffffffffffffffffffffffffffffffffff1690565b6020813d602011612f82575b81612f4060209383612a12565b810103126112d457519073ffffffffffffffffffffffffffffffffffffffff8216820361013c575073ffffffffffffffffffffffffffffffffffffffff612f0d565b3d9150612f33565b6040513d6000823e3d90fd5b3573ffffffffffffffffffffffffffffffffffffffff81168103612b0a5790565b60405190612fc4826129bd565b60006080838281528260208201528260408201528260608201520152565b9080601f83011215612b0a578135612ff981612b24565b926130076040519485612a12565b81845260208085019260051b820101928311612b0a57602001905b82821061302f5750505090565b6020809161303c84612b8f565b815201910190613022565b805182101561305b5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612b0a570180359067ffffffffffffffff8211612b0a57602001918136038313612b0a57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612b0a570180359067ffffffffffffffff8211612b0a57602001918160061b36038313612b0a57565b6040519061313c826129bd565b6060608083600081528260208201528260408201526000838201520152565b92919261316782612a53565b916131756040519384612a12565b829481845281830111612b0a578281602093846000960137010152565b81601f82011215612b0a5780516131a881612a53565b926131b66040519485612a12565b81845260208284010111612b0a57612e3b9160208085019101612a8d565b9080602083519182815201916020808360051b8301019401926000915b83831061320057505050505090565b909192939460208061329b837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289519073ffffffffffffffffffffffffffffffffffffffff8251168152608061328061326e8685015160a08886015260a0850190612ab0565b60408501518482036040860152612ab0565b92606081015160608401520151906080818403910152612ab0565b970193019301919392906131f1565b73ffffffffffffffffffffffffffffffffffffffff6001541633036132cb57565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b805482101561305b5760005260206000200190600090565b6000828152600182016020526040902054613397578054906801000000000000000082101561298e578261338061334b8460018096018555846132f5565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b905580549260005201602052604060002055600190565b5050600090565b9060018201918160005282602052604060002054801515600014613527577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116134f8578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116134f8578181036134c1575b50505080548015613492577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061345382826132f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6134e16134d161334b93866132f5565b90549060031b1c928392866132f5565b90556000528360205260406000205538808061341b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50505050600090565b919290156135ab5750815115613544575090565b3b1561354d5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156135be5750805190602001fd5b6135fc906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190612ab0565b0390fdfea164736f6c634300081a000a", } var OnRampABI = OnRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index d7adcbef142..3928f1cc9dd 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -10,13 +10,15 @@ fee_quoter: ../../../contracts/solc/ccip/FeeQuoter/FeeQuoter.sol/FeeQuoter.abi.j lock_release_token_pool: ../../../contracts/solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.abi.json ../../../contracts/solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.bin 2e73ee0da6f9a9a5722294289b969e4202476706e5d7cdb623e728831c79c28b maybe_revert_message_receiver: ../../../contracts/solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.abi.json ../../../contracts/solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.bin d1eb951af1027ca20cbee2c34df80fddbfd861e1695989aeebd29327cfe56584 message_hasher: ../../../contracts/solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.abi.json ../../../contracts/solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.bin 9d503e62f007cfa7bf411ec845c3537b272709001d25ec738820ca83991c299c +message_transformer_offramp: ../../../contracts/solc/ccip/MessageTransformerOffRamp/MessageTransformerOffRamp.sol/MessageTransformerOffRamp.abi.json ../../../contracts/solc/ccip/MessageTransformerOffRamp/MessageTransformerOffRamp.sol/MessageTransformerOffRamp.bin 115bc5363aed677b1b5172455b2d3bf8e7a468f1948f883aa1424efc008af494 +message_transformer_onramp: ../../../contracts/solc/ccip/MessageTransformerOnRamp/MessageTransformerOnRamp.sol/MessageTransformerOnRamp.abi.json ../../../contracts/solc/ccip/MessageTransformerOnRamp/MessageTransformerOnRamp.sol/MessageTransformerOnRamp.bin 82fd5197dd58c8f7a9fc97678e95fe05a1363625ff6c6335e4f8afd61f93b2c5 mock_usdc_token_messenger: ../../../contracts/solc/ccip/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.sol/MockE2EUSDCTokenMessenger.abi.json ../../../contracts/solc/ccip/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.sol/MockE2EUSDCTokenMessenger.bin ad7902d63667e582b93b2fad139aa53111f9fddcedf92b1d6d122d1ab7ec4bab mock_usdc_token_transmitter: ../../../contracts/solc/ccip/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.sol/MockE2EUSDCTransmitter.abi.json ../../../contracts/solc/ccip/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.sol/MockE2EUSDCTransmitter.bin ae0d090105bc248f4eccd337836ec1db760c506d6f5578e662305abbbc520fcd multi_aggregate_rate_limiter: ../../../contracts/solc/ccip/MultiAggregateRateLimiter/MultiAggregateRateLimiter.sol/MultiAggregateRateLimiter.abi.json ../../../contracts/solc/ccip/MultiAggregateRateLimiter/MultiAggregateRateLimiter.sol/MultiAggregateRateLimiter.bin d462b10c87ad74b73502c3c97a7fc53771b915adb9a0fbee781e744f3827d179 multi_ocr3_helper: ../../../contracts/solc/ccip/MultiOCR3Helper/MultiOCR3Helper.sol/MultiOCR3Helper.abi.json ../../../contracts/solc/ccip/MultiOCR3Helper/MultiOCR3Helper.sol/MultiOCR3Helper.bin 6fa79484ac09342282df342055494853521ea5332adaee0b709c6e21bcd17869 nonce_manager: ../../../contracts/solc/ccip/NonceManager/NonceManager.sol/NonceManager.abi.json ../../../contracts/solc/ccip/NonceManager/NonceManager.sol/NonceManager.bin ac76c64749ce07dd2ec1b9346d3401dcc5538253e516aecc4767c4308817ea59 -offramp: ../../../contracts/solc/ccip/OffRamp/OffRamp.sol/OffRamp.abi.json ../../../contracts/solc/ccip/OffRamp/OffRamp.sol/OffRamp.bin 0b6526e1dfc331b45fe742560622a6538d9f134b0aeb560e84cccc7802425be1 -onramp: ../../../contracts/solc/ccip/OnRamp/OnRamp.sol/OnRamp.abi.json ../../../contracts/solc/ccip/OnRamp/OnRamp.sol/OnRamp.bin a829e4efe4d8f600dc20589505701fbce872b09bc763b1a5abded28ef4a3afc9 +offramp: ../../../contracts/solc/ccip/OffRamp/OffRamp.sol/OffRamp.abi.json ../../../contracts/solc/ccip/OffRamp/OffRamp.sol/OffRamp.bin 4d6f96c46798e09a7cfebd5f568f4ace69f3b9edc5c02fd31e7d646f2c4fdc48 +onramp: ../../../contracts/solc/ccip/OnRamp/OnRamp.sol/OnRamp.abi.json ../../../contracts/solc/ccip/OnRamp/OnRamp.sol/OnRamp.bin 13e18920ef6c7e7d9b8f983b5031e70a60cc440e217d66600b6835277082690c ping_pong_demo: ../../../contracts/solc/ccip/PingPongDemo/PingPongDemo.sol/PingPongDemo.abi.json ../../../contracts/solc/ccip/PingPongDemo/PingPongDemo.sol/PingPongDemo.bin c87b6e1a8961a9dd2fab1eced0df12d0c1ef47bb1b2511f372b7e33443a20683 registry_module_owner_custom: ../../../contracts/solc/ccip/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.sol/RegistryModuleOwnerCustom.abi.json ../../../contracts/solc/ccip/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.sol/RegistryModuleOwnerCustom.bin ce04722cdea2e96d791e48c6a99f64559125d34cd24e19cfd5281892d2ed8ef0 report_codec: ../../../contracts/solc/ccip/ReportCodec/ReportCodec.sol/ReportCodec.abi.json ../../../contracts/solc/ccip/ReportCodec/ReportCodec.sol/ReportCodec.bin 5e66322fdcd40d601e1a55cfccfb9abe066b90297084d2db4f55dfe3ae7d0af2 diff --git a/core/gethwrappers/ccip/go_generate.go b/core/gethwrappers/ccip/go_generate.go index e1fa0e9150d..affe13b6ad9 100644 --- a/core/gethwrappers/ccip/go_generate.go +++ b/core/gethwrappers/ccip/go_generate.go @@ -4,6 +4,8 @@ package ccip //go:generate go run ../generation/wrap.go ccip CCIPHome ccip_home //go:generate go run ../generation/wrap.go ccip OnRamp onramp //go:generate go run ../generation/wrap.go ccip OffRamp offramp +//go:generate go run ../generation/wrap.go ccip MessageTransformerOnRamp message_transformer_onramp +//go:generate go run ../generation/wrap.go ccip MessageTransformerOffRamp message_transformer_offramp //go:generate go run ../generation/wrap.go ccip FeeQuoter fee_quoter //go:generate go run ../generation/wrap.go ccip NonceManager nonce_manager //go:generate go run ../generation/wrap.go ccip MultiAggregateRateLimiter multi_aggregate_rate_limiter