code: def fetch_fiac_first_level(data_dir=None, verbose=1):
      """Download a first-level fiac :term:`fMRI` dataset (2 runs).
  
      Parameters
      ----------
      %(data_dir)s
      %(verbose)s
  
      Returns
      -------
      data : sklearn.datasets.base.Bunch
          Dictionary-like object, the interest attributes are:
  
          - 'design_matrix1': :obj:`str`.
            Path to design matrix .npz file of run 1
          - 'func1': :obj:`str`. Path to Nifti file of run 1
          - 'design_matrix2': :obj:`str`.
            Path to design matrix .npz file of run 2
          - 'func2': :obj:`str`. Path to Nifti file of run 2
          - 'mask': :obj:`str`. Path to mask file
          - 'description': :obj:`str`. Data description
  
      """
      data_dir = get_dataset_dir(
          "fiac_nilearn.glm", data_dir=data_dir, verbose=verbose
      )
  
      def _glob_fiac_data():
          """Glob data from subject_dir."""
          _subject_data = {}
          subject_dir = os.path.join(
              data_dir, "nipy-data-0.2/data/fiac/fiac0"
          )
          for run in [1, 2]:
              # glob func data for session
              session_func = os.path.join(
                  subject_dir, f"run{int(run)}.nii.gz"
              )
              if not os.path.isfile(session_func):
                  print(
                      f"Missing functional scan for session {int(run)}."
                  )
                  return None
  
              _subject_data[f"func{int(run)}"] = session_func
  
              # glob design matrix .npz file
              sess_dmtx = os.path.join(
                  subject_dir, f"run{int(run)}_design.npz"
              )
              if not os.path.isfile(sess_dmtx):
                  print(f"Missing run file: {sess_dmtx}")
                  return None
  
              _subject_data[f"design_matrix{int(run)}"] = sess_dmtx
  
          # glob for mask data
          mask = os.path.join(subject_dir, "mask.nii.gz")
          if not os.path.isfile(mask):
              print("Missing mask image.")
              return None
  
          _subject_data["mask"] = mask
          return Bunch(**_subject_data)
  
      description = get_dataset_descr("fiac")
  
      # maybe data_dir already contains the data ?
      data = _glob_fiac_data()
      if data is not None:
          data.description = description
          return data
  
      # No. Download the data
      print("Data absent, downloading...")
      url = "https://nipy.org/data-packages/nipy-data-0.2.tar.gz"
  
      archive_path = os.path.join(data_dir, os.path.basename(url))
      fetch_single_file(url, data_dir)
      try:
          uncompress_file(archive_path)
      except Exception:
          print("Archive corrupted, trying to download it again.")
          data = fetch_fiac_first_level(data_dir=data_dir)
          data.description = description
          return data
  
      data = _glob_fiac_data()
      data.description = description
      return data
  
imports: import fnmatch
  import glob
  import json
  import numbers
  import os
  import re
  import warnings
  from io import BytesIO
  from pathlib import Path
  import nibabel
  import nibabel
  import numpy
  import pandas
  from scipy.io import loadmat
  from sklearn.utils import Bunch
  from nilearn.image import get_data
  from .._utils import check_niimg, fill_doc
  from .._utils.numpy_conversions import csv_to_array
  from ._utils import fetch_files, fetch_single_file, filter_columns, get_dataset_descr, get_dataset_dir, read_md5_sum_file, tree, uncompress_file
label_desc: Use image node_id 43 for calling a global function with example usage: fetch_fiac_first_level(data_dir, verbose) and returns: data, Bunch, data, None, data, None, None