From fee825f7874b0bdace4a49a1e0d23eb01e3b1398 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Tue, 1 Oct 2024 15:00:19 +0530 Subject: [PATCH 01/10] feat: add getter to return all source chain config Signed-off-by: 0xsuryansh --- contracts/gas-snapshots/ccip.gas-snapshot | 216 +++++++++--------- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 20 ++ .../v0.8/ccip/test/helpers/OffRampHelper.sol | 7 + .../src/v0.8/ccip/test/offRamp/OffRamp.t.sol | 17 +- 4 files changed, 148 insertions(+), 112 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index a984ecd919..15710e155f 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -562,18 +562,18 @@ MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61275) MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39933) MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 33049) MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 233701) -MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1500580) +MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1500475) NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37934) NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23706) NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38778) NonceManager_NonceIncrementation:test_incrementNoncesInboundAndOutbound_Success() (gas: 71901) -NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 262159) -NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 265836) -NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 329824) -NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 300784) +NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 262127) +NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 265804) +NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 329760) +NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 300752) NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRampTransitive_Success() (gas: 249120) NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 237027) -NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 153748) +NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 153716) NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 168256) NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 219631) NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 126745) @@ -610,119 +610,119 @@ OCR2Base_transmit:test_Transmit2SignersSuccess_gas() (gas: 51689) OCR2Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 23511) OCR2Base_transmit:test_UnauthorizedSigner_Revert() (gas: 39707) OCR2Base_transmit:test_WrongNumberOfSignatures_Revert() (gas: 20584) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5656596) -OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 469391) -OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 99637) -OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 12591) -OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 205322) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 101437) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 111307) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5929944) +OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 583614) +OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166502) +OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16784) +OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 272116) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 168596) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 141079) OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13441) OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 72702) OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15497) -OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177979) -OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 335646) -OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 278912) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 169308) -OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 189031) -OffRamp_batchExecute:test_SingleReport_Success() (gas: 157132) -OffRamp_batchExecute:test_Unhealthy_Success() (gas: 554208) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177947) +OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 335550) +OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 278816) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 169276) +OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 188967) +OffRamp_batchExecute:test_SingleReport_Success() (gas: 157100) +OffRamp_batchExecute:test_Unhealthy_Success() (gas: 554168) OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10600) -OffRamp_ccipReceive:test_Reverts() (gas: 15385) -OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92905) -OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 64099) -OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68124) -OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291) -OffRamp_commit:test_InvalidRootRevert() (gas: 63356) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6260756) -OffRamp_commit:test_NoConfig_Revert() (gas: 5844428) -OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113042) -OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121403) -OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113063) -OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 355198) -OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164351) -OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 139364) -OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 146555) -OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59858) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232074) -OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125409) -OffRamp_commit:test_Unhealthy_Revert() (gas: 58633) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206729) -OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) -OffRamp_constructor:test_Constructor_Success() (gas: 5845416) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 135514) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 102949) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 100843) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 161040) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 100763) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 100801) -OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) -OffRamp_execute:test_LargeBatch_Success() (gas: 3426635) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 373095) -OffRamp_execute:test_MultipleReports_Success() (gas: 301009) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6669661) -OffRamp_execute:test_NoConfig_Revert() (gas: 5894136) -OffRamp_execute:test_NonArray_Revert() (gas: 27562) -OffRamp_execute:test_SingleReport_Success() (gas: 176364) -OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148382) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6672410) -OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) +OffRamp_ccipReceive:test_Reverts() (gas: 15407) +OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92883) +OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 64077) +OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68151) +OffRamp_commit:test_InvalidInterval_Revert() (gas: 64269) +OffRamp_commit:test_InvalidRootRevert() (gas: 63334) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6648158) +OffRamp_commit:test_NoConfig_Revert() (gas: 6231830) +OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 112998) +OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121359) +OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113019) +OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 355088) +OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164356) +OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 139369) +OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 146511) +OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59836) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232084) +OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125387) +OffRamp_commit:test_Unhealthy_Revert() (gas: 58611) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206690) +OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51700) +OffRamp_constructor:test_Constructor_Success() (gas: 6234680) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 136081) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103512) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101406) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 161606) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101326) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101364) +OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17617) +OffRamp_execute:test_LargeBatch_Success() (gas: 3425653) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372945) +OffRamp_execute:test_MultipleReports_Success() (gas: 300891) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7057031) +OffRamp_execute:test_NoConfig_Revert() (gas: 6281506) +OffRamp_execute:test_NonArray_Revert() (gas: 27540) +OffRamp_execute:test_SingleReport_Success() (gas: 176310) +OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148328) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7059780) +OffRamp_execute:test_ZeroReports_Revert() (gas: 17339) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18511) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244057) OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20759) OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 205094) -OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 49316) -OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48760) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 218081) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 85349) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 274194) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithVInterception_Success() (gas: 91809) +OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 49284) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48728) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 218049) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 85317) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 274174) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithVInterception_Success() (gas: 91745) OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28260) OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 22062) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 481748) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 481728) OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48372) OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 33959) OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 28436) -OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 188084) -OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 198518) +OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 188052) +OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 198486) OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 40741) -OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 413233) -OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 249776) -OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 193590) -OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 213624) +OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 413201) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 249712) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 193526) +OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 213560) OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 249506) -OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 142151) -OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 409289) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 142119) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 409269) OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 58293) OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 73868) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 583401) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 532115) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 583361) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 532075) OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 33717) -OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 549738) -OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 549752) -OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 460495) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135910) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 165615) -OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3868658) -OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 120474) -OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89178) -OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81284) -OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74161) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 173244) -OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 214189) -OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27152) -OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 165098) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27689) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55260) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 498614) -OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 316158) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2245360) -OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165602) -OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 227234) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 227774) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 781510) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 347431) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37634) +OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 549698) +OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 549712) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 460455) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135878) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 165583) +OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3851762) +OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 120342) +OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89068) +OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81196) +OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74117) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 173190) +OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 214103) +OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27130) +OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 164966) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27667) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55238) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 498528) +OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 316040) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2245290) +OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165548) +OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 227148) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 227688) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 781168) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 347281) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37656) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 104404) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 85342) OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 36752) @@ -733,17 +733,17 @@ OffRamp_releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 162381) OffRamp_releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAPool_Reverts() (gas: 23903) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 62751) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupportDest_Reverts() (gas: 79790) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 174512) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride_Success() (gas: 176424) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 187723) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 174468) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride_Success() (gas: 176380) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 187679) OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11269) OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13884) OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 46421) OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 24463) -OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219355) -OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 227977) -OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 295350) -OffRamp_trialExecute:test_trialExecute_Success() (gas: 277894) +OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219422) +OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 228044) +OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 295531) +OffRamp_trialExecute:test_trialExecute_Success() (gas: 277941) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 390842) OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 18030) OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Revert() (gas: 67426) diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 5fcddb486e..129887f36d 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -21,6 +21,7 @@ import {MultiOCR3Base} from "../ocr/MultiOCR3Base.sol"; import {IERC20} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/token/ERC20/IERC20.sol"; import {ERC165Checker} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/introspection/ERC165Checker.sol"; +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; /// @notice OffRamp enables OCR networks to execute multiple messages /// in an OffRamp in a single transaction. @@ -32,6 +33,7 @@ import {ERC165Checker} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts contract OffRamp is ITypeAndVersion, MultiOCR3Base { using ERC165Checker for address; using EnumerableMapAddresses for EnumerableMapAddresses.AddressToAddressMap; + using EnumerableSet for EnumerableSet.UintSet; error ZeroChainSelectorNotAllowed(); error ExecutionError(bytes32 messageId, bytes err); @@ -156,6 +158,9 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // DYNAMIC CONFIG DynamicConfig internal s_dynamicConfig; + /// @notice Set of enables source chain selectors + EnumerableSet.UintSet internal s_supportedChainSelectors; + /// @notice SourceChainConfig per chain /// (forms lane configurations from sourceChainSelector => StaticConfig.chainSelector) mapping(uint64 sourceChainSelector => SourceChainConfig sourceChainConfig) private s_sourceChainConfigs; @@ -919,6 +924,16 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { return s_sourceChainConfigs[sourceChainSelector]; } + /// @notice Returns all source chain configs + /// @return sourceChainConfigs The source chain configs corresponding to all the supported chain selectors + function getAllSourceChainConfig() external view returns (SourceChainConfig[] memory) { + SourceChainConfig[] memory sourceChainConfigs = new SourceChainConfig[](s_supportedChainSelectors.length()); + for (uint256 i = 0; i < s_supportedChainSelectors.length(); ++i) { + sourceChainConfigs[i] = s_sourceChainConfigs[uint64(s_supportedChainSelectors.at(i))]; + } + return sourceChainConfigs; + } + /// @notice Updates source configs /// @param sourceChainConfigUpdates Source chain configs function applySourceChainConfigUpdates(SourceChainConfigArgs[] memory sourceChainConfigUpdates) external onlyOwner { @@ -961,6 +976,11 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { currentConfig.onRamp = newOnRamp; currentConfig.isEnabled = sourceConfigUpdate.isEnabled; currentConfig.router = sourceConfigUpdate.router; + if (sourceConfigUpdate.isEnabled) { + s_supportedChainSelectors.add(sourceChainSelector); + } else { + s_supportedChainSelectors.remove(sourceChainSelector); + } emit SourceChainConfigSet(sourceChainSelector, currentConfig); } diff --git a/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol b/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol index 0e9352a9ef..7adf1488f0 100644 --- a/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol +++ b/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol @@ -5,8 +5,11 @@ import {Client} from "../../libraries/Client.sol"; import {Internal} from "../../libraries/Internal.sol"; import {OffRamp} from "../../offRamp/OffRamp.sol"; import {IgnoreContractSize} from "./IgnoreContractSize.sol"; +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; contract OffRampHelper is OffRamp, IgnoreContractSize { + using EnumerableSet for EnumerableSet.UintSet; + mapping(uint64 sourceChainSelector => uint256 overrideTimestamp) private s_sourceChainVerificationOverride; constructor( @@ -104,4 +107,8 @@ contract OffRampHelper is OffRamp, IgnoreContractSize { function setRootTimestamp(uint64 sourceChainSelector, bytes32 root, uint256 timestamp) external { s_roots[sourceChainSelector][root] = timestamp; } + + function getSupportedChainSelectors() external view returns (uint256[] memory chainSelectors) { + return s_supportedChainSelectors.values(); + } } 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 73adbb12c0..2656f37b76 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -67,6 +67,10 @@ contract OffRamp_constructor is OffRampSetup { onRamp: sourceChainConfigs[1].onRamp }); + uint64[] memory expectedSourceChainSelectors = new uint64[](2); + expectedSourceChainSelectors[0] = SOURCE_CHAIN_SELECTOR_1; + expectedSourceChainSelectors[1] = SOURCE_CHAIN_SELECTOR_1 + 1; + vm.expectEmit(); emit OffRamp.StaticConfigSet(staticConfig); @@ -134,6 +138,12 @@ contract OffRamp_constructor is OffRampSetup { assertEq("OffRamp 1.6.0-dev", s_offRamp.typeAndVersion()); assertEq(OWNER, s_offRamp.owner()); assertEq(0, s_offRamp.getLatestPriceSequenceNumber()); + + uint256[] memory actualSourceChainSelectors = s_offRamp.getSupportedChainSelectors(); + // assertion for source chain selector + for (uint256 i = 0; i < expectedSourceChainSelectors.length; i++) { + assertEq(expectedSourceChainSelectors[i], actualSourceChainSelectors[i]); + } } // Revert @@ -3005,7 +3015,7 @@ contract OffRamp_applySourceChainConfigUpdates is OffRampSetup { Vm.Log[] memory logEntries = vm.getRecordedLogs(); assertEq(logEntries.length, 0); - // assertEq(s_offRamp.getSourceChainSelectors().length, 0); + assertEq(s_offRamp.getSupportedChainSelectors().length, 0); } function test_AddNewChain_Success() public { @@ -3058,9 +3068,8 @@ contract OffRamp_applySourceChainConfigUpdates is OffRampSetup { _assertSourceChainConfigEquality(s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR_1), expectedSourceChainConfig); - // uint64[] memory resultSourceChainSelectors = s_offRamp.getSourceChainSelectors(); - // assertEq(resultSourceChainSelectors.length, 1); - // assertEq(resultSourceChainSelectors[0], SOURCE_CHAIN_SELECTOR_1); + uint256[] memory resultSourceChainSelectors = s_offRamp.getSupportedChainSelectors(); + assertEq(resultSourceChainSelectors.length, 0); } function test_AddMultipleChains_Success() public { From 9d4c9d4add122b0bed2f6c742f6fc5e416c900e8 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Tue, 1 Oct 2024 15:00:19 +0530 Subject: [PATCH 02/10] feat: add getter to return all source chain config Signed-off-by: 0xsuryansh feat: add getter to return all source chain config Signed-off-by: 0xsuryansh --- contracts/gas-snapshots/ccip.gas-snapshot | 144 +++++++++--------- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 9 +- .../v0.8/ccip/test/helpers/OffRampHelper.sol | 4 +- .../src/v0.8/ccip/test/offRamp/OffRamp.t.sol | 14 +- 4 files changed, 87 insertions(+), 84 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 15710e155f..22c0109430 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -562,7 +562,7 @@ MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61275) MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39933) MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 33049) MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 233701) -MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1500475) +MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1500519) NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37934) NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23706) NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38778) @@ -610,16 +610,16 @@ OCR2Base_transmit:test_Transmit2SignersSuccess_gas() (gas: 51689) OCR2Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 23511) OCR2Base_transmit:test_UnauthorizedSigner_Revert() (gas: 39707) OCR2Base_transmit:test_WrongNumberOfSignatures_Revert() (gas: 20584) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5929944) -OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 583614) -OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166502) -OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16784) -OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 272116) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 168596) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 141079) -OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13441) -OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 72702) -OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15497) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5869456) +OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626169) +OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166511) +OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16763) +OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 272499) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 168614) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 181069) +OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 80266) +OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 206352) +OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 62422) OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177947) OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 335550) OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 278816) @@ -629,44 +629,44 @@ OffRamp_batchExecute:test_SingleReport_Success() (gas: 157100) OffRamp_batchExecute:test_Unhealthy_Success() (gas: 554168) OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10600) OffRamp_ccipReceive:test_Reverts() (gas: 15407) -OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92883) -OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 64077) -OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68151) -OffRamp_commit:test_InvalidInterval_Revert() (gas: 64269) -OffRamp_commit:test_InvalidRootRevert() (gas: 63334) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6648158) -OffRamp_commit:test_NoConfig_Revert() (gas: 6231830) -OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 112998) -OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121359) -OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113019) -OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 355088) -OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164356) -OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 139369) -OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 146511) -OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59836) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232084) -OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125387) -OffRamp_commit:test_Unhealthy_Revert() (gas: 58611) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206690) -OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51700) -OffRamp_constructor:test_Constructor_Success() (gas: 6234680) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 136081) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103512) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101406) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 161606) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101326) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101364) -OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17617) -OffRamp_execute:test_LargeBatch_Success() (gas: 3425653) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372945) -OffRamp_execute:test_MultipleReports_Success() (gas: 300891) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7057031) -OffRamp_execute:test_NoConfig_Revert() (gas: 6281506) -OffRamp_execute:test_NonArray_Revert() (gas: 27540) -OffRamp_execute:test_SingleReport_Success() (gas: 176310) -OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148328) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7059780) -OffRamp_execute:test_ZeroReports_Revert() (gas: 17339) +OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92905) +OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 64099) +OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68173) +OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291) +OffRamp_commit:test_InvalidRootRevert() (gas: 63356) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6630247) +OffRamp_commit:test_NoConfig_Revert() (gas: 6213919) +OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113042) +OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121403) +OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113063) +OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 355198) +OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164400) +OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 139413) +OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 146555) +OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59858) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232172) +OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125409) +OffRamp_commit:test_Unhealthy_Revert() (gas: 58633) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206778) +OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) +OffRamp_constructor:test_Constructor_Success() (gas: 6175874) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 182772) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103307) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101201) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 228198) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101121) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101159) +OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) +OffRamp_execute:test_LargeBatch_Success() (gas: 3425675) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372967) +OffRamp_execute:test_MultipleReports_Success() (gas: 300913) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7039120) +OffRamp_execute:test_NoConfig_Revert() (gas: 6263595) +OffRamp_execute:test_NonArray_Revert() (gas: 27562) +OffRamp_execute:test_SingleReport_Success() (gas: 176332) +OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148350) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7041869) +OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18511) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244057) OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20759) @@ -703,25 +703,25 @@ OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 549712) OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 460455) OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135878) OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 165583) -OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3851762) -OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 120342) -OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89068) -OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81196) -OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74117) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 173190) -OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 214103) -OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27130) -OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 164966) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27667) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55238) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 498528) -OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 316040) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2245290) -OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165548) -OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 227148) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 227688) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 781168) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 347281) +OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3868658) +OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 120474) +OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89178) +OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81284) +OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74161) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 173212) +OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 214125) +OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27152) +OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 165098) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27689) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55260) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 498550) +OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 316062) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2245334) +OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165570) +OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 227170) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 227710) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 781190) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 347303) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37656) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 104404) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 85342) @@ -740,10 +740,10 @@ OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11269) OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13884) OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 46421) OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 24463) -OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219422) -OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 228044) -OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 295531) -OffRamp_trialExecute:test_trialExecute_Success() (gas: 277941) +OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219355) +OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 227977) +OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 295330) +OffRamp_trialExecute:test_trialExecute_Success() (gas: 277874) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 390842) OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 18030) OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Revert() (gas: 67426) diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 129887f36d..7b734821ea 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -159,7 +159,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { DynamicConfig internal s_dynamicConfig; /// @notice Set of enables source chain selectors - EnumerableSet.UintSet internal s_supportedChainSelectors; + EnumerableSet.UintSet internal s_sourceChainSelectors; /// @notice SourceChainConfig per chain /// (forms lane configurations from sourceChainSelector => StaticConfig.chainSelector) @@ -927,9 +927,9 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { /// @notice Returns all source chain configs /// @return sourceChainConfigs The source chain configs corresponding to all the supported chain selectors function getAllSourceChainConfig() external view returns (SourceChainConfig[] memory) { - SourceChainConfig[] memory sourceChainConfigs = new SourceChainConfig[](s_supportedChainSelectors.length()); - for (uint256 i = 0; i < s_supportedChainSelectors.length(); ++i) { - sourceChainConfigs[i] = s_sourceChainConfigs[uint64(s_supportedChainSelectors.at(i))]; + SourceChainConfig[] memory sourceChainConfigs = new SourceChainConfig[](s_sourceChainSelectors.length()); + for (uint256 i = 0; i < s_sourceChainSelectors.length(); ++i) { + sourceChainConfigs[i] = s_sourceChainConfigs[uint64(s_sourceChainSelectors.at(i))]; } return sourceChainConfigs; } @@ -946,6 +946,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { for (uint256 i = 0; i < sourceChainConfigUpdates.length; ++i) { SourceChainConfigArgs memory sourceConfigUpdate = sourceChainConfigUpdates[i]; uint64 sourceChainSelector = sourceConfigUpdate.sourceChainSelector; + s_sourceChainSelectors.add(sourceChainSelector); if (sourceChainSelector == 0) { revert ZeroChainSelectorNotAllowed(); diff --git a/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol b/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol index 7adf1488f0..e0fad398da 100644 --- a/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol +++ b/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol @@ -108,7 +108,7 @@ contract OffRampHelper is OffRamp, IgnoreContractSize { s_roots[sourceChainSelector][root] = timestamp; } - function getSupportedChainSelectors() external view returns (uint256[] memory chainSelectors) { - return s_supportedChainSelectors.values(); + function getSourceChainSelectors() external view returns (uint256[] memory chainSelectors) { + return s_sourceChainSelectors.values(); } } 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 2656f37b76..5ed9bb2e09 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -127,11 +127,13 @@ contract OffRamp_constructor is OffRampSetup { MultiOCR3Base.OCRConfig memory gotOCRConfig = s_offRamp.latestConfigDetails(uint8(Internal.OCRPluginType.Execution)); _assertOCRConfigEquality(expectedOCRConfig, gotOCRConfig); - _assertSourceChainConfigEquality( - s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR_1), expectedSourceChainConfig1 + OffRamp.SourceChainConfig[] memory actualSourceChainConfigs = s_offRamp.getAllSourceChainConfig(); + + _assertSourceChainConfigEquality( + actualSourceChainConfigs[0], expectedSourceChainConfig1 ); _assertSourceChainConfigEquality( - s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR_1 + 1), expectedSourceChainConfig2 + actualSourceChainConfigs[1], expectedSourceChainConfig2 ); // OffRamp initial values @@ -139,7 +141,7 @@ contract OffRamp_constructor is OffRampSetup { assertEq(OWNER, s_offRamp.owner()); assertEq(0, s_offRamp.getLatestPriceSequenceNumber()); - uint256[] memory actualSourceChainSelectors = s_offRamp.getSupportedChainSelectors(); + uint256[] memory actualSourceChainSelectors = s_offRamp.getSourceChainSelectors(); // assertion for source chain selector for (uint256 i = 0; i < expectedSourceChainSelectors.length; i++) { assertEq(expectedSourceChainSelectors[i], actualSourceChainSelectors[i]); @@ -3068,8 +3070,8 @@ contract OffRamp_applySourceChainConfigUpdates is OffRampSetup { _assertSourceChainConfigEquality(s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR_1), expectedSourceChainConfig); - uint256[] memory resultSourceChainSelectors = s_offRamp.getSupportedChainSelectors(); - assertEq(resultSourceChainSelectors.length, 0); + uint256[] memory resultSourceChainSelectors = s_offRamp.getSourceChainSelectors(); + assertEq(resultSourceChainSelectors.length, 1); } function test_AddMultipleChains_Success() public { From 8c2ef70e1cc8d324b821600a5d8746b86acb9ac8 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Tue, 1 Oct 2024 15:35:45 +0530 Subject: [PATCH 03/10] fix : return disabled config Signed-off-by: 0xsuryansh --- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 7 +---- .../v0.8/ccip/test/helpers/OffRampHelper.sol | 2 +- .../src/v0.8/ccip/test/offRamp/OffRamp.t.sol | 2 +- .../ccip/generated/offramp/offramp.go | 28 +++++++++++++++++-- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 7b734821ea..ec7b9ba024 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -21,7 +21,7 @@ import {MultiOCR3Base} from "../ocr/MultiOCR3Base.sol"; import {IERC20} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/token/ERC20/IERC20.sol"; import {ERC165Checker} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/introspection/ERC165Checker.sol"; -import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import {EnumerableSet} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/structs/EnumerableSet.sol"; /// @notice OffRamp enables OCR networks to execute multiple messages /// in an OffRamp in a single transaction. @@ -977,11 +977,6 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { currentConfig.onRamp = newOnRamp; currentConfig.isEnabled = sourceConfigUpdate.isEnabled; currentConfig.router = sourceConfigUpdate.router; - if (sourceConfigUpdate.isEnabled) { - s_supportedChainSelectors.add(sourceChainSelector); - } else { - s_supportedChainSelectors.remove(sourceChainSelector); - } emit SourceChainConfigSet(sourceChainSelector, currentConfig); } diff --git a/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol b/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol index e0fad398da..84b4859aac 100644 --- a/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol +++ b/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol @@ -5,7 +5,7 @@ import {Client} from "../../libraries/Client.sol"; import {Internal} from "../../libraries/Internal.sol"; import {OffRamp} from "../../offRamp/OffRamp.sol"; import {IgnoreContractSize} from "./IgnoreContractSize.sol"; -import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import {EnumerableSet} from "../../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/structs/EnumerableSet.sol"; contract OffRampHelper is OffRamp, IgnoreContractSize { using EnumerableSet for EnumerableSet.UintSet; 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 5ed9bb2e09..7eeb53ae1f 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -3017,7 +3017,7 @@ contract OffRamp_applySourceChainConfigUpdates is OffRampSetup { Vm.Log[] memory logEntries = vm.getRecordedLogs(); assertEq(logEntries.length, 0); - assertEq(s_offRamp.getSupportedChainSelectors().length, 0); + assertEq(s_offRamp.getSourceChainSelectors().length, 0); } function test_AddNewChain_Success() public { diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 9ef94b601b..6cfdad978d 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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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.ExecutionReportSingleChain[]\",\"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: "0x6101206040523480156200001257600080fd5b50604051620067de380380620067de833981016040819052620000359162000806565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000b8d565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005ba57600082828151811062000391576200039162000943565b60200260200101519050600081602001519050806001600160401b0316600003620003cf5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003f8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526006602052604090206060830151600182018054620004269062000959565b905060000362000489578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004c8565b8154600160a81b90046001600160401b0316600114620004c857604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620004fe5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200051d576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200052d8282620009ea565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b90620005a290859062000ab6565b60405180910390a25050505080600101905062000370565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620005f957620005f9620005be565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200062a576200062a620005be565b604052919050565b80516001600160401b03811681146200064a57600080fd5b919050565b6001600160a01b03811681146200066557600080fd5b50565b6000601f83601f8401126200067c57600080fd5b825160206001600160401b03808311156200069b576200069b620005be565b8260051b620006ac838201620005ff565b9384528681018301938381019089861115620006c757600080fd5b84890192505b85831015620007f957825184811115620006e75760008081fd5b89016080601f19828d038101821315620007015760008081fd5b6200070b620005d4565b888401516200071a816200064f565b815260406200072b85820162000632565b8a8301526060808601518015158114620007455760008081fd5b838301529385015193898511156200075d5760008081fd5b84860195508f603f8701126200077557600094508485fd5b8a8601519450898511156200078e576200078e620005be565b6200079f8b858f88011601620005ff565b93508484528f82868801011115620007b75760008081fd5b60005b85811015620007d7578681018301518582018d01528b01620007ba565b5060009484018b019490945250918201528352509184019190840190620006cd565b9998505050505050505050565b60008060008385036101008112156200081e57600080fd5b60808112156200082d57600080fd5b62000837620005d4565b620008428662000632565b8152602086015162000854816200064f565b6020820152604086015162000869816200064f565b604082015260608601516200087e816200064f565b606082810191909152909450607f19820112156200089b57600080fd5b50604051606081016001600160401b038082118383101715620008c257620008c2620005be565b8160405260808701519150620008d8826200064f565b90825260a08601519063ffffffff82168214620008f457600080fd5b81602084015260c087015191506200090c826200064f565b6040830182905260e0870151929450808311156200092957600080fd5b5050620009398682870162000668565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806200096e57607f821691505b6020821081036200098f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009e5576000816000526020600020601f850160051c81016020861015620009c05750805b601f850160051c820191505b81811015620009e157828155600101620009cc565b5050505b505050565b81516001600160401b0381111562000a065762000a06620005be565b62000a1e8162000a17845462000959565b8462000995565b602080601f83116001811462000a56576000841562000a3d5750858301515b600019600386901b1c1916600185901b178555620009e1565b600085815260208120601f198616915b8281101562000a875788860151825594840194600190910190840162000a66565b508582101562000aa65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b0b8162000959565b8060a089015260c0600183166000811462000b2f576001811462000b4c5762000b7e565b60ff19841660c08b015260c083151560051b8b0101945062000b7e565b85600052602060002060005b8481101562000b755781548c820185015290880190890162000b58565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615bdb62000c036000396000818161022c01526129d50152600081816101fd0152612c9a0152600081816101ce015281816105580152818161070a015261239601526000818161019f01526125d5015260008181611ac70152611afa0152615bdb6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636f9e320f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104bc578063f2fde38b146104dc578063f716f99f146104ef57600080fd5b8063c673e58414610458578063ccd37ba31461047857600080fd5b806379ba5097116100b257806379ba50971461042757806385572ffb1461042f5780638da5cb5b1461043d57600080fd5b80636f9e320f146103825780637437ff9f1461039557600080fd5b8063311cd513116101245780635e36480c116101095780635e36480c1461033c5780635e7bb0081461035c57806360987c201461036f57600080fd5b8063311cd5131461030e5780633f4b04aa1461032157600080fd5b806304666f9c1461015657806306285c691461016b578063181f5a77146102b25780632d04ab76146102fb575b600080fd5b610169610164366004613ba0565b610502565b005b61025c60408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102a9919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6102ee6040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102a99190613d0e565b610169610309366004613dbe565b610516565b61016961031c366004613e70565b610a1d565b6009546040516001600160401b0390911681526020016102a9565b61034f61034a366004613ec3565b610a86565b6040516102a99190613f20565b61016961036a366004614489565b610adb565b61016961037d3660046146cd565b610d6a565b610169610390366004614761565b61104a565b6103f1604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102a9565b61016961105b565b6101696101513660046147d0565b6000546040516001600160a01b0390911681526020016102a9565b61046b61046636600461481b565b61110c565b6040516102a9919061487b565b6104ae6104863660046148f0565b6001600160401b03919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102a9565b6104cf6104ca36600461491a565b61126a565b6040516102a99190614935565b6101696104ea366004614982565b611376565b6101696104fd366004614a07565b611387565b61050a6113c9565b61051381611425565b50565b600061052487890189614d5c565b602081015151909150156105c157602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb93610590933093909190600401614f91565b60006040518083038186803b1580156105a857600080fd5b505afa1580156105bc573d6000803e3d6000fd5b505050505b805151511515806105d757508051602001515115155b156106a35760095460208a0135906001600160401b038083169116101561067b576009805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106449291016150de565b600060405180830381600087803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b505050506106a1565b8160200151516000036106a157604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561095e576000826020015182815181106106cb576106cb61500c565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077591906150f1565b156107a357604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107ae82611678565b9050806001016040516107c19190615148565b6040518091039020836020015180519060200120146107fe5782602001518160010160405163b80d8fa960e01b815260040161079a92919061523b565b60408301518154600160a81b90046001600160401b03908116911614158061083f575082606001516001600160401b031683604001516001600160401b0316115b1561088457825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161079a565b6080830151806108a75760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600860209081526040808320848452909152902054156108ff5783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161079a565b606084015161090f906001615276565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b039283160217909255925116600090815260086020908152604080832094835293905291909120429055506001016106a6565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e49261099692909161529d565b60405180910390a1610a1260008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92506116c4915050565b505050505050505050565b610a5d610a2c828401846152c2565b6040805160008082526020820190925290610a57565b6060815260200190600190039081610a425790505b506119bd565b604080516000808252602082019092529050610a806001858585858660006116c4565b50505050565b6000610a94600160046152f6565b6002610aa160808561531f565b6001600160401b0316610ab49190615345565b610abe8585611a7f565b901c166003811115610ad257610ad2613ef6565b90505b92915050565b610ae3611ac4565b815181518114610b06576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d5a576000848281518110610b2557610b2561500c565b60200260200101519050600081602001515190506000858481518110610b4d57610b4d61500c565b6020026020010151905080518214610b78576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d4b576000828281518110610b9757610b9761500c565b6020026020010151600001519050600085602001518381518110610bbd57610bbd61500c565b6020026020010151905081600014610c11578060800151821015610c11578551815151604051633a98d46360e11b81526001600160401b03909216600483015260248201526044810183905260640161079a565b838381518110610c2357610c2361500c565b602002602001015160200151518160a001515114610c7057805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161079a565b60005b8160a0015151811015610d3d576000858581518110610c9457610c9461500c565b6020026020010151602001518281518110610cb157610cb161500c565b602002602001015163ffffffff16905080600014610d345760008360a001518381518110610ce157610ce161500c565b60200260200101516040015163ffffffff16905080821015610d32578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161079a565b505b50600101610c73565b505050806001019050610b7b565b50505050806001019050610b09565b50610d6583836119bd565b505050565b333014610d8a576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610dc7565b6040805180820190915260008082526020820152815260200190600190039081610da05790505b5060a08701515190915015610dfd57610dfa8660a001518760200151886060015189600001516020015189898989611b2c565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e38929101613d0e565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f13576040516308d450a160e01b81526001600160a01b038216906308d450a190610e999085906004016153fd565b600060405180830381600087803b158015610eb357600080fd5b505af1925050508015610ec4575060015b610f13573d808015610ef2576040519150601f19603f3d011682016040523d82523d6000602084013e610ef7565b606091505b50806040516309c2532560e01b815260040161079a9190613d0e565b604088015151158015610f2857506080880151155b80610f3f575060608801516001600160a01b03163b155b80610f6657506060880151610f64906001600160a01b03166385572ffb60e01b611cdd565b155b15610f7357505050611043565b87516020908101516001600160401b03166000908152600690915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610fd19289926113889291600401615410565b6000604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611018919081019061544c565b50915091508161103d57806040516302a35ba360e21b815260040161079a9190613d0e565b50505050505b5050505050565b6110526113c9565b61051381611cf9565b6001546001600160a01b031633146110b55760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161079a565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61114f6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c0820152948552918201805484518184028101840190955280855292938583019390928301828280156111f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111da575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561125a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161123c575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916112f69061510e565b80601f01602080910402602001604051908101604052809291908181526020018280546113229061510e565b801561125a5780601f106113445761010080835404028352916020019161125a565b820191906000526020600020905b81548152906001019060200180831161135257505050919092525091949350505050565b61137e6113c9565b61051381611dd8565b61138f6113c9565b60005b81518110156113c5576113bd8282815181106113b0576113b061500c565b6020026020010151611e81565b600101611392565b5050565b6000546001600160a01b031633146114235760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161079a565b565b60005b81518110156113c55760008282815181106114455761144561500c565b60200260200101519050600081602001519050806001600160401b03166000036114825760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166114aa576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260066020526040902060608301516001820180546114d69061510e565b905060000361153857815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611575565b8154600160a81b90046001600160401b031660011461157557604051632105803760e11b81526001600160401b038416600482015260240161079a565b805115806115aa5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156115c8576040516342bcdf7f60e11b815260040160405180910390fd5b600182016115d68282615531565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906116619085906155f0565b60405180910390a250505050806001019050611428565b6001600160401b03811660009081526006602052604081208054600160a01b900460ff16610ad55760405163ed053c5960e01b81526001600160401b038416600482015260240161079a565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906117238760a461563e565b905082606001511561176b57845161173c906020615345565b8651611749906020615345565b6117549060a061563e565b61175e919061563e565b611768908261563e565b90505b36811461179457604051638e1192e160e01b81526004810182905236602482015260440161079a565b50815181146117c35781516040516324f7d61360e21b815260048101919091526024810182905260440161079a565b6117cb611ac4565b60ff808a166000908152600360209081526040808320338452825280832081518083019092528054808616835293949193909284019161010090910416600281111561181957611819613ef6565b600281111561182a5761182a613ef6565b905250905060028160200151600281111561184757611847613ef6565b14801561189b5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff16815481106118835761188361500c565b6000918252602090912001546001600160a01b031633145b6118b857604051631b41e11d60e31b815260040160405180910390fd5b508160600151156119685760208201516118d3906001615651565b60ff168551146118f6576040516371253a2560e01b815260040160405180910390fd5b83518551146119185760405163a75d88af60e01b815260040160405180910390fd5b6000878760405161192a92919061566a565b604051908190038120611941918b9060200161567a565b6040516020818303038152906040528051906020012090506119668a828888886121ab565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b81516000036119de5760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a21565b6040805180820190915260008152606060208201528152602001906001900390816119f95790505b50905060005b845181101561104357611a77858281518110611a4557611a4561500c565b602002602001015184611a7157858381518110611a6457611a6461500c565b6020026020010151612368565b83612368565b600101611a27565b6001600160401b038216600090815260076020526040812081611aa360808561568e565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461142357604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161079a565b606088516001600160401b03811115611b4757611b476139e2565b604051908082528060200260200182016040528015611b8c57816020015b6040805180820190915260008082526020820152815260200190600190039081611b655790505b509050811560005b8a51811015611ccf5781611c2c57848482818110611bb457611bb461500c565b9050602002016020810190611bc991906156b4565b63ffffffff1615611c2c57848482818110611be657611be661500c565b9050602002016020810190611bfb91906156b4565b8b8281518110611c0d57611c0d61500c565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611caa8b8281518110611c4157611c4161500c565b60200260200101518b8b8b8b8b87818110611c5e57611c5e61500c565b9050602002810190611c7091906156cf565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612c5f92505050565b838281518110611cbc57611cbc61500c565b6020908102919091010152600101611b94565b505098975050505050505050565b6000611ce883612f3f565b8015610ad25750610ad28383612f8a565b80516001600160a01b0316611d21576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b336001600160a01b03821603611e305760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161079a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003611eac576000604051631b3fab5160e11b815260040161079a9190615715565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003611efd576060840151600182018054911515620100000262ff000019909216919091179055611f39565b6060840151600182015460ff6201000090910416151590151514611f39576040516321fd80df60e21b815260ff8416600482015260240161079a565b60a084015180516101001015611f65576001604051631b3fab5160e11b815260040161079a9190615715565b8051600003611f8a576005604051631b3fab5160e11b815260040161079a9190615715565b611ff08484600301805480602002602001604051908101604052809291908181526020018280548015611fe657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fc8575b505050505061302c565b8460600151156121205761205e8484600201805480602002602001604051908101604052809291908181526020018280548015611fe6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611fc857505050505061302c565b60808501518051610100101561208a576002604051631b3fab5160e11b815260040161079a9190615715565b604086015161209a90600361572f565b60ff168151116120c0576003604051631b3fab5160e11b815260040161079a9190615715565b8151815110156120e6576001604051631b3fab5160e11b815260040161079a9190615715565b805160018401805461ff00191661010060ff8416021790556121119060028601906020840190613968565b5061211e85826001613095565b505b61212c84826002613095565b80516121419060038501906020840190613968565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361219a9389939260028a0192919061574b565b60405180910390a1611043846131f0565b8251600090815b8181101561235e5760006001888684602081106121d1576121d161500c565b6121de91901a601b615651565b8985815181106121f0576121f061500c565b602002602001015189868151811061220a5761220a61500c565b602002602001015160405160008152602001604052604051612248949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561226a573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156122cb576122cb613ef6565b60028111156122dc576122dc613ef6565b90525090506001816020015160028111156122f9576122f9613ef6565b1461231757604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561234157604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506121b2565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156123e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240991906150f1565b1561247a57801561243857604051637edeb53960e11b81526001600160401b038316600482015260240161079a565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061248583611678565b60010180546124939061510e565b80601f01602080910402602001604051908101604052809291908181526020018280546124bf9061510e565b801561250c5780601f106124e15761010080835404028352916020019161250c565b820191906000526020600020905b8154815290600101906020018083116124ef57829003601f168201915b5050506020880151519293505050600081900361253b5760405162bf199760e01b815260040160405180910390fd5b8560400151518114612560576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561257a5761257a6139e2565b6040519080825280602002602001820160405280156125a3578160200160208202803683370190505b50905060005b82811015612747576000886020015182815181106125c9576125c961500c565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146126405780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161079a565b866001600160401b03168160000151602001516001600160401b03161461269457805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161079a565b612721817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f836000015160200151846000015160400151898051906020012060405160200161270694939291909384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120613247565b8383815181106127335761273361500c565b6020908102919091010152506001016125a9565b50600061275e86838a606001518b6080015161334f565b90508060000361278c57604051633ee8bd3f60e11b81526001600160401b038716600482015260240161079a565b60005b83811015610a125760005a905060008a6020015183815181106127b4576127b461500c565b6020026020010151905060006127d28a836000015160600151610a86565b905060008160038111156127e8576127e8613ef6565b14806128055750600381600381111561280357612803613ef6565b145b61285b57815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612c57565b6060891561293a578b85815181106128755761287561500c565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff166128a388426152f6565b11905080806128c3575060038360038111156128c1576128c1613ef6565b145b6128eb576040516354e7e43160e11b81526001600160401b038d16600482015260240161079a565b8c86815181106128fd576128fd61500c565b602002602001015160000151600014612934578c86815181106129225761292261500c565b60209081029190910101515160808501525b506129a6565b600082600381111561294e5761294e613ef6565b146129a657825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612c57565b8251608001516001600160401b031615612a7f5760008260038111156129ce576129ce613ef6565b03612a7f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612a2f939291906157fd565b6020604051808303816000875af1158015612a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7291906150f1565b612a7f5750505050612c57565b60008d604001518681518110612a9757612a9761500c565b6020026020010151905080518460a001515114612ae157835160600151604051631cfe6d8b60e01b81526001600160401b03808f166004830152909116602482015260440161079a565b612af58c856000015160600151600161338c565b600080612b03868486613431565b91509150612b1a8e8760000151606001518461338c565b8c15612b71576003826003811115612b3457612b34613ef6565b03612b71576000856003811115612b4d57612b4d613ef6565b14612b7157855151604051632b11b8d960e01b815261079a91908390600401615829565b6002826003811115612b8557612b85613ef6565b14612bca576003826003811115612b9e57612b9e613ef6565b14612bca578d866000015160600151836040516349362d1f60e11b815260040161079a93929190615842565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612c2257612c2261500c565b602002602001015186865a612c37908f6152f6565b604051612c479493929190615867565b60405180910390a4505050505050505b60010161278f565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d07919061589e565b90506001600160a01b0381161580612d365750612d346001600160a01b03821663aff2afbf60e01b611cdd565b155b15612d5f5760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161079a565b600080612d7788858c6040015163ffffffff166134e5565b915091506000806000612e2a6040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612df491906158bb565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b179052878661138860846135c8565b92509250925082612e50578160405163e1cd550960e01b815260040161079a9190613d0e565b8151602014612e7f578151604051631e3be00960e21b815260206004820152602481019190915260440161079a565b600082806020019051810190612e959190615987565b9050866001600160a01b03168c6001600160a01b031614612f11576000612ec68d8a612ec1868a6152f6565b6134e5565b50905086811080612ee0575081612edd88836152f6565b14155b15612f0f5760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161079a565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000612f52826301ffc9a760e01b612f8a565b8015610ad55750612f83827fffffffff00000000000000000000000000000000000000000000000000000000612f8a565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d91506000519050828015613015575060208210155b80156130215750600081115b979650505050505050565b60005b8151811015610d655760ff8316600090815260036020526040812083519091908490849081106130615761306161500c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161302f565b60005b8251811015610a805760008382815181106130b5576130b561500c565b60200260200101519050600060028111156130d2576130d2613ef6565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561311157613111613ef6565b14613132576004604051631b3fab5160e11b815260040161079a9190615715565b6001600160a01b0381166131595760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561317f5761317f613ef6565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156131dc576131dc613ef6565b021790555090505050806001019050613098565b60ff81166105135760ff8082166000908152600260205260409020600101546201000090041661323357604051631e8ed32560e21b815260040160405180910390fd5b6009805467ffffffffffffffff1916905550565b8151805160608085015190830151608080870151940151604051600095869588956132ab95919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016132ee9190615a41565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b60008061335d8585856136a2565b6001600160401b038716600090815260086020908152604080832093835292905220549150505b949350505050565b6000600261339b60808561531f565b6001600160401b03166133ae9190615345565b905060006133bc8585611a7f565b9050816133cb600160046152f6565b901b1916818360038111156133e2576133e2613ef6565b6001600160401b03871660009081526007602052604081209190921b9290921791829161341060808861568e565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061345e90889088908890600401615ad8565b600060405180830381600087803b15801561347857600080fd5b505af1925050508015613489575060015b6134c8573d8080156134b7576040519150601f19603f3d011682016040523d82523d6000602084013e6134bc565b606091505b506003925090506134dd565b50506040805160208101909152600081526002905b935093915050565b60008060008060006135468860405160240161351091906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052888861138860846135c8565b9250925092508261356c578160405163e1cd550960e01b815260040161079a9190613d0e565b602082511461359b578151604051631e3be00960e21b815260206004820152602481019190915260440161079a565b818060200190518101906135af9190615987565b6135b982886152f6565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156135ea576135ea6139e2565b6040519080825280601f01601f191660200182016040528015613614576020820181803683370190505b509150863b61362e5763030ed58f60e21b60005260046000fd5b5a8581101561364857632be8ca8b60e21b60005260046000fd5b8590036040810481038710613668576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d8481111561368b5750835b808352806000602085013e50955095509592505050565b82518251600091908183036136ca57604051630469ac9960e21b815260040160405180910390fd5b61010182118015906136de57506101018111155b6136fb576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613725576040516309bde33960e01b815260040160405180910390fd5b8060000361375257866000815181106137405761374061500c565b60200260200101519350505050613920565b6000816001600160401b0381111561376c5761376c6139e2565b604051908082528060200260200182016040528015613795578160200160208202803683370190505b50905060008080805b858110156138bf5760006001821b8b8116036137f957888510156137e2578c5160018601958e9181106137d3576137d361500c565b6020026020010151905061381b565b85516001850194879181106137d3576137d361500c565b8b5160018401938d9181106138105761381061500c565b602002602001015190505b60008986101561384b578d5160018701968f91811061383c5761383c61500c565b6020026020010151905061386d565b86516001860195889181106138625761386261500c565b602002602001015190505b8285111561388e576040516309bde33960e01b815260040160405180910390fd5b6138988282613927565b8784815181106138aa576138aa61500c565b6020908102919091010152505060010161379e565b5060018503821480156138d157508683145b80156138dc57508581145b6138f9576040516309bde33960e01b815260040160405180910390fd5b83600186038151811061390e5761390e61500c565b60200260200101519750505050505050505b9392505050565b600081831061393f5761393a8284613945565b610ad2565b610ad283835b604080516001602082015290810183905260608101829052600090608001613331565b8280548282559060005260206000209081019282156139bd579160200282015b828111156139bd57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613988565b506139c99291506139cd565b5090565b5b808211156139c957600081556001016139ce565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613a1a57613a1a6139e2565b60405290565b60405160a081016001600160401b0381118282101715613a1a57613a1a6139e2565b60405160c081016001600160401b0381118282101715613a1a57613a1a6139e2565b604080519081016001600160401b0381118282101715613a1a57613a1a6139e2565b604051601f8201601f191681016001600160401b0381118282101715613aae57613aae6139e2565b604052919050565b60006001600160401b03821115613acf57613acf6139e2565b5060051b60200190565b6001600160a01b038116811461051357600080fd5b80356001600160401b0381168114613b0557600080fd5b919050565b801515811461051357600080fd5b8035613b0581613b0a565b60006001600160401b03821115613b3c57613b3c6139e2565b50601f01601f191660200190565b600082601f830112613b5b57600080fd5b8135613b6e613b6982613b23565b613a86565b818152846020838601011115613b8357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613bb357600080fd5b82356001600160401b0380821115613bca57600080fd5b818501915085601f830112613bde57600080fd5b8135613bec613b6982613ab6565b81815260059190911b83018401908481019088831115613c0b57600080fd5b8585015b83811015613cb157803585811115613c275760008081fd5b86016080818c03601f1901811315613c3f5760008081fd5b613c476139f8565b89830135613c5481613ad9565b81526040613c63848201613aee565b8b830152606080850135613c7681613b0a565b83830152928401359289841115613c8f57600091508182fd5b613c9d8f8d86880101613b4a565b908301525085525050918601918601613c0f565b5098975050505050505050565b60005b83811015613cd9578181015183820152602001613cc1565b50506000910152565b60008151808452613cfa816020860160208601613cbe565b601f01601f19169290920160200192915050565b602081526000610ad26020830184613ce2565b8060608101831015610ad557600080fd5b60008083601f840112613d4457600080fd5b5081356001600160401b03811115613d5b57600080fd5b602083019150836020828501011115613d7357600080fd5b9250929050565b60008083601f840112613d8c57600080fd5b5081356001600160401b03811115613da357600080fd5b6020830191508360208260051b8501011115613d7357600080fd5b60008060008060008060008060e0898b031215613dda57600080fd5b613de48a8a613d21565b975060608901356001600160401b0380821115613e0057600080fd5b613e0c8c838d01613d32565b909950975060808b0135915080821115613e2557600080fd5b613e318c838d01613d7a565b909750955060a08b0135915080821115613e4a57600080fd5b50613e578b828c01613d7a565b999c989b50969995989497949560c00135949350505050565b600080600060808486031215613e8557600080fd5b613e8f8585613d21565b925060608401356001600160401b03811115613eaa57600080fd5b613eb686828701613d32565b9497909650939450505050565b60008060408385031215613ed657600080fd5b613edf83613aee565b9150613eed60208401613aee565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b60048110613f1c57613f1c613ef6565b9052565b60208101610ad58284613f0c565b600060a08284031215613f4057600080fd5b613f48613a20565b905081358152613f5a60208301613aee565b6020820152613f6b60408301613aee565b6040820152613f7c60608301613aee565b6060820152613f8d60808301613aee565b608082015292915050565b8035613b0581613ad9565b803563ffffffff81168114613b0557600080fd5b600082601f830112613fc857600080fd5b81356020613fd8613b6983613ab6565b82815260059290921b84018101918181019086841115613ff757600080fd5b8286015b848110156140c75780356001600160401b038082111561401b5760008081fd5b9088019060a0828b03601f19018113156140355760008081fd5b61403d613a20565b878401358381111561404f5760008081fd5b61405d8d8a83880101613b4a565b82525060408085013561406f81613ad9565b828a01526060614080868201613fa3565b8284015260809150818601358581111561409a5760008081fd5b6140a88f8c838a0101613b4a565b9184019190915250919093013590830152508352918301918301613ffb565b509695505050505050565b600061014082840312156140e557600080fd5b6140ed613a42565b90506140f98383613f2e565b815260a08201356001600160401b038082111561411557600080fd5b61412185838601613b4a565b602084015260c084013591508082111561413a57600080fd5b61414685838601613b4a565b604084015261415760e08501613f98565b6060840152610100840135608084015261012084013591508082111561417c57600080fd5b5061418984828501613fb7565b60a08301525092915050565b600082601f8301126141a657600080fd5b813560206141b6613b6983613ab6565b82815260059290921b840181019181810190868411156141d557600080fd5b8286015b848110156140c75780356001600160401b038111156141f85760008081fd5b6142068986838b01016140d2565b8452509183019183016141d9565b600082601f83011261422557600080fd5b81356020614235613b6983613ab6565b82815260059290921b8401810191818101908684111561425457600080fd5b8286015b848110156140c75780356001600160401b038082111561427757600080fd5b818901915089603f83011261428b57600080fd5b8582013561429b613b6982613ab6565b81815260059190911b830160400190878101908c8311156142bb57600080fd5b604085015b838110156142f4578035858111156142d757600080fd5b6142e68f6040838a0101613b4a565b8452509189019189016142c0565b50875250505092840192508301614258565b600082601f83011261431757600080fd5b81356020614327613b6983613ab6565b8083825260208201915060208460051b87010193508684111561434957600080fd5b602086015b848110156140c7578035835291830191830161434e565b600082601f83011261437657600080fd5b81356020614386613b6983613ab6565b82815260059290921b840181019181810190868411156143a557600080fd5b8286015b848110156140c75780356001600160401b03808211156143c95760008081fd5b9088019060a0828b03601f19018113156143e35760008081fd5b6143eb613a20565b6143f6888501613aee565b81526040808501358481111561440c5760008081fd5b61441a8e8b83890101614195565b8a84015250606080860135858111156144335760008081fd5b6144418f8c838a0101614214565b838501525060809150818601358581111561445c5760008081fd5b61446a8f8c838a0101614306565b91840191909152509190930135908301525083529183019183016143a9565b6000806040838503121561449c57600080fd5b6001600160401b03833511156144b157600080fd5b6144be8484358501614365565b91506001600160401b03602084013511156144d857600080fd5b6020830135830184601f8201126144ee57600080fd5b6144fb613b698235613ab6565b81358082526020808301929160051b84010187101561451957600080fd5b602083015b6020843560051b8501018110156146bf576001600160401b038135111561454457600080fd5b87603f82358601011261455657600080fd5b614569613b696020833587010135613ab6565b81358501602081810135808452908301929160059190911b016040018a101561459157600080fd5b604083358701015b83358701602081013560051b016040018110156146af576001600160401b03813511156145c557600080fd5b833587018135016040818d03603f190112156145e057600080fd5b6145e8613a64565b604082013581526001600160401b036060830135111561460757600080fd5b8c605f60608401358401011261461c57600080fd5b6040606083013583010135614633613b6982613ab6565b808282526020820191508f60608460051b606088013588010101111561465857600080fd5b6060808601358601015b60608460051b60608801358801010181101561468f5761468181613fa3565b835260209283019201614662565b508060208501525050508085525050602083019250602081019050614599565b508452506020928301920161451e565b508093505050509250929050565b6000806000806000606086880312156146e557600080fd5b85356001600160401b03808211156146fc57600080fd5b61470889838a016140d2565b9650602088013591508082111561471e57600080fd5b61472a89838a01613d7a565b9096509450604088013591508082111561474357600080fd5b5061475088828901613d7a565b969995985093965092949392505050565b60006060828403121561477357600080fd5b604051606081018181106001600160401b0382111715614795576147956139e2565b60405282356147a381613ad9565b81526147b160208401613fa3565b602082015260408301356147c481613ad9565b60408201529392505050565b6000602082840312156147e257600080fd5b81356001600160401b038111156147f857600080fd5b820160a0818503121561392057600080fd5b803560ff81168114613b0557600080fd5b60006020828403121561482d57600080fd5b610ad28261480a565b60008151808452602080850194506020840160005b838110156148705781516001600160a01b03168752958201959082019060010161484b565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a08401526148ca60e0840182614836565b90506040840151601f198483030160c08501526148e78282614836565b95945050505050565b6000806040838503121561490357600080fd5b61490c83613aee565b946020939093013593505050565b60006020828403121561492c57600080fd5b610ad282613aee565b602081526001600160a01b0382511660208201526020820151151560408201526001600160401b0360408301511660608201526000606083015160808084015261338460a0840182613ce2565b60006020828403121561499457600080fd5b813561392081613ad9565b600082601f8301126149b057600080fd5b813560206149c0613b6983613ab6565b8083825260208201915060208460051b8701019350868411156149e257600080fd5b602086015b848110156140c75780356149fa81613ad9565b83529183019183016149e7565b60006020808385031215614a1a57600080fd5b82356001600160401b0380821115614a3157600080fd5b818501915085601f830112614a4557600080fd5b8135614a53613b6982613ab6565b81815260059190911b83018401908481019088831115614a7257600080fd5b8585015b83811015613cb157803585811115614a8d57600080fd5b860160c0818c03601f19011215614aa45760008081fd5b614aac613a42565b8882013581526040614abf81840161480a565b8a8301526060614ad081850161480a565b8284015260809150614ae3828501613b18565b9083015260a08381013589811115614afb5760008081fd5b614b098f8d8388010161499f565b838501525060c0840135915088821115614b235760008081fd5b614b318e8c8487010161499f565b9083015250845250918601918601614a76565b80356001600160e01b0381168114613b0557600080fd5b600082601f830112614b6c57600080fd5b81356020614b7c613b6983613ab6565b82815260069290921b84018101918181019086841115614b9b57600080fd5b8286015b848110156140c75760408189031215614bb85760008081fd5b614bc0613a64565b614bc982613aee565b8152614bd6858301614b44565b81860152835291830191604001614b9f565b600082601f830112614bf957600080fd5b81356020614c09613b6983613ab6565b82815260059290921b84018101918181019086841115614c2857600080fd5b8286015b848110156140c75780356001600160401b0380821115614c4c5760008081fd5b9088019060a0828b03601f1901811315614c665760008081fd5b614c6e613a20565b614c79888501613aee565b815260408085013584811115614c8f5760008081fd5b614c9d8e8b83890101613b4a565b8a8401525060609350614cb1848601613aee565b908201526080614cc2858201613aee565b93820193909352920135908201528352918301918301614c2c565b600082601f830112614cee57600080fd5b81356020614cfe613b6983613ab6565b82815260069290921b84018101918181019086841115614d1d57600080fd5b8286015b848110156140c75760408189031215614d3a5760008081fd5b614d42613a64565b813581528482013585820152835291830191604001614d21565b60006020808385031215614d6f57600080fd5b82356001600160401b0380821115614d8657600080fd5b9084019060808287031215614d9a57600080fd5b614da26139f8565b823582811115614db157600080fd5b83016040818903811315614dc457600080fd5b614dcc613a64565b823585811115614ddb57600080fd5b8301601f81018b13614dec57600080fd5b8035614dfa613b6982613ab6565b81815260069190911b8201890190898101908d831115614e1957600080fd5b928a01925b82841015614e695785848f031215614e365760008081fd5b614e3e613a64565b8435614e4981613ad9565b8152614e56858d01614b44565b818d0152825292850192908a0190614e1e565b845250505082870135915084821115614e8157600080fd5b614e8d8a838501614b5b565b81880152835250508284013582811115614ea657600080fd5b614eb288828601614be8565b85830152506040830135935081841115614ecb57600080fd5b614ed787858501614cdd565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b84811015614f8457601f19868403018952815160a06001600160401b03808351168652868301518288880152614f4883880182613ce2565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101614f10565b5090979650505050505050565b6001600160a01b038516815260006020608081840152614fb46080840187614ef3565b83810360408581019190915286518083528388019284019060005b81811015614ff457845180518452860151868401529385019391830191600101614fcf565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561507957835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615042565b50508583015187820388850152805180835290840192506000918401905b808310156150d257835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615097565b50979650505050505050565b602081526000610ad26020830184615022565b60006020828403121561510357600080fd5b815161392081613b0a565b600181811c9082168061512257607f821691505b60208210810361514257634e487b7160e01b600052602260045260246000fd5b50919050565b60008083546151568161510e565b6001828116801561516e5760018114615183576151b2565b60ff19841687528215158302870194506151b2565b8760005260208060002060005b858110156151a95781548a820152908401908201615190565b50505082870194505b50929695505050505050565b600081546151cb8161510e565b8085526020600183811680156151e8576001811461520257615230565b60ff1985168884015283151560051b880183019550615230565b866000528260002060005b858110156152285781548a820186015290830190840161520d565b890184019650505b505050505092915050565b60408152600061524e6040830185613ce2565b82810360208401526148e781856151be565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561529657615296615260565b5092915050565b6040815260006152b06040830185614ef3565b82810360208401526148e78185615022565b6000602082840312156152d457600080fd5b81356001600160401b038111156152ea57600080fd5b61338484828501614365565b81810381811115610ad557610ad5615260565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061533957615339615309565b92169190910692915050565b8082028115828204841417610ad557610ad5615260565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261538f60a0870182613ce2565b9050606085015186820360608801526153a88282613ce2565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156150d257835180516001600160a01b03168352860151868301529285019260019290920191908401906153cb565b602081526000610ad2602083018461535c565b608081526000615423608083018761535c565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561546157600080fd5b835161546c81613b0a565b60208501519093506001600160401b0381111561548857600080fd5b8401601f8101861361549957600080fd5b80516154a7613b6982613b23565b8181528760208385010111156154bc57600080fd5b6154cd826020830160208601613cbe565b809450505050604084015190509250925092565b601f821115610d65576000816000526020600020601f850160051c8101602086101561550a5750805b601f850160051c820191505b8181101561552957828155600101615516565b505050505050565b81516001600160401b0381111561554a5761554a6139e2565b61555e81615558845461510e565b846154e1565b602080601f831160018114615593576000841561557b5750858301515b600019600386901b1c1916600185901b178555615529565b600085815260208120601f198616915b828110156155c2578886015182559484019460019091019084016155a3565b50858210156155e05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610ad260a08301600185016151be565b80820180821115610ad557610ad5615260565b60ff8181168382160190811115610ad557610ad5615260565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b03808416806156a8576156a8615309565b92169190910492915050565b6000602082840312156156c657600080fd5b610ad282613fa3565b6000808335601e198436030181126156e657600080fd5b8301803591506001600160401b0382111561570057600080fd5b602001915036819003821315613d7357600080fd5b602081016006831061572957615729613ef6565b91905290565b60ff818116838216029081169081811461529657615296615260565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b818110156157a35784546001600160a01b03168352600194850194928401920161577e565b50508481036060860152865180825290820192508187019060005b818110156157e35782516001600160a01b0316855293830193918301916001016157be565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b038086168352808516602084015250606060408301526148e76060830184613ce2565b8281526040602082015260006133846040830184613ce2565b6001600160401b03848116825283166020820152606081016133846040830184613f0c565b8481526158776020820185613f0c565b60806040820152600061588d6080830185613ce2565b905082606083015295945050505050565b6000602082840312156158b057600080fd5b815161392081613ad9565b60208152600082516101008060208501526158da610120850183613ce2565b915060208501516158f660408601826001600160401b03169052565b5060408501516001600160a01b03811660608601525060608501516080850152608085015161593060a08601826001600160a01b03169052565b5060a0850151601f19808685030160c087015261594d8483613ce2565b935060c08701519150808685030160e087015261596a8483613ce2565b935060e08701519150808685030183870152506157f38382613ce2565b60006020828403121561599957600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b84811015614f8457601f19868403018952815160a081518186526159e382870182613ce2565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615a1f8382613ce2565b60809485015197909401969096525050988401989250908301906001016159bd565b602081526000610ad260208301846159a0565b60008282518085526020808601955060208260051b8401016020860160005b84811015614f8457601f19868403018952615a8f838351613ce2565b98840198925090830190600101615a73565b60008151808452602080850194506020840160005b8381101561487057815163ffffffff1687529582019590820190600101615ab6565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615b406101a0850183613ce2565b91506040870151605f198086850301610120870152615b5f8483613ce2565b935060608901519150615b7c838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615ba582826159a0565b9150508281036020840152615bba8186615a54565b905082810360408401526157f38185615aa156fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"getAllSourceChainConfig\",\"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\":\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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.ExecutionReportSingleChain[]\",\"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: "0x6101206040523480156200001257600080fd5b5060405162006b6938038062006b69833981016040819052620000359162000886565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0d565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d1576000828281518110620003915762000391620009c3565b60209081029190910181015190810151909150620003ba60066001600160401b038316620005d5565b50806001600160401b0316600003620003e65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200040f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200043d90620009d9565b9050600003620004a0578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004df565b8154600160a81b90046001600160401b0316600114620004df57604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620005155750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000544828262000a6a565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b90620005b990859062000b36565b60405180910390a25050505080600101905062000370565b5050565b6000620005e38383620005ec565b90505b92915050565b60008181526001830160205260408120546200063557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e6565b506000620005e6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067957620006796200063e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006aa57620006aa6200063e565b604052919050565b80516001600160401b0381168114620006ca57600080fd5b919050565b6001600160a01b0381168114620006e557600080fd5b50565b6000601f83601f840112620006fc57600080fd5b825160206001600160401b03808311156200071b576200071b6200063e565b8260051b6200072c8382016200067f565b93845286810183019383810190898611156200074757600080fd5b84890192505b858310156200087957825184811115620007675760008081fd5b89016080601f19828d038101821315620007815760008081fd5b6200078b62000654565b888401516200079a81620006cf565b81526040620007ab858201620006b2565b8a8301526060808601518015158114620007c55760008081fd5b83830152938501519389851115620007dd5760008081fd5b84860195508f603f870112620007f557600094508485fd5b8a8601519450898511156200080e576200080e6200063e565b6200081f8b858f880116016200067f565b93508484528f82868801011115620008375760008081fd5b60005b8581101562000857578681018301518582018d01528b016200083a565b5060009484018b0194909452509182015283525091840191908401906200074d565b9998505050505050505050565b60008060008385036101008112156200089e57600080fd5b6080811215620008ad57600080fd5b620008b762000654565b620008c286620006b2565b81526020860151620008d481620006cf565b60208201526040860151620008e981620006cf565b60408201526060860151620008fe81620006cf565b606082810191909152909450607f19820112156200091b57600080fd5b50604051606081016001600160401b0380821183831017156200094257620009426200063e565b81604052608087015191506200095882620006cf565b90825260a08601519063ffffffff821682146200097457600080fd5b81602084015260c087015191506200098c82620006cf565b6040830182905260e087015192945080831115620009a957600080fd5b5050620009b986828701620006e8565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ee57607f821691505b60208210810362000a0f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a65576000816000526020600020601f850160051c8101602086101562000a405750805b601f850160051c820191505b8181101562000a615782815560010162000a4c565b5050505b505050565b81516001600160401b0381111562000a865762000a866200063e565b62000a9e8162000a978454620009d9565b8462000a15565b602080601f83116001811462000ad6576000841562000abd5750858301515b600019600386901b1c1916600185901b17855562000a61565b600085815260208120601f198616915b8281101562000b075788860151825594840194600190910190840162000ae6565b508582101562000b265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8b81620009d9565b8060a089015260c0600183166000811462000baf576001811462000bcc5762000bfe565b60ff19841660c08b015260c083151560051b8b0101945062000bfe565b85600052602060002060005b8481101562000bf55781548c820185015290880190890162000bd8565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615ee662000c83600039600081816102470152612bfc0152600081816102180152612ec10152600081816101e9015281816105880152818161073a01526125bd0152600081816101ba01526127fc015260008181611ccc0152611cff0152615ee66000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80637437ff9f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ec578063f2fde38b1461050c578063f716f99f1461051f57600080fd5b8063c673e58414610488578063ccd37ba3146104a857600080fd5b806383503786116100b2578063835037861461044a57806385572ffb1461045f5780638da5cb5b1461046d57600080fd5b80637437ff9f146103b057806379ba50971461044257600080fd5b80633f4b04aa116101245780635e7bb008116101095780635e7bb0081461037757806360987c201461038a5780636f9e320f1461039d57600080fd5b80633f4b04aa1461033c5780635e36480c1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613e40565b610532565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190613fae565b61018461032436600461405e565b610546565b610184610337366004614110565b610a4d565b600b546040516001600160401b0390911681526020016102c4565b61036a610365366004614163565b610ab6565b6040516102c491906141c0565b610184610385366004614729565b610b0b565b61018461039836600461496d565b610d9a565b6101846103ab366004614a01565b61107a565b61040c604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b61018461108b565b61045261113c565b6040516102c49190614ab7565b61018461016c366004614b1b565b6000546040516001600160a01b0390911681526020016102c4565b61049b610496366004614b66565b6112f3565b6040516102c49190614bc6565b6104de6104b6366004614c3b565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6104ff6104fa366004614c65565b611451565b6040516102c49190614c80565b61018461051a366004614c93565b61155d565b61018461052d366004614d18565b61156e565b61053a6115b0565b6105438161160c565b50565b60006105548789018961506d565b602081015151909150156105f157602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c09330939091906004016152a2565b60006040518083038186803b1580156105d857600080fd5b505afa1580156105ec573d6000803e3d6000fd5b505050505b8051515115158061060757508051602001515115155b156106d357600b5460208a0135906001600160401b03808316911610156106ab57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106749291016153ef565b600060405180830381600087803b15801561068e57600080fd5b505af11580156106a2573d6000803e3d6000fd5b505050506106d1565b8160200151516000036106d157604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098e576000826020015182815181106106fb576106fb61531d565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a59190615402565b156107d357604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107de8261187d565b9050806001016040516107f19190615453565b60405180910390208360200151805190602001201461082e5782602001518160010160405163b80d8fa960e01b81526004016107ca929190615546565b60408301518154600160a81b90046001600160401b03908116911614158061086f575082606001516001600160401b031683604001516001600160401b0316115b156108b457825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107ca565b6080830151806108d75760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561092f5783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107ca565b606084015161093f906001615581565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d6565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c69290916155a8565b60405180910390a1610a4260008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92506118c9915050565b505050505050505050565b610a8d610a5c828401846155cd565b6040805160008082526020820190925290610a87565b6060815260200190600190039081610a725790505b50611bc2565b604080516000808252602082019092529050610ab06001858585858660006118c9565b50505050565b6000610ac460016004615601565b6002610ad160808561562a565b6001600160401b0316610ae49190615650565b610aee8585611c84565b901c166003811115610b0257610b02614196565b90505b92915050565b610b13611cc9565b815181518114610b36576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d8a576000848281518110610b5557610b5561531d565b60200260200101519050600081602001515190506000858481518110610b7d57610b7d61531d565b6020026020010151905080518214610ba8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d7b576000828281518110610bc757610bc761531d565b6020026020010151600001519050600085602001518381518110610bed57610bed61531d565b6020026020010151905081600014610c41578060800151821015610c41578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107ca565b838381518110610c5357610c5361531d565b602002602001015160200151518160a001515114610ca057805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107ca565b60005b8160a0015151811015610d6d576000858581518110610cc457610cc461531d565b6020026020010151602001518281518110610ce157610ce161531d565b602002602001015163ffffffff16905080600014610d645760008360a001518381518110610d1157610d1161531d565b60200260200101516040015163ffffffff16905080821015610d62578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107ca565b505b50600101610ca3565b505050806001019050610bab565b50505050806001019050610b39565b50610d958383611bc2565b505050565b333014610dba576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610df7565b6040805180820190915260008082526020820152815260200190600190039081610dd05790505b5060a08701515190915015610e2d57610e2a8660a001518760200151886060015189600001516020015189898989611d31565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e68929101613fae565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f43576040516308d450a160e01b81526001600160a01b038216906308d450a190610ec9908590600401615708565b600060405180830381600087803b158015610ee357600080fd5b505af1925050508015610ef4575060015b610f43573d808015610f22576040519150601f19603f3d011682016040523d82523d6000602084013e610f27565b606091505b50806040516309c2532560e01b81526004016107ca9190613fae565b604088015151158015610f5857506080880151155b80610f6f575060608801516001600160a01b03163b155b80610f9657506060880151610f94906001600160a01b03166385572ffb60e01b611ee2565b155b15610fa357505050611073565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392611001928992611388929160040161571b565b6000604051808303816000875af1158015611020573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110489190810190615757565b50915091508161106d57806040516302a35ba360e21b81526004016107ca9190613fae565b50505050505b5050505050565b6110826115b0565b61054381611efe565b6001546001600160a01b031633146110e55760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107ca565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6060600061114a6006611fdd565b6001600160401b0381111561116157611161613c82565b6040519080825280602002602001820160405280156111b257816020015b604080516080810182526000808252602080830182905292820152606080820152825260001990920191018161117f5790505b50905060005b6111c26006611fdd565b8110156112ed57600860006111d8600684611fe7565b6001600160401b0390811682526020808301939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151595820195909552600160a81b909404909116918301919091526001810180546060840191906112469061541f565b80601f01602080910402602001604051908101604052809291908181526020018280546112729061541f565b80156112bf5780601f10611294576101008083540402835291602001916112bf565b820191906000526020600020905b8154815290600101906020018083116112a257829003601f168201915b5050505050815250508282815181106112da576112da61531d565b60209081029190910101526001016111b8565b50919050565b6113366040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c0820152948552918201805484518184028101840190955280855292938583019390928301828280156113df57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113c1575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561144157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611423575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916114dd9061541f565b80601f01602080910402602001604051908101604052809291908181526020018280546115099061541f565b80156114415780601f1061152b57610100808354040283529160200191611441565b820191906000526020600020905b81548152906001019060200180831161153957505050919092525091949350505050565b6115656115b0565b61054381611ff3565b6115766115b0565b60005b81518110156115ac576115a48282815181106115975761159761531d565b602002602001015161209c565b600101611579565b5050565b6000546001600160a01b0316331461160a5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107ca565b565b60005b81518110156115ac57600082828151811061162c5761162c61531d565b6020026020010151905060008160200151905061165c816001600160401b031660066123c690919063ffffffff16565b50806001600160401b03166000036116875760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116af576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546116db9061541f565b905060000361173d57815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a161177a565b8154600160a81b90046001600160401b031660011461177a57604051632105803760e11b81526001600160401b03841660048201526024016107ca565b805115806117af5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156117cd576040516342bcdf7f60e11b815260040160405180910390fd5b600182016117db828261583c565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906118669085906158fb565b60405180910390a25050505080600101905061160f565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610b055760405163ed053c5960e01b81526001600160401b03841660048201526024016107ca565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119288760a4615949565b9050826060015115611970578451611941906020615650565b865161194e906020615650565b6119599060a0615949565b6119639190615949565b61196d9082615949565b90505b36811461199957604051638e1192e160e01b8152600481018290523660248201526044016107ca565b50815181146119c85781516040516324f7d61360e21b81526004810191909152602481018290526044016107ca565b6119d0611cc9565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611a1e57611a1e614196565b6002811115611a2f57611a2f614196565b9052509050600281602001516002811115611a4c57611a4c614196565b148015611aa05750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611a8857611a8861531d565b6000918252602090912001546001600160a01b031633145b611abd57604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611b6d576020820151611ad890600161595c565b60ff16855114611afb576040516371253a2560e01b815260040160405180910390fd5b8351855114611b1d5760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611b2f929190615975565b604051908190038120611b46918b90602001615985565b604051602081830303815290604052805190602001209050611b6b8a828888886123d2565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611be35760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611c26565b604080518082019091526000815260606020820152815260200190600190039081611bfe5790505b50905060005b845181101561107357611c7c858281518110611c4a57611c4a61531d565b602002602001015184611c7657858381518110611c6957611c6961531d565b602002602001015161258f565b8361258f565b600101611c2c565b6001600160401b038216600090815260096020526040812081611ca8608085615999565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461160a57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107ca565b606088516001600160401b03811115611d4c57611d4c613c82565b604051908082528060200260200182016040528015611d9157816020015b6040805180820190915260008082526020820152815260200190600190039081611d6a5790505b509050811560005b8a51811015611ed45781611e3157848482818110611db957611db961531d565b9050602002016020810190611dce91906159bf565b63ffffffff1615611e3157848482818110611deb57611deb61531d565b9050602002016020810190611e0091906159bf565b8b8281518110611e1257611e1261531d565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611eaf8b8281518110611e4657611e4661531d565b60200260200101518b8b8b8b8b87818110611e6357611e6361531d565b9050602002810190611e7591906159da565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e8692505050565b838281518110611ec157611ec161531d565b6020908102919091010152600101611d99565b505098975050505050505050565b6000611eed83613166565b8015610b025750610b0283836131b1565b80516001600160a01b0316611f26576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b6000610b05825490565b6000610b028383613253565b336001600160a01b0382160361204b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107ca565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036120c7576000604051631b3fab5160e11b81526004016107ca9190615a20565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003612118576060840151600182018054911515620100000262ff000019909216919091179055612154565b6060840151600182015460ff6201000090910416151590151514612154576040516321fd80df60e21b815260ff841660048201526024016107ca565b60a084015180516101001015612180576001604051631b3fab5160e11b81526004016107ca9190615a20565b80516000036121a5576005604051631b3fab5160e11b81526004016107ca9190615a20565b61220b848460030180548060200260200160405190810160405280929190818152602001828054801561220157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116121e3575b505050505061327d565b84606001511561233b576122798484600201805480602002602001604051908101604052809291908181526020018280548015612201576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116121e357505050505061327d565b6080850151805161010010156122a5576002604051631b3fab5160e11b81526004016107ca9190615a20565b60408601516122b5906003615a3a565b60ff168151116122db576003604051631b3fab5160e11b81526004016107ca9190615a20565b815181511015612301576001604051631b3fab5160e11b81526004016107ca9190615a20565b805160018401805461ff00191661010060ff84160217905561232c9060028601906020840190613c08565b50612339858260016132e6565b505b612347848260026132e6565b805161235c9060038501906020840190613c08565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936123b59389939260028a01929190615a56565b60405180910390a161107384613441565b6000610b028383613498565b8251600090815b818110156125855760006001888684602081106123f8576123f861531d565b61240591901a601b61595c565b8985815181106124175761241761531d565b60200260200101518986815181106124315761243161531d565b60200260200101516040516000815260200160405260405161246f949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612491573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156124f2576124f2614196565b600281111561250357612503614196565b905250905060018160200151600281111561252057612520614196565b1461253e57604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561256857604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506123d9565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa15801561260c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126309190615402565b156126a157801561265f57604051637edeb53960e11b81526001600160401b03831660048201526024016107ca565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60006126ac8361187d565b60010180546126ba9061541f565b80601f01602080910402602001604051908101604052809291908181526020018280546126e69061541f565b80156127335780601f1061270857610100808354040283529160200191612733565b820191906000526020600020905b81548152906001019060200180831161271657829003601f168201915b505050602088015151929350505060008190036127625760405162bf199760e01b815260040160405180910390fd5b8560400151518114612787576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156127a1576127a1613c82565b6040519080825280602002602001820160405280156127ca578160200160208202803683370190505b50905060005b8281101561296e576000886020015182815181106127f0576127f061531d565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146128675780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107ca565b866001600160401b03168160000151602001516001600160401b0316146128bb57805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107ca565b612948817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f836000015160200151846000015160400151898051906020012060405160200161292d94939291909384526001600160401b03928316602085015291166040830152606082015260800190565b604051602081830303815290604052805190602001206134e7565b83838151811061295a5761295a61531d565b6020908102919091010152506001016127d0565b50600061298586838a606001518b608001516135ef565b9050806000036129b357604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107ca565b60005b83811015610a425760005a905060008a6020015183815181106129db576129db61531d565b6020026020010151905060006129f98a836000015160600151610ab6565b90506000816003811115612a0f57612a0f614196565b1480612a2c57506003816003811115612a2a57612a2a614196565b145b612a8257815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612e7e565b60608915612b61578b8581518110612a9c57612a9c61531d565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612aca8842615601565b1190508080612aea57506003836003811115612ae857612ae8614196565b145b612b12576040516354e7e43160e11b81526001600160401b038d1660048201526024016107ca565b8c8681518110612b2457612b2461531d565b602002602001015160000151600014612b5b578c8681518110612b4957612b4961531d565b60209081029190910101515160808501525b50612bcd565b6000826003811115612b7557612b75614196565b14612bcd57825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612e7e565b8251608001516001600160401b031615612ca6576000826003811115612bf557612bf5614196565b03612ca6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612c5693929190615b08565b6020604051808303816000875af1158015612c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c999190615402565b612ca65750505050612e7e565b60008d604001518681518110612cbe57612cbe61531d565b6020026020010151905080518460a001515114612d0857835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107ca565b612d1c8c856000015160600151600161362c565b600080612d2a8684866136d1565b91509150612d418e8760000151606001518461362c565b8c15612d98576003826003811115612d5b57612d5b614196565b03612d98576000856003811115612d7457612d74614196565b14612d9857855151604051632b11b8d960e01b81526107ca91908390600401615b34565b6002826003811115612dac57612dac614196565b14612df1576003826003811115612dc557612dc5614196565b14612df1578d866000015160600151836040516349362d1f60e11b81526004016107ca93929190615b4d565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612e4957612e4961531d565b602002602001015186865a612e5e908f615601565b604051612e6e9493929190615b72565b60405180910390a4505050505050505b6001016129b6565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2e9190615ba9565b90506001600160a01b0381161580612f5d5750612f5b6001600160a01b03821663aff2afbf60e01b611ee2565b155b15612f865760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107ca565b600080612f9e88858c6040015163ffffffff16613785565b9150915060008060006130516040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b81525060405160240161301b9190615bc6565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287866113886084613868565b92509250925082613077578160405163e1cd550960e01b81526004016107ca9190613fae565b81516020146130a6578151604051631e3be00960e21b81526020600482015260248101919091526044016107ca565b6000828060200190518101906130bc9190615c92565b9050866001600160a01b03168c6001600160a01b0316146131385760006130ed8d8a6130e8868a615601565b613785565b509050868110806131075750816131048883615601565b14155b156131365760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107ca565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613179826301ffc9a760e01b6131b1565b8015610b0557506131aa827fffffffff000000000000000000000000000000000000000000000000000000006131b1565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d9150600051905082801561323c575060208210155b80156132485750600081115b979650505050505050565b600082600001828154811061326a5761326a61531d565b9060005260206000200154905092915050565b60005b8151811015610d955760ff8316600090815260036020526040812083519091908490849081106132b2576132b261531d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613280565b60005b8251811015610ab05760008382815181106133065761330661531d565b602002602001015190506000600281111561332357613323614196565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561336257613362614196565b14613383576004604051631b3fab5160e11b81526004016107ca9190615a20565b6001600160a01b0381166133aa5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133d0576133d0614196565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561342d5761342d614196565b0217905550905050508060010190506132e9565b60ff81166105435760ff8082166000908152600260205260409020600101546201000090041661348457604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b60008181526001830160205260408120546134df57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b05565b506000610b05565b81518051606080850151908301516080808701519401516040516000958695889561354b95919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a0015160405160200161358e9190615d4c565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806135fd858585613942565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b6000600261363b60808561562a565b6001600160401b031661364e9190615650565b9050600061365c8585611c84565b90508161366b60016004615601565b901b19168183600381111561368257613682614196565b6001600160401b03871660009081526009602052604081209190921b929092179182916136b0608088615999565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906136fe90889088908890600401615de3565b600060405180830381600087803b15801561371857600080fd5b505af1925050508015613729575060015b613768573d808015613757576040519150601f19603f3d011682016040523d82523d6000602084013e61375c565b606091505b5060039250905061377d565b50506040805160208101909152600081526002905b935093915050565b60008060008060006137e6886040516024016137b091906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288886113886084613868565b9250925092508261380c578160405163e1cd550960e01b81526004016107ca9190613fae565b602082511461383b578151604051631e3be00960e21b81526020600482015260248101919091526044016107ca565b8180602001905181019061384f9190615c92565b6138598288615601565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561388a5761388a613c82565b6040519080825280601f01601f1916602001820160405280156138b4576020820181803683370190505b509150863b6138ce5763030ed58f60e21b60005260046000fd5b5a858110156138e857632be8ca8b60e21b60005260046000fd5b8590036040810481038710613908576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d8481111561392b5750835b808352806000602085013e50955095509592505050565b825182516000919081830361396a57604051630469ac9960e21b815260040160405180910390fd5b610101821180159061397e57506101018111155b61399b576040516309bde33960e01b815260040160405180910390fd5b600019828201016101008111156139c5576040516309bde33960e01b815260040160405180910390fd5b806000036139f257866000815181106139e0576139e061531d565b60200260200101519350505050613bc0565b6000816001600160401b03811115613a0c57613a0c613c82565b604051908082528060200260200182016040528015613a35578160200160208202803683370190505b50905060008080805b85811015613b5f5760006001821b8b811603613a995788851015613a82578c5160018601958e918110613a7357613a7361531d565b60200260200101519050613abb565b8551600185019487918110613a7357613a7361531d565b8b5160018401938d918110613ab057613ab061531d565b602002602001015190505b600089861015613aeb578d5160018701968f918110613adc57613adc61531d565b60200260200101519050613b0d565b8651600186019588918110613b0257613b0261531d565b602002602001015190505b82851115613b2e576040516309bde33960e01b815260040160405180910390fd5b613b388282613bc7565b878481518110613b4a57613b4a61531d565b60209081029190910101525050600101613a3e565b506001850382148015613b7157508683145b8015613b7c57508581145b613b99576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613bae57613bae61531d565b60200260200101519750505050505050505b9392505050565b6000818310613bdf57613bda8284613be5565b610b02565b610b0283835b6040805160016020820152908101839052606081018290526000906080016135d1565b828054828255906000526020600020908101928215613c5d579160200282015b82811115613c5d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c28565b50613c69929150613c6d565b5090565b5b80821115613c695760008155600101613c6e565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613cba57613cba613c82565b60405290565b60405160a081016001600160401b0381118282101715613cba57613cba613c82565b60405160c081016001600160401b0381118282101715613cba57613cba613c82565b604080519081016001600160401b0381118282101715613cba57613cba613c82565b604051601f8201601f191681016001600160401b0381118282101715613d4e57613d4e613c82565b604052919050565b60006001600160401b03821115613d6f57613d6f613c82565b5060051b60200190565b6001600160a01b038116811461054357600080fd5b80356001600160401b0381168114613da557600080fd5b919050565b801515811461054357600080fd5b8035613da581613daa565b60006001600160401b03821115613ddc57613ddc613c82565b50601f01601f191660200190565b600082601f830112613dfb57600080fd5b8135613e0e613e0982613dc3565b613d26565b818152846020838601011115613e2357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613e5357600080fd5b82356001600160401b0380821115613e6a57600080fd5b818501915085601f830112613e7e57600080fd5b8135613e8c613e0982613d56565b81815260059190911b83018401908481019088831115613eab57600080fd5b8585015b83811015613f5157803585811115613ec75760008081fd5b86016080818c03601f1901811315613edf5760008081fd5b613ee7613c98565b89830135613ef481613d79565b81526040613f03848201613d8e565b8b830152606080850135613f1681613daa565b83830152928401359289841115613f2f57600091508182fd5b613f3d8f8d86880101613dea565b908301525085525050918601918601613eaf565b5098975050505050505050565b60005b83811015613f79578181015183820152602001613f61565b50506000910152565b60008151808452613f9a816020860160208601613f5e565b601f01601f19169290920160200192915050565b602081526000610b026020830184613f82565b8060608101831015610b0557600080fd5b60008083601f840112613fe457600080fd5b5081356001600160401b03811115613ffb57600080fd5b60208301915083602082850101111561401357600080fd5b9250929050565b60008083601f84011261402c57600080fd5b5081356001600160401b0381111561404357600080fd5b6020830191508360208260051b850101111561401357600080fd5b60008060008060008060008060e0898b03121561407a57600080fd5b6140848a8a613fc1565b975060608901356001600160401b03808211156140a057600080fd5b6140ac8c838d01613fd2565b909950975060808b01359150808211156140c557600080fd5b6140d18c838d0161401a565b909750955060a08b01359150808211156140ea57600080fd5b506140f78b828c0161401a565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561412557600080fd5b61412f8585613fc1565b925060608401356001600160401b0381111561414a57600080fd5b61415686828701613fd2565b9497909650939450505050565b6000806040838503121561417657600080fd5b61417f83613d8e565b915061418d60208401613d8e565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106141bc576141bc614196565b9052565b60208101610b0582846141ac565b600060a082840312156141e057600080fd5b6141e8613cc0565b9050813581526141fa60208301613d8e565b602082015261420b60408301613d8e565b604082015261421c60608301613d8e565b606082015261422d60808301613d8e565b608082015292915050565b8035613da581613d79565b803563ffffffff81168114613da557600080fd5b600082601f83011261426857600080fd5b81356020614278613e0983613d56565b82815260059290921b8401810191818101908684111561429757600080fd5b8286015b848110156143675780356001600160401b03808211156142bb5760008081fd5b9088019060a0828b03601f19018113156142d55760008081fd5b6142dd613cc0565b87840135838111156142ef5760008081fd5b6142fd8d8a83880101613dea565b82525060408085013561430f81613d79565b828a01526060614320868201614243565b8284015260809150818601358581111561433a5760008081fd5b6143488f8c838a0101613dea565b918401919091525091909301359083015250835291830191830161429b565b509695505050505050565b6000610140828403121561438557600080fd5b61438d613ce2565b905061439983836141ce565b815260a08201356001600160401b03808211156143b557600080fd5b6143c185838601613dea565b602084015260c08401359150808211156143da57600080fd5b6143e685838601613dea565b60408401526143f760e08501614238565b6060840152610100840135608084015261012084013591508082111561441c57600080fd5b5061442984828501614257565b60a08301525092915050565b600082601f83011261444657600080fd5b81356020614456613e0983613d56565b82815260059290921b8401810191818101908684111561447557600080fd5b8286015b848110156143675780356001600160401b038111156144985760008081fd5b6144a68986838b0101614372565b845250918301918301614479565b600082601f8301126144c557600080fd5b813560206144d5613e0983613d56565b82815260059290921b840181019181810190868411156144f457600080fd5b8286015b848110156143675780356001600160401b038082111561451757600080fd5b818901915089603f83011261452b57600080fd5b8582013561453b613e0982613d56565b81815260059190911b830160400190878101908c83111561455b57600080fd5b604085015b838110156145945780358581111561457757600080fd5b6145868f6040838a0101613dea565b845250918901918901614560565b508752505050928401925083016144f8565b600082601f8301126145b757600080fd5b813560206145c7613e0983613d56565b8083825260208201915060208460051b8701019350868411156145e957600080fd5b602086015b8481101561436757803583529183019183016145ee565b600082601f83011261461657600080fd5b81356020614626613e0983613d56565b82815260059290921b8401810191818101908684111561464557600080fd5b8286015b848110156143675780356001600160401b03808211156146695760008081fd5b9088019060a0828b03601f19018113156146835760008081fd5b61468b613cc0565b614696888501613d8e565b8152604080850135848111156146ac5760008081fd5b6146ba8e8b83890101614435565b8a84015250606080860135858111156146d35760008081fd5b6146e18f8c838a01016144b4565b83850152506080915081860135858111156146fc5760008081fd5b61470a8f8c838a01016145a6565b9184019190915250919093013590830152508352918301918301614649565b6000806040838503121561473c57600080fd5b6001600160401b038335111561475157600080fd5b61475e8484358501614605565b91506001600160401b036020840135111561477857600080fd5b6020830135830184601f82011261478e57600080fd5b61479b613e098235613d56565b81358082526020808301929160051b8401018710156147b957600080fd5b602083015b6020843560051b85010181101561495f576001600160401b03813511156147e457600080fd5b87603f8235860101126147f657600080fd5b614809613e096020833587010135613d56565b81358501602081810135808452908301929160059190911b016040018a101561483157600080fd5b604083358701015b83358701602081013560051b0160400181101561494f576001600160401b038135111561486557600080fd5b833587018135016040818d03603f1901121561488057600080fd5b614888613d04565b604082013581526001600160401b03606083013511156148a757600080fd5b8c605f6060840135840101126148bc57600080fd5b60406060830135830101356148d3613e0982613d56565b808282526020820191508f60608460051b60608801358801010111156148f857600080fd5b6060808601358601015b60608460051b60608801358801010181101561492f5761492181614243565b835260209283019201614902565b508060208501525050508085525050602083019250602081019050614839565b50845250602092830192016147be565b508093505050509250929050565b60008060008060006060868803121561498557600080fd5b85356001600160401b038082111561499c57600080fd5b6149a889838a01614372565b965060208801359150808211156149be57600080fd5b6149ca89838a0161401a565b909650945060408801359150808211156149e357600080fd5b506149f08882890161401a565b969995985093965092949392505050565b600060608284031215614a1357600080fd5b604051606081018181106001600160401b0382111715614a3557614a35613c82565b6040528235614a4381613d79565b8152614a5160208401614243565b60208201526040830135614a6481613d79565b60408201529392505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136246080850182613f82565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015614b0e57603f19888603018452614afc858351614a70565b94509285019290850190600101614ae0565b5092979650505050505050565b600060208284031215614b2d57600080fd5b81356001600160401b03811115614b4357600080fd5b820160a08185031215613bc057600080fd5b803560ff81168114613da557600080fd5b600060208284031215614b7857600080fd5b610b0282614b55565b60008151808452602080850194506020840160005b83811015614bbb5781516001600160a01b031687529582019590820190600101614b96565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c1560e0840182614b81565b90506040840151601f198483030160c0850152614c328282614b81565b95945050505050565b60008060408385031215614c4e57600080fd5b614c5783613d8e565b946020939093013593505050565b600060208284031215614c7757600080fd5b610b0282613d8e565b602081526000610b026020830184614a70565b600060208284031215614ca557600080fd5b8135613bc081613d79565b600082601f830112614cc157600080fd5b81356020614cd1613e0983613d56565b8083825260208201915060208460051b870101935086841115614cf357600080fd5b602086015b84811015614367578035614d0b81613d79565b8352918301918301614cf8565b60006020808385031215614d2b57600080fd5b82356001600160401b0380821115614d4257600080fd5b818501915085601f830112614d5657600080fd5b8135614d64613e0982613d56565b81815260059190911b83018401908481019088831115614d8357600080fd5b8585015b83811015613f5157803585811115614d9e57600080fd5b860160c0818c03601f19011215614db55760008081fd5b614dbd613ce2565b8882013581526040614dd0818401614b55565b8a8301526060614de1818501614b55565b8284015260809150614df4828501613db8565b9083015260a08381013589811115614e0c5760008081fd5b614e1a8f8d83880101614cb0565b838501525060c0840135915088821115614e345760008081fd5b614e428e8c84870101614cb0565b9083015250845250918601918601614d87565b80356001600160e01b0381168114613da557600080fd5b600082601f830112614e7d57600080fd5b81356020614e8d613e0983613d56565b82815260069290921b84018101918181019086841115614eac57600080fd5b8286015b848110156143675760408189031215614ec95760008081fd5b614ed1613d04565b614eda82613d8e565b8152614ee7858301614e55565b81860152835291830191604001614eb0565b600082601f830112614f0a57600080fd5b81356020614f1a613e0983613d56565b82815260059290921b84018101918181019086841115614f3957600080fd5b8286015b848110156143675780356001600160401b0380821115614f5d5760008081fd5b9088019060a0828b03601f1901811315614f775760008081fd5b614f7f613cc0565b614f8a888501613d8e565b815260408085013584811115614fa05760008081fd5b614fae8e8b83890101613dea565b8a8401525060609350614fc2848601613d8e565b908201526080614fd3858201613d8e565b93820193909352920135908201528352918301918301614f3d565b600082601f830112614fff57600080fd5b8135602061500f613e0983613d56565b82815260069290921b8401810191818101908684111561502e57600080fd5b8286015b84811015614367576040818903121561504b5760008081fd5b615053613d04565b813581528482013585820152835291830191604001615032565b6000602080838503121561508057600080fd5b82356001600160401b038082111561509757600080fd5b90840190608082870312156150ab57600080fd5b6150b3613c98565b8235828111156150c257600080fd5b830160408189038113156150d557600080fd5b6150dd613d04565b8235858111156150ec57600080fd5b8301601f81018b136150fd57600080fd5b803561510b613e0982613d56565b81815260069190911b8201890190898101908d83111561512a57600080fd5b928a01925b8284101561517a5785848f0312156151475760008081fd5b61514f613d04565b843561515a81613d79565b8152615167858d01614e55565b818d0152825292850192908a019061512f565b84525050508287013591508482111561519257600080fd5b61519e8a838501614e6c565b818801528352505082840135828111156151b757600080fd5b6151c388828601614ef9565b858301525060408301359350818411156151dc57600080fd5b6151e887858501614fee565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561529557601f19868403018952815160a06001600160401b0380835116865286830151828888015261525983880182613f82565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615221565b5090979650505050505050565b6001600160a01b0385168152600060206080818401526152c56080840187615204565b83810360408581019190915286518083528388019284019060005b81811015615305578451805184528601518684015293850193918301916001016152e0565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561538a57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615353565b50508583015187820388850152805180835290840192506000918401905b808310156153e357835180516001600160401b031683528501516001600160e01b0316858301529284019260019290920191908501906153a8565b50979650505050505050565b602081526000610b026020830184615333565b60006020828403121561541457600080fd5b8151613bc081613daa565b600181811c9082168061543357607f821691505b6020821081036112ed57634e487b7160e01b600052602260045260246000fd5b60008083546154618161541f565b60018281168015615479576001811461548e576154bd565b60ff19841687528215158302870194506154bd565b8760005260208060002060005b858110156154b45781548a82015290840190820161549b565b50505082870194505b50929695505050505050565b600081546154d68161541f565b8085526020600183811680156154f3576001811461550d5761553b565b60ff1985168884015283151560051b88018301955061553b565b866000528260002060005b858110156155335781548a8201860152908301908401615518565b890184019650505b505050505092915050565b6040815260006155596040830185613f82565b8281036020840152614c3281856154c9565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156155a1576155a161556b565b5092915050565b6040815260006155bb6040830185615204565b8281036020840152614c328185615333565b6000602082840312156155df57600080fd5b81356001600160401b038111156155f557600080fd5b61362484828501614605565b81810381811115610b0557610b0561556b565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061564457615644615614565b92169190910692915050565b8082028115828204841417610b0557610b0561556b565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261569a60a0870182613f82565b9050606085015186820360608801526156b38282613f82565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156153e357835180516001600160a01b03168352860151868301529285019260019290920191908401906156d6565b602081526000610b026020830184615667565b60808152600061572e6080830187615667565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561576c57600080fd5b835161577781613daa565b60208501519093506001600160401b0381111561579357600080fd5b8401601f810186136157a457600080fd5b80516157b2613e0982613dc3565b8181528760208385010111156157c757600080fd5b6157d8826020830160208601613f5e565b809450505050604084015190509250925092565b601f821115610d95576000816000526020600020601f850160051c810160208610156158155750805b601f850160051c820191505b8181101561583457828155600101615821565b505050505050565b81516001600160401b0381111561585557615855613c82565b61586981615863845461541f565b846157ec565b602080601f83116001811461589e57600084156158865750858301515b600019600386901b1c1916600185901b178555615834565b600085815260208120601f198616915b828110156158cd578886015182559484019460019091019084016158ae565b50858210156158eb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610b0260a08301600185016154c9565b80820180821115610b0557610b0561556b565b60ff8181168382160190811115610b0557610b0561556b565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b03808416806159b3576159b3615614565b92169190910492915050565b6000602082840312156159d157600080fd5b610b0282614243565b6000808335601e198436030181126159f157600080fd5b8301803591506001600160401b03821115615a0b57600080fd5b60200191503681900382131561401357600080fd5b6020810160068310615a3457615a34614196565b91905290565b60ff81811683821602908116908181146155a1576155a161556b565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615aae5784546001600160a01b031683526001948501949284019201615a89565b50508481036060860152865180825290820192508187019060005b81811015615aee5782516001600160a01b031685529383019391830191600101615ac9565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614c326060830184613f82565b8281526040602082015260006136246040830184613f82565b6001600160401b038481168252831660208201526060810161362460408301846141ac565b848152615b8260208201856141ac565b608060408201526000615b986080830185613f82565b905082606083015295945050505050565b600060208284031215615bbb57600080fd5b8151613bc081613d79565b6020815260008251610100806020850152615be5610120850183613f82565b91506020850151615c0160408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615c3b60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615c588483613f82565b935060c08701519150808685030160e0870152615c758483613f82565b935060e0870151915080868503018387015250615afe8382613f82565b600060208284031215615ca457600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561529557601f19868403018952815160a08151818652615cee82870182613f82565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615d2a8382613f82565b6080948501519790940196909652505098840198925090830190600101615cc8565b602081526000610b026020830184615cab565b60008282518085526020808601955060208260051b8401016020860160005b8481101561529557601f19868403018952615d9a838351613f82565b98840198925090830190600101615d7e565b60008151808452602080850194506020840160005b83811015614bbb57815163ffffffff1687529582019590820190600101615dc1565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615e4b6101a0850183613f82565b91506040870151605f198086850301610120870152615e6a8483613f82565b935060608901519150615e87838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615eb08282615cab565b9150508281036020840152615ec58186615d5f565b90508281036040840152615afe8185615dac56fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.ABI @@ -314,6 +314,28 @@ func (_OffRamp *OffRampCallerSession) CcipReceive(arg0 ClientAny2EVMMessage) err return _OffRamp.Contract.CcipReceive(&_OffRamp.CallOpts, arg0) } +func (_OffRamp *OffRampCaller) GetAllSourceChainConfig(opts *bind.CallOpts) ([]OffRampSourceChainConfig, error) { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "getAllSourceChainConfig") + + if err != nil { + return *new([]OffRampSourceChainConfig), err + } + + out0 := *abi.ConvertType(out[0], new([]OffRampSourceChainConfig)).(*[]OffRampSourceChainConfig) + + return out0, err + +} + +func (_OffRamp *OffRampSession) GetAllSourceChainConfig() ([]OffRampSourceChainConfig, error) { + return _OffRamp.Contract.GetAllSourceChainConfig(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCallerSession) GetAllSourceChainConfig() ([]OffRampSourceChainConfig, error) { + return _OffRamp.Contract.GetAllSourceChainConfig(&_OffRamp.CallOpts) +} + func (_OffRamp *OffRampCaller) GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, error) { var out []interface{} err := _OffRamp.contract.Call(opts, &out, "getDynamicConfig") @@ -2457,6 +2479,8 @@ func (_OffRamp *OffRamp) Address() common.Address { type OffRampInterface interface { CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error + GetAllSourceChainConfig(opts *bind.CallOpts) ([]OffRampSourceChainConfig, error) + GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, error) GetExecutionState(opts *bind.CallOpts, sourceChainSelector uint64, sequenceNumber uint64) (uint8, 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 8b9f869a71..8a2b065494 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 @@ -23,7 +23,7 @@ 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 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 941b18b4e2aef977195fefba514e17c9475667e6f8513b18cabfb07ff90136ce +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 0b8c19d3dc18bae2859e7c8c4b52b97f6de1a849400cb713662cd9cedb22fdd4 onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 4f29f05261bdaf9b99e675c1169c0d5cba841b6dd7ca3a8997cc0d3cae7ba850 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin e7781d600c1bb7aa4620106af7f6e146a109b97f4cb6a7d06c9e15773340ecb2 From af170dcd300f30e5d9aa8ff33346814a94804475 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Tue, 1 Oct 2024 15:53:14 +0530 Subject: [PATCH 04/10] formatting Signed-off-by: 0xsuryansh --- contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol | 2 +- contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol b/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol index 84b4859aac..d84e23fe2f 100644 --- a/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol +++ b/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.24; +import {EnumerableSet} from "../../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/structs/EnumerableSet.sol"; import {Client} from "../../libraries/Client.sol"; import {Internal} from "../../libraries/Internal.sol"; import {OffRamp} from "../../offRamp/OffRamp.sol"; import {IgnoreContractSize} from "./IgnoreContractSize.sol"; -import {EnumerableSet} from "../../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/structs/EnumerableSet.sol"; contract OffRampHelper is OffRamp, IgnoreContractSize { using EnumerableSet for EnumerableSet.UintSet; 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 7eeb53ae1f..6b5797f58c 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -127,14 +127,10 @@ contract OffRamp_constructor is OffRampSetup { MultiOCR3Base.OCRConfig memory gotOCRConfig = s_offRamp.latestConfigDetails(uint8(Internal.OCRPluginType.Execution)); _assertOCRConfigEquality(expectedOCRConfig, gotOCRConfig); - OffRamp.SourceChainConfig[] memory actualSourceChainConfigs = s_offRamp.getAllSourceChainConfig(); + OffRamp.SourceChainConfig[] memory actualSourceChainConfigs = s_offRamp.getAllSourceChainConfig(); - _assertSourceChainConfigEquality( - actualSourceChainConfigs[0], expectedSourceChainConfig1 - ); - _assertSourceChainConfigEquality( - actualSourceChainConfigs[1], expectedSourceChainConfig2 - ); + _assertSourceChainConfigEquality(actualSourceChainConfigs[0], expectedSourceChainConfig1); + _assertSourceChainConfigEquality(actualSourceChainConfigs[1], expectedSourceChainConfig2); // OffRamp initial values assertEq("OffRamp 1.6.0-dev", s_offRamp.typeAndVersion()); From 0735802a21026cfe1997609f72b58771fc62ac36 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Tue, 1 Oct 2024 15:58:56 +0530 Subject: [PATCH 05/10] fix: comment Signed-off-by: 0xsuryansh --- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index ec7b9ba024..4a3ca2e752 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -158,7 +158,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // DYNAMIC CONFIG DynamicConfig internal s_dynamicConfig; - /// @notice Set of enables source chain selectors + /// @notice Set of source chain selectors EnumerableSet.UintSet internal s_sourceChainSelectors; /// @notice SourceChainConfig per chain From 094bdc51758e36eb3705355c618d90a49daf07a5 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Wed, 2 Oct 2024 20:53:11 +0530 Subject: [PATCH 06/10] adding chain selector return value Signed-off-by: 0xsuryansh --- contracts/gas-snapshots/ccip.gas-snapshot | 26 +++++++++---------- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 8 +++--- .../src/v0.8/ccip/test/offRamp/OffRamp.t.sol | 4 +-- .../ccip/generated/offramp/offramp.go | 19 +++++++------- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 5 files changed, 31 insertions(+), 28 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 22c0109430..184e2a2b91 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -610,7 +610,7 @@ OCR2Base_transmit:test_Transmit2SignersSuccess_gas() (gas: 51689) OCR2Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 23511) OCR2Base_transmit:test_UnauthorizedSigner_Revert() (gas: 39707) OCR2Base_transmit:test_WrongNumberOfSignatures_Revert() (gas: 20584) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5869456) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5915989) OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626169) OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166511) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16763) @@ -634,8 +634,8 @@ OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 64099) OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68173) OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291) OffRamp_commit:test_InvalidRootRevert() (gas: 63356) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6630247) -OffRamp_commit:test_NoConfig_Revert() (gas: 6213919) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6676780) +OffRamp_commit:test_NoConfig_Revert() (gas: 6260452) OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113042) OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121403) OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113063) @@ -649,23 +649,23 @@ OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125409) OffRamp_commit:test_Unhealthy_Revert() (gas: 58633) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206778) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) -OffRamp_constructor:test_Constructor_Success() (gas: 6175874) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 182772) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103307) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101201) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 228198) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101121) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101159) +OffRamp_constructor:test_Constructor_Success() (gas: 6221879) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 182841) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103375) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101269) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 228266) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101189) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101227) OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) OffRamp_execute:test_LargeBatch_Success() (gas: 3425675) OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372967) OffRamp_execute:test_MultipleReports_Success() (gas: 300913) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7039120) -OffRamp_execute:test_NoConfig_Revert() (gas: 6263595) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7085653) +OffRamp_execute:test_NoConfig_Revert() (gas: 6310128) OffRamp_execute:test_NonArray_Revert() (gas: 27562) OffRamp_execute:test_SingleReport_Success() (gas: 176332) OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148350) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7041869) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7088402) OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18511) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244057) diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 4a3ca2e752..49a085d7ff 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -926,12 +926,14 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { /// @notice Returns all source chain configs /// @return sourceChainConfigs The source chain configs corresponding to all the supported chain selectors - function getAllSourceChainConfig() external view returns (SourceChainConfig[] memory) { + function getAllSourceChainConfig() external view returns (uint64[] memory, SourceChainConfig[] memory) { SourceChainConfig[] memory sourceChainConfigs = new SourceChainConfig[](s_sourceChainSelectors.length()); + uint64[] memory sourceChainSelectors = new uint64[](s_sourceChainSelectors.length()); for (uint256 i = 0; i < s_sourceChainSelectors.length(); ++i) { - sourceChainConfigs[i] = s_sourceChainConfigs[uint64(s_sourceChainSelectors.at(i))]; + sourceChainSelectors[i] = uint64(s_sourceChainSelectors.at(i)); + sourceChainConfigs[i] = s_sourceChainConfigs[sourceChainSelectors[i]]; } - return sourceChainConfigs; + return (sourceChainSelectors, sourceChainConfigs); } /// @notice Updates source configs 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 6b5797f58c..d68308e528 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -127,7 +127,8 @@ contract OffRamp_constructor is OffRampSetup { MultiOCR3Base.OCRConfig memory gotOCRConfig = s_offRamp.latestConfigDetails(uint8(Internal.OCRPluginType.Execution)); _assertOCRConfigEquality(expectedOCRConfig, gotOCRConfig); - OffRamp.SourceChainConfig[] memory actualSourceChainConfigs = s_offRamp.getAllSourceChainConfig(); + (uint64[] memory actualSourceChainSelectors, OffRamp.SourceChainConfig[] memory actualSourceChainConfigs) = + s_offRamp.getAllSourceChainConfig(); _assertSourceChainConfigEquality(actualSourceChainConfigs[0], expectedSourceChainConfig1); _assertSourceChainConfigEquality(actualSourceChainConfigs[1], expectedSourceChainConfig2); @@ -137,7 +138,6 @@ contract OffRamp_constructor is OffRampSetup { assertEq(OWNER, s_offRamp.owner()); assertEq(0, s_offRamp.getLatestPriceSequenceNumber()); - uint256[] memory actualSourceChainSelectors = s_offRamp.getSourceChainSelectors(); // assertion for source chain selector for (uint256 i = 0; i < expectedSourceChainSelectors.length; i++) { assertEq(expectedSourceChainSelectors[i], actualSourceChainSelectors[i]); diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 6cfdad978d..6f79d8fdfd 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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"getAllSourceChainConfig\",\"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\":\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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.ExecutionReportSingleChain[]\",\"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: "0x6101206040523480156200001257600080fd5b5060405162006b6938038062006b69833981016040819052620000359162000886565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0d565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d1576000828281518110620003915762000391620009c3565b60209081029190910181015190810151909150620003ba60066001600160401b038316620005d5565b50806001600160401b0316600003620003e65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200040f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200043d90620009d9565b9050600003620004a0578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004df565b8154600160a81b90046001600160401b0316600114620004df57604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620005155750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000544828262000a6a565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b90620005b990859062000b36565b60405180910390a25050505080600101905062000370565b5050565b6000620005e38383620005ec565b90505b92915050565b60008181526001830160205260408120546200063557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e6565b506000620005e6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067957620006796200063e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006aa57620006aa6200063e565b604052919050565b80516001600160401b0381168114620006ca57600080fd5b919050565b6001600160a01b0381168114620006e557600080fd5b50565b6000601f83601f840112620006fc57600080fd5b825160206001600160401b03808311156200071b576200071b6200063e565b8260051b6200072c8382016200067f565b93845286810183019383810190898611156200074757600080fd5b84890192505b858310156200087957825184811115620007675760008081fd5b89016080601f19828d038101821315620007815760008081fd5b6200078b62000654565b888401516200079a81620006cf565b81526040620007ab858201620006b2565b8a8301526060808601518015158114620007c55760008081fd5b83830152938501519389851115620007dd5760008081fd5b84860195508f603f870112620007f557600094508485fd5b8a8601519450898511156200080e576200080e6200063e565b6200081f8b858f880116016200067f565b93508484528f82868801011115620008375760008081fd5b60005b8581101562000857578681018301518582018d01528b016200083a565b5060009484018b0194909452509182015283525091840191908401906200074d565b9998505050505050505050565b60008060008385036101008112156200089e57600080fd5b6080811215620008ad57600080fd5b620008b762000654565b620008c286620006b2565b81526020860151620008d481620006cf565b60208201526040860151620008e981620006cf565b60408201526060860151620008fe81620006cf565b606082810191909152909450607f19820112156200091b57600080fd5b50604051606081016001600160401b0380821183831017156200094257620009426200063e565b81604052608087015191506200095882620006cf565b90825260a08601519063ffffffff821682146200097457600080fd5b81602084015260c087015191506200098c82620006cf565b6040830182905260e087015192945080831115620009a957600080fd5b5050620009b986828701620006e8565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ee57607f821691505b60208210810362000a0f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a65576000816000526020600020601f850160051c8101602086101562000a405750805b601f850160051c820191505b8181101562000a615782815560010162000a4c565b5050505b505050565b81516001600160401b0381111562000a865762000a866200063e565b62000a9e8162000a978454620009d9565b8462000a15565b602080601f83116001811462000ad6576000841562000abd5750858301515b600019600386901b1c1916600185901b17855562000a61565b600085815260208120601f198616915b8281101562000b075788860151825594840194600190910190840162000ae6565b508582101562000b265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8b81620009d9565b8060a089015260c0600183166000811462000baf576001811462000bcc5762000bfe565b60ff19841660c08b015260c083151560051b8b0101945062000bfe565b85600052602060002060005b8481101562000bf55781548c820185015290880190890162000bd8565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615ee662000c83600039600081816102470152612bfc0152600081816102180152612ec10152600081816101e9015281816105880152818161073a01526125bd0152600081816101ba01526127fc015260008181611ccc0152611cff0152615ee66000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80637437ff9f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ec578063f2fde38b1461050c578063f716f99f1461051f57600080fd5b8063c673e58414610488578063ccd37ba3146104a857600080fd5b806383503786116100b2578063835037861461044a57806385572ffb1461045f5780638da5cb5b1461046d57600080fd5b80637437ff9f146103b057806379ba50971461044257600080fd5b80633f4b04aa116101245780635e7bb008116101095780635e7bb0081461037757806360987c201461038a5780636f9e320f1461039d57600080fd5b80633f4b04aa1461033c5780635e36480c1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613e40565b610532565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190613fae565b61018461032436600461405e565b610546565b610184610337366004614110565b610a4d565b600b546040516001600160401b0390911681526020016102c4565b61036a610365366004614163565b610ab6565b6040516102c491906141c0565b610184610385366004614729565b610b0b565b61018461039836600461496d565b610d9a565b6101846103ab366004614a01565b61107a565b61040c604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b61018461108b565b61045261113c565b6040516102c49190614ab7565b61018461016c366004614b1b565b6000546040516001600160a01b0390911681526020016102c4565b61049b610496366004614b66565b6112f3565b6040516102c49190614bc6565b6104de6104b6366004614c3b565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6104ff6104fa366004614c65565b611451565b6040516102c49190614c80565b61018461051a366004614c93565b61155d565b61018461052d366004614d18565b61156e565b61053a6115b0565b6105438161160c565b50565b60006105548789018961506d565b602081015151909150156105f157602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c09330939091906004016152a2565b60006040518083038186803b1580156105d857600080fd5b505afa1580156105ec573d6000803e3d6000fd5b505050505b8051515115158061060757508051602001515115155b156106d357600b5460208a0135906001600160401b03808316911610156106ab57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106749291016153ef565b600060405180830381600087803b15801561068e57600080fd5b505af11580156106a2573d6000803e3d6000fd5b505050506106d1565b8160200151516000036106d157604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098e576000826020015182815181106106fb576106fb61531d565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a59190615402565b156107d357604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107de8261187d565b9050806001016040516107f19190615453565b60405180910390208360200151805190602001201461082e5782602001518160010160405163b80d8fa960e01b81526004016107ca929190615546565b60408301518154600160a81b90046001600160401b03908116911614158061086f575082606001516001600160401b031683604001516001600160401b0316115b156108b457825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107ca565b6080830151806108d75760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561092f5783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107ca565b606084015161093f906001615581565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d6565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c69290916155a8565b60405180910390a1610a4260008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92506118c9915050565b505050505050505050565b610a8d610a5c828401846155cd565b6040805160008082526020820190925290610a87565b6060815260200190600190039081610a725790505b50611bc2565b604080516000808252602082019092529050610ab06001858585858660006118c9565b50505050565b6000610ac460016004615601565b6002610ad160808561562a565b6001600160401b0316610ae49190615650565b610aee8585611c84565b901c166003811115610b0257610b02614196565b90505b92915050565b610b13611cc9565b815181518114610b36576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d8a576000848281518110610b5557610b5561531d565b60200260200101519050600081602001515190506000858481518110610b7d57610b7d61531d565b6020026020010151905080518214610ba8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d7b576000828281518110610bc757610bc761531d565b6020026020010151600001519050600085602001518381518110610bed57610bed61531d565b6020026020010151905081600014610c41578060800151821015610c41578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107ca565b838381518110610c5357610c5361531d565b602002602001015160200151518160a001515114610ca057805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107ca565b60005b8160a0015151811015610d6d576000858581518110610cc457610cc461531d565b6020026020010151602001518281518110610ce157610ce161531d565b602002602001015163ffffffff16905080600014610d645760008360a001518381518110610d1157610d1161531d565b60200260200101516040015163ffffffff16905080821015610d62578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107ca565b505b50600101610ca3565b505050806001019050610bab565b50505050806001019050610b39565b50610d958383611bc2565b505050565b333014610dba576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610df7565b6040805180820190915260008082526020820152815260200190600190039081610dd05790505b5060a08701515190915015610e2d57610e2a8660a001518760200151886060015189600001516020015189898989611d31565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e68929101613fae565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f43576040516308d450a160e01b81526001600160a01b038216906308d450a190610ec9908590600401615708565b600060405180830381600087803b158015610ee357600080fd5b505af1925050508015610ef4575060015b610f43573d808015610f22576040519150601f19603f3d011682016040523d82523d6000602084013e610f27565b606091505b50806040516309c2532560e01b81526004016107ca9190613fae565b604088015151158015610f5857506080880151155b80610f6f575060608801516001600160a01b03163b155b80610f9657506060880151610f94906001600160a01b03166385572ffb60e01b611ee2565b155b15610fa357505050611073565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392611001928992611388929160040161571b565b6000604051808303816000875af1158015611020573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110489190810190615757565b50915091508161106d57806040516302a35ba360e21b81526004016107ca9190613fae565b50505050505b5050505050565b6110826115b0565b61054381611efe565b6001546001600160a01b031633146110e55760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107ca565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6060600061114a6006611fdd565b6001600160401b0381111561116157611161613c82565b6040519080825280602002602001820160405280156111b257816020015b604080516080810182526000808252602080830182905292820152606080820152825260001990920191018161117f5790505b50905060005b6111c26006611fdd565b8110156112ed57600860006111d8600684611fe7565b6001600160401b0390811682526020808301939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151595820195909552600160a81b909404909116918301919091526001810180546060840191906112469061541f565b80601f01602080910402602001604051908101604052809291908181526020018280546112729061541f565b80156112bf5780601f10611294576101008083540402835291602001916112bf565b820191906000526020600020905b8154815290600101906020018083116112a257829003601f168201915b5050505050815250508282815181106112da576112da61531d565b60209081029190910101526001016111b8565b50919050565b6113366040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c0820152948552918201805484518184028101840190955280855292938583019390928301828280156113df57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113c1575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561144157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611423575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916114dd9061541f565b80601f01602080910402602001604051908101604052809291908181526020018280546115099061541f565b80156114415780601f1061152b57610100808354040283529160200191611441565b820191906000526020600020905b81548152906001019060200180831161153957505050919092525091949350505050565b6115656115b0565b61054381611ff3565b6115766115b0565b60005b81518110156115ac576115a48282815181106115975761159761531d565b602002602001015161209c565b600101611579565b5050565b6000546001600160a01b0316331461160a5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107ca565b565b60005b81518110156115ac57600082828151811061162c5761162c61531d565b6020026020010151905060008160200151905061165c816001600160401b031660066123c690919063ffffffff16565b50806001600160401b03166000036116875760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116af576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546116db9061541f565b905060000361173d57815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a161177a565b8154600160a81b90046001600160401b031660011461177a57604051632105803760e11b81526001600160401b03841660048201526024016107ca565b805115806117af5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156117cd576040516342bcdf7f60e11b815260040160405180910390fd5b600182016117db828261583c565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906118669085906158fb565b60405180910390a25050505080600101905061160f565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610b055760405163ed053c5960e01b81526001600160401b03841660048201526024016107ca565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119288760a4615949565b9050826060015115611970578451611941906020615650565b865161194e906020615650565b6119599060a0615949565b6119639190615949565b61196d9082615949565b90505b36811461199957604051638e1192e160e01b8152600481018290523660248201526044016107ca565b50815181146119c85781516040516324f7d61360e21b81526004810191909152602481018290526044016107ca565b6119d0611cc9565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611a1e57611a1e614196565b6002811115611a2f57611a2f614196565b9052509050600281602001516002811115611a4c57611a4c614196565b148015611aa05750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611a8857611a8861531d565b6000918252602090912001546001600160a01b031633145b611abd57604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611b6d576020820151611ad890600161595c565b60ff16855114611afb576040516371253a2560e01b815260040160405180910390fd5b8351855114611b1d5760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611b2f929190615975565b604051908190038120611b46918b90602001615985565b604051602081830303815290604052805190602001209050611b6b8a828888886123d2565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611be35760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611c26565b604080518082019091526000815260606020820152815260200190600190039081611bfe5790505b50905060005b845181101561107357611c7c858281518110611c4a57611c4a61531d565b602002602001015184611c7657858381518110611c6957611c6961531d565b602002602001015161258f565b8361258f565b600101611c2c565b6001600160401b038216600090815260096020526040812081611ca8608085615999565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461160a57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107ca565b606088516001600160401b03811115611d4c57611d4c613c82565b604051908082528060200260200182016040528015611d9157816020015b6040805180820190915260008082526020820152815260200190600190039081611d6a5790505b509050811560005b8a51811015611ed45781611e3157848482818110611db957611db961531d565b9050602002016020810190611dce91906159bf565b63ffffffff1615611e3157848482818110611deb57611deb61531d565b9050602002016020810190611e0091906159bf565b8b8281518110611e1257611e1261531d565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611eaf8b8281518110611e4657611e4661531d565b60200260200101518b8b8b8b8b87818110611e6357611e6361531d565b9050602002810190611e7591906159da565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e8692505050565b838281518110611ec157611ec161531d565b6020908102919091010152600101611d99565b505098975050505050505050565b6000611eed83613166565b8015610b025750610b0283836131b1565b80516001600160a01b0316611f26576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b6000610b05825490565b6000610b028383613253565b336001600160a01b0382160361204b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107ca565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036120c7576000604051631b3fab5160e11b81526004016107ca9190615a20565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003612118576060840151600182018054911515620100000262ff000019909216919091179055612154565b6060840151600182015460ff6201000090910416151590151514612154576040516321fd80df60e21b815260ff841660048201526024016107ca565b60a084015180516101001015612180576001604051631b3fab5160e11b81526004016107ca9190615a20565b80516000036121a5576005604051631b3fab5160e11b81526004016107ca9190615a20565b61220b848460030180548060200260200160405190810160405280929190818152602001828054801561220157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116121e3575b505050505061327d565b84606001511561233b576122798484600201805480602002602001604051908101604052809291908181526020018280548015612201576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116121e357505050505061327d565b6080850151805161010010156122a5576002604051631b3fab5160e11b81526004016107ca9190615a20565b60408601516122b5906003615a3a565b60ff168151116122db576003604051631b3fab5160e11b81526004016107ca9190615a20565b815181511015612301576001604051631b3fab5160e11b81526004016107ca9190615a20565b805160018401805461ff00191661010060ff84160217905561232c9060028601906020840190613c08565b50612339858260016132e6565b505b612347848260026132e6565b805161235c9060038501906020840190613c08565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936123b59389939260028a01929190615a56565b60405180910390a161107384613441565b6000610b028383613498565b8251600090815b818110156125855760006001888684602081106123f8576123f861531d565b61240591901a601b61595c565b8985815181106124175761241761531d565b60200260200101518986815181106124315761243161531d565b60200260200101516040516000815260200160405260405161246f949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612491573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156124f2576124f2614196565b600281111561250357612503614196565b905250905060018160200151600281111561252057612520614196565b1461253e57604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561256857604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506123d9565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa15801561260c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126309190615402565b156126a157801561265f57604051637edeb53960e11b81526001600160401b03831660048201526024016107ca565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60006126ac8361187d565b60010180546126ba9061541f565b80601f01602080910402602001604051908101604052809291908181526020018280546126e69061541f565b80156127335780601f1061270857610100808354040283529160200191612733565b820191906000526020600020905b81548152906001019060200180831161271657829003601f168201915b505050602088015151929350505060008190036127625760405162bf199760e01b815260040160405180910390fd5b8560400151518114612787576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156127a1576127a1613c82565b6040519080825280602002602001820160405280156127ca578160200160208202803683370190505b50905060005b8281101561296e576000886020015182815181106127f0576127f061531d565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146128675780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107ca565b866001600160401b03168160000151602001516001600160401b0316146128bb57805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107ca565b612948817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f836000015160200151846000015160400151898051906020012060405160200161292d94939291909384526001600160401b03928316602085015291166040830152606082015260800190565b604051602081830303815290604052805190602001206134e7565b83838151811061295a5761295a61531d565b6020908102919091010152506001016127d0565b50600061298586838a606001518b608001516135ef565b9050806000036129b357604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107ca565b60005b83811015610a425760005a905060008a6020015183815181106129db576129db61531d565b6020026020010151905060006129f98a836000015160600151610ab6565b90506000816003811115612a0f57612a0f614196565b1480612a2c57506003816003811115612a2a57612a2a614196565b145b612a8257815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612e7e565b60608915612b61578b8581518110612a9c57612a9c61531d565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612aca8842615601565b1190508080612aea57506003836003811115612ae857612ae8614196565b145b612b12576040516354e7e43160e11b81526001600160401b038d1660048201526024016107ca565b8c8681518110612b2457612b2461531d565b602002602001015160000151600014612b5b578c8681518110612b4957612b4961531d565b60209081029190910101515160808501525b50612bcd565b6000826003811115612b7557612b75614196565b14612bcd57825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612e7e565b8251608001516001600160401b031615612ca6576000826003811115612bf557612bf5614196565b03612ca6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612c5693929190615b08565b6020604051808303816000875af1158015612c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c999190615402565b612ca65750505050612e7e565b60008d604001518681518110612cbe57612cbe61531d565b6020026020010151905080518460a001515114612d0857835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107ca565b612d1c8c856000015160600151600161362c565b600080612d2a8684866136d1565b91509150612d418e8760000151606001518461362c565b8c15612d98576003826003811115612d5b57612d5b614196565b03612d98576000856003811115612d7457612d74614196565b14612d9857855151604051632b11b8d960e01b81526107ca91908390600401615b34565b6002826003811115612dac57612dac614196565b14612df1576003826003811115612dc557612dc5614196565b14612df1578d866000015160600151836040516349362d1f60e11b81526004016107ca93929190615b4d565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612e4957612e4961531d565b602002602001015186865a612e5e908f615601565b604051612e6e9493929190615b72565b60405180910390a4505050505050505b6001016129b6565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2e9190615ba9565b90506001600160a01b0381161580612f5d5750612f5b6001600160a01b03821663aff2afbf60e01b611ee2565b155b15612f865760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107ca565b600080612f9e88858c6040015163ffffffff16613785565b9150915060008060006130516040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b81525060405160240161301b9190615bc6565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287866113886084613868565b92509250925082613077578160405163e1cd550960e01b81526004016107ca9190613fae565b81516020146130a6578151604051631e3be00960e21b81526020600482015260248101919091526044016107ca565b6000828060200190518101906130bc9190615c92565b9050866001600160a01b03168c6001600160a01b0316146131385760006130ed8d8a6130e8868a615601565b613785565b509050868110806131075750816131048883615601565b14155b156131365760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107ca565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613179826301ffc9a760e01b6131b1565b8015610b0557506131aa827fffffffff000000000000000000000000000000000000000000000000000000006131b1565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d9150600051905082801561323c575060208210155b80156132485750600081115b979650505050505050565b600082600001828154811061326a5761326a61531d565b9060005260206000200154905092915050565b60005b8151811015610d955760ff8316600090815260036020526040812083519091908490849081106132b2576132b261531d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613280565b60005b8251811015610ab05760008382815181106133065761330661531d565b602002602001015190506000600281111561332357613323614196565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561336257613362614196565b14613383576004604051631b3fab5160e11b81526004016107ca9190615a20565b6001600160a01b0381166133aa5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133d0576133d0614196565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561342d5761342d614196565b0217905550905050508060010190506132e9565b60ff81166105435760ff8082166000908152600260205260409020600101546201000090041661348457604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b60008181526001830160205260408120546134df57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b05565b506000610b05565b81518051606080850151908301516080808701519401516040516000958695889561354b95919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a0015160405160200161358e9190615d4c565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806135fd858585613942565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b6000600261363b60808561562a565b6001600160401b031661364e9190615650565b9050600061365c8585611c84565b90508161366b60016004615601565b901b19168183600381111561368257613682614196565b6001600160401b03871660009081526009602052604081209190921b929092179182916136b0608088615999565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906136fe90889088908890600401615de3565b600060405180830381600087803b15801561371857600080fd5b505af1925050508015613729575060015b613768573d808015613757576040519150601f19603f3d011682016040523d82523d6000602084013e61375c565b606091505b5060039250905061377d565b50506040805160208101909152600081526002905b935093915050565b60008060008060006137e6886040516024016137b091906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288886113886084613868565b9250925092508261380c578160405163e1cd550960e01b81526004016107ca9190613fae565b602082511461383b578151604051631e3be00960e21b81526020600482015260248101919091526044016107ca565b8180602001905181019061384f9190615c92565b6138598288615601565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561388a5761388a613c82565b6040519080825280601f01601f1916602001820160405280156138b4576020820181803683370190505b509150863b6138ce5763030ed58f60e21b60005260046000fd5b5a858110156138e857632be8ca8b60e21b60005260046000fd5b8590036040810481038710613908576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d8481111561392b5750835b808352806000602085013e50955095509592505050565b825182516000919081830361396a57604051630469ac9960e21b815260040160405180910390fd5b610101821180159061397e57506101018111155b61399b576040516309bde33960e01b815260040160405180910390fd5b600019828201016101008111156139c5576040516309bde33960e01b815260040160405180910390fd5b806000036139f257866000815181106139e0576139e061531d565b60200260200101519350505050613bc0565b6000816001600160401b03811115613a0c57613a0c613c82565b604051908082528060200260200182016040528015613a35578160200160208202803683370190505b50905060008080805b85811015613b5f5760006001821b8b811603613a995788851015613a82578c5160018601958e918110613a7357613a7361531d565b60200260200101519050613abb565b8551600185019487918110613a7357613a7361531d565b8b5160018401938d918110613ab057613ab061531d565b602002602001015190505b600089861015613aeb578d5160018701968f918110613adc57613adc61531d565b60200260200101519050613b0d565b8651600186019588918110613b0257613b0261531d565b602002602001015190505b82851115613b2e576040516309bde33960e01b815260040160405180910390fd5b613b388282613bc7565b878481518110613b4a57613b4a61531d565b60209081029190910101525050600101613a3e565b506001850382148015613b7157508683145b8015613b7c57508581145b613b99576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613bae57613bae61531d565b60200260200101519750505050505050505b9392505050565b6000818310613bdf57613bda8284613be5565b610b02565b610b0283835b6040805160016020820152908101839052606081018290526000906080016135d1565b828054828255906000526020600020908101928215613c5d579160200282015b82811115613c5d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c28565b50613c69929150613c6d565b5090565b5b80821115613c695760008155600101613c6e565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613cba57613cba613c82565b60405290565b60405160a081016001600160401b0381118282101715613cba57613cba613c82565b60405160c081016001600160401b0381118282101715613cba57613cba613c82565b604080519081016001600160401b0381118282101715613cba57613cba613c82565b604051601f8201601f191681016001600160401b0381118282101715613d4e57613d4e613c82565b604052919050565b60006001600160401b03821115613d6f57613d6f613c82565b5060051b60200190565b6001600160a01b038116811461054357600080fd5b80356001600160401b0381168114613da557600080fd5b919050565b801515811461054357600080fd5b8035613da581613daa565b60006001600160401b03821115613ddc57613ddc613c82565b50601f01601f191660200190565b600082601f830112613dfb57600080fd5b8135613e0e613e0982613dc3565b613d26565b818152846020838601011115613e2357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613e5357600080fd5b82356001600160401b0380821115613e6a57600080fd5b818501915085601f830112613e7e57600080fd5b8135613e8c613e0982613d56565b81815260059190911b83018401908481019088831115613eab57600080fd5b8585015b83811015613f5157803585811115613ec75760008081fd5b86016080818c03601f1901811315613edf5760008081fd5b613ee7613c98565b89830135613ef481613d79565b81526040613f03848201613d8e565b8b830152606080850135613f1681613daa565b83830152928401359289841115613f2f57600091508182fd5b613f3d8f8d86880101613dea565b908301525085525050918601918601613eaf565b5098975050505050505050565b60005b83811015613f79578181015183820152602001613f61565b50506000910152565b60008151808452613f9a816020860160208601613f5e565b601f01601f19169290920160200192915050565b602081526000610b026020830184613f82565b8060608101831015610b0557600080fd5b60008083601f840112613fe457600080fd5b5081356001600160401b03811115613ffb57600080fd5b60208301915083602082850101111561401357600080fd5b9250929050565b60008083601f84011261402c57600080fd5b5081356001600160401b0381111561404357600080fd5b6020830191508360208260051b850101111561401357600080fd5b60008060008060008060008060e0898b03121561407a57600080fd5b6140848a8a613fc1565b975060608901356001600160401b03808211156140a057600080fd5b6140ac8c838d01613fd2565b909950975060808b01359150808211156140c557600080fd5b6140d18c838d0161401a565b909750955060a08b01359150808211156140ea57600080fd5b506140f78b828c0161401a565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561412557600080fd5b61412f8585613fc1565b925060608401356001600160401b0381111561414a57600080fd5b61415686828701613fd2565b9497909650939450505050565b6000806040838503121561417657600080fd5b61417f83613d8e565b915061418d60208401613d8e565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106141bc576141bc614196565b9052565b60208101610b0582846141ac565b600060a082840312156141e057600080fd5b6141e8613cc0565b9050813581526141fa60208301613d8e565b602082015261420b60408301613d8e565b604082015261421c60608301613d8e565b606082015261422d60808301613d8e565b608082015292915050565b8035613da581613d79565b803563ffffffff81168114613da557600080fd5b600082601f83011261426857600080fd5b81356020614278613e0983613d56565b82815260059290921b8401810191818101908684111561429757600080fd5b8286015b848110156143675780356001600160401b03808211156142bb5760008081fd5b9088019060a0828b03601f19018113156142d55760008081fd5b6142dd613cc0565b87840135838111156142ef5760008081fd5b6142fd8d8a83880101613dea565b82525060408085013561430f81613d79565b828a01526060614320868201614243565b8284015260809150818601358581111561433a5760008081fd5b6143488f8c838a0101613dea565b918401919091525091909301359083015250835291830191830161429b565b509695505050505050565b6000610140828403121561438557600080fd5b61438d613ce2565b905061439983836141ce565b815260a08201356001600160401b03808211156143b557600080fd5b6143c185838601613dea565b602084015260c08401359150808211156143da57600080fd5b6143e685838601613dea565b60408401526143f760e08501614238565b6060840152610100840135608084015261012084013591508082111561441c57600080fd5b5061442984828501614257565b60a08301525092915050565b600082601f83011261444657600080fd5b81356020614456613e0983613d56565b82815260059290921b8401810191818101908684111561447557600080fd5b8286015b848110156143675780356001600160401b038111156144985760008081fd5b6144a68986838b0101614372565b845250918301918301614479565b600082601f8301126144c557600080fd5b813560206144d5613e0983613d56565b82815260059290921b840181019181810190868411156144f457600080fd5b8286015b848110156143675780356001600160401b038082111561451757600080fd5b818901915089603f83011261452b57600080fd5b8582013561453b613e0982613d56565b81815260059190911b830160400190878101908c83111561455b57600080fd5b604085015b838110156145945780358581111561457757600080fd5b6145868f6040838a0101613dea565b845250918901918901614560565b508752505050928401925083016144f8565b600082601f8301126145b757600080fd5b813560206145c7613e0983613d56565b8083825260208201915060208460051b8701019350868411156145e957600080fd5b602086015b8481101561436757803583529183019183016145ee565b600082601f83011261461657600080fd5b81356020614626613e0983613d56565b82815260059290921b8401810191818101908684111561464557600080fd5b8286015b848110156143675780356001600160401b03808211156146695760008081fd5b9088019060a0828b03601f19018113156146835760008081fd5b61468b613cc0565b614696888501613d8e565b8152604080850135848111156146ac5760008081fd5b6146ba8e8b83890101614435565b8a84015250606080860135858111156146d35760008081fd5b6146e18f8c838a01016144b4565b83850152506080915081860135858111156146fc5760008081fd5b61470a8f8c838a01016145a6565b9184019190915250919093013590830152508352918301918301614649565b6000806040838503121561473c57600080fd5b6001600160401b038335111561475157600080fd5b61475e8484358501614605565b91506001600160401b036020840135111561477857600080fd5b6020830135830184601f82011261478e57600080fd5b61479b613e098235613d56565b81358082526020808301929160051b8401018710156147b957600080fd5b602083015b6020843560051b85010181101561495f576001600160401b03813511156147e457600080fd5b87603f8235860101126147f657600080fd5b614809613e096020833587010135613d56565b81358501602081810135808452908301929160059190911b016040018a101561483157600080fd5b604083358701015b83358701602081013560051b0160400181101561494f576001600160401b038135111561486557600080fd5b833587018135016040818d03603f1901121561488057600080fd5b614888613d04565b604082013581526001600160401b03606083013511156148a757600080fd5b8c605f6060840135840101126148bc57600080fd5b60406060830135830101356148d3613e0982613d56565b808282526020820191508f60608460051b60608801358801010111156148f857600080fd5b6060808601358601015b60608460051b60608801358801010181101561492f5761492181614243565b835260209283019201614902565b508060208501525050508085525050602083019250602081019050614839565b50845250602092830192016147be565b508093505050509250929050565b60008060008060006060868803121561498557600080fd5b85356001600160401b038082111561499c57600080fd5b6149a889838a01614372565b965060208801359150808211156149be57600080fd5b6149ca89838a0161401a565b909650945060408801359150808211156149e357600080fd5b506149f08882890161401a565b969995985093965092949392505050565b600060608284031215614a1357600080fd5b604051606081018181106001600160401b0382111715614a3557614a35613c82565b6040528235614a4381613d79565b8152614a5160208401614243565b60208201526040830135614a6481613d79565b60408201529392505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136246080850182613f82565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015614b0e57603f19888603018452614afc858351614a70565b94509285019290850190600101614ae0565b5092979650505050505050565b600060208284031215614b2d57600080fd5b81356001600160401b03811115614b4357600080fd5b820160a08185031215613bc057600080fd5b803560ff81168114613da557600080fd5b600060208284031215614b7857600080fd5b610b0282614b55565b60008151808452602080850194506020840160005b83811015614bbb5781516001600160a01b031687529582019590820190600101614b96565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c1560e0840182614b81565b90506040840151601f198483030160c0850152614c328282614b81565b95945050505050565b60008060408385031215614c4e57600080fd5b614c5783613d8e565b946020939093013593505050565b600060208284031215614c7757600080fd5b610b0282613d8e565b602081526000610b026020830184614a70565b600060208284031215614ca557600080fd5b8135613bc081613d79565b600082601f830112614cc157600080fd5b81356020614cd1613e0983613d56565b8083825260208201915060208460051b870101935086841115614cf357600080fd5b602086015b84811015614367578035614d0b81613d79565b8352918301918301614cf8565b60006020808385031215614d2b57600080fd5b82356001600160401b0380821115614d4257600080fd5b818501915085601f830112614d5657600080fd5b8135614d64613e0982613d56565b81815260059190911b83018401908481019088831115614d8357600080fd5b8585015b83811015613f5157803585811115614d9e57600080fd5b860160c0818c03601f19011215614db55760008081fd5b614dbd613ce2565b8882013581526040614dd0818401614b55565b8a8301526060614de1818501614b55565b8284015260809150614df4828501613db8565b9083015260a08381013589811115614e0c5760008081fd5b614e1a8f8d83880101614cb0565b838501525060c0840135915088821115614e345760008081fd5b614e428e8c84870101614cb0565b9083015250845250918601918601614d87565b80356001600160e01b0381168114613da557600080fd5b600082601f830112614e7d57600080fd5b81356020614e8d613e0983613d56565b82815260069290921b84018101918181019086841115614eac57600080fd5b8286015b848110156143675760408189031215614ec95760008081fd5b614ed1613d04565b614eda82613d8e565b8152614ee7858301614e55565b81860152835291830191604001614eb0565b600082601f830112614f0a57600080fd5b81356020614f1a613e0983613d56565b82815260059290921b84018101918181019086841115614f3957600080fd5b8286015b848110156143675780356001600160401b0380821115614f5d5760008081fd5b9088019060a0828b03601f1901811315614f775760008081fd5b614f7f613cc0565b614f8a888501613d8e565b815260408085013584811115614fa05760008081fd5b614fae8e8b83890101613dea565b8a8401525060609350614fc2848601613d8e565b908201526080614fd3858201613d8e565b93820193909352920135908201528352918301918301614f3d565b600082601f830112614fff57600080fd5b8135602061500f613e0983613d56565b82815260069290921b8401810191818101908684111561502e57600080fd5b8286015b84811015614367576040818903121561504b5760008081fd5b615053613d04565b813581528482013585820152835291830191604001615032565b6000602080838503121561508057600080fd5b82356001600160401b038082111561509757600080fd5b90840190608082870312156150ab57600080fd5b6150b3613c98565b8235828111156150c257600080fd5b830160408189038113156150d557600080fd5b6150dd613d04565b8235858111156150ec57600080fd5b8301601f81018b136150fd57600080fd5b803561510b613e0982613d56565b81815260069190911b8201890190898101908d83111561512a57600080fd5b928a01925b8284101561517a5785848f0312156151475760008081fd5b61514f613d04565b843561515a81613d79565b8152615167858d01614e55565b818d0152825292850192908a019061512f565b84525050508287013591508482111561519257600080fd5b61519e8a838501614e6c565b818801528352505082840135828111156151b757600080fd5b6151c388828601614ef9565b858301525060408301359350818411156151dc57600080fd5b6151e887858501614fee565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561529557601f19868403018952815160a06001600160401b0380835116865286830151828888015261525983880182613f82565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615221565b5090979650505050505050565b6001600160a01b0385168152600060206080818401526152c56080840187615204565b83810360408581019190915286518083528388019284019060005b81811015615305578451805184528601518684015293850193918301916001016152e0565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561538a57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615353565b50508583015187820388850152805180835290840192506000918401905b808310156153e357835180516001600160401b031683528501516001600160e01b0316858301529284019260019290920191908501906153a8565b50979650505050505050565b602081526000610b026020830184615333565b60006020828403121561541457600080fd5b8151613bc081613daa565b600181811c9082168061543357607f821691505b6020821081036112ed57634e487b7160e01b600052602260045260246000fd5b60008083546154618161541f565b60018281168015615479576001811461548e576154bd565b60ff19841687528215158302870194506154bd565b8760005260208060002060005b858110156154b45781548a82015290840190820161549b565b50505082870194505b50929695505050505050565b600081546154d68161541f565b8085526020600183811680156154f3576001811461550d5761553b565b60ff1985168884015283151560051b88018301955061553b565b866000528260002060005b858110156155335781548a8201860152908301908401615518565b890184019650505b505050505092915050565b6040815260006155596040830185613f82565b8281036020840152614c3281856154c9565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156155a1576155a161556b565b5092915050565b6040815260006155bb6040830185615204565b8281036020840152614c328185615333565b6000602082840312156155df57600080fd5b81356001600160401b038111156155f557600080fd5b61362484828501614605565b81810381811115610b0557610b0561556b565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061564457615644615614565b92169190910692915050565b8082028115828204841417610b0557610b0561556b565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261569a60a0870182613f82565b9050606085015186820360608801526156b38282613f82565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156153e357835180516001600160a01b03168352860151868301529285019260019290920191908401906156d6565b602081526000610b026020830184615667565b60808152600061572e6080830187615667565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561576c57600080fd5b835161577781613daa565b60208501519093506001600160401b0381111561579357600080fd5b8401601f810186136157a457600080fd5b80516157b2613e0982613dc3565b8181528760208385010111156157c757600080fd5b6157d8826020830160208601613f5e565b809450505050604084015190509250925092565b601f821115610d95576000816000526020600020601f850160051c810160208610156158155750805b601f850160051c820191505b8181101561583457828155600101615821565b505050505050565b81516001600160401b0381111561585557615855613c82565b61586981615863845461541f565b846157ec565b602080601f83116001811461589e57600084156158865750858301515b600019600386901b1c1916600185901b178555615834565b600085815260208120601f198616915b828110156158cd578886015182559484019460019091019084016158ae565b50858210156158eb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610b0260a08301600185016154c9565b80820180821115610b0557610b0561556b565b60ff8181168382160190811115610b0557610b0561556b565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b03808416806159b3576159b3615614565b92169190910492915050565b6000602082840312156159d157600080fd5b610b0282614243565b6000808335601e198436030181126159f157600080fd5b8301803591506001600160401b03821115615a0b57600080fd5b60200191503681900382131561401357600080fd5b6020810160068310615a3457615a34614196565b91905290565b60ff81811683821602908116908181146155a1576155a161556b565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615aae5784546001600160a01b031683526001948501949284019201615a89565b50508481036060860152865180825290820192508187019060005b81811015615aee5782516001600160a01b031685529383019391830191600101615ac9565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614c326060830184613f82565b8281526040602082015260006136246040830184613f82565b6001600160401b038481168252831660208201526060810161362460408301846141ac565b848152615b8260208201856141ac565b608060408201526000615b986080830185613f82565b905082606083015295945050505050565b600060208284031215615bbb57600080fd5b8151613bc081613d79565b6020815260008251610100806020850152615be5610120850183613f82565b91506020850151615c0160408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615c3b60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615c588483613f82565b935060c08701519150808685030160e0870152615c758483613f82565b935060e0870151915080868503018387015250615afe8382613f82565b600060208284031215615ca457600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561529557601f19868403018952815160a08151818652615cee82870182613f82565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615d2a8382613f82565b6080948501519790940196909652505098840198925090830190600101615cc8565b602081526000610b026020830184615cab565b60008282518085526020808601955060208260051b8401016020860160005b8481101561529557601f19868403018952615d9a838351613f82565b98840198925090830190600101615d7e565b60008151808452602080850194506020840160005b83811015614bbb57815163ffffffff1687529582019590820190600101615dc1565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615e4b6101a0850183613f82565b91506040870151605f198086850301610120870152615e6a8483613f82565b935060608901519150615e87838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615eb08282615cab565b9150508281036020840152615ec58186615d5f565b90508281036040840152615afe8185615dac56fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"getAllSourceChainConfig\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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.ExecutionReportSingleChain[]\",\"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: "0x6101206040523480156200001257600080fd5b5060405162006c5138038062006c51833981016040819052620000359162000886565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0d565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d1576000828281518110620003915762000391620009c3565b60209081029190910181015190810151909150620003ba60066001600160401b038316620005d5565b50806001600160401b0316600003620003e65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200040f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200043d90620009d9565b9050600003620004a0578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004df565b8154600160a81b90046001600160401b0316600114620004df57604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620005155750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000544828262000a6a565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b90620005b990859062000b36565b60405180910390a25050505080600101905062000370565b5050565b6000620005e38383620005ec565b90505b92915050565b60008181526001830160205260408120546200063557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e6565b506000620005e6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067957620006796200063e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006aa57620006aa6200063e565b604052919050565b80516001600160401b0381168114620006ca57600080fd5b919050565b6001600160a01b0381168114620006e557600080fd5b50565b6000601f83601f840112620006fc57600080fd5b825160206001600160401b03808311156200071b576200071b6200063e565b8260051b6200072c8382016200067f565b93845286810183019383810190898611156200074757600080fd5b84890192505b858310156200087957825184811115620007675760008081fd5b89016080601f19828d038101821315620007815760008081fd5b6200078b62000654565b888401516200079a81620006cf565b81526040620007ab858201620006b2565b8a8301526060808601518015158114620007c55760008081fd5b83830152938501519389851115620007dd5760008081fd5b84860195508f603f870112620007f557600094508485fd5b8a8601519450898511156200080e576200080e6200063e565b6200081f8b858f880116016200067f565b93508484528f82868801011115620008375760008081fd5b60005b8581101562000857578681018301518582018d01528b016200083a565b5060009484018b0194909452509182015283525091840191908401906200074d565b9998505050505050505050565b60008060008385036101008112156200089e57600080fd5b6080811215620008ad57600080fd5b620008b762000654565b620008c286620006b2565b81526020860151620008d481620006cf565b60208201526040860151620008e981620006cf565b60408201526060860151620008fe81620006cf565b606082810191909152909450607f19820112156200091b57600080fd5b50604051606081016001600160401b0380821183831017156200094257620009426200063e565b81604052608087015191506200095882620006cf565b90825260a08601519063ffffffff821682146200097457600080fd5b81602084015260c087015191506200098c82620006cf565b6040830182905260e087015192945080831115620009a957600080fd5b5050620009b986828701620006e8565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ee57607f821691505b60208210810362000a0f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a65576000816000526020600020601f850160051c8101602086101562000a405750805b601f850160051c820191505b8181101562000a615782815560010162000a4c565b5050505b505050565b81516001600160401b0381111562000a865762000a866200063e565b62000a9e8162000a978454620009d9565b8462000a15565b602080601f83116001811462000ad6576000841562000abd5750858301515b600019600386901b1c1916600185901b17855562000a61565b600085815260208120601f198616915b8281101562000b075788860151825594840194600190910190840162000ae6565b508582101562000b265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8b81620009d9565b8060a089015260c0600183166000811462000baf576001811462000bcc5762000bfe565b60ff19841660c08b015260c083151560051b8b0101945062000bfe565b85600052602060002060005b8481101562000bf55781548c820185015290880190890162000bd8565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fce62000c83600039600081816102470152612ca10152600081816102180152612f660152600081816101e9015281816105890152818161073b01526126620152600081816101ba01526128a1015260008181611d710152611da40152615fce6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80637437ff9f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ed578063f2fde38b1461050d578063f716f99f1461052057600080fd5b8063c673e58414610489578063ccd37ba3146104a957600080fd5b806383503786116100b2578063835037861461044a57806385572ffb146104605780638da5cb5b1461046e57600080fd5b80637437ff9f146103b057806379ba50971461044257600080fd5b80633f4b04aa116101245780635e7bb008116101095780635e7bb0081461037757806360987c201461038a5780636f9e320f1461039d57600080fd5b80633f4b04aa1461033c5780635e36480c1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613ee5565b610533565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190614053565b610184610324366004614103565b610547565b6101846103373660046141b5565b610a4e565b600b546040516001600160401b0390911681526020016102c4565b61036a610365366004614208565b610ab7565b6040516102c49190614265565b6101846103853660046147ce565b610b0c565b610184610398366004614a12565b610d9b565b6101846103ab366004614aa6565b61107b565b61040c604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b61018461108c565b61045261113d565b6040516102c4929190614b5c565b61018461016c366004614bfd565b6000546040516001600160a01b0390911681526020016102c4565b61049c610497366004614c48565b611398565b6040516102c49190614ca8565b6104df6104b7366004614d1d565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6105006104fb366004614d47565b6114f6565b6040516102c49190614d62565b61018461051b366004614d75565b611602565b61018461052e366004614dfa565b611613565b61053b611655565b610544816116b1565b50565b60006105558789018961514f565b602081015151909150156105f257602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c1933093909190600401615384565b60006040518083038186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050505b8051515115158061060857508051602001515115155b156106d457600b5460208a0135906001600160401b03808316911610156106ac57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106759291016154d1565b600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106d2565b8160200151516000036106d257604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098f576000826020015182815181106106fc576106fc6153ff565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a691906154e4565b156107d457604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107df82611922565b9050806001016040516107f2919061553b565b60405180910390208360200151805190602001201461082f5782602001518160010160405163b80d8fa960e01b81526004016107cb92919061562e565b60408301518154600160a81b90046001600160401b039081169116141580610870575082606001516001600160401b031683604001516001600160401b0316115b156108b557825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107cb565b6080830151806108d85760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109305783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107cb565b6060840151610940906001615669565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d7565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c7929091615690565b60405180910390a1610a4360008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b925061196e915050565b505050505050505050565b610a8e610a5d828401846156b5565b6040805160008082526020820190925290610a88565b6060815260200190600190039081610a735790505b50611c67565b604080516000808252602082019092529050610ab160018585858586600061196e565b50505050565b6000610ac5600160046156e9565b6002610ad2608085615712565b6001600160401b0316610ae59190615738565b610aef8585611d29565b901c166003811115610b0357610b0361423b565b90505b92915050565b610b14611d6e565b815181518114610b37576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d8b576000848281518110610b5657610b566153ff565b60200260200101519050600081602001515190506000858481518110610b7e57610b7e6153ff565b6020026020010151905080518214610ba9576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d7c576000828281518110610bc857610bc86153ff565b6020026020010151600001519050600085602001518381518110610bee57610bee6153ff565b6020026020010151905081600014610c42578060800151821015610c42578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107cb565b838381518110610c5457610c546153ff565b602002602001015160200151518160a001515114610ca157805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107cb565b60005b8160a0015151811015610d6e576000858581518110610cc557610cc56153ff565b6020026020010151602001518281518110610ce257610ce26153ff565b602002602001015163ffffffff16905080600014610d655760008360a001518381518110610d1257610d126153ff565b60200260200101516040015163ffffffff16905080821015610d63578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107cb565b505b50600101610ca4565b505050806001019050610bac565b50505050806001019050610b3a565b50610d968383611c67565b505050565b333014610dbb576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610df8565b6040805180820190915260008082526020820152815260200190600190039081610dd15790505b5060a08701515190915015610e2e57610e2b8660a001518760200151886060015189600001516020015189898989611dd6565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e69929101614053565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f44576040516308d450a160e01b81526001600160a01b038216906308d450a190610eca9085906004016157f0565b600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f44573d808015610f23576040519150601f19603f3d011682016040523d82523d6000602084013e610f28565b606091505b50806040516309c2532560e01b81526004016107cb9190614053565b604088015151158015610f5957506080880151155b80610f70575060608801516001600160a01b03163b155b80610f9757506060880151610f95906001600160a01b03166385572ffb60e01b611f87565b155b15610fa457505050611074565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf97983926110029289926113889291600401615803565b6000604051808303816000875af1158015611021573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611049919081019061583f565b50915091508161106e57806040516302a35ba360e21b81526004016107cb9190614053565b50505050505b5050505050565b611083611655565b61054481611fa3565b6001546001600160a01b031633146110e65760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107cb565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b606080600061114c6006612082565b6001600160401b0381111561116357611163613d27565b6040519080825280602002602001820160405280156111b457816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816111815790505b50905060006111c36006612082565b6001600160401b038111156111da576111da613d27565b604051908082528060200260200182016040528015611203578160200160208202803683370190505b50905060005b6112136006612082565b81101561138f5761122560068261208c565b828281518110611237576112376153ff565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061126d5761126d6153ff565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b909204909316918101919091526001820180549192916060840191906112e890615501565b80601f016020809104026020016040519081016040528092919081815260200182805461131490615501565b80156113615780601f1061133657610100808354040283529160200191611361565b820191906000526020600020905b81548152906001019060200180831161134457829003601f168201915b50505050508152505083828151811061137c5761137c6153ff565b6020908102919091010152600101611209565b50939092509050565b6113db6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561148457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611466575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114e657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114c8575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161158290615501565b80601f01602080910402602001604051908101604052809291908181526020018280546115ae90615501565b80156114e65780601f106115d0576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116115de57505050919092525091949350505050565b61160a611655565b61054481612098565b61161b611655565b60005b81518110156116515761164982828151811061163c5761163c6153ff565b6020026020010151612141565b60010161161e565b5050565b6000546001600160a01b031633146116af5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107cb565b565b60005b81518110156116515760008282815181106116d1576116d16153ff565b60200260200101519050600081602001519050611701816001600160401b0316600661246b90919063ffffffff16565b50806001600160401b031660000361172c5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611754576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461178090615501565b90506000036117e257815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a161181f565b8154600160a81b90046001600160401b031660011461181f57604051632105803760e11b81526001600160401b03841660048201526024016107cb565b805115806118545750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611872576040516342bcdf7f60e11b815260040160405180910390fd5b600182016118808282615924565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b9061190b9085906159e3565b60405180910390a2505050508060010190506116b4565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610b065760405163ed053c5960e01b81526001600160401b03841660048201526024016107cb565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119cd8760a4615a31565b9050826060015115611a155784516119e6906020615738565b86516119f3906020615738565b6119fe9060a0615a31565b611a089190615a31565b611a129082615a31565b90505b368114611a3e57604051638e1192e160e01b8152600481018290523660248201526044016107cb565b5081518114611a6d5781516040516324f7d61360e21b81526004810191909152602481018290526044016107cb565b611a75611d6e565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ac357611ac361423b565b6002811115611ad457611ad461423b565b9052509050600281602001516002811115611af157611af161423b565b148015611b455750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b2d57611b2d6153ff565b6000918252602090912001546001600160a01b031633145b611b6257604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611c12576020820151611b7d906001615a44565b60ff16855114611ba0576040516371253a2560e01b815260040160405180910390fd5b8351855114611bc25760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611bd4929190615a5d565b604051908190038120611beb918b90602001615a6d565b604051602081830303815290604052805190602001209050611c108a82888888612477565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c885760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611ccb565b604080518082019091526000815260606020820152815260200190600190039081611ca35790505b50905060005b845181101561107457611d21858281518110611cef57611cef6153ff565b602002602001015184611d1b57858381518110611d0e57611d0e6153ff565b6020026020010151612634565b83612634565b600101611cd1565b6001600160401b038216600090815260096020526040812081611d4d608085615a81565b6001600160401b031681526020810191909152604001600020549392505050565b467f0000000000000000000000000000000000000000000000000000000000000000146116af57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107cb565b606088516001600160401b03811115611df157611df1613d27565b604051908082528060200260200182016040528015611e3657816020015b6040805180820190915260008082526020820152815260200190600190039081611e0f5790505b509050811560005b8a51811015611f795781611ed657848482818110611e5e57611e5e6153ff565b9050602002016020810190611e739190615aa7565b63ffffffff1615611ed657848482818110611e9057611e906153ff565b9050602002016020810190611ea59190615aa7565b8b8281518110611eb757611eb76153ff565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f548b8281518110611eeb57611eeb6153ff565b60200260200101518b8b8b8b8b87818110611f0857611f086153ff565b9050602002810190611f1a9190615ac2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f2b92505050565b838281518110611f6657611f666153ff565b6020908102919091010152600101611e3e565b505098975050505050505050565b6000611f928361320b565b8015610b035750610b038383613256565b80516001600160a01b0316611fcb576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b6000610b06825490565b6000610b0383836132f8565b336001600160a01b038216036120f05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107cb565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361216c576000604051631b3fab5160e11b81526004016107cb9190615b08565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121bd576060840151600182018054911515620100000262ff0000199092169190911790556121f9565b6060840151600182015460ff62010000909104161515901515146121f9576040516321fd80df60e21b815260ff841660048201526024016107cb565b60a084015180516101001015612225576001604051631b3fab5160e11b81526004016107cb9190615b08565b805160000361224a576005604051631b3fab5160e11b81526004016107cb9190615b08565b6122b084846003018054806020026020016040519081016040528092919081815260200182805480156122a657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612288575b5050505050613322565b8460600151156123e05761231e84846002018054806020026020016040519081016040528092919081815260200182805480156122a6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612288575050505050613322565b60808501518051610100101561234a576002604051631b3fab5160e11b81526004016107cb9190615b08565b604086015161235a906003615b22565b60ff16815111612380576003604051631b3fab5160e11b81526004016107cb9190615b08565b8151815110156123a6576001604051631b3fab5160e11b81526004016107cb9190615b08565b805160018401805461ff00191661010060ff8416021790556123d19060028601906020840190613cad565b506123de8582600161338b565b505b6123ec8482600261338b565b80516124019060038501906020840190613cad565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361245a9389939260028a01929190615b3e565b60405180910390a1611074846134e6565b6000610b03838361353d565b8251600090815b8181101561262a57600060018886846020811061249d5761249d6153ff565b6124aa91901a601b615a44565b8985815181106124bc576124bc6153ff565b60200260200101518986815181106124d6576124d66153ff565b602002602001015160405160008152602001604052604051612514949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612536573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156125975761259761423b565b60028111156125a8576125a861423b565b90525090506001816020015160028111156125c5576125c561423b565b146125e357604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561260d57604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b85179450505080600101905061247e565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156126b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d591906154e4565b1561274657801561270457604051637edeb53960e11b81526001600160401b03831660048201526024016107cb565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061275183611922565b600101805461275f90615501565b80601f016020809104026020016040519081016040528092919081815260200182805461278b90615501565b80156127d85780601f106127ad576101008083540402835291602001916127d8565b820191906000526020600020905b8154815290600101906020018083116127bb57829003601f168201915b505050602088015151929350505060008190036128075760405162bf199760e01b815260040160405180910390fd5b856040015151811461282c576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561284657612846613d27565b60405190808252806020026020018201604052801561286f578160200160208202803683370190505b50905060005b82811015612a1357600088602001518281518110612895576128956153ff565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461290c5780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107cb565b866001600160401b03168160000151602001516001600160401b03161461296057805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107cb565b6129ed817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129d294939291909384526001600160401b03928316602085015291166040830152606082015260800190565b6040516020818303038152906040528051906020012061358c565b8383815181106129ff576129ff6153ff565b602090810291909101015250600101612875565b506000612a2a86838a606001518b60800151613694565b905080600003612a5857604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107cb565b60005b83811015610a435760005a905060008a602001518381518110612a8057612a806153ff565b602002602001015190506000612a9e8a836000015160600151610ab7565b90506000816003811115612ab457612ab461423b565b1480612ad157506003816003811115612acf57612acf61423b565b145b612b2757815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f23565b60608915612c06578b8581518110612b4157612b416153ff565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b6f88426156e9565b1190508080612b8f57506003836003811115612b8d57612b8d61423b565b145b612bb7576040516354e7e43160e11b81526001600160401b038d1660048201526024016107cb565b8c8681518110612bc957612bc96153ff565b602002602001015160000151600014612c00578c8681518110612bee57612bee6153ff565b60209081029190910101515160808501525b50612c72565b6000826003811115612c1a57612c1a61423b565b14612c7257825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f23565b8251608001516001600160401b031615612d4b576000826003811115612c9a57612c9a61423b565b03612d4b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612cfb93929190615bf0565b6020604051808303816000875af1158015612d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3e91906154e4565b612d4b5750505050612f23565b60008d604001518681518110612d6357612d636153ff565b6020026020010151905080518460a001515114612dad57835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107cb565b612dc18c85600001516060015160016136d1565b600080612dcf868486613776565b91509150612de68e876000015160600151846136d1565b8c15612e3d576003826003811115612e0057612e0061423b565b03612e3d576000856003811115612e1957612e1961423b565b14612e3d57855151604051632b11b8d960e01b81526107cb91908390600401615c1c565b6002826003811115612e5157612e5161423b565b14612e96576003826003811115612e6a57612e6a61423b565b14612e96578d866000015160600151836040516349362d1f60e11b81526004016107cb93929190615c35565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612eee57612eee6153ff565b602002602001015186865a612f03908f6156e9565b604051612f139493929190615c5a565b60405180910390a4505050505050505b600101612a5b565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd39190615c91565b90506001600160a01b038116158061300257506130006001600160a01b03821663aff2afbf60e01b611f87565b155b1561302b5760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107cb565b60008061304388858c6040015163ffffffff1661382a565b9150915060008060006130f66040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130c09190615cae565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b1790528786611388608461390d565b9250925092508261311c578160405163e1cd550960e01b81526004016107cb9190614053565b815160201461314b578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b6000828060200190518101906131619190615d7a565b9050866001600160a01b03168c6001600160a01b0316146131dd5760006131928d8a61318d868a6156e9565b61382a565b509050868110806131ac5750816131a988836156e9565b14155b156131db5760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107cb565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b600061321e826301ffc9a760e01b613256565b8015610b06575061324f827fffffffff00000000000000000000000000000000000000000000000000000000613256565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156132e1575060208210155b80156132ed5750600081115b979650505050505050565b600082600001828154811061330f5761330f6153ff565b9060005260206000200154905092915050565b60005b8151811015610d965760ff831660009081526003602052604081208351909190849084908110613357576133576153ff565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613325565b60005b8251811015610ab15760008382815181106133ab576133ab6153ff565b60200260200101519050600060028111156133c8576133c861423b565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156134075761340761423b565b14613428576004604051631b3fab5160e11b81526004016107cb9190615b08565b6001600160a01b03811661344f5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156134755761347561423b565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134d2576134d261423b565b02179055509050505080600101905061338e565b60ff81166105445760ff8082166000908152600260205260409020600101546201000090041661352957604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b600081815260018301602052604081205461358457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b06565b506000610b06565b8151805160608085015190830151608080870151940151604051600095869588956135f095919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136339190615e34565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136a28585856139e7565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136e0608085615712565b6001600160401b03166136f39190615738565b905060006137018585611d29565b905081613710600160046156e9565b901b1916818360038111156137275761372761423b565b6001600160401b03871660009081526009602052604081209190921b92909217918291613755608088615a81565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906137a390889088908890600401615ecb565b600060405180830381600087803b1580156137bd57600080fd5b505af19250505080156137ce575060015b61380d573d8080156137fc576040519150601f19603f3d011682016040523d82523d6000602084013e613801565b606091505b50600392509050613822565b50506040805160208101909152600081526002905b935093915050565b600080600080600061388b8860405160240161385591906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b1790528888611388608461390d565b925092509250826138b1578160405163e1cd550960e01b81526004016107cb9190614053565b60208251146138e0578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b818060200190518101906138f49190615d7a565b6138fe82886156e9565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561392f5761392f613d27565b6040519080825280601f01601f191660200182016040528015613959576020820181803683370190505b509150863b6139735763030ed58f60e21b60005260046000fd5b5a8581101561398d57632be8ca8b60e21b60005260046000fd5b85900360408104810387106139ad576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139d05750835b808352806000602085013e50955095509592505050565b8251825160009190818303613a0f57604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a2357506101018111155b613a40576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a6a576040516309bde33960e01b815260040160405180910390fd5b80600003613a975786600081518110613a8557613a856153ff565b60200260200101519350505050613c65565b6000816001600160401b03811115613ab157613ab1613d27565b604051908082528060200260200182016040528015613ada578160200160208202803683370190505b50905060008080805b85811015613c045760006001821b8b811603613b3e5788851015613b27578c5160018601958e918110613b1857613b186153ff565b60200260200101519050613b60565b8551600185019487918110613b1857613b186153ff565b8b5160018401938d918110613b5557613b556153ff565b602002602001015190505b600089861015613b90578d5160018701968f918110613b8157613b816153ff565b60200260200101519050613bb2565b8651600186019588918110613ba757613ba76153ff565b602002602001015190505b82851115613bd3576040516309bde33960e01b815260040160405180910390fd5b613bdd8282613c6c565b878481518110613bef57613bef6153ff565b60209081029190910101525050600101613ae3565b506001850382148015613c1657508683145b8015613c2157508581145b613c3e576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c5357613c536153ff565b60200260200101519750505050505050505b9392505050565b6000818310613c8457613c7f8284613c8a565b610b03565b610b0383835b604080516001602082015290810183905260608101829052600090608001613676565b828054828255906000526020600020908101928215613d02579160200282015b82811115613d0257825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613ccd565b50613d0e929150613d12565b5090565b5b80821115613d0e5760008155600101613d13565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d5f57613d5f613d27565b60405290565b60405160a081016001600160401b0381118282101715613d5f57613d5f613d27565b60405160c081016001600160401b0381118282101715613d5f57613d5f613d27565b604080519081016001600160401b0381118282101715613d5f57613d5f613d27565b604051601f8201601f191681016001600160401b0381118282101715613df357613df3613d27565b604052919050565b60006001600160401b03821115613e1457613e14613d27565b5060051b60200190565b6001600160a01b038116811461054457600080fd5b80356001600160401b0381168114613e4a57600080fd5b919050565b801515811461054457600080fd5b8035613e4a81613e4f565b60006001600160401b03821115613e8157613e81613d27565b50601f01601f191660200190565b600082601f830112613ea057600080fd5b8135613eb3613eae82613e68565b613dcb565b818152846020838601011115613ec857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613ef857600080fd5b82356001600160401b0380821115613f0f57600080fd5b818501915085601f830112613f2357600080fd5b8135613f31613eae82613dfb565b81815260059190911b83018401908481019088831115613f5057600080fd5b8585015b83811015613ff657803585811115613f6c5760008081fd5b86016080818c03601f1901811315613f845760008081fd5b613f8c613d3d565b89830135613f9981613e1e565b81526040613fa8848201613e33565b8b830152606080850135613fbb81613e4f565b83830152928401359289841115613fd457600091508182fd5b613fe28f8d86880101613e8f565b908301525085525050918601918601613f54565b5098975050505050505050565b60005b8381101561401e578181015183820152602001614006565b50506000910152565b6000815180845261403f816020860160208601614003565b601f01601f19169290920160200192915050565b602081526000610b036020830184614027565b8060608101831015610b0657600080fd5b60008083601f84011261408957600080fd5b5081356001600160401b038111156140a057600080fd5b6020830191508360208285010111156140b857600080fd5b9250929050565b60008083601f8401126140d157600080fd5b5081356001600160401b038111156140e857600080fd5b6020830191508360208260051b85010111156140b857600080fd5b60008060008060008060008060e0898b03121561411f57600080fd5b6141298a8a614066565b975060608901356001600160401b038082111561414557600080fd5b6141518c838d01614077565b909950975060808b013591508082111561416a57600080fd5b6141768c838d016140bf565b909750955060a08b013591508082111561418f57600080fd5b5061419c8b828c016140bf565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141ca57600080fd5b6141d48585614066565b925060608401356001600160401b038111156141ef57600080fd5b6141fb86828701614077565b9497909650939450505050565b6000806040838503121561421b57600080fd5b61422483613e33565b915061423260208401613e33565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106142615761426161423b565b9052565b60208101610b068284614251565b600060a0828403121561428557600080fd5b61428d613d65565b90508135815261429f60208301613e33565b60208201526142b060408301613e33565b60408201526142c160608301613e33565b60608201526142d260808301613e33565b608082015292915050565b8035613e4a81613e1e565b803563ffffffff81168114613e4a57600080fd5b600082601f83011261430d57600080fd5b8135602061431d613eae83613dfb565b82815260059290921b8401810191818101908684111561433c57600080fd5b8286015b8481101561440c5780356001600160401b03808211156143605760008081fd5b9088019060a0828b03601f190181131561437a5760008081fd5b614382613d65565b87840135838111156143945760008081fd5b6143a28d8a83880101613e8f565b8252506040808501356143b481613e1e565b828a015260606143c58682016142e8565b828401526080915081860135858111156143df5760008081fd5b6143ed8f8c838a0101613e8f565b9184019190915250919093013590830152508352918301918301614340565b509695505050505050565b6000610140828403121561442a57600080fd5b614432613d87565b905061443e8383614273565b815260a08201356001600160401b038082111561445a57600080fd5b61446685838601613e8f565b602084015260c084013591508082111561447f57600080fd5b61448b85838601613e8f565b604084015261449c60e085016142dd565b606084015261010084013560808401526101208401359150808211156144c157600080fd5b506144ce848285016142fc565b60a08301525092915050565b600082601f8301126144eb57600080fd5b813560206144fb613eae83613dfb565b82815260059290921b8401810191818101908684111561451a57600080fd5b8286015b8481101561440c5780356001600160401b0381111561453d5760008081fd5b61454b8986838b0101614417565b84525091830191830161451e565b600082601f83011261456a57600080fd5b8135602061457a613eae83613dfb565b82815260059290921b8401810191818101908684111561459957600080fd5b8286015b8481101561440c5780356001600160401b03808211156145bc57600080fd5b818901915089603f8301126145d057600080fd5b858201356145e0613eae82613dfb565b81815260059190911b830160400190878101908c83111561460057600080fd5b604085015b838110156146395780358581111561461c57600080fd5b61462b8f6040838a0101613e8f565b845250918901918901614605565b5087525050509284019250830161459d565b600082601f83011261465c57600080fd5b8135602061466c613eae83613dfb565b8083825260208201915060208460051b87010193508684111561468e57600080fd5b602086015b8481101561440c5780358352918301918301614693565b600082601f8301126146bb57600080fd5b813560206146cb613eae83613dfb565b82815260059290921b840181019181810190868411156146ea57600080fd5b8286015b8481101561440c5780356001600160401b038082111561470e5760008081fd5b9088019060a0828b03601f19018113156147285760008081fd5b614730613d65565b61473b888501613e33565b8152604080850135848111156147515760008081fd5b61475f8e8b838901016144da565b8a84015250606080860135858111156147785760008081fd5b6147868f8c838a0101614559565b83850152506080915081860135858111156147a15760008081fd5b6147af8f8c838a010161464b565b91840191909152509190930135908301525083529183019183016146ee565b600080604083850312156147e157600080fd5b6001600160401b03833511156147f657600080fd5b61480384843585016146aa565b91506001600160401b036020840135111561481d57600080fd5b6020830135830184601f82011261483357600080fd5b614840613eae8235613dfb565b81358082526020808301929160051b84010187101561485e57600080fd5b602083015b6020843560051b850101811015614a04576001600160401b038135111561488957600080fd5b87603f82358601011261489b57600080fd5b6148ae613eae6020833587010135613dfb565b81358501602081810135808452908301929160059190911b016040018a10156148d657600080fd5b604083358701015b83358701602081013560051b016040018110156149f4576001600160401b038135111561490a57600080fd5b833587018135016040818d03603f1901121561492557600080fd5b61492d613da9565b604082013581526001600160401b036060830135111561494c57600080fd5b8c605f60608401358401011261496157600080fd5b6040606083013583010135614978613eae82613dfb565b808282526020820191508f60608460051b606088013588010101111561499d57600080fd5b6060808601358601015b60608460051b6060880135880101018110156149d4576149c6816142e8565b8352602092830192016149a7565b5080602085015250505080855250506020830192506020810190506148de565b5084525060209283019201614863565b508093505050509250929050565b600080600080600060608688031215614a2a57600080fd5b85356001600160401b0380821115614a4157600080fd5b614a4d89838a01614417565b96506020880135915080821115614a6357600080fd5b614a6f89838a016140bf565b90965094506040880135915080821115614a8857600080fd5b50614a95888289016140bf565b969995985093965092949392505050565b600060608284031215614ab857600080fd5b604051606081018181106001600160401b0382111715614ada57614ada613d27565b6040528235614ae881613e1e565b8152614af6602084016142e8565b60208201526040830135614b0981613e1e565b60408201529392505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136c96080850182614027565b604080825283519082018190526000906020906060840190828701845b82811015614b9e5781516001600160401b031684529284019290840190600101614b79565b50505083810382850152845180825282820190600581901b8301840187850160005b83811015614bee57601f19868403018552614bdc838351614b15565b94870194925090860190600101614bc0565b50909998505050505050505050565b600060208284031215614c0f57600080fd5b81356001600160401b03811115614c2557600080fd5b820160a08185031215613c6557600080fd5b803560ff81168114613e4a57600080fd5b600060208284031215614c5a57600080fd5b610b0382614c37565b60008151808452602080850194506020840160005b83811015614c9d5781516001600160a01b031687529582019590820190600101614c78565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614cf760e0840182614c63565b90506040840151601f198483030160c0850152614d148282614c63565b95945050505050565b60008060408385031215614d3057600080fd5b614d3983613e33565b946020939093013593505050565b600060208284031215614d5957600080fd5b610b0382613e33565b602081526000610b036020830184614b15565b600060208284031215614d8757600080fd5b8135613c6581613e1e565b600082601f830112614da357600080fd5b81356020614db3613eae83613dfb565b8083825260208201915060208460051b870101935086841115614dd557600080fd5b602086015b8481101561440c578035614ded81613e1e565b8352918301918301614dda565b60006020808385031215614e0d57600080fd5b82356001600160401b0380821115614e2457600080fd5b818501915085601f830112614e3857600080fd5b8135614e46613eae82613dfb565b81815260059190911b83018401908481019088831115614e6557600080fd5b8585015b83811015613ff657803585811115614e8057600080fd5b860160c0818c03601f19011215614e975760008081fd5b614e9f613d87565b8882013581526040614eb2818401614c37565b8a8301526060614ec3818501614c37565b8284015260809150614ed6828501613e5d565b9083015260a08381013589811115614eee5760008081fd5b614efc8f8d83880101614d92565b838501525060c0840135915088821115614f165760008081fd5b614f248e8c84870101614d92565b9083015250845250918601918601614e69565b80356001600160e01b0381168114613e4a57600080fd5b600082601f830112614f5f57600080fd5b81356020614f6f613eae83613dfb565b82815260069290921b84018101918181019086841115614f8e57600080fd5b8286015b8481101561440c5760408189031215614fab5760008081fd5b614fb3613da9565b614fbc82613e33565b8152614fc9858301614f37565b81860152835291830191604001614f92565b600082601f830112614fec57600080fd5b81356020614ffc613eae83613dfb565b82815260059290921b8401810191818101908684111561501b57600080fd5b8286015b8481101561440c5780356001600160401b038082111561503f5760008081fd5b9088019060a0828b03601f19018113156150595760008081fd5b615061613d65565b61506c888501613e33565b8152604080850135848111156150825760008081fd5b6150908e8b83890101613e8f565b8a84015250606093506150a4848601613e33565b9082015260806150b5858201613e33565b9382019390935292013590820152835291830191830161501f565b600082601f8301126150e157600080fd5b813560206150f1613eae83613dfb565b82815260069290921b8401810191818101908684111561511057600080fd5b8286015b8481101561440c576040818903121561512d5760008081fd5b615135613da9565b813581528482013585820152835291830191604001615114565b6000602080838503121561516257600080fd5b82356001600160401b038082111561517957600080fd5b908401906080828703121561518d57600080fd5b615195613d3d565b8235828111156151a457600080fd5b830160408189038113156151b757600080fd5b6151bf613da9565b8235858111156151ce57600080fd5b8301601f81018b136151df57600080fd5b80356151ed613eae82613dfb565b81815260069190911b8201890190898101908d83111561520c57600080fd5b928a01925b8284101561525c5785848f0312156152295760008081fd5b615231613da9565b843561523c81613e1e565b8152615249858d01614f37565b818d0152825292850192908a0190615211565b84525050508287013591508482111561527457600080fd5b6152808a838501614f4e565b8188015283525050828401358281111561529957600080fd5b6152a588828601614fdb565b858301525060408301359350818411156152be57600080fd5b6152ca878585016150d0565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561537757601f19868403018952815160a06001600160401b0380835116865286830151828888015261533b83880182614027565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615303565b5090979650505050505050565b6001600160a01b0385168152600060206080818401526153a760808401876152e6565b83810360408581019190915286518083528388019284019060005b818110156153e7578451805184528601518684015293850193918301916001016153c2565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561546c57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615435565b50508583015187820388850152805180835290840192506000918401905b808310156154c557835180516001600160401b031683528501516001600160e01b03168583015292840192600192909201919085019061548a565b50979650505050505050565b602081526000610b036020830184615415565b6000602082840312156154f657600080fd5b8151613c6581613e4f565b600181811c9082168061551557607f821691505b60208210810361553557634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461554981615501565b600182811680156155615760018114615576576155a5565b60ff19841687528215158302870194506155a5565b8760005260208060002060005b8581101561559c5781548a820152908401908201615583565b50505082870194505b50929695505050505050565b600081546155be81615501565b8085526020600183811680156155db57600181146155f557615623565b60ff1985168884015283151560051b880183019550615623565b866000528260002060005b8581101561561b5781548a8201860152908301908401615600565b890184019650505b505050505092915050565b6040815260006156416040830185614027565b8281036020840152614d1481856155b1565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561568957615689615653565b5092915050565b6040815260006156a360408301856152e6565b8281036020840152614d148185615415565b6000602082840312156156c757600080fd5b81356001600160401b038111156156dd57600080fd5b6136c9848285016146aa565b81810381811115610b0657610b06615653565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061572c5761572c6156fc565b92169190910692915050565b8082028115828204841417610b0657610b06615653565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261578260a0870182614027565b90506060850151868203606088015261579b8282614027565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154c557835180516001600160a01b03168352860151868301529285019260019290920191908401906157be565b602081526000610b03602083018461574f565b608081526000615816608083018761574f565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561585457600080fd5b835161585f81613e4f565b60208501519093506001600160401b0381111561587b57600080fd5b8401601f8101861361588c57600080fd5b805161589a613eae82613e68565b8181528760208385010111156158af57600080fd5b6158c0826020830160208601614003565b809450505050604084015190509250925092565b601f821115610d96576000816000526020600020601f850160051c810160208610156158fd5750805b601f850160051c820191505b8181101561591c57828155600101615909565b505050505050565b81516001600160401b0381111561593d5761593d613d27565b6159518161594b8454615501565b846158d4565b602080601f831160018114615986576000841561596e5750858301515b600019600386901b1c1916600185901b17855561591c565b600085815260208120601f198616915b828110156159b557888601518255948401946001909101908401615996565b50858210156159d35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610b0360a08301600185016155b1565b80820180821115610b0657610b06615653565b60ff8181168382160190811115610b0657610b06615653565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615a9b57615a9b6156fc565b92169190910492915050565b600060208284031215615ab957600080fd5b610b03826142e8565b6000808335601e19843603018112615ad957600080fd5b8301803591506001600160401b03821115615af357600080fd5b6020019150368190038213156140b857600080fd5b6020810160068310615b1c57615b1c61423b565b91905290565b60ff818116838216029081169081811461568957615689615653565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b965784546001600160a01b031683526001948501949284019201615b71565b50508481036060860152865180825290820192508187019060005b81811015615bd65782516001600160a01b031685529383019391830191600101615bb1565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614d146060830184614027565b8281526040602082015260006136c96040830184614027565b6001600160401b03848116825283166020820152606081016136c96040830184614251565b848152615c6a6020820185614251565b608060408201526000615c806080830185614027565b905082606083015295945050505050565b600060208284031215615ca357600080fd5b8151613c6581613e1e565b6020815260008251610100806020850152615ccd610120850183614027565b91506020850151615ce960408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d2360a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d408483614027565b935060c08701519150808685030160e0870152615d5d8483614027565b935060e0870151915080868503018387015250615be68382614027565b600060208284031215615d8c57600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561537757601f19868403018952815160a08151818652615dd682870182614027565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615e128382614027565b6080948501519790940196909652505098840198925090830190600101615db0565b602081526000610b036020830184615d93565b60008282518085526020808601955060208260051b8401016020860160005b8481101561537757601f19868403018952615e82838351614027565b98840198925090830190600101615e66565b60008151808452602080850194506020840160005b83811015614c9d57815163ffffffff1687529582019590820190600101615ea9565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f336101a0850183614027565b91506040870151605f198086850301610120870152615f528483614027565b935060608901519150615f6f838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f988282615d93565b9150508281036020840152615fad8186615e47565b90508281036040840152615be68185615e9456fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.ABI @@ -314,25 +314,26 @@ func (_OffRamp *OffRampCallerSession) CcipReceive(arg0 ClientAny2EVMMessage) err return _OffRamp.Contract.CcipReceive(&_OffRamp.CallOpts, arg0) } -func (_OffRamp *OffRampCaller) GetAllSourceChainConfig(opts *bind.CallOpts) ([]OffRampSourceChainConfig, error) { +func (_OffRamp *OffRampCaller) GetAllSourceChainConfig(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) { var out []interface{} err := _OffRamp.contract.Call(opts, &out, "getAllSourceChainConfig") if err != nil { - return *new([]OffRampSourceChainConfig), err + return *new([]uint64), *new([]OffRampSourceChainConfig), err } - out0 := *abi.ConvertType(out[0], new([]OffRampSourceChainConfig)).(*[]OffRampSourceChainConfig) + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + out1 := *abi.ConvertType(out[1], new([]OffRampSourceChainConfig)).(*[]OffRampSourceChainConfig) - return out0, err + return out0, out1, err } -func (_OffRamp *OffRampSession) GetAllSourceChainConfig() ([]OffRampSourceChainConfig, error) { +func (_OffRamp *OffRampSession) GetAllSourceChainConfig() ([]uint64, []OffRampSourceChainConfig, error) { return _OffRamp.Contract.GetAllSourceChainConfig(&_OffRamp.CallOpts) } -func (_OffRamp *OffRampCallerSession) GetAllSourceChainConfig() ([]OffRampSourceChainConfig, error) { +func (_OffRamp *OffRampCallerSession) GetAllSourceChainConfig() ([]uint64, []OffRampSourceChainConfig, error) { return _OffRamp.Contract.GetAllSourceChainConfig(&_OffRamp.CallOpts) } @@ -2479,7 +2480,7 @@ func (_OffRamp *OffRamp) Address() common.Address { type OffRampInterface interface { CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error - GetAllSourceChainConfig(opts *bind.CallOpts) ([]OffRampSourceChainConfig, error) + GetAllSourceChainConfig(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, 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 8a2b065494..bd0756f08a 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 @@ -23,7 +23,7 @@ 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 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 0b8c19d3dc18bae2859e7c8c4b52b97f6de1a849400cb713662cd9cedb22fdd4 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 7b95f8ea28863272e075c3e7aeef2c2600a8bddd48a2a4c21ff21402d72f6f57 onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 4f29f05261bdaf9b99e675c1169c0d5cba841b6dd7ca3a8997cc0d3cae7ba850 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin e7781d600c1bb7aa4620106af7f6e146a109b97f4cb6a7d06c9e15773340ecb2 From 1d42a4ab7a832f4fdaab7b5f43f266f76e511cc3 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Wed, 2 Oct 2024 21:01:01 +0530 Subject: [PATCH 07/10] moving add instruction post sanity Signed-off-by: 0xsuryansh --- contracts/gas-snapshots/ccip.gas-snapshot | 34 ++++++++++----------- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 3 +- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 184e2a2b91..573c310525 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -610,16 +610,16 @@ OCR2Base_transmit:test_Transmit2SignersSuccess_gas() (gas: 51689) OCR2Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 23511) OCR2Base_transmit:test_UnauthorizedSigner_Revert() (gas: 39707) OCR2Base_transmit:test_WrongNumberOfSignatures_Revert() (gas: 20584) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5915989) -OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626169) -OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166511) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5913989) +OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626106) +OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166490) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16763) -OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 272499) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 168614) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 181069) -OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 80266) -OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 206352) -OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 62422) +OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 272148) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 168572) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 181027) +OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13463) +OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 72746) +OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15519) OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177947) OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 335550) OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 278816) @@ -634,8 +634,8 @@ OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 64099) OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68173) OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291) OffRamp_commit:test_InvalidRootRevert() (gas: 63356) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6676780) -OffRamp_commit:test_NoConfig_Revert() (gas: 6260452) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6674717) +OffRamp_commit:test_NoConfig_Revert() (gas: 6258389) OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113042) OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121403) OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113063) @@ -649,23 +649,23 @@ OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125409) OffRamp_commit:test_Unhealthy_Revert() (gas: 58633) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206778) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) -OffRamp_constructor:test_Constructor_Success() (gas: 6221879) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 182841) +OffRamp_constructor:test_Constructor_Success() (gas: 6219847) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 135943) OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103375) OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101269) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 228266) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 161468) OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101189) OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101227) OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) OffRamp_execute:test_LargeBatch_Success() (gas: 3425675) OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372967) OffRamp_execute:test_MultipleReports_Success() (gas: 300913) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7085653) -OffRamp_execute:test_NoConfig_Revert() (gas: 6310128) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7083590) +OffRamp_execute:test_NoConfig_Revert() (gas: 6308065) OffRamp_execute:test_NonArray_Revert() (gas: 27562) OffRamp_execute:test_SingleReport_Success() (gas: 176332) OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148350) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7088402) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7086339) OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18511) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244057) diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 49a085d7ff..0f991b7073 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -948,7 +948,6 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { for (uint256 i = 0; i < sourceChainConfigUpdates.length; ++i) { SourceChainConfigArgs memory sourceConfigUpdate = sourceChainConfigUpdates[i]; uint64 sourceChainSelector = sourceConfigUpdate.sourceChainSelector; - s_sourceChainSelectors.add(sourceChainSelector); if (sourceChainSelector == 0) { revert ZeroChainSelectorNotAllowed(); @@ -980,6 +979,8 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { currentConfig.isEnabled = sourceConfigUpdate.isEnabled; currentConfig.router = sourceConfigUpdate.router; + s_sourceChainSelectors.add(sourceChainSelector); + emit SourceChainConfigSet(sourceChainSelector, currentConfig); } } From c0a0d45f6f416dd3ef4f81b2d40a58299d26c4b8 Mon Sep 17 00:00:00 2001 From: "app-token-issuer-infra-releng[bot]" <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 15:37:27 +0000 Subject: [PATCH 08/10] Update gethwrappers --- core/gethwrappers/ccip/generated/offramp/offramp.go | 2 +- .../generated-wrapper-dependency-versions-do-not-edit.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 6f79d8fdfd..fbafc71571 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -155,7 +155,7 @@ type OffRampStaticConfig struct { var OffRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"getAllSourceChainConfig\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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.ExecutionReportSingleChain[]\",\"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: "0x6101206040523480156200001257600080fd5b5060405162006c5138038062006c51833981016040819052620000359162000886565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0d565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d1576000828281518110620003915762000391620009c3565b60209081029190910181015190810151909150620003ba60066001600160401b038316620005d5565b50806001600160401b0316600003620003e65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200040f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200043d90620009d9565b9050600003620004a0578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004df565b8154600160a81b90046001600160401b0316600114620004df57604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620005155750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000544828262000a6a565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b90620005b990859062000b36565b60405180910390a25050505080600101905062000370565b5050565b6000620005e38383620005ec565b90505b92915050565b60008181526001830160205260408120546200063557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e6565b506000620005e6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067957620006796200063e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006aa57620006aa6200063e565b604052919050565b80516001600160401b0381168114620006ca57600080fd5b919050565b6001600160a01b0381168114620006e557600080fd5b50565b6000601f83601f840112620006fc57600080fd5b825160206001600160401b03808311156200071b576200071b6200063e565b8260051b6200072c8382016200067f565b93845286810183019383810190898611156200074757600080fd5b84890192505b858310156200087957825184811115620007675760008081fd5b89016080601f19828d038101821315620007815760008081fd5b6200078b62000654565b888401516200079a81620006cf565b81526040620007ab858201620006b2565b8a8301526060808601518015158114620007c55760008081fd5b83830152938501519389851115620007dd5760008081fd5b84860195508f603f870112620007f557600094508485fd5b8a8601519450898511156200080e576200080e6200063e565b6200081f8b858f880116016200067f565b93508484528f82868801011115620008375760008081fd5b60005b8581101562000857578681018301518582018d01528b016200083a565b5060009484018b0194909452509182015283525091840191908401906200074d565b9998505050505050505050565b60008060008385036101008112156200089e57600080fd5b6080811215620008ad57600080fd5b620008b762000654565b620008c286620006b2565b81526020860151620008d481620006cf565b60208201526040860151620008e981620006cf565b60408201526060860151620008fe81620006cf565b606082810191909152909450607f19820112156200091b57600080fd5b50604051606081016001600160401b0380821183831017156200094257620009426200063e565b81604052608087015191506200095882620006cf565b90825260a08601519063ffffffff821682146200097457600080fd5b81602084015260c087015191506200098c82620006cf565b6040830182905260e087015192945080831115620009a957600080fd5b5050620009b986828701620006e8565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ee57607f821691505b60208210810362000a0f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a65576000816000526020600020601f850160051c8101602086101562000a405750805b601f850160051c820191505b8181101562000a615782815560010162000a4c565b5050505b505050565b81516001600160401b0381111562000a865762000a866200063e565b62000a9e8162000a978454620009d9565b8462000a15565b602080601f83116001811462000ad6576000841562000abd5750858301515b600019600386901b1c1916600185901b17855562000a61565b600085815260208120601f198616915b8281101562000b075788860151825594840194600190910190840162000ae6565b508582101562000b265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8b81620009d9565b8060a089015260c0600183166000811462000baf576001811462000bcc5762000bfe565b60ff19841660c08b015260c083151560051b8b0101945062000bfe565b85600052602060002060005b8481101562000bf55781548c820185015290880190890162000bd8565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fce62000c83600039600081816102470152612ca10152600081816102180152612f660152600081816101e9015281816105890152818161073b01526126620152600081816101ba01526128a1015260008181611d710152611da40152615fce6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80637437ff9f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ed578063f2fde38b1461050d578063f716f99f1461052057600080fd5b8063c673e58414610489578063ccd37ba3146104a957600080fd5b806383503786116100b2578063835037861461044a57806385572ffb146104605780638da5cb5b1461046e57600080fd5b80637437ff9f146103b057806379ba50971461044257600080fd5b80633f4b04aa116101245780635e7bb008116101095780635e7bb0081461037757806360987c201461038a5780636f9e320f1461039d57600080fd5b80633f4b04aa1461033c5780635e36480c1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613ee5565b610533565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190614053565b610184610324366004614103565b610547565b6101846103373660046141b5565b610a4e565b600b546040516001600160401b0390911681526020016102c4565b61036a610365366004614208565b610ab7565b6040516102c49190614265565b6101846103853660046147ce565b610b0c565b610184610398366004614a12565b610d9b565b6101846103ab366004614aa6565b61107b565b61040c604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b61018461108c565b61045261113d565b6040516102c4929190614b5c565b61018461016c366004614bfd565b6000546040516001600160a01b0390911681526020016102c4565b61049c610497366004614c48565b611398565b6040516102c49190614ca8565b6104df6104b7366004614d1d565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6105006104fb366004614d47565b6114f6565b6040516102c49190614d62565b61018461051b366004614d75565b611602565b61018461052e366004614dfa565b611613565b61053b611655565b610544816116b1565b50565b60006105558789018961514f565b602081015151909150156105f257602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c1933093909190600401615384565b60006040518083038186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050505b8051515115158061060857508051602001515115155b156106d457600b5460208a0135906001600160401b03808316911610156106ac57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106759291016154d1565b600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106d2565b8160200151516000036106d257604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098f576000826020015182815181106106fc576106fc6153ff565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a691906154e4565b156107d457604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107df82611922565b9050806001016040516107f2919061553b565b60405180910390208360200151805190602001201461082f5782602001518160010160405163b80d8fa960e01b81526004016107cb92919061562e565b60408301518154600160a81b90046001600160401b039081169116141580610870575082606001516001600160401b031683604001516001600160401b0316115b156108b557825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107cb565b6080830151806108d85760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109305783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107cb565b6060840151610940906001615669565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d7565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c7929091615690565b60405180910390a1610a4360008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b925061196e915050565b505050505050505050565b610a8e610a5d828401846156b5565b6040805160008082526020820190925290610a88565b6060815260200190600190039081610a735790505b50611c67565b604080516000808252602082019092529050610ab160018585858586600061196e565b50505050565b6000610ac5600160046156e9565b6002610ad2608085615712565b6001600160401b0316610ae59190615738565b610aef8585611d29565b901c166003811115610b0357610b0361423b565b90505b92915050565b610b14611d6e565b815181518114610b37576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d8b576000848281518110610b5657610b566153ff565b60200260200101519050600081602001515190506000858481518110610b7e57610b7e6153ff565b6020026020010151905080518214610ba9576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d7c576000828281518110610bc857610bc86153ff565b6020026020010151600001519050600085602001518381518110610bee57610bee6153ff565b6020026020010151905081600014610c42578060800151821015610c42578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107cb565b838381518110610c5457610c546153ff565b602002602001015160200151518160a001515114610ca157805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107cb565b60005b8160a0015151811015610d6e576000858581518110610cc557610cc56153ff565b6020026020010151602001518281518110610ce257610ce26153ff565b602002602001015163ffffffff16905080600014610d655760008360a001518381518110610d1257610d126153ff565b60200260200101516040015163ffffffff16905080821015610d63578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107cb565b505b50600101610ca4565b505050806001019050610bac565b50505050806001019050610b3a565b50610d968383611c67565b505050565b333014610dbb576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610df8565b6040805180820190915260008082526020820152815260200190600190039081610dd15790505b5060a08701515190915015610e2e57610e2b8660a001518760200151886060015189600001516020015189898989611dd6565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e69929101614053565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f44576040516308d450a160e01b81526001600160a01b038216906308d450a190610eca9085906004016157f0565b600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f44573d808015610f23576040519150601f19603f3d011682016040523d82523d6000602084013e610f28565b606091505b50806040516309c2532560e01b81526004016107cb9190614053565b604088015151158015610f5957506080880151155b80610f70575060608801516001600160a01b03163b155b80610f9757506060880151610f95906001600160a01b03166385572ffb60e01b611f87565b155b15610fa457505050611074565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf97983926110029289926113889291600401615803565b6000604051808303816000875af1158015611021573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611049919081019061583f565b50915091508161106e57806040516302a35ba360e21b81526004016107cb9190614053565b50505050505b5050505050565b611083611655565b61054481611fa3565b6001546001600160a01b031633146110e65760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107cb565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b606080600061114c6006612082565b6001600160401b0381111561116357611163613d27565b6040519080825280602002602001820160405280156111b457816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816111815790505b50905060006111c36006612082565b6001600160401b038111156111da576111da613d27565b604051908082528060200260200182016040528015611203578160200160208202803683370190505b50905060005b6112136006612082565b81101561138f5761122560068261208c565b828281518110611237576112376153ff565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061126d5761126d6153ff565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b909204909316918101919091526001820180549192916060840191906112e890615501565b80601f016020809104026020016040519081016040528092919081815260200182805461131490615501565b80156113615780601f1061133657610100808354040283529160200191611361565b820191906000526020600020905b81548152906001019060200180831161134457829003601f168201915b50505050508152505083828151811061137c5761137c6153ff565b6020908102919091010152600101611209565b50939092509050565b6113db6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561148457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611466575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114e657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114c8575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161158290615501565b80601f01602080910402602001604051908101604052809291908181526020018280546115ae90615501565b80156114e65780601f106115d0576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116115de57505050919092525091949350505050565b61160a611655565b61054481612098565b61161b611655565b60005b81518110156116515761164982828151811061163c5761163c6153ff565b6020026020010151612141565b60010161161e565b5050565b6000546001600160a01b031633146116af5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107cb565b565b60005b81518110156116515760008282815181106116d1576116d16153ff565b60200260200101519050600081602001519050611701816001600160401b0316600661246b90919063ffffffff16565b50806001600160401b031660000361172c5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611754576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461178090615501565b90506000036117e257815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a161181f565b8154600160a81b90046001600160401b031660011461181f57604051632105803760e11b81526001600160401b03841660048201526024016107cb565b805115806118545750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611872576040516342bcdf7f60e11b815260040160405180910390fd5b600182016118808282615924565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b9061190b9085906159e3565b60405180910390a2505050508060010190506116b4565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610b065760405163ed053c5960e01b81526001600160401b03841660048201526024016107cb565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119cd8760a4615a31565b9050826060015115611a155784516119e6906020615738565b86516119f3906020615738565b6119fe9060a0615a31565b611a089190615a31565b611a129082615a31565b90505b368114611a3e57604051638e1192e160e01b8152600481018290523660248201526044016107cb565b5081518114611a6d5781516040516324f7d61360e21b81526004810191909152602481018290526044016107cb565b611a75611d6e565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ac357611ac361423b565b6002811115611ad457611ad461423b565b9052509050600281602001516002811115611af157611af161423b565b148015611b455750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b2d57611b2d6153ff565b6000918252602090912001546001600160a01b031633145b611b6257604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611c12576020820151611b7d906001615a44565b60ff16855114611ba0576040516371253a2560e01b815260040160405180910390fd5b8351855114611bc25760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611bd4929190615a5d565b604051908190038120611beb918b90602001615a6d565b604051602081830303815290604052805190602001209050611c108a82888888612477565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c885760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611ccb565b604080518082019091526000815260606020820152815260200190600190039081611ca35790505b50905060005b845181101561107457611d21858281518110611cef57611cef6153ff565b602002602001015184611d1b57858381518110611d0e57611d0e6153ff565b6020026020010151612634565b83612634565b600101611cd1565b6001600160401b038216600090815260096020526040812081611d4d608085615a81565b6001600160401b031681526020810191909152604001600020549392505050565b467f0000000000000000000000000000000000000000000000000000000000000000146116af57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107cb565b606088516001600160401b03811115611df157611df1613d27565b604051908082528060200260200182016040528015611e3657816020015b6040805180820190915260008082526020820152815260200190600190039081611e0f5790505b509050811560005b8a51811015611f795781611ed657848482818110611e5e57611e5e6153ff565b9050602002016020810190611e739190615aa7565b63ffffffff1615611ed657848482818110611e9057611e906153ff565b9050602002016020810190611ea59190615aa7565b8b8281518110611eb757611eb76153ff565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f548b8281518110611eeb57611eeb6153ff565b60200260200101518b8b8b8b8b87818110611f0857611f086153ff565b9050602002810190611f1a9190615ac2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f2b92505050565b838281518110611f6657611f666153ff565b6020908102919091010152600101611e3e565b505098975050505050505050565b6000611f928361320b565b8015610b035750610b038383613256565b80516001600160a01b0316611fcb576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b6000610b06825490565b6000610b0383836132f8565b336001600160a01b038216036120f05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107cb565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361216c576000604051631b3fab5160e11b81526004016107cb9190615b08565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121bd576060840151600182018054911515620100000262ff0000199092169190911790556121f9565b6060840151600182015460ff62010000909104161515901515146121f9576040516321fd80df60e21b815260ff841660048201526024016107cb565b60a084015180516101001015612225576001604051631b3fab5160e11b81526004016107cb9190615b08565b805160000361224a576005604051631b3fab5160e11b81526004016107cb9190615b08565b6122b084846003018054806020026020016040519081016040528092919081815260200182805480156122a657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612288575b5050505050613322565b8460600151156123e05761231e84846002018054806020026020016040519081016040528092919081815260200182805480156122a6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612288575050505050613322565b60808501518051610100101561234a576002604051631b3fab5160e11b81526004016107cb9190615b08565b604086015161235a906003615b22565b60ff16815111612380576003604051631b3fab5160e11b81526004016107cb9190615b08565b8151815110156123a6576001604051631b3fab5160e11b81526004016107cb9190615b08565b805160018401805461ff00191661010060ff8416021790556123d19060028601906020840190613cad565b506123de8582600161338b565b505b6123ec8482600261338b565b80516124019060038501906020840190613cad565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361245a9389939260028a01929190615b3e565b60405180910390a1611074846134e6565b6000610b03838361353d565b8251600090815b8181101561262a57600060018886846020811061249d5761249d6153ff565b6124aa91901a601b615a44565b8985815181106124bc576124bc6153ff565b60200260200101518986815181106124d6576124d66153ff565b602002602001015160405160008152602001604052604051612514949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612536573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156125975761259761423b565b60028111156125a8576125a861423b565b90525090506001816020015160028111156125c5576125c561423b565b146125e357604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561260d57604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b85179450505080600101905061247e565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156126b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d591906154e4565b1561274657801561270457604051637edeb53960e11b81526001600160401b03831660048201526024016107cb565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061275183611922565b600101805461275f90615501565b80601f016020809104026020016040519081016040528092919081815260200182805461278b90615501565b80156127d85780601f106127ad576101008083540402835291602001916127d8565b820191906000526020600020905b8154815290600101906020018083116127bb57829003601f168201915b505050602088015151929350505060008190036128075760405162bf199760e01b815260040160405180910390fd5b856040015151811461282c576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561284657612846613d27565b60405190808252806020026020018201604052801561286f578160200160208202803683370190505b50905060005b82811015612a1357600088602001518281518110612895576128956153ff565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461290c5780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107cb565b866001600160401b03168160000151602001516001600160401b03161461296057805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107cb565b6129ed817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129d294939291909384526001600160401b03928316602085015291166040830152606082015260800190565b6040516020818303038152906040528051906020012061358c565b8383815181106129ff576129ff6153ff565b602090810291909101015250600101612875565b506000612a2a86838a606001518b60800151613694565b905080600003612a5857604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107cb565b60005b83811015610a435760005a905060008a602001518381518110612a8057612a806153ff565b602002602001015190506000612a9e8a836000015160600151610ab7565b90506000816003811115612ab457612ab461423b565b1480612ad157506003816003811115612acf57612acf61423b565b145b612b2757815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f23565b60608915612c06578b8581518110612b4157612b416153ff565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b6f88426156e9565b1190508080612b8f57506003836003811115612b8d57612b8d61423b565b145b612bb7576040516354e7e43160e11b81526001600160401b038d1660048201526024016107cb565b8c8681518110612bc957612bc96153ff565b602002602001015160000151600014612c00578c8681518110612bee57612bee6153ff565b60209081029190910101515160808501525b50612c72565b6000826003811115612c1a57612c1a61423b565b14612c7257825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f23565b8251608001516001600160401b031615612d4b576000826003811115612c9a57612c9a61423b565b03612d4b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612cfb93929190615bf0565b6020604051808303816000875af1158015612d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3e91906154e4565b612d4b5750505050612f23565b60008d604001518681518110612d6357612d636153ff565b6020026020010151905080518460a001515114612dad57835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107cb565b612dc18c85600001516060015160016136d1565b600080612dcf868486613776565b91509150612de68e876000015160600151846136d1565b8c15612e3d576003826003811115612e0057612e0061423b565b03612e3d576000856003811115612e1957612e1961423b565b14612e3d57855151604051632b11b8d960e01b81526107cb91908390600401615c1c565b6002826003811115612e5157612e5161423b565b14612e96576003826003811115612e6a57612e6a61423b565b14612e96578d866000015160600151836040516349362d1f60e11b81526004016107cb93929190615c35565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612eee57612eee6153ff565b602002602001015186865a612f03908f6156e9565b604051612f139493929190615c5a565b60405180910390a4505050505050505b600101612a5b565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd39190615c91565b90506001600160a01b038116158061300257506130006001600160a01b03821663aff2afbf60e01b611f87565b155b1561302b5760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107cb565b60008061304388858c6040015163ffffffff1661382a565b9150915060008060006130f66040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130c09190615cae565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b1790528786611388608461390d565b9250925092508261311c578160405163e1cd550960e01b81526004016107cb9190614053565b815160201461314b578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b6000828060200190518101906131619190615d7a565b9050866001600160a01b03168c6001600160a01b0316146131dd5760006131928d8a61318d868a6156e9565b61382a565b509050868110806131ac5750816131a988836156e9565b14155b156131db5760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107cb565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b600061321e826301ffc9a760e01b613256565b8015610b06575061324f827fffffffff00000000000000000000000000000000000000000000000000000000613256565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156132e1575060208210155b80156132ed5750600081115b979650505050505050565b600082600001828154811061330f5761330f6153ff565b9060005260206000200154905092915050565b60005b8151811015610d965760ff831660009081526003602052604081208351909190849084908110613357576133576153ff565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613325565b60005b8251811015610ab15760008382815181106133ab576133ab6153ff565b60200260200101519050600060028111156133c8576133c861423b565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156134075761340761423b565b14613428576004604051631b3fab5160e11b81526004016107cb9190615b08565b6001600160a01b03811661344f5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156134755761347561423b565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134d2576134d261423b565b02179055509050505080600101905061338e565b60ff81166105445760ff8082166000908152600260205260409020600101546201000090041661352957604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b600081815260018301602052604081205461358457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b06565b506000610b06565b8151805160608085015190830151608080870151940151604051600095869588956135f095919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136339190615e34565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136a28585856139e7565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136e0608085615712565b6001600160401b03166136f39190615738565b905060006137018585611d29565b905081613710600160046156e9565b901b1916818360038111156137275761372761423b565b6001600160401b03871660009081526009602052604081209190921b92909217918291613755608088615a81565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906137a390889088908890600401615ecb565b600060405180830381600087803b1580156137bd57600080fd5b505af19250505080156137ce575060015b61380d573d8080156137fc576040519150601f19603f3d011682016040523d82523d6000602084013e613801565b606091505b50600392509050613822565b50506040805160208101909152600081526002905b935093915050565b600080600080600061388b8860405160240161385591906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b1790528888611388608461390d565b925092509250826138b1578160405163e1cd550960e01b81526004016107cb9190614053565b60208251146138e0578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b818060200190518101906138f49190615d7a565b6138fe82886156e9565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561392f5761392f613d27565b6040519080825280601f01601f191660200182016040528015613959576020820181803683370190505b509150863b6139735763030ed58f60e21b60005260046000fd5b5a8581101561398d57632be8ca8b60e21b60005260046000fd5b85900360408104810387106139ad576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139d05750835b808352806000602085013e50955095509592505050565b8251825160009190818303613a0f57604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a2357506101018111155b613a40576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a6a576040516309bde33960e01b815260040160405180910390fd5b80600003613a975786600081518110613a8557613a856153ff565b60200260200101519350505050613c65565b6000816001600160401b03811115613ab157613ab1613d27565b604051908082528060200260200182016040528015613ada578160200160208202803683370190505b50905060008080805b85811015613c045760006001821b8b811603613b3e5788851015613b27578c5160018601958e918110613b1857613b186153ff565b60200260200101519050613b60565b8551600185019487918110613b1857613b186153ff565b8b5160018401938d918110613b5557613b556153ff565b602002602001015190505b600089861015613b90578d5160018701968f918110613b8157613b816153ff565b60200260200101519050613bb2565b8651600186019588918110613ba757613ba76153ff565b602002602001015190505b82851115613bd3576040516309bde33960e01b815260040160405180910390fd5b613bdd8282613c6c565b878481518110613bef57613bef6153ff565b60209081029190910101525050600101613ae3565b506001850382148015613c1657508683145b8015613c2157508581145b613c3e576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c5357613c536153ff565b60200260200101519750505050505050505b9392505050565b6000818310613c8457613c7f8284613c8a565b610b03565b610b0383835b604080516001602082015290810183905260608101829052600090608001613676565b828054828255906000526020600020908101928215613d02579160200282015b82811115613d0257825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613ccd565b50613d0e929150613d12565b5090565b5b80821115613d0e5760008155600101613d13565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d5f57613d5f613d27565b60405290565b60405160a081016001600160401b0381118282101715613d5f57613d5f613d27565b60405160c081016001600160401b0381118282101715613d5f57613d5f613d27565b604080519081016001600160401b0381118282101715613d5f57613d5f613d27565b604051601f8201601f191681016001600160401b0381118282101715613df357613df3613d27565b604052919050565b60006001600160401b03821115613e1457613e14613d27565b5060051b60200190565b6001600160a01b038116811461054457600080fd5b80356001600160401b0381168114613e4a57600080fd5b919050565b801515811461054457600080fd5b8035613e4a81613e4f565b60006001600160401b03821115613e8157613e81613d27565b50601f01601f191660200190565b600082601f830112613ea057600080fd5b8135613eb3613eae82613e68565b613dcb565b818152846020838601011115613ec857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613ef857600080fd5b82356001600160401b0380821115613f0f57600080fd5b818501915085601f830112613f2357600080fd5b8135613f31613eae82613dfb565b81815260059190911b83018401908481019088831115613f5057600080fd5b8585015b83811015613ff657803585811115613f6c5760008081fd5b86016080818c03601f1901811315613f845760008081fd5b613f8c613d3d565b89830135613f9981613e1e565b81526040613fa8848201613e33565b8b830152606080850135613fbb81613e4f565b83830152928401359289841115613fd457600091508182fd5b613fe28f8d86880101613e8f565b908301525085525050918601918601613f54565b5098975050505050505050565b60005b8381101561401e578181015183820152602001614006565b50506000910152565b6000815180845261403f816020860160208601614003565b601f01601f19169290920160200192915050565b602081526000610b036020830184614027565b8060608101831015610b0657600080fd5b60008083601f84011261408957600080fd5b5081356001600160401b038111156140a057600080fd5b6020830191508360208285010111156140b857600080fd5b9250929050565b60008083601f8401126140d157600080fd5b5081356001600160401b038111156140e857600080fd5b6020830191508360208260051b85010111156140b857600080fd5b60008060008060008060008060e0898b03121561411f57600080fd5b6141298a8a614066565b975060608901356001600160401b038082111561414557600080fd5b6141518c838d01614077565b909950975060808b013591508082111561416a57600080fd5b6141768c838d016140bf565b909750955060a08b013591508082111561418f57600080fd5b5061419c8b828c016140bf565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141ca57600080fd5b6141d48585614066565b925060608401356001600160401b038111156141ef57600080fd5b6141fb86828701614077565b9497909650939450505050565b6000806040838503121561421b57600080fd5b61422483613e33565b915061423260208401613e33565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106142615761426161423b565b9052565b60208101610b068284614251565b600060a0828403121561428557600080fd5b61428d613d65565b90508135815261429f60208301613e33565b60208201526142b060408301613e33565b60408201526142c160608301613e33565b60608201526142d260808301613e33565b608082015292915050565b8035613e4a81613e1e565b803563ffffffff81168114613e4a57600080fd5b600082601f83011261430d57600080fd5b8135602061431d613eae83613dfb565b82815260059290921b8401810191818101908684111561433c57600080fd5b8286015b8481101561440c5780356001600160401b03808211156143605760008081fd5b9088019060a0828b03601f190181131561437a5760008081fd5b614382613d65565b87840135838111156143945760008081fd5b6143a28d8a83880101613e8f565b8252506040808501356143b481613e1e565b828a015260606143c58682016142e8565b828401526080915081860135858111156143df5760008081fd5b6143ed8f8c838a0101613e8f565b9184019190915250919093013590830152508352918301918301614340565b509695505050505050565b6000610140828403121561442a57600080fd5b614432613d87565b905061443e8383614273565b815260a08201356001600160401b038082111561445a57600080fd5b61446685838601613e8f565b602084015260c084013591508082111561447f57600080fd5b61448b85838601613e8f565b604084015261449c60e085016142dd565b606084015261010084013560808401526101208401359150808211156144c157600080fd5b506144ce848285016142fc565b60a08301525092915050565b600082601f8301126144eb57600080fd5b813560206144fb613eae83613dfb565b82815260059290921b8401810191818101908684111561451a57600080fd5b8286015b8481101561440c5780356001600160401b0381111561453d5760008081fd5b61454b8986838b0101614417565b84525091830191830161451e565b600082601f83011261456a57600080fd5b8135602061457a613eae83613dfb565b82815260059290921b8401810191818101908684111561459957600080fd5b8286015b8481101561440c5780356001600160401b03808211156145bc57600080fd5b818901915089603f8301126145d057600080fd5b858201356145e0613eae82613dfb565b81815260059190911b830160400190878101908c83111561460057600080fd5b604085015b838110156146395780358581111561461c57600080fd5b61462b8f6040838a0101613e8f565b845250918901918901614605565b5087525050509284019250830161459d565b600082601f83011261465c57600080fd5b8135602061466c613eae83613dfb565b8083825260208201915060208460051b87010193508684111561468e57600080fd5b602086015b8481101561440c5780358352918301918301614693565b600082601f8301126146bb57600080fd5b813560206146cb613eae83613dfb565b82815260059290921b840181019181810190868411156146ea57600080fd5b8286015b8481101561440c5780356001600160401b038082111561470e5760008081fd5b9088019060a0828b03601f19018113156147285760008081fd5b614730613d65565b61473b888501613e33565b8152604080850135848111156147515760008081fd5b61475f8e8b838901016144da565b8a84015250606080860135858111156147785760008081fd5b6147868f8c838a0101614559565b83850152506080915081860135858111156147a15760008081fd5b6147af8f8c838a010161464b565b91840191909152509190930135908301525083529183019183016146ee565b600080604083850312156147e157600080fd5b6001600160401b03833511156147f657600080fd5b61480384843585016146aa565b91506001600160401b036020840135111561481d57600080fd5b6020830135830184601f82011261483357600080fd5b614840613eae8235613dfb565b81358082526020808301929160051b84010187101561485e57600080fd5b602083015b6020843560051b850101811015614a04576001600160401b038135111561488957600080fd5b87603f82358601011261489b57600080fd5b6148ae613eae6020833587010135613dfb565b81358501602081810135808452908301929160059190911b016040018a10156148d657600080fd5b604083358701015b83358701602081013560051b016040018110156149f4576001600160401b038135111561490a57600080fd5b833587018135016040818d03603f1901121561492557600080fd5b61492d613da9565b604082013581526001600160401b036060830135111561494c57600080fd5b8c605f60608401358401011261496157600080fd5b6040606083013583010135614978613eae82613dfb565b808282526020820191508f60608460051b606088013588010101111561499d57600080fd5b6060808601358601015b60608460051b6060880135880101018110156149d4576149c6816142e8565b8352602092830192016149a7565b5080602085015250505080855250506020830192506020810190506148de565b5084525060209283019201614863565b508093505050509250929050565b600080600080600060608688031215614a2a57600080fd5b85356001600160401b0380821115614a4157600080fd5b614a4d89838a01614417565b96506020880135915080821115614a6357600080fd5b614a6f89838a016140bf565b90965094506040880135915080821115614a8857600080fd5b50614a95888289016140bf565b969995985093965092949392505050565b600060608284031215614ab857600080fd5b604051606081018181106001600160401b0382111715614ada57614ada613d27565b6040528235614ae881613e1e565b8152614af6602084016142e8565b60208201526040830135614b0981613e1e565b60408201529392505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136c96080850182614027565b604080825283519082018190526000906020906060840190828701845b82811015614b9e5781516001600160401b031684529284019290840190600101614b79565b50505083810382850152845180825282820190600581901b8301840187850160005b83811015614bee57601f19868403018552614bdc838351614b15565b94870194925090860190600101614bc0565b50909998505050505050505050565b600060208284031215614c0f57600080fd5b81356001600160401b03811115614c2557600080fd5b820160a08185031215613c6557600080fd5b803560ff81168114613e4a57600080fd5b600060208284031215614c5a57600080fd5b610b0382614c37565b60008151808452602080850194506020840160005b83811015614c9d5781516001600160a01b031687529582019590820190600101614c78565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614cf760e0840182614c63565b90506040840151601f198483030160c0850152614d148282614c63565b95945050505050565b60008060408385031215614d3057600080fd5b614d3983613e33565b946020939093013593505050565b600060208284031215614d5957600080fd5b610b0382613e33565b602081526000610b036020830184614b15565b600060208284031215614d8757600080fd5b8135613c6581613e1e565b600082601f830112614da357600080fd5b81356020614db3613eae83613dfb565b8083825260208201915060208460051b870101935086841115614dd557600080fd5b602086015b8481101561440c578035614ded81613e1e565b8352918301918301614dda565b60006020808385031215614e0d57600080fd5b82356001600160401b0380821115614e2457600080fd5b818501915085601f830112614e3857600080fd5b8135614e46613eae82613dfb565b81815260059190911b83018401908481019088831115614e6557600080fd5b8585015b83811015613ff657803585811115614e8057600080fd5b860160c0818c03601f19011215614e975760008081fd5b614e9f613d87565b8882013581526040614eb2818401614c37565b8a8301526060614ec3818501614c37565b8284015260809150614ed6828501613e5d565b9083015260a08381013589811115614eee5760008081fd5b614efc8f8d83880101614d92565b838501525060c0840135915088821115614f165760008081fd5b614f248e8c84870101614d92565b9083015250845250918601918601614e69565b80356001600160e01b0381168114613e4a57600080fd5b600082601f830112614f5f57600080fd5b81356020614f6f613eae83613dfb565b82815260069290921b84018101918181019086841115614f8e57600080fd5b8286015b8481101561440c5760408189031215614fab5760008081fd5b614fb3613da9565b614fbc82613e33565b8152614fc9858301614f37565b81860152835291830191604001614f92565b600082601f830112614fec57600080fd5b81356020614ffc613eae83613dfb565b82815260059290921b8401810191818101908684111561501b57600080fd5b8286015b8481101561440c5780356001600160401b038082111561503f5760008081fd5b9088019060a0828b03601f19018113156150595760008081fd5b615061613d65565b61506c888501613e33565b8152604080850135848111156150825760008081fd5b6150908e8b83890101613e8f565b8a84015250606093506150a4848601613e33565b9082015260806150b5858201613e33565b9382019390935292013590820152835291830191830161501f565b600082601f8301126150e157600080fd5b813560206150f1613eae83613dfb565b82815260069290921b8401810191818101908684111561511057600080fd5b8286015b8481101561440c576040818903121561512d5760008081fd5b615135613da9565b813581528482013585820152835291830191604001615114565b6000602080838503121561516257600080fd5b82356001600160401b038082111561517957600080fd5b908401906080828703121561518d57600080fd5b615195613d3d565b8235828111156151a457600080fd5b830160408189038113156151b757600080fd5b6151bf613da9565b8235858111156151ce57600080fd5b8301601f81018b136151df57600080fd5b80356151ed613eae82613dfb565b81815260069190911b8201890190898101908d83111561520c57600080fd5b928a01925b8284101561525c5785848f0312156152295760008081fd5b615231613da9565b843561523c81613e1e565b8152615249858d01614f37565b818d0152825292850192908a0190615211565b84525050508287013591508482111561527457600080fd5b6152808a838501614f4e565b8188015283525050828401358281111561529957600080fd5b6152a588828601614fdb565b858301525060408301359350818411156152be57600080fd5b6152ca878585016150d0565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561537757601f19868403018952815160a06001600160401b0380835116865286830151828888015261533b83880182614027565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615303565b5090979650505050505050565b6001600160a01b0385168152600060206080818401526153a760808401876152e6565b83810360408581019190915286518083528388019284019060005b818110156153e7578451805184528601518684015293850193918301916001016153c2565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561546c57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615435565b50508583015187820388850152805180835290840192506000918401905b808310156154c557835180516001600160401b031683528501516001600160e01b03168583015292840192600192909201919085019061548a565b50979650505050505050565b602081526000610b036020830184615415565b6000602082840312156154f657600080fd5b8151613c6581613e4f565b600181811c9082168061551557607f821691505b60208210810361553557634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461554981615501565b600182811680156155615760018114615576576155a5565b60ff19841687528215158302870194506155a5565b8760005260208060002060005b8581101561559c5781548a820152908401908201615583565b50505082870194505b50929695505050505050565b600081546155be81615501565b8085526020600183811680156155db57600181146155f557615623565b60ff1985168884015283151560051b880183019550615623565b866000528260002060005b8581101561561b5781548a8201860152908301908401615600565b890184019650505b505050505092915050565b6040815260006156416040830185614027565b8281036020840152614d1481856155b1565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561568957615689615653565b5092915050565b6040815260006156a360408301856152e6565b8281036020840152614d148185615415565b6000602082840312156156c757600080fd5b81356001600160401b038111156156dd57600080fd5b6136c9848285016146aa565b81810381811115610b0657610b06615653565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061572c5761572c6156fc565b92169190910692915050565b8082028115828204841417610b0657610b06615653565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261578260a0870182614027565b90506060850151868203606088015261579b8282614027565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154c557835180516001600160a01b03168352860151868301529285019260019290920191908401906157be565b602081526000610b03602083018461574f565b608081526000615816608083018761574f565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561585457600080fd5b835161585f81613e4f565b60208501519093506001600160401b0381111561587b57600080fd5b8401601f8101861361588c57600080fd5b805161589a613eae82613e68565b8181528760208385010111156158af57600080fd5b6158c0826020830160208601614003565b809450505050604084015190509250925092565b601f821115610d96576000816000526020600020601f850160051c810160208610156158fd5750805b601f850160051c820191505b8181101561591c57828155600101615909565b505050505050565b81516001600160401b0381111561593d5761593d613d27565b6159518161594b8454615501565b846158d4565b602080601f831160018114615986576000841561596e5750858301515b600019600386901b1c1916600185901b17855561591c565b600085815260208120601f198616915b828110156159b557888601518255948401946001909101908401615996565b50858210156159d35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610b0360a08301600185016155b1565b80820180821115610b0657610b06615653565b60ff8181168382160190811115610b0657610b06615653565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615a9b57615a9b6156fc565b92169190910492915050565b600060208284031215615ab957600080fd5b610b03826142e8565b6000808335601e19843603018112615ad957600080fd5b8301803591506001600160401b03821115615af357600080fd5b6020019150368190038213156140b857600080fd5b6020810160068310615b1c57615b1c61423b565b91905290565b60ff818116838216029081169081811461568957615689615653565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b965784546001600160a01b031683526001948501949284019201615b71565b50508481036060860152865180825290820192508187019060005b81811015615bd65782516001600160a01b031685529383019391830191600101615bb1565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614d146060830184614027565b8281526040602082015260006136c96040830184614027565b6001600160401b03848116825283166020820152606081016136c96040830184614251565b848152615c6a6020820185614251565b608060408201526000615c806080830185614027565b905082606083015295945050505050565b600060208284031215615ca357600080fd5b8151613c6581613e1e565b6020815260008251610100806020850152615ccd610120850183614027565b91506020850151615ce960408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d2360a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d408483614027565b935060c08701519150808685030160e0870152615d5d8483614027565b935060e0870151915080868503018387015250615be68382614027565b600060208284031215615d8c57600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561537757601f19868403018952815160a08151818652615dd682870182614027565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615e128382614027565b6080948501519790940196909652505098840198925090830190600101615db0565b602081526000610b036020830184615d93565b60008282518085526020808601955060208260051b8401016020860160005b8481101561537757601f19868403018952615e82838351614027565b98840198925090830190600101615e66565b60008151808452602080850194506020840160005b83811015614c9d57815163ffffffff1687529582019590820190600101615ea9565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f336101a0850183614027565b91506040870151605f198086850301610120870152615f528483614027565b935060608901519150615f6f838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f988282615d93565b9150508281036020840152615fad8186615e47565b90508281036040840152615be68185615e9456fea164736f6c6343000818000a", + Bin: "0x6101206040523480156200001257600080fd5b5060405162006c4638038062006c46833981016040819052620000359162000885565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0c565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d0576000828281518110620003915762000391620009c2565b60200260200101519050600081602001519050806001600160401b0316600003620003cf5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003f8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200042690620009d8565b905060000362000489578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004c8565b8154600160a81b90046001600160401b0316600114620004c857604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620004fe5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200051d576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200052d828262000a69565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200057c60066001600160401b038516620005d4565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005b8919062000b35565b60405180910390a25050505080600101905062000370565b5050565b6000620005e28383620005eb565b90505b92915050565b60008181526001830160205260408120546200063457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e5565b506000620005e5565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067857620006786200063d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006a957620006a96200063d565b604052919050565b80516001600160401b0381168114620006c957600080fd5b919050565b6001600160a01b0381168114620006e457600080fd5b50565b6000601f83601f840112620006fb57600080fd5b825160206001600160401b03808311156200071a576200071a6200063d565b8260051b6200072b8382016200067e565b93845286810183019383810190898611156200074657600080fd5b84890192505b858310156200087857825184811115620007665760008081fd5b89016080601f19828d038101821315620007805760008081fd5b6200078a62000653565b888401516200079981620006ce565b81526040620007aa858201620006b1565b8a8301526060808601518015158114620007c45760008081fd5b83830152938501519389851115620007dc5760008081fd5b84860195508f603f870112620007f457600094508485fd5b8a8601519450898511156200080d576200080d6200063d565b6200081e8b858f880116016200067e565b93508484528f82868801011115620008365760008081fd5b60005b8581101562000856578681018301518582018d01528b0162000839565b5060009484018b0194909452509182015283525091840191908401906200074c565b9998505050505050505050565b60008060008385036101008112156200089d57600080fd5b6080811215620008ac57600080fd5b620008b662000653565b620008c186620006b1565b81526020860151620008d381620006ce565b60208201526040860151620008e881620006ce565b60408201526060860151620008fd81620006ce565b606082810191909152909450607f19820112156200091a57600080fd5b50604051606081016001600160401b0380821183831017156200094157620009416200063d565b81604052608087015191506200095782620006ce565b90825260a08601519063ffffffff821682146200097357600080fd5b81602084015260c087015191506200098b82620006ce565b6040830182905260e087015192945080831115620009a857600080fd5b5050620009b886828701620006e7565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ed57607f821691505b60208210810362000a0e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a64576000816000526020600020601f850160051c8101602086101562000a3f5750805b601f850160051c820191505b8181101562000a605782815560010162000a4b565b5050505b505050565b81516001600160401b0381111562000a855762000a856200063d565b62000a9d8162000a968454620009d8565b8462000a14565b602080601f83116001811462000ad5576000841562000abc5750858301515b600019600386901b1c1916600185901b17855562000a60565b600085815260208120601f198616915b8281101562000b065788860151825594840194600190910190840162000ae5565b508582101562000b255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8a81620009d8565b8060a089015260c0600183166000811462000bae576001811462000bcb5762000bfd565b60ff19841660c08b015260c083151560051b8b0101945062000bfd565b85600052602060002060005b8481101562000bf45781548c820185015290880190890162000bd7565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fc462000c82600039600081816102470152612c970152600081816102180152612f5c0152600081816101e9015281816105890152818161073b01526126580152600081816101ba0152612897015260008181611d670152611d9a0152615fc46000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80637437ff9f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ed578063f2fde38b1461050d578063f716f99f1461052057600080fd5b8063c673e58414610489578063ccd37ba3146104a957600080fd5b806383503786116100b2578063835037861461044a57806385572ffb146104605780638da5cb5b1461046e57600080fd5b80637437ff9f146103b057806379ba50971461044257600080fd5b80633f4b04aa116101245780635e7bb008116101095780635e7bb0081461037757806360987c201461038a5780636f9e320f1461039d57600080fd5b80633f4b04aa1461033c5780635e36480c1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613edb565b610533565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190614049565b6101846103243660046140f9565b610547565b6101846103373660046141ab565b610a4e565b600b546040516001600160401b0390911681526020016102c4565b61036a6103653660046141fe565b610ab7565b6040516102c4919061425b565b6101846103853660046147c4565b610b0c565b610184610398366004614a08565b610d9b565b6101846103ab366004614a9c565b61107b565b61040c604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b61018461108c565b61045261113d565b6040516102c4929190614b52565b61018461016c366004614bf3565b6000546040516001600160a01b0390911681526020016102c4565b61049c610497366004614c3e565b611398565b6040516102c49190614c9e565b6104df6104b7366004614d13565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6105006104fb366004614d3d565b6114f6565b6040516102c49190614d58565b61018461051b366004614d6b565b611602565b61018461052e366004614df0565b611613565b61053b611655565b610544816116b1565b50565b600061055587890189615145565b602081015151909150156105f257602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c193309390919060040161537a565b60006040518083038186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050505b8051515115158061060857508051602001515115155b156106d457600b5460208a0135906001600160401b03808316911610156106ac57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106759291016154c7565b600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106d2565b8160200151516000036106d257604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098f576000826020015182815181106106fc576106fc6153f5565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a691906154da565b156107d457604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107df82611918565b9050806001016040516107f29190615531565b60405180910390208360200151805190602001201461082f5782602001518160010160405163b80d8fa960e01b81526004016107cb929190615624565b60408301518154600160a81b90046001600160401b039081169116141580610870575082606001516001600160401b031683604001516001600160401b0316115b156108b557825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107cb565b6080830151806108d85760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109305783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107cb565b606084015161094090600161565f565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d7565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c7929091615686565b60405180910390a1610a4360008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611964915050565b505050505050505050565b610a8e610a5d828401846156ab565b6040805160008082526020820190925290610a88565b6060815260200190600190039081610a735790505b50611c5d565b604080516000808252602082019092529050610ab1600185858585866000611964565b50505050565b6000610ac5600160046156df565b6002610ad2608085615708565b6001600160401b0316610ae5919061572e565b610aef8585611d1f565b901c166003811115610b0357610b03614231565b90505b92915050565b610b14611d64565b815181518114610b37576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d8b576000848281518110610b5657610b566153f5565b60200260200101519050600081602001515190506000858481518110610b7e57610b7e6153f5565b6020026020010151905080518214610ba9576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d7c576000828281518110610bc857610bc86153f5565b6020026020010151600001519050600085602001518381518110610bee57610bee6153f5565b6020026020010151905081600014610c42578060800151821015610c42578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107cb565b838381518110610c5457610c546153f5565b602002602001015160200151518160a001515114610ca157805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107cb565b60005b8160a0015151811015610d6e576000858581518110610cc557610cc56153f5565b6020026020010151602001518281518110610ce257610ce26153f5565b602002602001015163ffffffff16905080600014610d655760008360a001518381518110610d1257610d126153f5565b60200260200101516040015163ffffffff16905080821015610d63578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107cb565b505b50600101610ca4565b505050806001019050610bac565b50505050806001019050610b3a565b50610d968383611c5d565b505050565b333014610dbb576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610df8565b6040805180820190915260008082526020820152815260200190600190039081610dd15790505b5060a08701515190915015610e2e57610e2b8660a001518760200151886060015189600001516020015189898989611dcc565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e69929101614049565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f44576040516308d450a160e01b81526001600160a01b038216906308d450a190610eca9085906004016157e6565b600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f44573d808015610f23576040519150601f19603f3d011682016040523d82523d6000602084013e610f28565b606091505b50806040516309c2532560e01b81526004016107cb9190614049565b604088015151158015610f5957506080880151155b80610f70575060608801516001600160a01b03163b155b80610f9757506060880151610f95906001600160a01b03166385572ffb60e01b611f7d565b155b15610fa457505050611074565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf979839261100292899261138892916004016157f9565b6000604051808303816000875af1158015611021573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110499190810190615835565b50915091508161106e57806040516302a35ba360e21b81526004016107cb9190614049565b50505050505b5050505050565b611083611655565b61054481611f99565b6001546001600160a01b031633146110e65760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107cb565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b606080600061114c6006612078565b6001600160401b0381111561116357611163613d1d565b6040519080825280602002602001820160405280156111b457816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816111815790505b50905060006111c36006612078565b6001600160401b038111156111da576111da613d1d565b604051908082528060200260200182016040528015611203578160200160208202803683370190505b50905060005b6112136006612078565b81101561138f57611225600682612082565b828281518110611237576112376153f5565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061126d5761126d6153f5565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b909204909316918101919091526001820180549192916060840191906112e8906154f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611314906154f7565b80156113615780601f1061133657610100808354040283529160200191611361565b820191906000526020600020905b81548152906001019060200180831161134457829003601f168201915b50505050508152505083828151811061137c5761137c6153f5565b6020908102919091010152600101611209565b50939092509050565b6113db6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561148457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611466575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114e657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114c8575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b909204909216948301949094526001840180549394929391840191611582906154f7565b80601f01602080910402602001604051908101604052809291908181526020018280546115ae906154f7565b80156114e65780601f106115d0576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116115de57505050919092525091949350505050565b61160a611655565b6105448161208e565b61161b611655565b60005b81518110156116515761164982828151811061163c5761163c6153f5565b6020026020010151612137565b60010161161e565b5050565b6000546001600160a01b031633146116af5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107cb565b565b60005b81518110156116515760008282815181106116d1576116d16153f5565b60200260200101519050600081602001519050806001600160401b031660000361170e5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611736576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054611762906154f7565b90506000036117c457815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611801565b8154600160a81b90046001600160401b031660011461180157604051632105803760e11b81526001600160401b03841660048201526024016107cb565b805115806118365750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611854576040516342bcdf7f60e11b815260040160405180910390fd5b60018201611862828261591a565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171782556118c760066001600160401b038516612461565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b8360405161190191906159d9565b60405180910390a2505050508060010190506116b4565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610b065760405163ed053c5960e01b81526001600160401b03841660048201526024016107cb565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119c38760a4615a27565b9050826060015115611a0b5784516119dc90602061572e565b86516119e990602061572e565b6119f49060a0615a27565b6119fe9190615a27565b611a089082615a27565b90505b368114611a3457604051638e1192e160e01b8152600481018290523660248201526044016107cb565b5081518114611a635781516040516324f7d61360e21b81526004810191909152602481018290526044016107cb565b611a6b611d64565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ab957611ab9614231565b6002811115611aca57611aca614231565b9052509050600281602001516002811115611ae757611ae7614231565b148015611b3b5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b2357611b236153f5565b6000918252602090912001546001600160a01b031633145b611b5857604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611c08576020820151611b73906001615a3a565b60ff16855114611b96576040516371253a2560e01b815260040160405180910390fd5b8351855114611bb85760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611bca929190615a53565b604051908190038120611be1918b90602001615a63565b604051602081830303815290604052805190602001209050611c068a8288888861246d565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c7e5760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611cc1565b604080518082019091526000815260606020820152815260200190600190039081611c995790505b50905060005b845181101561107457611d17858281518110611ce557611ce56153f5565b602002602001015184611d1157858381518110611d0457611d046153f5565b602002602001015161262a565b8361262a565b600101611cc7565b6001600160401b038216600090815260096020526040812081611d43608085615a77565b6001600160401b031681526020810191909152604001600020549392505050565b467f0000000000000000000000000000000000000000000000000000000000000000146116af57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107cb565b606088516001600160401b03811115611de757611de7613d1d565b604051908082528060200260200182016040528015611e2c57816020015b6040805180820190915260008082526020820152815260200190600190039081611e055790505b509050811560005b8a51811015611f6f5781611ecc57848482818110611e5457611e546153f5565b9050602002016020810190611e699190615a9d565b63ffffffff1615611ecc57848482818110611e8657611e866153f5565b9050602002016020810190611e9b9190615a9d565b8b8281518110611ead57611ead6153f5565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f4a8b8281518110611ee157611ee16153f5565b60200260200101518b8b8b8b8b87818110611efe57611efe6153f5565b9050602002810190611f109190615ab8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f2192505050565b838281518110611f5c57611f5c6153f5565b6020908102919091010152600101611e34565b505098975050505050505050565b6000611f8883613201565b8015610b035750610b03838361324c565b80516001600160a01b0316611fc1576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b6000610b06825490565b6000610b0383836132ee565b336001600160a01b038216036120e65760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107cb565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612162576000604051631b3fab5160e11b81526004016107cb9190615afe565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121b3576060840151600182018054911515620100000262ff0000199092169190911790556121ef565b6060840151600182015460ff62010000909104161515901515146121ef576040516321fd80df60e21b815260ff841660048201526024016107cb565b60a08401518051610100101561221b576001604051631b3fab5160e11b81526004016107cb9190615afe565b8051600003612240576005604051631b3fab5160e11b81526004016107cb9190615afe565b6122a6848460030180548060200260200160405190810160405280929190818152602001828054801561229c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161227e575b5050505050613318565b8460600151156123d657612314848460020180548060200260200160405190810160405280929190818152602001828054801561229c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161227e575050505050613318565b608085015180516101001015612340576002604051631b3fab5160e11b81526004016107cb9190615afe565b6040860151612350906003615b18565b60ff16815111612376576003604051631b3fab5160e11b81526004016107cb9190615afe565b81518151101561239c576001604051631b3fab5160e11b81526004016107cb9190615afe565b805160018401805461ff00191661010060ff8416021790556123c79060028601906020840190613ca3565b506123d485826001613381565b505b6123e284826002613381565b80516123f79060038501906020840190613ca3565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124509389939260028a01929190615b34565b60405180910390a1611074846134dc565b6000610b038383613533565b8251600090815b81811015612620576000600188868460208110612493576124936153f5565b6124a091901a601b615a3a565b8985815181106124b2576124b26153f5565b60200260200101518986815181106124cc576124cc6153f5565b60200260200101516040516000815260200160405260405161250a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561252c573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561258d5761258d614231565b600281111561259e5761259e614231565b90525090506001816020015160028111156125bb576125bb614231565b146125d957604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561260357604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612474565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156126a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cb91906154da565b1561273c5780156126fa57604051637edeb53960e11b81526001600160401b03831660048201526024016107cb565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061274783611918565b6001018054612755906154f7565b80601f0160208091040260200160405190810160405280929190818152602001828054612781906154f7565b80156127ce5780601f106127a3576101008083540402835291602001916127ce565b820191906000526020600020905b8154815290600101906020018083116127b157829003601f168201915b505050602088015151929350505060008190036127fd5760405162bf199760e01b815260040160405180910390fd5b8560400151518114612822576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561283c5761283c613d1d565b604051908082528060200260200182016040528015612865578160200160208202803683370190505b50905060005b82811015612a095760008860200151828151811061288b5761288b6153f5565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146129025780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107cb565b866001600160401b03168160000151602001516001600160401b03161461295657805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107cb565b6129e3817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129c894939291909384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120613582565b8383815181106129f5576129f56153f5565b60209081029190910101525060010161286b565b506000612a2086838a606001518b6080015161368a565b905080600003612a4e57604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107cb565b60005b83811015610a435760005a905060008a602001518381518110612a7657612a766153f5565b602002602001015190506000612a948a836000015160600151610ab7565b90506000816003811115612aaa57612aaa614231565b1480612ac757506003816003811115612ac557612ac5614231565b145b612b1d57815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f19565b60608915612bfc578b8581518110612b3757612b376153f5565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b6588426156df565b1190508080612b8557506003836003811115612b8357612b83614231565b145b612bad576040516354e7e43160e11b81526001600160401b038d1660048201526024016107cb565b8c8681518110612bbf57612bbf6153f5565b602002602001015160000151600014612bf6578c8681518110612be457612be46153f5565b60209081029190910101515160808501525b50612c68565b6000826003811115612c1057612c10614231565b14612c6857825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f19565b8251608001516001600160401b031615612d41576000826003811115612c9057612c90614231565b03612d41577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612cf193929190615be6565b6020604051808303816000875af1158015612d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3491906154da565b612d415750505050612f19565b60008d604001518681518110612d5957612d596153f5565b6020026020010151905080518460a001515114612da357835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107cb565b612db78c85600001516060015160016136c7565b600080612dc586848661376c565b91509150612ddc8e876000015160600151846136c7565b8c15612e33576003826003811115612df657612df6614231565b03612e33576000856003811115612e0f57612e0f614231565b14612e3357855151604051632b11b8d960e01b81526107cb91908390600401615c12565b6002826003811115612e4757612e47614231565b14612e8c576003826003811115612e6057612e60614231565b14612e8c578d866000015160600151836040516349362d1f60e11b81526004016107cb93929190615c2b565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612ee457612ee46153f5565b602002602001015186865a612ef9908f6156df565b604051612f099493929190615c50565b60405180910390a4505050505050505b600101612a51565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc99190615c87565b90506001600160a01b0381161580612ff85750612ff66001600160a01b03821663aff2afbf60e01b611f7d565b155b156130215760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107cb565b60008061303988858c6040015163ffffffff16613820565b9150915060008060006130ec6040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130b69190615ca4565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287866113886084613903565b92509250925082613112578160405163e1cd550960e01b81526004016107cb9190614049565b8151602014613141578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b6000828060200190518101906131579190615d70565b9050866001600160a01b03168c6001600160a01b0316146131d35760006131888d8a613183868a6156df565b613820565b509050868110806131a257508161319f88836156df565b14155b156131d15760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107cb565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613214826301ffc9a760e01b61324c565b8015610b065750613245827fffffffff0000000000000000000000000000000000000000000000000000000061324c565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156132d7575060208210155b80156132e35750600081115b979650505050505050565b6000826000018281548110613305576133056153f5565b9060005260206000200154905092915050565b60005b8151811015610d965760ff83166000908152600360205260408120835190919084908490811061334d5761334d6153f5565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161331b565b60005b8251811015610ab15760008382815181106133a1576133a16153f5565b60200260200101519050600060028111156133be576133be614231565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156133fd576133fd614231565b1461341e576004604051631b3fab5160e11b81526004016107cb9190615afe565b6001600160a01b0381166134455760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561346b5761346b614231565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134c8576134c8614231565b021790555090505050806001019050613384565b60ff81166105445760ff8082166000908152600260205260409020600101546201000090041661351f57604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b600081815260018301602052604081205461357a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b06565b506000610b06565b8151805160608085015190830151608080870151940151604051600095869588956135e695919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136299190615e2a565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136988585856139dd565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136d6608085615708565b6001600160401b03166136e9919061572e565b905060006136f78585611d1f565b905081613706600160046156df565b901b19168183600381111561371d5761371d614231565b6001600160401b03871660009081526009602052604081209190921b9290921791829161374b608088615a77565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061379990889088908890600401615ec1565b600060405180830381600087803b1580156137b357600080fd5b505af19250505080156137c4575060015b613803573d8080156137f2576040519150601f19603f3d011682016040523d82523d6000602084013e6137f7565b606091505b50600392509050613818565b50506040805160208101909152600081526002905b935093915050565b60008060008060006138818860405160240161384b91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288886113886084613903565b925092509250826138a7578160405163e1cd550960e01b81526004016107cb9190614049565b60208251146138d6578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b818060200190518101906138ea9190615d70565b6138f482886156df565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561392557613925613d1d565b6040519080825280601f01601f19166020018201604052801561394f576020820181803683370190505b509150863b6139695763030ed58f60e21b60005260046000fd5b5a8581101561398357632be8ca8b60e21b60005260046000fd5b85900360408104810387106139a3576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139c65750835b808352806000602085013e50955095509592505050565b8251825160009190818303613a0557604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a1957506101018111155b613a36576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a60576040516309bde33960e01b815260040160405180910390fd5b80600003613a8d5786600081518110613a7b57613a7b6153f5565b60200260200101519350505050613c5b565b6000816001600160401b03811115613aa757613aa7613d1d565b604051908082528060200260200182016040528015613ad0578160200160208202803683370190505b50905060008080805b85811015613bfa5760006001821b8b811603613b345788851015613b1d578c5160018601958e918110613b0e57613b0e6153f5565b60200260200101519050613b56565b8551600185019487918110613b0e57613b0e6153f5565b8b5160018401938d918110613b4b57613b4b6153f5565b602002602001015190505b600089861015613b86578d5160018701968f918110613b7757613b776153f5565b60200260200101519050613ba8565b8651600186019588918110613b9d57613b9d6153f5565b602002602001015190505b82851115613bc9576040516309bde33960e01b815260040160405180910390fd5b613bd38282613c62565b878481518110613be557613be56153f5565b60209081029190910101525050600101613ad9565b506001850382148015613c0c57508683145b8015613c1757508581145b613c34576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c4957613c496153f5565b60200260200101519750505050505050505b9392505050565b6000818310613c7a57613c758284613c80565b610b03565b610b0383835b60408051600160208201529081018390526060810182905260009060800161366c565b828054828255906000526020600020908101928215613cf8579160200282015b82811115613cf857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613cc3565b50613d04929150613d08565b5090565b5b80821115613d045760008155600101613d09565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d5557613d55613d1d565b60405290565b60405160a081016001600160401b0381118282101715613d5557613d55613d1d565b60405160c081016001600160401b0381118282101715613d5557613d55613d1d565b604080519081016001600160401b0381118282101715613d5557613d55613d1d565b604051601f8201601f191681016001600160401b0381118282101715613de957613de9613d1d565b604052919050565b60006001600160401b03821115613e0a57613e0a613d1d565b5060051b60200190565b6001600160a01b038116811461054457600080fd5b80356001600160401b0381168114613e4057600080fd5b919050565b801515811461054457600080fd5b8035613e4081613e45565b60006001600160401b03821115613e7757613e77613d1d565b50601f01601f191660200190565b600082601f830112613e9657600080fd5b8135613ea9613ea482613e5e565b613dc1565b818152846020838601011115613ebe57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613eee57600080fd5b82356001600160401b0380821115613f0557600080fd5b818501915085601f830112613f1957600080fd5b8135613f27613ea482613df1565b81815260059190911b83018401908481019088831115613f4657600080fd5b8585015b83811015613fec57803585811115613f625760008081fd5b86016080818c03601f1901811315613f7a5760008081fd5b613f82613d33565b89830135613f8f81613e14565b81526040613f9e848201613e29565b8b830152606080850135613fb181613e45565b83830152928401359289841115613fca57600091508182fd5b613fd88f8d86880101613e85565b908301525085525050918601918601613f4a565b5098975050505050505050565b60005b83811015614014578181015183820152602001613ffc565b50506000910152565b60008151808452614035816020860160208601613ff9565b601f01601f19169290920160200192915050565b602081526000610b03602083018461401d565b8060608101831015610b0657600080fd5b60008083601f84011261407f57600080fd5b5081356001600160401b0381111561409657600080fd5b6020830191508360208285010111156140ae57600080fd5b9250929050565b60008083601f8401126140c757600080fd5b5081356001600160401b038111156140de57600080fd5b6020830191508360208260051b85010111156140ae57600080fd5b60008060008060008060008060e0898b03121561411557600080fd5b61411f8a8a61405c565b975060608901356001600160401b038082111561413b57600080fd5b6141478c838d0161406d565b909950975060808b013591508082111561416057600080fd5b61416c8c838d016140b5565b909750955060a08b013591508082111561418557600080fd5b506141928b828c016140b5565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141c057600080fd5b6141ca858561405c565b925060608401356001600160401b038111156141e557600080fd5b6141f18682870161406d565b9497909650939450505050565b6000806040838503121561421157600080fd5b61421a83613e29565b915061422860208401613e29565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061425757614257614231565b9052565b60208101610b068284614247565b600060a0828403121561427b57600080fd5b614283613d5b565b90508135815261429560208301613e29565b60208201526142a660408301613e29565b60408201526142b760608301613e29565b60608201526142c860808301613e29565b608082015292915050565b8035613e4081613e14565b803563ffffffff81168114613e4057600080fd5b600082601f83011261430357600080fd5b81356020614313613ea483613df1565b82815260059290921b8401810191818101908684111561433257600080fd5b8286015b848110156144025780356001600160401b03808211156143565760008081fd5b9088019060a0828b03601f19018113156143705760008081fd5b614378613d5b565b878401358381111561438a5760008081fd5b6143988d8a83880101613e85565b8252506040808501356143aa81613e14565b828a015260606143bb8682016142de565b828401526080915081860135858111156143d55760008081fd5b6143e38f8c838a0101613e85565b9184019190915250919093013590830152508352918301918301614336565b509695505050505050565b6000610140828403121561442057600080fd5b614428613d7d565b90506144348383614269565b815260a08201356001600160401b038082111561445057600080fd5b61445c85838601613e85565b602084015260c084013591508082111561447557600080fd5b61448185838601613e85565b604084015261449260e085016142d3565b606084015261010084013560808401526101208401359150808211156144b757600080fd5b506144c4848285016142f2565b60a08301525092915050565b600082601f8301126144e157600080fd5b813560206144f1613ea483613df1565b82815260059290921b8401810191818101908684111561451057600080fd5b8286015b848110156144025780356001600160401b038111156145335760008081fd5b6145418986838b010161440d565b845250918301918301614514565b600082601f83011261456057600080fd5b81356020614570613ea483613df1565b82815260059290921b8401810191818101908684111561458f57600080fd5b8286015b848110156144025780356001600160401b03808211156145b257600080fd5b818901915089603f8301126145c657600080fd5b858201356145d6613ea482613df1565b81815260059190911b830160400190878101908c8311156145f657600080fd5b604085015b8381101561462f5780358581111561461257600080fd5b6146218f6040838a0101613e85565b8452509189019189016145fb565b50875250505092840192508301614593565b600082601f83011261465257600080fd5b81356020614662613ea483613df1565b8083825260208201915060208460051b87010193508684111561468457600080fd5b602086015b848110156144025780358352918301918301614689565b600082601f8301126146b157600080fd5b813560206146c1613ea483613df1565b82815260059290921b840181019181810190868411156146e057600080fd5b8286015b848110156144025780356001600160401b03808211156147045760008081fd5b9088019060a0828b03601f190181131561471e5760008081fd5b614726613d5b565b614731888501613e29565b8152604080850135848111156147475760008081fd5b6147558e8b838901016144d0565b8a840152506060808601358581111561476e5760008081fd5b61477c8f8c838a010161454f565b83850152506080915081860135858111156147975760008081fd5b6147a58f8c838a0101614641565b91840191909152509190930135908301525083529183019183016146e4565b600080604083850312156147d757600080fd5b6001600160401b03833511156147ec57600080fd5b6147f984843585016146a0565b91506001600160401b036020840135111561481357600080fd5b6020830135830184601f82011261482957600080fd5b614836613ea48235613df1565b81358082526020808301929160051b84010187101561485457600080fd5b602083015b6020843560051b8501018110156149fa576001600160401b038135111561487f57600080fd5b87603f82358601011261489157600080fd5b6148a4613ea46020833587010135613df1565b81358501602081810135808452908301929160059190911b016040018a10156148cc57600080fd5b604083358701015b83358701602081013560051b016040018110156149ea576001600160401b038135111561490057600080fd5b833587018135016040818d03603f1901121561491b57600080fd5b614923613d9f565b604082013581526001600160401b036060830135111561494257600080fd5b8c605f60608401358401011261495757600080fd5b604060608301358301013561496e613ea482613df1565b808282526020820191508f60608460051b606088013588010101111561499357600080fd5b6060808601358601015b60608460051b6060880135880101018110156149ca576149bc816142de565b83526020928301920161499d565b5080602085015250505080855250506020830192506020810190506148d4565b5084525060209283019201614859565b508093505050509250929050565b600080600080600060608688031215614a2057600080fd5b85356001600160401b0380821115614a3757600080fd5b614a4389838a0161440d565b96506020880135915080821115614a5957600080fd5b614a6589838a016140b5565b90965094506040880135915080821115614a7e57600080fd5b50614a8b888289016140b5565b969995985093965092949392505050565b600060608284031215614aae57600080fd5b604051606081018181106001600160401b0382111715614ad057614ad0613d1d565b6040528235614ade81613e14565b8152614aec602084016142de565b60208201526040830135614aff81613e14565b60408201529392505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136bf608085018261401d565b604080825283519082018190526000906020906060840190828701845b82811015614b945781516001600160401b031684529284019290840190600101614b6f565b50505083810382850152845180825282820190600581901b8301840187850160005b83811015614be457601f19868403018552614bd2838351614b0b565b94870194925090860190600101614bb6565b50909998505050505050505050565b600060208284031215614c0557600080fd5b81356001600160401b03811115614c1b57600080fd5b820160a08185031215613c5b57600080fd5b803560ff81168114613e4057600080fd5b600060208284031215614c5057600080fd5b610b0382614c2d565b60008151808452602080850194506020840160005b83811015614c935781516001600160a01b031687529582019590820190600101614c6e565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614ced60e0840182614c59565b90506040840151601f198483030160c0850152614d0a8282614c59565b95945050505050565b60008060408385031215614d2657600080fd5b614d2f83613e29565b946020939093013593505050565b600060208284031215614d4f57600080fd5b610b0382613e29565b602081526000610b036020830184614b0b565b600060208284031215614d7d57600080fd5b8135613c5b81613e14565b600082601f830112614d9957600080fd5b81356020614da9613ea483613df1565b8083825260208201915060208460051b870101935086841115614dcb57600080fd5b602086015b84811015614402578035614de381613e14565b8352918301918301614dd0565b60006020808385031215614e0357600080fd5b82356001600160401b0380821115614e1a57600080fd5b818501915085601f830112614e2e57600080fd5b8135614e3c613ea482613df1565b81815260059190911b83018401908481019088831115614e5b57600080fd5b8585015b83811015613fec57803585811115614e7657600080fd5b860160c0818c03601f19011215614e8d5760008081fd5b614e95613d7d565b8882013581526040614ea8818401614c2d565b8a8301526060614eb9818501614c2d565b8284015260809150614ecc828501613e53565b9083015260a08381013589811115614ee45760008081fd5b614ef28f8d83880101614d88565b838501525060c0840135915088821115614f0c5760008081fd5b614f1a8e8c84870101614d88565b9083015250845250918601918601614e5f565b80356001600160e01b0381168114613e4057600080fd5b600082601f830112614f5557600080fd5b81356020614f65613ea483613df1565b82815260069290921b84018101918181019086841115614f8457600080fd5b8286015b848110156144025760408189031215614fa15760008081fd5b614fa9613d9f565b614fb282613e29565b8152614fbf858301614f2d565b81860152835291830191604001614f88565b600082601f830112614fe257600080fd5b81356020614ff2613ea483613df1565b82815260059290921b8401810191818101908684111561501157600080fd5b8286015b848110156144025780356001600160401b03808211156150355760008081fd5b9088019060a0828b03601f190181131561504f5760008081fd5b615057613d5b565b615062888501613e29565b8152604080850135848111156150785760008081fd5b6150868e8b83890101613e85565b8a840152506060935061509a848601613e29565b9082015260806150ab858201613e29565b93820193909352920135908201528352918301918301615015565b600082601f8301126150d757600080fd5b813560206150e7613ea483613df1565b82815260069290921b8401810191818101908684111561510657600080fd5b8286015b8481101561440257604081890312156151235760008081fd5b61512b613d9f565b81358152848201358582015283529183019160400161510a565b6000602080838503121561515857600080fd5b82356001600160401b038082111561516f57600080fd5b908401906080828703121561518357600080fd5b61518b613d33565b82358281111561519a57600080fd5b830160408189038113156151ad57600080fd5b6151b5613d9f565b8235858111156151c457600080fd5b8301601f81018b136151d557600080fd5b80356151e3613ea482613df1565b81815260069190911b8201890190898101908d83111561520257600080fd5b928a01925b828410156152525785848f03121561521f5760008081fd5b615227613d9f565b843561523281613e14565b815261523f858d01614f2d565b818d0152825292850192908a0190615207565b84525050508287013591508482111561526a57600080fd5b6152768a838501614f44565b8188015283525050828401358281111561528f57600080fd5b61529b88828601614fd1565b858301525060408301359350818411156152b457600080fd5b6152c0878585016150c6565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561536d57601f19868403018952815160a06001600160401b038083511686528683015182888801526153318388018261401d565b604085810151841690890152606080860151909316928801929092525060809283015192909501919091525097830197908301906001016152f9565b5090979650505050505050565b6001600160a01b03851681526000602060808184015261539d60808401876152dc565b83810360408581019190915286518083528388019284019060005b818110156153dd578451805184528601518684015293850193918301916001016153b8565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561546257835180516001600160a01b031684528501516001600160e01b031685840152928401929185019160010161542b565b50508583015187820388850152805180835290840192506000918401905b808310156154bb57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615480565b50979650505050505050565b602081526000610b03602083018461540b565b6000602082840312156154ec57600080fd5b8151613c5b81613e45565b600181811c9082168061550b57607f821691505b60208210810361552b57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461553f816154f7565b60018281168015615557576001811461556c5761559b565b60ff198416875282151583028701945061559b565b8760005260208060002060005b858110156155925781548a820152908401908201615579565b50505082870194505b50929695505050505050565b600081546155b4816154f7565b8085526020600183811680156155d157600181146155eb57615619565b60ff1985168884015283151560051b880183019550615619565b866000528260002060005b858110156156115781548a82018601529083019084016155f6565b890184019650505b505050505092915050565b604081526000615637604083018561401d565b8281036020840152614d0a81856155a7565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561567f5761567f615649565b5092915050565b60408152600061569960408301856152dc565b8281036020840152614d0a818561540b565b6000602082840312156156bd57600080fd5b81356001600160401b038111156156d357600080fd5b6136bf848285016146a0565b81810381811115610b0657610b06615649565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680615722576157226156f2565b92169190910692915050565b8082028115828204841417610b0657610b06615649565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261577860a087018261401d565b905060608501518682036060880152615791828261401d565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154bb57835180516001600160a01b03168352860151868301529285019260019290920191908401906157b4565b602081526000610b036020830184615745565b60808152600061580c6080830187615745565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561584a57600080fd5b835161585581613e45565b60208501519093506001600160401b0381111561587157600080fd5b8401601f8101861361588257600080fd5b8051615890613ea482613e5e565b8181528760208385010111156158a557600080fd5b6158b6826020830160208601613ff9565b809450505050604084015190509250925092565b601f821115610d96576000816000526020600020601f850160051c810160208610156158f35750805b601f850160051c820191505b81811015615912578281556001016158ff565b505050505050565b81516001600160401b0381111561593357615933613d1d565b6159478161594184546154f7565b846158ca565b602080601f83116001811461597c57600084156159645750858301515b600019600386901b1c1916600185901b178555615912565b600085815260208120601f198616915b828110156159ab5788860151825594840194600190910190840161598c565b50858210156159c95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610b0360a08301600185016155a7565b80820180821115610b0657610b06615649565b60ff8181168382160190811115610b0657610b06615649565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615a9157615a916156f2565b92169190910492915050565b600060208284031215615aaf57600080fd5b610b03826142de565b6000808335601e19843603018112615acf57600080fd5b8301803591506001600160401b03821115615ae957600080fd5b6020019150368190038213156140ae57600080fd5b6020810160068310615b1257615b12614231565b91905290565b60ff818116838216029081169081811461567f5761567f615649565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b8c5784546001600160a01b031683526001948501949284019201615b67565b50508481036060860152865180825290820192508187019060005b81811015615bcc5782516001600160a01b031685529383019391830191600101615ba7565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614d0a606083018461401d565b8281526040602082015260006136bf604083018461401d565b6001600160401b03848116825283166020820152606081016136bf6040830184614247565b848152615c606020820185614247565b608060408201526000615c76608083018561401d565b905082606083015295945050505050565b600060208284031215615c9957600080fd5b8151613c5b81613e14565b6020815260008251610100806020850152615cc361012085018361401d565b91506020850151615cdf60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d1960a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d36848361401d565b935060c08701519150808685030160e0870152615d53848361401d565b935060e0870151915080868503018387015250615bdc838261401d565b600060208284031215615d8257600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561536d57601f19868403018952815160a08151818652615dcc8287018261401d565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615e08838261401d565b6080948501519790940196909652505098840198925090830190600101615da6565b602081526000610b036020830184615d89565b60008282518085526020808601955060208260051b8401016020860160005b8481101561536d57601f19868403018952615e7883835161401d565b98840198925090830190600101615e5c565b60008151808452602080850194506020840160005b83811015614c9357815163ffffffff1687529582019590820190600101615e9f565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f296101a085018361401d565b91506040870151605f198086850301610120870152615f48848361401d565b935060608901519150615f65838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f8e8282615d89565b9150508281036020840152615fa38186615e3d565b90508281036040840152615bdc8185615e8a56fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 5a03e66b37..7b57eeb60f 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 @@ -23,7 +23,7 @@ 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 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 7b95f8ea28863272e075c3e7aeef2c2600a8bddd48a2a4c21ff21402d72f6f57 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 8bf5ce8afe7d00591d886c1fe72f1734ad56f238ce4e1aaa3de4242789286b1f onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 4f29f05261bdaf9b99e675c1169c0d5cba841b6dd7ca3a8997cc0d3cae7ba850 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin e7781d600c1bb7aa4620106af7f6e146a109b97f4cb6a7d06c9e15773340ecb2 From e053e9eebd9a87666842548697768bd289e23d25 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Fri, 4 Oct 2024 14:21:20 +0530 Subject: [PATCH 09/10] fix: function rename Signed-off-by: 0xsuryansh --- contracts/gas-snapshots/ccip.gas-snapshot | 176 +++++++++--------- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 3 +- .../src/v0.8/ccip/test/offRamp/OffRamp.t.sol | 2 +- .../ccip/generated/offramp/offramp.go | 18 +- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 5 files changed, 101 insertions(+), 100 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index f735e0796c..715f756c1d 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -562,18 +562,18 @@ MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61275) MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39933) MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 33049) MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 233701) -MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1500519) +MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1500585) NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37934) NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23706) NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38778) NonceManager_NonceIncrementation:test_incrementNoncesInboundAndOutbound_Success() (gas: 71901) -NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 262127) -NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 265804) -NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 329760) -NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 300752) +NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 262171) +NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 265848) +NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 329848) +NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 300818) NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRampTransitive_Success() (gas: 249120) NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 237027) -NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 153716) +NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 153760) NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 168256) NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 219631) NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 126745) @@ -620,14 +620,14 @@ OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13463) OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 72746) OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15519) -OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177947) -OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 335550) -OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 278816) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 169276) -OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 188967) -OffRamp_batchExecute:test_SingleReport_Success() (gas: 157100) -OffRamp_batchExecute:test_Unhealthy_Success() (gas: 554168) -OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10600) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177991) +OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 335638) +OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 278904) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 169320) +OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 189033) +OffRamp_batchExecute:test_SingleReport_Success() (gas: 157144) +OffRamp_batchExecute:test_Unhealthy_Success() (gas: 554256) +OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10622) OffRamp_ccipReceive:test_Reverts() (gas: 15407) OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92905) OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 64099) @@ -644,12 +644,12 @@ OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164400) OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 139413) OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 146555) OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59858) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232172) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232042) OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125409) OffRamp_commit:test_Unhealthy_Revert() (gas: 58633) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206778) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206713) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) -OffRamp_constructor:test_Constructor_Success() (gas: 6219847) +OffRamp_constructor:test_Constructor_Success() (gas: 6219782) OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 135943) OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103375) OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101269) @@ -657,71 +657,71 @@ OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 161468) OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101189) OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101227) OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) -OffRamp_execute:test_LargeBatch_Success() (gas: 3425675) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372967) -OffRamp_execute:test_MultipleReports_Success() (gas: 300913) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7083590) -OffRamp_execute:test_NoConfig_Revert() (gas: 6308065) +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: 7083612) +OffRamp_execute:test_NoConfig_Revert() (gas: 6308087) OffRamp_execute:test_NonArray_Revert() (gas: 27562) -OffRamp_execute:test_SingleReport_Success() (gas: 176332) -OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148350) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7086339) +OffRamp_execute:test_SingleReport_Success() (gas: 176354) +OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148372) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7086361) OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) -OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18511) -OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244057) -OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20759) -OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 205094) -OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 49284) -OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48728) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 218049) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 85317) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 274174) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithVInterception_Success() (gas: 91745) -OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28260) -OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 22062) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 481728) -OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48372) -OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 33959) -OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 28436) -OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 188052) -OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 198486) -OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 40741) -OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 413201) -OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 249712) -OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 193526) -OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 213560) -OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 249506) -OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 142119) -OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 409269) -OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 58293) -OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 73868) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 583361) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 532075) -OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 33717) -OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 549698) -OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 549712) -OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 460455) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135878) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 165583) -OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3868658) -OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 120474) -OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89178) -OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81284) -OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74161) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 173212) -OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 214125) -OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27152) -OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 165098) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27689) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55260) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 498550) -OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 316062) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2245334) -OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165570) -OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 227170) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 227710) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 781190) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 347303) +OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18533) +OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244079) +OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20781) +OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 205116) +OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 49306) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48750) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 218028) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 85296) +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_InvalidSourcePoolAddress_Success() (gas: 481794) +OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48394) +OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 33981) +OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 28458) +OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 188096) +OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 198552) +OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 40763) +OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 413245) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 249800) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 193614) +OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 213648) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 249550) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 142163) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 409313) +OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 58315) +OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 73890) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 583427) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 532141) +OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 33739) +OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 549786) +OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 549800) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 460521) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135944) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 165649) +OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3885554) +OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 120606) +OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89288) +OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81016) +OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74027) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 173167) +OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 214124) +OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27085) +OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 164696) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27622) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55193) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 498549) +OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 316061) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2245222) +OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165525) +OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 227169) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 227709) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 781365) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 347346) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37656) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 104404) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 85342) @@ -736,14 +736,14 @@ OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupportDest_Reve OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 174468) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride_Success() (gas: 176380) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 187679) -OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11269) -OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13884) -OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 46421) -OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 24463) -OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219355) -OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 227977) -OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 295330) -OffRamp_trialExecute:test_trialExecute_Success() (gas: 277874) +OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11291) +OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13906) +OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 46378) +OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 24420) +OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219377) +OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 227999) +OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 295396) +OffRamp_trialExecute:test_trialExecute_Success() (gas: 277896) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 390842) OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 18030) OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Revert() (gas: 67426) diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 0f991b7073..9aa7c65c40 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -926,7 +926,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { /// @notice Returns all source chain configs /// @return sourceChainConfigs The source chain configs corresponding to all the supported chain selectors - function getAllSourceChainConfig() external view returns (uint64[] memory, SourceChainConfig[] memory) { + function getAllSourceChainConfigs() external view returns (uint64[] memory, SourceChainConfig[] memory) { SourceChainConfig[] memory sourceChainConfigs = new SourceChainConfig[](s_sourceChainSelectors.length()); uint64[] memory sourceChainSelectors = new uint64[](s_sourceChainSelectors.length()); for (uint256 i = 0; i < s_sourceChainSelectors.length(); ++i) { @@ -979,6 +979,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { currentConfig.isEnabled = sourceConfigUpdate.isEnabled; currentConfig.router = sourceConfigUpdate.router; + // We don't need to check the return value, as inserting the item twice has no effect. s_sourceChainSelectors.add(sourceChainSelector); emit SourceChainConfigSet(sourceChainSelector, currentConfig); 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 d68308e528..c433521bab 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -128,7 +128,7 @@ contract OffRamp_constructor is OffRampSetup { _assertOCRConfigEquality(expectedOCRConfig, gotOCRConfig); (uint64[] memory actualSourceChainSelectors, OffRamp.SourceChainConfig[] memory actualSourceChainConfigs) = - s_offRamp.getAllSourceChainConfig(); + s_offRamp.getAllSourceChainConfigs(); _assertSourceChainConfigEquality(actualSourceChainConfigs[0], expectedSourceChainConfig1); _assertSourceChainConfigEquality(actualSourceChainConfigs[1], expectedSourceChainConfig2); diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index fbafc71571..a9a70bab75 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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"getAllSourceChainConfig\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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.ExecutionReportSingleChain[]\",\"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: "0x6101206040523480156200001257600080fd5b5060405162006c4638038062006c46833981016040819052620000359162000885565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0c565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d0576000828281518110620003915762000391620009c2565b60200260200101519050600081602001519050806001600160401b0316600003620003cf5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003f8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200042690620009d8565b905060000362000489578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004c8565b8154600160a81b90046001600160401b0316600114620004c857604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620004fe5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200051d576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200052d828262000a69565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200057c60066001600160401b038516620005d4565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005b8919062000b35565b60405180910390a25050505080600101905062000370565b5050565b6000620005e28383620005eb565b90505b92915050565b60008181526001830160205260408120546200063457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e5565b506000620005e5565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067857620006786200063d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006a957620006a96200063d565b604052919050565b80516001600160401b0381168114620006c957600080fd5b919050565b6001600160a01b0381168114620006e457600080fd5b50565b6000601f83601f840112620006fb57600080fd5b825160206001600160401b03808311156200071a576200071a6200063d565b8260051b6200072b8382016200067e565b93845286810183019383810190898611156200074657600080fd5b84890192505b858310156200087857825184811115620007665760008081fd5b89016080601f19828d038101821315620007805760008081fd5b6200078a62000653565b888401516200079981620006ce565b81526040620007aa858201620006b1565b8a8301526060808601518015158114620007c45760008081fd5b83830152938501519389851115620007dc5760008081fd5b84860195508f603f870112620007f457600094508485fd5b8a8601519450898511156200080d576200080d6200063d565b6200081e8b858f880116016200067e565b93508484528f82868801011115620008365760008081fd5b60005b8581101562000856578681018301518582018d01528b0162000839565b5060009484018b0194909452509182015283525091840191908401906200074c565b9998505050505050505050565b60008060008385036101008112156200089d57600080fd5b6080811215620008ac57600080fd5b620008b662000653565b620008c186620006b1565b81526020860151620008d381620006ce565b60208201526040860151620008e881620006ce565b60408201526060860151620008fd81620006ce565b606082810191909152909450607f19820112156200091a57600080fd5b50604051606081016001600160401b0380821183831017156200094157620009416200063d565b81604052608087015191506200095782620006ce565b90825260a08601519063ffffffff821682146200097357600080fd5b81602084015260c087015191506200098b82620006ce565b6040830182905260e087015192945080831115620009a857600080fd5b5050620009b886828701620006e7565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ed57607f821691505b60208210810362000a0e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a64576000816000526020600020601f850160051c8101602086101562000a3f5750805b601f850160051c820191505b8181101562000a605782815560010162000a4b565b5050505b505050565b81516001600160401b0381111562000a855762000a856200063d565b62000a9d8162000a968454620009d8565b8462000a14565b602080601f83116001811462000ad5576000841562000abc5750858301515b600019600386901b1c1916600185901b17855562000a60565b600085815260208120601f198616915b8281101562000b065788860151825594840194600190910190840162000ae5565b508582101562000b255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8a81620009d8565b8060a089015260c0600183166000811462000bae576001811462000bcb5762000bfd565b60ff19841660c08b015260c083151560051b8b0101945062000bfd565b85600052602060002060005b8481101562000bf45781548c820185015290880190890162000bd7565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fc462000c82600039600081816102470152612c970152600081816102180152612f5c0152600081816101e9015281816105890152818161073b01526126580152600081816101ba0152612897015260008181611d670152611d9a0152615fc46000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80637437ff9f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ed578063f2fde38b1461050d578063f716f99f1461052057600080fd5b8063c673e58414610489578063ccd37ba3146104a957600080fd5b806383503786116100b2578063835037861461044a57806385572ffb146104605780638da5cb5b1461046e57600080fd5b80637437ff9f146103b057806379ba50971461044257600080fd5b80633f4b04aa116101245780635e7bb008116101095780635e7bb0081461037757806360987c201461038a5780636f9e320f1461039d57600080fd5b80633f4b04aa1461033c5780635e36480c1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613edb565b610533565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190614049565b6101846103243660046140f9565b610547565b6101846103373660046141ab565b610a4e565b600b546040516001600160401b0390911681526020016102c4565b61036a6103653660046141fe565b610ab7565b6040516102c4919061425b565b6101846103853660046147c4565b610b0c565b610184610398366004614a08565b610d9b565b6101846103ab366004614a9c565b61107b565b61040c604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b61018461108c565b61045261113d565b6040516102c4929190614b52565b61018461016c366004614bf3565b6000546040516001600160a01b0390911681526020016102c4565b61049c610497366004614c3e565b611398565b6040516102c49190614c9e565b6104df6104b7366004614d13565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6105006104fb366004614d3d565b6114f6565b6040516102c49190614d58565b61018461051b366004614d6b565b611602565b61018461052e366004614df0565b611613565b61053b611655565b610544816116b1565b50565b600061055587890189615145565b602081015151909150156105f257602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c193309390919060040161537a565b60006040518083038186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050505b8051515115158061060857508051602001515115155b156106d457600b5460208a0135906001600160401b03808316911610156106ac57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106759291016154c7565b600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106d2565b8160200151516000036106d257604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098f576000826020015182815181106106fc576106fc6153f5565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a691906154da565b156107d457604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107df82611918565b9050806001016040516107f29190615531565b60405180910390208360200151805190602001201461082f5782602001518160010160405163b80d8fa960e01b81526004016107cb929190615624565b60408301518154600160a81b90046001600160401b039081169116141580610870575082606001516001600160401b031683604001516001600160401b0316115b156108b557825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107cb565b6080830151806108d85760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109305783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107cb565b606084015161094090600161565f565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d7565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c7929091615686565b60405180910390a1610a4360008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611964915050565b505050505050505050565b610a8e610a5d828401846156ab565b6040805160008082526020820190925290610a88565b6060815260200190600190039081610a735790505b50611c5d565b604080516000808252602082019092529050610ab1600185858585866000611964565b50505050565b6000610ac5600160046156df565b6002610ad2608085615708565b6001600160401b0316610ae5919061572e565b610aef8585611d1f565b901c166003811115610b0357610b03614231565b90505b92915050565b610b14611d64565b815181518114610b37576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d8b576000848281518110610b5657610b566153f5565b60200260200101519050600081602001515190506000858481518110610b7e57610b7e6153f5565b6020026020010151905080518214610ba9576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d7c576000828281518110610bc857610bc86153f5565b6020026020010151600001519050600085602001518381518110610bee57610bee6153f5565b6020026020010151905081600014610c42578060800151821015610c42578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107cb565b838381518110610c5457610c546153f5565b602002602001015160200151518160a001515114610ca157805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107cb565b60005b8160a0015151811015610d6e576000858581518110610cc557610cc56153f5565b6020026020010151602001518281518110610ce257610ce26153f5565b602002602001015163ffffffff16905080600014610d655760008360a001518381518110610d1257610d126153f5565b60200260200101516040015163ffffffff16905080821015610d63578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107cb565b505b50600101610ca4565b505050806001019050610bac565b50505050806001019050610b3a565b50610d968383611c5d565b505050565b333014610dbb576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610df8565b6040805180820190915260008082526020820152815260200190600190039081610dd15790505b5060a08701515190915015610e2e57610e2b8660a001518760200151886060015189600001516020015189898989611dcc565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e69929101614049565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f44576040516308d450a160e01b81526001600160a01b038216906308d450a190610eca9085906004016157e6565b600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f44573d808015610f23576040519150601f19603f3d011682016040523d82523d6000602084013e610f28565b606091505b50806040516309c2532560e01b81526004016107cb9190614049565b604088015151158015610f5957506080880151155b80610f70575060608801516001600160a01b03163b155b80610f9757506060880151610f95906001600160a01b03166385572ffb60e01b611f7d565b155b15610fa457505050611074565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf979839261100292899261138892916004016157f9565b6000604051808303816000875af1158015611021573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110499190810190615835565b50915091508161106e57806040516302a35ba360e21b81526004016107cb9190614049565b50505050505b5050505050565b611083611655565b61054481611f99565b6001546001600160a01b031633146110e65760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107cb565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b606080600061114c6006612078565b6001600160401b0381111561116357611163613d1d565b6040519080825280602002602001820160405280156111b457816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816111815790505b50905060006111c36006612078565b6001600160401b038111156111da576111da613d1d565b604051908082528060200260200182016040528015611203578160200160208202803683370190505b50905060005b6112136006612078565b81101561138f57611225600682612082565b828281518110611237576112376153f5565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061126d5761126d6153f5565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b909204909316918101919091526001820180549192916060840191906112e8906154f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611314906154f7565b80156113615780601f1061133657610100808354040283529160200191611361565b820191906000526020600020905b81548152906001019060200180831161134457829003601f168201915b50505050508152505083828151811061137c5761137c6153f5565b6020908102919091010152600101611209565b50939092509050565b6113db6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561148457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611466575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114e657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114c8575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b909204909216948301949094526001840180549394929391840191611582906154f7565b80601f01602080910402602001604051908101604052809291908181526020018280546115ae906154f7565b80156114e65780601f106115d0576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116115de57505050919092525091949350505050565b61160a611655565b6105448161208e565b61161b611655565b60005b81518110156116515761164982828151811061163c5761163c6153f5565b6020026020010151612137565b60010161161e565b5050565b6000546001600160a01b031633146116af5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107cb565b565b60005b81518110156116515760008282815181106116d1576116d16153f5565b60200260200101519050600081602001519050806001600160401b031660000361170e5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611736576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054611762906154f7565b90506000036117c457815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611801565b8154600160a81b90046001600160401b031660011461180157604051632105803760e11b81526001600160401b03841660048201526024016107cb565b805115806118365750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611854576040516342bcdf7f60e11b815260040160405180910390fd5b60018201611862828261591a565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171782556118c760066001600160401b038516612461565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b8360405161190191906159d9565b60405180910390a2505050508060010190506116b4565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610b065760405163ed053c5960e01b81526001600160401b03841660048201526024016107cb565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119c38760a4615a27565b9050826060015115611a0b5784516119dc90602061572e565b86516119e990602061572e565b6119f49060a0615a27565b6119fe9190615a27565b611a089082615a27565b90505b368114611a3457604051638e1192e160e01b8152600481018290523660248201526044016107cb565b5081518114611a635781516040516324f7d61360e21b81526004810191909152602481018290526044016107cb565b611a6b611d64565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ab957611ab9614231565b6002811115611aca57611aca614231565b9052509050600281602001516002811115611ae757611ae7614231565b148015611b3b5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b2357611b236153f5565b6000918252602090912001546001600160a01b031633145b611b5857604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611c08576020820151611b73906001615a3a565b60ff16855114611b96576040516371253a2560e01b815260040160405180910390fd5b8351855114611bb85760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611bca929190615a53565b604051908190038120611be1918b90602001615a63565b604051602081830303815290604052805190602001209050611c068a8288888861246d565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c7e5760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611cc1565b604080518082019091526000815260606020820152815260200190600190039081611c995790505b50905060005b845181101561107457611d17858281518110611ce557611ce56153f5565b602002602001015184611d1157858381518110611d0457611d046153f5565b602002602001015161262a565b8361262a565b600101611cc7565b6001600160401b038216600090815260096020526040812081611d43608085615a77565b6001600160401b031681526020810191909152604001600020549392505050565b467f0000000000000000000000000000000000000000000000000000000000000000146116af57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107cb565b606088516001600160401b03811115611de757611de7613d1d565b604051908082528060200260200182016040528015611e2c57816020015b6040805180820190915260008082526020820152815260200190600190039081611e055790505b509050811560005b8a51811015611f6f5781611ecc57848482818110611e5457611e546153f5565b9050602002016020810190611e699190615a9d565b63ffffffff1615611ecc57848482818110611e8657611e866153f5565b9050602002016020810190611e9b9190615a9d565b8b8281518110611ead57611ead6153f5565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f4a8b8281518110611ee157611ee16153f5565b60200260200101518b8b8b8b8b87818110611efe57611efe6153f5565b9050602002810190611f109190615ab8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f2192505050565b838281518110611f5c57611f5c6153f5565b6020908102919091010152600101611e34565b505098975050505050505050565b6000611f8883613201565b8015610b035750610b03838361324c565b80516001600160a01b0316611fc1576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b6000610b06825490565b6000610b0383836132ee565b336001600160a01b038216036120e65760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107cb565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612162576000604051631b3fab5160e11b81526004016107cb9190615afe565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121b3576060840151600182018054911515620100000262ff0000199092169190911790556121ef565b6060840151600182015460ff62010000909104161515901515146121ef576040516321fd80df60e21b815260ff841660048201526024016107cb565b60a08401518051610100101561221b576001604051631b3fab5160e11b81526004016107cb9190615afe565b8051600003612240576005604051631b3fab5160e11b81526004016107cb9190615afe565b6122a6848460030180548060200260200160405190810160405280929190818152602001828054801561229c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161227e575b5050505050613318565b8460600151156123d657612314848460020180548060200260200160405190810160405280929190818152602001828054801561229c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161227e575050505050613318565b608085015180516101001015612340576002604051631b3fab5160e11b81526004016107cb9190615afe565b6040860151612350906003615b18565b60ff16815111612376576003604051631b3fab5160e11b81526004016107cb9190615afe565b81518151101561239c576001604051631b3fab5160e11b81526004016107cb9190615afe565b805160018401805461ff00191661010060ff8416021790556123c79060028601906020840190613ca3565b506123d485826001613381565b505b6123e284826002613381565b80516123f79060038501906020840190613ca3565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124509389939260028a01929190615b34565b60405180910390a1611074846134dc565b6000610b038383613533565b8251600090815b81811015612620576000600188868460208110612493576124936153f5565b6124a091901a601b615a3a565b8985815181106124b2576124b26153f5565b60200260200101518986815181106124cc576124cc6153f5565b60200260200101516040516000815260200160405260405161250a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561252c573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561258d5761258d614231565b600281111561259e5761259e614231565b90525090506001816020015160028111156125bb576125bb614231565b146125d957604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561260357604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612474565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156126a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cb91906154da565b1561273c5780156126fa57604051637edeb53960e11b81526001600160401b03831660048201526024016107cb565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061274783611918565b6001018054612755906154f7565b80601f0160208091040260200160405190810160405280929190818152602001828054612781906154f7565b80156127ce5780601f106127a3576101008083540402835291602001916127ce565b820191906000526020600020905b8154815290600101906020018083116127b157829003601f168201915b505050602088015151929350505060008190036127fd5760405162bf199760e01b815260040160405180910390fd5b8560400151518114612822576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561283c5761283c613d1d565b604051908082528060200260200182016040528015612865578160200160208202803683370190505b50905060005b82811015612a095760008860200151828151811061288b5761288b6153f5565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146129025780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107cb565b866001600160401b03168160000151602001516001600160401b03161461295657805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107cb565b6129e3817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129c894939291909384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120613582565b8383815181106129f5576129f56153f5565b60209081029190910101525060010161286b565b506000612a2086838a606001518b6080015161368a565b905080600003612a4e57604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107cb565b60005b83811015610a435760005a905060008a602001518381518110612a7657612a766153f5565b602002602001015190506000612a948a836000015160600151610ab7565b90506000816003811115612aaa57612aaa614231565b1480612ac757506003816003811115612ac557612ac5614231565b145b612b1d57815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f19565b60608915612bfc578b8581518110612b3757612b376153f5565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b6588426156df565b1190508080612b8557506003836003811115612b8357612b83614231565b145b612bad576040516354e7e43160e11b81526001600160401b038d1660048201526024016107cb565b8c8681518110612bbf57612bbf6153f5565b602002602001015160000151600014612bf6578c8681518110612be457612be46153f5565b60209081029190910101515160808501525b50612c68565b6000826003811115612c1057612c10614231565b14612c6857825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f19565b8251608001516001600160401b031615612d41576000826003811115612c9057612c90614231565b03612d41577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612cf193929190615be6565b6020604051808303816000875af1158015612d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3491906154da565b612d415750505050612f19565b60008d604001518681518110612d5957612d596153f5565b6020026020010151905080518460a001515114612da357835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107cb565b612db78c85600001516060015160016136c7565b600080612dc586848661376c565b91509150612ddc8e876000015160600151846136c7565b8c15612e33576003826003811115612df657612df6614231565b03612e33576000856003811115612e0f57612e0f614231565b14612e3357855151604051632b11b8d960e01b81526107cb91908390600401615c12565b6002826003811115612e4757612e47614231565b14612e8c576003826003811115612e6057612e60614231565b14612e8c578d866000015160600151836040516349362d1f60e11b81526004016107cb93929190615c2b565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612ee457612ee46153f5565b602002602001015186865a612ef9908f6156df565b604051612f099493929190615c50565b60405180910390a4505050505050505b600101612a51565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc99190615c87565b90506001600160a01b0381161580612ff85750612ff66001600160a01b03821663aff2afbf60e01b611f7d565b155b156130215760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107cb565b60008061303988858c6040015163ffffffff16613820565b9150915060008060006130ec6040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130b69190615ca4565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287866113886084613903565b92509250925082613112578160405163e1cd550960e01b81526004016107cb9190614049565b8151602014613141578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b6000828060200190518101906131579190615d70565b9050866001600160a01b03168c6001600160a01b0316146131d35760006131888d8a613183868a6156df565b613820565b509050868110806131a257508161319f88836156df565b14155b156131d15760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107cb565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613214826301ffc9a760e01b61324c565b8015610b065750613245827fffffffff0000000000000000000000000000000000000000000000000000000061324c565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156132d7575060208210155b80156132e35750600081115b979650505050505050565b6000826000018281548110613305576133056153f5565b9060005260206000200154905092915050565b60005b8151811015610d965760ff83166000908152600360205260408120835190919084908490811061334d5761334d6153f5565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161331b565b60005b8251811015610ab15760008382815181106133a1576133a16153f5565b60200260200101519050600060028111156133be576133be614231565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156133fd576133fd614231565b1461341e576004604051631b3fab5160e11b81526004016107cb9190615afe565b6001600160a01b0381166134455760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561346b5761346b614231565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134c8576134c8614231565b021790555090505050806001019050613384565b60ff81166105445760ff8082166000908152600260205260409020600101546201000090041661351f57604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b600081815260018301602052604081205461357a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b06565b506000610b06565b8151805160608085015190830151608080870151940151604051600095869588956135e695919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136299190615e2a565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136988585856139dd565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136d6608085615708565b6001600160401b03166136e9919061572e565b905060006136f78585611d1f565b905081613706600160046156df565b901b19168183600381111561371d5761371d614231565b6001600160401b03871660009081526009602052604081209190921b9290921791829161374b608088615a77565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061379990889088908890600401615ec1565b600060405180830381600087803b1580156137b357600080fd5b505af19250505080156137c4575060015b613803573d8080156137f2576040519150601f19603f3d011682016040523d82523d6000602084013e6137f7565b606091505b50600392509050613818565b50506040805160208101909152600081526002905b935093915050565b60008060008060006138818860405160240161384b91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288886113886084613903565b925092509250826138a7578160405163e1cd550960e01b81526004016107cb9190614049565b60208251146138d6578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b818060200190518101906138ea9190615d70565b6138f482886156df565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561392557613925613d1d565b6040519080825280601f01601f19166020018201604052801561394f576020820181803683370190505b509150863b6139695763030ed58f60e21b60005260046000fd5b5a8581101561398357632be8ca8b60e21b60005260046000fd5b85900360408104810387106139a3576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139c65750835b808352806000602085013e50955095509592505050565b8251825160009190818303613a0557604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a1957506101018111155b613a36576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a60576040516309bde33960e01b815260040160405180910390fd5b80600003613a8d5786600081518110613a7b57613a7b6153f5565b60200260200101519350505050613c5b565b6000816001600160401b03811115613aa757613aa7613d1d565b604051908082528060200260200182016040528015613ad0578160200160208202803683370190505b50905060008080805b85811015613bfa5760006001821b8b811603613b345788851015613b1d578c5160018601958e918110613b0e57613b0e6153f5565b60200260200101519050613b56565b8551600185019487918110613b0e57613b0e6153f5565b8b5160018401938d918110613b4b57613b4b6153f5565b602002602001015190505b600089861015613b86578d5160018701968f918110613b7757613b776153f5565b60200260200101519050613ba8565b8651600186019588918110613b9d57613b9d6153f5565b602002602001015190505b82851115613bc9576040516309bde33960e01b815260040160405180910390fd5b613bd38282613c62565b878481518110613be557613be56153f5565b60209081029190910101525050600101613ad9565b506001850382148015613c0c57508683145b8015613c1757508581145b613c34576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c4957613c496153f5565b60200260200101519750505050505050505b9392505050565b6000818310613c7a57613c758284613c80565b610b03565b610b0383835b60408051600160208201529081018390526060810182905260009060800161366c565b828054828255906000526020600020908101928215613cf8579160200282015b82811115613cf857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613cc3565b50613d04929150613d08565b5090565b5b80821115613d045760008155600101613d09565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d5557613d55613d1d565b60405290565b60405160a081016001600160401b0381118282101715613d5557613d55613d1d565b60405160c081016001600160401b0381118282101715613d5557613d55613d1d565b604080519081016001600160401b0381118282101715613d5557613d55613d1d565b604051601f8201601f191681016001600160401b0381118282101715613de957613de9613d1d565b604052919050565b60006001600160401b03821115613e0a57613e0a613d1d565b5060051b60200190565b6001600160a01b038116811461054457600080fd5b80356001600160401b0381168114613e4057600080fd5b919050565b801515811461054457600080fd5b8035613e4081613e45565b60006001600160401b03821115613e7757613e77613d1d565b50601f01601f191660200190565b600082601f830112613e9657600080fd5b8135613ea9613ea482613e5e565b613dc1565b818152846020838601011115613ebe57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613eee57600080fd5b82356001600160401b0380821115613f0557600080fd5b818501915085601f830112613f1957600080fd5b8135613f27613ea482613df1565b81815260059190911b83018401908481019088831115613f4657600080fd5b8585015b83811015613fec57803585811115613f625760008081fd5b86016080818c03601f1901811315613f7a5760008081fd5b613f82613d33565b89830135613f8f81613e14565b81526040613f9e848201613e29565b8b830152606080850135613fb181613e45565b83830152928401359289841115613fca57600091508182fd5b613fd88f8d86880101613e85565b908301525085525050918601918601613f4a565b5098975050505050505050565b60005b83811015614014578181015183820152602001613ffc565b50506000910152565b60008151808452614035816020860160208601613ff9565b601f01601f19169290920160200192915050565b602081526000610b03602083018461401d565b8060608101831015610b0657600080fd5b60008083601f84011261407f57600080fd5b5081356001600160401b0381111561409657600080fd5b6020830191508360208285010111156140ae57600080fd5b9250929050565b60008083601f8401126140c757600080fd5b5081356001600160401b038111156140de57600080fd5b6020830191508360208260051b85010111156140ae57600080fd5b60008060008060008060008060e0898b03121561411557600080fd5b61411f8a8a61405c565b975060608901356001600160401b038082111561413b57600080fd5b6141478c838d0161406d565b909950975060808b013591508082111561416057600080fd5b61416c8c838d016140b5565b909750955060a08b013591508082111561418557600080fd5b506141928b828c016140b5565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141c057600080fd5b6141ca858561405c565b925060608401356001600160401b038111156141e557600080fd5b6141f18682870161406d565b9497909650939450505050565b6000806040838503121561421157600080fd5b61421a83613e29565b915061422860208401613e29565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061425757614257614231565b9052565b60208101610b068284614247565b600060a0828403121561427b57600080fd5b614283613d5b565b90508135815261429560208301613e29565b60208201526142a660408301613e29565b60408201526142b760608301613e29565b60608201526142c860808301613e29565b608082015292915050565b8035613e4081613e14565b803563ffffffff81168114613e4057600080fd5b600082601f83011261430357600080fd5b81356020614313613ea483613df1565b82815260059290921b8401810191818101908684111561433257600080fd5b8286015b848110156144025780356001600160401b03808211156143565760008081fd5b9088019060a0828b03601f19018113156143705760008081fd5b614378613d5b565b878401358381111561438a5760008081fd5b6143988d8a83880101613e85565b8252506040808501356143aa81613e14565b828a015260606143bb8682016142de565b828401526080915081860135858111156143d55760008081fd5b6143e38f8c838a0101613e85565b9184019190915250919093013590830152508352918301918301614336565b509695505050505050565b6000610140828403121561442057600080fd5b614428613d7d565b90506144348383614269565b815260a08201356001600160401b038082111561445057600080fd5b61445c85838601613e85565b602084015260c084013591508082111561447557600080fd5b61448185838601613e85565b604084015261449260e085016142d3565b606084015261010084013560808401526101208401359150808211156144b757600080fd5b506144c4848285016142f2565b60a08301525092915050565b600082601f8301126144e157600080fd5b813560206144f1613ea483613df1565b82815260059290921b8401810191818101908684111561451057600080fd5b8286015b848110156144025780356001600160401b038111156145335760008081fd5b6145418986838b010161440d565b845250918301918301614514565b600082601f83011261456057600080fd5b81356020614570613ea483613df1565b82815260059290921b8401810191818101908684111561458f57600080fd5b8286015b848110156144025780356001600160401b03808211156145b257600080fd5b818901915089603f8301126145c657600080fd5b858201356145d6613ea482613df1565b81815260059190911b830160400190878101908c8311156145f657600080fd5b604085015b8381101561462f5780358581111561461257600080fd5b6146218f6040838a0101613e85565b8452509189019189016145fb565b50875250505092840192508301614593565b600082601f83011261465257600080fd5b81356020614662613ea483613df1565b8083825260208201915060208460051b87010193508684111561468457600080fd5b602086015b848110156144025780358352918301918301614689565b600082601f8301126146b157600080fd5b813560206146c1613ea483613df1565b82815260059290921b840181019181810190868411156146e057600080fd5b8286015b848110156144025780356001600160401b03808211156147045760008081fd5b9088019060a0828b03601f190181131561471e5760008081fd5b614726613d5b565b614731888501613e29565b8152604080850135848111156147475760008081fd5b6147558e8b838901016144d0565b8a840152506060808601358581111561476e5760008081fd5b61477c8f8c838a010161454f565b83850152506080915081860135858111156147975760008081fd5b6147a58f8c838a0101614641565b91840191909152509190930135908301525083529183019183016146e4565b600080604083850312156147d757600080fd5b6001600160401b03833511156147ec57600080fd5b6147f984843585016146a0565b91506001600160401b036020840135111561481357600080fd5b6020830135830184601f82011261482957600080fd5b614836613ea48235613df1565b81358082526020808301929160051b84010187101561485457600080fd5b602083015b6020843560051b8501018110156149fa576001600160401b038135111561487f57600080fd5b87603f82358601011261489157600080fd5b6148a4613ea46020833587010135613df1565b81358501602081810135808452908301929160059190911b016040018a10156148cc57600080fd5b604083358701015b83358701602081013560051b016040018110156149ea576001600160401b038135111561490057600080fd5b833587018135016040818d03603f1901121561491b57600080fd5b614923613d9f565b604082013581526001600160401b036060830135111561494257600080fd5b8c605f60608401358401011261495757600080fd5b604060608301358301013561496e613ea482613df1565b808282526020820191508f60608460051b606088013588010101111561499357600080fd5b6060808601358601015b60608460051b6060880135880101018110156149ca576149bc816142de565b83526020928301920161499d565b5080602085015250505080855250506020830192506020810190506148d4565b5084525060209283019201614859565b508093505050509250929050565b600080600080600060608688031215614a2057600080fd5b85356001600160401b0380821115614a3757600080fd5b614a4389838a0161440d565b96506020880135915080821115614a5957600080fd5b614a6589838a016140b5565b90965094506040880135915080821115614a7e57600080fd5b50614a8b888289016140b5565b969995985093965092949392505050565b600060608284031215614aae57600080fd5b604051606081018181106001600160401b0382111715614ad057614ad0613d1d565b6040528235614ade81613e14565b8152614aec602084016142de565b60208201526040830135614aff81613e14565b60408201529392505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136bf608085018261401d565b604080825283519082018190526000906020906060840190828701845b82811015614b945781516001600160401b031684529284019290840190600101614b6f565b50505083810382850152845180825282820190600581901b8301840187850160005b83811015614be457601f19868403018552614bd2838351614b0b565b94870194925090860190600101614bb6565b50909998505050505050505050565b600060208284031215614c0557600080fd5b81356001600160401b03811115614c1b57600080fd5b820160a08185031215613c5b57600080fd5b803560ff81168114613e4057600080fd5b600060208284031215614c5057600080fd5b610b0382614c2d565b60008151808452602080850194506020840160005b83811015614c935781516001600160a01b031687529582019590820190600101614c6e565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614ced60e0840182614c59565b90506040840151601f198483030160c0850152614d0a8282614c59565b95945050505050565b60008060408385031215614d2657600080fd5b614d2f83613e29565b946020939093013593505050565b600060208284031215614d4f57600080fd5b610b0382613e29565b602081526000610b036020830184614b0b565b600060208284031215614d7d57600080fd5b8135613c5b81613e14565b600082601f830112614d9957600080fd5b81356020614da9613ea483613df1565b8083825260208201915060208460051b870101935086841115614dcb57600080fd5b602086015b84811015614402578035614de381613e14565b8352918301918301614dd0565b60006020808385031215614e0357600080fd5b82356001600160401b0380821115614e1a57600080fd5b818501915085601f830112614e2e57600080fd5b8135614e3c613ea482613df1565b81815260059190911b83018401908481019088831115614e5b57600080fd5b8585015b83811015613fec57803585811115614e7657600080fd5b860160c0818c03601f19011215614e8d5760008081fd5b614e95613d7d565b8882013581526040614ea8818401614c2d565b8a8301526060614eb9818501614c2d565b8284015260809150614ecc828501613e53565b9083015260a08381013589811115614ee45760008081fd5b614ef28f8d83880101614d88565b838501525060c0840135915088821115614f0c5760008081fd5b614f1a8e8c84870101614d88565b9083015250845250918601918601614e5f565b80356001600160e01b0381168114613e4057600080fd5b600082601f830112614f5557600080fd5b81356020614f65613ea483613df1565b82815260069290921b84018101918181019086841115614f8457600080fd5b8286015b848110156144025760408189031215614fa15760008081fd5b614fa9613d9f565b614fb282613e29565b8152614fbf858301614f2d565b81860152835291830191604001614f88565b600082601f830112614fe257600080fd5b81356020614ff2613ea483613df1565b82815260059290921b8401810191818101908684111561501157600080fd5b8286015b848110156144025780356001600160401b03808211156150355760008081fd5b9088019060a0828b03601f190181131561504f5760008081fd5b615057613d5b565b615062888501613e29565b8152604080850135848111156150785760008081fd5b6150868e8b83890101613e85565b8a840152506060935061509a848601613e29565b9082015260806150ab858201613e29565b93820193909352920135908201528352918301918301615015565b600082601f8301126150d757600080fd5b813560206150e7613ea483613df1565b82815260069290921b8401810191818101908684111561510657600080fd5b8286015b8481101561440257604081890312156151235760008081fd5b61512b613d9f565b81358152848201358582015283529183019160400161510a565b6000602080838503121561515857600080fd5b82356001600160401b038082111561516f57600080fd5b908401906080828703121561518357600080fd5b61518b613d33565b82358281111561519a57600080fd5b830160408189038113156151ad57600080fd5b6151b5613d9f565b8235858111156151c457600080fd5b8301601f81018b136151d557600080fd5b80356151e3613ea482613df1565b81815260069190911b8201890190898101908d83111561520257600080fd5b928a01925b828410156152525785848f03121561521f5760008081fd5b615227613d9f565b843561523281613e14565b815261523f858d01614f2d565b818d0152825292850192908a0190615207565b84525050508287013591508482111561526a57600080fd5b6152768a838501614f44565b8188015283525050828401358281111561528f57600080fd5b61529b88828601614fd1565b858301525060408301359350818411156152b457600080fd5b6152c0878585016150c6565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561536d57601f19868403018952815160a06001600160401b038083511686528683015182888801526153318388018261401d565b604085810151841690890152606080860151909316928801929092525060809283015192909501919091525097830197908301906001016152f9565b5090979650505050505050565b6001600160a01b03851681526000602060808184015261539d60808401876152dc565b83810360408581019190915286518083528388019284019060005b818110156153dd578451805184528601518684015293850193918301916001016153b8565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561546257835180516001600160a01b031684528501516001600160e01b031685840152928401929185019160010161542b565b50508583015187820388850152805180835290840192506000918401905b808310156154bb57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615480565b50979650505050505050565b602081526000610b03602083018461540b565b6000602082840312156154ec57600080fd5b8151613c5b81613e45565b600181811c9082168061550b57607f821691505b60208210810361552b57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461553f816154f7565b60018281168015615557576001811461556c5761559b565b60ff198416875282151583028701945061559b565b8760005260208060002060005b858110156155925781548a820152908401908201615579565b50505082870194505b50929695505050505050565b600081546155b4816154f7565b8085526020600183811680156155d157600181146155eb57615619565b60ff1985168884015283151560051b880183019550615619565b866000528260002060005b858110156156115781548a82018601529083019084016155f6565b890184019650505b505050505092915050565b604081526000615637604083018561401d565b8281036020840152614d0a81856155a7565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561567f5761567f615649565b5092915050565b60408152600061569960408301856152dc565b8281036020840152614d0a818561540b565b6000602082840312156156bd57600080fd5b81356001600160401b038111156156d357600080fd5b6136bf848285016146a0565b81810381811115610b0657610b06615649565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680615722576157226156f2565b92169190910692915050565b8082028115828204841417610b0657610b06615649565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261577860a087018261401d565b905060608501518682036060880152615791828261401d565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154bb57835180516001600160a01b03168352860151868301529285019260019290920191908401906157b4565b602081526000610b036020830184615745565b60808152600061580c6080830187615745565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561584a57600080fd5b835161585581613e45565b60208501519093506001600160401b0381111561587157600080fd5b8401601f8101861361588257600080fd5b8051615890613ea482613e5e565b8181528760208385010111156158a557600080fd5b6158b6826020830160208601613ff9565b809450505050604084015190509250925092565b601f821115610d96576000816000526020600020601f850160051c810160208610156158f35750805b601f850160051c820191505b81811015615912578281556001016158ff565b505050505050565b81516001600160401b0381111561593357615933613d1d565b6159478161594184546154f7565b846158ca565b602080601f83116001811461597c57600084156159645750858301515b600019600386901b1c1916600185901b178555615912565b600085815260208120601f198616915b828110156159ab5788860151825594840194600190910190840161598c565b50858210156159c95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610b0360a08301600185016155a7565b80820180821115610b0657610b06615649565b60ff8181168382160190811115610b0657610b06615649565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615a9157615a916156f2565b92169190910492915050565b600060208284031215615aaf57600080fd5b610b03826142de565b6000808335601e19843603018112615acf57600080fd5b8301803591506001600160401b03821115615ae957600080fd5b6020019150368190038213156140ae57600080fd5b6020810160068310615b1257615b12614231565b91905290565b60ff818116838216029081169081811461567f5761567f615649565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b8c5784546001600160a01b031683526001948501949284019201615b67565b50508481036060860152865180825290820192508187019060005b81811015615bcc5782516001600160a01b031685529383019391830191600101615ba7565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614d0a606083018461401d565b8281526040602082015260006136bf604083018461401d565b6001600160401b03848116825283166020820152606081016136bf6040830184614247565b848152615c606020820185614247565b608060408201526000615c76608083018561401d565b905082606083015295945050505050565b600060208284031215615c9957600080fd5b8151613c5b81613e14565b6020815260008251610100806020850152615cc361012085018361401d565b91506020850151615cdf60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d1960a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d36848361401d565b935060c08701519150808685030160e0870152615d53848361401d565b935060e0870151915080868503018387015250615bdc838261401d565b600060208284031215615d8257600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561536d57601f19868403018952815160a08151818652615dcc8287018261401d565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615e08838261401d565b6080948501519790940196909652505098840198925090830190600101615da6565b602081526000610b036020830184615d89565b60008282518085526020808601955060208260051b8401016020860160005b8481101561536d57601f19868403018952615e7883835161401d565b98840198925090830190600101615e5c565b60008151808452602080850194506020840160005b83811015614c9357815163ffffffff1687529582019590820190600101615e9f565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f296101a085018361401d565b91506040870151605f198086850301610120870152615f48848361401d565b935060608901519150615f65838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f8e8282615d89565b9150508281036020840152615fa38186615e3d565b90508281036040840152615bdc8185615e8a56fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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\":\"contractIRMNV2\",\"name\":\"rmn\",\"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.ExecutionReportSingleChain[]\",\"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", } var OffRampABI = OffRampMetaData.ABI @@ -314,9 +314,9 @@ func (_OffRamp *OffRampCallerSession) CcipReceive(arg0 ClientAny2EVMMessage) err return _OffRamp.Contract.CcipReceive(&_OffRamp.CallOpts, arg0) } -func (_OffRamp *OffRampCaller) GetAllSourceChainConfig(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) { +func (_OffRamp *OffRampCaller) GetAllSourceChainConfigs(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) { var out []interface{} - err := _OffRamp.contract.Call(opts, &out, "getAllSourceChainConfig") + err := _OffRamp.contract.Call(opts, &out, "getAllSourceChainConfigs") if err != nil { return *new([]uint64), *new([]OffRampSourceChainConfig), err @@ -329,12 +329,12 @@ func (_OffRamp *OffRampCaller) GetAllSourceChainConfig(opts *bind.CallOpts) ([]u } -func (_OffRamp *OffRampSession) GetAllSourceChainConfig() ([]uint64, []OffRampSourceChainConfig, error) { - return _OffRamp.Contract.GetAllSourceChainConfig(&_OffRamp.CallOpts) +func (_OffRamp *OffRampSession) GetAllSourceChainConfigs() ([]uint64, []OffRampSourceChainConfig, error) { + return _OffRamp.Contract.GetAllSourceChainConfigs(&_OffRamp.CallOpts) } -func (_OffRamp *OffRampCallerSession) GetAllSourceChainConfig() ([]uint64, []OffRampSourceChainConfig, error) { - return _OffRamp.Contract.GetAllSourceChainConfig(&_OffRamp.CallOpts) +func (_OffRamp *OffRampCallerSession) GetAllSourceChainConfigs() ([]uint64, []OffRampSourceChainConfig, error) { + return _OffRamp.Contract.GetAllSourceChainConfigs(&_OffRamp.CallOpts) } func (_OffRamp *OffRampCaller) GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, error) { @@ -2480,7 +2480,7 @@ func (_OffRamp *OffRamp) Address() common.Address { type OffRampInterface interface { CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error - GetAllSourceChainConfig(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) + GetAllSourceChainConfigs(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, 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 7b57eeb60f..3af78e69ea 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 @@ -23,7 +23,7 @@ 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 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 8bf5ce8afe7d00591d886c1fe72f1734ad56f238ce4e1aaa3de4242789286b1f +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 36fbb6daca03a68fc3a1d61e3f4cb7017f0a7ef77a54621f0862d4d1d480387a onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 4f29f05261bdaf9b99e675c1169c0d5cba841b6dd7ca3a8997cc0d3cae7ba850 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin e7781d600c1bb7aa4620106af7f6e146a109b97f4cb6a7d06c9e15773340ecb2 From 70d4f61956cb1a2eee8eab5e4ef10af1fd4e266f Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Fri, 4 Oct 2024 17:10:06 +0530 Subject: [PATCH 10/10] chore : generate wrapper Signed-off-by: 0xsuryansh --- contracts/gas-snapshots/ccip.gas-snapshot | 2 +- .../generated-wrapper-dependency-versions-do-not-edit.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 0b6f77be16..bdee8b1b98 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -562,7 +562,7 @@ MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61275) MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39933) MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 33049) MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 233701) -MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1500585) +MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1501791) NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37934) NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23706) NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38778) 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 ed6e091a56..aa6144a02f 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 @@ -23,8 +23,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 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 36fbb6daca03a68fc3a1d61e3f4cb7017f0a7ef77a54621f0862d4d1d480387a -onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 4f29f05261bdaf9b99e675c1169c0d5cba841b6dd7ca3a8997cc0d3cae7ba850 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin cff099545fa50fcfd411c16c9cac754a0ba71ef2590840c0732d42604224200f +onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin cdf282d410d2dc38e47b360d00ab69a262ab240577071a49c2be49aceea5f5fa ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin e7781d600c1bb7aa4620106af7f6e146a109b97f4cb6a7d06c9e15773340ecb2 registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 75be86323c227917a9bbc3f799d7ed02f92db546653a36db30ed0ebe64461353