<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def gfudb(udfuns, udfunb, step, cnfine, result):
 """ Perform a GF search on a user defined boolean quantity. https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/cspice/gfudb_c.html :param udfuns: Name of the routine that computes a scalar quantity of interest corresponding to an 'et'. :type udfuns: ctypes.CFunctionType :param udfunb: Name of the routine returning the boolean value corresponding to an 'et'. :type udfunb: ctypes.CFunctionType :param step: Step size used for locating extrema and roots. :type step: float :param cnfine: SPICE window to which the search is restricted. :type cnfine: spiceypy.utils.support_types.SpiceCell :param result: SPICE window containing results. :type result: spiceypy.utils.support_types.SpiceCell :return: result :rtype: spiceypy.utils.support_types.SpiceCell """

    step = ctypes.c_double(step)
    libspice.gfudb_c(udfuns, udfunb, step, ctypes.byref(cnfine), ctypes.byref(result))