code: def readrows(self):
          
  
          # Loop forever or until max_rows is reached
          num_rows = 0
          while True:
  
              # Yield the rows from the internal reader
              for row in self.log_reader.readrows():
                  yield self.replace_timestamp(row)
  
                  # Sleep and count rows
                  time.sleep(next(self.eps_timer))
                  num_rows += 1
  
                  # Check for max_rows
                  if self.max_rows and (num_rows >= self.max_rows):
                      return
docs: Using the BroLogReader this method yields each row of the log file
             replacing timestamps, looping and emitting rows based on EPS rate