MEDIUM severity: The vulnerability lies in the insufficient validation of new Fertilizer IDs, which allows for a deni. The vulnerability lies in the insufficient validation of new Fertilizer IDs, which allows for a denial-of-service (DoS) attack on `SeasonFacet::gm` when the last element in the FIFO list is paid. The issue arises from the removal of the restriction on adding 0 Fertilizer, which was previously enforc...

Vulnerable code:
```\nfunction addUnderlying(uint256 amount, uint256 minAmountOut) internal {\n    C.bean().mint(\n        address(this),\n        newDepositedBeans.add(newDepositedLPBeans)\n    );\n\n    uint256 newLP = C.curveZap().add_liquidity(\n        C.CURVE_BEAN_METAPOOL,\n        [\n            newDepositedLPBeans,\n            0,\n            amount,\n            0\n        ],\n        minAmountOut\n    );\n\n    LibUnripe.incrementUnderlying(C.UNRIPE_BEAN, newDepositedBeans);\n    LibUnripe.incrementUnderlying(C.UNRIPE_LP, newLP);\n\n    s.recapitalized = s.recapitalized.add(amount);\n}\n```\n```\nfunction addUnderlying(uint256 usdAmount, uint256 minAmountOut) internal {\n    AppStorage storage s = LibAppStorage.diamondStorage();\n\n    uint256 percentToFill = usdAmount.mul(C.precision()).div(remainingRecapitalization());\n    uint256 newDepositedBeans;\n    if (C.unripeBean().totalSupply() > s.u[C.UNRIPE_BEAN].balanceOfUnderlying) {\n        newDepositedBeans = (C.unripeBean().totalSupply()).sub(s.u[C.UNRIPE_BEAN].balanceOfUnderlying);\n        newDepositedBeans = newDepositedBeans.mul(percentToFill).div(C.precision());\n    }\n\n    uint256 newDepositedLPBeans = usdAmount.mul(C.exploitAddLPRatio()).div(DECIMALS);\n\n    C.bean().mint(address(this), newDepositedBeans);\n\n    C.bean().mint(address(C.BEAN_ETH_WELL), newDepositedLPBeans);\n\n    uint256 newLP = IWell(C.BEAN_ETH_WELL).sync(address(this), minAmountOut);\n\n    LibUnripe.incrementUnderlying(C.UNRIPE_BEAN, newDepositedBeans);\n    LibUnripe.incrementUnderlying(C.UNRIPE_LP, newLP);\n\n    s.recapitalized = s.recapitalized.add(usdAmount);\n}\n```\n```\nfunction push(uint128 id) internal {\n    AppStorage storage s = LibAppStorage.diamondStorage();\n    if (s.fFirst == 0) {\n        // Queue is empty\n        s.season.fertilizing = true;\n        s.fLast = id;\n        s.fFirst = id;\n    } else if (id <= s.fFirst) {\n        // Add to front of queue\n        setNext(id, s.fFirst);\n        s.fFirst = id;\n    } else if (id >= s.fLast) {\n        // Add to back of queue\n        setNext(s.fLast, id);\n        s.fLast = id;\n    } else {\n        // Add to middle of queue\n        uint128 prev = s.fFirst;\n        uint128 next = getNext(prev);\n        // Search for proper place in line\n        while (id > next) {\n            prev = next;\n            next = getNext(next);\n        }\n        setNext(prev, id);\n        setNext(id, next);\n    }\n}\n```\n```\nfunction pop() internal returns (bool) {\n    AppStorage storage s = LibAppStorage.diamondStorage();\n    uint128 first = s.fFirst;\n    s.activeFertilizer = s.activeFertilizer.sub(getAmount(first));\n    uint128 next = getNext(first);\n    if (next!= 0) {\n        s.fFirst = getNext(first);\n        return true;\n    }\n    require(s.activeFertilizer == 0, "Still active fertilizer");\n    s.fFirst = 0;\n    s.fLast = 0;\n    s.season.fertilizing = false;\n    return false;\n```