Slashing limit will be bypassed if any staker (finish) redeems their tokens in the `SLASHING_VETO_WINDOW` which will result in other vault's stakers facing more assets slash 
Audit: 2024-07-karak-findings
Severity: MEDIUM

# Lines of code

https://github.com/code-423n4/2024-07-karak/blob/main/src/entities/SlasherLib.sol#L101-L108
https://github.com/code-423n4/2024-07-karak/blob/f5e52fdcb4c20c4318d532a9f08f7876e9afb321/src/entities/SlasherLib.sol#L136


# Vulnerability details

When a DSS [requests slashing](https://github.com/code-423n4/2024-07-karak/blob/f5e52fdcb4c20c4318d532a9f08f7876e9afb321/src/Core.sol#L220) for a vault/operator, the [`SlasherLib.requestSlashing`](https://github.com/code-423n4/2024-07-karak/blob/f5e52fdcb4c20c4318d532a9f08f7876e9afb321/src/entities/SlasherLib.sol#L94), [calculates](https://github.com/code-423n4/2024-07-karak/blob/main/src/entities/SlasherLib.sol#L86-L90) the amount to slash and save it in the [`earmarkedStakes`](https://github.com/code-423n4/2024-07-karak/blob/f5e52fdcb4c20c4318d532a9f08f7876e9afb321/src/entities/SlasherLib.sol#L107). Exactly the same `earmarkedStakes` amount is then used in [`finalizeSlashing`](https://github.com/code-423n4/2024-07-karak/blob/f5e52fdcb4c20c4318d532a9f08f7876e9afb321/src/entities/SlasherLib.sol#L136) to execute the [`slashAssets`](https://github.com/code-423n4/2024-07-karak/blob/f5e52fdcb4c20c4318d532a9f08f7876e9afb321/src/Vault.sol#L193) function.

The problem is that there will be a 2 days [`SLASHING_VETO_WINDOW`](https://github.com/code-423n4/2024-07-karak/blob/f5e52fdcb4c20c4318d532a9f08f7876e9afb321/src/entities/SlasherLib.sol#L129) delay between the `requestSlashing` and `finalizeSlahing`, which means the total assets in the vault can change if any staker finish redeeming their assets in that phase.
```solidity
    function requestSlashing(CoreLib.Storage storage self, IDSS dss, SlashRequest memory slashingMetadata, uint256 nonce) 
     external returns (QueuedSlashing memory queuedSlashing) {
        validateRequestSlashingParams(self, slashingMetadata, dss);
@>      uint256[] memory earmarkedStakes = fetchEarmarkedStakes(slashingMetadata);
        queuedSlashing = QueuedSlashing({
            dss: dss,
            timestamp: uint96(block.timestamp),
            operator: slashingMetadata.operator,
            vaults: slashingMetadata.vaults,
@>          earmarkedStakes: earmarkedStakes,
            nonce: nonce
        });
        .....
     }
```
```solidity
    function finalizeSlashing(CoreLib.Storage storage self, QueuedSlashing memory queuedSlashing) external {
        bytes32 slashRoot = calculateRoot(queuedSlashing);
        if (!self.slashingRequests[slashRoot]) revert InvalidSlashingParams();
        if (queuedSlashing.timestamp + Constants.SLASHING_VETO_WINDOW > block.timestamp) {
            revert MinSlashingDelayNotPassed();
        }
        delete self.slashingRequests[slashRoot];

        for (uint256 i = 0; i < queuedSlashing.vaults.length; i++) {
            IKarakBaseVault(queuedSlashing.vaults[i]).slashAssets(
@>              queuedSlashing.earmarkedStakes[i],
                self.assetSlashingHandlers[IKarakBaseVault(queuedSlashing.vaults[i]).asset()]