diff --git a/.github/workflows/solidity-foundry.yml b/.github/workflows/solidity-foundry.yml index 9380eb6f039..6b872dc2a0a 100644 --- a/.github/workflows/solidity-foundry.yml +++ b/.github/workflows/solidity-foundry.yml @@ -28,7 +28,7 @@ jobs: cat < matrix.json [ { "name": "automation", "setup": { "run-coverage": false, "min-coverage": 98.5, "run-gas-snapshot": false, "run-forge-fmt": false }}, - { "name": "ccip", "setup": { "run-coverage": true, "min-coverage": 97.6, "run-gas-snapshot": true, "run-forge-fmt": true }}, + { "name": "ccip", "setup": { "run-coverage": true, "min-coverage": 98.8, "run-gas-snapshot": true, "run-forge-fmt": true }}, { "name": "functions", "setup": { "run-coverage": false, "min-coverage": 98.5, "run-gas-snapshot": true, "run-forge-fmt": false }}, { "name": "keystone", "setup": { "run-coverage": true, "min-coverage": 72.8, "run-gas-snapshot": false, "run-forge-fmt": false }}, { "name": "l2ep", "setup": { "run-coverage": true, "min-coverage": 61.0, "run-gas-snapshot": true, "run-forge-fmt": false }}, diff --git a/.gitignore b/.gitignore index 7c0d863b3c6..718d4e4fe82 100644 --- a/.gitignore +++ b/.gitignore @@ -114,3 +114,4 @@ ocr_soak_report.csv vendor/* *.wasm +contracts/lcov.info diff --git a/contracts/.changeset/nice-rocks-trade.md b/contracts/.changeset/nice-rocks-trade.md new file mode 100644 index 00000000000..a60cfd4bd9b --- /dev/null +++ b/contracts/.changeset/nice-rocks-trade.md @@ -0,0 +1,9 @@ +--- +'@chainlink/contracts': patch +--- + +#internal Minor fixes and changing the order of removes/adds in feeToken config + +CCIP-3730 +CCIP-3727 +CCIP-3725 \ No newline at end of file diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 8bebd88b859..32e40e12fcd 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -19,7 +19,7 @@ BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 28842) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55271) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244092) BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 24189) -CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2108396) +CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2108354) CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 332601) CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 458549) CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 289173) @@ -67,7 +67,7 @@ CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 139 CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365381) DefensiveExampleTest:test_HappyPath_Success() (gas: 200048) DefensiveExampleTest:test_Recovery() (gas: 424306) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1518589) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1518475) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96909) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49796) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17435) @@ -95,8 +95,8 @@ FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxG FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitGtMaxPerMessageGasLimit_Revert() (gas: 41225) FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesZeroIntput_Success() (gas: 12484) FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_Success() (gas: 140316) -FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 80418) -FeeQuoter_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 12709) +FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 162560) +FeeQuoter_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 12287) FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 11547) FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesMultipleTokens_Success() (gas: 54662) FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesSingleToken_Success() (gas: 45153) @@ -108,7 +108,7 @@ FeeQuoter_applyTokenTransferFeeConfigUpdates:test_OnlyCallableByOwnerOrAdmin_Rev FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 106589) FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 110939) FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 110992) -FeeQuoter_constructor:test_Setup_Success() (gas: 5020729) +FeeQuoter_constructor:test_Setup_Success() (gas: 5020726) FeeQuoter_convertTokenAmount:test_ConvertTokenAmount_Success() (gas: 68361) FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 29076) FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 96045) @@ -338,10 +338,10 @@ NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 25 NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 221424) NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 60382) NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 153546) -NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 166058) -NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 195655) -NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 139121) -NonceManager_OnRampUpgrade:test_Upgrade_Success() (gas: 105181) +NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 166070) +NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 195673) +NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 139139) +NonceManager_OnRampUpgrade:test_Upgrade_Success() (gas: 105187) NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates_success() (gas: 123118) NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOffRamp_Revert() (gas: 43282) NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRampAndOffRamp_Revert() (gas: 64610) @@ -350,7 +350,7 @@ NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllow NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 66658) NonceManager_applyPreviousRampsUpdates:test_ZeroInput_success() (gas: 12114) NonceManager_typeAndVersion:test_typeAndVersion() (gas: 9705) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5914022) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5917222) OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626106) OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166490) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16741) @@ -374,8 +374,8 @@ OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 61590) OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68151) OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291) OffRamp_commit:test_InvalidRootRevert() (gas: 63356) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6674770) -OffRamp_commit:test_NoConfig_Revert() (gas: 6258376) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6677970) +OffRamp_commit:test_NoConfig_Revert() (gas: 6261576) OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113033) OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121381) OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113032) @@ -389,7 +389,7 @@ OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125387) OffRamp_commit:test_Unhealthy_Revert() (gas: 58656) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206691) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) -OffRamp_constructor:test_Constructor_Success() (gas: 6219776) +OffRamp_constructor:test_Constructor_Success() (gas: 6222976) OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 135943) OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103375) OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101251) @@ -400,12 +400,12 @@ OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) OffRamp_execute:test_LargeBatch_Success() (gas: 3426335) OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372990) OffRamp_execute:test_MultipleReports_Success() (gas: 300979) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7083599) -OffRamp_execute:test_NoConfig_Revert() (gas: 6308074) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7086799) +OffRamp_execute:test_NoConfig_Revert() (gas: 6311274) OffRamp_execute:test_NonArray_Revert() (gas: 27562) OffRamp_execute:test_SingleReport_Success() (gas: 176354) OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148372) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7086348) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7089548) OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18511) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244079) @@ -418,7 +418,7 @@ OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Rev OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 274196) OffRamp_executeSingleMessage:test_executeSingleMessage_WithVInterception_Success() (gas: 91724) OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28282) -OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 22084) +OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 22637) OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 481794) OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48394) OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 33981) @@ -484,41 +484,41 @@ OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219355) OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 227977) OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 295396) OffRamp_trialExecute:test_trialExecute_Success() (gas: 277874) -OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 250817) -OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 18018) -OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Revert() (gas: 67797) -OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Success() (gas: 325198) -OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 65878) -OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInvalidChainSelector_Revert() (gas: 13631) -OnRamp_constructor:test_Constructor_EnableAllowList_ForwardFromRouter_Reverts() (gas: 2673599) -OnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 95261) -OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 93203) -OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 98224) -OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 93237) -OnRamp_constructor:test_Constructor_Success() (gas: 2753310) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 115345) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 146168) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145743) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 143970) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 145940) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 145338) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 140701) -OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 38554) -OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 143029) -OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 36619) -OnRamp_forwardFromRouter:test_MultiCannotSendZeroTokens_Revert() (gas: 36505) +OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 250779) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17209) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 67048) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Success() (gas: 325706) +OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 64956) +OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInvalidChainSelector_Revert() (gas: 12823) +OnRamp_constructor:test_Constructor_EnableAllowList_ForwardFromRouter_Reverts() (gas: 2682420) +OnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 95269) +OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 93211) +OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 98232) +OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 93245) +OnRamp_constructor:test_Constructor_Success() (gas: 2762169) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 115351) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 146174) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145749) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 143976) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 145946) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 145344) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 140719) +OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 38560) +OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 143078) +OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 36625) +OnRamp_forwardFromRouter:test_MultiCannotSendZeroTokens_Revert() (gas: 36511) OnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 18269) -OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 38454) -OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 23663) -OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 186510) -OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 212894) -OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 146972) -OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 161077) -OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3615263) -OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 24010) -OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 75844) -OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 38577) -OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 280252) +OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 38460) +OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 23669) +OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 186396) +OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 212780) +OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 146978) +OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 161083) +OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3615293) +OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 24016) +OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 75850) +OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 38583) +OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 280301) OnRamp_getFee:test_EmptyMessage_Success() (gas: 98597) OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 65467) OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 86990) @@ -526,19 +526,19 @@ OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 35092) OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 113770) OnRamp_getFee:test_Unhealthy_Revert() (gas: 17039) OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10474) -OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35348) +OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35282) OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeAggregatorEqAddressZero_Revert() (gas: 11581) OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeQuoterEqAddressZero_Revert() (gas: 13195) OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigInvalidConfig_Revert() (gas: 11522) OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigOnlyOwner_Revert() (gas: 16850) OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigReentrancyGuardEnteredEqTrue_Revert() (gas: 13243) -OnRamp_setDynamicConfig:test_setDynamicConfig_Success() (gas: 56347) -OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97302) -PingPong_ccipReceive:test_CcipReceive_Success() (gas: 172594) +OnRamp_setDynamicConfig:test_setDynamicConfig_Success() (gas: 56390) +OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97325) +PingPong_ccipReceive:test_CcipReceive_Success() (gas: 172600) PingPong_plumbing:test_OutOfOrderExecution_Success() (gas: 20240) PingPong_plumbing:test_Pausing_Success() (gas: 17718) -PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 153730) -PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 179367) +PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 153736) +PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 179373) RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateOffchainPublicKey_reverts() (gas: 18822) RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicatePeerId_reverts() (gas: 18660) RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateSourceChain_reverts() (gas: 20371) @@ -606,20 +606,20 @@ Router_applyRampUpdates:test_OffRampMismatch_Revert() (gas: 89366) Router_applyRampUpdates:test_OffRampUpdatesWithRouting() (gas: 10663332) Router_applyRampUpdates:test_OnRampDisable() (gas: 56007) Router_applyRampUpdates:test_OnlyOwner_Revert() (gas: 12334) -Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 131245) -Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 220967) +Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 131251) +Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 220951) Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 71652) Router_ccipSend:test_InvalidMsgValue() (gas: 32267) Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 69340) -Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 192944) +Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 192950) Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 61388) -Router_ccipSend:test_NativeFeeToken_Success() (gas: 191570) -Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 226364) +Router_ccipSend:test_NativeFeeToken_Success() (gas: 191576) +Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 226370) Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 24900) Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 44902) -Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 193814) -Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 140506) -Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 230141) +Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 193820) +Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 140512) +Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 230125) Router_constructor:test_Constructor_Success() (gas: 13076) Router_getArmProxy:test_getArmProxy() (gas: 10573) Router_getFee:test_GetFeeSupportedChain_Success() (gas: 51693) diff --git a/contracts/src/v0.8/ccip/FeeQuoter.sol b/contracts/src/v0.8/ccip/FeeQuoter.sol index 31ed3428e30..66f63c7c720 100644 --- a/contracts/src/v0.8/ccip/FeeQuoter.sol +++ b/contracts/src/v0.8/ccip/FeeQuoter.sol @@ -1,10 +1,13 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.24; +import {IReceiver} from "../keystone/interfaces/IReceiver.sol"; import {ITypeAndVersion} from "../shared/interfaces/ITypeAndVersion.sol"; import {IFeeQuoter} from "./interfaces/IFeeQuoter.sol"; import {IPriceRegistry} from "./interfaces/IPriceRegistry.sol"; +import {KeystoneFeedsPermissionHandler} from "../keystone/KeystoneFeedsPermissionHandler.sol"; +import {KeystoneFeedDefaultMetadataLib} from "../keystone/lib/KeystoneFeedDefaultMetadataLib.sol"; import {AuthorizedCallers} from "../shared/access/AuthorizedCallers.sol"; import {AggregatorV3Interface} from "./../shared/interfaces/AggregatorV3Interface.sol"; import {Client} from "./libraries/Client.sol"; @@ -12,9 +15,6 @@ import {Internal} from "./libraries/Internal.sol"; import {Pool} from "./libraries/Pool.sol"; import {USDPriceWith18Decimals} from "./libraries/USDPriceWith18Decimals.sol"; -import {KeystoneFeedsPermissionHandler} from "../keystone/KeystoneFeedsPermissionHandler.sol"; -import {IReceiver} from "../keystone/interfaces/IReceiver.sol"; -import {KeystoneFeedDefaultMetadataLib} from "../keystone/lib/KeystoneFeedDefaultMetadataLib.sol"; import {EnumerableSet} from "../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/structs/EnumerableSet.sol"; /// @notice The FeeQuoter contract responsibility is to: @@ -59,8 +59,8 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, /// @dev Token price data feed configuration struct TokenPriceFeedConfig { - address dataFeedAddress; // ──╮ AggregatorV3Interface contract (0 - feed is unset) - uint8 tokenDecimals; // ──────╯ Decimals of the token that the feed represents + address dataFeedAddress; // ─╮ AggregatorV3Interface contract (0 - feed is unset) + uint8 tokenDecimals; // ─────╯ Decimals of the token that the feed represents } /// @dev Token price data feed update @@ -81,9 +81,9 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, /// @dev The struct representing the received CCIP feed report from keystone IReceiver.onReport() struct ReceivedCCIPFeedReport { - address token; // Token address - uint224 price; // ─────────╮ Price of the token in USD with 18 decimals - uint32 timestamp; // ──────╯ Timestamp of the price update + address token; // Token address + uint224 price; // ────╮ Price of the token in USD with 18 decimals + uint32 timestamp; // ─╯ Timestamp of the price update } /// @dev Struct to hold the fee & validation configs for a destination chain @@ -119,13 +119,13 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, /// @dev Struct to hold the transfer fee configuration for token transfers struct TokenTransferFeeConfig { - uint32 minFeeUSDCents; // ──────────╮ Minimum fee to charge per token transfer, multiples of 0.01 USD - uint32 maxFeeUSDCents; // │ Maximum fee to charge per token transfer, multiples of 0.01 USD - uint16 deciBps; // │ Basis points charged on token transfers, multiples of 0.1bps, or 1e-5 - uint32 destGasOverhead; // │ Gas charged to execute the token transfer on the destination chain - // │ Extra data availability bytes that are returned from the source pool and sent - uint32 destBytesOverhead; // │ to the destination pool. Must be >= Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES - bool isEnabled; // ─────────────────╯ Whether this token has custom transfer fees + uint32 minFeeUSDCents; // ────╮ Minimum fee to charge per token transfer, multiples of 0.01 USD + uint32 maxFeeUSDCents; // │ Maximum fee to charge per token transfer, multiples of 0.01 USD + uint16 deciBps; // │ Basis points charged on token transfers, multiples of 0.1bps, or 1e-5 + uint32 destGasOverhead; // │ Gas charged to execute the token transfer on the destination chain + // │ Extra data availability bytes that are returned from the source pool and sent + uint32 destBytesOverhead; // │ to the destination pool. Must be >= Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES + bool isEnabled; // ───────────╯ Whether this token has custom transfer fees } /// @dev Struct to hold the token transfer fee configurations for a token, same as TokenTransferFeeConfig but with the token address included so @@ -154,8 +154,8 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, /// the token address included so that an array of these can be passed in the constructor and /// applyPremiumMultiplierWeiPerEthUpdates to set the mapping struct PremiumMultiplierWeiPerEthArgs { - address token; // // ───────────────────╮ Token address - uint64 premiumMultiplierWeiPerEth; // ──╯ Multiplier for destination chain specific premiums. + address token; // // ──────────────────╮ Token address + uint64 premiumMultiplierWeiPerEth; // ─╯ Multiplier for destination chain specific premiums. } /// @dev The base decimals for cost calculations @@ -196,7 +196,7 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, mapping(uint64 destChainSelector => mapping(address token => TokenTransferFeeConfig tranferFeeConfig)) private s_tokenTransferFeeConfig; - /// @dev Maximum fee that can be charged for a message. This is a guard to prevent massively overcharging due to misconfiguation. + /// @dev Maximum fee that can be charged for a message. This is a guard to prevent massively overcharging due to misconfiguration. uint96 internal immutable i_maxFeeJuelsPerMsg; /// @dev The link token address address internal immutable i_linkToken; @@ -226,7 +226,7 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, i_maxFeeJuelsPerMsg = staticConfig.maxFeeJuelsPerMsg; i_tokenPriceStalenessThreshold = staticConfig.tokenPriceStalenessThreshold; - _applyFeeTokensUpdates(feeTokens, new address[](0)); + _applyFeeTokensUpdates(new address[](0), feeTokens); _updateTokenPriceFeeds(tokenPriceFeeds); _applyDestChainConfigUpdates(destChainConfigArgs); _applyPremiumMultiplierWeiPerEthUpdates(premiumMultiplierWeiPerEthArgs); @@ -418,27 +418,27 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, /// @param feeTokensToAdd The addresses of the tokens which are now considered fee tokens /// and can be used to calculate fees. function applyFeeTokensUpdates( - address[] memory feeTokensToAdd, - address[] memory feeTokensToRemove + address[] memory feeTokensToRemove, + address[] memory feeTokensToAdd ) external onlyOwner { - _applyFeeTokensUpdates(feeTokensToAdd, feeTokensToRemove); + _applyFeeTokensUpdates(feeTokensToRemove, feeTokensToAdd); } /// @notice Add and remove tokens from feeTokens set. /// @param feeTokensToRemove The addresses of the tokens which are no longer considered feeTokens. /// @param feeTokensToAdd The addresses of the tokens which are now considered fee tokens /// and can be used to calculate fees. - function _applyFeeTokensUpdates(address[] memory feeTokensToAdd, address[] memory feeTokensToRemove) private { - for (uint256 i = 0; i < feeTokensToAdd.length; ++i) { - if (s_feeTokens.add(feeTokensToAdd[i])) { - emit FeeTokenAdded(feeTokensToAdd[i]); - } - } + function _applyFeeTokensUpdates(address[] memory feeTokensToRemove, address[] memory feeTokensToAdd) private { for (uint256 i = 0; i < feeTokensToRemove.length; ++i) { if (s_feeTokens.remove(feeTokensToRemove[i])) { emit FeeTokenRemoved(feeTokensToRemove[i]); } } + for (uint256 i = 0; i < feeTokensToAdd.length; ++i) { + if (s_feeTokens.add(feeTokensToAdd[i])) { + emit FeeTokenAdded(feeTokensToAdd[i]); + } + } } // ================================================================ @@ -449,7 +449,7 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, function updatePrices( Internal.PriceUpdates calldata priceUpdates ) external override { - // The caller must be the fee updater + // The caller must be a fee updater _validateCaller(); uint256 tokenUpdatesLength = priceUpdates.tokenPriceUpdates.length; @@ -512,7 +512,7 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, revert TokenNotSupported(feeds[i].token); } // Keystone reports prices in USD with 18 decimals, so we passing it as 18 in the _calculateRebasedValue function - uint224 rebasedValue = _calculateRebasedValue(18, tokenDecimals, feeds[i].price); + uint224 rebasedValue = _calculateRebasedValue(uint8(KEYSTONE_PRICE_DECIMALS), tokenDecimals, feeds[i].price); //if stale update then revert if (feeds[i].timestamp < s_usdPerToken[feeds[i].token].timestamp) { @@ -1017,7 +1017,8 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, revert InvalidDestChainConfig(destChainSelector); } - // The chain family selector cannot be zero - indicates that it is a new chain + // If the chain family selector is zero, it indicates that the chain was never configured and we + // are adding a new chain if (s_destChainConfigs[destChainSelector].chainFamilySelector == 0) { emit DestChainAdded(destChainSelector, destChainConfig); } else { diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index c8182d96f84..e67b2a82f03 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -12,7 +12,6 @@ import {IRouter} from "../interfaces/IRouter.sol"; import {ITokenAdminRegistry} from "../interfaces/ITokenAdminRegistry.sol"; import {CallWithExactGas} from "../../shared/call/CallWithExactGas.sol"; -import {EnumerableMapAddresses} from "../../shared/enumerable/EnumerableMapAddresses.sol"; import {Client} from "../libraries/Client.sol"; import {Internal} from "../libraries/Internal.sol"; import {MerkleMultiProof} from "../libraries/MerkleMultiProof.sol"; @@ -32,7 +31,6 @@ import {EnumerableSet} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts /// plugin type with verification. contract OffRamp is ITypeAndVersion, MultiOCR3Base { using ERC165Checker for address; - using EnumerableMapAddresses for EnumerableMapAddresses.AddressToAddressMap; using EnumerableSet for EnumerableSet.UintSet; error ZeroChainSelectorNotAllowed(); @@ -54,7 +52,8 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { error ReceiverError(bytes err); error TokenHandlingError(bytes err); error ReleaseOrMintBalanceMismatch(uint256 amountReleased, uint256 balancePre, uint256 balancePost); - error EmptyReport(); + error EmptyReport(uint64 sourceChainSelector); + error EmptyBatch(); error CursedByRMN(uint64 sourceChainSelector); error NotACompatiblePool(address notPool); error InvalidDataLength(uint256 expected, uint256 got); @@ -340,7 +339,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { Internal.ExecutionReport[] memory reports, GasLimitOverride[][] memory manualExecGasOverrides ) internal { - if (reports.length == 0) revert EmptyReport(); + if (reports.length == 0) revert EmptyBatch(); bool areManualGasLimitsEmpty = manualExecGasOverrides.length == 0; // Cache array for gas savings in the loop's condition @@ -375,7 +374,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { bytes memory onRamp = _getEnabledSourceChainConfig(sourceChainSelector).onRamp; uint256 numMsgs = report.messages.length; - if (numMsgs == 0) revert EmptyReport(); + if (numMsgs == 0) revert EmptyReport(report.sourceChainSelector); if (numMsgs != report.offchainTokenData.length) revert UnexpectedTokenData(); bytes32[] memory hashedLeaves = new bytes32[](numMsgs); @@ -445,7 +444,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { bool isOldCommitReport = (block.timestamp - timestampCommitted) > s_dynamicConfig.permissionLessExecutionThresholdSeconds; // Manually execution is fine if we previously failed or if the commit report is just too old - // Acceptable state transitions: FAILURE->SUCCESS, UNTOUCHED->SUCCESS, FAILURE->FAILURE + // Acceptable state transitions: UNTOUCHED->SUCCESS, UNTOUCHED->FAILURE, FAILURE->SUCCESS if (!(isOldCommitReport || originalState == Internal.MessageExecutionState.FAILURE)) { revert ManualExecutionNotYetEnabled(sourceChainSelector); } @@ -466,7 +465,6 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // Nonce changes per state transition (these only apply for ordered messages): // UNTOUCHED -> FAILURE nonce bump // UNTOUCHED -> SUCCESS nonce bump - // FAILURE -> FAILURE no nonce bump // FAILURE -> SUCCESS no nonce bump // UNTOUCHED messages MUST be executed in order always // If nonce == 0 then out of order execution is allowed @@ -493,9 +491,8 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { _trialExecute(message, offchainTokenData, tokenGasOverrides); _setExecutionState(sourceChainSelector, message.header.sequenceNumber, newState); - // Since it's hard to estimate whether manual execution will succeed, we - // revert the entire transaction if it fails. This will show the user if - // their manual exec will fail before they submit it. + // Since it's hard to estimate whether manual execution will succeed, we revert the entire transaction + // if it fails. This will show the user if their manual exec will fail before they submit it. if (manualExecution) { if (newState == Internal.MessageExecutionState.FAILURE) { if (originalState != Internal.MessageExecutionState.UNTOUCHED) { @@ -678,7 +675,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // Wrap and rethrow the error so we can catch it lower in the stack if (!success) revert TokenHandlingError(returnData); - // If the call was successful, the returnData should be the local token address. + // If the call was successful, the returnData should be the local token amount. if (returnData.length != Pool.CCIP_POOL_V1_RET_BYTES) { revert InvalidDataLength(Pool.CCIP_POOL_V1_RET_BYTES, returnData.length); } @@ -734,6 +731,8 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { /// @param receiver The address that will receive the tokens. /// @param sourceChainSelector The remote source chain selector. /// @param offchainTokenData Array of token data fetched offchain by the DON. + /// @param tokenGasOverrides Array of override gas limits to use for token transfers. If empty, the normal gas limit + /// as defined on the source chain is used. /// @return destTokenAmounts local token addresses with amounts /// @dev This function wraps the token pool call in a try catch block to gracefully handle /// any non-rate limiting errors that may occur. If we encounter a rate limiting related error @@ -974,8 +973,8 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { } else { if (currentConfig.minSeqNr != 1) { // OnRamp updates should only happens due to a misconfiguration - // If an OnRamp is misconfigured not reports should have been committed and no messages should have been executed - // This is enforced byt the onRamp address check in the commit function + // If an OnRamp is misconfigured, no reports should have been committed and no messages should have been executed + // This is enforced by the onRamp address check in the commit function revert InvalidOnRampUpdate(sourceChainSelector); } } diff --git a/contracts/src/v0.8/ccip/onRamp/OnRamp.sol b/contracts/src/v0.8/ccip/onRamp/OnRamp.sol index d7af0d9eb2a..0fff94ee4fc 100644 --- a/contracts/src/v0.8/ccip/onRamp/OnRamp.sol +++ b/contracts/src/v0.8/ccip/onRamp/OnRamp.sol @@ -21,7 +21,7 @@ import {IERC20} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ import {SafeERC20} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/utils/SafeERC20.sol"; import {EnumerableSet} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/structs/EnumerableSet.sol"; -/// @notice The OnRamp is a contract that handles lane-specific fee logic +/// @notice The OnRamp is a contract that handles lane-specific fee logic. /// @dev The OnRamp and OffRamp form an xchain upgradeable unit. Any change to one of them /// results in an onchain upgrade of all 3. contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { @@ -44,14 +44,14 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { event ConfigSet(StaticConfig staticConfig, DynamicConfig dynamicConfig); event DestChainConfigSet( - uint64 indexed destChainSelector, uint64 sequenceNumber, IRouter router, bool allowListEnabled + uint64 indexed destChainSelector, uint64 sequenceNumber, IRouter router, bool allowlistEnabled ); event FeeTokenWithdrawn(address indexed feeAggregator, address indexed feeToken, uint256 amount); /// RMN depends on this event, if changing, please notify the RMN maintainers. event CCIPMessageSent( uint64 indexed destChainSelector, uint64 indexed sequenceNumber, Internal.EVM2AnyRampMessage message ); - event AllowListAdminSet(address indexed allowListAdmin); + event AllowListAdminSet(address indexed allowlistAdmin); event AllowListSendersAdded(uint64 indexed destChainSelector, address[] senders); event AllowListSendersRemoved(uint64 indexed destChainSelector, address[] senders); @@ -59,9 +59,9 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { /// RMN depends on this struct, if changing, please notify the RMN maintainers. // solhint-disable-next-line gas-struct-packing struct StaticConfig { - uint64 chainSelector; // ─────╮ Source chain selector - IRMNRemote rmnRemote; // ─────╯ RMN remote address - address nonceManager; // Nonce manager address + uint64 chainSelector; // ────╮ Source chain selector + IRMNRemote rmnRemote; // ────╯ RMN remote address + address nonceManager; // Nonce manager address address tokenAdminRegistry; // Token admin registry address } @@ -70,41 +70,35 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { struct DynamicConfig { address feeQuoter; // FeeQuoter address bool reentrancyGuardEntered; // Reentrancy protection - address messageInterceptor; // Optional message interceptor to validate outbound messages (zero address = no interceptor) + address messageInterceptor; // Optional message interceptor to validate outbound messages. Zero address = no interceptor address feeAggregator; // Fee aggregator address - address allowListAdmin; // authorized admin to add or remove allowed senders + address allowlistAdmin; // authorized admin to add or remove allowed senders } /// @dev Struct to hold the configs for a destination chain - /// @dev sequenceNumber, allowListEnabled, router will all be packed in 1 slot + /// @dev sequenceNumber, allowlistEnabled, router will all be packed in 1 slot struct DestChainConfig { // The last used sequence number. This is zero in the case where no messages have yet been sent. // 0 is not a valid sequence number for any real transaction. - uint64 sequenceNumber; // ──────╮ The last used sequence number - bool allowListEnabled; // │ boolean indicator to specify if allowList check is enabled - IRouter router; // ─────────────╯ Local router address that is allowed to send messages to the destination chain. - // This is the list of addresses allowed to send messages from onRamp - EnumerableSet.AddressSet allowedSendersList; + uint64 sequenceNumber; // ──╮ The last used sequence number. + bool allowlistEnabled; // │ boolean indicator to specify if allowlist check is enabled. + IRouter router; // ─────────╯ Local router address that is allowed to send messages to the destination chain. + EnumerableSet.AddressSet allowedSendersList; // The list of addresses allowed to send messages. } /// @dev Same as DestChainConfig but with the destChainSelector so that an array of these /// can be passed in the constructor and the applyDestChainConfigUpdates function - //solhint-disable gas-struct-packing + // solhint-disable gas-struct-packing struct DestChainConfigArgs { uint64 destChainSelector; // ─╮ Destination chain selector IRouter router; // │ Source router address - bool allowListEnabled; //─────╯ Boolean indicator to specify if allowList check is enabled + bool allowlistEnabled; // ────╯ Boolean indicator to specify if allowlist check is enabled } - /// @dev Struct used to apply AllowList Senders for multiple destChainSelectors - /// @dev the senders in the AllowlistedSenders here is the user that sends the message - /// @dev the config restricts the chain to allow only allowedList of senders to send message from this chain to a destChainSelector - /// @dev destChainSelector, allowListEnabled will be packed in 1 slot - //solhint-disable gas-struct-packing - struct AllowListConfigArgs { - uint64 destChainSelector; // ─────────────╮ Destination chain selector - // │ destChainSelector and allowListEnabled are packed in the same slot - bool allowListEnabled; // ────────────────╯ boolean indicator to specify if allowList check is enabled. + /// @dev Struct to hold the allowlist configuration args per dest chain. + struct AllowlistConfigArgs { + uint64 destChainSelector; // ──╮ Destination chain selector. + bool allowlistEnabled; // ─────╯ True if the allowlist is enabled. address[] addedAllowlistedSenders; // list of senders to be added to the allowedSendersList address[] removedAllowlistedSenders; // list of senders to be removed from the allowedSendersList } @@ -180,7 +174,7 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { // Validate message sender is set and allowed. Not validated in `getFee` since it is not user-driven. if (originalSender == address(0)) revert RouterMustSetOriginalSender(); - if (destChainConfig.allowListEnabled) { + if (destChainConfig.allowlistEnabled) { if (!destChainConfig.allowedSendersList.contains(originalSender)) { revert SenderNotAllowed(originalSender); } @@ -389,11 +383,12 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { } DestChainConfig storage destChainConfig = s_destChainConfigs[destChainSelector]; + // The router can be zero to pause the destination chain destChainConfig.router = destChainConfigArg.router; - destChainConfig.allowListEnabled = destChainConfigArg.allowListEnabled; + destChainConfig.allowlistEnabled = destChainConfigArg.allowlistEnabled; emit DestChainConfigSet( - destChainSelector, destChainConfig.sequenceNumber, destChainConfigArg.router, destChainConfig.allowListEnabled + destChainSelector, destChainConfig.sequenceNumber, destChainConfigArg.router, destChainConfig.allowlistEnabled ); } } @@ -401,72 +396,79 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { /// @notice get ChainConfig configured for the DestinationChainSelector /// @param destChainSelector The destination chain selector /// @return sequenceNumber The last used sequence number - /// @return allowListEnabled boolean indicator to specify if allowList check is enabled + /// @return allowlistEnabled boolean indicator to specify if allowlist check is enabled /// @return router address of the router function getDestChainConfig( uint64 destChainSelector - ) public view returns (uint64 sequenceNumber, bool allowListEnabled, address router) { + ) public view returns (uint64 sequenceNumber, bool allowlistEnabled, address router) { DestChainConfig storage config = s_destChainConfigs[destChainSelector]; sequenceNumber = config.sequenceNumber; - allowListEnabled = config.allowListEnabled; + allowlistEnabled = config.allowlistEnabled; router = address(config.router); - return (sequenceNumber, allowListEnabled, router); + return (sequenceNumber, allowlistEnabled, router); } /// @notice get allowedSenders List configured for the DestinationChainSelector /// @param destChainSelector The destination chain selector - /// @return array of allowedList of Senders + /// @return isEnabled True if allowlist is enabled + /// @return configuredAddresses This is always populated with the list of allowed senders, even if the allowlist + /// is turned off. This is because the only way to know what addresses are configured is through this function. If + /// it would return an empty list when the allowlist is disabled, it would be impossible to know what addresses are + /// configured. function getAllowedSendersList( uint64 destChainSelector - ) public view returns (address[] memory) { - return s_destChainConfigs[destChainSelector].allowedSendersList.values(); + ) public view returns (bool isEnabled, address[] memory configuredAddresses) { + return ( + s_destChainConfigs[destChainSelector].allowlistEnabled, + s_destChainConfigs[destChainSelector].allowedSendersList.values() + ); } // ================================================================ // │ Allowlist │ // ================================================================ - /// @notice Updates allowListConfig for Senders + /// @notice Updates allowlistConfig for Senders /// @dev configuration used to set the list of senders who are authorized to send messages - /// @param allowListConfigArgsItems Array of AllowListConfigArguments where each item is for a destChainSelector - function applyAllowListUpdates( - AllowListConfigArgs[] calldata allowListConfigArgsItems + /// @param allowlistConfigArgsItems Array of AllowlistConfigArguments where each item is for a destChainSelector + function applyAllowlistUpdates( + AllowlistConfigArgs[] calldata allowlistConfigArgsItems ) external { if (msg.sender != owner()) { - if (msg.sender != s_dynamicConfig.allowListAdmin) { + if (msg.sender != s_dynamicConfig.allowlistAdmin) { revert OnlyCallableByOwnerOrAllowlistAdmin(); } } - for (uint256 i = 0; i < allowListConfigArgsItems.length; ++i) { - AllowListConfigArgs memory allowListConfigArgs = allowListConfigArgsItems[i]; + for (uint256 i = 0; i < allowlistConfigArgsItems.length; ++i) { + AllowlistConfigArgs memory allowlistConfigArgs = allowlistConfigArgsItems[i]; - DestChainConfig storage destChainConfig = s_destChainConfigs[allowListConfigArgs.destChainSelector]; - destChainConfig.allowListEnabled = allowListConfigArgs.allowListEnabled; + DestChainConfig storage destChainConfig = s_destChainConfigs[allowlistConfigArgs.destChainSelector]; + destChainConfig.allowlistEnabled = allowlistConfigArgs.allowlistEnabled; - if (allowListConfigArgs.addedAllowlistedSenders.length > 0) { - if (allowListConfigArgs.allowListEnabled) { - for (uint256 j = 0; j < allowListConfigArgs.addedAllowlistedSenders.length; ++j) { - address toAdd = allowListConfigArgs.addedAllowlistedSenders[j]; + if (allowlistConfigArgs.addedAllowlistedSenders.length > 0) { + if (allowlistConfigArgs.allowlistEnabled) { + for (uint256 j = 0; j < allowlistConfigArgs.addedAllowlistedSenders.length; ++j) { + address toAdd = allowlistConfigArgs.addedAllowlistedSenders[j]; if (toAdd == address(0)) { - revert InvalidAllowListRequest(allowListConfigArgs.destChainSelector); + revert InvalidAllowListRequest(allowlistConfigArgs.destChainSelector); } destChainConfig.allowedSendersList.add(toAdd); } - emit AllowListSendersAdded(allowListConfigArgs.destChainSelector, allowListConfigArgs.addedAllowlistedSenders); + emit AllowListSendersAdded(allowlistConfigArgs.destChainSelector, allowlistConfigArgs.addedAllowlistedSenders); } else { - revert InvalidAllowListRequest(allowListConfigArgs.destChainSelector); + revert InvalidAllowListRequest(allowlistConfigArgs.destChainSelector); } } - for (uint256 j = 0; j < allowListConfigArgs.removedAllowlistedSenders.length; ++j) { - destChainConfig.allowedSendersList.remove(allowListConfigArgs.removedAllowlistedSenders[j]); + for (uint256 j = 0; j < allowlistConfigArgs.removedAllowlistedSenders.length; ++j) { + destChainConfig.allowedSendersList.remove(allowlistConfigArgs.removedAllowlistedSenders[j]); } - if (allowListConfigArgs.removedAllowlistedSenders.length > 0) { + if (allowlistConfigArgs.removedAllowlistedSenders.length > 0) { emit AllowListSendersRemoved( - allowListConfigArgs.destChainSelector, allowListConfigArgs.removedAllowlistedSenders + allowlistConfigArgs.destChainSelector, allowlistConfigArgs.removedAllowlistedSenders ); } } diff --git a/contracts/src/v0.8/ccip/pools/TokenPool.sol b/contracts/src/v0.8/ccip/pools/TokenPool.sol index e3b4e92055e..c7e63e31e91 100644 --- a/contracts/src/v0.8/ccip/pools/TokenPool.sol +++ b/contracts/src/v0.8/ccip/pools/TokenPool.sol @@ -80,7 +80,7 @@ abstract contract TokenPool is IPoolV1, OwnerIsCreator { /// Only takes effect if i_allowlistEnabled is true. /// This can be used to ensure only token-issuer specified addresses can /// move tokens. - EnumerableSet.AddressSet internal s_allowList; + EnumerableSet.AddressSet internal s_allowlist; /// @dev The address of the router IRouter internal s_router; /// @dev A set of allowed chain selectors. We want the allowlist to be enumerable to @@ -416,13 +416,13 @@ abstract contract TokenPool is IPoolV1, OwnerIsCreator { address sender ) internal view { if (i_allowlistEnabled) { - if (!s_allowList.contains(sender)) { + if (!s_allowlist.contains(sender)) { revert SenderNotAllowed(sender); } } } - /// @notice Gets whether the allowList functionality is enabled. + /// @notice Gets whether the allowlist functionality is enabled. /// @return true is enabled, false if not. function getAllowListEnabled() external view returns (bool) { return i_allowlistEnabled; @@ -431,7 +431,7 @@ abstract contract TokenPool is IPoolV1, OwnerIsCreator { /// @notice Gets the allowed addresses. /// @return The allowed addresses. function getAllowList() external view returns (address[] memory) { - return s_allowList.values(); + return s_allowlist.values(); } /// @notice Apply updates to the allow list. @@ -447,7 +447,7 @@ abstract contract TokenPool is IPoolV1, OwnerIsCreator { for (uint256 i = 0; i < removes.length; ++i) { address toRemove = removes[i]; - if (s_allowList.remove(toRemove)) { + if (s_allowlist.remove(toRemove)) { emit AllowListRemove(toRemove); } } @@ -456,7 +456,7 @@ abstract contract TokenPool is IPoolV1, OwnerIsCreator { if (toAdd == address(0)) { continue; } - if (s_allowList.add(toAdd)) { + if (s_allowlist.add(toAdd)) { emit AllowListAdd(toAdd); } } diff --git a/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol b/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol index c2dc8d1592f..36ccb14da93 100644 --- a/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol +++ b/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol @@ -398,32 +398,47 @@ contract FeeQuoter_applyFeeTokensUpdates is FeeQuoterSetup { vm.expectEmit(); emit FeeQuoter.FeeTokenAdded(feeTokens[0]); - s_feeQuoter.applyFeeTokensUpdates(feeTokens, new address[](0)); + s_feeQuoter.applyFeeTokensUpdates(new address[](0), feeTokens); assertEq(s_feeQuoter.getFeeTokens().length, 3); assertEq(s_feeQuoter.getFeeTokens()[2], feeTokens[0]); // add same feeToken is no-op - s_feeQuoter.applyFeeTokensUpdates(feeTokens, new address[](0)); + s_feeQuoter.applyFeeTokensUpdates(new address[](0), feeTokens); assertEq(s_feeQuoter.getFeeTokens().length, 3); assertEq(s_feeQuoter.getFeeTokens()[2], feeTokens[0]); vm.expectEmit(); emit FeeQuoter.FeeTokenRemoved(feeTokens[0]); - s_feeQuoter.applyFeeTokensUpdates(new address[](0), feeTokens); + s_feeQuoter.applyFeeTokensUpdates(feeTokens, new address[](0)); assertEq(s_feeQuoter.getFeeTokens().length, 2); - // removing already removed feeToken is no-op - s_feeQuoter.applyFeeTokensUpdates(new address[](0), feeTokens); + // removing already removed feeToken is no-op and does not emit an event + vm.recordLogs(); + + s_feeQuoter.applyFeeTokensUpdates(feeTokens, new address[](0)); assertEq(s_feeQuoter.getFeeTokens().length, 2); + + vm.assertEq(vm.getRecordedLogs().length, 0); + + // Removing and adding the same fee token is allowed and emits both events + // Add it first + s_feeQuoter.applyFeeTokensUpdates(new address[](0), feeTokens); + + vm.expectEmit(); + emit FeeQuoter.FeeTokenRemoved(feeTokens[0]); + vm.expectEmit(); + emit FeeQuoter.FeeTokenAdded(feeTokens[0]); + + s_feeQuoter.applyFeeTokensUpdates(feeTokens, feeTokens); } function test_OnlyCallableByOwner_Revert() public { - address[] memory feeTokens = new address[](1); - feeTokens[0] = STRANGER; vm.startPrank(STRANGER); + vm.expectRevert("Only callable by owner"); - s_feeQuoter.applyFeeTokensUpdates(feeTokens, new address[](0)); + + s_feeQuoter.applyFeeTokensUpdates(new address[](0), new address[](0)); } } diff --git a/contracts/src/v0.8/ccip/test/helpers/MultiTokenPool.sol b/contracts/src/v0.8/ccip/test/helpers/MultiTokenPool.sol index 316439bccb7..9def6e2794b 100644 --- a/contracts/src/v0.8/ccip/test/helpers/MultiTokenPool.sol +++ b/contracts/src/v0.8/ccip/test/helpers/MultiTokenPool.sol @@ -77,7 +77,7 @@ abstract contract MultiTokenPool is IPoolV1, OwnerIsCreator { /// Only takes effect if i_allowlistEnabled is true. /// This can be used to ensure only token-issuer specified addresses can /// move tokens. - EnumerableSet.AddressSet internal s_allowList; + EnumerableSet.AddressSet internal s_allowlist; /// @dev The address of the router IRouter internal s_router; /// @dev A set of allowed chain selectors. We want the allowlist to be enumerable to @@ -392,10 +392,10 @@ abstract contract MultiTokenPool is IPoolV1, OwnerIsCreator { function _checkAllowList( address sender ) internal view { - if (i_allowlistEnabled && !s_allowList.contains(sender)) revert SenderNotAllowed(sender); + if (i_allowlistEnabled && !s_allowlist.contains(sender)) revert SenderNotAllowed(sender); } - /// @notice Gets whether the allowList functionality is enabled. + /// @notice Gets whether the allowlist functionality is enabled. /// @return true is enabled, false if not. function getAllowListEnabled() external view returns (bool) { return i_allowlistEnabled; @@ -404,13 +404,13 @@ abstract contract MultiTokenPool is IPoolV1, OwnerIsCreator { /// @notice Gets the allowed addresses. /// @return The allowed addresses. function getAllowList() external view returns (address[] memory) { - return s_allowList.values(); + return s_allowlist.values(); } /// @notice Apply updates to the allow list. /// @param removes The addresses to be removed. /// @param adds The addresses to be added. - /// @dev allowListing will be removed before public launch + /// @dev allowlisting will be removed before public launch function applyAllowListUpdates(address[] calldata removes, address[] calldata adds) external onlyOwner { _applyAllowListUpdates(removes, adds); } @@ -421,7 +421,7 @@ abstract contract MultiTokenPool is IPoolV1, OwnerIsCreator { for (uint256 i = 0; i < removes.length; ++i) { address toRemove = removes[i]; - if (s_allowList.remove(toRemove)) { + if (s_allowlist.remove(toRemove)) { emit AllowListRemove(toRemove); } } @@ -430,7 +430,7 @@ abstract contract MultiTokenPool is IPoolV1, OwnerIsCreator { if (toAdd == address(0)) { continue; } - if (s_allowList.add(toAdd)) { + if (s_allowlist.add(toAdd)) { emit AllowListAdd(toAdd); } } diff --git a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol index c458b67ddd4..c5e52db395b 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -857,7 +857,8 @@ contract OffRamp_executeSingleReport is OffRampSetup { } function test_EmptyReport_Revert() public { - vm.expectRevert(OffRamp.EmptyReport.selector); + vm.expectRevert(abi.encodeWithSelector(OffRamp.EmptyReport.selector, SOURCE_CHAIN_SELECTOR_1)); + s_offRamp.executeSingleReport( Internal.ExecutionReport({ sourceChainSelector: SOURCE_CHAIN_SELECTOR_1, @@ -1382,7 +1383,7 @@ contract OffRamp_batchExecute is OffRampSetup { // Reverts function test_ZeroReports_Revert() public { - vm.expectRevert(OffRamp.EmptyReport.selector); + vm.expectRevert(OffRamp.EmptyBatch.selector); s_offRamp.batchExecute(new Internal.ExecutionReport[](0), new OffRamp.GasLimitOverride[][](1)); } @@ -2241,7 +2242,7 @@ contract OffRamp_execute is OffRampSetup { function test_ZeroReports_Revert() public { Internal.ExecutionReport[] memory reports = new Internal.ExecutionReport[](0); - vm.expectRevert(OffRamp.EmptyReport.selector); + vm.expectRevert(OffRamp.EmptyBatch.selector); _execute(reports); } diff --git a/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol b/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol index 3562a6f98b0..d7a50a7724e 100644 --- a/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol @@ -58,12 +58,12 @@ contract OnRamp_constructor is OnRampSetup { OnRamp.DynamicConfig memory dynamicConfig = _generateDynamicOnRampConfig(address(s_feeQuoter)); - // Creating a DestChainConfig and setting allowListEnabled : true + // Creating a DestChainConfig and setting allowlistEnabled : true OnRamp.DestChainConfigArgs[] memory destChainConfigs = new OnRamp.DestChainConfigArgs[](1); destChainConfigs[0] = OnRamp.DestChainConfigArgs({ destChainSelector: DEST_CHAIN_SELECTOR, router: s_sourceRouter, - allowListEnabled: true + allowlistEnabled: true }); vm.expectEmit(); @@ -74,7 +74,7 @@ contract OnRamp_constructor is OnRampSetup { OnRampHelper tempOnRamp = new OnRampHelper(staticConfig, dynamicConfig, destChainConfigs); - // Sending a message and expecting revert as allowList is enabled with no address in allowlist + // Sending a message and expecting revert as allowlist is enabled with no address in allowlist Client.EVM2AnyMessage memory message = _generateEmptyMessage(); vm.startPrank(address(s_sourceRouter)); vm.expectRevert(abi.encodeWithSelector(OnRamp.SenderNotAllowed.selector, OWNER)); @@ -155,15 +155,15 @@ contract OnRamp_forwardFromRouter is OnRampSetup { destinationChainSelectors[0] = DEST_CHAIN_SELECTOR; address[] memory addAllowedList = new address[](1); addAllowedList[0] = OWNER; - OnRamp.AllowListConfigArgs memory allowListConfigArgs = OnRamp.AllowListConfigArgs({ - allowListEnabled: true, + OnRamp.AllowlistConfigArgs memory allowlistConfigArgs = OnRamp.AllowlistConfigArgs({ + allowlistEnabled: true, destChainSelector: DEST_CHAIN_SELECTOR, addedAllowlistedSenders: addAllowedList, removedAllowlistedSenders: new address[](0) }); - OnRamp.AllowListConfigArgs[] memory applyAllowListConfigArgsItems = new OnRamp.AllowListConfigArgs[](1); - applyAllowListConfigArgsItems[0] = allowListConfigArgs; - s_onRamp.applyAllowListUpdates(applyAllowListConfigArgsItems); + OnRamp.AllowlistConfigArgs[] memory applyAllowlistConfigArgsItems = new OnRamp.AllowlistConfigArgs[](1); + applyAllowlistConfigArgsItems[0] = allowlistConfigArgs; + s_onRamp.applyAllowlistUpdates(applyAllowlistConfigArgsItems); // Since we'll mostly be testing for valid calls from the router we'll // mock all calls to be originating from the router and re-mock in @@ -365,15 +365,15 @@ contract OnRamp_forwardFromRouter is OnRampSetup { destinationChainSelectors[0] = uint64(DEST_CHAIN_SELECTOR); address[] memory addAllowedList = new address[](1); addAllowedList[0] = originalSender; - OnRamp.AllowListConfigArgs memory allowListConfigArgs = OnRamp.AllowListConfigArgs({ - allowListEnabled: true, + OnRamp.AllowlistConfigArgs memory allowlistConfigArgs = OnRamp.AllowlistConfigArgs({ + allowlistEnabled: true, destChainSelector: DEST_CHAIN_SELECTOR, addedAllowlistedSenders: addAllowedList, removedAllowlistedSenders: new address[](0) }); - OnRamp.AllowListConfigArgs[] memory applyAllowListConfigArgsItems = new OnRamp.AllowListConfigArgs[](1); - applyAllowListConfigArgsItems[0] = allowListConfigArgs; - s_onRamp.applyAllowListUpdates(applyAllowListConfigArgsItems); + OnRamp.AllowlistConfigArgs[] memory applyAllowlistConfigArgsItems = new OnRamp.AllowlistConfigArgs[](1); + applyAllowlistConfigArgsItems[0] = allowlistConfigArgs; + s_onRamp.applyAllowlistUpdates(applyAllowlistConfigArgsItems); vm.stopPrank(); vm.startPrank(address(s_sourceRouter)); @@ -707,7 +707,7 @@ contract OnRamp_setDynamicConfig is OnRampSetup { reentrancyGuardEntered: false, messageInterceptor: makeAddr("messageInterceptor"), feeAggregator: FEE_AGGREGATOR, - allowListAdmin: address(0) + allowlistAdmin: address(0) }); vm.expectEmit(); @@ -727,7 +727,7 @@ contract OnRamp_setDynamicConfig is OnRampSetup { reentrancyGuardEntered: false, feeAggregator: FEE_AGGREGATOR, messageInterceptor: makeAddr("messageInterceptor"), - allowListAdmin: address(0) + allowlistAdmin: address(0) }); vm.expectRevert(OnRamp.InvalidConfig.selector); @@ -740,7 +740,7 @@ contract OnRamp_setDynamicConfig is OnRampSetup { reentrancyGuardEntered: false, messageInterceptor: address(0), feeAggregator: FEE_AGGREGATOR, - allowListAdmin: address(0) + allowlistAdmin: address(0) }); // Invalid price reg reverts. @@ -755,7 +755,7 @@ contract OnRamp_setDynamicConfig is OnRampSetup { reentrancyGuardEntered: false, messageInterceptor: address(0), feeAggregator: address(0), - allowListAdmin: address(0) + allowlistAdmin: address(0) }); vm.expectRevert(OnRamp.InvalidConfig.selector); @@ -777,7 +777,7 @@ contract OnRamp_setDynamicConfig is OnRampSetup { reentrancyGuardEntered: true, messageInterceptor: makeAddr("messageInterceptor"), feeAggregator: FEE_AGGREGATOR, - allowListAdmin: address(0) + allowlistAdmin: address(0) }); vm.expectRevert(OnRamp.InvalidConfig.selector); @@ -820,7 +820,7 @@ contract OnRamp_withdrawFeeTokens is OnRampSetup { IERC20(feeTokens[i]).transfer(address(s_onRamp), amounts[i]); } - s_feeQuoter.applyFeeTokensUpdates(feeTokens, new address[](0)); + s_feeQuoter.applyFeeTokensUpdates(new address[](0), feeTokens); for (uint256 i = 0; i < feeTokens.length; ++i) { vm.expectEmit(); @@ -866,8 +866,6 @@ contract OnRamp_getTokenPool is OnRampSetup { contract OnRamp_applyDestChainConfigUpdates is OnRampSetup { function test_ApplyDestChainConfigUpdates_Success() external { - vm.stopPrank(); - vm.startPrank(OWNER); OnRamp.DestChainConfigArgs[] memory configArgs = new OnRamp.DestChainConfigArgs[](1); configArgs[0].destChainSelector = DEST_CHAIN_SELECTOR; @@ -882,10 +880,10 @@ contract OnRamp_applyDestChainConfigUpdates is OnRampSetup { configArgs[0] = OnRamp.DestChainConfigArgs({ destChainSelector: DEST_CHAIN_SELECTOR, router: s_sourceRouter, - allowListEnabled: false + allowlistEnabled: false }); configArgs[1] = - OnRamp.DestChainConfigArgs({destChainSelector: 9999, router: IRouter(address(9999)), allowListEnabled: false}); + OnRamp.DestChainConfigArgs({destChainSelector: 9999, router: IRouter(address(9999)), allowlistEnabled: false}); vm.expectEmit(); emit OnRamp.DestChainConfigSet(DEST_CHAIN_SELECTOR, 0, s_sourceRouter, false); vm.expectEmit(); @@ -902,8 +900,6 @@ contract OnRamp_applyDestChainConfigUpdates is OnRampSetup { } function test_ApplyDestChainConfigUpdates_WithInvalidChainSelector_Revert() external { - vm.stopPrank(); - vm.startPrank(OWNER); OnRamp.DestChainConfigArgs[] memory configArgs = new OnRamp.DestChainConfigArgs[](1); configArgs[0].destChainSelector = 0; // invalid vm.expectRevert(abi.encodeWithSelector(OnRamp.InvalidDestChainConfig.selector, 0)); @@ -911,28 +907,25 @@ contract OnRamp_applyDestChainConfigUpdates is OnRampSetup { } } -contract OnRamp_applyAllowListUpdates is OnRampSetup { - function test_applyAllowListUpdates_Success() public { - vm.stopPrank(); - vm.startPrank(OWNER); - +contract OnRamp_applyAllowlistUpdates is OnRampSetup { + function test_applyAllowlistUpdates_Success() public { OnRamp.DestChainConfigArgs[] memory configArgs = new OnRamp.DestChainConfigArgs[](2); configArgs[0] = OnRamp.DestChainConfigArgs({ destChainSelector: DEST_CHAIN_SELECTOR, router: s_sourceRouter, - allowListEnabled: false + allowlistEnabled: false }); configArgs[1] = - OnRamp.DestChainConfigArgs({destChainSelector: 9999, router: IRouter(address(9999)), allowListEnabled: false}); + OnRamp.DestChainConfigArgs({destChainSelector: 9999, router: IRouter(address(9999)), allowlistEnabled: false}); vm.expectEmit(); emit OnRamp.DestChainConfigSet(DEST_CHAIN_SELECTOR, 0, s_sourceRouter, false); vm.expectEmit(); emit OnRamp.DestChainConfigSet(9999, 0, IRouter(address(9999)), false); s_onRamp.applyDestChainConfigUpdates(configArgs); - (uint64 sequenceNumber, bool allowListEnabled, address router) = s_onRamp.getDestChainConfig(9999); + (uint64 sequenceNumber, bool allowlistEnabled, address router) = s_onRamp.getDestChainConfig(9999); assertEq(sequenceNumber, 0); - assertEq(allowListEnabled, false); + assertEq(allowlistEnabled, false); assertEq(router, address(9999)); uint64[] memory destinationChainSelectors = new uint64[](2); @@ -948,20 +941,22 @@ contract OnRamp_applyAllowListUpdates is OnRampSetup { vm.expectEmit(); emit OnRamp.AllowListSendersAdded(DEST_CHAIN_SELECTOR, addedAllowlistedSenders); - OnRamp.AllowListConfigArgs memory allowListConfigArgs = OnRamp.AllowListConfigArgs({ - allowListEnabled: true, + OnRamp.AllowlistConfigArgs memory allowlistConfigArgs = OnRamp.AllowlistConfigArgs({ + allowlistEnabled: true, destChainSelector: DEST_CHAIN_SELECTOR, addedAllowlistedSenders: addedAllowlistedSenders, removedAllowlistedSenders: new address[](0) }); - OnRamp.AllowListConfigArgs[] memory applyAllowListConfigArgsItems = new OnRamp.AllowListConfigArgs[](1); - applyAllowListConfigArgsItems[0] = allowListConfigArgs; + OnRamp.AllowlistConfigArgs[] memory applyAllowlistConfigArgsItems = new OnRamp.AllowlistConfigArgs[](1); + applyAllowlistConfigArgsItems[0] = allowlistConfigArgs; - s_onRamp.applyAllowListUpdates(applyAllowListConfigArgsItems); - assertEq(4, s_onRamp.getAllowedSendersList(DEST_CHAIN_SELECTOR).length); + s_onRamp.applyAllowlistUpdates(applyAllowlistConfigArgsItems); - assertEq(addedAllowlistedSenders, s_onRamp.getAllowedSendersList(DEST_CHAIN_SELECTOR)); + (bool isActive, address[] memory gotAllowList) = s_onRamp.getAllowedSendersList(DEST_CHAIN_SELECTOR); + assertEq(4, gotAllowList.length); + assertEq(addedAllowlistedSenders, gotAllowList); + assertEq(true, isActive); address[] memory removedAllowlistedSenders = new address[](1); removedAllowlistedSenders[0] = vm.addr(2); @@ -969,18 +964,20 @@ contract OnRamp_applyAllowListUpdates is OnRampSetup { vm.expectEmit(); emit OnRamp.AllowListSendersRemoved(DEST_CHAIN_SELECTOR, removedAllowlistedSenders); - allowListConfigArgs = OnRamp.AllowListConfigArgs({ - allowListEnabled: true, + allowlistConfigArgs = OnRamp.AllowlistConfigArgs({ + allowlistEnabled: false, destChainSelector: DEST_CHAIN_SELECTOR, addedAllowlistedSenders: new address[](0), removedAllowlistedSenders: removedAllowlistedSenders }); - OnRamp.AllowListConfigArgs[] memory allowListConfigArgsItems_2 = new OnRamp.AllowListConfigArgs[](1); - allowListConfigArgsItems_2[0] = allowListConfigArgs; + OnRamp.AllowlistConfigArgs[] memory allowlistConfigArgsItems_2 = new OnRamp.AllowlistConfigArgs[](1); + allowlistConfigArgsItems_2[0] = allowlistConfigArgs; - s_onRamp.applyAllowListUpdates(allowListConfigArgsItems_2); - assertEq(3, s_onRamp.getAllowedSendersList(DEST_CHAIN_SELECTOR).length); + s_onRamp.applyAllowlistUpdates(allowlistConfigArgsItems_2); + (isActive, gotAllowList) = s_onRamp.getAllowedSendersList(DEST_CHAIN_SELECTOR); + assertEq(3, gotAllowList.length); + assertFalse(isActive); addedAllowlistedSenders = new address[](2); addedAllowlistedSenders[0] = vm.addr(5); @@ -994,32 +991,32 @@ contract OnRamp_applyAllowListUpdates is OnRampSetup { emit OnRamp.AllowListSendersAdded(DEST_CHAIN_SELECTOR, addedAllowlistedSenders); emit OnRamp.AllowListSendersRemoved(DEST_CHAIN_SELECTOR, removedAllowlistedSenders); - allowListConfigArgs = OnRamp.AllowListConfigArgs({ - allowListEnabled: true, + allowlistConfigArgs = OnRamp.AllowlistConfigArgs({ + allowlistEnabled: true, destChainSelector: DEST_CHAIN_SELECTOR, addedAllowlistedSenders: addedAllowlistedSenders, removedAllowlistedSenders: removedAllowlistedSenders }); - OnRamp.AllowListConfigArgs[] memory allowListConfigArgsItems_3 = new OnRamp.AllowListConfigArgs[](1); - allowListConfigArgsItems_3[0] = allowListConfigArgs; + OnRamp.AllowlistConfigArgs[] memory allowlistConfigArgsItems_3 = new OnRamp.AllowlistConfigArgs[](1); + allowlistConfigArgsItems_3[0] = allowlistConfigArgs; - s_onRamp.applyAllowListUpdates(allowListConfigArgsItems_3); - assertEq(3, s_onRamp.getAllowedSendersList(DEST_CHAIN_SELECTOR).length); - } + s_onRamp.applyAllowlistUpdates(allowlistConfigArgsItems_3); + (isActive, gotAllowList) = s_onRamp.getAllowedSendersList(DEST_CHAIN_SELECTOR); - function test_applyAllowListUpdates_Revert() public { - vm.stopPrank(); - vm.startPrank(OWNER); + assertEq(3, gotAllowList.length); + assertTrue(isActive); + } + function test_applyAllowlistUpdates_Revert() public { OnRamp.DestChainConfigArgs[] memory configArgs = new OnRamp.DestChainConfigArgs[](2); configArgs[0] = OnRamp.DestChainConfigArgs({ destChainSelector: DEST_CHAIN_SELECTOR, router: s_sourceRouter, - allowListEnabled: false + allowlistEnabled: false }); configArgs[1] = - OnRamp.DestChainConfigArgs({destChainSelector: 9999, router: IRouter(address(9999)), allowListEnabled: false}); + OnRamp.DestChainConfigArgs({destChainSelector: 9999, router: IRouter(address(9999)), allowlistEnabled: false}); vm.expectEmit(); emit OnRamp.DestChainConfigSet(DEST_CHAIN_SELECTOR, 0, s_sourceRouter, false); vm.expectEmit(); @@ -1036,45 +1033,42 @@ contract OnRamp_applyAllowListUpdates is OnRampSetup { addedAllowlistedSenders[2] = vm.addr(3); addedAllowlistedSenders[3] = vm.addr(4); - OnRamp.AllowListConfigArgs memory allowListConfigArgs = OnRamp.AllowListConfigArgs({ - allowListEnabled: true, + OnRamp.AllowlistConfigArgs memory allowlistConfigArgs = OnRamp.AllowlistConfigArgs({ + allowlistEnabled: true, destChainSelector: DEST_CHAIN_SELECTOR, addedAllowlistedSenders: addedAllowlistedSenders, removedAllowlistedSenders: new address[](0) }); - OnRamp.AllowListConfigArgs[] memory applyAllowListConfigArgsItems = new OnRamp.AllowListConfigArgs[](1); - applyAllowListConfigArgsItems[0] = allowListConfigArgs; + OnRamp.AllowlistConfigArgs[] memory applyAllowlistConfigArgsItems = new OnRamp.AllowlistConfigArgs[](1); + applyAllowlistConfigArgsItems[0] = allowlistConfigArgs; vm.startPrank(STRANGER); vm.expectRevert(OnRamp.OnlyCallableByOwnerOrAllowlistAdmin.selector); - s_onRamp.applyAllowListUpdates(applyAllowListConfigArgsItems); + s_onRamp.applyAllowlistUpdates(applyAllowlistConfigArgsItems); vm.stopPrank(); - applyAllowListConfigArgsItems[0].addedAllowlistedSenders[0] = address(0); + applyAllowlistConfigArgsItems[0].addedAllowlistedSenders[0] = address(0); vm.expectRevert(abi.encodeWithSelector(OnRamp.InvalidAllowListRequest.selector, DEST_CHAIN_SELECTOR)); vm.startPrank(OWNER); - s_onRamp.applyAllowListUpdates(applyAllowListConfigArgsItems); + s_onRamp.applyAllowlistUpdates(applyAllowlistConfigArgsItems); vm.stopPrank(); } - function test_applyAllowListUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() public { - vm.stopPrank(); - vm.startPrank(OWNER); - + function test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() public { address[] memory addedAllowlistedSenders = new address[](1); addedAllowlistedSenders[0] = vm.addr(1); - OnRamp.AllowListConfigArgs memory allowListConfigArgs = OnRamp.AllowListConfigArgs({ - allowListEnabled: false, + OnRamp.AllowlistConfigArgs memory allowlistConfigArgs = OnRamp.AllowlistConfigArgs({ + allowlistEnabled: false, destChainSelector: DEST_CHAIN_SELECTOR, addedAllowlistedSenders: addedAllowlistedSenders, removedAllowlistedSenders: new address[](0) }); - OnRamp.AllowListConfigArgs[] memory applyAllowListConfigArgsItems = new OnRamp.AllowListConfigArgs[](1); - applyAllowListConfigArgsItems[0] = allowListConfigArgs; + OnRamp.AllowlistConfigArgs[] memory applyAllowlistConfigArgsItems = new OnRamp.AllowlistConfigArgs[](1); + applyAllowlistConfigArgsItems[0] = allowlistConfigArgs; vm.expectRevert(abi.encodeWithSelector(OnRamp.InvalidAllowListRequest.selector, DEST_CHAIN_SELECTOR)); - s_onRamp.applyAllowListUpdates(applyAllowListConfigArgsItems); + s_onRamp.applyAllowlistUpdates(applyAllowlistConfigArgsItems); } } diff --git a/contracts/src/v0.8/ccip/test/onRamp/OnRampSetup.t.sol b/contracts/src/v0.8/ccip/test/onRamp/OnRampSetup.t.sol index 08b213c99d2..8254dd977f7 100644 --- a/contracts/src/v0.8/ccip/test/onRamp/OnRampSetup.t.sol +++ b/contracts/src/v0.8/ccip/test/onRamp/OnRampSetup.t.sol @@ -113,7 +113,7 @@ contract OnRampSetup is FeeQuoterFeeSetup { reentrancyGuardEntered: false, messageInterceptor: address(0), feeAggregator: FEE_AGGREGATOR, - allowListAdmin: address(0) + allowlistAdmin: address(0) }); } @@ -133,7 +133,7 @@ contract OnRampSetup is FeeQuoterFeeSetup { ) internal pure returns (OnRamp.DestChainConfigArgs[] memory) { OnRamp.DestChainConfigArgs[] memory destChainConfigs = new OnRamp.DestChainConfigArgs[](1); destChainConfigs[0] = - OnRamp.DestChainConfigArgs({destChainSelector: DEST_CHAIN_SELECTOR, router: router, allowListEnabled: false}); + OnRamp.DestChainConfigArgs({destChainSelector: DEST_CHAIN_SELECTOR, router: router, allowlistEnabled: false}); return destChainConfigs; } diff --git a/contracts/src/v0.8/ccip/test/pools/TokenPool.t.sol b/contracts/src/v0.8/ccip/test/pools/TokenPool.t.sol index 766a4870f65..d524c015b70 100644 --- a/contracts/src/v0.8/ccip/test/pools/TokenPool.t.sol +++ b/contracts/src/v0.8/ccip/test/pools/TokenPool.t.sol @@ -742,7 +742,7 @@ contract TokenPoolWithAllowList_applyAllowListUpdates is TokenPoolWithAllowListS assertEq(address(2), setAddresses[2]); assertEq(address(3), setAddresses[3]); - // remove all from allowList + // remove all from allowlist for (uint256 i = 0; i < setAddresses.length; ++i) { vm.expectEmit(); emit TokenPool.AllowListRemove(setAddresses[i]); diff --git a/contracts/src/v0.8/ccip/test/router/Router.t.sol b/contracts/src/v0.8/ccip/test/router/Router.t.sol index e5e8ffd9295..b5cfd6cfbec 100644 --- a/contracts/src/v0.8/ccip/test/router/Router.t.sol +++ b/contracts/src/v0.8/ccip/test/router/Router.t.sol @@ -201,7 +201,7 @@ contract Router_ccipSend is OnRampSetup { function test_NonLinkFeeToken_Success() public { address[] memory feeTokens = new address[](1); feeTokens[0] = s_sourceTokens[1]; - s_feeQuoter.applyFeeTokensUpdates(feeTokens, new address[](0)); + s_feeQuoter.applyFeeTokensUpdates(new address[](0), feeTokens); Client.EVM2AnyMessage memory message = _generateEmptyMessage(); message.feeToken = s_sourceTokens[1]; diff --git a/contracts/src/v0.8/liquiditymanager/ocr/OCR3Base.sol b/contracts/src/v0.8/liquiditymanager/ocr/OCR3Base.sol index 8c31ba5521a..655f1b11182 100644 --- a/contracts/src/v0.8/liquiditymanager/ocr/OCR3Base.sol +++ b/contracts/src/v0.8/liquiditymanager/ocr/OCR3Base.sol @@ -232,7 +232,7 @@ abstract contract OCR3Base is OwnerIsCreator, OCR3Abstract { // Scoping this reduces stack pressure and gas usage { uint256 expectedDataLength = uint256(TRANSMIT_MSGDATA_CONSTANT_LENGTH_COMPONENT) + - report.length + // one byte pure entry in _report + report.length + // one byte per entry in report rs.length * 32 + // 32 bytes per entry in _rs ss.length * diff --git a/contracts/src/v0.8/shared/ocr2/OCR2Base.sol b/contracts/src/v0.8/shared/ocr2/OCR2Base.sol index 1dfc21fcae2..07837826181 100644 --- a/contracts/src/v0.8/shared/ocr2/OCR2Base.sol +++ b/contracts/src/v0.8/shared/ocr2/OCR2Base.sol @@ -246,7 +246,7 @@ abstract contract OCR2Base is OwnerIsCreator, OCR2Abstract { ) private pure { // calldata will never be big enough to make this overflow uint256 expected = uint256(TRANSMIT_MSGDATA_CONSTANT_LENGTH_COMPONENT) + - report.length + // one byte pure entry in _report + report.length + // one byte per entry in report rs.length * 32 + // 32 bytes per entry in _rs ss.length * diff --git a/core/gethwrappers/ccip/deployment_test/deployment_test.go b/core/gethwrappers/ccip/deployment_test/deployment_test.go index 698b30c2066..02f00483651 100644 --- a/core/gethwrappers/ccip/deployment_test/deployment_test.go +++ b/core/gethwrappers/ccip/deployment_test/deployment_test.go @@ -63,7 +63,7 @@ func TestDeployAllV1_6(t *testing.T) { FeeQuoter: common.HexToAddress("0x4"), MessageInterceptor: common.HexToAddress("0x5"), FeeAggregator: common.HexToAddress("0x6"), - AllowListAdmin: common.HexToAddress("0x7"), + AllowlistAdmin: common.HexToAddress("0x7"), }, nil) require.NoError(t, err) chain.Commit() diff --git a/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go b/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go index 4a2c92434ce..45d4f8b5aba 100644 --- a/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go +++ b/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go @@ -155,8 +155,8 @@ type KeystoneFeedsPermissionHandlerPermission struct { } var FeeQuoterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"tokenPriceStalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"priceUpdaters\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeeds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DataFeedValueOutOfUint224Range\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"DestinationChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExtraArgOutOfOrderExecutionMustBeTrue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"FeeTokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"}],\"name\":\"InvalidDestBytesOverhead\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtraArgsTag\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint256\"}],\"name\":\"MessageFeeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageGasLimitTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"}],\"name\":\"ReportForwarderUnauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SourceTokenDataTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePassed\",\"type\":\"uint256\"}],\"name\":\"StaleGasPrice\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feedTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"storedTimeStamp\",\"type\":\"uint256\"}],\"name\":\"StaleKeystoneUpdate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"name\":\"PremiumMultiplierWeiPerEthUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"priceFeedConfig\",\"type\":\"tuple\"}],\"name\":\"PriceFeedPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"reportId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission\",\"name\":\"permission\",\"type\":\"tuple\"}],\"name\":\"ReportPermissionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenTransferFeeConfigDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"name\":\"TokenTransferFeeConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChain\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerUnitGasUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FEE_BASE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KEYSTONE_PRICE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addedCallers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedCallers\",\"type\":\"address[]\"}],\"internalType\":\"structAuthorizedCallers.AuthorizedCallerArgs\",\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\"}],\"name\":\"applyAuthorizedCallerUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"feeTokensToAdd\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokensToRemove\",\"type\":\"address[]\"}],\"name\":\"applyFeeTokensUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyPremiumMultiplierWeiPerEthUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigRemoveArgs[]\",\"name\":\"tokensToUseDefaultFeeConfigs\",\"type\":\"tuple[]\"}],\"name\":\"applyTokenTransferFeeConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"}],\"name\":\"convertTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestinationChainGasPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPremiumMultiplierWeiPerEth\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"tokenPriceStalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getTokenAndGasPrices\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"tokenPrice\",\"type\":\"uint224\"},{\"internalType\":\"uint224\",\"name\":\"gasPriceValue\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPriceFeedConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getTokenPrices\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenTransferFeeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getValidatedFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getValidatedTokenPrice\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"onReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"onRampTokenTransfers\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"sourceTokenAmounts\",\"type\":\"tuple[]\"}],\"name\":\"processMessageArgs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOutOfOrderExecution\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"convertedExtraArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"destExecDataPerToken\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission[]\",\"name\":\"permissions\",\"type\":\"tuple[]\"}],\"name\":\"setReportPermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"updatePrices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeedUpdates\",\"type\":\"tuple[]\"}],\"name\":\"updateTokenPriceFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200789338038062007893833981016040819052620000349162001871565b8533806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000207565b5050604080518082018252838152815160008152602080820190935291810191909152620000ee9150620002b2565b5060208701516001600160a01b0316158062000112575086516001600160601b0316155b80620001265750604087015163ffffffff16155b15620001455760405163d794ef9560e01b815260040160405180910390fd5b6020878101516001600160a01b031660a05287516001600160601b031660805260408089015163ffffffff1660c05280516000815291820190526200018c90869062000401565b620001978462000549565b620001a2816200061a565b620001ad8262000a82565b60408051600080825260208201909252620001fa91859190620001f3565b6040805180820190915260008082526020820152815260200190600190039081620001cb5790505b5062000b4e565b5050505050505062001b2f565b336001600160a01b03821603620002615760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b815181101562000342576000828281518110620002db57620002db62001990565b60209081029190910101519050620002f560028262000e87565b1562000338576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101620002ba565b50815160005b8151811015620003fb57600082828151811062000369576200036962001990565b6020026020010151905060006001600160a01b0316816001600160a01b031603620003a7576040516342bcdf7f60e11b815260040160405180910390fd5b620003b460028262000ea7565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010162000348565b50505050565b60005b8251811015620004a2576200044083828151811062000427576200042762001990565b6020026020010151600b62000ea760201b90919060201c565b1562000499578281815181106200045b576200045b62001990565b60200260200101516001600160a01b03167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b60010162000404565b5060005b81518110156200054457620004e2828281518110620004c957620004c962001990565b6020026020010151600b62000ebe60201b90919060201c565b156200053b57818181518110620004fd57620004fd62001990565b60200260200101516001600160a01b03167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b600101620004a6565b505050565b60005b8151811015620006165760008282815181106200056d576200056d62001990565b6020908102919091018101518051818301516001600160a01b0380831660008181526007875260409081902084518154868a018051929096166001600160a81b03199091168117600160a01b60ff9384160217909255825191825293519093169683019690965293955091939092917f08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464910160405180910390a25050508060010190506200054c565b5050565b60005b8151811015620006165760008282815181106200063e576200063e62001990565b6020026020010151905060008383815181106200065f576200065f62001990565b6020026020010151600001519050600082602001519050816001600160401b03166000148062000698575061016081015163ffffffff16155b80620006ba57506102008101516001600160e01b031916630a04b54b60e21b14155b80620006da5750806060015163ffffffff1681610160015163ffffffff16115b15620007055760405163c35aa79d60e01b81526001600160401b038316600482015260240162000083565b6001600160401b038216600090815260096020526040812060010154600160a81b900460e01b6001600160e01b03191690036200078557816001600160401b03167f525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda4626582604051620007779190620019a6565b60405180910390a2620007c9565b816001600160401b03167f283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a83582604051620007c09190620019a6565b60405180910390a25b8060096000846001600160401b03166001600160401b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a8154816001600160401b0302191690836001600160401b031602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055506101e08201518160010160146101000a81548160ff0219169083151502179055506102008201518160010160156101000a81548163ffffffff021916908360e01c02179055509050505050508060010190506200061d565b60005b81518110156200061657600082828151811062000aa65762000aa662001990565b6020026020010151600001519050600083838151811062000acb5762000acb62001990565b6020908102919091018101518101516001600160a01b03841660008181526008845260409081902080546001600160401b0319166001600160401b0385169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a2505060010162000a85565b60005b825181101562000dc157600083828151811062000b725762000b7262001990565b6020026020010151905060008160000151905060005b82602001515181101562000db25760008360200151828151811062000bb15762000bb162001990565b602002602001015160200151905060008460200151838151811062000bda5762000bda62001990565b6020026020010151600001519050602063ffffffff16826080015163ffffffff16101562000c395760808201516040516312766e0160e11b81526001600160a01b038316600482015263ffffffff909116602482015260440162000083565b6001600160401b0384166000818152600a602090815260408083206001600160a01b0386168085529083529281902086518154938801518389015160608a015160808b015160a08c01511515600160901b0260ff60901b1963ffffffff928316600160701b021664ffffffffff60701b199383166a01000000000000000000000263ffffffff60501b1961ffff90961668010000000000000000029590951665ffffffffffff60401b19968416640100000000026001600160401b0319909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b59062000d9f908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a3505060010162000b88565b50505080600101905062000b51565b5060005b81518110156200054457600082828151811062000de65762000de662001990565b6020026020010151600001519050600083838151811062000e0b5762000e0b62001990565b6020908102919091018101518101516001600160401b0384166000818152600a845260408082206001600160a01b038516808452955280822080546001600160981b03191690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a3505060010162000dc5565b600062000e9e836001600160a01b03841662000ed5565b90505b92915050565b600062000e9e836001600160a01b03841662000fd9565b600062000e9e836001600160a01b0384166200102b565b6000818152600183016020526040812054801562000fce57600062000efc60018362001af7565b855490915060009062000f129060019062001af7565b905081811462000f7e57600086600001828154811062000f365762000f3662001990565b906000526020600020015490508087600001848154811062000f5c5762000f5c62001990565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000f925762000f9262001b19565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000ea1565b600091505062000ea1565b6000818152600183016020526040812054620010225750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000ea1565b50600062000ea1565b6000818152600183016020526040812054801562000fce5760006200105260018362001af7565b8554909150600090620010689060019062001af7565b905080821462000f7e57600086600001828154811062000f365762000f3662001990565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620010c757620010c76200108c565b60405290565b60405160c081016001600160401b0381118282101715620010c757620010c76200108c565b60405161022081016001600160401b0381118282101715620010c757620010c76200108c565b604051601f8201601f191681016001600160401b03811182821017156200114357620011436200108c565b604052919050565b80516001600160a01b03811681146200116357600080fd5b919050565b805163ffffffff811681146200116357600080fd5b6000606082840312156200119057600080fd5b604051606081016001600160401b0381118282101715620011b557620011b56200108c565b604052825190915081906001600160601b0381168114620011d557600080fd5b8152620011e5602084016200114b565b6020820152620011f86040840162001168565b60408201525092915050565b60006001600160401b038211156200122057620012206200108c565b5060051b60200190565b600082601f8301126200123c57600080fd5b81516020620012556200124f8362001204565b62001118565b8083825260208201915060208460051b8701019350868411156200127857600080fd5b602086015b848110156200129f5762001291816200114b565b83529183019183016200127d565b509695505050505050565b600082601f830112620012bc57600080fd5b81516020620012cf6200124f8362001204565b82815260609283028501820192828201919087851115620012ef57600080fd5b8387015b858110156200138257808903828112156200130e5760008081fd5b62001318620010a2565b62001323836200114b565b8152604080601f19840112156200133a5760008081fd5b62001344620010a2565b9250620013538885016200114b565b835283015160ff81168114620013695760008081fd5b82880152808701919091528452928401928101620012f3565b5090979650505050505050565b80516001600160401b03811681146200116357600080fd5b805161ffff811681146200116357600080fd5b805180151581146200116357600080fd5b600082601f830112620013dd57600080fd5b81516020620013f06200124f8362001204565b82815260059290921b840181019181810190868411156200141057600080fd5b8286015b848110156200129f5780516001600160401b03808211156200143557600080fd5b908801906040601f19838c0381018213156200145057600080fd5b6200145a620010a2565b620014678986016200138f565b815282850151848111156200147b57600080fd5b8086019550508c603f8601126200149157600080fd5b888501519350620014a66200124f8562001204565b84815260e09094028501830193898101908e861115620014c557600080fd5b958401955b858710156200159e57868f0360e0811215620014e557600080fd5b620014ef620010a2565b620014fa896200114b565b815260c086830112156200150d57600080fd5b62001517620010cd565b9150620015268d8a0162001168565b825262001535878a0162001168565b8d8301526200154760608a01620013a7565b878301526200155960808a0162001168565b60608301526200156c60a08a0162001168565b60808301526200157f60c08a01620013ba565b60a0830152808d0191909152825260e09690960195908a0190620014ca565b828b01525087525050509284019250830162001414565b600082601f830112620015c757600080fd5b81516020620015da6200124f8362001204565b82815260069290921b84018101918181019086841115620015fa57600080fd5b8286015b848110156200129f5760408189031215620016195760008081fd5b62001623620010a2565b6200162e826200114b565b81526200163d8583016200138f565b81860152835291830191604001620015fe565b80516001600160e01b0319811681146200116357600080fd5b600082601f8301126200167b57600080fd5b815160206200168e6200124f8362001204565b8281526102409283028501820192828201919087851115620016af57600080fd5b8387015b85811015620013825780890382811215620016ce5760008081fd5b620016d8620010a2565b620016e3836200138f565b815261022080601f1984011215620016fb5760008081fd5b62001705620010f2565b925062001714888501620013ba565b8352604062001725818601620013a7565b8985015260606200173881870162001168565b82860152608091506200174d82870162001168565b9085015260a06200176086820162001168565b8286015260c0915062001775828701620013a7565b9085015260e06200178886820162001168565b8286015261010091506200179e828701620013a7565b90850152610120620017b2868201620013a7565b828601526101409150620017c8828701620013a7565b90850152610160620017dc86820162001168565b828601526101809150620017f282870162001168565b908501526101a0620018068682016200138f565b828601526101c091506200181c82870162001168565b908501526101e06200183086820162001168565b82860152610200915062001846828701620013ba565b908501526200185785830162001650565b9084015250808701919091528452928401928101620016b3565b6000806000806000806000610120888a0312156200188e57600080fd5b6200189a89896200117d565b60608901519097506001600160401b0380821115620018b857600080fd5b620018c68b838c016200122a565b975060808a0151915080821115620018dd57600080fd5b620018eb8b838c016200122a565b965060a08a01519150808211156200190257600080fd5b620019108b838c01620012aa565b955060c08a01519150808211156200192757600080fd5b620019358b838c01620013cb565b945060e08a01519150808211156200194c57600080fd5b6200195a8b838c01620015b5565b93506101008a01519150808211156200197257600080fd5b50620019818a828b0162001669565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b81511515815261022081016020830151620019c7602084018261ffff169052565b506040830151620019e0604084018263ffffffff169052565b506060830151620019f9606084018263ffffffff169052565b50608083015162001a12608084018263ffffffff169052565b5060a083015162001a2960a084018261ffff169052565b5060c083015162001a4260c084018263ffffffff169052565b5060e083015162001a5960e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff9081169184019190915261016080850151821690840152610180808501516001600160401b0316908401526101a0808501518216908401526101c080850151909116908301526101e080840151151590830152610200928301516001600160e01b031916929091019190915290565b8181038181111562000ea157634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c051615d1162001b82600039600081816102fa01526118750152600081816102be01528181610eb80152610f1801526000818161028a01528181610f410152610fb10152615d116000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c8063770e2dc411610104578063a69c64c0116100a2578063d63d3af211610071578063d63d3af214610ab0578063d8694ccd14610ab8578063f2fde38b14610acb578063ffdb4b3714610ade57600080fd5b8063a69c64c0146109d5578063bf78e03f146109e8578063cdc73d5114610a95578063d02641a014610a9d57600080fd5b8063805f2132116100de578063805f21321461081757806382b49eb01461082a5780638da5cb5b1461099a57806391a2749a146109c257600080fd5b8063770e2dc4146107e957806379ba5097146107fc5780637afac3221461080457600080fd5b8063407e10861161017c5780634ab35b0b1161014b5780634ab35b0b14610457578063514e8cff146104975780636cb5f3dd1461053a5780636def4ce71461054d57600080fd5b8063407e1086146103ee57806341ed29e714610401578063430d138c1461041457806345ac924d1461043757600080fd5b8063181f5a77116101b8578063181f5a77146103735780632451a627146103bc578063325c868e146103d15780633937306f146103d957600080fd5b806241e5be146101de578063061877e31461020457806306285c691461025d575b600080fd5b6101f16101ec3660046143f1565b610b26565b6040519081526020015b60405180910390f35b61024461021236600461442d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016101fb565b610327604080516060810182526000808252602082018190529181019190915260405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff16815250905090565b6040805182516bffffffffffffffffffffffff16815260208084015173ffffffffffffffffffffffffffffffffffffffff16908201529181015163ffffffff16908201526060016101fb565b6103af6040518060400160405280601381526020017f46656551756f74657220312e362e302d6465760000000000000000000000000081525081565b6040516101fb91906144ac565b6103c4610b94565b6040516101fb91906144bf565b6101f1602481565b6103ec6103e7366004614519565b610ba5565b005b6103ec6103fc3660046146bb565b610e5a565b6103ec61040f3660046147ed565b610e6e565b6104276104223660046149c7565b610eb0565b6040516101fb9493929190614abb565b61044a610445366004614b5a565b6110c0565b6040516101fb9190614b9c565b61046a61046536600461442d565b61118b565b6040517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016101fb565b61052d6104a5366004614c17565b60408051808201909152600080825260208201525067ffffffffffffffff166000908152600560209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811683527c0100000000000000000000000000000000000000000000000000000000900463ffffffff169082015290565b6040516101fb9190614c32565b6103ec610548366004614cc3565b611196565b6107dc61055b366004614c17565b6040805161022081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081018290526102008101919091525067ffffffffffffffff908116600090815260096020908152604091829020825161022081018452815460ff8082161515835261ffff61010080840482169685019690965263ffffffff630100000084048116978501979097526701000000000000008304871660608501526b0100000000000000000000008304871660808501526f010000000000000000000000000000008304811660a0850152710100000000000000000000000000000000008304871660c08501527501000000000000000000000000000000000000000000808404821660e08087019190915277010000000000000000000000000000000000000000000000850483169786019790975279010000000000000000000000000000000000000000000000000084049091166101208501527b01000000000000000000000000000000000000000000000000000000909204861661014084015260019093015480861661016084015264010000000081049096166101808301526c01000000000000000000000000860485166101a083015270010000000000000000000000000000000086049094166101c082015274010000000000000000000000000000000000000000850490911615156101e08201527fffffffff0000000000000000000000000000000000000000000000000000000092909304901b1661020082015290565b6040516101fb9190614ee3565b6103ec6107f73660046150e1565b6111a7565b6103ec6111b9565b6103ec6108123660046153fb565b6112b6565b6103ec61082536600461545f565b6112c8565b61093a6108383660046154cb565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525067ffffffffffffffff919091166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff94909416835292815290829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a082015290565b6040516101fb9190600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fb565b6103ec6109d03660046154f5565b6117b0565b6103ec6109e3366004615586565b6117c1565b610a616109f636600461442d565b6040805180820182526000808252602091820181905273ffffffffffffffffffffffffffffffffffffffff93841681526007825282902082518084019093525492831682527401000000000000000000000000000000000000000090920460ff169181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260209283015160ff1692810192909252016101fb565b6103c46117d2565b61052d610aab36600461442d565b6117de565b6101f1601281565b6101f1610ac636600461564b565b61194b565b6103ec610ad936600461442d565b611e83565b610af1610aec3660046156a0565b611e94565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101fb565b6000610b3182611f4c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610b5885611f4c565b610b80907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16856156f9565b610b8a9190615710565b90505b9392505050565b6060610ba06002611fe6565b905090565b610bad611ff3565b6000610bb9828061574b565b9050905060005b81811015610d03576000610bd4848061574b565b83818110610be457610be46157b3565b905060400201803603810190610bfa919061580e565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885173ffffffffffffffffffffffffffffffffffffffff9081166000908152600690975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a92610cf29290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610bc0565b506000610d13602084018461574b565b9050905060005b81811015610e54576000610d31602086018661574b565b83818110610d4157610d416157b3565b905060400201803603810190610d57919061584b565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885167ffffffffffffffff9081166000908152600590975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927fdd84a3fa9ef9409f550d54d6affec7e9c480c878c6ab27b78912a03e1b371c6e92610e439290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610d1a565b50505050565b610e62612038565b610e6b816120b9565b50565b610e76612038565b60005b8151811015610eac57610ea4828281518110610e9757610e976157b3565b60200260200101516121b7565b600101610e79565b5050565b6000806060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603610f11578a9350610f3f565b610f3c8c8c7f0000000000000000000000000000000000000000000000000000000000000000610b26565b93505b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16841115610fe3576040517f6a92a483000000000000000000000000000000000000000000000000000000008152600481018590526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044015b60405180910390fd5b67ffffffffffffffff8d1660009081526009602052604081206001015463ffffffff16906110128c8c84612389565b9050806020015194506110288f8b8b8b8b612532565b925085856110a8836040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf100000000000000000000000000000000000000000000000000000000017905290565b95509550955050509950995099509995505050505050565b60608160008167ffffffffffffffff8111156110de576110de614554565b60405190808252806020026020018201604052801561112357816020015b60408051808201909152600080825260208201528152602001906001900390816110fc5790505b50905060005b828110156111805761115b868683818110611146576111466157b3565b9050602002016020810190610aab919061442d565b82828151811061116d5761116d6157b3565b6020908102919091010152600101611129565b509150505b92915050565b600061118582611f4c565b61119e612038565b610e6b816128a3565b6111af612038565b610eac8282612d75565b60015473ffffffffffffffffffffffffffffffffffffffff16331461123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610fda565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6112be612038565b610eac8282613187565b600080600061130c87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132ce92505050565b92509250925061131e338385846132e9565b600061132c8587018761586e565b905060005b81518110156117a557600060076000848481518110611352576113526157b3565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160009081205474010000000000000000000000000000000000000000900460ff169150819003611413578282815181106113bc576113bc6157b3565b6020908102919091010151516040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610fda565b600061145c60128386868151811061142d5761142d6157b3565b6020026020010151602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613441565b905060066000858581518110611474576114746157b3565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001601c9054906101000a900463ffffffff1663ffffffff168484815181106114e6576114e66157b3565b60200260200101516040015163ffffffff1610156115f057838381518110611510576115106157b3565b60200260200101516000015184848151811061152e5761152e6157b3565b60200260200101516040015160066000878781518110611550576115506157b3565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260409081016000205490517f191ec70600000000000000000000000000000000000000000000000000000000815293909116600484015263ffffffff91821660248401527c01000000000000000000000000000000000000000000000000000000009004166044820152606401610fda565b6040518060400160405280827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001858581518110611631576116316157b3565b60200260200101516040015163ffffffff168152506006600086868151811061165c5761165c6157b3565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040016000208251929091015163ffffffff167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90921691909117905583518490849081106116f4576116f46157b3565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff167f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a8286868151811061174a5761174a6157b3565b6020026020010151604001516040516117939291907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216825263ffffffff16602082015260400190565b60405180910390a25050600101611331565b505050505050505050565b6117b8612038565b610e6b81613504565b6117c9612038565b610e6b81613690565b6060610ba0600b611fe6565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116835263ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169183018290527f000000000000000000000000000000000000000000000000000000000000000016906118a09042615935565b10156118ac5792915050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600760209081526040918290208251808401909352549283168083527401000000000000000000000000000000000000000090930460ff169082015290611911575092915050565b600061191c8261377a565b9050826020015163ffffffff16816020015163ffffffff1610156119405782611942565b805b95945050505050565b67ffffffffffffffff8083166000908152600960209081526040808320815161022081018352815460ff808216151580845261ffff61010080850482169886019890985263ffffffff630100000085048116978601979097526701000000000000008404871660608601526b0100000000000000000000008404871660808601526f010000000000000000000000000000008404811660a0860152710100000000000000000000000000000000008404871660c08601527501000000000000000000000000000000000000000000808504821660e08088019190915277010000000000000000000000000000000000000000000000860483169987019990995279010000000000000000000000000000000000000000000000000085049091166101208601527b01000000000000000000000000000000000000000000000000000000909304861661014085015260019094015480861661016085015264010000000081049098166101808401526c01000000000000000000000000880485166101a084015270010000000000000000000000000000000088049094166101c083015274010000000000000000000000000000000000000000870490931615156101e08201527fffffffff000000000000000000000000000000000000000000000000000000009290950490921b16610200840152909190611b85576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610fda565b611ba0611b98608085016060860161442d565b600b9061390c565b611bff57611bb4608084016060850161442d565b6040517f2502348c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610fda565b6000611c0e604085018561574b565b9150611c6a905082611c236020870187615948565b905083611c308880615948565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061393b92505050565b6000611c84611c7f608087016060880161442d565b611f4c565b90506000611c9787856101c001516139e5565b9050600080808515611cd757611ccb878b611cb860808d0160608e0161442d565b88611cc660408f018f61574b565b613ae5565b91945092509050611cf7565b6101a0870151611cf49063ffffffff16662386f26fc100006156f9565b92505b61010087015160009061ffff1615611d3b57611d38886dffffffffffffffffffffffffffff607088901c16611d2f60208e018e615948565b90508a86613dbd565b90505b61018088015160009067ffffffffffffffff16611d64611d5e60808e018e615948565b8c613e6d565b600001518563ffffffff168b60a0015161ffff168e8060200190611d889190615948565b611d939291506156f9565b8c6080015163ffffffff16611da891906159ad565b611db291906159ad565b611dbc91906159ad565b611dd6906dffffffffffffffffffffffffffff89166156f9565b611de091906156f9565b9050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168282600860008f6060016020810190611e1a919061442d565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054611e559067ffffffffffffffff16896156f9565b611e5f91906159ad565b611e6991906159ad565b611e739190615710565b9c9b505050505050505050505050565b611e8b612038565b610e6b81613f2e565b67ffffffffffffffff8116600090815260096020526040812054819060ff16611ef5576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610fda565b611efe84611f4c565b67ffffffffffffffff8416600090815260096020526040902060010154611f40908590700100000000000000000000000000000000900463ffffffff166139e5565b915091505b9250929050565b600080611f58836117de565b9050806020015163ffffffff1660001480611f90575080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16155b15611fdf576040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610fda565b5192915050565b60606000610b8d83614023565b611ffe60023361390c565b612036576040517fd86ad9cf000000000000000000000000000000000000000000000000000000008152336004820152602401610fda565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610fda565b60005b8151811015610eac5760008282815181106120d9576120d96157b3565b60209081029190910181015180518183015173ffffffffffffffffffffffffffffffffffffffff80831660008181526007875260409081902084518154868a018051929096167fffffffffffffffffffffff00000000000000000000000000000000000000000090911681177401000000000000000000000000000000000000000060ff9384160217909255825191825293519093169683019690965293955091939092917f08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464910160405180910390a25050508060010190506120bc565b600061227082600001518360600151846020015185604001516040805173ffffffffffffffffffffffffffffffffffffffff80871660208301528516918101919091527fffffffffffffffffffff00000000000000000000000000000000000000000000831660608201527fffff0000000000000000000000000000000000000000000000000000000000008216608082015260009060a001604051602081830303815290604052805190602001209050949350505050565b60808301516000828152600460205260409081902080549215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909316929092179091555190915081907f32a4ba3fa3351b11ad555d4c8ec70a744e8705607077a946807030d64b6ab1a39061237d908590600060a08201905073ffffffffffffffffffffffffffffffffffffffff8084511683527fffffffffffffffffffff0000000000000000000000000000000000000000000060208501511660208401527fffff00000000000000000000000000000000000000000000000000000000000060408501511660408401528060608501511660608401525060808301511515608083015292915050565b60405180910390a25050565b604080518082019091526000808252602082015260008390036123ca57506040805180820190915267ffffffffffffffff8216815260006020820152610b8d565b60006123d684866159c0565b905060006123e78560048189615a06565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050507fffffffff0000000000000000000000000000000000000000000000000000000082167fe7e230f00000000000000000000000000000000000000000000000000000000001612484578080602001905181019061247b9190615a30565b92505050610b8d565b7f6859a837000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601612500576040518060400160405280828060200190518101906124ec9190615a5c565b815260006020909101529250610b8d915050565b6040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff808616600090815260096020526040902060010154606091750100000000000000000000000000000000000000000090910460e01b90859081111561258257612582614554565b6040519080825280602002602001820160405280156125b557816020015b60608152602001906001900390816125a05790505b50915060005b858110156128985760008585838181106125d7576125d76157b3565b6125ed926020604090920201908101915061442d565b90506000888884818110612603576126036157b3565b90506020028101906126159190615a75565b612623906040810190615948565b91505060208111156126d35767ffffffffffffffff8a166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020546e010000000000000000000000000000900463ffffffff168111156126d3576040517f36f536ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610fda565b612743848a8a868181106126e9576126e96157b3565b90506020028101906126fb9190615a75565b612709906020810190615948565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061407f92505050565b67ffffffffffffffff8a166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684528252808320815160c081018352905463ffffffff8082168352640100000000820481168386015268010000000000000000820461ffff16838501526a01000000000000000000008204811660608401526e010000000000000000000000000000820481166080840152720100000000000000000000000000000000000090910460ff16151560a08301908152958552600990935290832054935190937b01000000000000000000000000000000000000000000000000000000900490911691906128425781612848565b82606001515b6040805163ffffffff831660208201529192500160405160208183030381529060405288878151811061287d5761287d6157b3565b602002602001018190525050505050508060010190506125bb565b505095945050505050565b60005b8151811015610eac5760008282815181106128c3576128c36157b3565b6020026020010151905060008383815181106128e1576128e16157b3565b60200260200101516000015190506000826020015190508167ffffffffffffffff166000148061291a575061016081015163ffffffff16155b8061296c57506102008101517fffffffff00000000000000000000000000000000000000000000000000000000167f2812d52c0000000000000000000000000000000000000000000000000000000014155b8061298b5750806060015163ffffffff1681610160015163ffffffff16115b156129ce576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fda565b67ffffffffffffffff82166000908152600960205260408120600101547501000000000000000000000000000000000000000000900460e01b7fffffffff00000000000000000000000000000000000000000000000000000000169003612a76578167ffffffffffffffff167f525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda4626582604051612a699190614ee3565b60405180910390a2612ab9565b8167ffffffffffffffff167f283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a83582604051612ab09190614ee3565b60405180910390a25b80600960008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055506101e08201518160010160146101000a81548160ff0219169083151502179055506102008201518160010160156101000a81548163ffffffff021916908360e01c02179055509050505050508060010190506128a6565b60005b825181101561309e576000838281518110612d9557612d956157b3565b6020026020010151905060008160000151905060005b82602001515181101561309057600083602001518281518110612dd057612dd06157b3565b6020026020010151602001519050600084602001518381518110612df657612df66157b3565b6020026020010151600001519050602063ffffffff16826080015163ffffffff161015612e795760808201516040517f24ecdc0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015263ffffffff9091166024820152604401610fda565b67ffffffffffffffff84166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529083529281902086518154938801518389015160608a015160808b015160a08c015115157201000000000000000000000000000000000000027fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff63ffffffff9283166e01000000000000000000000000000002167fffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffff9383166a0100000000000000000000027fffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffff61ffff9096166801000000000000000002959095167fffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff968416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b59061307e908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a35050600101612dab565b505050806001019050612d78565b5060005b81518110156131825760008282815181106130bf576130bf6157b3565b602002602001015160000151905060008383815181106130e1576130e16157b3565b60209081029190910181015181015167ffffffffffffffff84166000818152600a8452604080822073ffffffffffffffffffffffffffffffffffffffff8516808452955280822080547fffffffffffffffffffffffffff000000000000000000000000000000000000001690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a350506001016130a2565b505050565b60005b825181101561322a576131c08382815181106131a8576131a86157b3565b6020026020010151600b6140d190919063ffffffff16565b15613222578281815181106131d7576131d76157b3565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b60010161318a565b5060005b81518110156131825761326482828151811061324c5761324c6157b3565b6020026020010151600b6140f390919063ffffffff16565b156132c65781818151811061327b5761327b6157b3565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b60010161322e565b6040810151604a820151605e90920151909260609290921c91565b6040805173ffffffffffffffffffffffffffffffffffffffff868116602080840191909152908616828401527fffffffffffffffffffff00000000000000000000000000000000000000000000851660608301527fffff00000000000000000000000000000000000000000000000000000000000084166080808401919091528351808403909101815260a09092018352815191810191909120600081815260049092529190205460ff1661343a576040517f097e17ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201527fffffffffffffffffffff00000000000000000000000000000000000000000000841660448201527fffff00000000000000000000000000000000000000000000000000000000000083166064820152608401610fda565b5050505050565b60008061344e8486615ab3565b9050600060248260ff1611156134885761346c602460ff8416615935565b61347790600a615bec565b6134819085615710565b90506134ae565b61349660ff83166024615935565b6134a190600a615bec565b6134ab90856156f9565b90505b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611942576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160005b815181101561359f576000828281518110613529576135296157b3565b6020026020010151905061354781600261411590919063ffffffff16565b156135965760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b5060010161350c565b50815160005b8151811015610e545760008282815181106135c2576135c26157b3565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613632576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61363d6002826140d1565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a1506001016135a5565b60005b8151811015610eac5760008282815181106136b0576136b06157b3565b602002602001015160000151905060008383815181106136d2576136d26157b3565b60209081029190910181015181015173ffffffffffffffffffffffffffffffffffffffff841660008181526008845260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a25050600101613693565b60408051808201909152600080825260208201526000826000015190506000808273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156137e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138099190615c12565b50935050925050600082121561384b576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006138ca8473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561389b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138bf9190615c62565b876020015185613441565b604080518082019091527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116815263ffffffff909216602083015250949350505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610b8d565b836040015163ffffffff168311156139945760408085015190517f8693378900000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101849052604401610fda565b836020015161ffff168211156139d6576040517f4c056b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e548461020001518261407f565b67ffffffffffffffff821660009081526005602090815260408083208151808301909252547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116825263ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169282019290925290831615613add576000816020015163ffffffff1642613a7a9190615935565b90508363ffffffff16811115613adb576040517ff08bcb3e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8616600482015263ffffffff8516602482015260448101829052606401610fda565b505b519392505050565b6000808083815b81811015613daf576000878783818110613b0857613b086157b3565b905060400201803603810190613b1e9190615c7f565b67ffffffffffffffff8c166000908152600a60209081526040808320845173ffffffffffffffffffffffffffffffffffffffff168452825291829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a0820181905291925090613c3e576101208d0151613c0b9061ffff16662386f26fc100006156f9565b613c1590886159ad565b96508c610140015186613c289190615cb8565b9550613c35602086615cb8565b94505050613da7565b604081015160009061ffff1615613cf75760008c73ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614613c9a578351613c9390611f4c565b9050613c9d565b508a5b620186a0836040015161ffff16613cdf8660200151847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661413790919063ffffffff16565b613ce991906156f9565b613cf39190615710565b9150505b6060820151613d069088615cb8565b9650816080015186613d189190615cb8565b8251909650600090613d379063ffffffff16662386f26fc100006156f9565b905080821015613d5657613d4b818a6159ad565b985050505050613da7565b6000836020015163ffffffff16662386f26fc10000613d7591906156f9565b905080831115613d9557613d89818b6159ad565b99505050505050613da7565b613d9f838b6159ad565b995050505050505b600101613aec565b505096509650969350505050565b60008063ffffffff8316613dd3610120866156f9565b613ddf876101e06159ad565b613de991906159ad565b613df391906159ad565b905060008760c0015163ffffffff168860e0015161ffff1683613e1691906156f9565b613e2091906159ad565b61010089015190915061ffff16613e476dffffffffffffffffffffffffffff8916836156f9565b613e5191906156f9565b613e6190655af3107a40006156f9565b98975050505050505050565b60408051808201909152600080825260208201526000613e99858585610160015163ffffffff16612389565b9050826060015163ffffffff1681600001511115613ee3576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826101e001518015613ef757508060200151155b15610b8a576040517fee433e9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603613fad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610fda565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60608160000180548060200260200160405190810160405280929190818152602001828054801561407357602002820191906000526020600020905b81548152602001906001019080831161405f575b50505050509050919050565b7fd7ed2ad4000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601610eac5761318281614174565b6000610b8d8373ffffffffffffffffffffffffffffffffffffffff8416614227565b6000610b8d8373ffffffffffffffffffffffffffffffffffffffff8416614276565b6000610b8d8373ffffffffffffffffffffffffffffffffffffffff8416614370565b6000670de0b6b3a764000061416a837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86166156f9565b610b8d9190615710565b600081516020146141b357816040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610fda91906144ac565b6000828060200190518101906141c99190615a5c565b905073ffffffffffffffffffffffffffffffffffffffff8111806141ee575061040081105b1561118557826040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610fda91906144ac565b600081815260018301602052604081205461426e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611185565b506000611185565b6000818152600183016020526040812054801561435f57600061429a600183615935565b85549091506000906142ae90600190615935565b90508082146143135760008660000182815481106142ce576142ce6157b3565b90600052602060002001549050808760000184815481106142f1576142f16157b3565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061432457614324615cd5565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611185565b6000915050611185565b5092915050565b6000818152600183016020526040812054801561435f576000614394600183615935565b85549091506000906143a890600190615935565b90508181146143135760008660000182815481106142ce576142ce6157b3565b803573ffffffffffffffffffffffffffffffffffffffff811681146143ec57600080fd5b919050565b60008060006060848603121561440657600080fd5b61440f846143c8565b925060208401359150614424604085016143c8565b90509250925092565b60006020828403121561443f57600080fd5b610b8d826143c8565b6000815180845260005b8181101561446e57602081850181015186830182015201614452565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610b8d6020830184614448565b6020808252825182820181905260009190848201906040850190845b8181101561450d57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016144db565b50909695505050505050565b60006020828403121561452b57600080fd5b813567ffffffffffffffff81111561454257600080fd5b820160408185031215610b8d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156145a6576145a6614554565b60405290565b60405160a0810167ffffffffffffffff811182821017156145a6576145a6614554565b604051610220810167ffffffffffffffff811182821017156145a6576145a6614554565b60405160c0810167ffffffffffffffff811182821017156145a6576145a6614554565b6040516060810167ffffffffffffffff811182821017156145a6576145a6614554565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561468057614680614554565b604052919050565b600067ffffffffffffffff8211156146a2576146a2614554565b5060051b60200190565b60ff81168114610e6b57600080fd5b600060208083850312156146ce57600080fd5b823567ffffffffffffffff8111156146e557600080fd5b8301601f810185136146f657600080fd5b803561470961470482614688565b614639565b8181526060918202830184019184820191908884111561472857600080fd5b938501935b838510156147c857848903818112156147465760008081fd5b61474e614583565b614757876143c8565b81526040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401121561478b5760008081fd5b614793614583565b92506147a08989016143c8565b83528701356147ae816146ac565b82890152808801919091528352938401939185019161472d565b50979650505050505050565b8015158114610e6b57600080fd5b80356143ec816147d4565b6000602080838503121561480057600080fd5b823567ffffffffffffffff81111561481757600080fd5b8301601f8101851361482857600080fd5b803561483661470482614688565b81815260a0918202830184019184820191908884111561485557600080fd5b938501935b838510156147c85780858a0312156148725760008081fd5b61487a6145ac565b614883866143c8565b8152868601357fffffffffffffffffffff00000000000000000000000000000000000000000000811681146148b85760008081fd5b818801526040868101357fffff000000000000000000000000000000000000000000000000000000000000811681146148f15760008081fd5b9082015260606149028782016143c8565b90820152608086810135614915816147d4565b908201528352938401939185019161485a565b803567ffffffffffffffff811681146143ec57600080fd5b60008083601f84011261495257600080fd5b50813567ffffffffffffffff81111561496a57600080fd5b602083019150836020828501011115611f4557600080fd5b60008083601f84011261499457600080fd5b50813567ffffffffffffffff8111156149ac57600080fd5b6020830191508360208260051b8501011115611f4557600080fd5b600080600080600080600080600060c08a8c0312156149e557600080fd5b6149ee8a614928565b98506149fc60208b016143c8565b975060408a0135965060608a013567ffffffffffffffff80821115614a2057600080fd5b614a2c8d838e01614940565b909850965060808c0135915080821115614a4557600080fd5b614a518d838e01614982565b909650945060a08c0135915080821115614a6a57600080fd5b818c0191508c601f830112614a7e57600080fd5b813581811115614a8d57600080fd5b8d60208260061b8501011115614aa257600080fd5b6020830194508093505050509295985092959850929598565b848152600060208515158184015260806040840152614add6080840186614448565b8381036060850152845180825282820190600581901b8301840184880160005b83811015614b49577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018552614b37838351614448565b94870194925090860190600101614afd565b50909b9a5050505050505050505050565b60008060208385031215614b6d57600080fd5b823567ffffffffffffffff811115614b8457600080fd5b614b9085828601614982565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b82811015614c0a57614bfa84835180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16825260209081015163ffffffff16910152565b9284019290850190600101614bb9565b5091979650505050505050565b600060208284031215614c2957600080fd5b610b8d82614928565b81517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260208083015163ffffffff169082015260408101611185565b803561ffff811681146143ec57600080fd5b803563ffffffff811681146143ec57600080fd5b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146143ec57600080fd5b60006020808385031215614cd657600080fd5b823567ffffffffffffffff811115614ced57600080fd5b8301601f81018513614cfe57600080fd5b8035614d0c61470482614688565b8181526102409182028301840191848201919088841115614d2c57600080fd5b938501935b838510156147c85784890381811215614d4a5760008081fd5b614d52614583565b614d5b87614928565b8152610220807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084011215614d905760008081fd5b614d986145cf565b9250614da58989016147e2565b83526040614db4818a01614c6d565b8a8501526060614dc5818b01614c7f565b8286015260809150614dd8828b01614c7f565b9085015260a0614de98a8201614c7f565b8286015260c09150614dfc828b01614c6d565b9085015260e0614e0d8a8201614c7f565b828601526101009150614e21828b01614c6d565b90850152610120614e338a8201614c6d565b828601526101409150614e47828b01614c6d565b90850152610160614e598a8201614c7f565b828601526101809150614e6d828b01614c7f565b908501526101a0614e7f8a8201614928565b828601526101c09150614e93828b01614c7f565b908501526101e0614ea58a8201614c7f565b828601526102009150614eb9828b016147e2565b90850152614ec8898301614c93565b90840152508088019190915283529384019391850191614d31565b81511515815261022081016020830151614f03602084018261ffff169052565b506040830151614f1b604084018263ffffffff169052565b506060830151614f33606084018263ffffffff169052565b506080830151614f4b608084018263ffffffff169052565b5060a0830151614f6160a084018261ffff169052565b5060c0830151614f7960c084018263ffffffff169052565b5060e0830151614f8f60e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff90811691840191909152610160808501518216908401526101808085015167ffffffffffffffff16908401526101a0808501518216908401526101c080850151909116908301526101e080840151151590830152610200808401517fffffffff000000000000000000000000000000000000000000000000000000008116828501525b505092915050565b600082601f83011261505a57600080fd5b8135602061506a61470483614688565b82815260069290921b8401810191818101908684111561508957600080fd5b8286015b848110156150d657604081890312156150a65760008081fd5b6150ae614583565b6150b782614928565b81526150c48583016143c8565b8186015283529183019160400161508d565b509695505050505050565b600080604083850312156150f457600080fd5b67ffffffffffffffff8335111561510a57600080fd5b83601f84358501011261511c57600080fd5b61512c6147048435850135614688565b8335840180358083526020808401939260059290921b9091010186101561515257600080fd5b602085358601015b85358601803560051b0160200181101561535f5767ffffffffffffffff8135111561518457600080fd5b8035863587010160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a030112156151bd57600080fd5b6151c5614583565b6151d160208301614928565b815267ffffffffffffffff604083013511156151ec57600080fd5b88603f60408401358401011261520157600080fd5b6152176147046020604085013585010135614688565b6020604084810135850182810135808552928401939260e00201018b101561523e57600080fd5b6040808501358501015b6040858101358601602081013560e00201018110156153405760e0818d03121561527157600080fd5b615279614583565b615282826143c8565b815260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838f030112156152b657600080fd5b6152be6145f3565b6152ca60208401614c7f565b81526152d860408401614c7f565b60208201526152e960608401614c6d565b60408201526152fa60808401614c7f565b606082015261530b60a08401614c7f565b608082015261531d60c08401356147d4565b60c083013560a0820152602082810191909152908452929092019160e001615248565b508060208401525050808552505060208301925060208101905061515a565b5092505067ffffffffffffffff6020840135111561537c57600080fd5b61538c8460208501358501615049565b90509250929050565b600082601f8301126153a657600080fd5b813560206153b661470483614688565b8083825260208201915060208460051b8701019350868411156153d857600080fd5b602086015b848110156150d6576153ee816143c8565b83529183019183016153dd565b6000806040838503121561540e57600080fd5b823567ffffffffffffffff8082111561542657600080fd5b61543286838701615395565b9350602085013591508082111561544857600080fd5b5061545585828601615395565b9150509250929050565b6000806000806040858703121561547557600080fd5b843567ffffffffffffffff8082111561548d57600080fd5b61549988838901614940565b909650945060208701359150808211156154b257600080fd5b506154bf87828801614940565b95989497509550505050565b600080604083850312156154de57600080fd5b6154e783614928565b915061538c602084016143c8565b60006020828403121561550757600080fd5b813567ffffffffffffffff8082111561551f57600080fd5b908301906040828603121561553357600080fd5b61553b614583565b82358281111561554a57600080fd5b61555687828601615395565b82525060208301358281111561556b57600080fd5b61557787828601615395565b60208301525095945050505050565b6000602080838503121561559957600080fd5b823567ffffffffffffffff8111156155b057600080fd5b8301601f810185136155c157600080fd5b80356155cf61470482614688565b81815260069190911b820183019083810190878311156155ee57600080fd5b928401925b82841015615640576040848903121561560c5760008081fd5b615614614583565b61561d856143c8565b815261562a868601614928565b81870152825260409390930192908401906155f3565b979650505050505050565b6000806040838503121561565e57600080fd5b61566783614928565b9150602083013567ffffffffffffffff81111561568357600080fd5b830160a0818603121561569557600080fd5b809150509250929050565b600080604083850312156156b357600080fd5b6156bc836143c8565b915061538c60208401614928565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417611185576111856156ca565b600082615746577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261578057600080fd5b83018035915067ffffffffffffffff82111561579b57600080fd5b6020019150600681901b3603821315611f4557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146143ec57600080fd5b60006040828403121561582057600080fd5b615828614583565b615831836143c8565b815261583f602084016157e2565b60208201529392505050565b60006040828403121561585d57600080fd5b615865614583565b61583183614928565b6000602080838503121561588157600080fd5b823567ffffffffffffffff81111561589857600080fd5b8301601f810185136158a957600080fd5b80356158b761470482614688565b818152606091820283018401918482019190888411156158d657600080fd5b938501935b838510156147c85780858a0312156158f35760008081fd5b6158fb614616565b615904866143c8565b81526159118787016157e2565b878201526040615922818801614c7f565b90820152835293840193918501916158db565b81810381811115611185576111856156ca565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261597d57600080fd5b83018035915067ffffffffffffffff82111561599857600080fd5b602001915036819003821315611f4557600080fd5b80820180821115611185576111856156ca565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156150415760049490940360031b84901b1690921692915050565b60008085851115615a1657600080fd5b83861115615a2357600080fd5b5050820193919092039150565b600060408284031215615a4257600080fd5b615a4a614583565b82518152602083015161583f816147d4565b600060208284031215615a6e57600080fd5b5051919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112615aa957600080fd5b9190910192915050565b60ff8181168382160190811115611185576111856156ca565b600181815b80851115615b2557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b0b57615b0b6156ca565b80851615615b1857918102915b93841c9390800290615ad1565b509250929050565b600082615b3c57506001611185565b81615b4957506000611185565b8160018114615b5f5760028114615b6957615b85565b6001915050611185565b60ff841115615b7a57615b7a6156ca565b50506001821b611185565b5060208310610133831016604e8410600b8410161715615ba8575081810a611185565b615bb28383615acc565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615be457615be46156ca565b029392505050565b6000610b8d8383615b2d565b805169ffffffffffffffffffff811681146143ec57600080fd5b600080600080600060a08688031215615c2a57600080fd5b615c3386615bf8565b9450602086015193506040860151925060608601519150615c5660808701615bf8565b90509295509295909350565b600060208284031215615c7457600080fd5b8151610b8d816146ac565b600060408284031215615c9157600080fd5b615c99614583565b615ca2836143c8565b8152602083013560208201528091505092915050565b63ffffffff818116838216019080821115614369576143696156ca565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"tokenPriceStalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"priceUpdaters\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeeds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DataFeedValueOutOfUint224Range\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"DestinationChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExtraArgOutOfOrderExecutionMustBeTrue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"FeeTokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"}],\"name\":\"InvalidDestBytesOverhead\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtraArgsTag\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint256\"}],\"name\":\"MessageFeeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageGasLimitTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"}],\"name\":\"ReportForwarderUnauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SourceTokenDataTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePassed\",\"type\":\"uint256\"}],\"name\":\"StaleGasPrice\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feedTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"storedTimeStamp\",\"type\":\"uint256\"}],\"name\":\"StaleKeystoneUpdate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"name\":\"PremiumMultiplierWeiPerEthUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"priceFeedConfig\",\"type\":\"tuple\"}],\"name\":\"PriceFeedPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"reportId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission\",\"name\":\"permission\",\"type\":\"tuple\"}],\"name\":\"ReportPermissionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenTransferFeeConfigDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"name\":\"TokenTransferFeeConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChain\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerUnitGasUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FEE_BASE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KEYSTONE_PRICE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addedCallers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedCallers\",\"type\":\"address[]\"}],\"internalType\":\"structAuthorizedCallers.AuthorizedCallerArgs\",\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\"}],\"name\":\"applyAuthorizedCallerUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"feeTokensToRemove\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokensToAdd\",\"type\":\"address[]\"}],\"name\":\"applyFeeTokensUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyPremiumMultiplierWeiPerEthUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigRemoveArgs[]\",\"name\":\"tokensToUseDefaultFeeConfigs\",\"type\":\"tuple[]\"}],\"name\":\"applyTokenTransferFeeConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"}],\"name\":\"convertTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestinationChainGasPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPremiumMultiplierWeiPerEth\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"tokenPriceStalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getTokenAndGasPrices\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"tokenPrice\",\"type\":\"uint224\"},{\"internalType\":\"uint224\",\"name\":\"gasPriceValue\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPriceFeedConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getTokenPrices\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenTransferFeeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getValidatedFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getValidatedTokenPrice\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"onReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"onRampTokenTransfers\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"sourceTokenAmounts\",\"type\":\"tuple[]\"}],\"name\":\"processMessageArgs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOutOfOrderExecution\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"convertedExtraArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"destExecDataPerToken\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission[]\",\"name\":\"permissions\",\"type\":\"tuple[]\"}],\"name\":\"setReportPermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"updatePrices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeedUpdates\",\"type\":\"tuple[]\"}],\"name\":\"updateTokenPriceFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60e06040523480156200001157600080fd5b506040516200789238038062007892833981016040819052620000349162001870565b8533806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000206565b5050604080518082018252838152815160008152602080820190935291810191909152620000ee9150620002b1565b5060208701516001600160a01b0316158062000112575086516001600160601b0316155b80620001265750604087015163ffffffff16155b15620001455760405163d794ef9560e01b815260040160405180910390fd5b6020878101516001600160a01b031660a05287516001600160601b031660805260408089015163ffffffff1660c05280516000815291820190526200018b908662000400565b620001968462000548565b620001a18162000619565b620001ac8262000a81565b60408051600080825260208201909252620001f991859190620001f2565b6040805180820190915260008082526020820152815260200190600190039081620001ca5790505b5062000b4d565b5050505050505062001b2e565b336001600160a01b03821603620002605760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b815181101562000341576000828281518110620002da57620002da6200198f565b60209081029190910101519050620002f460028262000e86565b1562000337576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101620002b9565b50815160005b8151811015620003fa5760008282815181106200036857620003686200198f565b6020026020010151905060006001600160a01b0316816001600160a01b031603620003a6576040516342bcdf7f60e11b815260040160405180910390fd5b620003b360028262000ea6565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010162000347565b50505050565b60005b8251811015620004a1576200043f8382815181106200042657620004266200198f565b6020026020010151600b62000ebd60201b90919060201c565b1562000498578281815181106200045a576200045a6200198f565b60200260200101516001600160a01b03167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b60010162000403565b5060005b81518110156200054357620004e1828281518110620004c857620004c86200198f565b6020026020010151600b62000ea660201b90919060201c565b156200053a57818181518110620004fc57620004fc6200198f565b60200260200101516001600160a01b03167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b600101620004a5565b505050565b60005b8151811015620006155760008282815181106200056c576200056c6200198f565b6020908102919091018101518051818301516001600160a01b0380831660008181526007875260409081902084518154868a018051929096166001600160a81b03199091168117600160a01b60ff9384160217909255825191825293519093169683019690965293955091939092917f08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464910160405180910390a25050508060010190506200054b565b5050565b60005b8151811015620006155760008282815181106200063d576200063d6200198f565b6020026020010151905060008383815181106200065e576200065e6200198f565b6020026020010151600001519050600082602001519050816001600160401b03166000148062000697575061016081015163ffffffff16155b80620006b957506102008101516001600160e01b031916630a04b54b60e21b14155b80620006d95750806060015163ffffffff1681610160015163ffffffff16115b15620007045760405163c35aa79d60e01b81526001600160401b038316600482015260240162000083565b6001600160401b038216600090815260096020526040812060010154600160a81b900460e01b6001600160e01b03191690036200078457816001600160401b03167f525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda4626582604051620007769190620019a5565b60405180910390a2620007c8565b816001600160401b03167f283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a83582604051620007bf9190620019a5565b60405180910390a25b8060096000846001600160401b03166001600160401b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a8154816001600160401b0302191690836001600160401b031602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055506101e08201518160010160146101000a81548160ff0219169083151502179055506102008201518160010160156101000a81548163ffffffff021916908360e01c02179055509050505050508060010190506200061c565b60005b81518110156200061557600082828151811062000aa55762000aa56200198f565b6020026020010151600001519050600083838151811062000aca5762000aca6200198f565b6020908102919091018101518101516001600160a01b03841660008181526008845260409081902080546001600160401b0319166001600160401b0385169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a2505060010162000a84565b60005b825181101562000dc057600083828151811062000b715762000b716200198f565b6020026020010151905060008160000151905060005b82602001515181101562000db15760008360200151828151811062000bb05762000bb06200198f565b602002602001015160200151905060008460200151838151811062000bd95762000bd96200198f565b6020026020010151600001519050602063ffffffff16826080015163ffffffff16101562000c385760808201516040516312766e0160e11b81526001600160a01b038316600482015263ffffffff909116602482015260440162000083565b6001600160401b0384166000818152600a602090815260408083206001600160a01b0386168085529083529281902086518154938801518389015160608a015160808b015160a08c01511515600160901b0260ff60901b1963ffffffff928316600160701b021664ffffffffff60701b199383166a01000000000000000000000263ffffffff60501b1961ffff90961668010000000000000000029590951665ffffffffffff60401b19968416640100000000026001600160401b0319909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b59062000d9e908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a3505060010162000b87565b50505080600101905062000b50565b5060005b81518110156200054357600082828151811062000de55762000de56200198f565b6020026020010151600001519050600083838151811062000e0a5762000e0a6200198f565b6020908102919091018101518101516001600160401b0384166000818152600a845260408082206001600160a01b038516808452955280822080546001600160981b03191690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a3505060010162000dc4565b600062000e9d836001600160a01b03841662000ed4565b90505b92915050565b600062000e9d836001600160a01b03841662000fd8565b600062000e9d836001600160a01b0384166200102a565b6000818152600183016020526040812054801562000fcd57600062000efb60018362001af6565b855490915060009062000f119060019062001af6565b905081811462000f7d57600086600001828154811062000f355762000f356200198f565b906000526020600020015490508087600001848154811062000f5b5762000f5b6200198f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000f915762000f9162001b18565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000ea0565b600091505062000ea0565b6000818152600183016020526040812054620010215750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000ea0565b50600062000ea0565b6000818152600183016020526040812054801562000fcd5760006200105160018362001af6565b8554909150600090620010679060019062001af6565b905080821462000f7d57600086600001828154811062000f355762000f356200198f565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620010c657620010c66200108b565b60405290565b60405160c081016001600160401b0381118282101715620010c657620010c66200108b565b60405161022081016001600160401b0381118282101715620010c657620010c66200108b565b604051601f8201601f191681016001600160401b03811182821017156200114257620011426200108b565b604052919050565b80516001600160a01b03811681146200116257600080fd5b919050565b805163ffffffff811681146200116257600080fd5b6000606082840312156200118f57600080fd5b604051606081016001600160401b0381118282101715620011b457620011b46200108b565b604052825190915081906001600160601b0381168114620011d457600080fd5b8152620011e4602084016200114a565b6020820152620011f76040840162001167565b60408201525092915050565b60006001600160401b038211156200121f576200121f6200108b565b5060051b60200190565b600082601f8301126200123b57600080fd5b81516020620012546200124e8362001203565b62001117565b8083825260208201915060208460051b8701019350868411156200127757600080fd5b602086015b848110156200129e5762001290816200114a565b83529183019183016200127c565b509695505050505050565b600082601f830112620012bb57600080fd5b81516020620012ce6200124e8362001203565b82815260609283028501820192828201919087851115620012ee57600080fd5b8387015b858110156200138157808903828112156200130d5760008081fd5b62001317620010a1565b62001322836200114a565b8152604080601f1984011215620013395760008081fd5b62001343620010a1565b9250620013528885016200114a565b835283015160ff81168114620013685760008081fd5b82880152808701919091528452928401928101620012f2565b5090979650505050505050565b80516001600160401b03811681146200116257600080fd5b805161ffff811681146200116257600080fd5b805180151581146200116257600080fd5b600082601f830112620013dc57600080fd5b81516020620013ef6200124e8362001203565b82815260059290921b840181019181810190868411156200140f57600080fd5b8286015b848110156200129e5780516001600160401b03808211156200143457600080fd5b908801906040601f19838c0381018213156200144f57600080fd5b62001459620010a1565b620014668986016200138e565b815282850151848111156200147a57600080fd5b8086019550508c603f8601126200149057600080fd5b888501519350620014a56200124e8562001203565b84815260e09094028501830193898101908e861115620014c457600080fd5b958401955b858710156200159d57868f0360e0811215620014e457600080fd5b620014ee620010a1565b620014f9896200114a565b815260c086830112156200150c57600080fd5b62001516620010cc565b9150620015258d8a0162001167565b825262001534878a0162001167565b8d8301526200154660608a01620013a6565b878301526200155860808a0162001167565b60608301526200156b60a08a0162001167565b60808301526200157e60c08a01620013b9565b60a0830152808d0191909152825260e09690960195908a0190620014c9565b828b01525087525050509284019250830162001413565b600082601f830112620015c657600080fd5b81516020620015d96200124e8362001203565b82815260069290921b84018101918181019086841115620015f957600080fd5b8286015b848110156200129e5760408189031215620016185760008081fd5b62001622620010a1565b6200162d826200114a565b81526200163c8583016200138e565b81860152835291830191604001620015fd565b80516001600160e01b0319811681146200116257600080fd5b600082601f8301126200167a57600080fd5b815160206200168d6200124e8362001203565b8281526102409283028501820192828201919087851115620016ae57600080fd5b8387015b85811015620013815780890382811215620016cd5760008081fd5b620016d7620010a1565b620016e2836200138e565b815261022080601f1984011215620016fa5760008081fd5b62001704620010f1565b925062001713888501620013b9565b8352604062001724818601620013a6565b8985015260606200173781870162001167565b82860152608091506200174c82870162001167565b9085015260a06200175f86820162001167565b8286015260c0915062001774828701620013a6565b9085015260e06200178786820162001167565b8286015261010091506200179d828701620013a6565b90850152610120620017b1868201620013a6565b828601526101409150620017c7828701620013a6565b90850152610160620017db86820162001167565b828601526101809150620017f182870162001167565b908501526101a0620018058682016200138e565b828601526101c091506200181b82870162001167565b908501526101e06200182f86820162001167565b82860152610200915062001845828701620013b9565b90850152620018568583016200164f565b9084015250808701919091528452928401928101620016b2565b6000806000806000806000610120888a0312156200188d57600080fd5b6200189989896200117c565b60608901519097506001600160401b0380821115620018b757600080fd5b620018c58b838c0162001229565b975060808a0151915080821115620018dc57600080fd5b620018ea8b838c0162001229565b965060a08a01519150808211156200190157600080fd5b6200190f8b838c01620012a9565b955060c08a01519150808211156200192657600080fd5b620019348b838c01620013ca565b945060e08a01519150808211156200194b57600080fd5b620019598b838c01620015b4565b93506101008a01519150808211156200197157600080fd5b50620019808a828b0162001668565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b81511515815261022081016020830151620019c6602084018261ffff169052565b506040830151620019df604084018263ffffffff169052565b506060830151620019f8606084018263ffffffff169052565b50608083015162001a11608084018263ffffffff169052565b5060a083015162001a2860a084018261ffff169052565b5060c083015162001a4160c084018263ffffffff169052565b5060e083015162001a5860e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff9081169184019190915261016080850151821690840152610180808501516001600160401b0316908401526101a0808501518216908401526101c080850151909116908301526101e080840151151590830152610200928301516001600160e01b031916929091019190915290565b8181038181111562000ea057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c051615d1162001b81600039600081816102fa01526118750152600081816102be01528181610eb80152610f1801526000818161028a01528181610f410152610fb10152615d116000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c8063770e2dc411610104578063a69c64c0116100a2578063d63d3af211610071578063d63d3af214610ab0578063d8694ccd14610ab8578063f2fde38b14610acb578063ffdb4b3714610ade57600080fd5b8063a69c64c0146109d5578063bf78e03f146109e8578063cdc73d5114610a95578063d02641a014610a9d57600080fd5b8063805f2132116100de578063805f21321461081757806382b49eb01461082a5780638da5cb5b1461099a57806391a2749a146109c257600080fd5b8063770e2dc4146107e957806379ba5097146107fc5780637afac3221461080457600080fd5b8063407e10861161017c5780634ab35b0b1161014b5780634ab35b0b14610457578063514e8cff146104975780636cb5f3dd1461053a5780636def4ce71461054d57600080fd5b8063407e1086146103ee57806341ed29e714610401578063430d138c1461041457806345ac924d1461043757600080fd5b8063181f5a77116101b8578063181f5a77146103735780632451a627146103bc578063325c868e146103d15780633937306f146103d957600080fd5b806241e5be146101de578063061877e31461020457806306285c691461025d575b600080fd5b6101f16101ec3660046143f1565b610b26565b6040519081526020015b60405180910390f35b61024461021236600461442d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016101fb565b610327604080516060810182526000808252602082018190529181019190915260405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff16815250905090565b6040805182516bffffffffffffffffffffffff16815260208084015173ffffffffffffffffffffffffffffffffffffffff16908201529181015163ffffffff16908201526060016101fb565b6103af6040518060400160405280601381526020017f46656551756f74657220312e362e302d6465760000000000000000000000000081525081565b6040516101fb91906144ac565b6103c4610b94565b6040516101fb91906144bf565b6101f1602481565b6103ec6103e7366004614519565b610ba5565b005b6103ec6103fc3660046146bb565b610e5a565b6103ec61040f3660046147ed565b610e6e565b6104276104223660046149c7565b610eb0565b6040516101fb9493929190614abb565b61044a610445366004614b5a565b6110c0565b6040516101fb9190614b9c565b61046a61046536600461442d565b61118b565b6040517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016101fb565b61052d6104a5366004614c17565b60408051808201909152600080825260208201525067ffffffffffffffff166000908152600560209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811683527c0100000000000000000000000000000000000000000000000000000000900463ffffffff169082015290565b6040516101fb9190614c32565b6103ec610548366004614cc3565b611196565b6107dc61055b366004614c17565b6040805161022081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081018290526102008101919091525067ffffffffffffffff908116600090815260096020908152604091829020825161022081018452815460ff8082161515835261ffff61010080840482169685019690965263ffffffff630100000084048116978501979097526701000000000000008304871660608501526b0100000000000000000000008304871660808501526f010000000000000000000000000000008304811660a0850152710100000000000000000000000000000000008304871660c08501527501000000000000000000000000000000000000000000808404821660e08087019190915277010000000000000000000000000000000000000000000000850483169786019790975279010000000000000000000000000000000000000000000000000084049091166101208501527b01000000000000000000000000000000000000000000000000000000909204861661014084015260019093015480861661016084015264010000000081049096166101808301526c01000000000000000000000000860485166101a083015270010000000000000000000000000000000086049094166101c082015274010000000000000000000000000000000000000000850490911615156101e08201527fffffffff0000000000000000000000000000000000000000000000000000000092909304901b1661020082015290565b6040516101fb9190614ee3565b6103ec6107f73660046150e1565b6111a7565b6103ec6111b9565b6103ec6108123660046153fb565b6112b6565b6103ec61082536600461545f565b6112c8565b61093a6108383660046154cb565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525067ffffffffffffffff919091166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff94909416835292815290829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a082015290565b6040516101fb9190600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fb565b6103ec6109d03660046154f5565b6117b0565b6103ec6109e3366004615586565b6117c1565b610a616109f636600461442d565b6040805180820182526000808252602091820181905273ffffffffffffffffffffffffffffffffffffffff93841681526007825282902082518084019093525492831682527401000000000000000000000000000000000000000090920460ff169181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260209283015160ff1692810192909252016101fb565b6103c46117d2565b61052d610aab36600461442d565b6117de565b6101f1601281565b6101f1610ac636600461564b565b61194b565b6103ec610ad936600461442d565b611e83565b610af1610aec3660046156a0565b611e94565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101fb565b6000610b3182611f4c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610b5885611f4c565b610b80907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16856156f9565b610b8a9190615710565b90505b9392505050565b6060610ba06002611fe6565b905090565b610bad611ff3565b6000610bb9828061574b565b9050905060005b81811015610d03576000610bd4848061574b565b83818110610be457610be46157b3565b905060400201803603810190610bfa919061580e565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885173ffffffffffffffffffffffffffffffffffffffff9081166000908152600690975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a92610cf29290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610bc0565b506000610d13602084018461574b565b9050905060005b81811015610e54576000610d31602086018661574b565b83818110610d4157610d416157b3565b905060400201803603810190610d57919061584b565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885167ffffffffffffffff9081166000908152600590975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927fdd84a3fa9ef9409f550d54d6affec7e9c480c878c6ab27b78912a03e1b371c6e92610e439290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610d1a565b50505050565b610e62612038565b610e6b816120b9565b50565b610e76612038565b60005b8151811015610eac57610ea4828281518110610e9757610e976157b3565b60200260200101516121b7565b600101610e79565b5050565b6000806060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603610f11578a9350610f3f565b610f3c8c8c7f0000000000000000000000000000000000000000000000000000000000000000610b26565b93505b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16841115610fe3576040517f6a92a483000000000000000000000000000000000000000000000000000000008152600481018590526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044015b60405180910390fd5b67ffffffffffffffff8d1660009081526009602052604081206001015463ffffffff16906110128c8c84612389565b9050806020015194506110288f8b8b8b8b612532565b925085856110a8836040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf100000000000000000000000000000000000000000000000000000000017905290565b95509550955050509950995099509995505050505050565b60608160008167ffffffffffffffff8111156110de576110de614554565b60405190808252806020026020018201604052801561112357816020015b60408051808201909152600080825260208201528152602001906001900390816110fc5790505b50905060005b828110156111805761115b868683818110611146576111466157b3565b9050602002016020810190610aab919061442d565b82828151811061116d5761116d6157b3565b6020908102919091010152600101611129565b509150505b92915050565b600061118582611f4c565b61119e612038565b610e6b816128a3565b6111af612038565b610eac8282612d75565b60015473ffffffffffffffffffffffffffffffffffffffff16331461123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610fda565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6112be612038565b610eac8282613187565b600080600061130c87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132ce92505050565b92509250925061131e338385846132e9565b600061132c8587018761586e565b905060005b81518110156117a557600060076000848481518110611352576113526157b3565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160009081205474010000000000000000000000000000000000000000900460ff169150819003611413578282815181106113bc576113bc6157b3565b6020908102919091010151516040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610fda565b600061145c60128386868151811061142d5761142d6157b3565b6020026020010151602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613441565b905060066000858581518110611474576114746157b3565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001601c9054906101000a900463ffffffff1663ffffffff168484815181106114e6576114e66157b3565b60200260200101516040015163ffffffff1610156115f057838381518110611510576115106157b3565b60200260200101516000015184848151811061152e5761152e6157b3565b60200260200101516040015160066000878781518110611550576115506157b3565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260409081016000205490517f191ec70600000000000000000000000000000000000000000000000000000000815293909116600484015263ffffffff91821660248401527c01000000000000000000000000000000000000000000000000000000009004166044820152606401610fda565b6040518060400160405280827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001858581518110611631576116316157b3565b60200260200101516040015163ffffffff168152506006600086868151811061165c5761165c6157b3565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040016000208251929091015163ffffffff167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90921691909117905583518490849081106116f4576116f46157b3565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff167f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a8286868151811061174a5761174a6157b3565b6020026020010151604001516040516117939291907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216825263ffffffff16602082015260400190565b60405180910390a25050600101611331565b505050505050505050565b6117b8612038565b610e6b81613504565b6117c9612038565b610e6b81613690565b6060610ba0600b611fe6565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116835263ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169183018290527f000000000000000000000000000000000000000000000000000000000000000016906118a09042615935565b10156118ac5792915050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600760209081526040918290208251808401909352549283168083527401000000000000000000000000000000000000000090930460ff169082015290611911575092915050565b600061191c8261377a565b9050826020015163ffffffff16816020015163ffffffff1610156119405782611942565b805b95945050505050565b67ffffffffffffffff8083166000908152600960209081526040808320815161022081018352815460ff808216151580845261ffff61010080850482169886019890985263ffffffff630100000085048116978601979097526701000000000000008404871660608601526b0100000000000000000000008404871660808601526f010000000000000000000000000000008404811660a0860152710100000000000000000000000000000000008404871660c08601527501000000000000000000000000000000000000000000808504821660e08088019190915277010000000000000000000000000000000000000000000000860483169987019990995279010000000000000000000000000000000000000000000000000085049091166101208601527b01000000000000000000000000000000000000000000000000000000909304861661014085015260019094015480861661016085015264010000000081049098166101808401526c01000000000000000000000000880485166101a084015270010000000000000000000000000000000088049094166101c083015274010000000000000000000000000000000000000000870490931615156101e08201527fffffffff000000000000000000000000000000000000000000000000000000009290950490921b16610200840152909190611b85576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610fda565b611ba0611b98608085016060860161442d565b600b9061390c565b611bff57611bb4608084016060850161442d565b6040517f2502348c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610fda565b6000611c0e604085018561574b565b9150611c6a905082611c236020870187615948565b905083611c308880615948565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061393b92505050565b6000611c84611c7f608087016060880161442d565b611f4c565b90506000611c9787856101c001516139e5565b9050600080808515611cd757611ccb878b611cb860808d0160608e0161442d565b88611cc660408f018f61574b565b613ae5565b91945092509050611cf7565b6101a0870151611cf49063ffffffff16662386f26fc100006156f9565b92505b61010087015160009061ffff1615611d3b57611d38886dffffffffffffffffffffffffffff607088901c16611d2f60208e018e615948565b90508a86613dbd565b90505b61018088015160009067ffffffffffffffff16611d64611d5e60808e018e615948565b8c613e6d565b600001518563ffffffff168b60a0015161ffff168e8060200190611d889190615948565b611d939291506156f9565b8c6080015163ffffffff16611da891906159ad565b611db291906159ad565b611dbc91906159ad565b611dd6906dffffffffffffffffffffffffffff89166156f9565b611de091906156f9565b9050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168282600860008f6060016020810190611e1a919061442d565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054611e559067ffffffffffffffff16896156f9565b611e5f91906159ad565b611e6991906159ad565b611e739190615710565b9c9b505050505050505050505050565b611e8b612038565b610e6b81613f2e565b67ffffffffffffffff8116600090815260096020526040812054819060ff16611ef5576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610fda565b611efe84611f4c565b67ffffffffffffffff8416600090815260096020526040902060010154611f40908590700100000000000000000000000000000000900463ffffffff166139e5565b915091505b9250929050565b600080611f58836117de565b9050806020015163ffffffff1660001480611f90575080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16155b15611fdf576040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610fda565b5192915050565b60606000610b8d83614023565b611ffe60023361390c565b612036576040517fd86ad9cf000000000000000000000000000000000000000000000000000000008152336004820152602401610fda565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610fda565b60005b8151811015610eac5760008282815181106120d9576120d96157b3565b60209081029190910181015180518183015173ffffffffffffffffffffffffffffffffffffffff80831660008181526007875260409081902084518154868a018051929096167fffffffffffffffffffffff00000000000000000000000000000000000000000090911681177401000000000000000000000000000000000000000060ff9384160217909255825191825293519093169683019690965293955091939092917f08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464910160405180910390a25050508060010190506120bc565b600061227082600001518360600151846020015185604001516040805173ffffffffffffffffffffffffffffffffffffffff80871660208301528516918101919091527fffffffffffffffffffff00000000000000000000000000000000000000000000831660608201527fffff0000000000000000000000000000000000000000000000000000000000008216608082015260009060a001604051602081830303815290604052805190602001209050949350505050565b60808301516000828152600460205260409081902080549215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909316929092179091555190915081907f32a4ba3fa3351b11ad555d4c8ec70a744e8705607077a946807030d64b6ab1a39061237d908590600060a08201905073ffffffffffffffffffffffffffffffffffffffff8084511683527fffffffffffffffffffff0000000000000000000000000000000000000000000060208501511660208401527fffff00000000000000000000000000000000000000000000000000000000000060408501511660408401528060608501511660608401525060808301511515608083015292915050565b60405180910390a25050565b604080518082019091526000808252602082015260008390036123ca57506040805180820190915267ffffffffffffffff8216815260006020820152610b8d565b60006123d684866159c0565b905060006123e78560048189615a06565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050507fffffffff0000000000000000000000000000000000000000000000000000000082167fe7e230f00000000000000000000000000000000000000000000000000000000001612484578080602001905181019061247b9190615a30565b92505050610b8d565b7f6859a837000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601612500576040518060400160405280828060200190518101906124ec9190615a5c565b815260006020909101529250610b8d915050565b6040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff808616600090815260096020526040902060010154606091750100000000000000000000000000000000000000000090910460e01b90859081111561258257612582614554565b6040519080825280602002602001820160405280156125b557816020015b60608152602001906001900390816125a05790505b50915060005b858110156128985760008585838181106125d7576125d76157b3565b6125ed926020604090920201908101915061442d565b90506000888884818110612603576126036157b3565b90506020028101906126159190615a75565b612623906040810190615948565b91505060208111156126d35767ffffffffffffffff8a166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020546e010000000000000000000000000000900463ffffffff168111156126d3576040517f36f536ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610fda565b612743848a8a868181106126e9576126e96157b3565b90506020028101906126fb9190615a75565b612709906020810190615948565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061407f92505050565b67ffffffffffffffff8a166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684528252808320815160c081018352905463ffffffff8082168352640100000000820481168386015268010000000000000000820461ffff16838501526a01000000000000000000008204811660608401526e010000000000000000000000000000820481166080840152720100000000000000000000000000000000000090910460ff16151560a08301908152958552600990935290832054935190937b01000000000000000000000000000000000000000000000000000000900490911691906128425781612848565b82606001515b6040805163ffffffff831660208201529192500160405160208183030381529060405288878151811061287d5761287d6157b3565b602002602001018190525050505050508060010190506125bb565b505095945050505050565b60005b8151811015610eac5760008282815181106128c3576128c36157b3565b6020026020010151905060008383815181106128e1576128e16157b3565b60200260200101516000015190506000826020015190508167ffffffffffffffff166000148061291a575061016081015163ffffffff16155b8061296c57506102008101517fffffffff00000000000000000000000000000000000000000000000000000000167f2812d52c0000000000000000000000000000000000000000000000000000000014155b8061298b5750806060015163ffffffff1681610160015163ffffffff16115b156129ce576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fda565b67ffffffffffffffff82166000908152600960205260408120600101547501000000000000000000000000000000000000000000900460e01b7fffffffff00000000000000000000000000000000000000000000000000000000169003612a76578167ffffffffffffffff167f525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda4626582604051612a699190614ee3565b60405180910390a2612ab9565b8167ffffffffffffffff167f283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a83582604051612ab09190614ee3565b60405180910390a25b80600960008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055506101e08201518160010160146101000a81548160ff0219169083151502179055506102008201518160010160156101000a81548163ffffffff021916908360e01c02179055509050505050508060010190506128a6565b60005b825181101561309e576000838281518110612d9557612d956157b3565b6020026020010151905060008160000151905060005b82602001515181101561309057600083602001518281518110612dd057612dd06157b3565b6020026020010151602001519050600084602001518381518110612df657612df66157b3565b6020026020010151600001519050602063ffffffff16826080015163ffffffff161015612e795760808201516040517f24ecdc0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015263ffffffff9091166024820152604401610fda565b67ffffffffffffffff84166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529083529281902086518154938801518389015160608a015160808b015160a08c015115157201000000000000000000000000000000000000027fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff63ffffffff9283166e01000000000000000000000000000002167fffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffff9383166a0100000000000000000000027fffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffff61ffff9096166801000000000000000002959095167fffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff968416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b59061307e908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a35050600101612dab565b505050806001019050612d78565b5060005b81518110156131825760008282815181106130bf576130bf6157b3565b602002602001015160000151905060008383815181106130e1576130e16157b3565b60209081029190910181015181015167ffffffffffffffff84166000818152600a8452604080822073ffffffffffffffffffffffffffffffffffffffff8516808452955280822080547fffffffffffffffffffffffffff000000000000000000000000000000000000001690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a350506001016130a2565b505050565b60005b825181101561322a576131c08382815181106131a8576131a86157b3565b6020026020010151600b6140d190919063ffffffff16565b15613222578281815181106131d7576131d76157b3565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b60010161318a565b5060005b81518110156131825761326482828151811061324c5761324c6157b3565b6020026020010151600b6140f390919063ffffffff16565b156132c65781818151811061327b5761327b6157b3565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b60010161322e565b6040810151604a820151605e90920151909260609290921c91565b6040805173ffffffffffffffffffffffffffffffffffffffff868116602080840191909152908616828401527fffffffffffffffffffff00000000000000000000000000000000000000000000851660608301527fffff00000000000000000000000000000000000000000000000000000000000084166080808401919091528351808403909101815260a09092018352815191810191909120600081815260049092529190205460ff1661343a576040517f097e17ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201527fffffffffffffffffffff00000000000000000000000000000000000000000000841660448201527fffff00000000000000000000000000000000000000000000000000000000000083166064820152608401610fda565b5050505050565b60008061344e8486615ab3565b9050600060248260ff1611156134885761346c602460ff8416615935565b61347790600a615bec565b6134819085615710565b90506134ae565b61349660ff83166024615935565b6134a190600a615bec565b6134ab90856156f9565b90505b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611942576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160005b815181101561359f576000828281518110613529576135296157b3565b6020026020010151905061354781600261411590919063ffffffff16565b156135965760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b5060010161350c565b50815160005b8151811015610e545760008282815181106135c2576135c26157b3565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613632576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61363d6002826140f3565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a1506001016135a5565b60005b8151811015610eac5760008282815181106136b0576136b06157b3565b602002602001015160000151905060008383815181106136d2576136d26157b3565b60209081029190910181015181015173ffffffffffffffffffffffffffffffffffffffff841660008181526008845260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a25050600101613693565b60408051808201909152600080825260208201526000826000015190506000808273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156137e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138099190615c12565b50935050925050600082121561384b576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006138ca8473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561389b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138bf9190615c62565b876020015185613441565b604080518082019091527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116815263ffffffff909216602083015250949350505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610b8d565b836040015163ffffffff168311156139945760408085015190517f8693378900000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101849052604401610fda565b836020015161ffff168211156139d6576040517f4c056b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e548461020001518261407f565b67ffffffffffffffff821660009081526005602090815260408083208151808301909252547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116825263ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169282019290925290831615613add576000816020015163ffffffff1642613a7a9190615935565b90508363ffffffff16811115613adb576040517ff08bcb3e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8616600482015263ffffffff8516602482015260448101829052606401610fda565b505b519392505050565b6000808083815b81811015613daf576000878783818110613b0857613b086157b3565b905060400201803603810190613b1e9190615c7f565b67ffffffffffffffff8c166000908152600a60209081526040808320845173ffffffffffffffffffffffffffffffffffffffff168452825291829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a0820181905291925090613c3e576101208d0151613c0b9061ffff16662386f26fc100006156f9565b613c1590886159ad565b96508c610140015186613c289190615cb8565b9550613c35602086615cb8565b94505050613da7565b604081015160009061ffff1615613cf75760008c73ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614613c9a578351613c9390611f4c565b9050613c9d565b508a5b620186a0836040015161ffff16613cdf8660200151847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661413790919063ffffffff16565b613ce991906156f9565b613cf39190615710565b9150505b6060820151613d069088615cb8565b9650816080015186613d189190615cb8565b8251909650600090613d379063ffffffff16662386f26fc100006156f9565b905080821015613d5657613d4b818a6159ad565b985050505050613da7565b6000836020015163ffffffff16662386f26fc10000613d7591906156f9565b905080831115613d9557613d89818b6159ad565b99505050505050613da7565b613d9f838b6159ad565b995050505050505b600101613aec565b505096509650969350505050565b60008063ffffffff8316613dd3610120866156f9565b613ddf876101e06159ad565b613de991906159ad565b613df391906159ad565b905060008760c0015163ffffffff168860e0015161ffff1683613e1691906156f9565b613e2091906159ad565b61010089015190915061ffff16613e476dffffffffffffffffffffffffffff8916836156f9565b613e5191906156f9565b613e6190655af3107a40006156f9565b98975050505050505050565b60408051808201909152600080825260208201526000613e99858585610160015163ffffffff16612389565b9050826060015163ffffffff1681600001511115613ee3576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826101e001518015613ef757508060200151155b15610b8a576040517fee433e9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603613fad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610fda565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60608160000180548060200260200160405190810160405280929190818152602001828054801561407357602002820191906000526020600020905b81548152602001906001019080831161405f575b50505050509050919050565b7fd7ed2ad4000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601610eac5761318281614174565b6000610b8d8373ffffffffffffffffffffffffffffffffffffffff8416614227565b6000610b8d8373ffffffffffffffffffffffffffffffffffffffff8416614321565b6000610b8d8373ffffffffffffffffffffffffffffffffffffffff8416614370565b6000670de0b6b3a764000061416a837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86166156f9565b610b8d9190615710565b600081516020146141b357816040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610fda91906144ac565b6000828060200190518101906141c99190615a5c565b905073ffffffffffffffffffffffffffffffffffffffff8111806141ee575061040081105b1561118557826040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610fda91906144ac565b6000818152600183016020526040812054801561431057600061424b600183615935565b855490915060009061425f90600190615935565b90508082146142c457600086600001828154811061427f5761427f6157b3565b90600052602060002001549050808760000184815481106142a2576142a26157b3565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806142d5576142d5615cd5565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611185565b6000915050611185565b5092915050565b600081815260018301602052604081205461436857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611185565b506000611185565b60008181526001830160205260408120548015614310576000614394600183615935565b85549091506000906143a890600190615935565b90508181146142c457600086600001828154811061427f5761427f6157b3565b803573ffffffffffffffffffffffffffffffffffffffff811681146143ec57600080fd5b919050565b60008060006060848603121561440657600080fd5b61440f846143c8565b925060208401359150614424604085016143c8565b90509250925092565b60006020828403121561443f57600080fd5b610b8d826143c8565b6000815180845260005b8181101561446e57602081850181015186830182015201614452565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610b8d6020830184614448565b6020808252825182820181905260009190848201906040850190845b8181101561450d57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016144db565b50909695505050505050565b60006020828403121561452b57600080fd5b813567ffffffffffffffff81111561454257600080fd5b820160408185031215610b8d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156145a6576145a6614554565b60405290565b60405160a0810167ffffffffffffffff811182821017156145a6576145a6614554565b604051610220810167ffffffffffffffff811182821017156145a6576145a6614554565b60405160c0810167ffffffffffffffff811182821017156145a6576145a6614554565b6040516060810167ffffffffffffffff811182821017156145a6576145a6614554565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561468057614680614554565b604052919050565b600067ffffffffffffffff8211156146a2576146a2614554565b5060051b60200190565b60ff81168114610e6b57600080fd5b600060208083850312156146ce57600080fd5b823567ffffffffffffffff8111156146e557600080fd5b8301601f810185136146f657600080fd5b803561470961470482614688565b614639565b8181526060918202830184019184820191908884111561472857600080fd5b938501935b838510156147c857848903818112156147465760008081fd5b61474e614583565b614757876143c8565b81526040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401121561478b5760008081fd5b614793614583565b92506147a08989016143c8565b83528701356147ae816146ac565b82890152808801919091528352938401939185019161472d565b50979650505050505050565b8015158114610e6b57600080fd5b80356143ec816147d4565b6000602080838503121561480057600080fd5b823567ffffffffffffffff81111561481757600080fd5b8301601f8101851361482857600080fd5b803561483661470482614688565b81815260a0918202830184019184820191908884111561485557600080fd5b938501935b838510156147c85780858a0312156148725760008081fd5b61487a6145ac565b614883866143c8565b8152868601357fffffffffffffffffffff00000000000000000000000000000000000000000000811681146148b85760008081fd5b818801526040868101357fffff000000000000000000000000000000000000000000000000000000000000811681146148f15760008081fd5b9082015260606149028782016143c8565b90820152608086810135614915816147d4565b908201528352938401939185019161485a565b803567ffffffffffffffff811681146143ec57600080fd5b60008083601f84011261495257600080fd5b50813567ffffffffffffffff81111561496a57600080fd5b602083019150836020828501011115611f4557600080fd5b60008083601f84011261499457600080fd5b50813567ffffffffffffffff8111156149ac57600080fd5b6020830191508360208260051b8501011115611f4557600080fd5b600080600080600080600080600060c08a8c0312156149e557600080fd5b6149ee8a614928565b98506149fc60208b016143c8565b975060408a0135965060608a013567ffffffffffffffff80821115614a2057600080fd5b614a2c8d838e01614940565b909850965060808c0135915080821115614a4557600080fd5b614a518d838e01614982565b909650945060a08c0135915080821115614a6a57600080fd5b818c0191508c601f830112614a7e57600080fd5b813581811115614a8d57600080fd5b8d60208260061b8501011115614aa257600080fd5b6020830194508093505050509295985092959850929598565b848152600060208515158184015260806040840152614add6080840186614448565b8381036060850152845180825282820190600581901b8301840184880160005b83811015614b49577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018552614b37838351614448565b94870194925090860190600101614afd565b50909b9a5050505050505050505050565b60008060208385031215614b6d57600080fd5b823567ffffffffffffffff811115614b8457600080fd5b614b9085828601614982565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b82811015614c0a57614bfa84835180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16825260209081015163ffffffff16910152565b9284019290850190600101614bb9565b5091979650505050505050565b600060208284031215614c2957600080fd5b610b8d82614928565b81517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260208083015163ffffffff169082015260408101611185565b803561ffff811681146143ec57600080fd5b803563ffffffff811681146143ec57600080fd5b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146143ec57600080fd5b60006020808385031215614cd657600080fd5b823567ffffffffffffffff811115614ced57600080fd5b8301601f81018513614cfe57600080fd5b8035614d0c61470482614688565b8181526102409182028301840191848201919088841115614d2c57600080fd5b938501935b838510156147c85784890381811215614d4a5760008081fd5b614d52614583565b614d5b87614928565b8152610220807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084011215614d905760008081fd5b614d986145cf565b9250614da58989016147e2565b83526040614db4818a01614c6d565b8a8501526060614dc5818b01614c7f565b8286015260809150614dd8828b01614c7f565b9085015260a0614de98a8201614c7f565b8286015260c09150614dfc828b01614c6d565b9085015260e0614e0d8a8201614c7f565b828601526101009150614e21828b01614c6d565b90850152610120614e338a8201614c6d565b828601526101409150614e47828b01614c6d565b90850152610160614e598a8201614c7f565b828601526101809150614e6d828b01614c7f565b908501526101a0614e7f8a8201614928565b828601526101c09150614e93828b01614c7f565b908501526101e0614ea58a8201614c7f565b828601526102009150614eb9828b016147e2565b90850152614ec8898301614c93565b90840152508088019190915283529384019391850191614d31565b81511515815261022081016020830151614f03602084018261ffff169052565b506040830151614f1b604084018263ffffffff169052565b506060830151614f33606084018263ffffffff169052565b506080830151614f4b608084018263ffffffff169052565b5060a0830151614f6160a084018261ffff169052565b5060c0830151614f7960c084018263ffffffff169052565b5060e0830151614f8f60e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff90811691840191909152610160808501518216908401526101808085015167ffffffffffffffff16908401526101a0808501518216908401526101c080850151909116908301526101e080840151151590830152610200808401517fffffffff000000000000000000000000000000000000000000000000000000008116828501525b505092915050565b600082601f83011261505a57600080fd5b8135602061506a61470483614688565b82815260069290921b8401810191818101908684111561508957600080fd5b8286015b848110156150d657604081890312156150a65760008081fd5b6150ae614583565b6150b782614928565b81526150c48583016143c8565b8186015283529183019160400161508d565b509695505050505050565b600080604083850312156150f457600080fd5b67ffffffffffffffff8335111561510a57600080fd5b83601f84358501011261511c57600080fd5b61512c6147048435850135614688565b8335840180358083526020808401939260059290921b9091010186101561515257600080fd5b602085358601015b85358601803560051b0160200181101561535f5767ffffffffffffffff8135111561518457600080fd5b8035863587010160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a030112156151bd57600080fd5b6151c5614583565b6151d160208301614928565b815267ffffffffffffffff604083013511156151ec57600080fd5b88603f60408401358401011261520157600080fd5b6152176147046020604085013585010135614688565b6020604084810135850182810135808552928401939260e00201018b101561523e57600080fd5b6040808501358501015b6040858101358601602081013560e00201018110156153405760e0818d03121561527157600080fd5b615279614583565b615282826143c8565b815260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838f030112156152b657600080fd5b6152be6145f3565b6152ca60208401614c7f565b81526152d860408401614c7f565b60208201526152e960608401614c6d565b60408201526152fa60808401614c7f565b606082015261530b60a08401614c7f565b608082015261531d60c08401356147d4565b60c083013560a0820152602082810191909152908452929092019160e001615248565b508060208401525050808552505060208301925060208101905061515a565b5092505067ffffffffffffffff6020840135111561537c57600080fd5b61538c8460208501358501615049565b90509250929050565b600082601f8301126153a657600080fd5b813560206153b661470483614688565b8083825260208201915060208460051b8701019350868411156153d857600080fd5b602086015b848110156150d6576153ee816143c8565b83529183019183016153dd565b6000806040838503121561540e57600080fd5b823567ffffffffffffffff8082111561542657600080fd5b61543286838701615395565b9350602085013591508082111561544857600080fd5b5061545585828601615395565b9150509250929050565b6000806000806040858703121561547557600080fd5b843567ffffffffffffffff8082111561548d57600080fd5b61549988838901614940565b909650945060208701359150808211156154b257600080fd5b506154bf87828801614940565b95989497509550505050565b600080604083850312156154de57600080fd5b6154e783614928565b915061538c602084016143c8565b60006020828403121561550757600080fd5b813567ffffffffffffffff8082111561551f57600080fd5b908301906040828603121561553357600080fd5b61553b614583565b82358281111561554a57600080fd5b61555687828601615395565b82525060208301358281111561556b57600080fd5b61557787828601615395565b60208301525095945050505050565b6000602080838503121561559957600080fd5b823567ffffffffffffffff8111156155b057600080fd5b8301601f810185136155c157600080fd5b80356155cf61470482614688565b81815260069190911b820183019083810190878311156155ee57600080fd5b928401925b82841015615640576040848903121561560c5760008081fd5b615614614583565b61561d856143c8565b815261562a868601614928565b81870152825260409390930192908401906155f3565b979650505050505050565b6000806040838503121561565e57600080fd5b61566783614928565b9150602083013567ffffffffffffffff81111561568357600080fd5b830160a0818603121561569557600080fd5b809150509250929050565b600080604083850312156156b357600080fd5b6156bc836143c8565b915061538c60208401614928565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417611185576111856156ca565b600082615746577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261578057600080fd5b83018035915067ffffffffffffffff82111561579b57600080fd5b6020019150600681901b3603821315611f4557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146143ec57600080fd5b60006040828403121561582057600080fd5b615828614583565b615831836143c8565b815261583f602084016157e2565b60208201529392505050565b60006040828403121561585d57600080fd5b615865614583565b61583183614928565b6000602080838503121561588157600080fd5b823567ffffffffffffffff81111561589857600080fd5b8301601f810185136158a957600080fd5b80356158b761470482614688565b818152606091820283018401918482019190888411156158d657600080fd5b938501935b838510156147c85780858a0312156158f35760008081fd5b6158fb614616565b615904866143c8565b81526159118787016157e2565b878201526040615922818801614c7f565b90820152835293840193918501916158db565b81810381811115611185576111856156ca565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261597d57600080fd5b83018035915067ffffffffffffffff82111561599857600080fd5b602001915036819003821315611f4557600080fd5b80820180821115611185576111856156ca565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156150415760049490940360031b84901b1690921692915050565b60008085851115615a1657600080fd5b83861115615a2357600080fd5b5050820193919092039150565b600060408284031215615a4257600080fd5b615a4a614583565b82518152602083015161583f816147d4565b600060208284031215615a6e57600080fd5b5051919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112615aa957600080fd5b9190910192915050565b60ff8181168382160190811115611185576111856156ca565b600181815b80851115615b2557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b0b57615b0b6156ca565b80851615615b1857918102915b93841c9390800290615ad1565b509250929050565b600082615b3c57506001611185565b81615b4957506000611185565b8160018114615b5f5760028114615b6957615b85565b6001915050611185565b60ff841115615b7a57615b7a6156ca565b50506001821b611185565b5060208310610133831016604e8410600b8410161715615ba8575081810a611185565b615bb28383615acc565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615be457615be46156ca565b029392505050565b6000610b8d8383615b2d565b805169ffffffffffffffffffff811681146143ec57600080fd5b600080600080600060a08688031215615c2a57600080fd5b615c3386615bf8565b9450602086015193506040860151925060608601519150615c5660808701615bf8565b90509295509295909350565b600060208284031215615c7457600080fd5b8151610b8d816146ac565b600060408284031215615c9157600080fd5b615c99614583565b615ca2836143c8565b8152602083013560208201528091505092915050565b63ffffffff81811683821601908082111561431a5761431a6156ca565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var FeeQuoterABI = FeeQuoterMetaData.ABI @@ -767,16 +767,16 @@ func (_FeeQuoter *FeeQuoterTransactorSession) ApplyDestChainConfigUpdates(destCh return _FeeQuoter.Contract.ApplyDestChainConfigUpdates(&_FeeQuoter.TransactOpts, destChainConfigArgs) } -func (_FeeQuoter *FeeQuoterTransactor) ApplyFeeTokensUpdates(opts *bind.TransactOpts, feeTokensToAdd []common.Address, feeTokensToRemove []common.Address) (*types.Transaction, error) { - return _FeeQuoter.contract.Transact(opts, "applyFeeTokensUpdates", feeTokensToAdd, feeTokensToRemove) +func (_FeeQuoter *FeeQuoterTransactor) ApplyFeeTokensUpdates(opts *bind.TransactOpts, feeTokensToRemove []common.Address, feeTokensToAdd []common.Address) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "applyFeeTokensUpdates", feeTokensToRemove, feeTokensToAdd) } -func (_FeeQuoter *FeeQuoterSession) ApplyFeeTokensUpdates(feeTokensToAdd []common.Address, feeTokensToRemove []common.Address) (*types.Transaction, error) { - return _FeeQuoter.Contract.ApplyFeeTokensUpdates(&_FeeQuoter.TransactOpts, feeTokensToAdd, feeTokensToRemove) +func (_FeeQuoter *FeeQuoterSession) ApplyFeeTokensUpdates(feeTokensToRemove []common.Address, feeTokensToAdd []common.Address) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyFeeTokensUpdates(&_FeeQuoter.TransactOpts, feeTokensToRemove, feeTokensToAdd) } -func (_FeeQuoter *FeeQuoterTransactorSession) ApplyFeeTokensUpdates(feeTokensToAdd []common.Address, feeTokensToRemove []common.Address) (*types.Transaction, error) { - return _FeeQuoter.Contract.ApplyFeeTokensUpdates(&_FeeQuoter.TransactOpts, feeTokensToAdd, feeTokensToRemove) +func (_FeeQuoter *FeeQuoterTransactorSession) ApplyFeeTokensUpdates(feeTokensToRemove []common.Address, feeTokensToAdd []common.Address) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyFeeTokensUpdates(&_FeeQuoter.TransactOpts, feeTokensToRemove, feeTokensToAdd) } func (_FeeQuoter *FeeQuoterTransactor) ApplyPremiumMultiplierWeiPerEthUpdates(opts *bind.TransactOpts, premiumMultiplierWeiPerEthArgs []FeeQuoterPremiumMultiplierWeiPerEthArgs) (*types.Transaction, error) { @@ -2956,7 +2956,7 @@ type FeeQuoterInterface interface { ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []FeeQuoterDestChainConfigArgs) (*types.Transaction, error) - ApplyFeeTokensUpdates(opts *bind.TransactOpts, feeTokensToAdd []common.Address, feeTokensToRemove []common.Address) (*types.Transaction, error) + ApplyFeeTokensUpdates(opts *bind.TransactOpts, feeTokensToRemove []common.Address, feeTokensToAdd []common.Address) (*types.Transaction, error) ApplyPremiumMultiplierWeiPerEthUpdates(opts *bind.TransactOpts, premiumMultiplierWeiPerEthArgs []FeeQuoterPremiumMultiplierWeiPerEthArgs) (*types.Transaction, error) diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 319320ff8f3..8705ccf4b5f 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -154,8 +154,8 @@ type OffRampStaticConfig struct { } var OffRampMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162006c4638038062006c46833981016040819052620000359162000885565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0c565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d0576000828281518110620003915762000391620009c2565b60200260200101519050600081602001519050806001600160401b0316600003620003cf5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003f8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200042690620009d8565b905060000362000489578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004c8565b8154600160a81b90046001600160401b0316600114620004c857604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620004fe5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200051d576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200052d828262000a69565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200057c60066001600160401b038516620005d4565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005b8919062000b35565b60405180910390a25050505080600101905062000370565b5050565b6000620005e28383620005eb565b90505b92915050565b60008181526001830160205260408120546200063457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e5565b506000620005e5565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067857620006786200063d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006a957620006a96200063d565b604052919050565b80516001600160401b0381168114620006c957600080fd5b919050565b6001600160a01b0381168114620006e457600080fd5b50565b6000601f83601f840112620006fb57600080fd5b825160206001600160401b03808311156200071a576200071a6200063d565b8260051b6200072b8382016200067e565b93845286810183019383810190898611156200074657600080fd5b84890192505b858310156200087857825184811115620007665760008081fd5b89016080601f19828d038101821315620007805760008081fd5b6200078a62000653565b888401516200079981620006ce565b81526040620007aa858201620006b1565b8a8301526060808601518015158114620007c45760008081fd5b83830152938501519389851115620007dc5760008081fd5b84860195508f603f870112620007f457600094508485fd5b8a8601519450898511156200080d576200080d6200063d565b6200081e8b858f880116016200067e565b93508484528f82868801011115620008365760008081fd5b60005b8581101562000856578681018301518582018d01528b0162000839565b5060009484018b0194909452509182015283525091840191908401906200074c565b9998505050505050505050565b60008060008385036101008112156200089d57600080fd5b6080811215620008ac57600080fd5b620008b662000653565b620008c186620006b1565b81526020860151620008d381620006ce565b60208201526040860151620008e881620006ce565b60408201526060860151620008fd81620006ce565b606082810191909152909450607f19820112156200091a57600080fd5b50604051606081016001600160401b0380821183831017156200094157620009416200063d565b81604052608087015191506200095782620006ce565b90825260a08601519063ffffffff821682146200097357600080fd5b81602084015260c087015191506200098b82620006ce565b6040830182905260e087015192945080831115620009a857600080fd5b5050620009b886828701620006e7565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ed57607f821691505b60208210810362000a0e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a64576000816000526020600020601f850160051c8101602086101562000a3f5750805b601f850160051c820191505b8181101562000a605782815560010162000a4b565b5050505b505050565b81516001600160401b0381111562000a855762000a856200063d565b62000a9d8162000a968454620009d8565b8462000a14565b602080601f83116001811462000ad5576000841562000abc5750858301515b600019600386901b1c1916600185901b17855562000a60565b600085815260208120601f198616915b8281101562000b065788860151825594840194600190910190840162000ae5565b508582101562000b255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8a81620009d8565b8060a089015260c0600183166000811462000bae576001811462000bcb5762000bfd565b60ff19841660c08b015260c083151560051b8b0101945062000bfd565b85600052602060002060005b8481101562000bf45781548c820185015290880190890162000bd7565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fc462000c82600039600081816102470152612c970152600081816102180152612f860152600081816101e9015281816105890152818161073b01526126580152600081816101ba0152612897015260008181611d7d0152611db00152615fc46000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636f9e320f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ed578063f2fde38b1461050d578063f716f99f1461052057600080fd5b8063c673e58414610489578063ccd37ba3146104a957600080fd5b806379ba5097116100b257806379ba50971461045857806385572ffb146104605780638da5cb5b1461046e57600080fd5b80636f9e320f146103b35780637437ff9f146103c657600080fd5b80633f4b04aa116101245780635e36480c116101095780635e36480c1461036d5780635e7bb0081461038d57806360987c20146103a057600080fd5b80633f4b04aa1461033c5780635215505b1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613edb565b610533565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190614049565b6101846103243660046140f9565b610547565b6101846103373660046141ab565b610a4e565b600b546040516001600160401b0390911681526020016102c4565b61035f610ab7565b6040516102c4929190614245565b61038061037b3660046142e6565b610d12565b6040516102c49190614343565b61018461039b3660046148ac565b610d67565b6101846103ae366004614af0565b610ff6565b6101846103c1366004614b84565b6112d6565b610422604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b6101846112e7565b61018461016c366004614bf3565b6000546040516001600160a01b0390911681526020016102c4565b61049c610497366004614c3e565b611398565b6040516102c49190614c9e565b6104df6104b7366004614d13565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6105006104fb366004614d3d565b6114f6565b6040516102c49190614d58565b61018461051b366004614d6b565b611602565b61018461052e366004614df0565b611613565b61053b611655565b610544816116b1565b50565b600061055587890189615145565b602081015151909150156105f257602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c193309390919060040161537a565b60006040518083038186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050505b8051515115158061060857508051602001515115155b156106d457600b5460208a0135906001600160401b03808316911610156106ac57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106759291016154c7565b600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106d2565b8160200151516000036106d257604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098f576000826020015182815181106106fc576106fc6153f5565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a691906154da565b156107d457604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107df82611918565b9050806001016040516107f29190615531565b60405180910390208360200151805190602001201461082f5782602001518160010160405163b80d8fa960e01b81526004016107cb929190615624565b60408301518154600160a81b90046001600160401b039081169116141580610870575082606001516001600160401b031683604001516001600160401b0316115b156108b557825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107cb565b6080830151806108d85760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109305783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107cb565b606084015161094090600161565f565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d7565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c7929091615686565b60405180910390a1610a4360008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611964915050565b505050505050505050565b610a8e610a5d828401846156ab565b6040805160008082526020820190925290610a88565b6060815260200190600190039081610a735790505b50611c5d565b604080516000808252602082019092529050610ab1600185858585866000611964565b50505050565b6060806000610ac66006611d1f565b6001600160401b03811115610add57610add613d1d565b604051908082528060200260200182016040528015610b2e57816020015b6040805160808101825260008082526020808301829052928201526060808201528252600019909201910181610afb5790505b5090506000610b3d6006611d1f565b6001600160401b03811115610b5457610b54613d1d565b604051908082528060200260200182016040528015610b7d578160200160208202803683370190505b50905060005b610b8d6006611d1f565b811015610d0957610b9f600682611d29565b828281518110610bb157610bb16153f5565b60200260200101906001600160401b031690816001600160401b03168152505060086000838381518110610be757610be76153f5565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b90920490931691810191909152600182018054919291606084019190610c62906154f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8e906154f7565b8015610cdb5780601f10610cb057610100808354040283529160200191610cdb565b820191906000526020600020905b815481529060010190602001808311610cbe57829003601f168201915b505050505081525050838281518110610cf657610cf66153f5565b6020908102919091010152600101610b83565b50939092509050565b6000610d20600160046156df565b6002610d2d608085615708565b6001600160401b0316610d40919061572e565b610d4a8585611d35565b901c166003811115610d5e57610d5e614319565b90505b92915050565b610d6f611d7a565b815181518114610d92576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610fe6576000848281518110610db157610db16153f5565b60200260200101519050600081602001515190506000858481518110610dd957610dd96153f5565b6020026020010151905080518214610e04576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610fd7576000828281518110610e2357610e236153f5565b6020026020010151600001519050600085602001518381518110610e4957610e496153f5565b6020026020010151905081600014610e9d578060800151821015610e9d578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107cb565b838381518110610eaf57610eaf6153f5565b602002602001015160200151518160a001515114610efc57805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107cb565b60005b8160a0015151811015610fc9576000858581518110610f2057610f206153f5565b6020026020010151602001518281518110610f3d57610f3d6153f5565b602002602001015163ffffffff16905080600014610fc05760008360a001518381518110610f6d57610f6d6153f5565b60200260200101516040015163ffffffff16905080821015610fbe578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107cb565b505b50600101610eff565b505050806001019050610e07565b50505050806001019050610d95565b50610ff18383611c5d565b505050565b333014611016576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281611053565b604080518082019091526000808252602082015281526020019060019003908161102c5790505b5060a08701515190915015611089576110868660a001518760200151886060015189600001516020015189898989611de2565b90505b6040805160a081018252875151815287516020908101516001600160401b0316818301528089015183516000948401926110c4929101614049565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b0316801561119f576040516308d450a160e01b81526001600160a01b038216906308d450a1906111259085906004016157e6565b600060405180830381600087803b15801561113f57600080fd5b505af1925050508015611150575060015b61119f573d80801561117e576040519150601f19603f3d011682016040523d82523d6000602084013e611183565b606091505b50806040516309c2532560e01b81526004016107cb9190614049565b6040880151511580156111b457506080880151155b806111cb575060608801516001600160a01b03163b155b806111f2575060608801516111f0906001600160a01b03166385572ffb60e01b611f93565b155b156111ff575050506112cf565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf979839261125d92899261138892916004016157f9565b6000604051808303816000875af115801561127c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112a49190810190615835565b5091509150816112c957806040516302a35ba360e21b81526004016107cb9190614049565b50505050505b5050505050565b6112de611655565b61054481611faf565b6001546001600160a01b031633146113415760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107cb565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6113db6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561148457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611466575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114e657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114c8575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b909204909216948301949094526001840180549394929391840191611582906154f7565b80601f01602080910402602001604051908101604052809291908181526020018280546115ae906154f7565b80156114e65780601f106115d0576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116115de57505050919092525091949350505050565b61160a611655565b6105448161208e565b61161b611655565b60005b81518110156116515761164982828151811061163c5761163c6153f5565b6020026020010151612137565b60010161161e565b5050565b6000546001600160a01b031633146116af5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107cb565b565b60005b81518110156116515760008282815181106116d1576116d16153f5565b60200260200101519050600081602001519050806001600160401b031660000361170e5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611736576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054611762906154f7565b90506000036117c457815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611801565b8154600160a81b90046001600160401b031660011461180157604051632105803760e11b81526001600160401b03841660048201526024016107cb565b805115806118365750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611854576040516342bcdf7f60e11b815260040160405180910390fd5b60018201611862828261591a565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171782556118c760066001600160401b038516612461565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b8360405161190191906159d9565b60405180910390a2505050508060010190506116b4565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610d615760405163ed053c5960e01b81526001600160401b03841660048201526024016107cb565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119c38760a4615a27565b9050826060015115611a0b5784516119dc90602061572e565b86516119e990602061572e565b6119f49060a0615a27565b6119fe9190615a27565b611a089082615a27565b90505b368114611a3457604051638e1192e160e01b8152600481018290523660248201526044016107cb565b5081518114611a635781516040516324f7d61360e21b81526004810191909152602481018290526044016107cb565b611a6b611d7a565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ab957611ab9614319565b6002811115611aca57611aca614319565b9052509050600281602001516002811115611ae757611ae7614319565b148015611b3b5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b2357611b236153f5565b6000918252602090912001546001600160a01b031633145b611b5857604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611c08576020820151611b73906001615a3a565b60ff16855114611b96576040516371253a2560e01b815260040160405180910390fd5b8351855114611bb85760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611bca929190615a53565b604051908190038120611be1918b90602001615a63565b604051602081830303815290604052805190602001209050611c068a8288888861246d565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c7e5760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611cc1565b604080518082019091526000815260606020820152815260200190600190039081611c995790505b50905060005b84518110156112cf57611d17858281518110611ce557611ce56153f5565b602002602001015184611d1157858381518110611d0457611d046153f5565b602002602001015161262a565b8361262a565b600101611cc7565b6000610d61825490565b6000610d5e8383612f21565b6001600160401b038216600090815260096020526040812081611d59608085615a77565b6001600160401b031681526020810191909152604001600020549392505050565b467f0000000000000000000000000000000000000000000000000000000000000000146116af57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107cb565b606088516001600160401b03811115611dfd57611dfd613d1d565b604051908082528060200260200182016040528015611e4257816020015b6040805180820190915260008082526020820152815260200190600190039081611e1b5790505b509050811560005b8a51811015611f855781611ee257848482818110611e6a57611e6a6153f5565b9050602002016020810190611e7f9190615a9d565b63ffffffff1615611ee257848482818110611e9c57611e9c6153f5565b9050602002016020810190611eb19190615a9d565b8b8281518110611ec357611ec36153f5565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f608b8281518110611ef757611ef76153f5565b60200260200101518b8b8b8b8b87818110611f1457611f146153f5565b9050602002810190611f269190615ab8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f4b92505050565b838281518110611f7257611f726153f5565b6020908102919091010152600101611e4a565b505098975050505050505050565b6000611f9e8361322b565b8015610d5e5750610d5e8383613276565b80516001600160a01b0316611fd7576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b336001600160a01b038216036120e65760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107cb565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612162576000604051631b3fab5160e11b81526004016107cb9190615afe565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121b3576060840151600182018054911515620100000262ff0000199092169190911790556121ef565b6060840151600182015460ff62010000909104161515901515146121ef576040516321fd80df60e21b815260ff841660048201526024016107cb565b60a08401518051610100101561221b576001604051631b3fab5160e11b81526004016107cb9190615afe565b8051600003612240576005604051631b3fab5160e11b81526004016107cb9190615afe565b6122a6848460030180548060200260200160405190810160405280929190818152602001828054801561229c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161227e575b5050505050613318565b8460600151156123d657612314848460020180548060200260200160405190810160405280929190818152602001828054801561229c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161227e575050505050613318565b608085015180516101001015612340576002604051631b3fab5160e11b81526004016107cb9190615afe565b6040860151612350906003615b18565b60ff16815111612376576003604051631b3fab5160e11b81526004016107cb9190615afe565b81518151101561239c576001604051631b3fab5160e11b81526004016107cb9190615afe565b805160018401805461ff00191661010060ff8416021790556123c79060028601906020840190613ca3565b506123d485826001613381565b505b6123e284826002613381565b80516123f79060038501906020840190613ca3565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124509389939260028a01929190615b34565b60405180910390a16112cf846134dc565b6000610d5e8383613533565b8251600090815b81811015612620576000600188868460208110612493576124936153f5565b6124a091901a601b615a3a565b8985815181106124b2576124b26153f5565b60200260200101518986815181106124cc576124cc6153f5565b60200260200101516040516000815260200160405260405161250a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561252c573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561258d5761258d614319565b600281111561259e5761259e614319565b90525090506001816020015160028111156125bb576125bb614319565b146125d957604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561260357604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612474565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156126a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cb91906154da565b1561273c5780156126fa57604051637edeb53960e11b81526001600160401b03831660048201526024016107cb565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061274783611918565b6001018054612755906154f7565b80601f0160208091040260200160405190810160405280929190818152602001828054612781906154f7565b80156127ce5780601f106127a3576101008083540402835291602001916127ce565b820191906000526020600020905b8154815290600101906020018083116127b157829003601f168201915b505050602088015151929350505060008190036127fd5760405162bf199760e01b815260040160405180910390fd5b8560400151518114612822576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561283c5761283c613d1d565b604051908082528060200260200182016040528015612865578160200160208202803683370190505b50905060005b82811015612a095760008860200151828151811061288b5761288b6153f5565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146129025780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107cb565b866001600160401b03168160000151602001516001600160401b03161461295657805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107cb565b6129e3817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129c894939291909384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120613582565b8383815181106129f5576129f56153f5565b60209081029190910101525060010161286b565b506000612a2086838a606001518b6080015161368a565b905080600003612a4e57604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107cb565b60005b83811015610a435760005a905060008a602001518381518110612a7657612a766153f5565b602002602001015190506000612a948a836000015160600151610d12565b90506000816003811115612aaa57612aaa614319565b1480612ac757506003816003811115612ac557612ac5614319565b145b612b1d57815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f19565b60608915612bfc578b8581518110612b3757612b376153f5565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b6588426156df565b1190508080612b8557506003836003811115612b8357612b83614319565b145b612bad576040516354e7e43160e11b81526001600160401b038d1660048201526024016107cb565b8c8681518110612bbf57612bbf6153f5565b602002602001015160000151600014612bf6578c8681518110612be457612be46153f5565b60209081029190910101515160808501525b50612c68565b6000826003811115612c1057612c10614319565b14612c6857825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f19565b8251608001516001600160401b031615612d41576000826003811115612c9057612c90614319565b03612d41577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612cf193929190615be6565b6020604051808303816000875af1158015612d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3491906154da565b612d415750505050612f19565b60008d604001518681518110612d5957612d596153f5565b6020026020010151905080518460a001515114612da357835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107cb565b612db78c85600001516060015160016136c7565b600080612dc586848661376c565b91509150612ddc8e876000015160600151846136c7565b8c15612e33576003826003811115612df657612df6614319565b03612e33576000856003811115612e0f57612e0f614319565b14612e3357855151604051632b11b8d960e01b81526107cb91908390600401615c12565b6002826003811115612e4757612e47614319565b14612e8c576003826003811115612e6057612e60614319565b14612e8c578d866000015160600151836040516349362d1f60e11b81526004016107cb93929190615c2b565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612ee457612ee46153f5565b602002602001015186865a612ef9908f6156df565b604051612f099493929190615c50565b60405180910390a4505050505050505b600101612a51565b6000826000018281548110612f3857612f386153f5565b9060005260206000200154905092915050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612fcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff39190615c87565b90506001600160a01b038116158061302257506130206001600160a01b03821663aff2afbf60e01b611f93565b155b1561304b5760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107cb565b60008061306388858c6040015163ffffffff16613820565b9150915060008060006131166040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130e09190615ca4565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287866113886084613903565b9250925092508261313c578160405163e1cd550960e01b81526004016107cb9190614049565b815160201461316b578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b6000828060200190518101906131819190615d70565b9050866001600160a01b03168c6001600160a01b0316146131fd5760006131b28d8a6131ad868a6156df565b613820565b509050868110806131cc5750816131c988836156df565b14155b156131fb5760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107cb565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b600061323e826301ffc9a760e01b613276565b8015610d61575061326f827fffffffff00000000000000000000000000000000000000000000000000000000613276565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d91506000519050828015613301575060208210155b801561330d5750600081115b979650505050505050565b60005b8151811015610ff15760ff83166000908152600360205260408120835190919084908490811061334d5761334d6153f5565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161331b565b60005b8251811015610ab15760008382815181106133a1576133a16153f5565b60200260200101519050600060028111156133be576133be614319565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156133fd576133fd614319565b1461341e576004604051631b3fab5160e11b81526004016107cb9190615afe565b6001600160a01b0381166134455760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561346b5761346b614319565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134c8576134c8614319565b021790555090505050806001019050613384565b60ff81166105445760ff8082166000908152600260205260409020600101546201000090041661351f57604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b600081815260018301602052604081205461357a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d61565b506000610d61565b8151805160608085015190830151608080870151940151604051600095869588956135e695919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136299190615e2a565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136988585856139dd565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136d6608085615708565b6001600160401b03166136e9919061572e565b905060006136f78585611d35565b905081613706600160046156df565b901b19168183600381111561371d5761371d614319565b6001600160401b03871660009081526009602052604081209190921b9290921791829161374b608088615a77565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061379990889088908890600401615ec1565b600060405180830381600087803b1580156137b357600080fd5b505af19250505080156137c4575060015b613803573d8080156137f2576040519150601f19603f3d011682016040523d82523d6000602084013e6137f7565b606091505b50600392509050613818565b50506040805160208101909152600081526002905b935093915050565b60008060008060006138818860405160240161384b91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288886113886084613903565b925092509250826138a7578160405163e1cd550960e01b81526004016107cb9190614049565b60208251146138d6578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b818060200190518101906138ea9190615d70565b6138f482886156df565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561392557613925613d1d565b6040519080825280601f01601f19166020018201604052801561394f576020820181803683370190505b509150863b6139695763030ed58f60e21b60005260046000fd5b5a8581101561398357632be8ca8b60e21b60005260046000fd5b85900360408104810387106139a3576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139c65750835b808352806000602085013e50955095509592505050565b8251825160009190818303613a0557604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a1957506101018111155b613a36576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a60576040516309bde33960e01b815260040160405180910390fd5b80600003613a8d5786600081518110613a7b57613a7b6153f5565b60200260200101519350505050613c5b565b6000816001600160401b03811115613aa757613aa7613d1d565b604051908082528060200260200182016040528015613ad0578160200160208202803683370190505b50905060008080805b85811015613bfa5760006001821b8b811603613b345788851015613b1d578c5160018601958e918110613b0e57613b0e6153f5565b60200260200101519050613b56565b8551600185019487918110613b0e57613b0e6153f5565b8b5160018401938d918110613b4b57613b4b6153f5565b602002602001015190505b600089861015613b86578d5160018701968f918110613b7757613b776153f5565b60200260200101519050613ba8565b8651600186019588918110613b9d57613b9d6153f5565b602002602001015190505b82851115613bc9576040516309bde33960e01b815260040160405180910390fd5b613bd38282613c62565b878481518110613be557613be56153f5565b60209081029190910101525050600101613ad9565b506001850382148015613c0c57508683145b8015613c1757508581145b613c34576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c4957613c496153f5565b60200260200101519750505050505050505b9392505050565b6000818310613c7a57613c758284613c80565b610d5e565b610d5e83835b60408051600160208201529081018390526060810182905260009060800161366c565b828054828255906000526020600020908101928215613cf8579160200282015b82811115613cf857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613cc3565b50613d04929150613d08565b5090565b5b80821115613d045760008155600101613d09565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d5557613d55613d1d565b60405290565b60405160a081016001600160401b0381118282101715613d5557613d55613d1d565b60405160c081016001600160401b0381118282101715613d5557613d55613d1d565b604080519081016001600160401b0381118282101715613d5557613d55613d1d565b604051601f8201601f191681016001600160401b0381118282101715613de957613de9613d1d565b604052919050565b60006001600160401b03821115613e0a57613e0a613d1d565b5060051b60200190565b6001600160a01b038116811461054457600080fd5b80356001600160401b0381168114613e4057600080fd5b919050565b801515811461054457600080fd5b8035613e4081613e45565b60006001600160401b03821115613e7757613e77613d1d565b50601f01601f191660200190565b600082601f830112613e9657600080fd5b8135613ea9613ea482613e5e565b613dc1565b818152846020838601011115613ebe57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613eee57600080fd5b82356001600160401b0380821115613f0557600080fd5b818501915085601f830112613f1957600080fd5b8135613f27613ea482613df1565b81815260059190911b83018401908481019088831115613f4657600080fd5b8585015b83811015613fec57803585811115613f625760008081fd5b86016080818c03601f1901811315613f7a5760008081fd5b613f82613d33565b89830135613f8f81613e14565b81526040613f9e848201613e29565b8b830152606080850135613fb181613e45565b83830152928401359289841115613fca57600091508182fd5b613fd88f8d86880101613e85565b908301525085525050918601918601613f4a565b5098975050505050505050565b60005b83811015614014578181015183820152602001613ffc565b50506000910152565b60008151808452614035816020860160208601613ff9565b601f01601f19169290920160200192915050565b602081526000610d5e602083018461401d565b8060608101831015610d6157600080fd5b60008083601f84011261407f57600080fd5b5081356001600160401b0381111561409657600080fd5b6020830191508360208285010111156140ae57600080fd5b9250929050565b60008083601f8401126140c757600080fd5b5081356001600160401b038111156140de57600080fd5b6020830191508360208260051b85010111156140ae57600080fd5b60008060008060008060008060e0898b03121561411557600080fd5b61411f8a8a61405c565b975060608901356001600160401b038082111561413b57600080fd5b6141478c838d0161406d565b909950975060808b013591508082111561416057600080fd5b61416c8c838d016140b5565b909750955060a08b013591508082111561418557600080fd5b506141928b828c016140b5565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141c057600080fd5b6141ca858561405c565b925060608401356001600160401b038111156141e557600080fd5b6141f18682870161406d565b9497909650939450505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136bf608085018261401d565b604080825283519082018190526000906020906060840190828701845b828110156142875781516001600160401b031684529284019290840190600101614262565b50505083810382850152845180825282820190600581901b8301840187850160005b838110156142d757601f198684030185526142c58383516141fe565b948701949250908601906001016142a9565b50909998505050505050505050565b600080604083850312156142f957600080fd5b61430283613e29565b915061431060208401613e29565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061433f5761433f614319565b9052565b60208101610d61828461432f565b600060a0828403121561436357600080fd5b61436b613d5b565b90508135815261437d60208301613e29565b602082015261438e60408301613e29565b604082015261439f60608301613e29565b60608201526143b060808301613e29565b608082015292915050565b8035613e4081613e14565b803563ffffffff81168114613e4057600080fd5b600082601f8301126143eb57600080fd5b813560206143fb613ea483613df1565b82815260059290921b8401810191818101908684111561441a57600080fd5b8286015b848110156144ea5780356001600160401b038082111561443e5760008081fd5b9088019060a0828b03601f19018113156144585760008081fd5b614460613d5b565b87840135838111156144725760008081fd5b6144808d8a83880101613e85565b82525060408085013561449281613e14565b828a015260606144a38682016143c6565b828401526080915081860135858111156144bd5760008081fd5b6144cb8f8c838a0101613e85565b918401919091525091909301359083015250835291830191830161441e565b509695505050505050565b6000610140828403121561450857600080fd5b614510613d7d565b905061451c8383614351565b815260a08201356001600160401b038082111561453857600080fd5b61454485838601613e85565b602084015260c084013591508082111561455d57600080fd5b61456985838601613e85565b604084015261457a60e085016143bb565b6060840152610100840135608084015261012084013591508082111561459f57600080fd5b506145ac848285016143da565b60a08301525092915050565b600082601f8301126145c957600080fd5b813560206145d9613ea483613df1565b82815260059290921b840181019181810190868411156145f857600080fd5b8286015b848110156144ea5780356001600160401b0381111561461b5760008081fd5b6146298986838b01016144f5565b8452509183019183016145fc565b600082601f83011261464857600080fd5b81356020614658613ea483613df1565b82815260059290921b8401810191818101908684111561467757600080fd5b8286015b848110156144ea5780356001600160401b038082111561469a57600080fd5b818901915089603f8301126146ae57600080fd5b858201356146be613ea482613df1565b81815260059190911b830160400190878101908c8311156146de57600080fd5b604085015b83811015614717578035858111156146fa57600080fd5b6147098f6040838a0101613e85565b8452509189019189016146e3565b5087525050509284019250830161467b565b600082601f83011261473a57600080fd5b8135602061474a613ea483613df1565b8083825260208201915060208460051b87010193508684111561476c57600080fd5b602086015b848110156144ea5780358352918301918301614771565b600082601f83011261479957600080fd5b813560206147a9613ea483613df1565b82815260059290921b840181019181810190868411156147c857600080fd5b8286015b848110156144ea5780356001600160401b03808211156147ec5760008081fd5b9088019060a0828b03601f19018113156148065760008081fd5b61480e613d5b565b614819888501613e29565b81526040808501358481111561482f5760008081fd5b61483d8e8b838901016145b8565b8a84015250606080860135858111156148565760008081fd5b6148648f8c838a0101614637565b838501525060809150818601358581111561487f5760008081fd5b61488d8f8c838a0101614729565b91840191909152509190930135908301525083529183019183016147cc565b600080604083850312156148bf57600080fd5b6001600160401b03833511156148d457600080fd5b6148e18484358501614788565b91506001600160401b03602084013511156148fb57600080fd5b6020830135830184601f82011261491157600080fd5b61491e613ea48235613df1565b81358082526020808301929160051b84010187101561493c57600080fd5b602083015b6020843560051b850101811015614ae2576001600160401b038135111561496757600080fd5b87603f82358601011261497957600080fd5b61498c613ea46020833587010135613df1565b81358501602081810135808452908301929160059190911b016040018a10156149b457600080fd5b604083358701015b83358701602081013560051b01604001811015614ad2576001600160401b03813511156149e857600080fd5b833587018135016040818d03603f19011215614a0357600080fd5b614a0b613d9f565b604082013581526001600160401b0360608301351115614a2a57600080fd5b8c605f606084013584010112614a3f57600080fd5b6040606083013583010135614a56613ea482613df1565b808282526020820191508f60608460051b6060880135880101011115614a7b57600080fd5b6060808601358601015b60608460051b606088013588010101811015614ab257614aa4816143c6565b835260209283019201614a85565b5080602085015250505080855250506020830192506020810190506149bc565b5084525060209283019201614941565b508093505050509250929050565b600080600080600060608688031215614b0857600080fd5b85356001600160401b0380821115614b1f57600080fd5b614b2b89838a016144f5565b96506020880135915080821115614b4157600080fd5b614b4d89838a016140b5565b90965094506040880135915080821115614b6657600080fd5b50614b73888289016140b5565b969995985093965092949392505050565b600060608284031215614b9657600080fd5b604051606081018181106001600160401b0382111715614bb857614bb8613d1d565b6040528235614bc681613e14565b8152614bd4602084016143c6565b60208201526040830135614be781613e14565b60408201529392505050565b600060208284031215614c0557600080fd5b81356001600160401b03811115614c1b57600080fd5b820160a08185031215613c5b57600080fd5b803560ff81168114613e4057600080fd5b600060208284031215614c5057600080fd5b610d5e82614c2d565b60008151808452602080850194506020840160005b83811015614c935781516001600160a01b031687529582019590820190600101614c6e565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614ced60e0840182614c59565b90506040840151601f198483030160c0850152614d0a8282614c59565b95945050505050565b60008060408385031215614d2657600080fd5b614d2f83613e29565b946020939093013593505050565b600060208284031215614d4f57600080fd5b610d5e82613e29565b602081526000610d5e60208301846141fe565b600060208284031215614d7d57600080fd5b8135613c5b81613e14565b600082601f830112614d9957600080fd5b81356020614da9613ea483613df1565b8083825260208201915060208460051b870101935086841115614dcb57600080fd5b602086015b848110156144ea578035614de381613e14565b8352918301918301614dd0565b60006020808385031215614e0357600080fd5b82356001600160401b0380821115614e1a57600080fd5b818501915085601f830112614e2e57600080fd5b8135614e3c613ea482613df1565b81815260059190911b83018401908481019088831115614e5b57600080fd5b8585015b83811015613fec57803585811115614e7657600080fd5b860160c0818c03601f19011215614e8d5760008081fd5b614e95613d7d565b8882013581526040614ea8818401614c2d565b8a8301526060614eb9818501614c2d565b8284015260809150614ecc828501613e53565b9083015260a08381013589811115614ee45760008081fd5b614ef28f8d83880101614d88565b838501525060c0840135915088821115614f0c5760008081fd5b614f1a8e8c84870101614d88565b9083015250845250918601918601614e5f565b80356001600160e01b0381168114613e4057600080fd5b600082601f830112614f5557600080fd5b81356020614f65613ea483613df1565b82815260069290921b84018101918181019086841115614f8457600080fd5b8286015b848110156144ea5760408189031215614fa15760008081fd5b614fa9613d9f565b614fb282613e29565b8152614fbf858301614f2d565b81860152835291830191604001614f88565b600082601f830112614fe257600080fd5b81356020614ff2613ea483613df1565b82815260059290921b8401810191818101908684111561501157600080fd5b8286015b848110156144ea5780356001600160401b03808211156150355760008081fd5b9088019060a0828b03601f190181131561504f5760008081fd5b615057613d5b565b615062888501613e29565b8152604080850135848111156150785760008081fd5b6150868e8b83890101613e85565b8a840152506060935061509a848601613e29565b9082015260806150ab858201613e29565b93820193909352920135908201528352918301918301615015565b600082601f8301126150d757600080fd5b813560206150e7613ea483613df1565b82815260069290921b8401810191818101908684111561510657600080fd5b8286015b848110156144ea57604081890312156151235760008081fd5b61512b613d9f565b81358152848201358582015283529183019160400161510a565b6000602080838503121561515857600080fd5b82356001600160401b038082111561516f57600080fd5b908401906080828703121561518357600080fd5b61518b613d33565b82358281111561519a57600080fd5b830160408189038113156151ad57600080fd5b6151b5613d9f565b8235858111156151c457600080fd5b8301601f81018b136151d557600080fd5b80356151e3613ea482613df1565b81815260069190911b8201890190898101908d83111561520257600080fd5b928a01925b828410156152525785848f03121561521f5760008081fd5b615227613d9f565b843561523281613e14565b815261523f858d01614f2d565b818d0152825292850192908a0190615207565b84525050508287013591508482111561526a57600080fd5b6152768a838501614f44565b8188015283525050828401358281111561528f57600080fd5b61529b88828601614fd1565b858301525060408301359350818411156152b457600080fd5b6152c0878585016150c6565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561536d57601f19868403018952815160a06001600160401b038083511686528683015182888801526153318388018261401d565b604085810151841690890152606080860151909316928801929092525060809283015192909501919091525097830197908301906001016152f9565b5090979650505050505050565b6001600160a01b03851681526000602060808184015261539d60808401876152dc565b83810360408581019190915286518083528388019284019060005b818110156153dd578451805184528601518684015293850193918301916001016153b8565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561546257835180516001600160a01b031684528501516001600160e01b031685840152928401929185019160010161542b565b50508583015187820388850152805180835290840192506000918401905b808310156154bb57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615480565b50979650505050505050565b602081526000610d5e602083018461540b565b6000602082840312156154ec57600080fd5b8151613c5b81613e45565b600181811c9082168061550b57607f821691505b60208210810361552b57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461553f816154f7565b60018281168015615557576001811461556c5761559b565b60ff198416875282151583028701945061559b565b8760005260208060002060005b858110156155925781548a820152908401908201615579565b50505082870194505b50929695505050505050565b600081546155b4816154f7565b8085526020600183811680156155d157600181146155eb57615619565b60ff1985168884015283151560051b880183019550615619565b866000528260002060005b858110156156115781548a82018601529083019084016155f6565b890184019650505b505050505092915050565b604081526000615637604083018561401d565b8281036020840152614d0a81856155a7565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561567f5761567f615649565b5092915050565b60408152600061569960408301856152dc565b8281036020840152614d0a818561540b565b6000602082840312156156bd57600080fd5b81356001600160401b038111156156d357600080fd5b6136bf84828501614788565b81810381811115610d6157610d61615649565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680615722576157226156f2565b92169190910692915050565b8082028115828204841417610d6157610d61615649565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261577860a087018261401d565b905060608501518682036060880152615791828261401d565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154bb57835180516001600160a01b03168352860151868301529285019260019290920191908401906157b4565b602081526000610d5e6020830184615745565b60808152600061580c6080830187615745565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561584a57600080fd5b835161585581613e45565b60208501519093506001600160401b0381111561587157600080fd5b8401601f8101861361588257600080fd5b8051615890613ea482613e5e565b8181528760208385010111156158a557600080fd5b6158b6826020830160208601613ff9565b809450505050604084015190509250925092565b601f821115610ff1576000816000526020600020601f850160051c810160208610156158f35750805b601f850160051c820191505b81811015615912578281556001016158ff565b505050505050565b81516001600160401b0381111561593357615933613d1d565b6159478161594184546154f7565b846158ca565b602080601f83116001811461597c57600084156159645750858301515b600019600386901b1c1916600185901b178555615912565b600085815260208120601f198616915b828110156159ab5788860151825594840194600190910190840161598c565b50858210156159c95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610d5e60a08301600185016155a7565b80820180821115610d6157610d61615649565b60ff8181168382160190811115610d6157610d61615649565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615a9157615a916156f2565b92169190910492915050565b600060208284031215615aaf57600080fd5b610d5e826143c6565b6000808335601e19843603018112615acf57600080fd5b8301803591506001600160401b03821115615ae957600080fd5b6020019150368190038213156140ae57600080fd5b6020810160068310615b1257615b12614319565b91905290565b60ff818116838216029081169081811461567f5761567f615649565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b8c5784546001600160a01b031683526001948501949284019201615b67565b50508481036060860152865180825290820192508187019060005b81811015615bcc5782516001600160a01b031685529383019391830191600101615ba7565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614d0a606083018461401d565b8281526040602082015260006136bf604083018461401d565b6001600160401b03848116825283166020820152606081016136bf604083018461432f565b848152615c60602082018561432f565b608060408201526000615c76608083018561401d565b905082606083015295945050505050565b600060208284031215615c9957600080fd5b8151613c5b81613e14565b6020815260008251610100806020850152615cc361012085018361401d565b91506020850151615cdf60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d1960a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d36848361401d565b935060c08701519150808685030160e0870152615d53848361401d565b935060e0870151915080868503018387015250615bdc838261401d565b600060208284031215615d8257600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561536d57601f19868403018952815160a08151818652615dcc8287018261401d565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615e08838261401d565b6080948501519790940196909652505098840198925090830190600101615da6565b602081526000610d5e6020830184615d89565b60008282518085526020808601955060208260051b8401016020860160005b8481101561536d57601f19868403018952615e7883835161401d565b98840198925090830190600101615e5c565b60008151808452602080850194506020840160005b83811015614c9357815163ffffffff1687529582019590820190600101615e9f565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f296101a085018361401d565b91506040870151605f198086850301610120870152615f48848361401d565b935060608901519150615f65838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f8e8282615d89565b9150508281036020840152615fa38186615e3d565b90508281036040840152615bdc8185615e8a56fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101206040523480156200001257600080fd5b5060405162006c5638038062006c56833981016040819052620000359162000885565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0c565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d0576000828281518110620003915762000391620009c2565b60200260200101519050600081602001519050806001600160401b0316600003620003cf5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003f8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200042690620009d8565b905060000362000489578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004c8565b8154600160a81b90046001600160401b0316600114620004c857604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620004fe5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200051d576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200052d828262000a69565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200057c60066001600160401b038516620005d4565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005b8919062000b35565b60405180910390a25050505080600101905062000370565b5050565b6000620005e28383620005eb565b90505b92915050565b60008181526001830160205260408120546200063457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e5565b506000620005e5565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067857620006786200063d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006a957620006a96200063d565b604052919050565b80516001600160401b0381168114620006c957600080fd5b919050565b6001600160a01b0381168114620006e457600080fd5b50565b6000601f83601f840112620006fb57600080fd5b825160206001600160401b03808311156200071a576200071a6200063d565b8260051b6200072b8382016200067e565b93845286810183019383810190898611156200074657600080fd5b84890192505b858310156200087857825184811115620007665760008081fd5b89016080601f19828d038101821315620007805760008081fd5b6200078a62000653565b888401516200079981620006ce565b81526040620007aa858201620006b1565b8a8301526060808601518015158114620007c45760008081fd5b83830152938501519389851115620007dc5760008081fd5b84860195508f603f870112620007f457600094508485fd5b8a8601519450898511156200080d576200080d6200063d565b6200081e8b858f880116016200067e565b93508484528f82868801011115620008365760008081fd5b60005b8581101562000856578681018301518582018d01528b0162000839565b5060009484018b0194909452509182015283525091840191908401906200074c565b9998505050505050505050565b60008060008385036101008112156200089d57600080fd5b6080811215620008ac57600080fd5b620008b662000653565b620008c186620006b1565b81526020860151620008d381620006ce565b60208201526040860151620008e881620006ce565b60408201526060860151620008fd81620006ce565b606082810191909152909450607f19820112156200091a57600080fd5b50604051606081016001600160401b0380821183831017156200094157620009416200063d565b81604052608087015191506200095782620006ce565b90825260a08601519063ffffffff821682146200097357600080fd5b81602084015260c087015191506200098b82620006ce565b6040830182905260e087015192945080831115620009a857600080fd5b5050620009b886828701620006e7565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ed57607f821691505b60208210810362000a0e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a64576000816000526020600020601f850160051c8101602086101562000a3f5750805b601f850160051c820191505b8181101562000a605782815560010162000a4b565b5050505b505050565b81516001600160401b0381111562000a855762000a856200063d565b62000a9d8162000a968454620009d8565b8462000a14565b602080601f83116001811462000ad5576000841562000abc5750858301515b600019600386901b1c1916600185901b17855562000a60565b600085815260208120601f198616915b8281101562000b065788860151825594840194600190910190840162000ae5565b508582101562000b255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8a81620009d8565b8060a089015260c0600183166000811462000bae576001811462000bcb5762000bfd565b60ff19841660c08b015260c083151560051b8b0101945062000bfd565b85600052602060002060005b8481101562000bf45781548c820185015290880190890162000bd7565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fd462000c82600039600081816102470152612ca70152600081816102180152612f960152600081816101e9015281816105890152818161073b01526126590152600081816101ba01526128a7015260008181611d7e0152611db10152615fd46000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636f9e320f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ed578063f2fde38b1461050d578063f716f99f1461052057600080fd5b8063c673e58414610489578063ccd37ba3146104a957600080fd5b806379ba5097116100b257806379ba50971461045857806385572ffb146104605780638da5cb5b1461046e57600080fd5b80636f9e320f146103b35780637437ff9f146103c657600080fd5b80633f4b04aa116101245780635e36480c116101095780635e36480c1461036d5780635e7bb0081461038d57806360987c20146103a057600080fd5b80633f4b04aa1461033c5780635215505b1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613eeb565b610533565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190614059565b610184610324366004614109565b610547565b6101846103373660046141bb565b610a4e565b600b546040516001600160401b0390911681526020016102c4565b61035f610ab7565b6040516102c4929190614255565b61038061037b3660046142f6565b610d12565b6040516102c49190614353565b61018461039b3660046148bc565b610d67565b6101846103ae366004614b00565b610ff6565b6101846103c1366004614b94565b6112d6565b610422604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b6101846112e7565b61018461016c366004614c03565b6000546040516001600160a01b0390911681526020016102c4565b61049c610497366004614c4e565b611398565b6040516102c49190614cae565b6104df6104b7366004614d23565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6105006104fb366004614d4d565b6114f6565b6040516102c49190614d68565b61018461051b366004614d7b565b611602565b61018461052e366004614e00565b611613565b61053b611655565b610544816116b1565b50565b600061055587890189615155565b602081015151909150156105f257602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c193309390919060040161538a565b60006040518083038186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050505b8051515115158061060857508051602001515115155b156106d457600b5460208a0135906001600160401b03808316911610156106ac57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106759291016154d7565b600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106d2565b8160200151516000036106d257604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098f576000826020015182815181106106fc576106fc615405565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a691906154ea565b156107d457604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107df82611918565b9050806001016040516107f29190615541565b60405180910390208360200151805190602001201461082f5782602001518160010160405163b80d8fa960e01b81526004016107cb929190615634565b60408301518154600160a81b90046001600160401b039081169116141580610870575082606001516001600160401b031683604001516001600160401b0316115b156108b557825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107cb565b6080830151806108d85760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109305783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107cb565b606084015161094090600161566f565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d7565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c7929091615696565b60405180910390a1610a4360008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611964915050565b505050505050505050565b610a8e610a5d828401846156bb565b6040805160008082526020820190925290610a88565b6060815260200190600190039081610a735790505b50611c5d565b604080516000808252602082019092529050610ab1600185858585866000611964565b50505050565b6060806000610ac66006611d20565b6001600160401b03811115610add57610add613d2d565b604051908082528060200260200182016040528015610b2e57816020015b6040805160808101825260008082526020808301829052928201526060808201528252600019909201910181610afb5790505b5090506000610b3d6006611d20565b6001600160401b03811115610b5457610b54613d2d565b604051908082528060200260200182016040528015610b7d578160200160208202803683370190505b50905060005b610b8d6006611d20565b811015610d0957610b9f600682611d2a565b828281518110610bb157610bb1615405565b60200260200101906001600160401b031690816001600160401b03168152505060086000838381518110610be757610be7615405565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b90920490931691810191909152600182018054919291606084019190610c6290615507565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8e90615507565b8015610cdb5780601f10610cb057610100808354040283529160200191610cdb565b820191906000526020600020905b815481529060010190602001808311610cbe57829003601f168201915b505050505081525050838281518110610cf657610cf6615405565b6020908102919091010152600101610b83565b50939092509050565b6000610d20600160046156ef565b6002610d2d608085615718565b6001600160401b0316610d40919061573e565b610d4a8585611d36565b901c166003811115610d5e57610d5e614329565b90505b92915050565b610d6f611d7b565b815181518114610d92576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610fe6576000848281518110610db157610db1615405565b60200260200101519050600081602001515190506000858481518110610dd957610dd9615405565b6020026020010151905080518214610e04576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610fd7576000828281518110610e2357610e23615405565b6020026020010151600001519050600085602001518381518110610e4957610e49615405565b6020026020010151905081600014610e9d578060800151821015610e9d578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107cb565b838381518110610eaf57610eaf615405565b602002602001015160200151518160a001515114610efc57805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107cb565b60005b8160a0015151811015610fc9576000858581518110610f2057610f20615405565b6020026020010151602001518281518110610f3d57610f3d615405565b602002602001015163ffffffff16905080600014610fc05760008360a001518381518110610f6d57610f6d615405565b60200260200101516040015163ffffffff16905080821015610fbe578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107cb565b505b50600101610eff565b505050806001019050610e07565b50505050806001019050610d95565b50610ff18383611c5d565b505050565b333014611016576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281611053565b604080518082019091526000808252602082015281526020019060019003908161102c5790505b5060a08701515190915015611089576110868660a001518760200151886060015189600001516020015189898989611de3565b90505b6040805160a081018252875151815287516020908101516001600160401b0316818301528089015183516000948401926110c4929101614059565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b0316801561119f576040516308d450a160e01b81526001600160a01b038216906308d450a1906111259085906004016157f6565b600060405180830381600087803b15801561113f57600080fd5b505af1925050508015611150575060015b61119f573d80801561117e576040519150601f19603f3d011682016040523d82523d6000602084013e611183565b606091505b50806040516309c2532560e01b81526004016107cb9190614059565b6040880151511580156111b457506080880151155b806111cb575060608801516001600160a01b03163b155b806111f2575060608801516111f0906001600160a01b03166385572ffb60e01b611f94565b155b156111ff575050506112cf565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf979839261125d9289926113889291600401615809565b6000604051808303816000875af115801561127c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112a49190810190615845565b5091509150816112c957806040516302a35ba360e21b81526004016107cb9190614059565b50505050505b5050505050565b6112de611655565b61054481611fb0565b6001546001600160a01b031633146113415760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107cb565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6113db6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561148457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611466575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114e657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114c8575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161158290615507565b80601f01602080910402602001604051908101604052809291908181526020018280546115ae90615507565b80156114e65780601f106115d0576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116115de57505050919092525091949350505050565b61160a611655565b6105448161208f565b61161b611655565b60005b81518110156116515761164982828151811061163c5761163c615405565b6020026020010151612138565b60010161161e565b5050565b6000546001600160a01b031633146116af5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107cb565b565b60005b81518110156116515760008282815181106116d1576116d1615405565b60200260200101519050600081602001519050806001600160401b031660000361170e5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611736576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461176290615507565b90506000036117c457815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611801565b8154600160a81b90046001600160401b031660011461180157604051632105803760e11b81526001600160401b03841660048201526024016107cb565b805115806118365750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611854576040516342bcdf7f60e11b815260040160405180910390fd5b60018201611862828261592a565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171782556118c760066001600160401b038516612462565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b8360405161190191906159e9565b60405180910390a2505050508060010190506116b4565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610d615760405163ed053c5960e01b81526001600160401b03841660048201526024016107cb565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119c38760a4615a37565b9050826060015115611a0b5784516119dc90602061573e565b86516119e990602061573e565b6119f49060a0615a37565b6119fe9190615a37565b611a089082615a37565b90505b368114611a3457604051638e1192e160e01b8152600481018290523660248201526044016107cb565b5081518114611a635781516040516324f7d61360e21b81526004810191909152602481018290526044016107cb565b611a6b611d7b565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ab957611ab9614329565b6002811115611aca57611aca614329565b9052509050600281602001516002811115611ae757611ae7614329565b148015611b3b5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b2357611b23615405565b6000918252602090912001546001600160a01b031633145b611b5857604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611c08576020820151611b73906001615a4a565b60ff16855114611b96576040516371253a2560e01b815260040160405180910390fd5b8351855114611bb85760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611bca929190615a63565b604051908190038120611be1918b90602001615a73565b604051602081830303815290604052805190602001209050611c068a8288888861246e565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c7f5760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611cc2565b604080518082019091526000815260606020820152815260200190600190039081611c9a5790505b50905060005b84518110156112cf57611d18858281518110611ce657611ce6615405565b602002602001015184611d1257858381518110611d0557611d05615405565b602002602001015161262b565b8361262b565b600101611cc8565b6000610d61825490565b6000610d5e8383612f31565b6001600160401b038216600090815260096020526040812081611d5a608085615a87565b6001600160401b031681526020810191909152604001600020549392505050565b467f0000000000000000000000000000000000000000000000000000000000000000146116af57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107cb565b606088516001600160401b03811115611dfe57611dfe613d2d565b604051908082528060200260200182016040528015611e4357816020015b6040805180820190915260008082526020820152815260200190600190039081611e1c5790505b509050811560005b8a51811015611f865781611ee357848482818110611e6b57611e6b615405565b9050602002016020810190611e809190615aad565b63ffffffff1615611ee357848482818110611e9d57611e9d615405565b9050602002016020810190611eb29190615aad565b8b8281518110611ec457611ec4615405565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f618b8281518110611ef857611ef8615405565b60200260200101518b8b8b8b8b87818110611f1557611f15615405565b9050602002810190611f279190615ac8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f5b92505050565b838281518110611f7357611f73615405565b6020908102919091010152600101611e4b565b505098975050505050505050565b6000611f9f8361323b565b8015610d5e5750610d5e8383613286565b80516001600160a01b0316611fd8576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b336001600160a01b038216036120e75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107cb565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612163576000604051631b3fab5160e11b81526004016107cb9190615b0e565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121b4576060840151600182018054911515620100000262ff0000199092169190911790556121f0565b6060840151600182015460ff62010000909104161515901515146121f0576040516321fd80df60e21b815260ff841660048201526024016107cb565b60a08401518051610100101561221c576001604051631b3fab5160e11b81526004016107cb9190615b0e565b8051600003612241576005604051631b3fab5160e11b81526004016107cb9190615b0e565b6122a7848460030180548060200260200160405190810160405280929190818152602001828054801561229d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161227f575b5050505050613328565b8460600151156123d757612315848460020180548060200260200160405190810160405280929190818152602001828054801561229d576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161227f575050505050613328565b608085015180516101001015612341576002604051631b3fab5160e11b81526004016107cb9190615b0e565b6040860151612351906003615b28565b60ff16815111612377576003604051631b3fab5160e11b81526004016107cb9190615b0e565b81518151101561239d576001604051631b3fab5160e11b81526004016107cb9190615b0e565b805160018401805461ff00191661010060ff8416021790556123c89060028601906020840190613cb3565b506123d585826001613391565b505b6123e384826002613391565b80516123f89060038501906020840190613cb3565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124519389939260028a01929190615b44565b60405180910390a16112cf846134ec565b6000610d5e8383613543565b8251600090815b8181101561262157600060018886846020811061249457612494615405565b6124a191901a601b615a4a565b8985815181106124b3576124b3615405565b60200260200101518986815181106124cd576124cd615405565b60200260200101516040516000815260200160405260405161250b949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561252d573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561258e5761258e614329565b600281111561259f5761259f614329565b90525090506001816020015160028111156125bc576125bc614329565b146125da57604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561260457604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612475565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156126a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cc91906154ea565b1561273d5780156126fb57604051637edeb53960e11b81526001600160401b03831660048201526024016107cb565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061274883611918565b600101805461275690615507565b80601f016020809104026020016040519081016040528092919081815260200182805461278290615507565b80156127cf5780601f106127a4576101008083540402835291602001916127cf565b820191906000526020600020905b8154815290600101906020018083116127b257829003601f168201915b5050506020880151519293505050600081900361280d57855160405163676cf24b60e11b81526001600160401b0390911660048201526024016107cb565b8560400151518114612832576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561284c5761284c613d2d565b604051908082528060200260200182016040528015612875578160200160208202803683370190505b50905060005b82811015612a195760008860200151828151811061289b5761289b615405565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146129125780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107cb565b866001600160401b03168160000151602001516001600160401b03161461296657805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107cb565b6129f3817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129d894939291909384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120613592565b838381518110612a0557612a05615405565b60209081029190910101525060010161287b565b506000612a3086838a606001518b6080015161369a565b905080600003612a5e57604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107cb565b60005b83811015610a435760005a905060008a602001518381518110612a8657612a86615405565b602002602001015190506000612aa48a836000015160600151610d12565b90506000816003811115612aba57612aba614329565b1480612ad757506003816003811115612ad557612ad5614329565b145b612b2d57815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f29565b60608915612c0c578b8581518110612b4757612b47615405565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b7588426156ef565b1190508080612b9557506003836003811115612b9357612b93614329565b145b612bbd576040516354e7e43160e11b81526001600160401b038d1660048201526024016107cb565b8c8681518110612bcf57612bcf615405565b602002602001015160000151600014612c06578c8681518110612bf457612bf4615405565b60209081029190910101515160808501525b50612c78565b6000826003811115612c2057612c20614329565b14612c7857825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f29565b8251608001516001600160401b031615612d51576000826003811115612ca057612ca0614329565b03612d51577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612d0193929190615bf6565b6020604051808303816000875af1158015612d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4491906154ea565b612d515750505050612f29565b60008d604001518681518110612d6957612d69615405565b6020026020010151905080518460a001515114612db357835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107cb565b612dc78c85600001516060015160016136d7565b600080612dd586848661377c565b91509150612dec8e876000015160600151846136d7565b8c15612e43576003826003811115612e0657612e06614329565b03612e43576000856003811115612e1f57612e1f614329565b14612e4357855151604051632b11b8d960e01b81526107cb91908390600401615c22565b6002826003811115612e5757612e57614329565b14612e9c576003826003811115612e7057612e70614329565b14612e9c578d866000015160600151836040516349362d1f60e11b81526004016107cb93929190615c3b565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612ef457612ef4615405565b602002602001015186865a612f09908f6156ef565b604051612f199493929190615c60565b60405180910390a4505050505050505b600101612a61565b6000826000018281548110612f4857612f48615405565b9060005260206000200154905092915050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130039190615c97565b90506001600160a01b038116158061303257506130306001600160a01b03821663aff2afbf60e01b611f94565b155b1561305b5760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107cb565b60008061307388858c6040015163ffffffff16613830565b9150915060008060006131266040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130f09190615cb4565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287866113886084613913565b9250925092508261314c578160405163e1cd550960e01b81526004016107cb9190614059565b815160201461317b578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b6000828060200190518101906131919190615d80565b9050866001600160a01b03168c6001600160a01b03161461320d5760006131c28d8a6131bd868a6156ef565b613830565b509050868110806131dc5750816131d988836156ef565b14155b1561320b5760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107cb565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b600061324e826301ffc9a760e01b613286565b8015610d61575061327f827fffffffff00000000000000000000000000000000000000000000000000000000613286565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d91506000519050828015613311575060208210155b801561331d5750600081115b979650505050505050565b60005b8151811015610ff15760ff83166000908152600360205260408120835190919084908490811061335d5761335d615405565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161332b565b60005b8251811015610ab15760008382815181106133b1576133b1615405565b60200260200101519050600060028111156133ce576133ce614329565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561340d5761340d614329565b1461342e576004604051631b3fab5160e11b81526004016107cb9190615b0e565b6001600160a01b0381166134555760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561347b5761347b614329565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134d8576134d8614329565b021790555090505050806001019050613394565b60ff81166105445760ff8082166000908152600260205260409020600101546201000090041661352f57604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b600081815260018301602052604081205461358a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d61565b506000610d61565b8151805160608085015190830151608080870151940151604051600095869588956135f695919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136399190615e3a565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136a88585856139ed565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136e6608085615718565b6001600160401b03166136f9919061573e565b905060006137078585611d36565b905081613716600160046156ef565b901b19168183600381111561372d5761372d614329565b6001600160401b03871660009081526009602052604081209190921b9290921791829161375b608088615a87565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906137a990889088908890600401615ed1565b600060405180830381600087803b1580156137c357600080fd5b505af19250505080156137d4575060015b613813573d808015613802576040519150601f19603f3d011682016040523d82523d6000602084013e613807565b606091505b50600392509050613828565b50506040805160208101909152600081526002905b935093915050565b60008060008060006138918860405160240161385b91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288886113886084613913565b925092509250826138b7578160405163e1cd550960e01b81526004016107cb9190614059565b60208251146138e6578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b818060200190518101906138fa9190615d80565b61390482886156ef565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561393557613935613d2d565b6040519080825280601f01601f19166020018201604052801561395f576020820181803683370190505b509150863b6139795763030ed58f60e21b60005260046000fd5b5a8581101561399357632be8ca8b60e21b60005260046000fd5b85900360408104810387106139b3576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139d65750835b808352806000602085013e50955095509592505050565b8251825160009190818303613a1557604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a2957506101018111155b613a46576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a70576040516309bde33960e01b815260040160405180910390fd5b80600003613a9d5786600081518110613a8b57613a8b615405565b60200260200101519350505050613c6b565b6000816001600160401b03811115613ab757613ab7613d2d565b604051908082528060200260200182016040528015613ae0578160200160208202803683370190505b50905060008080805b85811015613c0a5760006001821b8b811603613b445788851015613b2d578c5160018601958e918110613b1e57613b1e615405565b60200260200101519050613b66565b8551600185019487918110613b1e57613b1e615405565b8b5160018401938d918110613b5b57613b5b615405565b602002602001015190505b600089861015613b96578d5160018701968f918110613b8757613b87615405565b60200260200101519050613bb8565b8651600186019588918110613bad57613bad615405565b602002602001015190505b82851115613bd9576040516309bde33960e01b815260040160405180910390fd5b613be38282613c72565b878481518110613bf557613bf5615405565b60209081029190910101525050600101613ae9565b506001850382148015613c1c57508683145b8015613c2757508581145b613c44576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c5957613c59615405565b60200260200101519750505050505050505b9392505050565b6000818310613c8a57613c858284613c90565b610d5e565b610d5e83835b60408051600160208201529081018390526060810182905260009060800161367c565b828054828255906000526020600020908101928215613d08579160200282015b82811115613d0857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613cd3565b50613d14929150613d18565b5090565b5b80821115613d145760008155600101613d19565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d6557613d65613d2d565b60405290565b60405160a081016001600160401b0381118282101715613d6557613d65613d2d565b60405160c081016001600160401b0381118282101715613d6557613d65613d2d565b604080519081016001600160401b0381118282101715613d6557613d65613d2d565b604051601f8201601f191681016001600160401b0381118282101715613df957613df9613d2d565b604052919050565b60006001600160401b03821115613e1a57613e1a613d2d565b5060051b60200190565b6001600160a01b038116811461054457600080fd5b80356001600160401b0381168114613e5057600080fd5b919050565b801515811461054457600080fd5b8035613e5081613e55565b60006001600160401b03821115613e8757613e87613d2d565b50601f01601f191660200190565b600082601f830112613ea657600080fd5b8135613eb9613eb482613e6e565b613dd1565b818152846020838601011115613ece57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613efe57600080fd5b82356001600160401b0380821115613f1557600080fd5b818501915085601f830112613f2957600080fd5b8135613f37613eb482613e01565b81815260059190911b83018401908481019088831115613f5657600080fd5b8585015b83811015613ffc57803585811115613f725760008081fd5b86016080818c03601f1901811315613f8a5760008081fd5b613f92613d43565b89830135613f9f81613e24565b81526040613fae848201613e39565b8b830152606080850135613fc181613e55565b83830152928401359289841115613fda57600091508182fd5b613fe88f8d86880101613e95565b908301525085525050918601918601613f5a565b5098975050505050505050565b60005b8381101561402457818101518382015260200161400c565b50506000910152565b60008151808452614045816020860160208601614009565b601f01601f19169290920160200192915050565b602081526000610d5e602083018461402d565b8060608101831015610d6157600080fd5b60008083601f84011261408f57600080fd5b5081356001600160401b038111156140a657600080fd5b6020830191508360208285010111156140be57600080fd5b9250929050565b60008083601f8401126140d757600080fd5b5081356001600160401b038111156140ee57600080fd5b6020830191508360208260051b85010111156140be57600080fd5b60008060008060008060008060e0898b03121561412557600080fd5b61412f8a8a61406c565b975060608901356001600160401b038082111561414b57600080fd5b6141578c838d0161407d565b909950975060808b013591508082111561417057600080fd5b61417c8c838d016140c5565b909750955060a08b013591508082111561419557600080fd5b506141a28b828c016140c5565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141d057600080fd5b6141da858561406c565b925060608401356001600160401b038111156141f557600080fd5b6142018682870161407d565b9497909650939450505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136cf608085018261402d565b604080825283519082018190526000906020906060840190828701845b828110156142975781516001600160401b031684529284019290840190600101614272565b50505083810382850152845180825282820190600581901b8301840187850160005b838110156142e757601f198684030185526142d583835161420e565b948701949250908601906001016142b9565b50909998505050505050505050565b6000806040838503121561430957600080fd5b61431283613e39565b915061432060208401613e39565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061434f5761434f614329565b9052565b60208101610d61828461433f565b600060a0828403121561437357600080fd5b61437b613d6b565b90508135815261438d60208301613e39565b602082015261439e60408301613e39565b60408201526143af60608301613e39565b60608201526143c060808301613e39565b608082015292915050565b8035613e5081613e24565b803563ffffffff81168114613e5057600080fd5b600082601f8301126143fb57600080fd5b8135602061440b613eb483613e01565b82815260059290921b8401810191818101908684111561442a57600080fd5b8286015b848110156144fa5780356001600160401b038082111561444e5760008081fd5b9088019060a0828b03601f19018113156144685760008081fd5b614470613d6b565b87840135838111156144825760008081fd5b6144908d8a83880101613e95565b8252506040808501356144a281613e24565b828a015260606144b38682016143d6565b828401526080915081860135858111156144cd5760008081fd5b6144db8f8c838a0101613e95565b918401919091525091909301359083015250835291830191830161442e565b509695505050505050565b6000610140828403121561451857600080fd5b614520613d8d565b905061452c8383614361565b815260a08201356001600160401b038082111561454857600080fd5b61455485838601613e95565b602084015260c084013591508082111561456d57600080fd5b61457985838601613e95565b604084015261458a60e085016143cb565b606084015261010084013560808401526101208401359150808211156145af57600080fd5b506145bc848285016143ea565b60a08301525092915050565b600082601f8301126145d957600080fd5b813560206145e9613eb483613e01565b82815260059290921b8401810191818101908684111561460857600080fd5b8286015b848110156144fa5780356001600160401b0381111561462b5760008081fd5b6146398986838b0101614505565b84525091830191830161460c565b600082601f83011261465857600080fd5b81356020614668613eb483613e01565b82815260059290921b8401810191818101908684111561468757600080fd5b8286015b848110156144fa5780356001600160401b03808211156146aa57600080fd5b818901915089603f8301126146be57600080fd5b858201356146ce613eb482613e01565b81815260059190911b830160400190878101908c8311156146ee57600080fd5b604085015b838110156147275780358581111561470a57600080fd5b6147198f6040838a0101613e95565b8452509189019189016146f3565b5087525050509284019250830161468b565b600082601f83011261474a57600080fd5b8135602061475a613eb483613e01565b8083825260208201915060208460051b87010193508684111561477c57600080fd5b602086015b848110156144fa5780358352918301918301614781565b600082601f8301126147a957600080fd5b813560206147b9613eb483613e01565b82815260059290921b840181019181810190868411156147d857600080fd5b8286015b848110156144fa5780356001600160401b03808211156147fc5760008081fd5b9088019060a0828b03601f19018113156148165760008081fd5b61481e613d6b565b614829888501613e39565b81526040808501358481111561483f5760008081fd5b61484d8e8b838901016145c8565b8a84015250606080860135858111156148665760008081fd5b6148748f8c838a0101614647565b838501525060809150818601358581111561488f5760008081fd5b61489d8f8c838a0101614739565b91840191909152509190930135908301525083529183019183016147dc565b600080604083850312156148cf57600080fd5b6001600160401b03833511156148e457600080fd5b6148f18484358501614798565b91506001600160401b036020840135111561490b57600080fd5b6020830135830184601f82011261492157600080fd5b61492e613eb48235613e01565b81358082526020808301929160051b84010187101561494c57600080fd5b602083015b6020843560051b850101811015614af2576001600160401b038135111561497757600080fd5b87603f82358601011261498957600080fd5b61499c613eb46020833587010135613e01565b81358501602081810135808452908301929160059190911b016040018a10156149c457600080fd5b604083358701015b83358701602081013560051b01604001811015614ae2576001600160401b03813511156149f857600080fd5b833587018135016040818d03603f19011215614a1357600080fd5b614a1b613daf565b604082013581526001600160401b0360608301351115614a3a57600080fd5b8c605f606084013584010112614a4f57600080fd5b6040606083013583010135614a66613eb482613e01565b808282526020820191508f60608460051b6060880135880101011115614a8b57600080fd5b6060808601358601015b60608460051b606088013588010101811015614ac257614ab4816143d6565b835260209283019201614a95565b5080602085015250505080855250506020830192506020810190506149cc565b5084525060209283019201614951565b508093505050509250929050565b600080600080600060608688031215614b1857600080fd5b85356001600160401b0380821115614b2f57600080fd5b614b3b89838a01614505565b96506020880135915080821115614b5157600080fd5b614b5d89838a016140c5565b90965094506040880135915080821115614b7657600080fd5b50614b83888289016140c5565b969995985093965092949392505050565b600060608284031215614ba657600080fd5b604051606081018181106001600160401b0382111715614bc857614bc8613d2d565b6040528235614bd681613e24565b8152614be4602084016143d6565b60208201526040830135614bf781613e24565b60408201529392505050565b600060208284031215614c1557600080fd5b81356001600160401b03811115614c2b57600080fd5b820160a08185031215613c6b57600080fd5b803560ff81168114613e5057600080fd5b600060208284031215614c6057600080fd5b610d5e82614c3d565b60008151808452602080850194506020840160005b83811015614ca35781516001600160a01b031687529582019590820190600101614c7e565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614cfd60e0840182614c69565b90506040840151601f198483030160c0850152614d1a8282614c69565b95945050505050565b60008060408385031215614d3657600080fd5b614d3f83613e39565b946020939093013593505050565b600060208284031215614d5f57600080fd5b610d5e82613e39565b602081526000610d5e602083018461420e565b600060208284031215614d8d57600080fd5b8135613c6b81613e24565b600082601f830112614da957600080fd5b81356020614db9613eb483613e01565b8083825260208201915060208460051b870101935086841115614ddb57600080fd5b602086015b848110156144fa578035614df381613e24565b8352918301918301614de0565b60006020808385031215614e1357600080fd5b82356001600160401b0380821115614e2a57600080fd5b818501915085601f830112614e3e57600080fd5b8135614e4c613eb482613e01565b81815260059190911b83018401908481019088831115614e6b57600080fd5b8585015b83811015613ffc57803585811115614e8657600080fd5b860160c0818c03601f19011215614e9d5760008081fd5b614ea5613d8d565b8882013581526040614eb8818401614c3d565b8a8301526060614ec9818501614c3d565b8284015260809150614edc828501613e63565b9083015260a08381013589811115614ef45760008081fd5b614f028f8d83880101614d98565b838501525060c0840135915088821115614f1c5760008081fd5b614f2a8e8c84870101614d98565b9083015250845250918601918601614e6f565b80356001600160e01b0381168114613e5057600080fd5b600082601f830112614f6557600080fd5b81356020614f75613eb483613e01565b82815260069290921b84018101918181019086841115614f9457600080fd5b8286015b848110156144fa5760408189031215614fb15760008081fd5b614fb9613daf565b614fc282613e39565b8152614fcf858301614f3d565b81860152835291830191604001614f98565b600082601f830112614ff257600080fd5b81356020615002613eb483613e01565b82815260059290921b8401810191818101908684111561502157600080fd5b8286015b848110156144fa5780356001600160401b03808211156150455760008081fd5b9088019060a0828b03601f190181131561505f5760008081fd5b615067613d6b565b615072888501613e39565b8152604080850135848111156150885760008081fd5b6150968e8b83890101613e95565b8a84015250606093506150aa848601613e39565b9082015260806150bb858201613e39565b93820193909352920135908201528352918301918301615025565b600082601f8301126150e757600080fd5b813560206150f7613eb483613e01565b82815260069290921b8401810191818101908684111561511657600080fd5b8286015b848110156144fa57604081890312156151335760008081fd5b61513b613daf565b81358152848201358582015283529183019160400161511a565b6000602080838503121561516857600080fd5b82356001600160401b038082111561517f57600080fd5b908401906080828703121561519357600080fd5b61519b613d43565b8235828111156151aa57600080fd5b830160408189038113156151bd57600080fd5b6151c5613daf565b8235858111156151d457600080fd5b8301601f81018b136151e557600080fd5b80356151f3613eb482613e01565b81815260069190911b8201890190898101908d83111561521257600080fd5b928a01925b828410156152625785848f03121561522f5760008081fd5b615237613daf565b843561524281613e24565b815261524f858d01614f3d565b818d0152825292850192908a0190615217565b84525050508287013591508482111561527a57600080fd5b6152868a838501614f54565b8188015283525050828401358281111561529f57600080fd5b6152ab88828601614fe1565b858301525060408301359350818411156152c457600080fd5b6152d0878585016150d6565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561537d57601f19868403018952815160a06001600160401b038083511686528683015182888801526153418388018261402d565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615309565b5090979650505050505050565b6001600160a01b0385168152600060206080818401526153ad60808401876152ec565b83810360408581019190915286518083528388019284019060005b818110156153ed578451805184528601518684015293850193918301916001016153c8565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561547257835180516001600160a01b031684528501516001600160e01b031685840152928401929185019160010161543b565b50508583015187820388850152805180835290840192506000918401905b808310156154cb57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615490565b50979650505050505050565b602081526000610d5e602083018461541b565b6000602082840312156154fc57600080fd5b8151613c6b81613e55565b600181811c9082168061551b57607f821691505b60208210810361553b57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461554f81615507565b60018281168015615567576001811461557c576155ab565b60ff19841687528215158302870194506155ab565b8760005260208060002060005b858110156155a25781548a820152908401908201615589565b50505082870194505b50929695505050505050565b600081546155c481615507565b8085526020600183811680156155e157600181146155fb57615629565b60ff1985168884015283151560051b880183019550615629565b866000528260002060005b858110156156215781548a8201860152908301908401615606565b890184019650505b505050505092915050565b604081526000615647604083018561402d565b8281036020840152614d1a81856155b7565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561568f5761568f615659565b5092915050565b6040815260006156a960408301856152ec565b8281036020840152614d1a818561541b565b6000602082840312156156cd57600080fd5b81356001600160401b038111156156e357600080fd5b6136cf84828501614798565b81810381811115610d6157610d61615659565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061573257615732615702565b92169190910692915050565b8082028115828204841417610d6157610d61615659565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261578860a087018261402d565b9050606085015186820360608801526157a1828261402d565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154cb57835180516001600160a01b03168352860151868301529285019260019290920191908401906157c4565b602081526000610d5e6020830184615755565b60808152600061581c6080830187615755565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561585a57600080fd5b835161586581613e55565b60208501519093506001600160401b0381111561588157600080fd5b8401601f8101861361589257600080fd5b80516158a0613eb482613e6e565b8181528760208385010111156158b557600080fd5b6158c6826020830160208601614009565b809450505050604084015190509250925092565b601f821115610ff1576000816000526020600020601f850160051c810160208610156159035750805b601f850160051c820191505b818110156159225782815560010161590f565b505050505050565b81516001600160401b0381111561594357615943613d2d565b615957816159518454615507565b846158da565b602080601f83116001811461598c57600084156159745750858301515b600019600386901b1c1916600185901b178555615922565b600085815260208120601f198616915b828110156159bb5788860151825594840194600190910190840161599c565b50858210156159d95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610d5e60a08301600185016155b7565b80820180821115610d6157610d61615659565b60ff8181168382160190811115610d6157610d61615659565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615aa157615aa1615702565b92169190910492915050565b600060208284031215615abf57600080fd5b610d5e826143d6565b6000808335601e19843603018112615adf57600080fd5b8301803591506001600160401b03821115615af957600080fd5b6020019150368190038213156140be57600080fd5b6020810160068310615b2257615b22614329565b91905290565b60ff818116838216029081169081811461568f5761568f615659565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b9c5784546001600160a01b031683526001948501949284019201615b77565b50508481036060860152865180825290820192508187019060005b81811015615bdc5782516001600160a01b031685529383019391830191600101615bb7565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614d1a606083018461402d565b8281526040602082015260006136cf604083018461402d565b6001600160401b03848116825283166020820152606081016136cf604083018461433f565b848152615c70602082018561433f565b608060408201526000615c86608083018561402d565b905082606083015295945050505050565b600060208284031215615ca957600080fd5b8151613c6b81613e24565b6020815260008251610100806020850152615cd361012085018361402d565b91506020850151615cef60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d2960a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d46848361402d565b935060c08701519150808685030160e0870152615d63848361402d565b935060e0870151915080868503018387015250615bec838261402d565b600060208284031215615d9257600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561537d57601f19868403018952815160a08151818652615ddc8287018261402d565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615e18838261402d565b6080948501519790940196909652505098840198925090830190600101615db6565b602081526000610d5e6020830184615d99565b60008282518085526020808601955060208260051b8401016020860160005b8481101561537d57601f19868403018952615e8883835161402d565b98840198925090830190600101615e6c565b60008151808452602080850194506020840160005b83811015614ca357815163ffffffff1687529582019590820190600101615eaf565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f396101a085018361402d565b91506040870151605f198086850301610120870152615f58848361402d565b935060608901519150615f75838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f9e8282615d99565b9150508281036020840152615fb38186615e4d565b90508281036040840152615bec8185615e9a56fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/onramp/onramp.go b/core/gethwrappers/ccip/generated/onramp/onramp.go index e1b86d92903..9a7ca14fc59 100644 --- a/core/gethwrappers/ccip/generated/onramp/onramp.go +++ b/core/gethwrappers/ccip/generated/onramp/onramp.go @@ -71,9 +71,9 @@ type InternalRampMessageHeader struct { Nonce uint64 } -type OnRampAllowListConfigArgs struct { +type OnRampAllowlistConfigArgs struct { DestChainSelector uint64 - AllowListEnabled bool + AllowlistEnabled bool AddedAllowlistedSenders []common.Address RemovedAllowlistedSenders []common.Address } @@ -81,7 +81,7 @@ type OnRampAllowListConfigArgs struct { type OnRampDestChainConfigArgs struct { DestChainSelector uint64 Router common.Address - AllowListEnabled bool + AllowlistEnabled bool } type OnRampDynamicConfig struct { @@ -89,7 +89,7 @@ type OnRampDynamicConfig struct { ReentrancyGuardEntered bool MessageInterceptor common.Address FeeAggregator common.Address - AllowListAdmin common.Address + AllowlistAdmin common.Address } type OnRampStaticConfig struct { @@ -100,8 +100,8 @@ type OnRampStaticConfig struct { } var OnRampMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotSendZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidAllowListRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAllowlistAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"name\":\"AllowListAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPMessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"}],\"name\":\"DestChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeTokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"addedAllowlistedSenders\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedAllowlistedSenders\",\"type\":\"address[]\"}],\"internalType\":\"structOnRamp.AllowListConfigArgs[]\",\"name\":\"allowListConfigArgsItems\",\"type\":\"tuple[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getAllowedSendersList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPoolV1\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"contractIRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b50604051620042d2380380620042d283398101604081905262000035916200076e565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000186565b505083516001600160401b031615905080620000e6575060208301516001600160a01b0316155b80620000fd575060408301516001600160a01b0316155b8062000114575060608301516001600160a01b0316155b1562000133576040516306b7c75960e31b815260040160405180910390fd5b82516001600160401b031660805260208301516001600160a01b0390811660a0526040840151811660c05260608401511660e052620001728262000231565b6200017d81620003e0565b5050506200086f565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316158062000254575060608101516001600160a01b0316155b8062000261575080602001515b1562000280576040516306b7c75960e31b815260040160405180910390fd5b8051600280546020808501511515600160a01b026001600160a81b03199092166001600160a01b039485161791909117909155604080840151600380549185166001600160a01b0319928316179055606080860151600480549187169184169190911790556080808701516005805491881691909416179092558251808301845291516001600160401b0316825260a05185169382019390935260c05184168183015260e05190931691830191909152517fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f191620003d591849082516001600160401b031681526020808401516001600160a01b03908116828401526040858101518216818501526060958601518216868501528451821660808086019190915292850151151560a0850152840151811660c084015293830151841660e0830152909101519091166101008201526101200190565b60405180910390a150565b60005b81518110156200053057600082828151811062000404576200040462000859565b60200260200101519050600083838151811062000425576200042562000859565b6020026020010151600001519050806001600160401b03166000036200046a5760405163c35aa79d60e01b81526001600160401b038216600482015260240162000083565b6001600160401b0381811660008181526006602090815260409182902086820151815488850151600160401b600160e81b031990911669010000000000000000006001600160a01b0390931692830260ff60401b19161768010000000000000000911515820217808455855197811688529387019190915260ff920491909116151591840191909152917fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a2505050806001019050620003e3565b5050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156200056f576200056f62000534565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620005a057620005a062000534565b604052919050565b80516001600160401b0381168114620005c057600080fd5b919050565b6001600160a01b0381168114620005db57600080fd5b50565b80518015158114620005c057600080fd5b600060a082840312156200060257600080fd5b60405160a081016001600160401b038111828210171562000627576200062762000534565b806040525080915082516200063c81620005c5565b81526200064c60208401620005de565b602082015260408301516200066181620005c5565b604082015260608301516200067681620005c5565b606082015260808301516200068b81620005c5565b6080919091015292915050565b600082601f830112620006aa57600080fd5b815160206001600160401b03821115620006c857620006c862000534565b620006d8818360051b0162000575565b82815260609283028501820192828201919087851115620006f857600080fd5b8387015b85811015620007615781818a031215620007165760008081fd5b620007206200054a565b6200072b82620005a8565b8152858201516200073c81620005c5565b8187015260406200074f838201620005de565b908201528452928401928101620006fc565b5090979650505050505050565b60008060008385036101408112156200078657600080fd5b60808112156200079557600080fd5b50604051608081016001600160401b038082118383101715620007bc57620007bc62000534565b81604052620007cb87620005a8565b835260208701519150620007df82620005c5565b81602084015260408701519150620007f782620005c5565b816040840152606087015191506200080f82620005c5565b816060840152829550620008278860808901620005ef565b94506101208701519250808311156200083f57600080fd5b50506200084f8682870162000698565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e0516139ea620008e86000396000818161021701528181610cfd0152611bff0152600081816101db015281816115c40152611bd801526000818161019f015281816105f40152611bae01526000818161016f0152818161114b015281816116e10152611b8a01526139ea6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80637437ff9f116100b2578063972b461211610081578063df0aa9e911610066578063df0aa9e914610557578063f2fde38b1461056a578063fbca3b741461057d57600080fd5b8063972b4612146104ea578063d77d5ed01461050a57600080fd5b80637437ff9f146103ee57806379ba5097146104985780638da5cb5b146104a05780639041be3d146104be57600080fd5b806327e936f1116101095780633a019940116100ee5780633a0199401461030f57806348a98aa4146103175780636def4ce71461034f57600080fd5b806327e936f1146102e957806334adf494146102fc57600080fd5b806306285c691461013b578063181f5a771461026a57806320487ded146102b35780632716072b146102d4575b600080fd5b61025460408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b60405161026191906126f5565b60405180910390f35b6102a66040518060400160405280601081526020017f4f6e52616d7020312e362e302d6465760000000000000000000000000000000081525081565b60405161026191906127ba565b6102c66102c13660046127fb565b610590565b604051908152602001610261565b6102e76102e2366004612969565b610749565b005b6102e76102f7366004612a57565b61075d565b6102e761030a366004612aef565b61076e565b6102e7610a8a565b61032a610325366004612b64565b610cb5565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610261565b6103b261035d366004612b9d565b67ffffffffffffffff9081166000908152600660205260409020549081169168010000000000000000820460ff16916901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6040805167ffffffffffffffff9094168452911515602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610261565b61048b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff80821683527401000000000000000000000000000000000000000090910460ff161515602083015260035481169282019290925260045482166060820152600554909116608082015290565b6040516102619190612bba565b6102e7610d6a565b60005473ffffffffffffffffffffffffffffffffffffffff1661032a565b6104d16104cc366004612b9d565b610e67565b60405167ffffffffffffffff9091168152602001610261565b6104fd6104f8366004612b9d565b610e90565b6040516102619190612c13565b61032a610518366004612b9d565b67ffffffffffffffff166000908152600660205260409020546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6102c6610565366004612c6d565b610eb8565b6102e7610578366004612cd9565b6117c6565b6104fd61058b366004612b9d565b6117d7565b6040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608084901b16600482015260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa15801561063b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065f9190612cf6565b156106a7576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6002546040517fd8694ccd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063d8694ccd906106ff9086908690600401612e27565b602060405180830381865afa15801561071c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107409190612f70565b90505b92915050565b61075161180b565b61075a8161188e565b50565b61076561180b565b61075a81611a31565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107de5760055473ffffffffffffffffffffffffffffffffffffffff1633146107de576040517f905d7d9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a855760008383838181106107fd576107fd612f89565b905060200281019061080f9190612fb8565b61081890613069565b805167ffffffffffffffff1660009081526006602090815260409182902090830151815490151568010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff909116178155908201515191925090156109d8578160200151156109975760005b826040015151811015610947576000836040015182815181106108b1576108b1612f89565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109305783516040517f463258ff00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161069e565b61093d6001840182611c61565b505060010161088c565b50816000015167ffffffffffffffff167f330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc3281836040015160405161098a9190612c13565b60405180910390a26109d8565b81516040517f463258ff00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161069e565b60005b826060015151811015610a2457610a1b83606001518281518110610a0157610a01612f89565b602002602001015183600101611c8390919063ffffffff16565b506001016109db565b5060608201515115610a7b57816000015167ffffffffffffffff167fc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d4215868360600151604051610a729190612c13565b60405180910390a25b50506001016107e1565b505050565b600254604080517fcdc73d51000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cdc73d5191600480830192869291908290030181865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b3f919081019061311a565b60045490915073ffffffffffffffffffffffffffffffffffffffff1660005b8251811015610a85576000838281518110610b7b57610b7b612f89565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190612f70565b90508015610cab57610c4373ffffffffffffffffffffffffffffffffffffffff83168583611ca5565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e83604051610ca291815260200190565b60405180910390a35b5050600101610b5e565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015610d46573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074091906131a9565b60015473ffffffffffffffffffffffffffffffffffffffff163314610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161069e565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b67ffffffffffffffff8082166000908152600660205260408120549091610743911660016131f5565b67ffffffffffffffff8116600090815260066020526040902060609061074390600101611d32565b60025460009074010000000000000000000000000000000000000000900460ff1615610f10576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905567ffffffffffffffff8516600090815260066020526040902073ffffffffffffffffffffffffffffffffffffffff8316610fb5576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805468010000000000000000900460ff161561102657610fd86001820184611d46565b611026576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161069e565b80546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611083576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035473ffffffffffffffffffffffffffffffffffffffff168015611129576040517fe0a0e50600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e0a0e506906110f6908a908a90600401612e27565b600060405180830381600087803b15801561111057600080fd5b505af1158015611124573d6000803e3d6000fd5b505050505b50604080516101c081019091526000610120820181815267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166101408501528981166101608501528454929392839291610180840191879187916111979116613216565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff168152602001600067ffffffffffffffff1681525081526020018573ffffffffffffffffffffffffffffffffffffffff16815260200187806020019061120b919061323d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060200161124f888061323d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505060408051602081810183529381529284019290925250016112ab6080890160608a01612cd9565b73ffffffffffffffffffffffffffffffffffffffff168152602001868152602001600081526020018780604001906112e391906132a2565b905067ffffffffffffffff8111156112fd576112fd61284b565b60405190808252806020026020018201604052801561137657816020015b6113636040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001606081525090565b81526020019060019003908161131b5790505b5090529050600061138a60408801886132a2565b808060200260200160405190810160405280939291908181526020016000905b828210156113d6576113c76040830286013681900381019061330a565b815260200190600101906113aa565b5050505050905060005b6113ed60408901896132a2565b90508110156114875761145d82828151811061140b5761140b612f89565b60209081029190910101518a6114218b8061323d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250611d75915050565b836101000151828151811061147457611474612f89565b60209081029190910101526001016113e0565b50600254600090606090819073ffffffffffffffffffffffffffffffffffffffff1663430d138c8c6114be60808e018e8601612cd9565b8c8e80608001906114cf919061323d565b8b61010001518b6040518863ffffffff1660e01b81526004016114f89796959493929190613427565b600060405180830381865afa158015611515573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261155b9190810190613559565b60e08901939093529094509250905082611636576040517fea458c0c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c16600482015273ffffffffffffffffffffffffffffffffffffffff89811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063ea458c0c906044016020604051808303816000875af115801561160d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611631919061364c565b611639565b60005b855167ffffffffffffffff909116608091820152850182905260005b856101000151518110156116ab5781818151811061167557611675612f89565b6020026020010151866101000151828151811061169457611694612f89565b602090810291909101015160800152600101611655565b50604080517f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321602082015267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692820192909252908c16606082015230608082015261173b90869060a0016040516020818303038152906040528051906020012061208c565b85515284516060015160405167ffffffffffffffff918216918d16907f192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f3290611784908990613669565b60405180910390a35050600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055505051519150505b949350505050565b6117ce61180b565b61075a816121de565b60606040517f9e7177c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff16331461188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161069e565b565b60005b8151811015611a2d5760008282815181106118ae576118ae612f89565b6020026020010151905060008383815181106118cc576118cc612f89565b60200260200101516000015190508067ffffffffffffffff1660000361192a576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161069e565b67ffffffffffffffff818116600081815260066020908152604091829020868201518154888501517fffffff000000000000000000000000000000000000000000ffffffffffffffff909116690100000000000000000073ffffffffffffffffffffffffffffffffffffffff9093169283027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff161768010000000000000000911515820217808455855197811688529387019190915260ff920491909116151591840191909152917fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a2505050806001019050611891565b5050565b805173ffffffffffffffffffffffffffffffffffffffff161580611a6d5750606081015173ffffffffffffffffffffffffffffffffffffffff16155b80611a79575080602001515b15611ab0576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160028054602080850151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090921673ffffffffffffffffffffffffffffffffffffffff9485161791909117909155604080840151600380549185167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055606080860151600480549187169184169190911790556080808701516005805491881691909416179092558251918201835267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001682527f00000000000000000000000000000000000000000000000000000000000000008516938201939093527f00000000000000000000000000000000000000000000000000000000000000008416818301527f000000000000000000000000000000000000000000000000000000000000000090931691830191909152517fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f191611c569184906137c1565b60405180910390a150565b60006107408373ffffffffffffffffffffffffffffffffffffffff84166122d3565b60006107408373ffffffffffffffffffffffffffffffffffffffff8416612322565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a8590849061241c565b60606000611d3f83612528565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610740565b611dbd6040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001606081525090565b8460200151600003611dfb576040517f5cf0444900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e0b858760000151610cb5565b905073ffffffffffffffffffffffffffffffffffffffff81161580611edb57506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015611eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed99190612cf6565b155b15611f2d5785516040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161069e565b60008173ffffffffffffffffffffffffffffffffffffffff16639a4575b96040518060a001604052808881526020018967ffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018a6020015181526020018a6000015173ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b8152600401611fcc919061386f565b6000604051808303816000875af1158015611feb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261203191908101906138e5565b6040805160a08101825273ffffffffffffffffffffffffffffffffffffffff90941684528151602080860191909152918201518482015288820151606085015280519182019052600081526080830152509050949350505050565b60008060001b8284602001518560000151606001518660000151608001518760a001518860c0015160405160200161210a95949392919073ffffffffffffffffffffffffffffffffffffffff958616815267ffffffffffffffff94851660208201529290931660408301529092166060830152608082015260a00190565b6040516020818303038152906040528051906020012085606001518051906020012086604001518051906020012087610100015160405160200161214e9190613976565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206080808d0151805190840120928501999099529183019690965260608201949094529485019190915260a084015260c083015260e08201526101000160405160208183030381529060405280519060200120905092915050565b3373ffffffffffffffffffffffffffffffffffffffff82160361225d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161069e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260018301602052604081205461231a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610743565b506000610743565b6000818152600183016020526040812054801561240b576000612346600183613989565b855490915060009061235a90600190613989565b90508082146123bf57600086600001828154811061237a5761237a612f89565b906000526020600020015490508087600001848154811061239d5761239d612f89565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806123d0576123d061399c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610743565b6000915050610743565b5092915050565b600061247e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166125849092919063ffffffff16565b805190915015610a85578080602001905181019061249c9190612cf6565b610a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161069e565b60608160000180548060200260200160405190810160405280929190818152602001828054801561257857602002820191906000526020600020905b815481526020019060010190808311612564575b50505050509050919050565b60606117be8484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125b891906139cb565b60006040518083038185875af1925050503d80600081146125f5576040519150601f19603f3d011682016040523d82523d6000602084013e6125fa565b606091505b509150915061260b87838387612616565b979650505050505050565b606083156126ac5782516000036126a55773ffffffffffffffffffffffffffffffffffffffff85163b6126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161069e565b50816117be565b6117be83838151156126c15781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069e91906127ba565b60808101610743828467ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b60005b8381101561276757818101518382015260200161274f565b50506000910152565b6000815180845261278881602086016020860161274c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006107406020830184612770565b67ffffffffffffffff8116811461075a57600080fd5b600060a082840312156127f557600080fd5b50919050565b6000806040838503121561280e57600080fd5b8235612819816127cd565b9150602083013567ffffffffffffffff81111561283557600080fd5b612841858286016127e3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561289d5761289d61284b565b60405290565b6040805190810167ffffffffffffffff8111828210171561289d5761289d61284b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561290d5761290d61284b565b604052919050565b600067ffffffffffffffff82111561292f5761292f61284b565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461075a57600080fd5b801515811461075a57600080fd5b6000602080838503121561297c57600080fd5b823567ffffffffffffffff81111561299357600080fd5b8301601f810185136129a457600080fd5b80356129b76129b282612915565b6128c6565b818152606091820283018401918482019190888411156129d657600080fd5b938501935b83851015612a3b5780858a0312156129f35760008081fd5b6129fb61287a565b8535612a06816127cd565b815285870135612a1581612939565b81880152604086810135612a288161295b565b90820152835293840193918501916129db565b50979650505050505050565b8035612a5281612939565b919050565b600060a08284031215612a6957600080fd5b60405160a0810181811067ffffffffffffffff82111715612a8c57612a8c61284b565b6040528235612a9a81612939565b81526020830135612aaa8161295b565b60208201526040830135612abd81612939565b60408201526060830135612ad081612939565b60608201526080830135612ae381612939565b60808201529392505050565b60008060208385031215612b0257600080fd5b823567ffffffffffffffff80821115612b1a57600080fd5b818501915085601f830112612b2e57600080fd5b813581811115612b3d57600080fd5b8660208260051b8501011115612b5257600080fd5b60209290920196919550909350505050565b60008060408385031215612b7757600080fd5b8235612b82816127cd565b91506020830135612b9281612939565b809150509250929050565b600060208284031215612baf57600080fd5b8135611d3f816127cd565b60a08101610743828473ffffffffffffffffffffffffffffffffffffffff808251168352602082015115156020840152806040830151166040840152806060830151166060840152806080830151166080840152505050565b6020808252825182820181905260009190848201906040850190845b81811015612c6157835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612c2f565b50909695505050505050565b60008060008060808587031215612c8357600080fd5b8435612c8e816127cd565b9350602085013567ffffffffffffffff811115612caa57600080fd5b612cb6878288016127e3565b935050604085013591506060850135612cce81612939565b939692955090935050565b600060208284031215612ceb57600080fd5b8135611d3f81612939565b600060208284031215612d0857600080fd5b8151611d3f8161295b565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612d4857600080fd5b830160208101925035905067ffffffffffffffff811115612d6857600080fd5b803603821315612d7757600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612e1c578135612dea81612939565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101612dd7565b509495945050505050565b600067ffffffffffffffff808516835260406020840152612e488485612d13565b60a06040860152612e5d60e086018284612d7e565b915050612e6d6020860186612d13565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878503016060880152612ea3848385612d7e565b9350604088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312612edc57600080fd5b60209288019283019235915084821115612ef557600080fd5b8160061b3603831315612f0757600080fd5b80878503016080880152612f1c848385612dc7565b9450612f2a60608901612a47565b73ffffffffffffffffffffffffffffffffffffffff811660a08901529350612f556080890189612d13565b94509250808786030160c0880152505061260b838383612d7e565b600060208284031215612f8257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112612fec57600080fd5b9190910192915050565b600082601f83011261300757600080fd5b813560206130176129b283612915565b8083825260208201915060208460051b87010193508684111561303957600080fd5b602086015b8481101561305e57803561305181612939565b835291830191830161303e565b509695505050505050565b60006080823603121561307b57600080fd5b6040516080810167ffffffffffffffff828210818311171561309f5761309f61284b565b81604052843591506130b0826127cd565b9082526020840135906130c28261295b565b81602084015260408501359150808211156130dc57600080fd5b6130e836838701612ff6565b6040840152606085013591508082111561310157600080fd5b5061310e36828601612ff6565b60608301525092915050565b6000602080838503121561312d57600080fd5b825167ffffffffffffffff81111561314457600080fd5b8301601f8101851361315557600080fd5b80516131636129b282612915565b81815260059190911b8201830190838101908783111561318257600080fd5b928401925b8284101561260b57835161319a81612939565b82529284019290840190613187565b6000602082840312156131bb57600080fd5b8151611d3f81612939565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff818116838216019080821115612415576124156131c6565b600067ffffffffffffffff808316818103613233576132336131c6565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261327257600080fd5b83018035915067ffffffffffffffff82111561328d57600080fd5b602001915036819003821315612d7757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126132d757600080fd5b83018035915067ffffffffffffffff8211156132f257600080fd5b6020019150600681901b3603821315612d7757600080fd5b60006040828403121561331c57600080fd5b6133246128a3565b823561332f81612939565b81526020928301359281019290925250919050565b600082825180855260208086019550808260051b84010181860160005b8481101561341a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a073ffffffffffffffffffffffffffffffffffffffff82511685528582015181878701526133c382870182612770565b915050604080830151868303828801526133dd8382612770565b925050506060808301518187015250608080830151925085820381870152506134068183612770565b9a86019a9450505090830190600101613361565b5090979650505050505050565b67ffffffffffffffff881681526000602073ffffffffffffffffffffffffffffffffffffffff808a1682850152604089604086015260c0606086015261347160c08601898b612d7e565b85810360808701526134838189613344565b86810360a0880152875180825285890192509085019060005b818110156134c357835180518716845287015187840152928601929184019160010161349c565b50909e9d5050505050505050505050505050565b600082601f8301126134e857600080fd5b815167ffffffffffffffff8111156135025761350261284b565b61353360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128c6565b81815284602083860101111561354857600080fd5b6117be82602083016020870161274c565b6000806000806080858703121561356f57600080fd5b845193506020808601516135828161295b565b604087015190945067ffffffffffffffff808211156135a057600080fd5b6135ac89838a016134d7565b945060608801519150808211156135c257600080fd5b818801915088601f8301126135d657600080fd5b81516135e46129b282612915565b81815260059190911b8301840190848101908b83111561360357600080fd5b8585015b8381101561363b5780518581111561361f5760008081fd5b61362d8e89838a01016134d7565b845250918601918601613607565b50989b979a50959850505050505050565b60006020828403121561365e57600080fd5b8151611d3f816127cd565b602081526136ba60208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b600060208301516136e360c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101a08060e08501526137006101c0850183612770565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061010081878603018188015261373e8584612770565b945060808801519250818786030161012088015261375c8584612770565b945060a0880151925061378861014088018473ffffffffffffffffffffffffffffffffffffffff169052565b60c088015161016088015260e08801516101808801528701518685039091018387015290506137b78382613344565b9695505050505050565b6101208101613819828567ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b825173ffffffffffffffffffffffffffffffffffffffff9081166080848101919091526020850151151560a08501526040850151821660c08501526060850151821660e085015284015116610100830152611d3f565b602081526000825160a0602084015261388b60c0840182612770565b905067ffffffffffffffff6020850151166040840152604084015173ffffffffffffffffffffffffffffffffffffffff8082166060860152606086015160808601528060808701511660a086015250508091505092915050565b6000602082840312156138f757600080fd5b815167ffffffffffffffff8082111561390f57600080fd5b908301906040828603121561392357600080fd5b61392b6128a3565b82518281111561393a57600080fd5b613946878286016134d7565b82525060208301518281111561395b57600080fd5b613967878286016134d7565b60208301525095945050505050565b6020815260006107406020830184613344565b81810381811115610743576107436131c6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251612fec81846020870161274c56fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotSendZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidAllowListRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAllowlistAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"name\":\"AllowListAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPMessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"name\":\"DestChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeTokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"addedAllowlistedSenders\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedAllowlistedSenders\",\"type\":\"address[]\"}],\"internalType\":\"structOnRamp.AllowlistConfigArgs[]\",\"name\":\"allowlistConfigArgsItems\",\"type\":\"tuple[]\"}],\"name\":\"applyAllowlistUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getAllowedSendersList\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"configuredAddresses\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPoolV1\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"contractIRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6101006040523480156200001257600080fd5b50604051620043173803806200431783398101604081905262000035916200076e565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000186565b505083516001600160401b031615905080620000e6575060208301516001600160a01b0316155b80620000fd575060408301516001600160a01b0316155b8062000114575060608301516001600160a01b0316155b1562000133576040516306b7c75960e31b815260040160405180910390fd5b82516001600160401b031660805260208301516001600160a01b0390811660a0526040840151811660c05260608401511660e052620001728262000231565b6200017d81620003e0565b5050506200086f565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316158062000254575060608101516001600160a01b0316155b8062000261575080602001515b1562000280576040516306b7c75960e31b815260040160405180910390fd5b8051600280546020808501511515600160a01b026001600160a81b03199092166001600160a01b039485161791909117909155604080840151600380549185166001600160a01b0319928316179055606080860151600480549187169184169190911790556080808701516005805491881691909416179092558251808301845291516001600160401b0316825260a05185169382019390935260c05184168183015260e05190931691830191909152517fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f191620003d591849082516001600160401b031681526020808401516001600160a01b03908116828401526040858101518216818501526060958601518216868501528451821660808086019190915292850151151560a0850152840151811660c084015293830151841660e0830152909101519091166101008201526101200190565b60405180910390a150565b60005b81518110156200053057600082828151811062000404576200040462000859565b60200260200101519050600083838151811062000425576200042562000859565b6020026020010151600001519050806001600160401b03166000036200046a5760405163c35aa79d60e01b81526001600160401b038216600482015260240162000083565b6001600160401b0381811660008181526006602090815260409182902086820151815488850151600160401b600160e81b031990911669010000000000000000006001600160a01b0390931692830260ff60401b19161768010000000000000000911515820217808455855197811688529387019190915260ff920491909116151591840191909152917fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a2505050806001019050620003e3565b5050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156200056f576200056f62000534565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620005a057620005a062000534565b604052919050565b80516001600160401b0381168114620005c057600080fd5b919050565b6001600160a01b0381168114620005db57600080fd5b50565b80518015158114620005c057600080fd5b600060a082840312156200060257600080fd5b60405160a081016001600160401b038111828210171562000627576200062762000534565b806040525080915082516200063c81620005c5565b81526200064c60208401620005de565b602082015260408301516200066181620005c5565b604082015260608301516200067681620005c5565b606082015260808301516200068b81620005c5565b6080919091015292915050565b600082601f830112620006aa57600080fd5b815160206001600160401b03821115620006c857620006c862000534565b620006d8818360051b0162000575565b82815260609283028501820192828201919087851115620006f857600080fd5b8387015b85811015620007615781818a031215620007165760008081fd5b620007206200054a565b6200072b82620005a8565b8152858201516200073c81620005c5565b8187015260406200074f838201620005de565b908201528452928401928101620006fc565b5090979650505050505050565b60008060008385036101408112156200078657600080fd5b60808112156200079557600080fd5b50604051608081016001600160401b038082118383101715620007bc57620007bc62000534565b81604052620007cb87620005a8565b835260208701519150620007df82620005c5565b81602084015260408701519150620007f782620005c5565b816040840152606087015191506200080f82620005c5565b816060840152829550620008278860808901620005ef565b94506101208701519250808311156200083f57600080fd5b50506200084f8682870162000698565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051613a2f620008e860003960008181610217015281816109f40152611c290152600081816101db015281816115ee0152611c0201526000818161019f015281816106020152611bd801526000818161016f015281816111750152818161170b0152611bb40152613a2f6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806379ba5097116100b2578063c9b146b311610081578063df0aa9e911610066578063df0aa9e914610558578063f2fde38b1461056b578063fbca3b741461057e57600080fd5b8063c9b146b3146104f8578063d77d5ed01461050b57600080fd5b806379ba5097146104855780638da5cb5b1461048d5780639041be3d146104ab578063972b4612146104d757600080fd5b806327e936f11161010957806348a98aa4116100ee57806348a98aa4146103045780636def4ce71461033c5780637437ff9f146103db57600080fd5b806327e936f1146102e95780633a019940146102fc57600080fd5b806306285c691461013b578063181f5a771461026a57806320487ded146102b35780632716072b146102d4575b600080fd5b61025460408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b604051610261919061271f565b60405180910390f35b6102a66040518060400160405280601081526020017f4f6e52616d7020312e362e302d6465760000000000000000000000000000000081525081565b60405161026191906127e4565b6102c66102c1366004612825565b61059e565b604051908152602001610261565b6102e76102e2366004612993565b610757565b005b6102e76102f7366004612a81565b61076b565b6102e761077c565b610317610312366004612b19565b6109ac565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610261565b61039f61034a366004612b52565b67ffffffffffffffff9081166000908152600660205260409020549081169168010000000000000000820460ff16916901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6040805167ffffffffffffffff9094168452911515602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610261565b6104786040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff80821683527401000000000000000000000000000000000000000090910460ff161515602083015260035481169282019290925260045482166060820152600554909116608082015290565b6040516102619190612b6f565b6102e7610a61565b60005473ffffffffffffffffffffffffffffffffffffffff16610317565b6104be6104b9366004612b52565b610b5e565b60405167ffffffffffffffff9091168152602001610261565b6104ea6104e5366004612b52565b610b87565b604051610261929190612c1a565b6102e7610506366004612c35565b610bcb565b610317610519366004612b52565b67ffffffffffffffff166000908152600660205260409020546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6102c6610566366004612caa565b610ee2565b6102e7610579366004612d16565b6117f0565b61059161058c366004612b52565b611801565b6040516102619190612d33565b6040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608084901b16600482015260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066d9190612d46565b156106b5576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6002546040517fd8694ccd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063d8694ccd9061070d9086908690600401612e6c565b602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190612fb5565b90505b92915050565b61075f611835565b610768816118b8565b50565b610773611835565b61076881611a5b565b600254604080517fcdc73d51000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cdc73d5191600480830192869291908290030181865afa1580156107eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108319190810190612fce565b60045490915073ffffffffffffffffffffffffffffffffffffffff1660005b82518110156109a757600083828151811061086d5761086d61305d565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c9190612fb5565b9050801561099d5761093573ffffffffffffffffffffffffffffffffffffffff83168583611c8b565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e8360405161099491815260200190565b60405180910390a35b5050600101610850565b505050565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015610a3d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e919061308c565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ae2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016106ac565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b67ffffffffffffffff8082166000908152600660205260408120549091610751911660016130d8565b67ffffffffffffffff8116600090815260066020526040812080546060916801000000000000000090910460ff1690610bc290600101611d18565b91509150915091565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c3b5760055473ffffffffffffffffffffffffffffffffffffffff163314610c3b576040517f905d7d9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109a7576000838383818110610c5a57610c5a61305d565b9050602002810190610c6c91906130f9565b610c75906131aa565b805167ffffffffffffffff1660009081526006602090815260409182902090830151815490151568010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff90911617815590820151519192509015610e3557816020015115610df45760005b826040015151811015610da457600083604001518281518110610d0e57610d0e61305d565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d8d5783516040517f463258ff00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016106ac565b610d9a6001840182611d2c565b5050600101610ce9565b50816000015167ffffffffffffffff167f330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc32818360400151604051610de79190612d33565b60405180910390a2610e35565b81516040517f463258ff00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016106ac565b60005b826060015151811015610e8157610e7883606001518281518110610e5e57610e5e61305d565b602002602001015183600101611d4e90919063ffffffff16565b50600101610e38565b5060608201515115610ed857816000015167ffffffffffffffff167fc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d4215868360600151604051610ecf9190612d33565b60405180910390a25b5050600101610c3e565b60025460009074010000000000000000000000000000000000000000900460ff1615610f3a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905567ffffffffffffffff8516600090815260066020526040902073ffffffffffffffffffffffffffffffffffffffff8316610fdf576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805468010000000000000000900460ff1615611050576110026001820184611d70565b611050576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016106ac565b80546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146110ad576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035473ffffffffffffffffffffffffffffffffffffffff168015611153576040517fe0a0e50600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e0a0e50690611120908a908a90600401612e6c565b600060405180830381600087803b15801561113a57600080fd5b505af115801561114e573d6000803e3d6000fd5b505050505b50604080516101c081019091526000610120820181815267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166101408501528981166101608501528454929392839291610180840191879187916111c1911661325b565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff168152602001600067ffffffffffffffff1681525081526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018780602001906112359190613282565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020016112798880613282565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505060408051602081810183529381529284019290925250016112d56080890160608a01612d16565b73ffffffffffffffffffffffffffffffffffffffff1681526020018681526020016000815260200187806040019061130d91906132e7565b905067ffffffffffffffff81111561132757611327612875565b6040519080825280602002602001820160405280156113a057816020015b61138d6040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001606081525090565b8152602001906001900390816113455790505b509052905060006113b460408801886132e7565b808060200260200160405190810160405280939291908181526020016000905b82821015611400576113f16040830286013681900381019061334f565b815260200190600101906113d4565b5050505050905060005b61141760408901896132e7565b90508110156114b1576114878282815181106114355761143561305d565b60209081029190910101518a61144b8b80613282565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250611d9f915050565b836101000151828151811061149e5761149e61305d565b602090810291909101015260010161140a565b50600254600090606090819073ffffffffffffffffffffffffffffffffffffffff1663430d138c8c6114e860808e018e8601612d16565b8c8e80608001906114f99190613282565b8b61010001518b6040518863ffffffff1660e01b8152600401611522979695949392919061346c565b600060405180830381865afa15801561153f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611585919081019061359e565b60e08901939093529094509250905082611660576040517fea458c0c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c16600482015273ffffffffffffffffffffffffffffffffffffffff89811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063ea458c0c906044016020604051808303816000875af1158015611637573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165b9190613691565b611663565b60005b855167ffffffffffffffff909116608091820152850182905260005b856101000151518110156116d55781818151811061169f5761169f61305d565b602002602001015186610100015182815181106116be576116be61305d565b60209081029190910101516080015260010161167f565b50604080517f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321602082015267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692820192909252908c16606082015230608082015261176590869060a001604051602081830303815290604052805190602001206120b6565b85515284516060015160405167ffffffffffffffff918216918d16907f192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f32906117ae9089906136ae565b60405180910390a35050600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055505051519150505b949350505050565b6117f8611835565b61076881612208565b60606040517f9e7177c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff1633146118b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016106ac565b565b60005b8151811015611a575760008282815181106118d8576118d861305d565b6020026020010151905060008383815181106118f6576118f661305d565b60200260200101516000015190508067ffffffffffffffff16600003611954576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016106ac565b67ffffffffffffffff818116600081815260066020908152604091829020868201518154888501517fffffff000000000000000000000000000000000000000000ffffffffffffffff909116690100000000000000000073ffffffffffffffffffffffffffffffffffffffff9093169283027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff161768010000000000000000911515820217808455855197811688529387019190915260ff920491909116151591840191909152917fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a25050508060010190506118bb565b5050565b805173ffffffffffffffffffffffffffffffffffffffff161580611a975750606081015173ffffffffffffffffffffffffffffffffffffffff16155b80611aa3575080602001515b15611ada576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160028054602080850151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090921673ffffffffffffffffffffffffffffffffffffffff9485161791909117909155604080840151600380549185167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055606080860151600480549187169184169190911790556080808701516005805491881691909416179092558251918201835267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001682527f00000000000000000000000000000000000000000000000000000000000000008516938201939093527f00000000000000000000000000000000000000000000000000000000000000008416818301527f000000000000000000000000000000000000000000000000000000000000000090931691830191909152517fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f191611c80918490613806565b60405180910390a150565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526109a79084906122fd565b60606000611d2583612409565b9392505050565b600061074e8373ffffffffffffffffffffffffffffffffffffffff8416612465565b600061074e8373ffffffffffffffffffffffffffffffffffffffff84166124b4565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561074e565b611de76040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001606081525090565b8460200151600003611e25576040517f5cf0444900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e358587600001516109ac565b905073ffffffffffffffffffffffffffffffffffffffff81161580611f0557506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015611edf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f039190612d46565b155b15611f575785516040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016106ac565b60008173ffffffffffffffffffffffffffffffffffffffff16639a4575b96040518060a001604052808881526020018967ffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018a6020015181526020018a6000015173ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b8152600401611ff691906138b4565b6000604051808303816000875af1158015612015573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261205b919081019061392a565b6040805160a08101825273ffffffffffffffffffffffffffffffffffffffff90941684528151602080860191909152918201518482015288820151606085015280519182019052600081526080830152509050949350505050565b60008060001b8284602001518560000151606001518660000151608001518760a001518860c0015160405160200161213495949392919073ffffffffffffffffffffffffffffffffffffffff958616815267ffffffffffffffff94851660208201529290931660408301529092166060830152608082015260a00190565b6040516020818303038152906040528051906020012085606001518051906020012086604001518051906020012087610100015160405160200161217891906139bb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206080808d0151805190840120928501999099529183019690965260608201949094529485019190915260a084015260c083015260e08201526101000160405160208183030381529060405280519060200120905092915050565b3373ffffffffffffffffffffffffffffffffffffffff821603612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016106ac565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061235f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166125ae9092919063ffffffff16565b8051909150156109a7578080602001905181019061237d9190612d46565b6109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106ac565b60608160000180548060200260200160405190810160405280929190818152602001828054801561245957602002820191906000526020600020905b815481526020019060010190808311612445575b50505050509050919050565b60008181526001830160205260408120546124ac57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610751565b506000610751565b6000818152600183016020526040812054801561259d5760006124d86001836139ce565b85549091506000906124ec906001906139ce565b905080821461255157600086600001828154811061250c5761250c61305d565b906000526020600020015490508087600001848154811061252f5761252f61305d565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612562576125626139e1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610751565b6000915050610751565b5092915050565b60606117e88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125e29190613a10565b60006040518083038185875af1925050503d806000811461261f576040519150601f19603f3d011682016040523d82523d6000602084013e612624565b606091505b509150915061263587838387612640565b979650505050505050565b606083156126d65782516000036126cf5773ffffffffffffffffffffffffffffffffffffffff85163b6126cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106ac565b50816117e8565b6117e883838151156126eb5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ac91906127e4565b60808101610751828467ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b60005b83811015612791578181015183820152602001612779565b50506000910152565b600081518084526127b2816020860160208601612776565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061074e602083018461279a565b67ffffffffffffffff8116811461076857600080fd5b600060a0828403121561281f57600080fd5b50919050565b6000806040838503121561283857600080fd5b8235612843816127f7565b9150602083013567ffffffffffffffff81111561285f57600080fd5b61286b8582860161280d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156128c7576128c7612875565b60405290565b6040805190810167ffffffffffffffff811182821017156128c7576128c7612875565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561293757612937612875565b604052919050565b600067ffffffffffffffff82111561295957612959612875565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461076857600080fd5b801515811461076857600080fd5b600060208083850312156129a657600080fd5b823567ffffffffffffffff8111156129bd57600080fd5b8301601f810185136129ce57600080fd5b80356129e16129dc8261293f565b6128f0565b81815260609182028301840191848201919088841115612a0057600080fd5b938501935b83851015612a655780858a031215612a1d5760008081fd5b612a256128a4565b8535612a30816127f7565b815285870135612a3f81612963565b81880152604086810135612a5281612985565b9082015283529384019391850191612a05565b50979650505050505050565b8035612a7c81612963565b919050565b600060a08284031215612a9357600080fd5b60405160a0810181811067ffffffffffffffff82111715612ab657612ab6612875565b6040528235612ac481612963565b81526020830135612ad481612985565b60208201526040830135612ae781612963565b60408201526060830135612afa81612963565b60608201526080830135612b0d81612963565b60808201529392505050565b60008060408385031215612b2c57600080fd5b8235612b37816127f7565b91506020830135612b4781612963565b809150509250929050565b600060208284031215612b6457600080fd5b8135611d25816127f7565b60a08101610751828473ffffffffffffffffffffffffffffffffffffffff808251168352602082015115156020840152806040830151166040840152806060830151166060840152806080830151166080840152505050565b60008151808452602080850194506020840160005b83811015612c0f57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612bdd565b509495945050505050565b82151581526040602082015260006117e86040830184612bc8565b60008060208385031215612c4857600080fd5b823567ffffffffffffffff80821115612c6057600080fd5b818501915085601f830112612c7457600080fd5b813581811115612c8357600080fd5b8660208260051b8501011115612c9857600080fd5b60209290920196919550909350505050565b60008060008060808587031215612cc057600080fd5b8435612ccb816127f7565b9350602085013567ffffffffffffffff811115612ce757600080fd5b612cf38782880161280d565b935050604085013591506060850135612d0b81612963565b939692955090935050565b600060208284031215612d2857600080fd5b8135611d2581612963565b60208152600061074e6020830184612bc8565b600060208284031215612d5857600080fd5b8151611d2581612985565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612d9857600080fd5b830160208101925035905067ffffffffffffffff811115612db857600080fd5b803603821315612dc757600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612c0f578135612e3a81612963565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101612e27565b600067ffffffffffffffff808516835260406020840152612e8d8485612d63565b60a06040860152612ea260e086018284612dce565b915050612eb26020860186612d63565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878503016060880152612ee8848385612dce565b9350604088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312612f2157600080fd5b60209288019283019235915084821115612f3a57600080fd5b8160061b3603831315612f4c57600080fd5b80878503016080880152612f61848385612e17565b9450612f6f60608901612a71565b73ffffffffffffffffffffffffffffffffffffffff811660a08901529350612f9a6080890189612d63565b94509250808786030160c08801525050612635838383612dce565b600060208284031215612fc757600080fd5b5051919050565b60006020808385031215612fe157600080fd5b825167ffffffffffffffff811115612ff857600080fd5b8301601f8101851361300957600080fd5b80516130176129dc8261293f565b81815260059190911b8201830190838101908783111561303657600080fd5b928401925b8284101561263557835161304e81612963565b8252928401929084019061303b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561309e57600080fd5b8151611d2581612963565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156125a7576125a76130a9565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261312d57600080fd5b9190910192915050565b600082601f83011261314857600080fd5b813560206131586129dc8361293f565b8083825260208201915060208460051b87010193508684111561317a57600080fd5b602086015b8481101561319f57803561319281612963565b835291830191830161317f565b509695505050505050565b6000608082360312156131bc57600080fd5b6040516080810167ffffffffffffffff82821081831117156131e0576131e0612875565b81604052843591506131f1826127f7565b90825260208401359061320382612985565b816020840152604085013591508082111561321d57600080fd5b61322936838701613137565b6040840152606085013591508082111561324257600080fd5b5061324f36828601613137565b60608301525092915050565b600067ffffffffffffffff808316818103613278576132786130a9565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126132b757600080fd5b83018035915067ffffffffffffffff8211156132d257600080fd5b602001915036819003821315612dc757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261331c57600080fd5b83018035915067ffffffffffffffff82111561333757600080fd5b6020019150600681901b3603821315612dc757600080fd5b60006040828403121561336157600080fd5b6133696128cd565b823561337481612963565b81526020928301359281019290925250919050565b600082825180855260208086019550808260051b84010181860160005b8481101561345f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a073ffffffffffffffffffffffffffffffffffffffff82511685528582015181878701526134088287018261279a565b91505060408083015186830382880152613422838261279a565b9250505060608083015181870152506080808301519250858203818701525061344b818361279a565b9a86019a94505050908301906001016133a6565b5090979650505050505050565b67ffffffffffffffff881681526000602073ffffffffffffffffffffffffffffffffffffffff808a1682850152604089604086015260c060608601526134b660c08601898b612dce565b85810360808701526134c88189613389565b86810360a0880152875180825285890192509085019060005b818110156135085783518051871684528701518784015292860192918401916001016134e1565b50909e9d5050505050505050505050505050565b600082601f83011261352d57600080fd5b815167ffffffffffffffff81111561354757613547612875565b61357860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128f0565b81815284602083860101111561358d57600080fd5b6117e8826020830160208701612776565b600080600080608085870312156135b457600080fd5b845193506020808601516135c781612985565b604087015190945067ffffffffffffffff808211156135e557600080fd5b6135f189838a0161351c565b9450606088015191508082111561360757600080fd5b818801915088601f83011261361b57600080fd5b81516136296129dc8261293f565b81815260059190911b8301840190848101908b83111561364857600080fd5b8585015b83811015613680578051858111156136645760008081fd5b6136728e89838a010161351c565b84525091860191860161364c565b50989b979a50959850505050505050565b6000602082840312156136a357600080fd5b8151611d25816127f7565b602081526136ff60208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b6000602083015161372860c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101a08060e08501526137456101c085018361279a565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610100818786030181880152613783858461279a565b94506080880151925081878603016101208801526137a1858461279a565b945060a088015192506137cd61014088018473ffffffffffffffffffffffffffffffffffffffff169052565b60c088015161016088015260e08801516101808801528701518685039091018387015290506137fc8382613389565b9695505050505050565b610120810161385e828567ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b825173ffffffffffffffffffffffffffffffffffffffff9081166080848101919091526020850151151560a08501526040850151821660c08501526060850151821660e085015284015116610100830152611d25565b602081526000825160a060208401526138d060c084018261279a565b905067ffffffffffffffff6020850151166040840152604084015173ffffffffffffffffffffffffffffffffffffffff8082166060860152606086015160808601528060808701511660a086015250508091505092915050565b60006020828403121561393c57600080fd5b815167ffffffffffffffff8082111561395457600080fd5b908301906040828603121561396857600080fd5b6139706128cd565b82518281111561397f57600080fd5b61398b8782860161351c565b8252506020830151828111156139a057600080fd5b6139ac8782860161351c565b60208301525095945050505050565b60208152600061074e6020830184613389565b81810381811115610751576107516130a9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000825161312d81846020870161277656fea164736f6c6343000818000a", } var OnRampABI = OnRampMetaData.ABI @@ -240,25 +240,33 @@ func (_OnRamp *OnRampTransactorRaw) Transact(opts *bind.TransactOpts, method str return _OnRamp.Contract.contract.Transact(opts, method, params...) } -func (_OnRamp *OnRampCaller) GetAllowedSendersList(opts *bind.CallOpts, destChainSelector uint64) ([]common.Address, error) { +func (_OnRamp *OnRampCaller) GetAllowedSendersList(opts *bind.CallOpts, destChainSelector uint64) (GetAllowedSendersList, + + error) { var out []interface{} err := _OnRamp.contract.Call(opts, &out, "getAllowedSendersList", destChainSelector) + outstruct := new(GetAllowedSendersList) if err != nil { - return *new([]common.Address), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + outstruct.IsEnabled = *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.ConfiguredAddresses = *abi.ConvertType(out[1], new([]common.Address)).(*[]common.Address) - return out0, err + return *outstruct, err } -func (_OnRamp *OnRampSession) GetAllowedSendersList(destChainSelector uint64) ([]common.Address, error) { +func (_OnRamp *OnRampSession) GetAllowedSendersList(destChainSelector uint64) (GetAllowedSendersList, + + error) { return _OnRamp.Contract.GetAllowedSendersList(&_OnRamp.CallOpts, destChainSelector) } -func (_OnRamp *OnRampCallerSession) GetAllowedSendersList(destChainSelector uint64) ([]common.Address, error) { +func (_OnRamp *OnRampCallerSession) GetAllowedSendersList(destChainSelector uint64) (GetAllowedSendersList, + + error) { return _OnRamp.Contract.GetAllowedSendersList(&_OnRamp.CallOpts, destChainSelector) } @@ -274,7 +282,7 @@ func (_OnRamp *OnRampCaller) GetDestChainConfig(opts *bind.CallOpts, destChainSe } outstruct.SequenceNumber = *abi.ConvertType(out[0], new(uint64)).(*uint64) - outstruct.AllowListEnabled = *abi.ConvertType(out[1], new(bool)).(*bool) + outstruct.AllowlistEnabled = *abi.ConvertType(out[1], new(bool)).(*bool) outstruct.Router = *abi.ConvertType(out[2], new(common.Address)).(*common.Address) return *outstruct, err @@ -503,16 +511,16 @@ func (_OnRamp *OnRampTransactorSession) AcceptOwnership() (*types.Transaction, e return _OnRamp.Contract.AcceptOwnership(&_OnRamp.TransactOpts) } -func (_OnRamp *OnRampTransactor) ApplyAllowListUpdates(opts *bind.TransactOpts, allowListConfigArgsItems []OnRampAllowListConfigArgs) (*types.Transaction, error) { - return _OnRamp.contract.Transact(opts, "applyAllowListUpdates", allowListConfigArgsItems) +func (_OnRamp *OnRampTransactor) ApplyAllowlistUpdates(opts *bind.TransactOpts, allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) { + return _OnRamp.contract.Transact(opts, "applyAllowlistUpdates", allowlistConfigArgsItems) } -func (_OnRamp *OnRampSession) ApplyAllowListUpdates(allowListConfigArgsItems []OnRampAllowListConfigArgs) (*types.Transaction, error) { - return _OnRamp.Contract.ApplyAllowListUpdates(&_OnRamp.TransactOpts, allowListConfigArgsItems) +func (_OnRamp *OnRampSession) ApplyAllowlistUpdates(allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) { + return _OnRamp.Contract.ApplyAllowlistUpdates(&_OnRamp.TransactOpts, allowlistConfigArgsItems) } -func (_OnRamp *OnRampTransactorSession) ApplyAllowListUpdates(allowListConfigArgsItems []OnRampAllowListConfigArgs) (*types.Transaction, error) { - return _OnRamp.Contract.ApplyAllowListUpdates(&_OnRamp.TransactOpts, allowListConfigArgsItems) +func (_OnRamp *OnRampTransactorSession) ApplyAllowlistUpdates(allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) { + return _OnRamp.Contract.ApplyAllowlistUpdates(&_OnRamp.TransactOpts, allowlistConfigArgsItems) } func (_OnRamp *OnRampTransactor) ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) { @@ -636,32 +644,32 @@ func (it *OnRampAllowListAdminSetIterator) Close() error { } type OnRampAllowListAdminSet struct { - AllowListAdmin common.Address + AllowlistAdmin common.Address Raw types.Log } -func (_OnRamp *OnRampFilterer) FilterAllowListAdminSet(opts *bind.FilterOpts, allowListAdmin []common.Address) (*OnRampAllowListAdminSetIterator, error) { +func (_OnRamp *OnRampFilterer) FilterAllowListAdminSet(opts *bind.FilterOpts, allowlistAdmin []common.Address) (*OnRampAllowListAdminSetIterator, error) { - var allowListAdminRule []interface{} - for _, allowListAdminItem := range allowListAdmin { - allowListAdminRule = append(allowListAdminRule, allowListAdminItem) + var allowlistAdminRule []interface{} + for _, allowlistAdminItem := range allowlistAdmin { + allowlistAdminRule = append(allowlistAdminRule, allowlistAdminItem) } - logs, sub, err := _OnRamp.contract.FilterLogs(opts, "AllowListAdminSet", allowListAdminRule) + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "AllowListAdminSet", allowlistAdminRule) if err != nil { return nil, err } return &OnRampAllowListAdminSetIterator{contract: _OnRamp.contract, event: "AllowListAdminSet", logs: logs, sub: sub}, nil } -func (_OnRamp *OnRampFilterer) WatchAllowListAdminSet(opts *bind.WatchOpts, sink chan<- *OnRampAllowListAdminSet, allowListAdmin []common.Address) (event.Subscription, error) { +func (_OnRamp *OnRampFilterer) WatchAllowListAdminSet(opts *bind.WatchOpts, sink chan<- *OnRampAllowListAdminSet, allowlistAdmin []common.Address) (event.Subscription, error) { - var allowListAdminRule []interface{} - for _, allowListAdminItem := range allowListAdmin { - allowListAdminRule = append(allowListAdminRule, allowListAdminItem) + var allowlistAdminRule []interface{} + for _, allowlistAdminItem := range allowlistAdmin { + allowlistAdminRule = append(allowlistAdminRule, allowlistAdminItem) } - logs, sub, err := _OnRamp.contract.WatchLogs(opts, "AllowListAdminSet", allowListAdminRule) + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "AllowListAdminSet", allowlistAdminRule) if err != nil { return nil, err } @@ -1277,7 +1285,7 @@ type OnRampDestChainConfigSet struct { DestChainSelector uint64 SequenceNumber uint64 Router common.Address - AllowListEnabled bool + AllowlistEnabled bool Raw types.Log } @@ -1752,9 +1760,13 @@ func (_OnRamp *OnRampFilterer) ParseOwnershipTransferred(log types.Log) (*OnRamp return event, nil } +type GetAllowedSendersList struct { + IsEnabled bool + ConfiguredAddresses []common.Address +} type GetDestChainConfig struct { SequenceNumber uint64 - AllowListEnabled bool + AllowlistEnabled bool Router common.Address } @@ -1825,7 +1837,9 @@ func (_OnRamp *OnRamp) Address() common.Address { } type OnRampInterface interface { - GetAllowedSendersList(opts *bind.CallOpts, destChainSelector uint64) ([]common.Address, error) + GetAllowedSendersList(opts *bind.CallOpts, destChainSelector uint64) (GetAllowedSendersList, + + error) GetDestChainConfig(opts *bind.CallOpts, destChainSelector uint64) (GetDestChainConfig, @@ -1851,7 +1865,7 @@ type OnRampInterface interface { AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) - ApplyAllowListUpdates(opts *bind.TransactOpts, allowListConfigArgsItems []OnRampAllowListConfigArgs) (*types.Transaction, error) + ApplyAllowlistUpdates(opts *bind.TransactOpts, allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) @@ -1863,9 +1877,9 @@ type OnRampInterface interface { WithdrawFeeTokens(opts *bind.TransactOpts) (*types.Transaction, error) - FilterAllowListAdminSet(opts *bind.FilterOpts, allowListAdmin []common.Address) (*OnRampAllowListAdminSetIterator, error) + FilterAllowListAdminSet(opts *bind.FilterOpts, allowlistAdmin []common.Address) (*OnRampAllowListAdminSetIterator, error) - WatchAllowListAdminSet(opts *bind.WatchOpts, sink chan<- *OnRampAllowListAdminSet, allowListAdmin []common.Address) (event.Subscription, error) + WatchAllowListAdminSet(opts *bind.WatchOpts, sink chan<- *OnRampAllowListAdminSet, allowlistAdmin []common.Address) (event.Subscription, error) ParseAllowListAdminSet(log types.Log) (*OnRampAllowListAdminSet, error) 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 0aea0237f74..2ddd0279913 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 @@ -6,7 +6,7 @@ ccip_encoding_utils: ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEnc ccip_home: ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.abi ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.bin 8c603a0de19c4649d69bdd18774ee3b5edfd24c696aabdb7cdb982bd8e304829 ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 5db06eb7fad07ec0d1ae5ac8d39f61398687fe3cda8290716ce0cd8fb9dca1ab ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de -fee_quoter: ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.abi ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.bin 6e647595433c98ccb33d27cc73a82804dbb5369a9b56fc87c43797cb9cf9a39a +fee_quoter: ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.abi ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.bin 3eb799751e92bb09cf94c8ad9245c620026c3a8a0a0fffee8c3921f8fcd37eb8 lock_release_token_pool: ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.bin e6a8ec9e8faccb1da7d90e0f702ed72975964f97dc3222b54cfcca0a0ba3fea2 maybe_revert_message_receiver: ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.abi ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.bin d73956c26232ebcc4a5444429fa99cbefed960e323be9b5a24925885c2e477d5 message_hasher: ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.abi ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.bin ec2d3a92348d8e7b8f0d359b62a45157b9d2c750c01fbcf991826c4392f6e218 @@ -16,8 +16,8 @@ mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/Mo multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin 0b541232e49727e947dc164eadf35963c66e67576f21baa0ecaa06a8833148ed multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin 04b6b261dd71925670bf4d904aaf7bf08543452009feefb88e07d4c49d12e969 nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin eb234dfb57c6dc64f83cfbf9d78a27939a7241fd0de41342d41c919c156a3633 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 2f58f2327fcfa80923fe8e8167eb1e692809e3b7163a7c3d7d2fa3650e914b79 -onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 330be295a313aa4064819fb76d27f4b1a35fdcbd0959d68a71f1ebb72d0b1d7f +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 9964a45e079950719c13a9485bf4d479e2a87a5f395c4fef645a8520b0ac42e6 +onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 4766632d0938b33bfa04f30a5e6b301a944b6920dc1101ce8230e6b23706e898 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 75be86323c227917a9bbc3f799d7ed02f92db546653a36db30ed0ebe64461353 report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin 695b4798f1e9d6f1442f7e6d7c499d23464d9237f325effde132913c404607f7 diff --git a/core/gethwrappers/ccip/mocks/fee_quoter_interface.go b/core/gethwrappers/ccip/mocks/fee_quoter_interface.go index df9d6642cb1..184bfeda77e 100644 --- a/core/gethwrappers/ccip/mocks/fee_quoter_interface.go +++ b/core/gethwrappers/ccip/mocks/fee_quoter_interface.go @@ -255,9 +255,9 @@ func (_c *FeeQuoterInterface_ApplyDestChainConfigUpdates_Call) RunAndReturn(run return _c } -// ApplyFeeTokensUpdates provides a mock function with given fields: opts, feeTokensToAdd, feeTokensToRemove -func (_m *FeeQuoterInterface) ApplyFeeTokensUpdates(opts *bind.TransactOpts, feeTokensToAdd []common.Address, feeTokensToRemove []common.Address) (*types.Transaction, error) { - ret := _m.Called(opts, feeTokensToAdd, feeTokensToRemove) +// ApplyFeeTokensUpdates provides a mock function with given fields: opts, feeTokensToRemove, feeTokensToAdd +func (_m *FeeQuoterInterface) ApplyFeeTokensUpdates(opts *bind.TransactOpts, feeTokensToRemove []common.Address, feeTokensToAdd []common.Address) (*types.Transaction, error) { + ret := _m.Called(opts, feeTokensToRemove, feeTokensToAdd) if len(ret) == 0 { panic("no return value specified for ApplyFeeTokensUpdates") @@ -266,10 +266,10 @@ func (_m *FeeQuoterInterface) ApplyFeeTokensUpdates(opts *bind.TransactOpts, fee var r0 *types.Transaction var r1 error if rf, ok := ret.Get(0).(func(*bind.TransactOpts, []common.Address, []common.Address) (*types.Transaction, error)); ok { - return rf(opts, feeTokensToAdd, feeTokensToRemove) + return rf(opts, feeTokensToRemove, feeTokensToAdd) } if rf, ok := ret.Get(0).(func(*bind.TransactOpts, []common.Address, []common.Address) *types.Transaction); ok { - r0 = rf(opts, feeTokensToAdd, feeTokensToRemove) + r0 = rf(opts, feeTokensToRemove, feeTokensToAdd) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*types.Transaction) @@ -277,7 +277,7 @@ func (_m *FeeQuoterInterface) ApplyFeeTokensUpdates(opts *bind.TransactOpts, fee } if rf, ok := ret.Get(1).(func(*bind.TransactOpts, []common.Address, []common.Address) error); ok { - r1 = rf(opts, feeTokensToAdd, feeTokensToRemove) + r1 = rf(opts, feeTokensToRemove, feeTokensToAdd) } else { r1 = ret.Error(1) } @@ -292,13 +292,13 @@ type FeeQuoterInterface_ApplyFeeTokensUpdates_Call struct { // ApplyFeeTokensUpdates is a helper method to define mock.On call // - opts *bind.TransactOpts -// - feeTokensToAdd []common.Address // - feeTokensToRemove []common.Address -func (_e *FeeQuoterInterface_Expecter) ApplyFeeTokensUpdates(opts interface{}, feeTokensToAdd interface{}, feeTokensToRemove interface{}) *FeeQuoterInterface_ApplyFeeTokensUpdates_Call { - return &FeeQuoterInterface_ApplyFeeTokensUpdates_Call{Call: _e.mock.On("ApplyFeeTokensUpdates", opts, feeTokensToAdd, feeTokensToRemove)} +// - feeTokensToAdd []common.Address +func (_e *FeeQuoterInterface_Expecter) ApplyFeeTokensUpdates(opts interface{}, feeTokensToRemove interface{}, feeTokensToAdd interface{}) *FeeQuoterInterface_ApplyFeeTokensUpdates_Call { + return &FeeQuoterInterface_ApplyFeeTokensUpdates_Call{Call: _e.mock.On("ApplyFeeTokensUpdates", opts, feeTokensToRemove, feeTokensToAdd)} } -func (_c *FeeQuoterInterface_ApplyFeeTokensUpdates_Call) Run(run func(opts *bind.TransactOpts, feeTokensToAdd []common.Address, feeTokensToRemove []common.Address)) *FeeQuoterInterface_ApplyFeeTokensUpdates_Call { +func (_c *FeeQuoterInterface_ApplyFeeTokensUpdates_Call) Run(run func(opts *bind.TransactOpts, feeTokensToRemove []common.Address, feeTokensToAdd []common.Address)) *FeeQuoterInterface_ApplyFeeTokensUpdates_Call { _c.Call.Run(func(args mock.Arguments) { run(args[0].(*bind.TransactOpts), args[1].([]common.Address), args[2].([]common.Address)) }) diff --git a/integration-tests/deployment/ccip/view/v1_6/onramp.go b/integration-tests/deployment/ccip/view/v1_6/onramp.go index 72ac9e948ef..131f110f2d3 100644 --- a/integration-tests/deployment/ccip/view/v1_6/onramp.go +++ b/integration-tests/deployment/ccip/view/v1_6/onramp.go @@ -72,7 +72,7 @@ func GenerateOnRampView( destChainSpecificData := make(map[uint64]DestChainSpecificData) for _, destChainSelector := range destChainSelectors { - allowedSendersList, err := onRampContract.GetAllowedSendersList(nil, destChainSelector) + allowListInformation, err := onRampContract.GetAllowedSendersList(nil, destChainSelector) if err != nil { return OnRampView{}, fmt.Errorf("failed to get allowed senders list: %w", err) } @@ -89,7 +89,7 @@ func GenerateOnRampView( return OnRampView{}, fmt.Errorf("failed to get router: %w", err) } destChainSpecificData[destChainSelector] = DestChainSpecificData{ - AllowedSendersList: allowedSendersList, + AllowedSendersList: allowListInformation.ConfiguredAddresses, DestChainConfig: destChainConfig, ExpectedNextSeqNum: expectedNextSeqNum, Router: router,