ArrakisV2Router#addLiquidityPermit2 will strand ETH
Inside ArrakisV2Router#addLiquidityPermit2, `isToken0Weth` is set incorrectly leading to the wrong amount of ETH being refunded to the user\\nArrakisV2Router.sol#L278-L298\\n```\\n    bool isToken0Weth;\\n    _permit2Add(params_, amount0, amount1, token0, token1);\\n\\n    _addLiquidity(\\n        params_.addData.vault,\\n        amount0,\\n        amount1,\\n        sharesReceived,\\n        params_.addData.gauge,\\n        params_.addData.receiver,\\n        token0,\\n        token1\\n    );\\n\\n    if (msg.value > 0) {\\n        if (isToken0Weth && msg.value > amount0) {\\n            payable(msg.sender).sendValue(msg.value - amount0);\\n        } else if (!isToken0Weth && msg.value > amount1) {\\n            payable(msg.sender).sendValue(msg.value - amount1);\\n        }\\n    }\\n```\\n\\nAbove we see that excess msg.value is returned to the user at the end of the function. This uses the value of `isToken0Weth` to determine the amount to send back to the user. The issue is that `isToken0Weth` is set incorrectly and will lead to ETH being stranded in the contract. `isToken0Weth` is never set, it will always be `false`. This means that when WETH actually is token0 the incorrect amount of ETH will be sent back to the user.\\nThis same issue can also be used to steal the ETH left in the contract by a malicious user. To make matters worse, the attacker can manipulate the underlying pools to increase the amount of ETH left in the contract so they can steal even more.
Move `isToken0Weth` and set it correctly:\\n```\\n-   bool isToken0Weth;\\n    _permit2Add(params_, amount0, amount1, token0, token1);\\n\\n    _addLiquidity(\\n        params_.addData.vault,\\n        amount0,\\n        amount1,\\n        sharesReceived,\\n        params_.addData.gauge,\\n        params_.addData.receiver,\\n        token0,\\n        token1\\n    );\\n\\n    if (msg.value > 0) {\\n+       bool isToken0Weth = _isToken0Weth(address(token0), address(token1));\\n        if (isToken0Weth && msg.value > amount0) {\\n            payable(msg.sender).sendValue(msg.value - amount0);\\n        } else if (!isToken0Weth && msg.value > amount1) {\\n            payable(msg.sender).sendValue(msg.value - amount1);\\n        }\\n    }\\n```\\n
ETH will be stranded in contract and stolen
```\\n    bool isToken0Weth;\\n    _permit2Add(params_, amount0, amount1, token0, token1);\\n\\n    _addLiquidity(\\n        params_.addData.vault,\\n        amount0,\\n        amount1,\\n        sharesReceived,\\n        params_.addData.gauge,\\n        params_.addData.receiver,\\n        token0,\\n        token1\\n    );\\n\\n    if (msg.value > 0) {\\n        if (isToken0Weth && msg.value > amount0) {\\n            payable(msg.sender).sendValue(msg.value - amount0);\\n        } else if (!isToken0Weth && msg.value > amount1) {\\n            payable(msg.sender).sendValue(msg.value - amount1);\\n        }\\n    }\\n```\\n