From 317f93014d9b5deb76e5b54685b020f44be9b46e Mon Sep 17 00:00:00 2001 From: Suryansh <39276431+0xsuryansh@users.noreply.github.com> Date: Wed, 23 Oct 2024 18:11:04 +0530 Subject: [PATCH] CCIP-3899 fix sender encoding (#14877) * CCIP-3899 fix sender encoding and comments CCIP-3791 fix comments * changeset for contracts * formatting fix * snapshot & wrapper * update workflow to include --ir-minimum * Revert "update workflow to include --ir-minimum" This reverts commit 72a3e58699187dbbd554943aac1e42a5539de6c3. * update workflow to include --ir-minimum --- .github/workflows/solidity-foundry.yml | 2 +- contracts/.changeset/thin-owls-hug.md | 7 + contracts/gas-snapshots/ccip.gas-snapshot | 140 +++++++++--------- contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol | 2 +- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 4 +- .../src/v0.8/ccip/test/offRamp/OffRamp.t.sol | 18 +++ .../ccip/generated/offramp/offramp.go | 2 +- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 8 files changed, 101 insertions(+), 76 deletions(-) create mode 100644 contracts/.changeset/thin-owls-hug.md diff --git a/.github/workflows/solidity-foundry.yml b/.github/workflows/solidity-foundry.yml index f8c32cbd043..025749a5848 100644 --- a/.github/workflows/solidity-foundry.yml +++ b/.github/workflows/solidity-foundry.yml @@ -35,7 +35,7 @@ jobs: { "name": "liquiditymanager", "setup": { "run-coverage": true, "min-coverage": 46.3, "run-gas-snapshot": true, "run-forge-fmt": false }}, { "name": "llo-feeds", "setup": { "run-coverage": true, "min-coverage": 49.3, "run-gas-snapshot": true, "run-forge-fmt": false }}, { "name": "operatorforwarder", "setup": { "run-coverage": true, "min-coverage": 55.7, "run-gas-snapshot": true, "run-forge-fmt": false }}, - { "name": "shared", "setup": { "run-coverage": true, "extra-coverage-params": "--no-match-path='*CallWithExactGas*'", "min-coverage": 32.6, "run-gas-snapshot": true, "run-forge-fmt": false }}, + { "name": "shared", "setup": { "run-coverage": true, "extra-coverage-params": "--no-match-path='*CallWithExactGas*' --ir-minimum", "min-coverage": 32.6, "run-gas-snapshot": true, "run-forge-fmt": false }}, { "name": "transmission", "setup": { "run-coverage": true, "min-coverage": 61.5, "run-gas-snapshot": true, "run-forge-fmt": false }}, { "name": "vrf", "setup": { "run-coverage": false, "min-coverage": 98.5, "run-gas-snapshot": false, "run-forge-fmt": false }} ] diff --git a/contracts/.changeset/thin-owls-hug.md b/contracts/.changeset/thin-owls-hug.md new file mode 100644 index 00000000000..a90875b12c5 --- /dev/null +++ b/contracts/.changeset/thin-owls-hug.md @@ -0,0 +1,7 @@ +--- +'@chainlink/contracts': minor +--- + +#internal fix sender encoding and comments in CCIP Any2EVMMEssage and corrected comments + +PR issue: CCIP-3899 diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 32e40e12fcd..eb9c104183c 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -67,7 +67,7 @@ CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 139 CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365381) DefensiveExampleTest:test_HappyPath_Success() (gas: 200048) DefensiveExampleTest:test_Recovery() (gas: 424306) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1518475) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1516792) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96909) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49796) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17435) @@ -332,12 +332,12 @@ NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas 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: 186535) -NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 189890) -NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 253684) -NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 221424) +NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 185977) +NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 189332) +NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 252568) +NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 220866) NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 60382) -NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 153546) +NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 152988) NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 166070) NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 195673) NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 139139) @@ -350,7 +350,7 @@ NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllow NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 66658) NonceManager_applyPreviousRampsUpdates:test_ZeroInput_success() (gas: 12114) NonceManager_typeAndVersion:test_typeAndVersion() (gas: 9705) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5917222) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5910203) OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626106) OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166490) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16741) @@ -360,13 +360,13 @@ 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: 177991) -OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 335638) -OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 278882) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 169365) -OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 189033) -OffRamp_batchExecute:test_SingleReport_Success() (gas: 157122) -OffRamp_batchExecute:test_Unhealthy_Success() (gas: 554234) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177433) +OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 333964) +OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 277208) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 168807) +OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 187917) +OffRamp_batchExecute:test_SingleReport_Success() (gas: 156564) +OffRamp_batchExecute:test_Unhealthy_Success() (gas: 553110) OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10600) OffRamp_ccipReceive:test_Reverts() (gas: 15407) OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92905) @@ -374,8 +374,8 @@ OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 61590) OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68151) OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291) OffRamp_commit:test_InvalidRootRevert() (gas: 63356) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6677970) -OffRamp_commit:test_NoConfig_Revert() (gas: 6261576) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6670951) +OffRamp_commit:test_NoConfig_Revert() (gas: 6254557) OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113033) OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121381) OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113032) @@ -389,79 +389,79 @@ OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125387) OffRamp_commit:test_Unhealthy_Revert() (gas: 58656) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206691) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) -OffRamp_constructor:test_Constructor_Success() (gas: 6222976) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 135943) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103375) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101251) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 161468) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101189) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101204) +OffRamp_constructor:test_Constructor_Success() (gas: 6215957) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 135933) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103365) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101241) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 161459) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101179) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101194) OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) -OffRamp_execute:test_LargeBatch_Success() (gas: 3426335) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372990) -OffRamp_execute:test_MultipleReports_Success() (gas: 300979) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7086799) -OffRamp_execute:test_NoConfig_Revert() (gas: 6311274) +OffRamp_execute:test_LargeBatch_Success() (gas: 3409595) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 371194) +OffRamp_execute:test_MultipleReports_Success() (gas: 299305) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7079222) +OffRamp_execute:test_NoConfig_Revert() (gas: 6303697) OffRamp_execute:test_NonArray_Revert() (gas: 27562) -OffRamp_execute:test_SingleReport_Success() (gas: 176354) -OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148372) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7089548) +OffRamp_execute:test_SingleReport_Success() (gas: 175796) +OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147814) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7081971) OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) -OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18511) -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: 218006) -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_executeSingleMessage:test_MessageSender_Revert() (gas: 18515) +OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 243683) +OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20389) +OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 205120) +OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48752) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 55912) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 217464) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 84754) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 273642) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithVInterception_Success() (gas: 91024) OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28282) OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 22637) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 481794) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 481232) 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: 188093) -OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 198549) +OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 187541) +OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 197997) 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_RouterYULCall_Revert() (gas: 412699) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 248684) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 192498) +OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 212532) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 249156) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 141605) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 408751) 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_TwoMessagesWithTokensAndGE_Success() (gas: 582303) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 531017) 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_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 548662) +OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 548676) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 459397) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135386) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 165091) OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3885554) OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 120629) OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89288) OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81016) OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74094) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 173164) -OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 214099) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 172611) +OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 212993) 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: 55171) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 498527) -OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 316128) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2245200) -OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165525) -OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 227144) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 227706) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 781362) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 347321) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 497399) +OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 314469) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2244626) +OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 164967) +OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 226033) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 226595) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 775807) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 345094) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37656) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 104404) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 82842) @@ -482,8 +482,8 @@ OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 46 OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 24398) OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219355) OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 227977) -OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 295396) -OffRamp_trialExecute:test_trialExecute_Success() (gas: 277874) +OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 294834) +OffRamp_trialExecute:test_trialExecute_Success() (gas: 277312) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 250779) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17209) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 67048) diff --git a/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol b/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol index 62665f4a2a0..15da0f640b8 100644 --- a/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol +++ b/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol @@ -49,7 +49,7 @@ abstract contract MultiOCR3Base is ITypeAndVersion, OwnerIsCreator { struct ConfigInfo { bytes32 configDigest; uint8 F; // ──────────────────────────────╮ maximum number of faulty/dishonest oracles the system can tolerate - uint8 n; // │ number of signers / transmitters + uint8 n; // │ number of configured signers bool isSignatureVerificationEnabled; // ──╯ if true, requires signers and verifies signatures on transmission verification } diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index e67b2a82f03..438e6520f71 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -573,7 +573,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { Client.Any2EVMMessage memory any2EvmMessage = Client.Any2EVMMessage({ messageId: message.header.messageId, sourceChainSelector: message.header.sourceChainSelector, - sender: abi.encode(message.sender), + sender: message.sender, data: message.data, destTokenAmounts: destTokenAmounts }); @@ -675,7 +675,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // Wrap and rethrow the error so we can catch it lower in the stack if (!success) revert TokenHandlingError(returnData); - // If the call was successful, the returnData should be the local token amount. + // If the call was successful, the returnData should be the amount released or minted denominated in the local token's decimals. if (returnData.length != Pool.CCIP_POOL_V1_RET_BYTES) { revert InvalidDataLength(Pool.CCIP_POOL_V1_RET_BYTES, returnData.length); } 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 c5e52db395b..378066377c1 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -1022,6 +1022,24 @@ contract OffRamp_executeSingleMessage is OffRampSetup { function test_executeSingleMessage_NoTokens_Success() public { Internal.Any2EVMRampMessage memory message = _generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1); + + Client.Any2EVMMessage memory expectedAny2EvmMessage = Client.Any2EVMMessage({ + messageId: message.header.messageId, + sourceChainSelector: message.header.sourceChainSelector, + sender: message.sender, + data: message.data, + destTokenAmounts: new Client.EVMTokenAmount[](0) + }); + vm.expectCall( + address(s_destRouter), + abi.encodeWithSelector( + IRouter.routeMessage.selector, + expectedAny2EvmMessage, + Internal.GAS_FOR_CALL_EXACT_CHECK, + message.gasLimit, + message.receiver + ) + ); s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0)); } diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 8705ccf4b5f..67b238236d6 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\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162006c5638038062006c56833981016040819052620000359162000885565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0c565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d0576000828281518110620003915762000391620009c2565b60200260200101519050600081602001519050806001600160401b0316600003620003cf5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003f8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200042690620009d8565b905060000362000489578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004c8565b8154600160a81b90046001600160401b0316600114620004c857604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620004fe5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200051d576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200052d828262000a69565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200057c60066001600160401b038516620005d4565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005b8919062000b35565b60405180910390a25050505080600101905062000370565b5050565b6000620005e28383620005eb565b90505b92915050565b60008181526001830160205260408120546200063457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e5565b506000620005e5565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067857620006786200063d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006a957620006a96200063d565b604052919050565b80516001600160401b0381168114620006c957600080fd5b919050565b6001600160a01b0381168114620006e457600080fd5b50565b6000601f83601f840112620006fb57600080fd5b825160206001600160401b03808311156200071a576200071a6200063d565b8260051b6200072b8382016200067e565b93845286810183019383810190898611156200074657600080fd5b84890192505b858310156200087857825184811115620007665760008081fd5b89016080601f19828d038101821315620007805760008081fd5b6200078a62000653565b888401516200079981620006ce565b81526040620007aa858201620006b1565b8a8301526060808601518015158114620007c45760008081fd5b83830152938501519389851115620007dc5760008081fd5b84860195508f603f870112620007f457600094508485fd5b8a8601519450898511156200080d576200080d6200063d565b6200081e8b858f880116016200067e565b93508484528f82868801011115620008365760008081fd5b60005b8581101562000856578681018301518582018d01528b0162000839565b5060009484018b0194909452509182015283525091840191908401906200074c565b9998505050505050505050565b60008060008385036101008112156200089d57600080fd5b6080811215620008ac57600080fd5b620008b662000653565b620008c186620006b1565b81526020860151620008d381620006ce565b60208201526040860151620008e881620006ce565b60408201526060860151620008fd81620006ce565b606082810191909152909450607f19820112156200091a57600080fd5b50604051606081016001600160401b0380821183831017156200094157620009416200063d565b81604052608087015191506200095782620006ce565b90825260a08601519063ffffffff821682146200097357600080fd5b81602084015260c087015191506200098b82620006ce565b6040830182905260e087015192945080831115620009a857600080fd5b5050620009b886828701620006e7565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ed57607f821691505b60208210810362000a0e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a64576000816000526020600020601f850160051c8101602086101562000a3f5750805b601f850160051c820191505b8181101562000a605782815560010162000a4b565b5050505b505050565b81516001600160401b0381111562000a855762000a856200063d565b62000a9d8162000a968454620009d8565b8462000a14565b602080601f83116001811462000ad5576000841562000abc5750858301515b600019600386901b1c1916600185901b17855562000a60565b600085815260208120601f198616915b8281101562000b065788860151825594840194600190910190840162000ae5565b508582101562000b255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8a81620009d8565b8060a089015260c0600183166000811462000bae576001811462000bcb5762000bfd565b60ff19841660c08b015260c083151560051b8b0101945062000bfd565b85600052602060002060005b8481101562000bf45781548c820185015290880190890162000bd7565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fd462000c82600039600081816102470152612ca70152600081816102180152612f960152600081816101e9015281816105890152818161073b01526126590152600081816101ba01526128a7015260008181611d7e0152611db10152615fd46000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636f9e320f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ed578063f2fde38b1461050d578063f716f99f1461052057600080fd5b8063c673e58414610489578063ccd37ba3146104a957600080fd5b806379ba5097116100b257806379ba50971461045857806385572ffb146104605780638da5cb5b1461046e57600080fd5b80636f9e320f146103b35780637437ff9f146103c657600080fd5b80633f4b04aa116101245780635e36480c116101095780635e36480c1461036d5780635e7bb0081461038d57806360987c20146103a057600080fd5b80633f4b04aa1461033c5780635215505b1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613eeb565b610533565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190614059565b610184610324366004614109565b610547565b6101846103373660046141bb565b610a4e565b600b546040516001600160401b0390911681526020016102c4565b61035f610ab7565b6040516102c4929190614255565b61038061037b3660046142f6565b610d12565b6040516102c49190614353565b61018461039b3660046148bc565b610d67565b6101846103ae366004614b00565b610ff6565b6101846103c1366004614b94565b6112d6565b610422604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b6101846112e7565b61018461016c366004614c03565b6000546040516001600160a01b0390911681526020016102c4565b61049c610497366004614c4e565b611398565b6040516102c49190614cae565b6104df6104b7366004614d23565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6105006104fb366004614d4d565b6114f6565b6040516102c49190614d68565b61018461051b366004614d7b565b611602565b61018461052e366004614e00565b611613565b61053b611655565b610544816116b1565b50565b600061055587890189615155565b602081015151909150156105f257602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c193309390919060040161538a565b60006040518083038186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050505b8051515115158061060857508051602001515115155b156106d457600b5460208a0135906001600160401b03808316911610156106ac57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106759291016154d7565b600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106d2565b8160200151516000036106d257604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098f576000826020015182815181106106fc576106fc615405565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a691906154ea565b156107d457604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107df82611918565b9050806001016040516107f29190615541565b60405180910390208360200151805190602001201461082f5782602001518160010160405163b80d8fa960e01b81526004016107cb929190615634565b60408301518154600160a81b90046001600160401b039081169116141580610870575082606001516001600160401b031683604001516001600160401b0316115b156108b557825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107cb565b6080830151806108d85760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109305783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107cb565b606084015161094090600161566f565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d7565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c7929091615696565b60405180910390a1610a4360008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611964915050565b505050505050505050565b610a8e610a5d828401846156bb565b6040805160008082526020820190925290610a88565b6060815260200190600190039081610a735790505b50611c5d565b604080516000808252602082019092529050610ab1600185858585866000611964565b50505050565b6060806000610ac66006611d20565b6001600160401b03811115610add57610add613d2d565b604051908082528060200260200182016040528015610b2e57816020015b6040805160808101825260008082526020808301829052928201526060808201528252600019909201910181610afb5790505b5090506000610b3d6006611d20565b6001600160401b03811115610b5457610b54613d2d565b604051908082528060200260200182016040528015610b7d578160200160208202803683370190505b50905060005b610b8d6006611d20565b811015610d0957610b9f600682611d2a565b828281518110610bb157610bb1615405565b60200260200101906001600160401b031690816001600160401b03168152505060086000838381518110610be757610be7615405565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b90920490931691810191909152600182018054919291606084019190610c6290615507565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8e90615507565b8015610cdb5780601f10610cb057610100808354040283529160200191610cdb565b820191906000526020600020905b815481529060010190602001808311610cbe57829003601f168201915b505050505081525050838281518110610cf657610cf6615405565b6020908102919091010152600101610b83565b50939092509050565b6000610d20600160046156ef565b6002610d2d608085615718565b6001600160401b0316610d40919061573e565b610d4a8585611d36565b901c166003811115610d5e57610d5e614329565b90505b92915050565b610d6f611d7b565b815181518114610d92576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610fe6576000848281518110610db157610db1615405565b60200260200101519050600081602001515190506000858481518110610dd957610dd9615405565b6020026020010151905080518214610e04576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610fd7576000828281518110610e2357610e23615405565b6020026020010151600001519050600085602001518381518110610e4957610e49615405565b6020026020010151905081600014610e9d578060800151821015610e9d578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107cb565b838381518110610eaf57610eaf615405565b602002602001015160200151518160a001515114610efc57805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107cb565b60005b8160a0015151811015610fc9576000858581518110610f2057610f20615405565b6020026020010151602001518281518110610f3d57610f3d615405565b602002602001015163ffffffff16905080600014610fc05760008360a001518381518110610f6d57610f6d615405565b60200260200101516040015163ffffffff16905080821015610fbe578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107cb565b505b50600101610eff565b505050806001019050610e07565b50505050806001019050610d95565b50610ff18383611c5d565b505050565b333014611016576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281611053565b604080518082019091526000808252602082015281526020019060019003908161102c5790505b5060a08701515190915015611089576110868660a001518760200151886060015189600001516020015189898989611de3565b90505b6040805160a081018252875151815287516020908101516001600160401b0316818301528089015183516000948401926110c4929101614059565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b0316801561119f576040516308d450a160e01b81526001600160a01b038216906308d450a1906111259085906004016157f6565b600060405180830381600087803b15801561113f57600080fd5b505af1925050508015611150575060015b61119f573d80801561117e576040519150601f19603f3d011682016040523d82523d6000602084013e611183565b606091505b50806040516309c2532560e01b81526004016107cb9190614059565b6040880151511580156111b457506080880151155b806111cb575060608801516001600160a01b03163b155b806111f2575060608801516111f0906001600160a01b03166385572ffb60e01b611f94565b155b156111ff575050506112cf565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf979839261125d9289926113889291600401615809565b6000604051808303816000875af115801561127c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112a49190810190615845565b5091509150816112c957806040516302a35ba360e21b81526004016107cb9190614059565b50505050505b5050505050565b6112de611655565b61054481611fb0565b6001546001600160a01b031633146113415760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107cb565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6113db6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561148457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611466575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114e657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114c8575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161158290615507565b80601f01602080910402602001604051908101604052809291908181526020018280546115ae90615507565b80156114e65780601f106115d0576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116115de57505050919092525091949350505050565b61160a611655565b6105448161208f565b61161b611655565b60005b81518110156116515761164982828151811061163c5761163c615405565b6020026020010151612138565b60010161161e565b5050565b6000546001600160a01b031633146116af5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107cb565b565b60005b81518110156116515760008282815181106116d1576116d1615405565b60200260200101519050600081602001519050806001600160401b031660000361170e5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611736576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461176290615507565b90506000036117c457815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611801565b8154600160a81b90046001600160401b031660011461180157604051632105803760e11b81526001600160401b03841660048201526024016107cb565b805115806118365750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611854576040516342bcdf7f60e11b815260040160405180910390fd5b60018201611862828261592a565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171782556118c760066001600160401b038516612462565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b8360405161190191906159e9565b60405180910390a2505050508060010190506116b4565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610d615760405163ed053c5960e01b81526001600160401b03841660048201526024016107cb565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119c38760a4615a37565b9050826060015115611a0b5784516119dc90602061573e565b86516119e990602061573e565b6119f49060a0615a37565b6119fe9190615a37565b611a089082615a37565b90505b368114611a3457604051638e1192e160e01b8152600481018290523660248201526044016107cb565b5081518114611a635781516040516324f7d61360e21b81526004810191909152602481018290526044016107cb565b611a6b611d7b565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ab957611ab9614329565b6002811115611aca57611aca614329565b9052509050600281602001516002811115611ae757611ae7614329565b148015611b3b5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b2357611b23615405565b6000918252602090912001546001600160a01b031633145b611b5857604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611c08576020820151611b73906001615a4a565b60ff16855114611b96576040516371253a2560e01b815260040160405180910390fd5b8351855114611bb85760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611bca929190615a63565b604051908190038120611be1918b90602001615a73565b604051602081830303815290604052805190602001209050611c068a8288888861246e565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c7f5760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611cc2565b604080518082019091526000815260606020820152815260200190600190039081611c9a5790505b50905060005b84518110156112cf57611d18858281518110611ce657611ce6615405565b602002602001015184611d1257858381518110611d0557611d05615405565b602002602001015161262b565b8361262b565b600101611cc8565b6000610d61825490565b6000610d5e8383612f31565b6001600160401b038216600090815260096020526040812081611d5a608085615a87565b6001600160401b031681526020810191909152604001600020549392505050565b467f0000000000000000000000000000000000000000000000000000000000000000146116af57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107cb565b606088516001600160401b03811115611dfe57611dfe613d2d565b604051908082528060200260200182016040528015611e4357816020015b6040805180820190915260008082526020820152815260200190600190039081611e1c5790505b509050811560005b8a51811015611f865781611ee357848482818110611e6b57611e6b615405565b9050602002016020810190611e809190615aad565b63ffffffff1615611ee357848482818110611e9d57611e9d615405565b9050602002016020810190611eb29190615aad565b8b8281518110611ec457611ec4615405565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f618b8281518110611ef857611ef8615405565b60200260200101518b8b8b8b8b87818110611f1557611f15615405565b9050602002810190611f279190615ac8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f5b92505050565b838281518110611f7357611f73615405565b6020908102919091010152600101611e4b565b505098975050505050505050565b6000611f9f8361323b565b8015610d5e5750610d5e8383613286565b80516001600160a01b0316611fd8576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b336001600160a01b038216036120e75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107cb565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612163576000604051631b3fab5160e11b81526004016107cb9190615b0e565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121b4576060840151600182018054911515620100000262ff0000199092169190911790556121f0565b6060840151600182015460ff62010000909104161515901515146121f0576040516321fd80df60e21b815260ff841660048201526024016107cb565b60a08401518051610100101561221c576001604051631b3fab5160e11b81526004016107cb9190615b0e565b8051600003612241576005604051631b3fab5160e11b81526004016107cb9190615b0e565b6122a7848460030180548060200260200160405190810160405280929190818152602001828054801561229d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161227f575b5050505050613328565b8460600151156123d757612315848460020180548060200260200160405190810160405280929190818152602001828054801561229d576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161227f575050505050613328565b608085015180516101001015612341576002604051631b3fab5160e11b81526004016107cb9190615b0e565b6040860151612351906003615b28565b60ff16815111612377576003604051631b3fab5160e11b81526004016107cb9190615b0e565b81518151101561239d576001604051631b3fab5160e11b81526004016107cb9190615b0e565b805160018401805461ff00191661010060ff8416021790556123c89060028601906020840190613cb3565b506123d585826001613391565b505b6123e384826002613391565b80516123f89060038501906020840190613cb3565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124519389939260028a01929190615b44565b60405180910390a16112cf846134ec565b6000610d5e8383613543565b8251600090815b8181101561262157600060018886846020811061249457612494615405565b6124a191901a601b615a4a565b8985815181106124b3576124b3615405565b60200260200101518986815181106124cd576124cd615405565b60200260200101516040516000815260200160405260405161250b949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561252d573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561258e5761258e614329565b600281111561259f5761259f614329565b90525090506001816020015160028111156125bc576125bc614329565b146125da57604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561260457604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612475565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156126a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cc91906154ea565b1561273d5780156126fb57604051637edeb53960e11b81526001600160401b03831660048201526024016107cb565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061274883611918565b600101805461275690615507565b80601f016020809104026020016040519081016040528092919081815260200182805461278290615507565b80156127cf5780601f106127a4576101008083540402835291602001916127cf565b820191906000526020600020905b8154815290600101906020018083116127b257829003601f168201915b5050506020880151519293505050600081900361280d57855160405163676cf24b60e11b81526001600160401b0390911660048201526024016107cb565b8560400151518114612832576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561284c5761284c613d2d565b604051908082528060200260200182016040528015612875578160200160208202803683370190505b50905060005b82811015612a195760008860200151828151811061289b5761289b615405565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146129125780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107cb565b866001600160401b03168160000151602001516001600160401b03161461296657805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107cb565b6129f3817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129d894939291909384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120613592565b838381518110612a0557612a05615405565b60209081029190910101525060010161287b565b506000612a3086838a606001518b6080015161369a565b905080600003612a5e57604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107cb565b60005b83811015610a435760005a905060008a602001518381518110612a8657612a86615405565b602002602001015190506000612aa48a836000015160600151610d12565b90506000816003811115612aba57612aba614329565b1480612ad757506003816003811115612ad557612ad5614329565b145b612b2d57815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f29565b60608915612c0c578b8581518110612b4757612b47615405565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b7588426156ef565b1190508080612b9557506003836003811115612b9357612b93614329565b145b612bbd576040516354e7e43160e11b81526001600160401b038d1660048201526024016107cb565b8c8681518110612bcf57612bcf615405565b602002602001015160000151600014612c06578c8681518110612bf457612bf4615405565b60209081029190910101515160808501525b50612c78565b6000826003811115612c2057612c20614329565b14612c7857825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f29565b8251608001516001600160401b031615612d51576000826003811115612ca057612ca0614329565b03612d51577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612d0193929190615bf6565b6020604051808303816000875af1158015612d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4491906154ea565b612d515750505050612f29565b60008d604001518681518110612d6957612d69615405565b6020026020010151905080518460a001515114612db357835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107cb565b612dc78c85600001516060015160016136d7565b600080612dd586848661377c565b91509150612dec8e876000015160600151846136d7565b8c15612e43576003826003811115612e0657612e06614329565b03612e43576000856003811115612e1f57612e1f614329565b14612e4357855151604051632b11b8d960e01b81526107cb91908390600401615c22565b6002826003811115612e5757612e57614329565b14612e9c576003826003811115612e7057612e70614329565b14612e9c578d866000015160600151836040516349362d1f60e11b81526004016107cb93929190615c3b565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612ef457612ef4615405565b602002602001015186865a612f09908f6156ef565b604051612f199493929190615c60565b60405180910390a4505050505050505b600101612a61565b6000826000018281548110612f4857612f48615405565b9060005260206000200154905092915050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130039190615c97565b90506001600160a01b038116158061303257506130306001600160a01b03821663aff2afbf60e01b611f94565b155b1561305b5760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107cb565b60008061307388858c6040015163ffffffff16613830565b9150915060008060006131266040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130f09190615cb4565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287866113886084613913565b9250925092508261314c578160405163e1cd550960e01b81526004016107cb9190614059565b815160201461317b578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b6000828060200190518101906131919190615d80565b9050866001600160a01b03168c6001600160a01b03161461320d5760006131c28d8a6131bd868a6156ef565b613830565b509050868110806131dc5750816131d988836156ef565b14155b1561320b5760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107cb565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b600061324e826301ffc9a760e01b613286565b8015610d61575061327f827fffffffff00000000000000000000000000000000000000000000000000000000613286565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d91506000519050828015613311575060208210155b801561331d5750600081115b979650505050505050565b60005b8151811015610ff15760ff83166000908152600360205260408120835190919084908490811061335d5761335d615405565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161332b565b60005b8251811015610ab15760008382815181106133b1576133b1615405565b60200260200101519050600060028111156133ce576133ce614329565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561340d5761340d614329565b1461342e576004604051631b3fab5160e11b81526004016107cb9190615b0e565b6001600160a01b0381166134555760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561347b5761347b614329565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134d8576134d8614329565b021790555090505050806001019050613394565b60ff81166105445760ff8082166000908152600260205260409020600101546201000090041661352f57604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b600081815260018301602052604081205461358a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d61565b506000610d61565b8151805160608085015190830151608080870151940151604051600095869588956135f695919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136399190615e3a565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136a88585856139ed565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136e6608085615718565b6001600160401b03166136f9919061573e565b905060006137078585611d36565b905081613716600160046156ef565b901b19168183600381111561372d5761372d614329565b6001600160401b03871660009081526009602052604081209190921b9290921791829161375b608088615a87565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906137a990889088908890600401615ed1565b600060405180830381600087803b1580156137c357600080fd5b505af19250505080156137d4575060015b613813573d808015613802576040519150601f19603f3d011682016040523d82523d6000602084013e613807565b606091505b50600392509050613828565b50506040805160208101909152600081526002905b935093915050565b60008060008060006138918860405160240161385b91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288886113886084613913565b925092509250826138b7578160405163e1cd550960e01b81526004016107cb9190614059565b60208251146138e6578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b818060200190518101906138fa9190615d80565b61390482886156ef565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561393557613935613d2d565b6040519080825280601f01601f19166020018201604052801561395f576020820181803683370190505b509150863b6139795763030ed58f60e21b60005260046000fd5b5a8581101561399357632be8ca8b60e21b60005260046000fd5b85900360408104810387106139b3576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139d65750835b808352806000602085013e50955095509592505050565b8251825160009190818303613a1557604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a2957506101018111155b613a46576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a70576040516309bde33960e01b815260040160405180910390fd5b80600003613a9d5786600081518110613a8b57613a8b615405565b60200260200101519350505050613c6b565b6000816001600160401b03811115613ab757613ab7613d2d565b604051908082528060200260200182016040528015613ae0578160200160208202803683370190505b50905060008080805b85811015613c0a5760006001821b8b811603613b445788851015613b2d578c5160018601958e918110613b1e57613b1e615405565b60200260200101519050613b66565b8551600185019487918110613b1e57613b1e615405565b8b5160018401938d918110613b5b57613b5b615405565b602002602001015190505b600089861015613b96578d5160018701968f918110613b8757613b87615405565b60200260200101519050613bb8565b8651600186019588918110613bad57613bad615405565b602002602001015190505b82851115613bd9576040516309bde33960e01b815260040160405180910390fd5b613be38282613c72565b878481518110613bf557613bf5615405565b60209081029190910101525050600101613ae9565b506001850382148015613c1c57508683145b8015613c2757508581145b613c44576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c5957613c59615405565b60200260200101519750505050505050505b9392505050565b6000818310613c8a57613c858284613c90565b610d5e565b610d5e83835b60408051600160208201529081018390526060810182905260009060800161367c565b828054828255906000526020600020908101928215613d08579160200282015b82811115613d0857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613cd3565b50613d14929150613d18565b5090565b5b80821115613d145760008155600101613d19565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d6557613d65613d2d565b60405290565b60405160a081016001600160401b0381118282101715613d6557613d65613d2d565b60405160c081016001600160401b0381118282101715613d6557613d65613d2d565b604080519081016001600160401b0381118282101715613d6557613d65613d2d565b604051601f8201601f191681016001600160401b0381118282101715613df957613df9613d2d565b604052919050565b60006001600160401b03821115613e1a57613e1a613d2d565b5060051b60200190565b6001600160a01b038116811461054457600080fd5b80356001600160401b0381168114613e5057600080fd5b919050565b801515811461054457600080fd5b8035613e5081613e55565b60006001600160401b03821115613e8757613e87613d2d565b50601f01601f191660200190565b600082601f830112613ea657600080fd5b8135613eb9613eb482613e6e565b613dd1565b818152846020838601011115613ece57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613efe57600080fd5b82356001600160401b0380821115613f1557600080fd5b818501915085601f830112613f2957600080fd5b8135613f37613eb482613e01565b81815260059190911b83018401908481019088831115613f5657600080fd5b8585015b83811015613ffc57803585811115613f725760008081fd5b86016080818c03601f1901811315613f8a5760008081fd5b613f92613d43565b89830135613f9f81613e24565b81526040613fae848201613e39565b8b830152606080850135613fc181613e55565b83830152928401359289841115613fda57600091508182fd5b613fe88f8d86880101613e95565b908301525085525050918601918601613f5a565b5098975050505050505050565b60005b8381101561402457818101518382015260200161400c565b50506000910152565b60008151808452614045816020860160208601614009565b601f01601f19169290920160200192915050565b602081526000610d5e602083018461402d565b8060608101831015610d6157600080fd5b60008083601f84011261408f57600080fd5b5081356001600160401b038111156140a657600080fd5b6020830191508360208285010111156140be57600080fd5b9250929050565b60008083601f8401126140d757600080fd5b5081356001600160401b038111156140ee57600080fd5b6020830191508360208260051b85010111156140be57600080fd5b60008060008060008060008060e0898b03121561412557600080fd5b61412f8a8a61406c565b975060608901356001600160401b038082111561414b57600080fd5b6141578c838d0161407d565b909950975060808b013591508082111561417057600080fd5b61417c8c838d016140c5565b909750955060a08b013591508082111561419557600080fd5b506141a28b828c016140c5565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141d057600080fd5b6141da858561406c565b925060608401356001600160401b038111156141f557600080fd5b6142018682870161407d565b9497909650939450505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136cf608085018261402d565b604080825283519082018190526000906020906060840190828701845b828110156142975781516001600160401b031684529284019290840190600101614272565b50505083810382850152845180825282820190600581901b8301840187850160005b838110156142e757601f198684030185526142d583835161420e565b948701949250908601906001016142b9565b50909998505050505050505050565b6000806040838503121561430957600080fd5b61431283613e39565b915061432060208401613e39565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061434f5761434f614329565b9052565b60208101610d61828461433f565b600060a0828403121561437357600080fd5b61437b613d6b565b90508135815261438d60208301613e39565b602082015261439e60408301613e39565b60408201526143af60608301613e39565b60608201526143c060808301613e39565b608082015292915050565b8035613e5081613e24565b803563ffffffff81168114613e5057600080fd5b600082601f8301126143fb57600080fd5b8135602061440b613eb483613e01565b82815260059290921b8401810191818101908684111561442a57600080fd5b8286015b848110156144fa5780356001600160401b038082111561444e5760008081fd5b9088019060a0828b03601f19018113156144685760008081fd5b614470613d6b565b87840135838111156144825760008081fd5b6144908d8a83880101613e95565b8252506040808501356144a281613e24565b828a015260606144b38682016143d6565b828401526080915081860135858111156144cd5760008081fd5b6144db8f8c838a0101613e95565b918401919091525091909301359083015250835291830191830161442e565b509695505050505050565b6000610140828403121561451857600080fd5b614520613d8d565b905061452c8383614361565b815260a08201356001600160401b038082111561454857600080fd5b61455485838601613e95565b602084015260c084013591508082111561456d57600080fd5b61457985838601613e95565b604084015261458a60e085016143cb565b606084015261010084013560808401526101208401359150808211156145af57600080fd5b506145bc848285016143ea565b60a08301525092915050565b600082601f8301126145d957600080fd5b813560206145e9613eb483613e01565b82815260059290921b8401810191818101908684111561460857600080fd5b8286015b848110156144fa5780356001600160401b0381111561462b5760008081fd5b6146398986838b0101614505565b84525091830191830161460c565b600082601f83011261465857600080fd5b81356020614668613eb483613e01565b82815260059290921b8401810191818101908684111561468757600080fd5b8286015b848110156144fa5780356001600160401b03808211156146aa57600080fd5b818901915089603f8301126146be57600080fd5b858201356146ce613eb482613e01565b81815260059190911b830160400190878101908c8311156146ee57600080fd5b604085015b838110156147275780358581111561470a57600080fd5b6147198f6040838a0101613e95565b8452509189019189016146f3565b5087525050509284019250830161468b565b600082601f83011261474a57600080fd5b8135602061475a613eb483613e01565b8083825260208201915060208460051b87010193508684111561477c57600080fd5b602086015b848110156144fa5780358352918301918301614781565b600082601f8301126147a957600080fd5b813560206147b9613eb483613e01565b82815260059290921b840181019181810190868411156147d857600080fd5b8286015b848110156144fa5780356001600160401b03808211156147fc5760008081fd5b9088019060a0828b03601f19018113156148165760008081fd5b61481e613d6b565b614829888501613e39565b81526040808501358481111561483f5760008081fd5b61484d8e8b838901016145c8565b8a84015250606080860135858111156148665760008081fd5b6148748f8c838a0101614647565b838501525060809150818601358581111561488f5760008081fd5b61489d8f8c838a0101614739565b91840191909152509190930135908301525083529183019183016147dc565b600080604083850312156148cf57600080fd5b6001600160401b03833511156148e457600080fd5b6148f18484358501614798565b91506001600160401b036020840135111561490b57600080fd5b6020830135830184601f82011261492157600080fd5b61492e613eb48235613e01565b81358082526020808301929160051b84010187101561494c57600080fd5b602083015b6020843560051b850101811015614af2576001600160401b038135111561497757600080fd5b87603f82358601011261498957600080fd5b61499c613eb46020833587010135613e01565b81358501602081810135808452908301929160059190911b016040018a10156149c457600080fd5b604083358701015b83358701602081013560051b01604001811015614ae2576001600160401b03813511156149f857600080fd5b833587018135016040818d03603f19011215614a1357600080fd5b614a1b613daf565b604082013581526001600160401b0360608301351115614a3a57600080fd5b8c605f606084013584010112614a4f57600080fd5b6040606083013583010135614a66613eb482613e01565b808282526020820191508f60608460051b6060880135880101011115614a8b57600080fd5b6060808601358601015b60608460051b606088013588010101811015614ac257614ab4816143d6565b835260209283019201614a95565b5080602085015250505080855250506020830192506020810190506149cc565b5084525060209283019201614951565b508093505050509250929050565b600080600080600060608688031215614b1857600080fd5b85356001600160401b0380821115614b2f57600080fd5b614b3b89838a01614505565b96506020880135915080821115614b5157600080fd5b614b5d89838a016140c5565b90965094506040880135915080821115614b7657600080fd5b50614b83888289016140c5565b969995985093965092949392505050565b600060608284031215614ba657600080fd5b604051606081018181106001600160401b0382111715614bc857614bc8613d2d565b6040528235614bd681613e24565b8152614be4602084016143d6565b60208201526040830135614bf781613e24565b60408201529392505050565b600060208284031215614c1557600080fd5b81356001600160401b03811115614c2b57600080fd5b820160a08185031215613c6b57600080fd5b803560ff81168114613e5057600080fd5b600060208284031215614c6057600080fd5b610d5e82614c3d565b60008151808452602080850194506020840160005b83811015614ca35781516001600160a01b031687529582019590820190600101614c7e565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614cfd60e0840182614c69565b90506040840151601f198483030160c0850152614d1a8282614c69565b95945050505050565b60008060408385031215614d3657600080fd5b614d3f83613e39565b946020939093013593505050565b600060208284031215614d5f57600080fd5b610d5e82613e39565b602081526000610d5e602083018461420e565b600060208284031215614d8d57600080fd5b8135613c6b81613e24565b600082601f830112614da957600080fd5b81356020614db9613eb483613e01565b8083825260208201915060208460051b870101935086841115614ddb57600080fd5b602086015b848110156144fa578035614df381613e24565b8352918301918301614de0565b60006020808385031215614e1357600080fd5b82356001600160401b0380821115614e2a57600080fd5b818501915085601f830112614e3e57600080fd5b8135614e4c613eb482613e01565b81815260059190911b83018401908481019088831115614e6b57600080fd5b8585015b83811015613ffc57803585811115614e8657600080fd5b860160c0818c03601f19011215614e9d5760008081fd5b614ea5613d8d565b8882013581526040614eb8818401614c3d565b8a8301526060614ec9818501614c3d565b8284015260809150614edc828501613e63565b9083015260a08381013589811115614ef45760008081fd5b614f028f8d83880101614d98565b838501525060c0840135915088821115614f1c5760008081fd5b614f2a8e8c84870101614d98565b9083015250845250918601918601614e6f565b80356001600160e01b0381168114613e5057600080fd5b600082601f830112614f6557600080fd5b81356020614f75613eb483613e01565b82815260069290921b84018101918181019086841115614f9457600080fd5b8286015b848110156144fa5760408189031215614fb15760008081fd5b614fb9613daf565b614fc282613e39565b8152614fcf858301614f3d565b81860152835291830191604001614f98565b600082601f830112614ff257600080fd5b81356020615002613eb483613e01565b82815260059290921b8401810191818101908684111561502157600080fd5b8286015b848110156144fa5780356001600160401b03808211156150455760008081fd5b9088019060a0828b03601f190181131561505f5760008081fd5b615067613d6b565b615072888501613e39565b8152604080850135848111156150885760008081fd5b6150968e8b83890101613e95565b8a84015250606093506150aa848601613e39565b9082015260806150bb858201613e39565b93820193909352920135908201528352918301918301615025565b600082601f8301126150e757600080fd5b813560206150f7613eb483613e01565b82815260069290921b8401810191818101908684111561511657600080fd5b8286015b848110156144fa57604081890312156151335760008081fd5b61513b613daf565b81358152848201358582015283529183019160400161511a565b6000602080838503121561516857600080fd5b82356001600160401b038082111561517f57600080fd5b908401906080828703121561519357600080fd5b61519b613d43565b8235828111156151aa57600080fd5b830160408189038113156151bd57600080fd5b6151c5613daf565b8235858111156151d457600080fd5b8301601f81018b136151e557600080fd5b80356151f3613eb482613e01565b81815260069190911b8201890190898101908d83111561521257600080fd5b928a01925b828410156152625785848f03121561522f5760008081fd5b615237613daf565b843561524281613e24565b815261524f858d01614f3d565b818d0152825292850192908a0190615217565b84525050508287013591508482111561527a57600080fd5b6152868a838501614f54565b8188015283525050828401358281111561529f57600080fd5b6152ab88828601614fe1565b858301525060408301359350818411156152c457600080fd5b6152d0878585016150d6565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561537d57601f19868403018952815160a06001600160401b038083511686528683015182888801526153418388018261402d565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615309565b5090979650505050505050565b6001600160a01b0385168152600060206080818401526153ad60808401876152ec565b83810360408581019190915286518083528388019284019060005b818110156153ed578451805184528601518684015293850193918301916001016153c8565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561547257835180516001600160a01b031684528501516001600160e01b031685840152928401929185019160010161543b565b50508583015187820388850152805180835290840192506000918401905b808310156154cb57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615490565b50979650505050505050565b602081526000610d5e602083018461541b565b6000602082840312156154fc57600080fd5b8151613c6b81613e55565b600181811c9082168061551b57607f821691505b60208210810361553b57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461554f81615507565b60018281168015615567576001811461557c576155ab565b60ff19841687528215158302870194506155ab565b8760005260208060002060005b858110156155a25781548a820152908401908201615589565b50505082870194505b50929695505050505050565b600081546155c481615507565b8085526020600183811680156155e157600181146155fb57615629565b60ff1985168884015283151560051b880183019550615629565b866000528260002060005b858110156156215781548a8201860152908301908401615606565b890184019650505b505050505092915050565b604081526000615647604083018561402d565b8281036020840152614d1a81856155b7565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561568f5761568f615659565b5092915050565b6040815260006156a960408301856152ec565b8281036020840152614d1a818561541b565b6000602082840312156156cd57600080fd5b81356001600160401b038111156156e357600080fd5b6136cf84828501614798565b81810381811115610d6157610d61615659565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061573257615732615702565b92169190910692915050565b8082028115828204841417610d6157610d61615659565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261578860a087018261402d565b9050606085015186820360608801526157a1828261402d565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154cb57835180516001600160a01b03168352860151868301529285019260019290920191908401906157c4565b602081526000610d5e6020830184615755565b60808152600061581c6080830187615755565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561585a57600080fd5b835161586581613e55565b60208501519093506001600160401b0381111561588157600080fd5b8401601f8101861361589257600080fd5b80516158a0613eb482613e6e565b8181528760208385010111156158b557600080fd5b6158c6826020830160208601614009565b809450505050604084015190509250925092565b601f821115610ff1576000816000526020600020601f850160051c810160208610156159035750805b601f850160051c820191505b818110156159225782815560010161590f565b505050505050565b81516001600160401b0381111561594357615943613d2d565b615957816159518454615507565b846158da565b602080601f83116001811461598c57600084156159745750858301515b600019600386901b1c1916600185901b178555615922565b600085815260208120601f198616915b828110156159bb5788860151825594840194600190910190840161599c565b50858210156159d95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610d5e60a08301600185016155b7565b80820180821115610d6157610d61615659565b60ff8181168382160190811115610d6157610d61615659565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615aa157615aa1615702565b92169190910492915050565b600060208284031215615abf57600080fd5b610d5e826143d6565b6000808335601e19843603018112615adf57600080fd5b8301803591506001600160401b03821115615af957600080fd5b6020019150368190038213156140be57600080fd5b6020810160068310615b2257615b22614329565b91905290565b60ff818116838216029081169081811461568f5761568f615659565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b9c5784546001600160a01b031683526001948501949284019201615b77565b50508481036060860152865180825290820192508187019060005b81811015615bdc5782516001600160a01b031685529383019391830191600101615bb7565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614d1a606083018461402d565b8281526040602082015260006136cf604083018461402d565b6001600160401b03848116825283166020820152606081016136cf604083018461433f565b848152615c70602082018561433f565b608060408201526000615c86608083018561402d565b905082606083015295945050505050565b600060208284031215615ca957600080fd5b8151613c6b81613e24565b6020815260008251610100806020850152615cd361012085018361402d565b91506020850151615cef60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d2960a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d46848361402d565b935060c08701519150808685030160e0870152615d63848361402d565b935060e0870151915080868503018387015250615bec838261402d565b600060208284031215615d9257600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561537d57601f19868403018952815160a08151818652615ddc8287018261402d565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615e18838261402d565b6080948501519790940196909652505098840198925090830190600101615db6565b602081526000610d5e6020830184615d99565b60008282518085526020808601955060208260051b8401016020860160005b8481101561537d57601f19868403018952615e8883835161402d565b98840198925090830190600101615e6c565b60008151808452602080850194506020840160005b83811015614ca357815163ffffffff1687529582019590820190600101615eaf565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f396101a085018361402d565b91506040870151605f198086850301610120870152615f58848361402d565b935060608901519150615f75838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f9e8282615d99565b9150508281036020840152615fb38186615e4d565b90508281036040840152615bec8185615e9a56fea164736f6c6343000818000a", + Bin: "0x6101206040523480156200001257600080fd5b5060405162006c3338038062006c33833981016040819052620000359162000885565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0c565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d0576000828281518110620003915762000391620009c2565b60200260200101519050600081602001519050806001600160401b0316600003620003cf5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003f8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200042690620009d8565b905060000362000489578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004c8565b8154600160a81b90046001600160401b0316600114620004c857604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620004fe5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200051d576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200052d828262000a69565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200057c60066001600160401b038516620005d4565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005b8919062000b35565b60405180910390a25050505080600101905062000370565b5050565b6000620005e28383620005eb565b90505b92915050565b60008181526001830160205260408120546200063457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e5565b506000620005e5565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067857620006786200063d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006a957620006a96200063d565b604052919050565b80516001600160401b0381168114620006c957600080fd5b919050565b6001600160a01b0381168114620006e457600080fd5b50565b6000601f83601f840112620006fb57600080fd5b825160206001600160401b03808311156200071a576200071a6200063d565b8260051b6200072b8382016200067e565b93845286810183019383810190898611156200074657600080fd5b84890192505b858310156200087857825184811115620007665760008081fd5b89016080601f19828d038101821315620007805760008081fd5b6200078a62000653565b888401516200079981620006ce565b81526040620007aa858201620006b1565b8a8301526060808601518015158114620007c45760008081fd5b83830152938501519389851115620007dc5760008081fd5b84860195508f603f870112620007f457600094508485fd5b8a8601519450898511156200080d576200080d6200063d565b6200081e8b858f880116016200067e565b93508484528f82868801011115620008365760008081fd5b60005b8581101562000856578681018301518582018d01528b0162000839565b5060009484018b0194909452509182015283525091840191908401906200074c565b9998505050505050505050565b60008060008385036101008112156200089d57600080fd5b6080811215620008ac57600080fd5b620008b662000653565b620008c186620006b1565b81526020860151620008d381620006ce565b60208201526040860151620008e881620006ce565b60408201526060860151620008fd81620006ce565b606082810191909152909450607f19820112156200091a57600080fd5b50604051606081016001600160401b0380821183831017156200094157620009416200063d565b81604052608087015191506200095782620006ce565b90825260a08601519063ffffffff821682146200097357600080fd5b81602084015260c087015191506200098b82620006ce565b6040830182905260e087015192945080831115620009a857600080fd5b5050620009b886828701620006e7565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ed57607f821691505b60208210810362000a0e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a64576000816000526020600020601f850160051c8101602086101562000a3f5750805b601f850160051c820191505b8181101562000a605782815560010162000a4b565b5050505b505050565b81516001600160401b0381111562000a855762000a856200063d565b62000a9d8162000a968454620009d8565b8462000a14565b602080601f83116001811462000ad5576000841562000abc5750858301515b600019600386901b1c1916600185901b17855562000a60565b600085815260208120601f198616915b8281101562000b065788860151825594840194600190910190840162000ae5565b508582101562000b255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8a81620009d8565b8060a089015260c0600183166000811462000bae576001811462000bcb5762000bfd565b60ff19841660c08b015260c083151560051b8b0101945062000bfd565b85600052602060002060005b8481101562000bf45781548c820185015290880190890162000bd7565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fb162000c82600039600081816102470152612c840152600081816102180152612f730152600081816101e9015281816105890152818161073b01526126360152600081816101ba0152612884015260008181611d5b0152611d8e0152615fb16000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636f9e320f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ed578063f2fde38b1461050d578063f716f99f1461052057600080fd5b8063c673e58414610489578063ccd37ba3146104a957600080fd5b806379ba5097116100b257806379ba50971461045857806385572ffb146104605780638da5cb5b1461046e57600080fd5b80636f9e320f146103b35780637437ff9f146103c657600080fd5b80633f4b04aa116101245780635e36480c116101095780635e36480c1461036d5780635e7bb0081461038d57806360987c20146103a057600080fd5b80633f4b04aa1461033c5780635215505b1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613ec8565b610533565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190614036565b6101846103243660046140e6565b610547565b610184610337366004614198565b610a4e565b600b546040516001600160401b0390911681526020016102c4565b61035f610ab7565b6040516102c4929190614232565b61038061037b3660046142d3565b610d12565b6040516102c49190614330565b61018461039b366004614899565b610d67565b6101846103ae366004614add565b610ff6565b6101846103c1366004614b71565b6112b3565b610422604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b6101846112c4565b61018461016c366004614be0565b6000546040516001600160a01b0390911681526020016102c4565b61049c610497366004614c2b565b611375565b6040516102c49190614c8b565b6104df6104b7366004614d00565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6105006104fb366004614d2a565b6114d3565b6040516102c49190614d45565b61018461051b366004614d58565b6115df565b61018461052e366004614ddd565b6115f0565b61053b611632565b6105448161168e565b50565b600061055587890189615132565b602081015151909150156105f257602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c1933093909190600401615367565b60006040518083038186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050505b8051515115158061060857508051602001515115155b156106d457600b5460208a0135906001600160401b03808316911610156106ac57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106759291016154b4565b600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106d2565b8160200151516000036106d257604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098f576000826020015182815181106106fc576106fc6153e2565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a691906154c7565b156107d457604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107df826118f5565b9050806001016040516107f2919061551e565b60405180910390208360200151805190602001201461082f5782602001518160010160405163b80d8fa960e01b81526004016107cb929190615611565b60408301518154600160a81b90046001600160401b039081169116141580610870575082606001516001600160401b031683604001516001600160401b0316115b156108b557825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107cb565b6080830151806108d85760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109305783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107cb565b606084015161094090600161564c565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d7565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c7929091615673565b60405180910390a1610a4360008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611941915050565b505050505050505050565b610a8e610a5d82840184615698565b6040805160008082526020820190925290610a88565b6060815260200190600190039081610a735790505b50611c3a565b604080516000808252602082019092529050610ab1600185858585866000611941565b50505050565b6060806000610ac66006611cfd565b6001600160401b03811115610add57610add613d0a565b604051908082528060200260200182016040528015610b2e57816020015b6040805160808101825260008082526020808301829052928201526060808201528252600019909201910181610afb5790505b5090506000610b3d6006611cfd565b6001600160401b03811115610b5457610b54613d0a565b604051908082528060200260200182016040528015610b7d578160200160208202803683370190505b50905060005b610b8d6006611cfd565b811015610d0957610b9f600682611d07565b828281518110610bb157610bb16153e2565b60200260200101906001600160401b031690816001600160401b03168152505060086000838381518110610be757610be76153e2565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b90920490931691810191909152600182018054919291606084019190610c62906154e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8e906154e4565b8015610cdb5780601f10610cb057610100808354040283529160200191610cdb565b820191906000526020600020905b815481529060010190602001808311610cbe57829003601f168201915b505050505081525050838281518110610cf657610cf66153e2565b6020908102919091010152600101610b83565b50939092509050565b6000610d20600160046156cc565b6002610d2d6080856156f5565b6001600160401b0316610d40919061571b565b610d4a8585611d13565b901c166003811115610d5e57610d5e614306565b90505b92915050565b610d6f611d58565b815181518114610d92576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610fe6576000848281518110610db157610db16153e2565b60200260200101519050600081602001515190506000858481518110610dd957610dd96153e2565b6020026020010151905080518214610e04576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610fd7576000828281518110610e2357610e236153e2565b6020026020010151600001519050600085602001518381518110610e4957610e496153e2565b6020026020010151905081600014610e9d578060800151821015610e9d578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107cb565b838381518110610eaf57610eaf6153e2565b602002602001015160200151518160a001515114610efc57805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107cb565b60005b8160a0015151811015610fc9576000858581518110610f2057610f206153e2565b6020026020010151602001518281518110610f3d57610f3d6153e2565b602002602001015163ffffffff16905080600014610fc05760008360a001518381518110610f6d57610f6d6153e2565b60200260200101516040015163ffffffff16905080821015610fbe578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107cb565b505b50600101610eff565b505050806001019050610e07565b50505050806001019050610d95565b50610ff18383611c3a565b505050565b333014611016576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281611053565b604080518082019091526000808252602082015281526020019060019003908161102c5790505b5060a08701515190915015611089576110868660a001518760200151886060015189600001516020015189898989611dc0565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b0316801561117c576040516308d450a160e01b81526001600160a01b038216906308d450a1906111029085906004016157d3565b600060405180830381600087803b15801561111c57600080fd5b505af192505050801561112d575060015b61117c573d80801561115b576040519150601f19603f3d011682016040523d82523d6000602084013e611160565b606091505b50806040516309c2532560e01b81526004016107cb9190614036565b60408801515115801561119157506080880151155b806111a8575060608801516001600160a01b03163b155b806111cf575060608801516111cd906001600160a01b03166385572ffb60e01b611f71565b155b156111dc575050506112ac565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf979839261123a92899261138892916004016157e6565b6000604051808303816000875af1158015611259573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112819190810190615822565b5091509150816112a657806040516302a35ba360e21b81526004016107cb9190614036565b50505050505b5050505050565b6112bb611632565b61054481611f8d565b6001546001600160a01b0316331461131e5760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107cb565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6113b86040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561146157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611443575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114c357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114a5575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161155f906154e4565b80601f016020809104026020016040519081016040528092919081815260200182805461158b906154e4565b80156114c35780601f106115ad576101008083540402835291602001916114c3565b820191906000526020600020905b8154815290600101906020018083116115bb57505050919092525091949350505050565b6115e7611632565b6105448161206c565b6115f8611632565b60005b815181101561162e57611626828281518110611619576116196153e2565b6020026020010151612115565b6001016115fb565b5050565b6000546001600160a01b0316331461168c5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107cb565b565b60005b815181101561162e5760008282815181106116ae576116ae6153e2565b60200260200101519050600081602001519050806001600160401b03166000036116eb5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611713576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461173f906154e4565b90506000036117a157815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117de565b8154600160a81b90046001600160401b03166001146117de57604051632105803760e11b81526001600160401b03841660048201526024016107cb565b805115806118135750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611831576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161183f8282615907565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171782556118a460066001600160401b03851661243f565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118de91906159c6565b60405180910390a250505050806001019050611691565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610d615760405163ed053c5960e01b81526001600160401b03841660048201526024016107cb565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119a08760a4615a14565b90508260600151156119e85784516119b990602061571b565b86516119c690602061571b565b6119d19060a0615a14565b6119db9190615a14565b6119e59082615a14565b90505b368114611a1157604051638e1192e160e01b8152600481018290523660248201526044016107cb565b5081518114611a405781516040516324f7d61360e21b81526004810191909152602481018290526044016107cb565b611a48611d58565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611a9657611a96614306565b6002811115611aa757611aa7614306565b9052509050600281602001516002811115611ac457611ac4614306565b148015611b185750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b0057611b006153e2565b6000918252602090912001546001600160a01b031633145b611b3557604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611be5576020820151611b50906001615a27565b60ff16855114611b73576040516371253a2560e01b815260040160405180910390fd5b8351855114611b955760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611ba7929190615a40565b604051908190038120611bbe918b90602001615a50565b604051602081830303815290604052805190602001209050611be38a8288888861244b565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c5c5760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611c9f565b604080518082019091526000815260606020820152815260200190600190039081611c775790505b50905060005b84518110156112ac57611cf5858281518110611cc357611cc36153e2565b602002602001015184611cef57858381518110611ce257611ce26153e2565b6020026020010151612608565b83612608565b600101611ca5565b6000610d61825490565b6000610d5e8383612f0e565b6001600160401b038216600090815260096020526040812081611d37608085615a64565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461168c57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107cb565b606088516001600160401b03811115611ddb57611ddb613d0a565b604051908082528060200260200182016040528015611e2057816020015b6040805180820190915260008082526020820152815260200190600190039081611df95790505b509050811560005b8a51811015611f635781611ec057848482818110611e4857611e486153e2565b9050602002016020810190611e5d9190615a8a565b63ffffffff1615611ec057848482818110611e7a57611e7a6153e2565b9050602002016020810190611e8f9190615a8a565b8b8281518110611ea157611ea16153e2565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f3e8b8281518110611ed557611ed56153e2565b60200260200101518b8b8b8b8b87818110611ef257611ef26153e2565b9050602002810190611f049190615aa5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f3892505050565b838281518110611f5057611f506153e2565b6020908102919091010152600101611e28565b505098975050505050505050565b6000611f7c83613218565b8015610d5e5750610d5e8383613263565b80516001600160a01b0316611fb5576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b336001600160a01b038216036120c45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107cb565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612140576000604051631b3fab5160e11b81526004016107cb9190615aeb565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003612191576060840151600182018054911515620100000262ff0000199092169190911790556121cd565b6060840151600182015460ff62010000909104161515901515146121cd576040516321fd80df60e21b815260ff841660048201526024016107cb565b60a0840151805161010010156121f9576001604051631b3fab5160e11b81526004016107cb9190615aeb565b805160000361221e576005604051631b3fab5160e11b81526004016107cb9190615aeb565b612284848460030180548060200260200160405190810160405280929190818152602001828054801561227a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161225c575b5050505050613305565b8460600151156123b4576122f2848460020180548060200260200160405190810160405280929190818152602001828054801561227a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161225c575050505050613305565b60808501518051610100101561231e576002604051631b3fab5160e11b81526004016107cb9190615aeb565b604086015161232e906003615b05565b60ff16815111612354576003604051631b3fab5160e11b81526004016107cb9190615aeb565b81518151101561237a576001604051631b3fab5160e11b81526004016107cb9190615aeb565b805160018401805461ff00191661010060ff8416021790556123a59060028601906020840190613c90565b506123b28582600161336e565b505b6123c08482600261336e565b80516123d59060038501906020840190613c90565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361242e9389939260028a01929190615b21565b60405180910390a16112ac846134c9565b6000610d5e8383613520565b8251600090815b818110156125fe576000600188868460208110612471576124716153e2565b61247e91901a601b615a27565b898581518110612490576124906153e2565b60200260200101518986815181106124aa576124aa6153e2565b6020026020010151604051600081526020016040526040516124e8949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561250a573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561256b5761256b614306565b600281111561257c5761257c614306565b905250905060018160200151600281111561259957612599614306565b146125b757604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b8516156125e157604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612452565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa158015612685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a991906154c7565b1561271a5780156126d857604051637edeb53960e11b81526001600160401b03831660048201526024016107cb565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b6000612725836118f5565b6001018054612733906154e4565b80601f016020809104026020016040519081016040528092919081815260200182805461275f906154e4565b80156127ac5780601f10612781576101008083540402835291602001916127ac565b820191906000526020600020905b81548152906001019060200180831161278f57829003601f168201915b505050602088015151929350505060008190036127ea57855160405163676cf24b60e11b81526001600160401b0390911660048201526024016107cb565b856040015151811461280f576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561282957612829613d0a565b604051908082528060200260200182016040528015612852578160200160208202803683370190505b50905060005b828110156129f657600088602001518281518110612878576128786153e2565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146128ef5780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107cb565b866001600160401b03168160000151602001516001600160401b03161461294357805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107cb565b6129d0817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129b594939291909384526001600160401b03928316602085015291166040830152606082015260800190565b6040516020818303038152906040528051906020012061356f565b8383815181106129e2576129e26153e2565b602090810291909101015250600101612858565b506000612a0d86838a606001518b60800151613677565b905080600003612a3b57604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107cb565b60005b83811015610a435760005a905060008a602001518381518110612a6357612a636153e2565b602002602001015190506000612a818a836000015160600151610d12565b90506000816003811115612a9757612a97614306565b1480612ab457506003816003811115612ab257612ab2614306565b145b612b0a57815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f06565b60608915612be9578b8581518110612b2457612b246153e2565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b5288426156cc565b1190508080612b7257506003836003811115612b7057612b70614306565b145b612b9a576040516354e7e43160e11b81526001600160401b038d1660048201526024016107cb565b8c8681518110612bac57612bac6153e2565b602002602001015160000151600014612be3578c8681518110612bd157612bd16153e2565b60209081029190910101515160808501525b50612c55565b6000826003811115612bfd57612bfd614306565b14612c5557825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f06565b8251608001516001600160401b031615612d2e576000826003811115612c7d57612c7d614306565b03612d2e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612cde93929190615bd3565b6020604051808303816000875af1158015612cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2191906154c7565b612d2e5750505050612f06565b60008d604001518681518110612d4657612d466153e2565b6020026020010151905080518460a001515114612d9057835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107cb565b612da48c85600001516060015160016136b4565b600080612db2868486613759565b91509150612dc98e876000015160600151846136b4565b8c15612e20576003826003811115612de357612de3614306565b03612e20576000856003811115612dfc57612dfc614306565b14612e2057855151604051632b11b8d960e01b81526107cb91908390600401615bff565b6002826003811115612e3457612e34614306565b14612e79576003826003811115612e4d57612e4d614306565b14612e79578d866000015160600151836040516349362d1f60e11b81526004016107cb93929190615c18565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612ed157612ed16153e2565b602002602001015186865a612ee6908f6156cc565b604051612ef69493929190615c3d565b60405180910390a4505050505050505b600101612a3e565b6000826000018281548110612f2557612f256153e2565b9060005260206000200154905092915050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe09190615c74565b90506001600160a01b038116158061300f575061300d6001600160a01b03821663aff2afbf60e01b611f71565b155b156130385760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107cb565b60008061305088858c6040015163ffffffff1661380d565b9150915060008060006131036040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130cd9190615c91565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b179052878661138860846138f0565b92509250925082613129578160405163e1cd550960e01b81526004016107cb9190614036565b8151602014613158578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b60008280602001905181019061316e9190615d5d565b9050866001600160a01b03168c6001600160a01b0316146131ea57600061319f8d8a61319a868a6156cc565b61380d565b509050868110806131b95750816131b688836156cc565b14155b156131e85760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107cb565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b600061322b826301ffc9a760e01b613263565b8015610d61575061325c827fffffffff00000000000000000000000000000000000000000000000000000000613263565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156132ee575060208210155b80156132fa5750600081115b979650505050505050565b60005b8151811015610ff15760ff83166000908152600360205260408120835190919084908490811061333a5761333a6153e2565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613308565b60005b8251811015610ab157600083828151811061338e5761338e6153e2565b60200260200101519050600060028111156133ab576133ab614306565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156133ea576133ea614306565b1461340b576004604051631b3fab5160e11b81526004016107cb9190615aeb565b6001600160a01b0381166134325760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561345857613458614306565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134b5576134b5614306565b021790555090505050806001019050613371565b60ff81166105445760ff8082166000908152600260205260409020600101546201000090041661350c57604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b600081815260018301602052604081205461356757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d61565b506000610d61565b8151805160608085015190830151608080870151940151604051600095869588956135d395919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136169190615e17565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136858585856139ca565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136c36080856156f5565b6001600160401b03166136d6919061571b565b905060006136e48585611d13565b9050816136f3600160046156cc565b901b19168183600381111561370a5761370a614306565b6001600160401b03871660009081526009602052604081209190921b92909217918291613738608088615a64565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061378690889088908890600401615eae565b600060405180830381600087803b1580156137a057600080fd5b505af19250505080156137b1575060015b6137f0573d8080156137df576040519150601f19603f3d011682016040523d82523d6000602084013e6137e4565b606091505b50600392509050613805565b50506040805160208101909152600081526002905b935093915050565b600080600080600061386e8860405160240161383891906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052888861138860846138f0565b92509250925082613894578160405163e1cd550960e01b81526004016107cb9190614036565b60208251146138c3578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b818060200190518101906138d79190615d5d565b6138e182886156cc565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561391257613912613d0a565b6040519080825280601f01601f19166020018201604052801561393c576020820181803683370190505b509150863b6139565763030ed58f60e21b60005260046000fd5b5a8581101561397057632be8ca8b60e21b60005260046000fd5b8590036040810481038710613990576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139b35750835b808352806000602085013e50955095509592505050565b82518251600091908183036139f257604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a0657506101018111155b613a23576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a4d576040516309bde33960e01b815260040160405180910390fd5b80600003613a7a5786600081518110613a6857613a686153e2565b60200260200101519350505050613c48565b6000816001600160401b03811115613a9457613a94613d0a565b604051908082528060200260200182016040528015613abd578160200160208202803683370190505b50905060008080805b85811015613be75760006001821b8b811603613b215788851015613b0a578c5160018601958e918110613afb57613afb6153e2565b60200260200101519050613b43565b8551600185019487918110613afb57613afb6153e2565b8b5160018401938d918110613b3857613b386153e2565b602002602001015190505b600089861015613b73578d5160018701968f918110613b6457613b646153e2565b60200260200101519050613b95565b8651600186019588918110613b8a57613b8a6153e2565b602002602001015190505b82851115613bb6576040516309bde33960e01b815260040160405180910390fd5b613bc08282613c4f565b878481518110613bd257613bd26153e2565b60209081029190910101525050600101613ac6565b506001850382148015613bf957508683145b8015613c0457508581145b613c21576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c3657613c366153e2565b60200260200101519750505050505050505b9392505050565b6000818310613c6757613c628284613c6d565b610d5e565b610d5e83835b604080516001602082015290810183905260608101829052600090608001613659565b828054828255906000526020600020908101928215613ce5579160200282015b82811115613ce557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613cb0565b50613cf1929150613cf5565b5090565b5b80821115613cf15760008155600101613cf6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d4257613d42613d0a565b60405290565b60405160a081016001600160401b0381118282101715613d4257613d42613d0a565b60405160c081016001600160401b0381118282101715613d4257613d42613d0a565b604080519081016001600160401b0381118282101715613d4257613d42613d0a565b604051601f8201601f191681016001600160401b0381118282101715613dd657613dd6613d0a565b604052919050565b60006001600160401b03821115613df757613df7613d0a565b5060051b60200190565b6001600160a01b038116811461054457600080fd5b80356001600160401b0381168114613e2d57600080fd5b919050565b801515811461054457600080fd5b8035613e2d81613e32565b60006001600160401b03821115613e6457613e64613d0a565b50601f01601f191660200190565b600082601f830112613e8357600080fd5b8135613e96613e9182613e4b565b613dae565b818152846020838601011115613eab57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613edb57600080fd5b82356001600160401b0380821115613ef257600080fd5b818501915085601f830112613f0657600080fd5b8135613f14613e9182613dde565b81815260059190911b83018401908481019088831115613f3357600080fd5b8585015b83811015613fd957803585811115613f4f5760008081fd5b86016080818c03601f1901811315613f675760008081fd5b613f6f613d20565b89830135613f7c81613e01565b81526040613f8b848201613e16565b8b830152606080850135613f9e81613e32565b83830152928401359289841115613fb757600091508182fd5b613fc58f8d86880101613e72565b908301525085525050918601918601613f37565b5098975050505050505050565b60005b83811015614001578181015183820152602001613fe9565b50506000910152565b60008151808452614022816020860160208601613fe6565b601f01601f19169290920160200192915050565b602081526000610d5e602083018461400a565b8060608101831015610d6157600080fd5b60008083601f84011261406c57600080fd5b5081356001600160401b0381111561408357600080fd5b60208301915083602082850101111561409b57600080fd5b9250929050565b60008083601f8401126140b457600080fd5b5081356001600160401b038111156140cb57600080fd5b6020830191508360208260051b850101111561409b57600080fd5b60008060008060008060008060e0898b03121561410257600080fd5b61410c8a8a614049565b975060608901356001600160401b038082111561412857600080fd5b6141348c838d0161405a565b909950975060808b013591508082111561414d57600080fd5b6141598c838d016140a2565b909750955060a08b013591508082111561417257600080fd5b5061417f8b828c016140a2565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141ad57600080fd5b6141b78585614049565b925060608401356001600160401b038111156141d257600080fd5b6141de8682870161405a565b9497909650939450505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136ac608085018261400a565b604080825283519082018190526000906020906060840190828701845b828110156142745781516001600160401b03168452928401929084019060010161424f565b50505083810382850152845180825282820190600581901b8301840187850160005b838110156142c457601f198684030185526142b28383516141eb565b94870194925090860190600101614296565b50909998505050505050505050565b600080604083850312156142e657600080fd5b6142ef83613e16565b91506142fd60208401613e16565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061432c5761432c614306565b9052565b60208101610d61828461431c565b600060a0828403121561435057600080fd5b614358613d48565b90508135815261436a60208301613e16565b602082015261437b60408301613e16565b604082015261438c60608301613e16565b606082015261439d60808301613e16565b608082015292915050565b8035613e2d81613e01565b803563ffffffff81168114613e2d57600080fd5b600082601f8301126143d857600080fd5b813560206143e8613e9183613dde565b82815260059290921b8401810191818101908684111561440757600080fd5b8286015b848110156144d75780356001600160401b038082111561442b5760008081fd5b9088019060a0828b03601f19018113156144455760008081fd5b61444d613d48565b878401358381111561445f5760008081fd5b61446d8d8a83880101613e72565b82525060408085013561447f81613e01565b828a015260606144908682016143b3565b828401526080915081860135858111156144aa5760008081fd5b6144b88f8c838a0101613e72565b918401919091525091909301359083015250835291830191830161440b565b509695505050505050565b600061014082840312156144f557600080fd5b6144fd613d6a565b9050614509838361433e565b815260a08201356001600160401b038082111561452557600080fd5b61453185838601613e72565b602084015260c084013591508082111561454a57600080fd5b61455685838601613e72565b604084015261456760e085016143a8565b6060840152610100840135608084015261012084013591508082111561458c57600080fd5b50614599848285016143c7565b60a08301525092915050565b600082601f8301126145b657600080fd5b813560206145c6613e9183613dde565b82815260059290921b840181019181810190868411156145e557600080fd5b8286015b848110156144d75780356001600160401b038111156146085760008081fd5b6146168986838b01016144e2565b8452509183019183016145e9565b600082601f83011261463557600080fd5b81356020614645613e9183613dde565b82815260059290921b8401810191818101908684111561466457600080fd5b8286015b848110156144d75780356001600160401b038082111561468757600080fd5b818901915089603f83011261469b57600080fd5b858201356146ab613e9182613dde565b81815260059190911b830160400190878101908c8311156146cb57600080fd5b604085015b83811015614704578035858111156146e757600080fd5b6146f68f6040838a0101613e72565b8452509189019189016146d0565b50875250505092840192508301614668565b600082601f83011261472757600080fd5b81356020614737613e9183613dde565b8083825260208201915060208460051b87010193508684111561475957600080fd5b602086015b848110156144d7578035835291830191830161475e565b600082601f83011261478657600080fd5b81356020614796613e9183613dde565b82815260059290921b840181019181810190868411156147b557600080fd5b8286015b848110156144d75780356001600160401b03808211156147d95760008081fd5b9088019060a0828b03601f19018113156147f35760008081fd5b6147fb613d48565b614806888501613e16565b81526040808501358481111561481c5760008081fd5b61482a8e8b838901016145a5565b8a84015250606080860135858111156148435760008081fd5b6148518f8c838a0101614624565b838501525060809150818601358581111561486c5760008081fd5b61487a8f8c838a0101614716565b91840191909152509190930135908301525083529183019183016147b9565b600080604083850312156148ac57600080fd5b6001600160401b03833511156148c157600080fd5b6148ce8484358501614775565b91506001600160401b03602084013511156148e857600080fd5b6020830135830184601f8201126148fe57600080fd5b61490b613e918235613dde565b81358082526020808301929160051b84010187101561492957600080fd5b602083015b6020843560051b850101811015614acf576001600160401b038135111561495457600080fd5b87603f82358601011261496657600080fd5b614979613e916020833587010135613dde565b81358501602081810135808452908301929160059190911b016040018a10156149a157600080fd5b604083358701015b83358701602081013560051b01604001811015614abf576001600160401b03813511156149d557600080fd5b833587018135016040818d03603f190112156149f057600080fd5b6149f8613d8c565b604082013581526001600160401b0360608301351115614a1757600080fd5b8c605f606084013584010112614a2c57600080fd5b6040606083013583010135614a43613e9182613dde565b808282526020820191508f60608460051b6060880135880101011115614a6857600080fd5b6060808601358601015b60608460051b606088013588010101811015614a9f57614a91816143b3565b835260209283019201614a72565b5080602085015250505080855250506020830192506020810190506149a9565b508452506020928301920161492e565b508093505050509250929050565b600080600080600060608688031215614af557600080fd5b85356001600160401b0380821115614b0c57600080fd5b614b1889838a016144e2565b96506020880135915080821115614b2e57600080fd5b614b3a89838a016140a2565b90965094506040880135915080821115614b5357600080fd5b50614b60888289016140a2565b969995985093965092949392505050565b600060608284031215614b8357600080fd5b604051606081018181106001600160401b0382111715614ba557614ba5613d0a565b6040528235614bb381613e01565b8152614bc1602084016143b3565b60208201526040830135614bd481613e01565b60408201529392505050565b600060208284031215614bf257600080fd5b81356001600160401b03811115614c0857600080fd5b820160a08185031215613c4857600080fd5b803560ff81168114613e2d57600080fd5b600060208284031215614c3d57600080fd5b610d5e82614c1a565b60008151808452602080850194506020840160005b83811015614c805781516001600160a01b031687529582019590820190600101614c5b565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614cda60e0840182614c46565b90506040840151601f198483030160c0850152614cf78282614c46565b95945050505050565b60008060408385031215614d1357600080fd5b614d1c83613e16565b946020939093013593505050565b600060208284031215614d3c57600080fd5b610d5e82613e16565b602081526000610d5e60208301846141eb565b600060208284031215614d6a57600080fd5b8135613c4881613e01565b600082601f830112614d8657600080fd5b81356020614d96613e9183613dde565b8083825260208201915060208460051b870101935086841115614db857600080fd5b602086015b848110156144d7578035614dd081613e01565b8352918301918301614dbd565b60006020808385031215614df057600080fd5b82356001600160401b0380821115614e0757600080fd5b818501915085601f830112614e1b57600080fd5b8135614e29613e9182613dde565b81815260059190911b83018401908481019088831115614e4857600080fd5b8585015b83811015613fd957803585811115614e6357600080fd5b860160c0818c03601f19011215614e7a5760008081fd5b614e82613d6a565b8882013581526040614e95818401614c1a565b8a8301526060614ea6818501614c1a565b8284015260809150614eb9828501613e40565b9083015260a08381013589811115614ed15760008081fd5b614edf8f8d83880101614d75565b838501525060c0840135915088821115614ef95760008081fd5b614f078e8c84870101614d75565b9083015250845250918601918601614e4c565b80356001600160e01b0381168114613e2d57600080fd5b600082601f830112614f4257600080fd5b81356020614f52613e9183613dde565b82815260069290921b84018101918181019086841115614f7157600080fd5b8286015b848110156144d75760408189031215614f8e5760008081fd5b614f96613d8c565b614f9f82613e16565b8152614fac858301614f1a565b81860152835291830191604001614f75565b600082601f830112614fcf57600080fd5b81356020614fdf613e9183613dde565b82815260059290921b84018101918181019086841115614ffe57600080fd5b8286015b848110156144d75780356001600160401b03808211156150225760008081fd5b9088019060a0828b03601f190181131561503c5760008081fd5b615044613d48565b61504f888501613e16565b8152604080850135848111156150655760008081fd5b6150738e8b83890101613e72565b8a8401525060609350615087848601613e16565b908201526080615098858201613e16565b93820193909352920135908201528352918301918301615002565b600082601f8301126150c457600080fd5b813560206150d4613e9183613dde565b82815260069290921b840181019181810190868411156150f357600080fd5b8286015b848110156144d757604081890312156151105760008081fd5b615118613d8c565b8135815284820135858201528352918301916040016150f7565b6000602080838503121561514557600080fd5b82356001600160401b038082111561515c57600080fd5b908401906080828703121561517057600080fd5b615178613d20565b82358281111561518757600080fd5b8301604081890381131561519a57600080fd5b6151a2613d8c565b8235858111156151b157600080fd5b8301601f81018b136151c257600080fd5b80356151d0613e9182613dde565b81815260069190911b8201890190898101908d8311156151ef57600080fd5b928a01925b8284101561523f5785848f03121561520c5760008081fd5b615214613d8c565b843561521f81613e01565b815261522c858d01614f1a565b818d0152825292850192908a01906151f4565b84525050508287013591508482111561525757600080fd5b6152638a838501614f31565b8188015283525050828401358281111561527c57600080fd5b61528888828601614fbe565b858301525060408301359350818411156152a157600080fd5b6152ad878585016150b3565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561535a57601f19868403018952815160a06001600160401b0380835116865286830151828888015261531e8388018261400a565b604085810151841690890152606080860151909316928801929092525060809283015192909501919091525097830197908301906001016152e6565b5090979650505050505050565b6001600160a01b03851681526000602060808184015261538a60808401876152c9565b83810360408581019190915286518083528388019284019060005b818110156153ca578451805184528601518684015293850193918301916001016153a5565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561544f57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615418565b50508583015187820388850152805180835290840192506000918401905b808310156154a857835180516001600160401b031683528501516001600160e01b03168583015292840192600192909201919085019061546d565b50979650505050505050565b602081526000610d5e60208301846153f8565b6000602082840312156154d957600080fd5b8151613c4881613e32565b600181811c908216806154f857607f821691505b60208210810361551857634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461552c816154e4565b60018281168015615544576001811461555957615588565b60ff1984168752821515830287019450615588565b8760005260208060002060005b8581101561557f5781548a820152908401908201615566565b50505082870194505b50929695505050505050565b600081546155a1816154e4565b8085526020600183811680156155be57600181146155d857615606565b60ff1985168884015283151560051b880183019550615606565b866000528260002060005b858110156155fe5781548a82018601529083019084016155e3565b890184019650505b505050505092915050565b604081526000615624604083018561400a565b8281036020840152614cf78185615594565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561566c5761566c615636565b5092915050565b60408152600061568660408301856152c9565b8281036020840152614cf781856153f8565b6000602082840312156156aa57600080fd5b81356001600160401b038111156156c057600080fd5b6136ac84828501614775565b81810381811115610d6157610d61615636565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061570f5761570f6156df565b92169190910692915050565b8082028115828204841417610d6157610d61615636565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261576560a087018261400a565b90506060850151868203606088015261577e828261400a565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154a857835180516001600160a01b03168352860151868301529285019260019290920191908401906157a1565b602081526000610d5e6020830184615732565b6080815260006157f96080830187615732565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561583757600080fd5b835161584281613e32565b60208501519093506001600160401b0381111561585e57600080fd5b8401601f8101861361586f57600080fd5b805161587d613e9182613e4b565b81815287602083850101111561589257600080fd5b6158a3826020830160208601613fe6565b809450505050604084015190509250925092565b601f821115610ff1576000816000526020600020601f850160051c810160208610156158e05750805b601f850160051c820191505b818110156158ff578281556001016158ec565b505050505050565b81516001600160401b0381111561592057615920613d0a565b6159348161592e84546154e4565b846158b7565b602080601f83116001811461596957600084156159515750858301515b600019600386901b1c1916600185901b1785556158ff565b600085815260208120601f198616915b8281101561599857888601518255948401946001909101908401615979565b50858210156159b65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610d5e60a0830160018501615594565b80820180821115610d6157610d61615636565b60ff8181168382160190811115610d6157610d61615636565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615a7e57615a7e6156df565b92169190910492915050565b600060208284031215615a9c57600080fd5b610d5e826143b3565b6000808335601e19843603018112615abc57600080fd5b8301803591506001600160401b03821115615ad657600080fd5b60200191503681900382131561409b57600080fd5b6020810160068310615aff57615aff614306565b91905290565b60ff818116838216029081169081811461566c5761566c615636565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b795784546001600160a01b031683526001948501949284019201615b54565b50508481036060860152865180825290820192508187019060005b81811015615bb95782516001600160a01b031685529383019391830191600101615b94565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614cf7606083018461400a565b8281526040602082015260006136ac604083018461400a565b6001600160401b03848116825283166020820152606081016136ac604083018461431c565b848152615c4d602082018561431c565b608060408201526000615c63608083018561400a565b905082606083015295945050505050565b600060208284031215615c8657600080fd5b8151613c4881613e01565b6020815260008251610100806020850152615cb061012085018361400a565b91506020850151615ccc60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d0660a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d23848361400a565b935060c08701519150808685030160e0870152615d40848361400a565b935060e0870151915080868503018387015250615bc9838261400a565b600060208284031215615d6f57600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561535a57601f19868403018952815160a08151818652615db98287018261400a565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615df5838261400a565b6080948501519790940196909652505098840198925090830190600101615d93565b602081526000610d5e6020830184615d76565b60008282518085526020808601955060208260051b8401016020860160005b8481101561535a57601f19868403018952615e6583835161400a565b98840198925090830190600101615e49565b60008151808452602080850194506020840160005b83811015614c8057815163ffffffff1687529582019590820190600101615e8c565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f166101a085018361400a565b91506040870151605f198086850301610120870152615f35848361400a565b935060608901519150615f52838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f7b8282615d76565b9150508281036020840152615f908186615e2a565b90508281036040840152615bc98185615e7756fea164736f6c6343000818000a", } 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 2ddd0279913..6a1d8342103 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 @@ -16,7 +16,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 eb234dfb57c6dc64f83cfbf9d78a27939a7241fd0de41342d41c919c156a3633 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 9964a45e079950719c13a9485bf4d479e2a87a5f395c4fef645a8520b0ac42e6 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin c136eccc974484bb87e472fb778f6a34f847abf57f1819766e669545bd67fbba onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 4766632d0938b33bfa04f30a5e6b301a944b6920dc1101ce8230e6b23706e898 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 75be86323c227917a9bbc3f799d7ed02f92db546653a36db30ed0ebe64461353