```\n  /// @notice Roll into the next Series if there isn't an active series and the cooldown period has elapsed.\n  function roll() external {\n      if (maturity != MATURITY_NOT_SET) revert RollWindowNotOpen();\n\n      if (lastSettle == 0) {\n          // If this is the first roll, lock some shares in by minting them for the zero address.\n          // This prevents the contract from reaching an empty state during future active periods.\n          deposit(firstDeposit, address(0));\n      } else if (lastSettle + cooldown > block.timestamp) {\n          revert RollWindowNotOpen();\n      }\n\n      lastRoller = msg.sender;\n      adapter.openSponsorWindow();\n  }\n```\n