<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def cull(self, delta: bool) -> None: """ Cull cache entry frame list to size, favouring most recent query time. :param delta: True to operate on rev reg deltas, False for rev reg states """


        LOGGER.debug('RevoCacheEntry.cull >>> delta: %s', delta)

        rr_frames = self.rr_delta_frames if delta else self.rr_state_frames
        mark = 4096**0.5  # max rev reg size = 4096; heuristic: hover max around sqrt(4096) = 64
        if len(rr_frames) > int(mark * 1.25):
            rr_frames.sort(key=lambda x: -x.qtime)  # order by descending query time
            del rr_frames[int(mark * 0.75):]  # retain most recent, grow again from here
            LOGGER.info(
                'Pruned revocation cache entry %s to %s %s frames',
                self.rev_reg_def['id'],
                len(rr_frames),
                'delta' if delta else 'state')

        LOGGER.debug('RevoCacheEntry.cull <<<')