code: def list_files(self, prefix, flat=False):
      
  
      layer_path = self.get_path_to_file("")        
      path = os.path.join(layer_path, prefix)
  
      @retry
      def s3lst(continuation_token=None):
        kwargs = {
          'Bucket': self._path.bucket,
          'Prefix': path,
        }
  
        if continuation_token:
          kwargs['ContinuationToken'] = continuation_token
  
        return self._conn.list_objects_v2(**kwargs)
  
      resp = s3lst()
  
      def iterate(resp):
        if 'Contents' not in resp.keys():
          resp['Contents'] = []
  
        for item in resp['Contents']:
          key = item['Key']
          filename = key.replace(layer_path, '')
          if not flat and filename[-1] != '/':
            yield filename
          elif flat and '/' not in key.replace(path, ''):
            yield filename
  
  
      for filename in iterate(resp):
        yield filename
  
      while resp['IsTruncated'] and resp['NextContinuationToken']:
        resp = s3lst(resp['NextContinuationToken'])
  
        for filename in iterate(resp):
          yield filename
docs: List the files in the layer with the given prefix. 
  
      flat means only generate one level of a directory,
      while non-flat means generate all file paths with that 
      prefix.