def METHOD_NAME(self, products, **search_params):
    """Execute crunch:
    Filter latest products (the ones with a the highest start date) that intersect search extent.
    :param products: A list of products resulting from a search
    :type products: list(:class:`~eodag.api.product._product.EOProduct`)
    :param search_params: Search criteria that must contain `geometry` (dict)
                          or search `geom` (:class:`shapely.geometry.base.BaseGeometry`) argument will be used
    :type search_params: dict
    :returns: The filtered products
    :rtype: list(:class:`~eodag.api.product._product.EOProduct`)
    """
    logger.debug("Start filtering for latest products")
    if not products:
        return []
    # Warning: May crash if startTimeFromAscendingNode is not in the appropriate format
    products.sort(key=self.sort_product_by_start_date, reverse=True)
    filtered = []
    add_to_filtered = filtered.append
    footprint = search_params.get("geometry") or search_params.get("geom")
    if not footprint:
        logger.warning(
            "geometry not found in cruncher arguments, filtering disabled."
        )
        return products
    elif isinstance(footprint, dict):
        search_extent = geometry.box(
            footprint["lonmin"],
            footprint["latmin"],
            footprint["lonmax"],
            footprint["latmax"],
        )
    elif not isinstance(footprint, geometry.base.BaseGeometry):
        logger.warning(
            "geometry found in cruncher arguments did not match the expected format."
        )
        return products
    else:
        search_extent = footprint
    logger.debug("Initial requested extent area: %s", search_extent.area)
    for product in products:
        logger.debug("Uncovered extent area: %s", search_extent.area)
        if product.search_intersection:
            logger.debug(
                "Product %r intersects the requested extent. Adding it to the final result",
                product,
            )
            add_to_filtered(product)
        search_extent = search_extent.difference(product.geometry)
        if search_extent.is_empty:
            logger.debug(
                "The requested extent is now entirely covered by the search result"
            )
            break
    logger.info("Finished filtering products. %s resulting products", len(filtered))
    return filtered