FeiTimedMinter - constructor does not enforce the same boundaries as setter for frequency
The setter method for `frequency` enforced upper and lower bounds while the constructor does not. Users cannot trust that the `frequency` is actually set to be within bounds on deployment.\\n```\\nconstructor(\\n    address \\_core,\\n    address \\_target,\\n    uint256 \\_incentive,\\n    uint256 \\_frequency,\\n    uint256 \\_initialMintAmount\\n)\\n    CoreRef(\\_core)\\n    Timed(\\_frequency)\\n    Incentivized(\\_incentive)\\n    RateLimitedMinter((\\_initialMintAmount + \\_incentive) / \\_frequency, (\\_initialMintAmount + \\_incentive), true)\\n{\\n    \\_initTimed();\\n\\n    \\_setTarget(\\_target);\\n    \\_setMintAmount(\\_initialMintAmount);\\n}\\n```\\n\\n```\\nfunction setFrequency(uint256 newFrequency) external override onlyGovernorOrAdmin {\\n    require(newFrequency >= MIN\\_MINT\\_FREQUENCY, "FeiTimedMinter: frequency low");\\n    require(newFrequency <= MAX\\_MINT\\_FREQUENCY, "FeiTimedMinter: frequency high");\\n\\n    \\_setDuration(newFrequency);\\n}\\n```\\n
Perform the same checks on `frequency` in the constructor as in the `setFrequency` method.\\nThis contract is also inherited by a range of contracts that might specify different boundaries to what is hardcoded in the `FeiTimedMinter`. A way to enforce bounds-checks could be to allow overriding the setter method and using the setter in the constructor as well ensuring that bounds are also checked on deployment.
```\\nconstructor(\\n    address \\_core,\\n    address \\_target,\\n    uint256 \\_incentive,\\n    uint256 \\_frequency,\\n    uint256 \\_initialMintAmount\\n)\\n    CoreRef(\\_core)\\n    Timed(\\_frequency)\\n    Incentivized(\\_incentive)\\n    RateLimitedMinter((\\_initialMintAmount + \\_incentive) / \\_frequency, (\\_initialMintAmount + \\_incentive), true)\\n{\\n    \\_initTimed();\\n\\n    \\_setTarget(\\_target);\\n    \\_setMintAmount(\\_initialMintAmount);\\n}\\n```\\n