OperationalStaking may not possess enough CQT for the last withdrawal
Both `_sharesToTokens` and `_tokensToShares` round down instead of rounding off against the user. This can result in users withdrawing few weis more than they should, which in turn would make the last CQT transfer from the contract revert due to insufficient balance.\\nWhen users `stake`, the shares they will receive is calculated via _tokensToShares:\\n```\\n    function _tokensToShares(\\n        uint128 amount,\\n        uint128 rate\\n    ) internal view returns (uint128) {\\n        return uint128((uint256(amount) * DIVIDER) / uint256(rate));\\n    }\\n```\\n\\nSo the rounding will be against the user, or zero if the user provided the right amount of CQT.\\nWhen users unstake, their shares are decreased by\\n```\\n    function _sharesToTokens(\\n        uint128 sharesN,\\n        uint128 rate\\n    ) internal view returns (uint128) {\\n        return uint128((uint256(sharesN) * uint256(rate)) / DIVIDER);\\n    }\\n```\\n\\nSo it is possible to `stake` and `unstake` such amounts, that would leave dust amount of shares on user's balance after their full withdrawal. However, dust amounts can not be withdrawn due to the check in _redeemRewards:\\n```\\n        require(\\n            effectiveAmount >= REWARD_REDEEM_THRESHOLD,\\n            "Requested amount must be higher than redeem threshold"\\n        );\\n```\\n\\nBut, if the user does not withdraw immediately, but instead does it after the multiplier is increased, the dust he received from rounding error becomes withdrawable, because his `totalUnlockedValue` becomes greater than `REWARD_REDEEM_THRESHOLD`.\\nSo the user will end up withdrawing more than their `initialStake + shareOfRewards`, which means, if the rounding after all other operations stays net-zero for the protocol, there won't be enough CQT for the last CQT withdrawal (be it `transferUnstakedOut`, `redeemRewards`, or redeemCommission).\\nFoundry PoC
`_sharesToTokens` and `_tokensToShares`, instead of rounding down, should always round off against the user.
Victim's transactions will keep reverting unless they figure out that they need to decrease their withdrawal amount.
```\\n    function _tokensToShares(\\n        uint128 amount,\\n        uint128 rate\\n    ) internal view returns (uint128) {\\n        return uint128((uint256(amount) * DIVIDER) / uint256(rate));\\n    }\\n```\\n