```\nfunction initializeInvestorStateDefault(\n    address[] memory addresses\n    ) external onlyRole(CONFIGURER_ROLE) {\n    _initializeInvestorState(\n      addresses,\n      defaultMintLimit,\n      defaultRedemptionLimit,\n      defaultMintLimitDuration,\n      defaultRedemptionLimitDuration\n    );\n}\n\nfunction _initializeInvestorState(\n    address[] memory addresses,\n    uint256 mintLimit,\n    uint256 redemptionLimit,\n    uint256 mintLimitDuration,\n    uint256 redemptionLimitDuration\n    ) internal {\n    uint256 investorId = ++investorIdCounter;\n\n    // @audit this `for` loop can by bypassed by calling\n    // `initializeInvestorStateDefault` with an empty array\n    for (uint256 i = 0; i < addresses.length; ++i) {\n      // Safety check to ensure the address is not already associated with an investor\n      // before associating it with a new investor\n      if (addressToInvestorId[addresses[i]] != 0) {\n        revert AddressAlreadyAssociated();\n      }\n      _setAddressToInvestorId(addresses[i], investorId);\n    }\n\n    investorIdToMintState[investorId] = RateLimit({\n      currentAmount: 0,\n      limit: mintLimit,\n      lastResetTime: block.timestamp,\n      limitDuration: mintLimitDuration\n    });\n    investorIdToRedemptionState[investorId] = RateLimit({\n      currentAmount: 0,\n      limit: redemptionLimit,\n      lastResetTime: block.timestamp,\n      limitDuration: redemptionLimitDuration\n    });\n}\n```\n