<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def read_chunks(self):
 """Read chunks from the HTTP client"""


        if self.reading_chunks and self.got_chunk:
            # we got on the fast-path and directly read from the buffer.
            # if we continue to recurse, this is going to blow up the stack.
            # so instead return
            #
            # NOTE: This actually is unnecessary as long as tornado guarantees that
            #       ioloop.add_callback always gets dispatched via the main io loop
            #       and they don't introduce a fast-path similar to read_XY
            logger.debug("Fast-Path detected, returning...")
            return

        while not self.got_request:
            self.reading_chunks = True
            self.got_chunk = False
            # chunk starts with length, so read it. This will then subsequently also read the chunk
            self.httpstream.read_until("\r\n", self._chunk_length)
            self.reading_chunks = False

            if self.got_chunk:
                # the previous read hit the fast path and read from the buffer
                # instead of going through the main polling loop. This means we 
                # should iteratively issue the next request
                logger.debug("Fast-Path detected, iterating...")
                continue
            else:
                break

        # if we arrive here, we read the complete request or
        # the ioloop has scheduled another call to read_chunks
        return