diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 66c73ce95c..048ee36040 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -91,15 +91,15 @@ CommitStore_verify:testPausedReverts() (gas: 18438) CommitStore_verify:testTooManyLeavesReverts() (gas: 36830) DefensiveExampleTest:testHappyPathSuccess() (gas: 174862) DefensiveExampleTest:testRecovery() (gas: 399786) -E2E:testE2E_3MessagesSuccess_gas() (gas: 885971) +E2E:testE2E_3MessagesSuccess_gas() (gas: 886142) EVM2EVMOffRamp__releaseOrMintTokens:testRateLimitErrorsReverts() (gas: 443866) EVM2EVMOffRamp__releaseOrMintTokens:testTokenHandlingErrorReverts() (gas: 103420) EVM2EVMOffRamp__releaseOrMintTokens:testUnsupportedTokenReverts() (gas: 18202) EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokensSuccess() (gas: 140615) -EVM2EVMOffRamp__report:testReportSuccess() (gas: 127066) +EVM2EVMOffRamp__report:testReportSuccess() (gas: 127123) EVM2EVMOffRamp__trialExecute:testRateLimitErrorSuccess() (gas: 174918) EVM2EVMOffRamp__trialExecute:testTokenHandlingErrorIsCaughtSuccess() (gas: 183240) -EVM2EVMOffRamp__trialExecute:test_trialExecuteSuccess() (gas: 236606) +EVM2EVMOffRamp__trialExecute:test_trialExecuteSuccess() (gas: 236663) EVM2EVMOffRamp_applyPoolUpdates:testApplyPoolUpdatesSuccess() (gas: 2435136) EVM2EVMOffRamp_applyPoolUpdates:testInvalidTokenPoolConfigReverts() (gas: 17445) EVM2EVMOffRamp_applyPoolUpdates:testOnlyCallableByOwnerReverts() (gas: 16012) @@ -111,53 +111,53 @@ EVM2EVMOffRamp_constructor:testCommitStoreAlreadyInUseReverts() (gas: 168848) EVM2EVMOffRamp_constructor:testConstructorSuccess() (gas: 5728147) EVM2EVMOffRamp_constructor:testTokenConfigMismatchReverts() (gas: 145215) EVM2EVMOffRamp_constructor:testZeroOnRampAddressReverts() (gas: 2538111) -EVM2EVMOffRamp_execute:testAlreadyExecutedReverts() (gas: 137118) +EVM2EVMOffRamp_execute:testAlreadyExecutedReverts() (gas: 137175) EVM2EVMOffRamp_execute:testEmptyReportReverts() (gas: 19016) EVM2EVMOffRamp_execute:testInvalidMessageIdReverts() (gas: 34063) EVM2EVMOffRamp_execute:testInvalidSourceChainReverts() (gas: 49347) EVM2EVMOffRamp_execute:testManualExecutionNotYetEnabledReverts() (gas: 44104) EVM2EVMOffRamp_execute:testMessageTooLargeReverts() (gas: 150111) EVM2EVMOffRamp_execute:testPausedReverts() (gas: 74942) -EVM2EVMOffRamp_execute:testReceiverErrorSuccess() (gas: 163484) +EVM2EVMOffRamp_execute:testReceiverErrorSuccess() (gas: 163541) EVM2EVMOffRamp_execute:testRootNotCommittedReverts() (gas: 38980) -EVM2EVMOffRamp_execute:testRouterYULCallReverts() (gas: 413553) -EVM2EVMOffRamp_execute:testSingleMessageNoTokensSuccess() (gas: 173125) +EVM2EVMOffRamp_execute:testRouterYULCallReverts() (gas: 413610) +EVM2EVMOffRamp_execute:testSingleMessageNoTokensSuccess() (gas: 173239) EVM2EVMOffRamp_execute:testSingleMessageToNonCCIPReceiverSuccess() (gas: 246243) -EVM2EVMOffRamp_execute:testSingleMessagesNoTokensSuccess_gas() (gas: 114462) -EVM2EVMOffRamp_execute:testSkippedIncorrectNonceStillExecutesSuccess() (gas: 323885) +EVM2EVMOffRamp_execute:testSingleMessagesNoTokensSuccess_gas() (gas: 114519) +EVM2EVMOffRamp_execute:testSkippedIncorrectNonceStillExecutesSuccess() (gas: 323942) EVM2EVMOffRamp_execute:testSkippedIncorrectNonceSuccess() (gas: 51868) -EVM2EVMOffRamp_execute:testStrictUntouchedToSuccessSuccess() (gas: 130684) +EVM2EVMOffRamp_execute:testStrictUntouchedToSuccessSuccess() (gas: 130741) EVM2EVMOffRamp_execute:testTokenDataMismatchReverts() (gas: 49702) -EVM2EVMOffRamp_execute:testTwoMessagesWithTokensAndGESuccess() (gas: 442944) -EVM2EVMOffRamp_execute:testTwoMessagesWithTokensSuccess_gas() (gas: 402118) +EVM2EVMOffRamp_execute:testTwoMessagesWithTokensAndGESuccess() (gas: 443058) +EVM2EVMOffRamp_execute:testTwoMessagesWithTokensSuccess_gas() (gas: 402232) EVM2EVMOffRamp_execute:testUnexpectedTokenDataReverts() (gas: 33032) -EVM2EVMOffRamp_execute:testUnhealthyReverts() (gas: 419545) +EVM2EVMOffRamp_execute:testUnhealthyReverts() (gas: 419659) EVM2EVMOffRamp_execute:testUnsupportedNumberOfTokensReverts() (gas: 61416) EVM2EVMOffRamp_execute:testUnsupportedTokenReverts() (gas: 130374) EVM2EVMOffRamp_executeSingleMessage:testMessageSenderReverts() (gas: 20545) -EVM2EVMOffRamp_executeSingleMessage:testNoTokensSuccess() (gas: 47863) +EVM2EVMOffRamp_executeSingleMessage:testNoTokensSuccess() (gas: 47920) EVM2EVMOffRamp_executeSingleMessage:testNonContractSuccess() (gas: 20105) EVM2EVMOffRamp_executeSingleMessage:testNonContractWithTokensSuccess() (gas: 205101) EVM2EVMOffRamp_executeSingleMessage:testTokenHandlingErrorReverts() (gas: 140016) -EVM2EVMOffRamp_executeSingleMessage:testTokensSuccess() (gas: 233891) -EVM2EVMOffRamp_executeSingleMessage:testZeroGasDONExecutionReverts() (gas: 48411) -EVM2EVMOffRamp_execute_upgrade:testV2NonceNewSenderStartsAtZeroSuccess() (gas: 231687) -EVM2EVMOffRamp_execute_upgrade:testV2NonceStartsAtV1NonceSuccess() (gas: 279402) -EVM2EVMOffRamp_execute_upgrade:testV2OffRampNonceSkipsIfMsgInFlightSuccess() (gas: 260739) -EVM2EVMOffRamp_execute_upgrade:testV2SenderNoncesReadsPreviousRampSuccess() (gas: 224692) -EVM2EVMOffRamp_execute_upgrade:testV2Success() (gas: 131199) +EVM2EVMOffRamp_executeSingleMessage:testTokensSuccess() (gas: 233948) +EVM2EVMOffRamp_executeSingleMessage:testZeroGasDONExecutionReverts() (gas: 48468) +EVM2EVMOffRamp_execute_upgrade:testV2NonceNewSenderStartsAtZeroSuccess() (gas: 231801) +EVM2EVMOffRamp_execute_upgrade:testV2NonceStartsAtV1NonceSuccess() (gas: 279573) +EVM2EVMOffRamp_execute_upgrade:testV2OffRampNonceSkipsIfMsgInFlightSuccess() (gas: 260853) +EVM2EVMOffRamp_execute_upgrade:testV2SenderNoncesReadsPreviousRampSuccess() (gas: 224863) +EVM2EVMOffRamp_execute_upgrade:testV2Success() (gas: 131256) EVM2EVMOffRamp_getDestinationToken:testGetDestinationTokenSuccess() (gas: 32786) EVM2EVMOffRamp_getDestinationToken:testUnsupportedTokenReverts() (gas: 13763) EVM2EVMOffRamp_getDestinationTokens:testGetDestinationTokensSuccess() (gas: 26091) EVM2EVMOffRamp_getExecutionState:testFillExecutionStateSuccess() (gas: 3047481) EVM2EVMOffRamp_getExecutionState:test_GetExecutionStateSuccess() (gas: 76354) -EVM2EVMOffRamp_manuallyExecute:testLowGasLimitManualExecSuccess() (gas: 496539) +EVM2EVMOffRamp_manuallyExecute:testLowGasLimitManualExecSuccess() (gas: 496653) EVM2EVMOffRamp_manuallyExecute:testManualExecForkedChainReverts() (gas: 25977) EVM2EVMOffRamp_manuallyExecute:testManualExecGasLimitMismatchReverts() (gas: 43615) EVM2EVMOffRamp_manuallyExecute:testManualExecInvalidGasLimitReverts() (gas: 26018) -EVM2EVMOffRamp_manuallyExecute:testManualExecSuccess() (gas: 189219) -EVM2EVMOffRamp_manuallyExecute:testManualExecWithGasOverrideSuccess() (gas: 189846) -EVM2EVMOffRamp_manuallyExecute:testReentrancyManualExecuteFAILS() (gas: 1856032) +EVM2EVMOffRamp_manuallyExecute:testManualExecSuccess() (gas: 189333) +EVM2EVMOffRamp_manuallyExecute:testManualExecWithGasOverrideSuccess() (gas: 189960) +EVM2EVMOffRamp_manuallyExecute:testReentrancyManualExecuteFAILS() (gas: 1856089) EVM2EVMOffRamp_metadataHash:testMetadataHashSuccess() (gas: 6086) EVM2EVMOffRamp_setDynamicConfig:testNonOwnerReverts() (gas: 44539) EVM2EVMOffRamp_setDynamicConfig:testRouterZeroAddressReverts() (gas: 38587) @@ -337,8 +337,8 @@ RateLimiter_consume:testTokenRateLimitReachedReverts() (gas: 24448) RateLimiter_currentTokenBucketState:testCurrentTokenBucketStateSuccess() (gas: 32403) RateLimiter_currentTokenBucketState:testRefillSuccess() (gas: 41673) RateLimiter_setTokenBucketConfig:testSetRateLimiterConfigSuccess() (gas: 35459) -Router_applyRampUpdates:testOffRampDisable() (gas: 158599) -Router_applyRampUpdates:testOffRampMismatchReverts() (gas: 89265) +Router_applyRampUpdates:testOffRampDisable() (gas: 158798) +Router_applyRampUpdates:testOffRampMismatchReverts() (gas: 89355) Router_applyRampUpdates:testOnRampDisable() (gas: 52531) Router_applyRampUpdates:testOnlyOwnerReverts() (gas: 12260) Router_ccipSend:testCCIPSendLinkFeeNoTokenSuccess_gas() (gas: 110664) @@ -366,10 +366,10 @@ Router_recoverTokens:testRecoverTokensNoFundsReverts() (gas: 17770) Router_recoverTokens:testRecoverTokensNonOwnerReverts() (gas: 15354) Router_recoverTokens:testRecoverTokensSuccess() (gas: 48644) Router_recoverTokens:testRecoverTokensValueReceiverReverts() (gas: 444763) -Router_routeMessage:testAutoExecSuccess() (gas: 39163) -Router_routeMessage:testExecutionEventSuccess() (gas: 209995) -Router_routeMessage:testManualExecSuccess() (gas: 31317) -Router_routeMessage:testOnlyOffRampReverts() (gas: 27213) +Router_routeMessage:testAutoExecSuccess() (gas: 39277) +Router_routeMessage:testExecutionEventSuccess() (gas: 210166) +Router_routeMessage:testManualExecSuccess() (gas: 31374) +Router_routeMessage:testOnlyOffRampReverts() (gas: 27270) Router_routeMessage:testWhenNotHealthyReverts() (gas: 43002) Router_setWrappedNative:testOnlyOwnerReverts() (gas: 10978) ThirdPartyBurnMintTokenPool_lockOrBurn:testLockOrBurnWithAllowListReverts() (gas: 21834) diff --git a/contracts/src/v0.8/ccip/Router.sol b/contracts/src/v0.8/ccip/Router.sol index 29e8b8c1f8..4604763c1d 100644 --- a/contracts/src/v0.8/ccip/Router.sol +++ b/contracts/src/v0.8/ccip/Router.sol @@ -159,7 +159,7 @@ contract Router is IRouter, IRouterClient, ITypeAndVersion, OwnerIsCreator { ) external override whenHealthy returns (bool success, bytes memory retData) { // We only permit offRamps to call this function. We have to encode the sourceChainSelector // and msg.sender into a uint256 to use as a key in the set. - if (!s_chainSelectorAndOffRamps.contains((uint256(message.sourceChainSelector) << 160) + uint160(msg.sender))) + if (!s_chainSelectorAndOffRamps.contains(_mergeChainSelectorAndOffRamp(message.sourceChainSelector, msg.sender))) revert OnlyOffRamp(); // We encode here instead of the offRamps to constrain specifically what functions @@ -178,6 +178,15 @@ contract Router is IRouter, IRouterClient, ITypeAndVersion, OwnerIsCreator { return (success, retData); } + // @notice Merges a chain selector and offRamp address into a single uint256 by shifting the + // chain selector 160 bits to the left. + function _mergeChainSelectorAndOffRamp( + uint64 sourceChainSelector, + address offRampAddress + ) internal pure returns (uint256) { + return (uint256(sourceChainSelector) << 160) + uint160(offRampAddress); + } + // ================================================================ // │ Config │ // ================================================================ @@ -221,7 +230,7 @@ contract Router is IRouter, IRouterClient, ITypeAndVersion, OwnerIsCreator { } function isOffRamp(address offRamp, uint64 sourceChainSelector) external view returns (bool) { - return s_chainSelectorAndOffRamps.contains((uint256(sourceChainSelector) << 160) + uint160(offRamp)); + return s_chainSelectorAndOffRamps.contains(_mergeChainSelectorAndOffRamp(sourceChainSelector, offRamp)); } /// @notice applyRampUpdates applies a set of ramp changes which provides @@ -245,7 +254,7 @@ contract Router is IRouter, IRouterClient, ITypeAndVersion, OwnerIsCreator { address offRampAddress = offRampRemoves[i].offRamp; // If the selector-offRamp pair does not exist, revert. - if (!s_chainSelectorAndOffRamps.remove((uint256(sourceChainSelector) << 160) + uint160(offRampAddress))) + if (!s_chainSelectorAndOffRamps.remove(_mergeChainSelectorAndOffRamp(sourceChainSelector, offRampAddress))) revert OffRampMismatch(sourceChainSelector, offRampAddress); emit OffRampRemoved(sourceChainSelector, offRampAddress); @@ -255,7 +264,7 @@ contract Router is IRouter, IRouterClient, ITypeAndVersion, OwnerIsCreator { uint64 sourceChainSelector = offRampAdds[i].sourceChainSelector; address offRampAddress = offRampAdds[i].offRamp; - if (s_chainSelectorAndOffRamps.add((uint256(sourceChainSelector) << 160) + uint160(offRampAddress))) { + if (s_chainSelectorAndOffRamps.add(_mergeChainSelectorAndOffRamp(sourceChainSelector, offRampAddress))) { emit OffRampAdded(sourceChainSelector, offRampAddress); } } diff --git a/core/gethwrappers/ccip/generated/router/router.go b/core/gethwrappers/ccip/generated/router/router.go index 9571540c41..29d8a2b644 100644 --- a/core/gethwrappers/ccip/generated/router/router.go +++ b/core/gethwrappers/ccip/generated/router/router.go @@ -63,7 +63,7 @@ type RouterOnRamp struct { var RouterMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wrappedNative\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BadARMSignal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedToSendValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFeeTokenAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMsgValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"InvalidRecipientAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"OffRampMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOffRamp\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"UnsupportedDestinationChain\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"calldataHash\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"OffRampAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"OffRampRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"}],\"name\":\"OnRampSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_RET_BYTES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"}],\"internalType\":\"structRouter.OnRamp[]\",\"name\":\"onRampUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"internalType\":\"structRouter.OffRamp[]\",\"name\":\"offRampRemoves\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"internalType\":\"structRouter.OffRamp[]\",\"name\":\"offRampAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyRampUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destinationChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getArmProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destinationChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOffRamps\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"internalType\":\"structRouter.OffRamp[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getOnRamp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWrappedNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"isChainSupported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"isOffRamp\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"recoverTokens\",\"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\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"routeMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"retData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wrappedNative\",\"type\":\"address\"}],\"name\":\"setWrappedNative\",\"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: "0x60a06040523480156200001157600080fd5b5060405162002dd738038062002dd78339810160408190526200003491620001af565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000e7565b5050600280546001600160a01b0319166001600160a01b039485161790555016608052620001e7565b336001600160a01b03821603620001415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620001aa57600080fd5b919050565b60008060408385031215620001c357600080fd5b620001ce8362000192565b9150620001de6020840162000192565b90509250929050565b608051612bc662000211600039600081816101f8015281816105de0152610b370152612bc66000f3fe6080604052600436106101295760003560e01c80639344d5c4116100a5578063a8d87a3b11610074578063e861e90711610059578063e861e90714610408578063f2fde38b14610433578063fbca3b741461045357600080fd5b8063a8d87a3b1461039b578063da5fcac8146103e857600080fd5b80639344d5c4146102e757806396f4e9f914610317578063a40e69c71461032a578063a48a90581461034c57600080fd5b806352cb60ca116100fc578063787350e3116100e1578063787350e31461027f57806379ba5097146102a75780638da5cb5b146102bc57600080fd5b806352cb60ca1461023d5780635f3e849f1461025f57600080fd5b8063181f5a771461012e57806320487ded1461018d5780633cf97983146101bb5780635246492f146101e9575b600080fd5b34801561013a57600080fd5b506101776040518060400160405280600c81526020017f526f7574657220312e302e30000000000000000000000000000000000000000081525081565b6040516101849190611fc5565b60405180910390f35b34801561019957600080fd5b506101ad6101a8366004612236565b610480565b604051908152602001610184565b3480156101c757600080fd5b506101db6101d6366004612333565b6105d8565b6040516101849291906123ab565b3480156101f557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b34801561024957600080fd5b5061025d6102583660046123c6565b61084b565b005b34801561026b57600080fd5b5061025d61027a3660046123e3565b61089a565b34801561028b57600080fd5b50610294608481565b60405161ffff9091168152602001610184565b3480156102b357600080fd5b5061025d6109e8565b3480156102c857600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610218565b3480156102f357600080fd5b50610307610302366004612424565b610ae5565b6040519015158152602001610184565b6101ad610325366004612236565b610b33565b34801561033657600080fd5b5061033f6110c4565b6040516101849190612459565b34801561035857600080fd5b506103076103673660046124c8565b67ffffffffffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b3480156103a757600080fd5b506102186103b63660046124c8565b67ffffffffffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b3480156103f457600080fd5b5061025d61040336600461252f565b6111d1565b34801561041457600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff16610218565b34801561043f57600080fd5b5061025d61044e3660046123c6565b611560565b34801561045f57600080fd5b5061047361046e3660046124c8565b611574565b60405161018491906125c9565b606081015160009073ffffffffffffffffffffffffffffffffffffffff166104c15760025473ffffffffffffffffffffffffffffffffffffffff1660608301525b67ffffffffffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610539576040517fae236d9c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024015b60405180910390fd5b6040517f20487ded00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906320487ded9061058d9087908790600401612700565b602060405180830381865afa1580156105aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ce9190612723565b9150505b92915050565b600060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b919061273c565b156106a2576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d63360a06106b860408a0160208b016124c8565b67ffffffffffffffff16901b6106ce919061278d565b600490611694565b61070c576040517fd2316ede00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006385572ffb60e01b8760405160240161072791906128ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506107b481858760848a6116ac565b90935091507f9b877de93ea9895756e337442c657f95a34fc68e7eb988bdfa693d5be83016b687356107ec60408a0160208b016124c8565b83516020850120604051610839939291339193845267ffffffffffffffff92909216602084015273ffffffffffffffffffffffffffffffffffffffff166040830152606082015260800190565b60405180910390a15094509492505050565b6108536117cf565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108a26117cf565b73ffffffffffffffffffffffffffffffffffffffff8216610907576040517f26a78f8f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610530565b73ffffffffffffffffffffffffffffffffffffffff83166109c25760008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461097c576040519150601f19603f3d011682016040523d82523d6000602084013e610981565b606091505b50509050806109bc576040517fe417b80b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6109e373ffffffffffffffffffffffffffffffffffffffff84168383611852565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610530565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000610b2c6106ce73ffffffffffffffffffffffffffffffffffffffff85167bffffffffffffffff000000000000000000000000000000000000000060a086901b1661278d565b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc4919061273c565b15610bfb576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610c6e576040517fae236d9c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610530565b606083015160009073ffffffffffffffffffffffffffffffffffffffff16610e005760025473ffffffffffffffffffffffffffffffffffffffff90811660608601526040517f20487ded000000000000000000000000000000000000000000000000000000008152908316906320487ded90610cf09088908890600401612700565b602060405180830381865afa158015610d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d319190612723565b905080341015610d6d576040517f07da6ee600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b349050836060015173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506060850151610dfb915073ffffffffffffffffffffffffffffffffffffffff168383611852565b610ef7565b3415610e38576040517f1841b4e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f20487ded00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906320487ded90610e8c9088908890600401612700565b602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd9190612723565b6060850151909150610ef79073ffffffffffffffffffffffffffffffffffffffff16338484611926565b60005b84604001515181101561101f57600085604001518281518110610f1f57610f1f6129b9565b6020908102919091010151516040517f5d86f14100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015291925061100e91339190871690635d86f14190602401602060405180830381865afa158015610fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc591906129e8565b88604001518581518110610fdb57610fdb6129b9565b6020026020010151602001518473ffffffffffffffffffffffffffffffffffffffff16611926909392919063ffffffff16565b5061101881612a05565b9050610efa565b506040517fdf0aa9e900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063df0aa9e990611078908890889086903390600401612a3d565b6020604051808303816000875af1158015611097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bb9190612723565b95945050505050565b606060006110d26004611984565b90506000815167ffffffffffffffff8111156110f0576110f0611ff5565b60405190808252806020026020018201604052801561113557816020015b604080518082019091526000808252602082015281526020019060019003908161110e5790505b50905060005b82518110156111ca576000838281518110611158576111586129b9565b60200260200101519050604051806040016040528060a083901c67ffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152508383815181106111ad576111ad6129b9565b602002602001018190525050806111c390612a05565b905061113b565b5092915050565b6111d96117cf565b60005b858110156112bd5760008787838181106111f8576111f86129b9565b90506040020180360381019061120e9190612a8d565b60208181018051835167ffffffffffffffff90811660009081526003855260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055855193519051921682529394509216917f1f7d0ec248b80e5c0dde0ee531c4fc8fdb6ce9a2b3d90f560c74acd6a7202f23910160405180910390a2506112b681612a05565b90506111dc565b5060005b838110156114365760008585838181106112dd576112dd6129b9565b6112f392602060409092020190810191506124c8565b90506000868684818110611309576113096129b9565b905060400201602001602081019061132191906123c6565b905061137061136873ffffffffffffffffffffffffffffffffffffffff83167bffffffffffffffff000000000000000000000000000000000000000060a086901b1661278d565b600490611991565b6113ce576040517f4964779000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8316600482015273ffffffffffffffffffffffffffffffffffffffff82166024820152604401610530565b60405173ffffffffffffffffffffffffffffffffffffffff8216815267ffffffffffffffff8316907fa823809efda3ba66c873364eec120fa0923d9fabda73bc97dd5663341e2d9bcb9060200160405180910390a250508061142f90612a05565b90506112c1565b5060005b81811015611557576000838383818110611456576114566129b9565b61146c92602060409092020190810191506124c8565b90506000848484818110611482576114826129b9565b905060400201602001602081019061149a91906123c6565b90506114e96114e173ffffffffffffffffffffffffffffffffffffffff83167bffffffffffffffff000000000000000000000000000000000000000060a086901b1661278d565b60049061199d565b156115445760405173ffffffffffffffffffffffffffffffffffffffff8216815267ffffffffffffffff8316907fa4bdf64ebdf3316320601a081916a75aa144bcef6c4beeb0e9fb1982cacc6b949060200160405180910390a25b50508061155090612a05565b905061143a565b50505050505050565b6115686117cf565b611571816119a9565b50565b60606115ae8267ffffffffffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b6115c85760408051600080825260208201909252906111ca565b67ffffffffffffffff8216600081815260036020526040908190205490517ffbca3b74000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff169063fbca3b7490602401600060405180830381865afa15801561164e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d29190810190612acc565b60008181526001830160205260408120541515610b2c565b600060608361ffff1667ffffffffffffffff8111156116cd576116cd611ff5565b6040519080825280601f01601f1916602001820160405280156116f7576020820181803683370190505b5090507f0c3b563c000000000000000000000000000000000000000000000000000000007fafa32a2c000000000000000000000000000000000000000000000000000000007f37c3be2900000000000000000000000000000000000000000000000000000000883b61176d578260005260046000fd5b5a86811015611780578260005260046000fd5b8690036040810481038910611799578160005260046000fd5b506000808b5160208d0160008d8df194503d878111156117b65750865b808552806000602087013e505050509550959350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610530565b565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109e39084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611a9e565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526109bc9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016118a4565b60606000610b2c83611baa565b6000610b2c8383611c06565b6000610b2c8383611cf9565b3373ffffffffffffffffffffffffffffffffffffffff821603611a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610530565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000611b00826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611d489092919063ffffffff16565b8051909150156109e35780806020019051810190611b1e919061273c565b6109e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610530565b606081600001805480602002602001604051908101604052809291908181526020018280548015611bfa57602002820191906000526020600020905b815481526020019060010190808311611be6575b50505050509050919050565b60008181526001830160205260408120548015611cef576000611c2a600183612b5b565b8554909150600090611c3e90600190612b5b565b9050818114611ca3576000866000018281548110611c5e57611c5e6129b9565b9060005260206000200154905080876000018481548110611c8157611c816129b9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611cb457611cb4612b6e565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105d2565b60009150506105d2565b6000818152600183016020526040812054611d40575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105d2565b5060006105d2565b6060611d578484600085611d5f565b949350505050565b606082471015611df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610530565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611e1a9190612b9d565b60006040518083038185875af1925050503d8060008114611e57576040519150601f19603f3d011682016040523d82523d6000602084013e611e5c565b606091505b5091509150611e6d87838387611e78565b979650505050505050565b60608315611f0e578251600003611f075773ffffffffffffffffffffffffffffffffffffffff85163b611f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610530565b5081611d57565b611d578383815115611f235781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105309190611fc5565b60005b83811015611f72578181015183820152602001611f5a565b50506000910152565b60008151808452611f93816020860160208601611f57565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610b2c6020830184611f7b565b803567ffffffffffffffff81168114611ff057600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561204757612047611ff5565b60405290565b60405160a0810167ffffffffffffffff8111828210171561204757612047611ff5565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156120b7576120b7611ff5565b604052919050565b600082601f8301126120d057600080fd5b813567ffffffffffffffff8111156120ea576120ea611ff5565b61211b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612070565b81815284602083860101111561213057600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff82111561216757612167611ff5565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461157157600080fd5b8035611ff081612171565b600082601f8301126121af57600080fd5b813560206121c46121bf8361214d565b612070565b82815260069290921b840181019181810190868411156121e357600080fd5b8286015b8481101561222b57604081890312156122005760008081fd5b612208612024565b813561221381612171565b815281850135858201528352918301916040016121e7565b509695505050505050565b6000806040838503121561224957600080fd5b61225283611fd8565b9150602083013567ffffffffffffffff8082111561226f57600080fd5b9084019060a0828703121561228357600080fd5b61228b61204d565b82358281111561229a57600080fd5b6122a6888286016120bf565b8252506020830135828111156122bb57600080fd5b6122c7888286016120bf565b6020830152506040830135828111156122df57600080fd5b6122eb8882860161219e565b6040830152506122fd60608401612193565b606082015260808301358281111561231457600080fd5b612320888286016120bf565b6080830152508093505050509250929050565b6000806000806080858703121561234957600080fd5b843567ffffffffffffffff81111561236057600080fd5b850160a0818803121561237257600080fd5b9350602085013561ffff8116811461238957600080fd5b92506040850135915060608501356123a081612171565b939692955090935050565b8215158152604060208201526000611d576040830184611f7b565b6000602082840312156123d857600080fd5b8135610b2c81612171565b6000806000606084860312156123f857600080fd5b833561240381612171565b9250602084013561241381612171565b929592945050506040919091013590565b6000806040838503121561243757600080fd5b823561244281612171565b915061245060208401611fd8565b90509250929050565b602080825282518282018190526000919060409081850190868401855b828110156124bb578151805167ffffffffffffffff16855286015173ffffffffffffffffffffffffffffffffffffffff16868501529284019290850190600101612476565b5091979650505050505050565b6000602082840312156124da57600080fd5b610b2c82611fd8565b60008083601f8401126124f557600080fd5b50813567ffffffffffffffff81111561250d57600080fd5b6020830191508360208260061b850101111561252857600080fd5b9250929050565b6000806000806000806060878903121561254857600080fd5b863567ffffffffffffffff8082111561256057600080fd5b61256c8a838b016124e3565b9098509650602089013591508082111561258557600080fd5b6125918a838b016124e3565b909650945060408901359150808211156125aa57600080fd5b506125b789828a016124e3565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b8181101561261757835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016125e5565b50909695505050505050565b6000815160a0845261263860a0850182611f7b565b9050602080840151858303828701526126518382611f7b565b60408681015188830389830152805180845290850195509092506000918401905b808310156126b1578551805173ffffffffffffffffffffffffffffffffffffffff16835285015185830152948401946001929092019190830190612672565b50606087015194506126db606089018673ffffffffffffffffffffffffffffffffffffffff169052565b6080870151945087810360808901526126f48186611f7b565b98975050505050505050565b67ffffffffffffffff83168152604060208201526000611d576040830184612623565b60006020828403121561273557600080fd5b5051919050565b60006020828403121561274e57600080fd5b81518015158114610b2c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105d2576105d261275e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126127d557600080fd5b830160208101925035905067ffffffffffffffff8111156127f557600080fd5b80360382131561252857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156128a257813561287081612171565b73ffffffffffffffffffffffffffffffffffffffff16875281830135838801526040968701969091019060010161285d565b509495945050505050565b602081528135602082015260006128c660208401611fd8565b67ffffffffffffffff80821660408501526128e460408601866127a0565b925060a060608601526128fb60c086018483612804565b92505061290b60608601866127a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152612941858385612804565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261297a57600080fd5b6020928801928301923591508382111561299357600080fd5b8160061b36038313156129a557600080fd5b8685030160a0870152611e6d84828461284d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156129fa57600080fd5b8151610b2c81612171565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a3657612a3661275e565b5060010190565b67ffffffffffffffff85168152608060208201526000612a606080830186612623565b905083604083015273ffffffffffffffffffffffffffffffffffffffff8316606083015295945050505050565b600060408284031215612a9f57600080fd5b612aa7612024565b612ab083611fd8565b81526020830135612ac081612171565b60208201529392505050565b60006020808385031215612adf57600080fd5b825167ffffffffffffffff811115612af657600080fd5b8301601f81018513612b0757600080fd5b8051612b156121bf8261214d565b81815260059190911b82018301908381019087831115612b3457600080fd5b928401925b82841015611e6d578351612b4c81612171565b82529284019290840190612b39565b818103818111156105d2576105d261275e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251612baf818460208701611f57565b919091019291505056fea164736f6c6343000813000a", + Bin: "0x60a06040523480156200001157600080fd5b5060405162002d6338038062002d638339810160408190526200003491620001af565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000e7565b5050600280546001600160a01b0319166001600160a01b039485161790555016608052620001e7565b336001600160a01b03821603620001415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620001aa57600080fd5b919050565b60008060408385031215620001c357600080fd5b620001ce8362000192565b9150620001de6020840162000192565b90509250929050565b608051612b5262000211600039600081816101f8015281816105de0152610aef0152612b526000f3fe6080604052600436106101295760003560e01c80639344d5c4116100a5578063a8d87a3b11610074578063e861e90711610059578063e861e90714610408578063f2fde38b14610433578063fbca3b741461045357600080fd5b8063a8d87a3b1461039b578063da5fcac8146103e857600080fd5b80639344d5c4146102e757806396f4e9f914610317578063a40e69c71461032a578063a48a90581461034c57600080fd5b806352cb60ca116100fc578063787350e3116100e1578063787350e31461027f57806379ba5097146102a75780638da5cb5b146102bc57600080fd5b806352cb60ca1461023d5780635f3e849f1461025f57600080fd5b8063181f5a771461012e57806320487ded1461018d5780633cf97983146101bb5780635246492f146101e9575b600080fd5b34801561013a57600080fd5b506101776040518060400160405280600c81526020017f526f7574657220312e302e30000000000000000000000000000000000000000081525081565b6040516101849190611f51565b60405180910390f35b34801561019957600080fd5b506101ad6101a83660046121c2565b610480565b604051908152602001610184565b3480156101c757600080fd5b506101db6101d63660046122bf565b6105d8565b604051610184929190612337565b3480156101f557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b34801561024957600080fd5b5061025d610258366004612352565b61083b565b005b34801561026b57600080fd5b5061025d61027a36600461236f565b61088a565b34801561028b57600080fd5b50610294608481565b60405161ffff9091168152602001610184565b3480156102b357600080fd5b5061025d6109d8565b3480156102c857600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610218565b3480156102f357600080fd5b506103076103023660046123b0565b610ad5565b6040519015158152602001610184565b6101ad6103253660046121c2565b610aeb565b34801561033657600080fd5b5061033f61107c565b60405161018491906123e5565b34801561035857600080fd5b50610307610367366004612454565b67ffffffffffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b3480156103a757600080fd5b506102186103b6366004612454565b67ffffffffffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b3480156103f457600080fd5b5061025d6104033660046124bb565b611189565b34801561041457600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff16610218565b34801561043f57600080fd5b5061025d61044e366004612352565b6114a8565b34801561045f57600080fd5b5061047361046e366004612454565b6114bc565b6040516101849190612555565b606081015160009073ffffffffffffffffffffffffffffffffffffffff166104c15760025473ffffffffffffffffffffffffffffffffffffffff1660608301525b67ffffffffffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610539576040517fae236d9c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024015b60405180910390fd5b6040517f20487ded00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906320487ded9061058d908790879060040161268c565b602060405180830381865afa1580156105aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ce91906126af565b9150505b92915050565b600060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b91906126c8565b156106a2576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c66106be6106b86040890160208a01612454565b336115dc565b600490611620565b6106fc576040517fd2316ede00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006385572ffb60e01b8760405160240161071791906127f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506107a481858760848a611638565b90935091507f9b877de93ea9895756e337442c657f95a34fc68e7eb988bdfa693d5be83016b687356107dc60408a0160208b01612454565b83516020850120604051610829939291339193845267ffffffffffffffff92909216602084015273ffffffffffffffffffffffffffffffffffffffff166040830152606082015260800190565b60405180910390a15094509492505050565b61084361175b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61089261175b565b73ffffffffffffffffffffffffffffffffffffffff82166108f7576040517f26a78f8f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610530565b73ffffffffffffffffffffffffffffffffffffffff83166109b25760008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461096c576040519150601f19603f3d011682016040523d82523d6000602084013e610971565b606091505b50509050806109ac576040517fe417b80b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6109d373ffffffffffffffffffffffffffffffffffffffff841683836117de565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610530565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000610ae46106be83856115dc565b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c91906126c8565b15610bb3576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610c26576040517fae236d9c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610530565b606083015160009073ffffffffffffffffffffffffffffffffffffffff16610db85760025473ffffffffffffffffffffffffffffffffffffffff90811660608601526040517f20487ded000000000000000000000000000000000000000000000000000000008152908316906320487ded90610ca8908890889060040161268c565b602060405180830381865afa158015610cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce991906126af565b905080341015610d25576040517f07da6ee600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b349050836060015173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d7457600080fd5b505af1158015610d88573d6000803e3d6000fd5b505050506060850151610db3915073ffffffffffffffffffffffffffffffffffffffff1683836117de565b610eaf565b3415610df0576040517f1841b4e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f20487ded00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906320487ded90610e44908890889060040161268c565b602060405180830381865afa158015610e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8591906126af565b6060850151909150610eaf9073ffffffffffffffffffffffffffffffffffffffff163384846118b2565b60005b846040015151811015610fd757600085604001518281518110610ed757610ed7612903565b6020908102919091010151516040517f5d86f14100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152919250610fc691339190871690635d86f14190602401602060405180830381865afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190612932565b88604001518581518110610f9357610f93612903565b6020026020010151602001518473ffffffffffffffffffffffffffffffffffffffff166118b2909392919063ffffffff16565b50610fd08161297e565b9050610eb2565b506040517fdf0aa9e900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063df0aa9e9906110309088908890869033906004016129b6565b6020604051808303816000875af115801561104f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107391906126af565b95945050505050565b6060600061108a6004611910565b90506000815167ffffffffffffffff8111156110a8576110a8611f81565b6040519080825280602002602001820160405280156110ed57816020015b60408051808201909152600080825260208201528152602001906001900390816110c65790505b50905060005b825181101561118257600083828151811061111057611110612903565b60200260200101519050604051806040016040528060a083901c67ffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681525083838151811061116557611165612903565b6020026020010181905250508061117b9061297e565b90506110f3565b5092915050565b61119161175b565b60005b858110156112755760008787838181106111b0576111b0612903565b9050604002018036038101906111c69190612a06565b60208181018051835167ffffffffffffffff90811660009081526003855260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055855193519051921682529394509216917f1f7d0ec248b80e5c0dde0ee531c4fc8fdb6ce9a2b3d90f560c74acd6a7202f23910160405180910390a25061126e8161297e565b9050611194565b5060005b838110156113b657600085858381811061129557611295612903565b6112ab9260206040909202019081019150612454565b905060008686848181106112c1576112c1612903565b90506040020160200160208101906112d99190612352565b90506112f06112e883836115dc565b60049061191d565b61134e576040517f4964779000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8316600482015273ffffffffffffffffffffffffffffffffffffffff82166024820152604401610530565b60405173ffffffffffffffffffffffffffffffffffffffff8216815267ffffffffffffffff8316907fa823809efda3ba66c873364eec120fa0923d9fabda73bc97dd5663341e2d9bcb9060200160405180910390a25050806113af9061297e565b9050611279565b5060005b8181101561149f5760008383838181106113d6576113d6612903565b6113ec9260206040909202019081019150612454565b9050600084848481811061140257611402612903565b905060400201602001602081019061141a9190612352565b905061143161142983836115dc565b600490611929565b1561148c5760405173ffffffffffffffffffffffffffffffffffffffff8216815267ffffffffffffffff8316907fa4bdf64ebdf3316320601a081916a75aa144bcef6c4beeb0e9fb1982cacc6b949060200160405180910390a25b5050806114989061297e565b90506113ba565b50505050505050565b6114b061175b565b6114b981611935565b50565b60606114f68267ffffffffffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b611510576040805160008082526020820190925290611182565b67ffffffffffffffff8216600081815260036020526040908190205490517ffbca3b74000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff169063fbca3b7490602401600060405180830381865afa158015611596573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d29190810190612a45565b6000610ae473ffffffffffffffffffffffffffffffffffffffff83167bffffffffffffffff000000000000000000000000000000000000000060a086901b16612ad4565b60008181526001830160205260408120541515610ae4565b600060608361ffff1667ffffffffffffffff81111561165957611659611f81565b6040519080825280601f01601f191660200182016040528015611683576020820181803683370190505b5090507f0c3b563c000000000000000000000000000000000000000000000000000000007fafa32a2c000000000000000000000000000000000000000000000000000000007f37c3be2900000000000000000000000000000000000000000000000000000000883b6116f9578260005260046000fd5b5a8681101561170c578260005260046000fd5b8690036040810481038910611725578160005260046000fd5b506000808b5160208d0160008d8df194503d878111156117425750865b808552806000602087013e505050509550959350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146117dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610530565b565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109d39084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611a2a565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526109ac9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611830565b60606000610ae483611b36565b6000610ae48383611b92565b6000610ae48383611c85565b3373ffffffffffffffffffffffffffffffffffffffff8216036119b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610530565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000611a8c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611cd49092919063ffffffff16565b8051909150156109d35780806020019051810190611aaa91906126c8565b6109d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610530565b606081600001805480602002602001604051908101604052809291908181526020018280548015611b8657602002820191906000526020600020905b815481526020019060010190808311611b72575b50505050509050919050565b60008181526001830160205260408120548015611c7b576000611bb6600183612ae7565b8554909150600090611bca90600190612ae7565b9050818114611c2f576000866000018281548110611bea57611bea612903565b9060005260206000200154905080876000018481548110611c0d57611c0d612903565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611c4057611c40612afa565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105d2565b60009150506105d2565b6000818152600183016020526040812054611ccc575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105d2565b5060006105d2565b6060611ce38484600085611ceb565b949350505050565b606082471015611d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610530565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611da69190612b29565b60006040518083038185875af1925050503d8060008114611de3576040519150601f19603f3d011682016040523d82523d6000602084013e611de8565b606091505b5091509150611df987838387611e04565b979650505050505050565b60608315611e9a578251600003611e935773ffffffffffffffffffffffffffffffffffffffff85163b611e93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610530565b5081611ce3565b611ce38383815115611eaf5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105309190611f51565b60005b83811015611efe578181015183820152602001611ee6565b50506000910152565b60008151808452611f1f816020860160208601611ee3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ae46020830184611f07565b803567ffffffffffffffff81168114611f7c57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611fd357611fd3611f81565b60405290565b60405160a0810167ffffffffffffffff81118282101715611fd357611fd3611f81565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561204357612043611f81565b604052919050565b600082601f83011261205c57600080fd5b813567ffffffffffffffff81111561207657612076611f81565b6120a760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ffc565b8181528460208386010111156120bc57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff8211156120f3576120f3611f81565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff811681146114b957600080fd5b8035611f7c816120fd565b600082601f83011261213b57600080fd5b8135602061215061214b836120d9565b611ffc565b82815260069290921b8401810191818101908684111561216f57600080fd5b8286015b848110156121b7576040818903121561218c5760008081fd5b612194611fb0565b813561219f816120fd565b81528185013585820152835291830191604001612173565b509695505050505050565b600080604083850312156121d557600080fd5b6121de83611f64565b9150602083013567ffffffffffffffff808211156121fb57600080fd5b9084019060a0828703121561220f57600080fd5b612217611fd9565b82358281111561222657600080fd5b6122328882860161204b565b82525060208301358281111561224757600080fd5b6122538882860161204b565b60208301525060408301358281111561226b57600080fd5b6122778882860161212a565b6040830152506122896060840161211f565b60608201526080830135828111156122a057600080fd5b6122ac8882860161204b565b6080830152508093505050509250929050565b600080600080608085870312156122d557600080fd5b843567ffffffffffffffff8111156122ec57600080fd5b850160a081880312156122fe57600080fd5b9350602085013561ffff8116811461231557600080fd5b925060408501359150606085013561232c816120fd565b939692955090935050565b8215158152604060208201526000611ce36040830184611f07565b60006020828403121561236457600080fd5b8135610ae4816120fd565b60008060006060848603121561238457600080fd5b833561238f816120fd565b9250602084013561239f816120fd565b929592945050506040919091013590565b600080604083850312156123c357600080fd5b82356123ce816120fd565b91506123dc60208401611f64565b90509250929050565b602080825282518282018190526000919060409081850190868401855b82811015612447578151805167ffffffffffffffff16855286015173ffffffffffffffffffffffffffffffffffffffff16868501529284019290850190600101612402565b5091979650505050505050565b60006020828403121561246657600080fd5b610ae482611f64565b60008083601f84011261248157600080fd5b50813567ffffffffffffffff81111561249957600080fd5b6020830191508360208260061b85010111156124b457600080fd5b9250929050565b600080600080600080606087890312156124d457600080fd5b863567ffffffffffffffff808211156124ec57600080fd5b6124f88a838b0161246f565b9098509650602089013591508082111561251157600080fd5b61251d8a838b0161246f565b9096509450604089013591508082111561253657600080fd5b5061254389828a0161246f565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b818110156125a357835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612571565b50909695505050505050565b6000815160a084526125c460a0850182611f07565b9050602080840151858303828701526125dd8382611f07565b60408681015188830389830152805180845290850195509092506000918401905b8083101561263d578551805173ffffffffffffffffffffffffffffffffffffffff168352850151858301529484019460019290920191908301906125fe565b5060608701519450612667606089018673ffffffffffffffffffffffffffffffffffffffff169052565b6080870151945087810360808901526126808186611f07565b98975050505050505050565b67ffffffffffffffff83168152604060208201526000611ce360408301846125af565b6000602082840312156126c157600080fd5b5051919050565b6000602082840312156126da57600080fd5b81518015158114610ae457600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261271f57600080fd5b830160208101925035905067ffffffffffffffff81111561273f57600080fd5b8036038213156124b457600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156127ec5781356127ba816120fd565b73ffffffffffffffffffffffffffffffffffffffff1687528183013583880152604096870196909101906001016127a7565b509495945050505050565b6020815281356020820152600061281060208401611f64565b67ffffffffffffffff808216604085015261282e60408601866126ea565b925060a0606086015261284560c08601848361274e565b92505061285560608601866126ea565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08087860301608088015261288b85838561274e565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030183126128c457600080fd5b602092880192830192359150838211156128dd57600080fd5b8160061b36038313156128ef57600080fd5b8685030160a0870152611df9848284612797565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561294457600080fd5b8151610ae4816120fd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129af576129af61294f565b5060010190565b67ffffffffffffffff851681526080602082015260006129d960808301866125af565b905083604083015273ffffffffffffffffffffffffffffffffffffffff8316606083015295945050505050565b600060408284031215612a1857600080fd5b612a20611fb0565b612a2983611f64565b81526020830135612a39816120fd565b60208201529392505050565b60006020808385031215612a5857600080fd5b825167ffffffffffffffff811115612a6f57600080fd5b8301601f81018513612a8057600080fd5b8051612a8e61214b826120d9565b81815260059190911b82018301908381019087831115612aad57600080fd5b928401925b82841015611df9578351612ac5816120fd565b82529284019290840190612ab2565b808201808211156105d2576105d261294f565b818103818111156105d2576105d261294f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251612b3b818460208701611ee3565b919091019291505056fea164736f6c6343000813000a", } var RouterABI = RouterMetaData.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 688fe1c1ed..174fd21a03 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 @@ -13,6 +13,6 @@ maybe_revert_message_receiver: ../../../contracts/solc/v0.8.19/MaybeRevertMessag mock_arm_contract: ../../../contracts/solc/v0.8.19/MockARM.abi ../../../contracts/solc/v0.8.19/MockARM.bin efcf4cb260a2b6a6e189639f62bb50ab650a135715c1fcd42c92dfa9d04aa0e3 ping_pong_demo: ../../../contracts/solc/v0.8.19/PingPongDemo.abi ../../../contracts/solc/v0.8.19/PingPongDemo.bin f2972aa082cee8b461122f79773ce247d23b551ddc2ca9926ae90624134cfb23 price_registry: ../../../contracts/solc/v0.8.19/PriceRegistry.abi ../../../contracts/solc/v0.8.19/PriceRegistry.bin 36e8d2c44a16fefb5258557cb1eae25eca1cc12efcd3c3270f91a90a5f81e7ea -router: ../../../contracts/solc/v0.8.19/Router.abi ../../../contracts/solc/v0.8.19/Router.bin e237a409f59462856840efd5682b6cf8c1c5e95dff88a73a3b31c6e8079e70d7 +router: ../../../contracts/solc/v0.8.19/Router.abi ../../../contracts/solc/v0.8.19/Router.bin ceef3c8da1b3bf4bf11352de034fa8c19d7e7ab981b67a644afeabe7bf1c3c0b usdc_token_pool: ../../../contracts/solc/v0.8.19/USDCTokenPool.abi ../../../contracts/solc/v0.8.19/USDCTokenPool.bin dd7e1adb7e9bcfafe86721206ebf84dbfedf236adf0040b853d30575c207f3e4 weth9: ../../../contracts/solc/v0.8.19/WETH9.abi ../../../contracts/solc/v0.8.19/WETH9.bin 5a7d64fb19b62ec523c7667ce4c2983295c05f74935b5f994c06a6f70d440f8b