diff --git a/.forge-snapshots/BaseActionsRouter_mock10commands.snap b/.forge-snapshots/BaseActionsRouter_mock10commands.snap
index 964340e8..761833da 100644
--- a/.forge-snapshots/BaseActionsRouter_mock10commands.snap
+++ b/.forge-snapshots/BaseActionsRouter_mock10commands.snap
@@ -1 +1 @@
-60116
\ No newline at end of file
+60128
\ No newline at end of file
diff --git a/.forge-snapshots/Payments_swap_settleFromCaller_takeAllToMsgSender.snap b/.forge-snapshots/Payments_swap_settleFromCaller_takeAllToMsgSender.snap
index 17826a49..869251de 100644
--- a/.forge-snapshots/Payments_swap_settleFromCaller_takeAllToMsgSender.snap
+++ b/.forge-snapshots/Payments_swap_settleFromCaller_takeAllToMsgSender.snap
@@ -1 +1 @@
-129770
\ No newline at end of file
+129782
\ No newline at end of file
diff --git a/.forge-snapshots/Payments_swap_settleFromCaller_takeAllToSpecifiedAddress.snap b/.forge-snapshots/Payments_swap_settleFromCaller_takeAllToSpecifiedAddress.snap
index feaccc29..b543e656 100644
--- a/.forge-snapshots/Payments_swap_settleFromCaller_takeAllToSpecifiedAddress.snap
+++ b/.forge-snapshots/Payments_swap_settleFromCaller_takeAllToSpecifiedAddress.snap
@@ -1 +1 @@
-131762
\ No newline at end of file
+131774
\ No newline at end of file
diff --git a/.forge-snapshots/Payments_swap_settleWithBalance_takeAllToMsgSender.snap b/.forge-snapshots/Payments_swap_settleWithBalance_takeAllToMsgSender.snap
index 3ec5f70d..1495d3e2 100644
--- a/.forge-snapshots/Payments_swap_settleWithBalance_takeAllToMsgSender.snap
+++ b/.forge-snapshots/Payments_swap_settleWithBalance_takeAllToMsgSender.snap
@@ -1 +1 @@
-123997
\ No newline at end of file
+124009
\ No newline at end of file
diff --git a/.forge-snapshots/Payments_swap_settleWithBalance_takeAllToSpecifiedAddress.snap b/.forge-snapshots/Payments_swap_settleWithBalance_takeAllToSpecifiedAddress.snap
index b1308cfb..c7c0d989 100644
--- a/.forge-snapshots/Payments_swap_settleWithBalance_takeAllToSpecifiedAddress.snap
+++ b/.forge-snapshots/Payments_swap_settleWithBalance_takeAllToSpecifiedAddress.snap
@@ -1 +1 @@
-124139
\ No newline at end of file
+124151
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_burn_empty.snap b/.forge-snapshots/PositionManager_burn_empty.snap
index faa6b82f..6cb2114e 100644
--- a/.forge-snapshots/PositionManager_burn_empty.snap
+++ b/.forge-snapshots/PositionManager_burn_empty.snap
@@ -1 +1 @@
-47392
\ No newline at end of file
+47428
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_burn_empty_native.snap b/.forge-snapshots/PositionManager_burn_empty_native.snap
index 7e5905a9..bd023af9 100644
--- a/.forge-snapshots/PositionManager_burn_empty_native.snap
+++ b/.forge-snapshots/PositionManager_burn_empty_native.snap
@@ -1 +1 @@
-47209
\ No newline at end of file
+47245
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_burn_nonEmpty_native_withClose.snap b/.forge-snapshots/PositionManager_burn_nonEmpty_native_withClose.snap
index a4334c64..ad62f844 100644
--- a/.forge-snapshots/PositionManager_burn_nonEmpty_native_withClose.snap
+++ b/.forge-snapshots/PositionManager_burn_nonEmpty_native_withClose.snap
@@ -1 +1 @@
-122755
\ No newline at end of file
+122791
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_burn_nonEmpty_native_withTakePair.snap b/.forge-snapshots/PositionManager_burn_nonEmpty_native_withTakePair.snap
index 7dac0ddf..69b29329 100644
--- a/.forge-snapshots/PositionManager_burn_nonEmpty_native_withTakePair.snap
+++ b/.forge-snapshots/PositionManager_burn_nonEmpty_native_withTakePair.snap
@@ -1 +1 @@
-122266
\ No newline at end of file
+122302
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_burn_nonEmpty_withClose.snap b/.forge-snapshots/PositionManager_burn_nonEmpty_withClose.snap
index ff3f5656..b1129816 100644
--- a/.forge-snapshots/PositionManager_burn_nonEmpty_withClose.snap
+++ b/.forge-snapshots/PositionManager_burn_nonEmpty_withClose.snap
@@ -1 +1 @@
-129788
\ No newline at end of file
+129824
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_burn_nonEmpty_withTakePair.snap b/.forge-snapshots/PositionManager_burn_nonEmpty_withTakePair.snap
index 010c1031..b5a69ee2 100644
--- a/.forge-snapshots/PositionManager_burn_nonEmpty_withTakePair.snap
+++ b/.forge-snapshots/PositionManager_burn_nonEmpty_withTakePair.snap
@@ -1 +1 @@
-129299
\ No newline at end of file
+129335
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_collect_native.snap b/.forge-snapshots/PositionManager_collect_native.snap
index ff4d7728..0e3f3f24 100644
--- a/.forge-snapshots/PositionManager_collect_native.snap
+++ b/.forge-snapshots/PositionManager_collect_native.snap
@@ -1 +1 @@
-141940
\ No newline at end of file
+141994
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_collect_sameRange.snap b/.forge-snapshots/PositionManager_collect_sameRange.snap
index e7247bff..7239240f 100644
--- a/.forge-snapshots/PositionManager_collect_sameRange.snap
+++ b/.forge-snapshots/PositionManager_collect_sameRange.snap
@@ -1 +1 @@
-150731
\ No newline at end of file
+150785
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_collect_withClose.snap b/.forge-snapshots/PositionManager_collect_withClose.snap
index e7247bff..7239240f 100644
--- a/.forge-snapshots/PositionManager_collect_withClose.snap
+++ b/.forge-snapshots/PositionManager_collect_withClose.snap
@@ -1 +1 @@
-150731
\ No newline at end of file
+150785
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_collect_withTakePair.snap b/.forge-snapshots/PositionManager_collect_withTakePair.snap
index 1f757fb6..19b0cba6 100644
--- a/.forge-snapshots/PositionManager_collect_withTakePair.snap
+++ b/.forge-snapshots/PositionManager_collect_withTakePair.snap
@@ -1 +1 @@
-150108
\ No newline at end of file
+150162
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_decreaseLiquidity_native.snap b/.forge-snapshots/PositionManager_decreaseLiquidity_native.snap
index 45112fed..ff438bd2 100644
--- a/.forge-snapshots/PositionManager_decreaseLiquidity_native.snap
+++ b/.forge-snapshots/PositionManager_decreaseLiquidity_native.snap
@@ -1 +1 @@
-108497
\ No newline at end of file
+108540
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_decreaseLiquidity_withClose.snap b/.forge-snapshots/PositionManager_decreaseLiquidity_withClose.snap
index cc0027f1..4c06bdb9 100644
--- a/.forge-snapshots/PositionManager_decreaseLiquidity_withClose.snap
+++ b/.forge-snapshots/PositionManager_decreaseLiquidity_withClose.snap
@@ -1 +1 @@
-115612
\ No newline at end of file
+115666
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_decreaseLiquidity_withTakePair.snap b/.forge-snapshots/PositionManager_decreaseLiquidity_withTakePair.snap
index c6c2c4fa..73009569 100644
--- a/.forge-snapshots/PositionManager_decreaseLiquidity_withTakePair.snap
+++ b/.forge-snapshots/PositionManager_decreaseLiquidity_withTakePair.snap
@@ -1 +1 @@
-115032
\ No newline at end of file
+115075
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_decrease_burnEmpty.snap b/.forge-snapshots/PositionManager_decrease_burnEmpty.snap
index 73f124ed..c707db5e 100644
--- a/.forge-snapshots/PositionManager_decrease_burnEmpty.snap
+++ b/.forge-snapshots/PositionManager_decrease_burnEmpty.snap
@@ -1 +1 @@
-133665
\ No newline at end of file
+133723
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_decrease_burnEmpty_native.snap b/.forge-snapshots/PositionManager_decrease_burnEmpty_native.snap
index d6dc5a84..29f819b6 100644
--- a/.forge-snapshots/PositionManager_decrease_burnEmpty_native.snap
+++ b/.forge-snapshots/PositionManager_decrease_burnEmpty_native.snap
@@ -1 +1 @@
-126450
\ No newline at end of file
+126508
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_decrease_sameRange_allLiquidity.snap b/.forge-snapshots/PositionManager_decrease_sameRange_allLiquidity.snap
index e91f19ed..bea751f5 100644
--- a/.forge-snapshots/PositionManager_decrease_sameRange_allLiquidity.snap
+++ b/.forge-snapshots/PositionManager_decrease_sameRange_allLiquidity.snap
@@ -1 +1 @@
-128299
\ No newline at end of file
+128353
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_decrease_take_take.snap b/.forge-snapshots/PositionManager_decrease_take_take.snap
index 3aa8f746..555c6f77 100644
--- a/.forge-snapshots/PositionManager_decrease_take_take.snap
+++ b/.forge-snapshots/PositionManager_decrease_take_take.snap
@@ -1 +1 @@
-116187
\ No newline at end of file
+116241
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_increaseLiquidity_erc20_withClose.snap b/.forge-snapshots/PositionManager_increaseLiquidity_erc20_withClose.snap
index c26e8da3..4ce72a25 100644
--- a/.forge-snapshots/PositionManager_increaseLiquidity_erc20_withClose.snap
+++ b/.forge-snapshots/PositionManager_increaseLiquidity_erc20_withClose.snap
@@ -1 +1 @@
-155218
\ No newline at end of file
+155272
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_increaseLiquidity_erc20_withSettlePair.snap b/.forge-snapshots/PositionManager_increaseLiquidity_erc20_withSettlePair.snap
index 095ecab9..12d79326 100644
--- a/.forge-snapshots/PositionManager_increaseLiquidity_erc20_withSettlePair.snap
+++ b/.forge-snapshots/PositionManager_increaseLiquidity_erc20_withSettlePair.snap
@@ -1 +1 @@
-154202
\ No newline at end of file
+154256
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_increaseLiquidity_native.snap b/.forge-snapshots/PositionManager_increaseLiquidity_native.snap
index f38a5260..9f178fb6 100644
--- a/.forge-snapshots/PositionManager_increaseLiquidity_native.snap
+++ b/.forge-snapshots/PositionManager_increaseLiquidity_native.snap
@@ -1 +1 @@
-136669
\ No newline at end of file
+136723
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_increase_autocompoundExactUnclaimedFees.snap b/.forge-snapshots/PositionManager_increase_autocompoundExactUnclaimedFees.snap
index 5fac1df9..075b199a 100644
--- a/.forge-snapshots/PositionManager_increase_autocompoundExactUnclaimedFees.snap
+++ b/.forge-snapshots/PositionManager_increase_autocompoundExactUnclaimedFees.snap
@@ -1 +1 @@
-132377
\ No newline at end of file
+132431
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_increase_autocompoundExcessFeesCredit.snap b/.forge-snapshots/PositionManager_increase_autocompoundExcessFeesCredit.snap
index 9cc05b2a..602443fe 100644
--- a/.forge-snapshots/PositionManager_increase_autocompoundExcessFeesCredit.snap
+++ b/.forge-snapshots/PositionManager_increase_autocompoundExcessFeesCredit.snap
@@ -1 +1 @@
-173229
\ No newline at end of file
+173283
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_increase_autocompound_clearExcess.snap b/.forge-snapshots/PositionManager_increase_autocompound_clearExcess.snap
index d13a9de2..396b1e9c 100644
--- a/.forge-snapshots/PositionManager_increase_autocompound_clearExcess.snap
+++ b/.forge-snapshots/PositionManager_increase_autocompound_clearExcess.snap
@@ -1 +1 @@
-143911
\ No newline at end of file
+143965
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_mint_native.snap b/.forge-snapshots/PositionManager_mint_native.snap
index 971113a7..309482f1 100644
--- a/.forge-snapshots/PositionManager_mint_native.snap
+++ b/.forge-snapshots/PositionManager_mint_native.snap
@@ -1 +1 @@
-340370
\ No newline at end of file
+340424
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_mint_nativeWithSweep_withClose.snap b/.forge-snapshots/PositionManager_mint_nativeWithSweep_withClose.snap
index 604c091b..0307fd85 100644
--- a/.forge-snapshots/PositionManager_mint_nativeWithSweep_withClose.snap
+++ b/.forge-snapshots/PositionManager_mint_nativeWithSweep_withClose.snap
@@ -1 +1 @@
-348824
\ No newline at end of file
+348878
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_mint_nativeWithSweep_withSettlePair.snap b/.forge-snapshots/PositionManager_mint_nativeWithSweep_withSettlePair.snap
index b55ab6c9..4475a3d5 100644
--- a/.forge-snapshots/PositionManager_mint_nativeWithSweep_withSettlePair.snap
+++ b/.forge-snapshots/PositionManager_mint_nativeWithSweep_withSettlePair.snap
@@ -1 +1 @@
-348116
\ No newline at end of file
+348170
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_mint_onSameTickLower.snap b/.forge-snapshots/PositionManager_mint_onSameTickLower.snap
index 27fc9b8c..c0d4cf8a 100644
--- a/.forge-snapshots/PositionManager_mint_onSameTickLower.snap
+++ b/.forge-snapshots/PositionManager_mint_onSameTickLower.snap
@@ -1 +1 @@
-318688
\ No newline at end of file
+318742
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_mint_onSameTickUpper.snap b/.forge-snapshots/PositionManager_mint_onSameTickUpper.snap
index 3aecd274..4eed959c 100644
--- a/.forge-snapshots/PositionManager_mint_onSameTickUpper.snap
+++ b/.forge-snapshots/PositionManager_mint_onSameTickUpper.snap
@@ -1 +1 @@
-319358
\ No newline at end of file
+319412
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_mint_sameRange.snap b/.forge-snapshots/PositionManager_mint_sameRange.snap
index c8233046..5d1238c9 100644
--- a/.forge-snapshots/PositionManager_mint_sameRange.snap
+++ b/.forge-snapshots/PositionManager_mint_sameRange.snap
@@ -1 +1 @@
-244927
\ No newline at end of file
+244981
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_mint_settleWithBalance_sweep.snap b/.forge-snapshots/PositionManager_mint_settleWithBalance_sweep.snap
index 2004a9dd..c01da16a 100644
--- a/.forge-snapshots/PositionManager_mint_settleWithBalance_sweep.snap
+++ b/.forge-snapshots/PositionManager_mint_settleWithBalance_sweep.snap
@@ -1 +1 @@
-374761
\ No newline at end of file
+374815
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_mint_warmedPool_differentRange.snap b/.forge-snapshots/PositionManager_mint_warmedPool_differentRange.snap
index 7963abe8..90ed52ac 100644
--- a/.forge-snapshots/PositionManager_mint_warmedPool_differentRange.snap
+++ b/.forge-snapshots/PositionManager_mint_warmedPool_differentRange.snap
@@ -1 +1 @@
-324719
\ No newline at end of file
+324773
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_mint_withClose.snap b/.forge-snapshots/PositionManager_mint_withClose.snap
index 0afba9fc..23663ee9 100644
--- a/.forge-snapshots/PositionManager_mint_withClose.snap
+++ b/.forge-snapshots/PositionManager_mint_withClose.snap
@@ -1 +1 @@
-376019
\ No newline at end of file
+376073
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_mint_withSettlePair.snap b/.forge-snapshots/PositionManager_mint_withSettlePair.snap
index 36528859..76c43258 100644
--- a/.forge-snapshots/PositionManager_mint_withSettlePair.snap
+++ b/.forge-snapshots/PositionManager_mint_withSettlePair.snap
@@ -1 +1 @@
-375145
\ No newline at end of file
+375199
\ No newline at end of file
diff --git a/.forge-snapshots/PositionManager_multicall_initialize_mint.snap b/.forge-snapshots/PositionManager_multicall_initialize_mint.snap
index 03de054e..c84f76ae 100644
--- a/.forge-snapshots/PositionManager_multicall_initialize_mint.snap
+++ b/.forge-snapshots/PositionManager_multicall_initialize_mint.snap
@@ -1 +1 @@
-420166
\ No newline at end of file
+420220
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_Bytecode.snap b/.forge-snapshots/V4Router_Bytecode.snap
index cb5ba80e..644b516d 100644
--- a/.forge-snapshots/V4Router_Bytecode.snap
+++ b/.forge-snapshots/V4Router_Bytecode.snap
@@ -1 +1 @@
-7098
\ No newline at end of file
+7110
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactIn1Hop_nativeIn.snap b/.forge-snapshots/V4Router_ExactIn1Hop_nativeIn.snap
index 77f33c1c..24d6666f 100644
--- a/.forge-snapshots/V4Router_ExactIn1Hop_nativeIn.snap
+++ b/.forge-snapshots/V4Router_ExactIn1Hop_nativeIn.snap
@@ -1 +1 @@
-115466
\ No newline at end of file
+115478
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactIn1Hop_nativeOut.snap b/.forge-snapshots/V4Router_ExactIn1Hop_nativeOut.snap
index 55dc10a7..1e3b2861 100644
--- a/.forge-snapshots/V4Router_ExactIn1Hop_nativeOut.snap
+++ b/.forge-snapshots/V4Router_ExactIn1Hop_nativeOut.snap
@@ -1 +1 @@
-115943
\ No newline at end of file
+115955
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactIn1Hop_oneForZero.snap b/.forge-snapshots/V4Router_ExactIn1Hop_oneForZero.snap
index ba2d9b69..8607100c 100644
--- a/.forge-snapshots/V4Router_ExactIn1Hop_oneForZero.snap
+++ b/.forge-snapshots/V4Router_ExactIn1Hop_oneForZero.snap
@@ -1 +1 @@
-124758
\ No newline at end of file
+124770
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactIn1Hop_zeroForOne.snap b/.forge-snapshots/V4Router_ExactIn1Hop_zeroForOne.snap
index 847d36b9..ffe40f4a 100644
--- a/.forge-snapshots/V4Router_ExactIn1Hop_zeroForOne.snap
+++ b/.forge-snapshots/V4Router_ExactIn1Hop_zeroForOne.snap
@@ -1 +1 @@
-130476
\ No newline at end of file
+130488
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactIn2Hops.snap b/.forge-snapshots/V4Router_ExactIn2Hops.snap
index 666d0a18..94f78905 100644
--- a/.forge-snapshots/V4Router_ExactIn2Hops.snap
+++ b/.forge-snapshots/V4Router_ExactIn2Hops.snap
@@ -1 +1 @@
-179484
\ No newline at end of file
+179496
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactIn2Hops_nativeIn.snap b/.forge-snapshots/V4Router_ExactIn2Hops_nativeIn.snap
index a419a159..0ca46af9 100644
--- a/.forge-snapshots/V4Router_ExactIn2Hops_nativeIn.snap
+++ b/.forge-snapshots/V4Router_ExactIn2Hops_nativeIn.snap
@@ -1 +1 @@
-170184
\ No newline at end of file
+170196
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactIn3Hops.snap b/.forge-snapshots/V4Router_ExactIn3Hops.snap
index 644c6c14..fcab7e04 100644
--- a/.forge-snapshots/V4Router_ExactIn3Hops.snap
+++ b/.forge-snapshots/V4Router_ExactIn3Hops.snap
@@ -1 +1 @@
-228471
\ No newline at end of file
+228483
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactIn3Hops_nativeIn.snap b/.forge-snapshots/V4Router_ExactIn3Hops_nativeIn.snap
index 43997a79..67fcd61f 100644
--- a/.forge-snapshots/V4Router_ExactIn3Hops_nativeIn.snap
+++ b/.forge-snapshots/V4Router_ExactIn3Hops_nativeIn.snap
@@ -1 +1 @@
-219195
\ No newline at end of file
+219207
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactInputSingle.snap b/.forge-snapshots/V4Router_ExactInputSingle.snap
index 17826a49..869251de 100644
--- a/.forge-snapshots/V4Router_ExactInputSingle.snap
+++ b/.forge-snapshots/V4Router_ExactInputSingle.snap
@@ -1 +1 @@
-129770
\ No newline at end of file
+129782
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactInputSingle_nativeIn.snap b/.forge-snapshots/V4Router_ExactInputSingle_nativeIn.snap
index b9fca5f7..9efc9539 100644
--- a/.forge-snapshots/V4Router_ExactInputSingle_nativeIn.snap
+++ b/.forge-snapshots/V4Router_ExactInputSingle_nativeIn.snap
@@ -1 +1 @@
-114760
\ No newline at end of file
+114772
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactInputSingle_nativeOut.snap b/.forge-snapshots/V4Router_ExactInputSingle_nativeOut.snap
index 0f8ed5cb..e893598a 100644
--- a/.forge-snapshots/V4Router_ExactInputSingle_nativeOut.snap
+++ b/.forge-snapshots/V4Router_ExactInputSingle_nativeOut.snap
@@ -1 +1 @@
-115206
\ No newline at end of file
+115218
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOut1Hop_nativeIn_sweepETH.snap b/.forge-snapshots/V4Router_ExactOut1Hop_nativeIn_sweepETH.snap
index dc498061..a123deec 100644
--- a/.forge-snapshots/V4Router_ExactOut1Hop_nativeIn_sweepETH.snap
+++ b/.forge-snapshots/V4Router_ExactOut1Hop_nativeIn_sweepETH.snap
@@ -1 +1 @@
-121663
\ No newline at end of file
+121675
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOut1Hop_nativeOut.snap b/.forge-snapshots/V4Router_ExactOut1Hop_nativeOut.snap
index fa2e19bb..9266f850 100644
--- a/.forge-snapshots/V4Router_ExactOut1Hop_nativeOut.snap
+++ b/.forge-snapshots/V4Router_ExactOut1Hop_nativeOut.snap
@@ -1 +1 @@
-116964
\ No newline at end of file
+116976
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOut1Hop_oneForZero.snap b/.forge-snapshots/V4Router_ExactOut1Hop_oneForZero.snap
index 6448003c..90d298f6 100644
--- a/.forge-snapshots/V4Router_ExactOut1Hop_oneForZero.snap
+++ b/.forge-snapshots/V4Router_ExactOut1Hop_oneForZero.snap
@@ -1 +1 @@
-125779
\ No newline at end of file
+125791
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOut1Hop_zeroForOne.snap b/.forge-snapshots/V4Router_ExactOut1Hop_zeroForOne.snap
index 2ab7df22..32325f02 100644
--- a/.forge-snapshots/V4Router_ExactOut1Hop_zeroForOne.snap
+++ b/.forge-snapshots/V4Router_ExactOut1Hop_zeroForOne.snap
@@ -1 +1 @@
-129696
\ No newline at end of file
+129708
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOut2Hops.snap b/.forge-snapshots/V4Router_ExactOut2Hops.snap
index 05af9e5a..078af36d 100644
--- a/.forge-snapshots/V4Router_ExactOut2Hops.snap
+++ b/.forge-snapshots/V4Router_ExactOut2Hops.snap
@@ -1 +1 @@
-179528
\ No newline at end of file
+179540
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOut2Hops_nativeIn.snap b/.forge-snapshots/V4Router_ExactOut2Hops_nativeIn.snap
index 4bd3b1c2..37bb5dfa 100644
--- a/.forge-snapshots/V4Router_ExactOut2Hops_nativeIn.snap
+++ b/.forge-snapshots/V4Router_ExactOut2Hops_nativeIn.snap
@@ -1 +1 @@
-175412
\ No newline at end of file
+175424
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOut3Hops.snap b/.forge-snapshots/V4Router_ExactOut3Hops.snap
index 16c308ec..790121f9 100644
--- a/.forge-snapshots/V4Router_ExactOut3Hops.snap
+++ b/.forge-snapshots/V4Router_ExactOut3Hops.snap
@@ -1 +1 @@
-229367
\ No newline at end of file
+229379
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOut3Hops_nativeIn.snap b/.forge-snapshots/V4Router_ExactOut3Hops_nativeIn.snap
index 3ac98f03..f06c3d22 100644
--- a/.forge-snapshots/V4Router_ExactOut3Hops_nativeIn.snap
+++ b/.forge-snapshots/V4Router_ExactOut3Hops_nativeIn.snap
@@ -1 +1 @@
-225275
\ No newline at end of file
+225287
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOut3Hops_nativeOut.snap b/.forge-snapshots/V4Router_ExactOut3Hops_nativeOut.snap
index 4c255240..fe2feb95 100644
--- a/.forge-snapshots/V4Router_ExactOut3Hops_nativeOut.snap
+++ b/.forge-snapshots/V4Router_ExactOut3Hops_nativeOut.snap
@@ -1 +1 @@
-220576
\ No newline at end of file
+220588
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOutputSingle.snap b/.forge-snapshots/V4Router_ExactOutputSingle.snap
index 07b528f6..0ee901fa 100644
--- a/.forge-snapshots/V4Router_ExactOutputSingle.snap
+++ b/.forge-snapshots/V4Router_ExactOutputSingle.snap
@@ -1 +1 @@
-128977
\ No newline at end of file
+128989
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOutputSingle_nativeIn_sweepETH.snap b/.forge-snapshots/V4Router_ExactOutputSingle_nativeIn_sweepETH.snap
index fc62dc58..d84e3f94 100644
--- a/.forge-snapshots/V4Router_ExactOutputSingle_nativeIn_sweepETH.snap
+++ b/.forge-snapshots/V4Router_ExactOutputSingle_nativeIn_sweepETH.snap
@@ -1 +1 @@
-120944
\ No newline at end of file
+120956
\ No newline at end of file
diff --git a/.forge-snapshots/V4Router_ExactOutputSingle_nativeOut.snap b/.forge-snapshots/V4Router_ExactOutputSingle_nativeOut.snap
index 60dc6e07..44a53a84 100644
--- a/.forge-snapshots/V4Router_ExactOutputSingle_nativeOut.snap
+++ b/.forge-snapshots/V4Router_ExactOutputSingle_nativeOut.snap
@@ -1 +1 @@
-116320
\ No newline at end of file
+116332
\ No newline at end of file
diff --git a/src/libraries/CalldataDecoder.sol b/src/libraries/CalldataDecoder.sol
index f81dd4e2..88a5caa7 100644
--- a/src/libraries/CalldataDecoder.sol
+++ b/src/libraries/CalldataDecoder.sol
@@ -11,9 +11,6 @@ library CalldataDecoder {
 
     error SliceOutOfBounds();
 
-    /// @notice equivalent to SliceOutOfBounds.selector
-    bytes4 constant SLICE_ERROR_SELECTOR = 0x3b99b53d;
-
     /// @notice mask used for offsets and lengths to ensure no overflow
     /// @dev no sane abi encoding will pass in an offset or length greater than type(uint32).max
     uint256 constant OFFSET_OR_LENGTH_MASK = 0xffffffff;
@@ -228,15 +225,16 @@ library CalldataDecoder {
         uint256 length;
         uint256 relativeOffset;
         assembly ("memory-safe") {
+            let bytesOffset := and(_bytes.offset, OFFSET_OR_LENGTH_MASK)
             // The offset of the `_arg`-th element is `32 * arg`, which stores the offset of the length pointer.
             // shl(5, x) is equivalent to mul(32, x)
-            let lengthPtr := add(_bytes.offset, calldataload(add(_bytes.offset, shl(5, _arg))))
+            let lengthPtr := add(bytesOffset, and(calldataload(add(bytesOffset, shl(5, _arg))), OFFSET_OR_LENGTH_MASK))
             // the number of bytes in the bytes string
-            length := calldataload(lengthPtr)
+            length := and(calldataload(lengthPtr), OFFSET_OR_LENGTH_MASK)
             // the offset where the bytes string begins
             let offset := add(lengthPtr, 0x20)
             // the relative offset of the array from the calldata parameter
-            relativeOffset := sub(offset, _bytes.offset)
+            relativeOffset := sub(offset, bytesOffset)
             // assign the return parameters
             res.length := length
             res.offset := offset