code: def _process_thread(self, client):
      
      system_type = client.data.os_info.system
      print('System type: {0:s}'.format(system_type))
  
      # If the list is supplied by the user via a flag, honor that.
      artifact_list = []
      if self.artifacts:
        print('Artifacts to be collected: {0!s}'.format(self.artifacts))
        artifact_list = self.artifacts
      else:
        default_artifacts = self.artifact_registry.get(system_type, None)
        if default_artifacts:
          print('Collecting default artifacts for {0:s}: {1:s}'.format(
              system_type, ', '.join(default_artifacts)))
          artifact_list.extend(default_artifacts)
  
      if self.extra_artifacts:
        print('Throwing in an extra {0!s}'.format(self.extra_artifacts))
        artifact_list.extend(self.extra_artifacts)
        artifact_list = list(set(artifact_list))
  
      if not artifact_list:
        return
  
      flow_args = flows_pb2.ArtifactCollectorFlowArgs(
          artifact_list=artifact_list,
          use_tsk=self.use_tsk,
          ignore_interpolation_errors=True,
          apply_parsers=False)
      flow_id = self._launch_flow(client, 'ArtifactCollectorFlow', flow_args)
      self._await_flow(client, flow_id)
      collected_flow_data = self._download_files(client, flow_id)
      if collected_flow_data:
        print('{0!s}: Downloaded: {1:s}'.format(flow_id, collected_flow_data))
        fqdn = client.data.os_info.fqdn.lower()
        self.state.output.append((fqdn, collected_flow_data))
docs: Process a single GRR client.
  
      Args:
        client: a GRR client object.