Authorized addresses can indefinitely stall ZrxVaultBackstop catastrophic failure mode
The `ZrxVaultBackstop` contract was added to allow anyone to activate the staking system's “catastrophic failure” mode if the `StakingProxy` is in “read-only” mode for at least 40 days. To enable this behavior, the `StakingProxy` contract was modified to track the last timestamp at which “read-only” mode was activated. This is done by way of StakingProxy.setReadOnlyMode:\\n```\\n/// @dev Set read-only mode (state cannot be changed).\\nfunction setReadOnlyMode(bool shouldSetReadOnlyMode)\\n    external\\n    onlyAuthorized\\n{\\n    // solhint-disable-next-line not-rely-on-time\\n    uint96 timestamp = block.timestamp.downcastToUint96();\\n    if (shouldSetReadOnlyMode) {\\n        stakingContract = readOnlyProxy;\\n        readOnlyState = IStructs.ReadOnlyState({\\n            isReadOnlyModeSet: true,\\n            lastSetTimestamp: timestamp\\n        });\\n```\\n\\nBecause the timestamp is updated even if “read-only” mode is already active, any authorized address can prevent `ZrxVaultBackstop` from activating catastrophic failure mode by repeatedly calling `setReadOnlyMode`.
If “read-only” mode is already active, `setReadOnlyMode(true)` should result in a no-op.
```\\n/// @dev Set read-only mode (state cannot be changed).\\nfunction setReadOnlyMode(bool shouldSetReadOnlyMode)\\n    external\\n    onlyAuthorized\\n{\\n    // solhint-disable-next-line not-rely-on-time\\n    uint96 timestamp = block.timestamp.downcastToUint96();\\n    if (shouldSetReadOnlyMode) {\\n        stakingContract = readOnlyProxy;\\n        readOnlyState = IStructs.ReadOnlyState({\\n            isReadOnlyModeSet: true,\\n            lastSetTimestamp: timestamp\\n        });\\n```\\n