__attribute__((visibility ("hidden")))
mono_install_image_unload_hook (void (*MonoImageUnloadFunc) (struct MonoImage *, void *) func, void * user_data)
{
  struct GSList * image_unload_hooks.0;
  struct GSList * D.19000;
  struct ImageUnloadHook * hook;

  if (func == 0B) goto <D.18997>; else goto <D.18998>;
  <D.18997>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "image.c", 75, "func != NULL");
  return;
  <D.18998>:
  hook = monoeg_malloc0 (16);
  hook->func = func;
  hook->user_data = user_data;
  image_unload_hooks.0 = image_unload_hooks;
  D.19000 = monoeg_g_slist_prepend (image_unload_hooks.0, hook);
  image_unload_hooks = D.19000;
}


__attribute__((visibility ("hidden")))
mono_remove_image_unload_hook (void (*MonoImageUnloadFunc) (struct MonoImage *, void *) func, void * user_data)
{
  void (*<T1c70>) (struct MonoImage *, void *) D.19002;
  void * D.19005;
  struct GSList * image_unload_hooks.1;
  struct GSList * D.19009;
  struct GSList * l;
  struct ImageUnloadHook * hook;

  l = image_unload_hooks;
  goto <D.18467>;
  <D.18466>:
  hook = l->data;
  D.19002 = hook->func;
  if (D.19002 == func) goto <D.19003>; else goto <D.19004>;
  <D.19003>:
  D.19005 = hook->user_data;
  if (D.19005 == user_data) goto <D.19006>; else goto <D.19007>;
  <D.19006>:
  monoeg_g_free (hook);
  image_unload_hooks.1 = image_unload_hooks;
  D.19009 = monoeg_g_slist_delete_link (image_unload_hooks.1, l);
  image_unload_hooks = D.19009;
  goto <D.18465>;
  <D.19007>:
  <D.19004>:
  l = l->next;
  <D.18467>:
  if (l != 0B) goto <D.18466>; else goto <D.18465>;
  <D.18465>:
}


mono_cli_rva_image_map (struct MonoImage * image, guint32 addr)
{
  unsigned int D.19010;
  unsigned int D.19013;
  unsigned int D.19014;
  guint32 D.19017;
  unsigned int D.19018;
  unsigned int D.19019;
  struct MonoCLIImageInfo * iinfo;
  const int top;
  struct MonoSectionTable * tables;
  int i;

  iinfo = image->image_info;
  top = iinfo->cli_section_count;
  tables = iinfo->cli_section_tables;
  i = 0;
  goto <D.18485>;
  <D.18484>:
  D.19010 = tables->st_virtual_address;
  if (D.19010 <= addr) goto <D.19011>; else goto <D.19012>;
  <D.19011>:
  D.19010 = tables->st_virtual_address;
  D.19013 = tables->st_raw_data_size;
  D.19014 = D.19010 + D.19013;
  if (D.19014 > addr) goto <D.19015>; else goto <D.19016>;
  <D.19015>:
  D.19010 = tables->st_virtual_address;
  D.19018 = addr - D.19010;
  D.19019 = tables->st_raw_data_ptr;
  D.19017 = D.19018 + D.19019;
  return D.19017;
  <D.19016>:
  <D.19012>:
  tables = tables + 40;
  i = i + 1;
  <D.18485>:
  if (i < top) goto <D.18484>; else goto <D.18486>;
  <D.18486>:
  D.19017 = 4294967295;
  return D.19017;
}


mono_image_rva_map (struct MonoImage * image, guint32 addr)
{
  unsigned int D.19021;
  unsigned int D.19024;
  unsigned int D.19025;
  void * * D.19028;
  long unsigned int D.19029;
  long unsigned int D.19030;
  void * * D.19031;
  void * D.19032;
  int D.19035;
  char * D.19038;
  unsigned int D.19039;
  sizetype D.19040;
  struct MonoCLIImageInfo * iinfo;
  const int top;
  struct MonoSectionTable * tables;
  int i;

  iinfo = image->image_info;
  top = iinfo->cli_section_count;
  tables = iinfo->cli_section_tables;
  i = 0;
  goto <D.18496>;
  <D.18495>:
  D.19021 = tables->st_virtual_address;
  if (D.19021 <= addr) goto <D.19022>; else goto <D.19023>;
  <D.19022>:
  D.19021 = tables->st_virtual_address;
  D.19024 = tables->st_raw_data_size;
  D.19025 = D.19021 + D.19024;
  if (D.19025 > addr) goto <D.19026>; else goto <D.19027>;
  <D.19026>:
  D.19028 = iinfo->cli_sections;
  D.19029 = (long unsigned int) i;
  D.19030 = D.19029 * 8;
  D.19031 = D.19028 + D.19030;
  D.19032 = *D.19031;
  if (D.19032 == 0B) goto <D.19033>; else goto <D.19034>;
  <D.19033>:
  D.19035 = mono_image_ensure_section_idx (image, i);
  if (D.19035 == 0) goto <D.19036>; else goto <D.19037>;
  <D.19036>:
  D.19038 = 0B;
  return D.19038;
  <D.19037>:
  <D.19034>:
  D.19028 = iinfo->cli_sections;
  D.19029 = (long unsigned int) i;
  D.19030 = D.19029 * 8;
  D.19031 = D.19028 + D.19030;
  D.19032 = *D.19031;
  D.19021 = tables->st_virtual_address;
  D.19039 = addr - D.19021;
  D.19040 = (sizetype) D.19039;
  D.19038 = D.19032 + D.19040;
  return D.19038;
  <D.19027>:
  <D.19023>:
  tables = tables + 40;
  i = i + 1;
  <D.18496>:
  if (i < top) goto <D.18495>; else goto <D.18497>;
  <D.18497>:
  D.19038 = 0B;
  return D.19038;
}


mono_images_init ()
{
  struct GHashTable * D.19042;
  struct GHashTable * D.19043;
  const gchar * D.19044;
  _Bool D.19045;
  int D.19046;

  InitializeCriticalSection (&images_mutex);
  D.19042 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  loaded_images_hash = D.19042;
  D.19043 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  loaded_images_refonly_hash = D.19043;
  D.19044 = monoeg_g_getenv ("MONO_DEBUG_ASSEMBLY_UNLOAD");
  D.19045 = D.19044 != 0B;
  D.19046 = (int) D.19045;
  debug_assembly_unload = D.19046;
  mutex_inited = 1;
}


mono_images_cleanup ()
{
  struct GHashTable * loaded_images_hash.2;
  struct MonoImage * image.3;
  char * D.19049;
  int D.19050;
  struct GHashTable * loaded_images_refonly_hash.4;
  struct GHashTableIter iter;
  struct MonoImage * image;

  try
    {
      DeleteCriticalSection (&images_mutex);
      loaded_images_hash.2 = loaded_images_hash;
      monoeg_g_hash_table_iter_init (&iter, loaded_images_hash.2);
      goto <D.18507>;
      <D.18506>:
      image.3 = image;
      D.19049 = image.3->name;
      mono_trace (64, 1, "Assembly image \'%s\' still loaded at shutdown.", D.19049);
      <D.18507>:
      D.19050 = monoeg_g_hash_table_iter_next (&iter, 0B, &image);
      if (D.19050 != 0) goto <D.18506>; else goto <D.18508>;
      <D.18508>:
      loaded_images_hash.2 = loaded_images_hash;
      monoeg_g_hash_table_destroy (loaded_images_hash.2);
      loaded_images_refonly_hash.4 = loaded_images_refonly_hash;
      monoeg_g_hash_table_destroy (loaded_images_refonly_hash.4);
      mutex_inited = 0;
    }
  finally
    {
      iter = {CLOBBER};
      image = {CLOBBER};
    }
}


mono_image_ensure_section_idx (struct MonoImage * image, int section)
{
  int D.19052;
  int D.19055;
  void * * D.19056;
  long unsigned int D.19057;
  long unsigned int D.19058;
  void * * D.19059;
  void * D.19060;
  struct MonoSectionTable * D.19063;
  long unsigned int D.19064;
  unsigned int D.19065;
  int D.19066;
  unsigned int D.19067;
  unsigned int D.19068;
  unsigned int D.19069;
  unsigned int D.19070;
  char * D.19073;
  sizetype D.19074;
  char * D.19075;
  struct MonoCLIImageInfo * iinfo;
  struct MonoSectionTable * sect;
  gboolean writable;

  iinfo = image->image_info;
  D.19052 = iinfo->cli_section_count;
  if (D.19052 <= section) goto <D.19053>; else goto <D.19054>;
  <D.19053>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "image.c", 237, "section < iinfo->cli_section_count");
  D.19055 = 0;
  return D.19055;
  <D.19054>:
  D.19056 = iinfo->cli_sections;
  D.19057 = (long unsigned int) section;
  D.19058 = D.19057 * 8;
  D.19059 = D.19056 + D.19058;
  D.19060 = *D.19059;
  if (D.19060 != 0B) goto <D.19061>; else goto <D.19062>;
  <D.19061>:
  D.19055 = 1;
  return D.19055;
  <D.19062>:
  D.19063 = iinfo->cli_section_tables;
  D.19057 = (long unsigned int) section;
  D.19064 = D.19057 * 40;
  sect = D.19063 + D.19064;
  D.19065 = sect->st_flags;
  D.19066 = (int) D.19065;
  writable = D.19066 & -2147483648;
  D.19067 = sect->st_raw_data_ptr;
  D.19068 = sect->st_raw_data_size;
  D.19069 = D.19067 + D.19068;
  D.19070 = image->raw_data_len;
  if (D.19069 > D.19070) goto <D.19071>; else goto <D.19072>;
  <D.19071>:
  D.19055 = 0;
  return D.19055;
  <D.19072>:
  D.19056 = iinfo->cli_sections;
  D.19057 = (long unsigned int) section;
  D.19058 = D.19057 * 8;
  D.19059 = D.19056 + D.19058;
  D.19073 = image->raw_data;
  D.19067 = sect->st_raw_data_ptr;
  D.19074 = (sizetype) D.19067;
  D.19075 = D.19073 + D.19074;
  *D.19059 = D.19075;
  D.19055 = 1;
  return D.19055;
}


mono_image_ensure_section (struct MonoImage * image, const char * section)
{
  struct MonoSectionTable * D.19077;
  long unsigned int D.19078;
  long unsigned int D.19079;
  struct MonoSectionTable * D.19080;
  char[8] * D.19081;
  int D.19082;
  int D.19085;
  int D.19086;
  struct MonoCLIImageInfo * ii;
  int i;

  ii = image->image_info;
  i = 0;
  goto <D.18524>;
  <D.18523>:
  D.19077 = ii->cli_section_tables;
  D.19078 = (long unsigned int) i;
  D.19079 = D.19078 * 40;
  D.19080 = D.19077 + D.19079;
  D.19081 = &D.19080->st_name;
  D.19082 = strncmp (D.19081, section, 8);
  if (D.19082 != 0) goto <D.19083>; else goto <D.19084>;
  <D.19083>:
  // predicted unlikely by continue predictor.
  goto <D.18522>;
  <D.19084>:
  D.19085 = mono_image_ensure_section_idx (image, i);
  return D.19085;
  <D.18522>:
  i = i + 1;
  <D.18524>:
  D.19086 = ii->cli_section_count;
  if (D.19086 > i) goto <D.18523>; else goto <D.18525>;
  <D.18525>:
  D.19085 = 0;
  return D.19085;
}


__attribute__((visibility ("hidden")))
mono_image_check_for_module_cctor (struct MonoImage * image)
{
  long unsigned int D.19088;
  long unsigned int D.19089;
  <unnamed-unsigned:24> D.19092;
  int D.19093;
  int D.19096;
  unsigned int D.19099;
  unsigned int D.19102;
  <unnamed-unsigned:24> D.19104;
  int first_method.5;
  int D.19106;
  struct MonoTableInfo * t;
  struct MonoTableInfo * mt;

  t = &image->tables[2];
  mt = &image->tables[6];
  D.19088 = BIT_FIELD_REF <*image, 64, 192>;
  D.19089 = D.19088 & 268435456;
  if (D.19089 != 0) goto <D.19090>; else goto <D.19091>;
  <D.19090>:
  image->checked_module_cctor = 1;
  return;
  <D.19091>:
  D.19092 = t->rows;
  D.19093 = (int) D.19092;
  if (D.19093 > 0) goto <D.19094>; else goto <D.19095>;
  <D.19094>:
  {
    guint32 nameidx;
    const char * name;

    nameidx = mono_metadata_decode_row_col (t, 0, 1);
    name = mono_metadata_string_heap (image, nameidx);
    D.19096 = strcmp (name, "<Module>");
    if (D.19096 == 0) goto <D.19097>; else goto <D.19098>;
    <D.19097>:
    {
      guint32 first_method;
      guint32 last_method;

      D.19099 = mono_metadata_decode_row_col (t, 0, 5);
      first_method = D.19099 + 4294967295;
      D.19092 = t->rows;
      D.19093 = (int) D.19092;
      if (D.19093 > 1) goto <D.19100>; else goto <D.19101>;
      <D.19100>:
      D.19102 = mono_metadata_decode_row_col (t, 1, 5);
      last_method = D.19102 + 4294967295;
      goto <D.19103>;
      <D.19101>:
      D.19104 = mt->rows;
      last_method = (guint32) D.19104;
      <D.19103>:
      goto <D.18584>;
      <D.18583>:
      first_method.5 = (int) first_method;
      nameidx = mono_metadata_decode_row_col (mt, first_method.5, 3);
      name = mono_metadata_string_heap (image, nameidx);
      D.19106 = strcmp (name, ".cctor");
      if (D.19106 == 0) goto <D.19107>; else goto <D.19108>;
      <D.19107>:
      image->has_module_cctor = 1;
      image->checked_module_cctor = 1;
      return;
      <D.19108>:
      first_method = first_method + 1;
      <D.18584>:
      if (first_method < last_method) goto <D.18583>; else goto <D.18585>;
      <D.18585>:
    }
    <D.19098>:
  }
  <D.19095>:
  image->has_module_cctor = 0;
  image->checked_module_cctor = 1;
}


__attribute__((__gnu_inline__, nothrow, leaf, pure))
strcmp (const char * __s1, const char * __s2)
{
  int iftmp.6;
  int iftmp.7;
  int D.19118;
  char * __p1;
  char * __p2;
  int __ret;

  __p1 = __s1;
  __p2 = __s2;
  __asm__ __volatile__("   slr   0,0
0: clst  %1,%2
   jo    0b
   ipm   %0
   srl   %0,28" : "=d" __ret, "=&a" __p1, "=&a" __p2 : "1" __p1, "2" __p2 : "0", "memory", "cc");
  if (__ret != 0) goto <D.19111>; else goto <D.19112>;
  <D.19111>:
  if (__ret == 1) goto <D.19114>; else goto <D.19115>;
  <D.19114>:
  iftmp.7 = -1;
  goto <D.19116>;
  <D.19115>:
  iftmp.7 = 1;
  <D.19116>:
  iftmp.6 = iftmp.7;
  goto <D.19117>;
  <D.19112>:
  iftmp.6 = 0;
  <D.19117>:
  __ret = iftmp.6;
  D.19118 = __ret;
  return D.19118;
}


mono_image_load_module (struct MonoImage * image, int idx)
{
  <unnamed-unsigned:1> D.19120;
  unsigned int D.19123;
  unsigned int idx.8;
  struct MonoImage * D.19127;
  gboolean * D.19128;
  long unsigned int D.19129;
  long unsigned int D.19130;
  sizetype D.19131;
  gboolean * D.19132;
  int D.19133;
  struct MonoImage * * D.19136;
  long unsigned int D.19137;
  sizetype D.19138;
  struct MonoImage * * D.19139;
  unsigned int D.19140;
  unsigned int D.19143;
  const char * D.19144;
  <unnamed-unsigned:24> D.19145;
  int D.19146;
  char * D.19147;
  long unsigned int D.19148;
  long unsigned int D.19149;
  _Bool D.19150;
  int D.19151;
  unsigned int D.19152;
  void * D.19153;
  int D.19154;
  struct MonoImage * D.19159;
  struct MonoImage * D.19160;
  struct MonoAssembly * D.19163;
  struct MonoTableInfo * t;
  struct MonoTableInfo * file_table;
  int i;
  char * base_dir;
  gboolean refonly;
  struct GList * list_iter;
  struct GList * valid_modules;
  MonoImageOpenStatus status;

  try
    {
      D.19120 = image->ref_only;
      refonly = (gboolean) D.19120;
      valid_modules = 0B;
      D.19123 = image->module_count;
      if (D.19123 == 0) goto <D.19121>; else goto <D.19124>;
      <D.19124>:
      D.19123 = image->module_count;
      idx.8 = (unsigned int) idx;
      if (D.19123 < idx.8) goto <D.19121>; else goto <D.19126>;
      <D.19126>:
      if (idx <= 0) goto <D.19121>; else goto <D.19122>;
      <D.19121>:
      D.19127 = 0B;
      return D.19127;
      <D.19122>:
      D.19128 = image->modules_loaded;
      D.19129 = (long unsigned int) idx;
      D.19130 = D.19129 * 4;
      D.19131 = D.19130 + 18446744073709551612;
      D.19132 = D.19128 + D.19131;
      D.19133 = *D.19132;
      if (D.19133 != 0) goto <D.19134>; else goto <D.19135>;
      <D.19134>:
      D.19136 = image->modules;
      D.19129 = (long unsigned int) idx;
      D.19137 = D.19129 * 8;
      D.19138 = D.19137 + 18446744073709551608;
      D.19139 = D.19136 + D.19138;
      D.19127 = *D.19139;
      return D.19127;
      <D.19135>:
      file_table = &image->tables[38];
      i = 0;
      goto <D.18605>;
      <D.18604>:
      {
        guint32 cols[3];

        try
          {
            mono_metadata_decode_row (file_table, i, &cols, 3);
            D.19140 = cols[0];
            if (D.19140 == 1) goto <D.19141>; else goto <D.19142>;
            <D.19141>:
            // predicted unlikely by continue predictor.
            goto <D.18603>;
            <D.19142>:
            D.19143 = cols[1];
            D.19144 = mono_metadata_string_heap (image, D.19143);
            valid_modules = monoeg_g_list_prepend (valid_modules, D.19144);
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      <D.18603>:
      i = i + 1;
      <D.18605>:
      D.19145 = file_table->rows;
      D.19146 = (int) D.19145;
      if (D.19146 > i) goto <D.18604>; else goto <D.18606>;
      <D.18606>:
      t = &image->tables[26];
      D.19147 = image->name;
      base_dir = monoeg_g_path_get_dirname (D.19147);
      {
        char * module_ref;
        const char * name;
        guint32 cols[1];
        int valid;

        try
          {
            D.19148 = BIT_FIELD_REF <*file_table, 64, 64>;
            D.19149 = D.19148 & 18446742974197923840;
            D.19150 = D.19149 == 0;
            valid = (int) D.19150;
            D.19151 = idx + -1;
            mono_metadata_decode_row (t, D.19151, &cols, 1);
            D.19152 = cols[0];
            name = mono_metadata_string_heap (image, D.19152);
            list_iter = valid_modules;
            goto <D.18613>;
            <D.18612>:
            D.19153 = list_iter->data;
            D.19154 = strcmp (D.19153, name);
            if (D.19154 == 0) goto <D.19155>; else goto <D.19156>;
            <D.19155>:
            valid = 1;
            goto <D.18611>;
            <D.19156>:
            list_iter = list_iter->next;
            <D.18613>:
            if (list_iter != 0B) goto <D.18612>; else goto <D.18611>;
            <D.18611>:
            if (valid != 0) goto <D.19157>; else goto <D.19158>;
            <D.19157>:
            module_ref = monoeg_g_build_path ("/", base_dir, name, 0B);
            D.19136 = image->modules;
            D.19129 = (long unsigned int) idx;
            D.19137 = D.19129 * 8;
            D.19138 = D.19137 + 18446744073709551608;
            D.19139 = D.19136 + D.19138;
            D.19159 = mono_image_open_full (module_ref, &status, refonly);
            *D.19139 = D.19159;
            D.19136 = image->modules;
            D.19129 = (long unsigned int) idx;
            D.19137 = D.19129 * 8;
            D.19138 = D.19137 + 18446744073709551608;
            D.19139 = D.19136 + D.19138;
            D.19160 = *D.19139;
            if (D.19160 != 0B) goto <D.19161>; else goto <D.19162>;
            <D.19161>:
            D.19136 = image->modules;
            D.19129 = (long unsigned int) idx;
            D.19137 = D.19129 * 8;
            D.19138 = D.19137 + 18446744073709551608;
            D.19139 = D.19136 + D.19138;
            D.19160 = *D.19139;
            mono_image_addref (D.19160);
            D.19136 = image->modules;
            D.19129 = (long unsigned int) idx;
            D.19137 = D.19129 * 8;
            D.19138 = D.19137 + 18446744073709551608;
            D.19139 = D.19136 + D.19138;
            D.19160 = *D.19139;
            D.19163 = image->assembly;
            D.19160->assembly = D.19163;
            <D.19162>:
            monoeg_g_free (module_ref);
            <D.19158>:
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      D.19128 = image->modules_loaded;
      D.19129 = (long unsigned int) idx;
      D.19130 = D.19129 * 4;
      D.19131 = D.19130 + 18446744073709551612;
      D.19132 = D.19128 + D.19131;
      *D.19132 = 1;
      monoeg_g_free (base_dir);
      monoeg_g_list_free (valid_modules);
      D.19136 = image->modules;
      D.19129 = (long unsigned int) idx;
      D.19137 = D.19129 * 8;
      D.19138 = D.19137 + 18446744073709551608;
      D.19139 = D.19136 + D.19138;
      D.19127 = *D.19139;
      return D.19127;
    }
  finally
    {
      status = {CLOBBER};
    }
}


mono_image_init (struct MonoImage * image)
{
  struct MonoMemPool * D.19168;
  struct MonoInternalHashTable * D.19169;
  struct GHashTable * D.19170;
  struct GHashTable * D.19171;
  struct GHashTable * D.19172;
  struct GHashTable * D.19173;
  struct GHashTable * D.19174;
  struct MonoPropertyHash * D.19175;
  struct CRITICAL_SECTION * D.19176;
  struct CRITICAL_SECTION * D.19177;

  D.19168 = mono_mempool_new_size (512);
  image->mempool = D.19168;
  D.19169 = &image->class_cache;
  mono_internal_hash_table_init (D.19169, monoeg_g_direct_hash, class_key_extract, class_next_value);
  D.19170 = monoeg_g_hash_table_new (0B, 0B);
  image->field_cache = D.19170;
  D.19171 = monoeg_g_hash_table_new (0B, 0B);
  image->typespec_cache = D.19171;
  D.19172 = monoeg_g_hash_table_new (0B, 0B);
  image->memberref_signatures = D.19172;
  D.19173 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  image->helper_signatures = D.19173;
  D.19174 = monoeg_g_hash_table_new (0B, 0B);
  image->method_signatures = D.19174;
  D.19175 = mono_property_hash_new ();
  image->property_hash = D.19175;
  D.19176 = &image->lock;
  InitializeCriticalSection (D.19176);
  D.19177 = &image->szarray_cache_lock;
  InitializeCriticalSection (D.19177);
}


class_next_value (void * value)
{
  void * * D.19178;
  struct MonoClass * class;

  class = value;
  D.19178 = &class->next_class_cache;
  return D.19178;
}


class_key_extract (void * value)
{
  void * D.19180;
  unsigned int D.19181;
  long unsigned int D.19182;
  struct MonoClass * class;

  class = value;
  D.19181 = class->type_token;
  D.19182 = (long unsigned int) D.19181;
  D.19180 = (void *) D.19182;
  return D.19180;
}


__attribute__((visibility ("hidden")))
mono_image_load_pe_data (struct MonoImage * image)
{
  long unsigned int D.19184;
  long unsigned int D.19185;
  unsigned int D.19186;
  long unsigned int D.19187;
  char * D.19189;
  sizetype D.19190;
  char * D.19191;
  unsigned int D.19192;
  unsigned int D.19193;
  unsigned int D.19195;
  unsigned int D.19196;
  unsigned int D.19197;
  unsigned int D.19198;
  unsigned int D.19199;
  unsigned int D.19200;
  unsigned int D.19201;
  unsigned int D.19202;
  unsigned int D.19203;
  unsigned int D.19204;
  unsigned int offset.9;
  int D.19207;
  gboolean D.19209;
  struct MonoCLIImageInfo * iinfo;
  struct MonoDotNetHeader * header;
  struct MonoMSDOSHeader msdos;
  gint32 offset;
  void invalid_image = <<< error >>>;

  try
    {
      offset = 0;
      iinfo = image->image_info;
      header = &iinfo->cli_header;
      D.19184 = (long unsigned int) offset;
      D.19185 = D.19184 + 128;
      D.19186 = image->raw_data_len;
      D.19187 = (long unsigned int) D.19186;
      if (D.19185 > D.19187) goto invalid_image; else goto <D.19188>;
      <D.19188>:
      D.19189 = image->raw_data;
      D.19190 = (sizetype) offset;
      D.19191 = D.19189 + D.19190;
      memcpy (&msdos, D.19191, 128);
      D.19192 = BIT_FIELD_REF <MEM[(void *)&msdos], 32, 0>;
      D.19193 = D.19192 & 4294901760;
      if (D.19193 != 1297743872) goto invalid_image; else goto <D.19194>;
      <D.19194>:
      D.19195 = msdos.pe_offset;
      D.19196 = D.19195 << 24;
      D.19195 = msdos.pe_offset;
      D.19197 = D.19195 >> 8;
      D.19198 = D.19197 & 65280;
      D.19199 = D.19196 | D.19198;
      D.19195 = msdos.pe_offset;
      D.19200 = D.19195 << 8;
      D.19201 = D.19200 & 16711680;
      D.19202 = D.19199 | D.19201;
      D.19195 = msdos.pe_offset;
      D.19203 = D.19195 >> 24;
      D.19204 = D.19202 | D.19203;
      msdos.pe_offset = D.19204;
      D.19195 = msdos.pe_offset;
      offset = (gint32) D.19195;
      offset = do_load_header (image, header, offset);
      if (offset < 0) goto invalid_image; else goto <D.19205>;
      <D.19205>:
      offset.9 = (unsigned int) offset;
      D.19207 = load_section_tables (image, iinfo, offset.9);
      if (D.19207 == 0) goto invalid_image; else goto <D.19208>;
      <D.19208>:
      D.19209 = 1;
      return D.19209;
      invalid_image:
      D.19209 = 0;
      return D.19209;
    }
  finally
    {
      msdos = {CLOBBER};
    }
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.19212;
  long unsigned int D.19213;

  D.19213 = __builtin_object_size (__dest, 0);
  D.19212 = __builtin___memcpy_chk (__dest, __src, __len, D.19213);
  return D.19212;
}


do_load_header (struct MonoImage * image, struct MonoDotNetHeader * header, int offset)
{
  long unsigned int D.19215;
  long unsigned int D.19216;
  unsigned int D.19217;
  long unsigned int D.19218;
  int D.19221;
  char * D.19222;
  sizetype D.19223;
  char * D.19224;
  unsigned int D.19225;
  unsigned int D.19226;
  unsigned int D.19229;
  unsigned int D.19230;
  unsigned int D.19231;
  unsigned int D.19232;
  unsigned int D.19233;
  unsigned int D.19234;
  unsigned int D.19235;
  unsigned int D.19236;
  unsigned int D.19237;
  unsigned int D.19238;
  unsigned int D.19239;
  unsigned int D.19240;
  unsigned int D.19241;
  unsigned int D.19242;
  unsigned int D.19243;
  unsigned int D.19244;
  unsigned int D.19245;
  unsigned int D.19246;
  unsigned int D.19247;
  unsigned int D.19248;
  unsigned int D.19249;
  unsigned int D.19250;
  unsigned int D.19251;
  unsigned int D.19252;
  unsigned int D.19253;
  unsigned int D.19254;
  unsigned int D.19255;
  unsigned int D.19256;
  unsigned int D.19257;
  unsigned int D.19258;
  short unsigned int D.19259;
  short unsigned int D.19260;
  signed short D.19261;
  int D.19262;
  int D.19263;
  signed short D.19264;
  signed short D.19265;
  short unsigned int D.19266;
  short unsigned int D.19267;
  short unsigned int D.19268;
  signed short D.19269;
  int D.19270;
  int D.19271;
  signed short D.19272;
  signed short D.19273;
  short unsigned int D.19274;
  short unsigned int D.19275;
  short unsigned int D.19276;
  signed short D.19277;
  int D.19278;
  int D.19279;
  signed short D.19280;
  signed short D.19281;
  short unsigned int D.19282;
  short unsigned int D.19283;
  short unsigned int D.19284;
  signed short D.19285;
  int D.19286;
  int D.19287;
  signed short D.19288;
  signed short D.19289;
  short unsigned int D.19290;
  unsigned int D.19291;
  unsigned int D.19292;
  unsigned int D.19293;
  unsigned int D.19294;
  unsigned int D.19295;
  unsigned int D.19296;
  unsigned int D.19297;
  unsigned int D.19298;
  unsigned int D.19299;
  unsigned int D.19300;
  unsigned int D.19301;
  unsigned int D.19302;
  unsigned int D.19303;
  unsigned int D.19304;
  unsigned int D.19305;
  unsigned int D.19306;
  unsigned int D.19307;
  unsigned int D.19308;
  unsigned int D.19309;
  unsigned int D.19310;
  unsigned int D.19311;
  unsigned int D.19312;
  unsigned int D.19313;
  unsigned int D.19314;
  unsigned int D.19315;
  unsigned int D.19316;
  unsigned int D.19317;
  unsigned int D.19318;
  unsigned int D.19319;
  unsigned int D.19320;
  unsigned int D.19321;
  unsigned int D.19322;
  unsigned int D.19323;
  unsigned int D.19324;
  unsigned int D.19325;
  unsigned int D.19326;
  unsigned int D.19327;
  unsigned int D.19328;
  unsigned int D.19329;
  unsigned int D.19330;
  unsigned int D.19331;
  unsigned int D.19332;
  unsigned int D.19333;
  unsigned int D.19334;
  unsigned int D.19335;
  unsigned int D.19336;
  unsigned int D.19337;
  unsigned int D.19338;
  unsigned int D.19339;
  unsigned int D.19340;
  short unsigned int D.19341;
  short unsigned int D.19342;
  signed short D.19343;
  int D.19344;
  int D.19345;
  signed short D.19346;
  signed short D.19347;
  short unsigned int D.19348;
  unsigned int offset.10;
  unsigned int D.19352;
  unsigned int D.19353;
  unsigned int D.19354;
  unsigned int D.19355;
  unsigned int D.19356;
  unsigned int D.19357;
  unsigned int D.19358;
  unsigned int D.19359;
  unsigned int D.19360;
  unsigned int D.19361;
  unsigned int D.19362;
  unsigned int D.19365;
  unsigned int D.19366;
  unsigned int D.19367;
  unsigned int D.19368;
  unsigned int D.19369;
  unsigned int D.19370;
  unsigned int D.19371;
  unsigned int D.19372;
  unsigned int D.19373;
  unsigned int D.19374;
  unsigned int D.19375;
  unsigned int D.19376;
  unsigned int D.19377;
  unsigned int D.19378;
  unsigned int D.19379;
  unsigned int D.19380;
  unsigned int D.19381;
  unsigned int D.19382;
  unsigned int D.19383;
  unsigned int D.19384;
  unsigned int D.19385;
  unsigned int D.19386;
  unsigned int D.19387;
  unsigned int D.19388;
  unsigned int D.19389;
  unsigned int D.19390;
  unsigned int D.19391;
  unsigned int D.19392;
  unsigned int D.19393;
  unsigned int D.19394;
  unsigned int D.19395;
  unsigned int D.19396;
  unsigned int D.19397;
  unsigned int D.19398;
  unsigned int D.19399;
  unsigned int D.19400;
  unsigned int D.19401;
  unsigned int D.19402;
  unsigned int D.19403;
  unsigned int D.19404;
  unsigned int D.19405;
  unsigned int D.19406;
  unsigned int D.19407;
  unsigned int D.19408;
  unsigned int D.19409;
  unsigned int D.19410;
  unsigned int D.19411;
  unsigned int D.19412;
  unsigned int D.19413;
  unsigned int D.19414;
  unsigned int D.19420;
  long unsigned int D.19421;
  unsigned int D.19422;
  unsigned int D.19423;
  unsigned int D.19424;
  unsigned int D.19425;
  unsigned int D.19426;
  unsigned int D.19427;
  unsigned int D.19428;
  unsigned int D.19429;
  unsigned int D.19430;
  unsigned int D.19431;
  long unsigned int D.19432;
  long unsigned int D.19433;
  long unsigned int D.19434;
  unsigned int D.19435;
  unsigned int D.19436;
  unsigned int D.19437;
  unsigned int D.19438;
  unsigned int D.19439;
  unsigned int D.19440;
  unsigned int D.19441;
  unsigned int D.19442;
  unsigned int D.19443;
  unsigned int D.19444;
  long unsigned int D.19445;
  long unsigned int D.19446;
  unsigned int D.19447;
  long unsigned int D.19448;
  unsigned int D.19449;
  unsigned int D.19450;
  unsigned int D.19451;
  unsigned int D.19452;
  unsigned int D.19453;
  unsigned int D.19454;
  unsigned int D.19455;
  unsigned int D.19456;
  unsigned int D.19457;
  unsigned int D.19458;
  long unsigned int D.19459;
  long unsigned int D.19460;
  long unsigned int D.19461;
  unsigned int D.19462;
  unsigned int D.19463;
  unsigned int D.19464;
  unsigned int D.19465;
  unsigned int D.19466;
  unsigned int D.19467;
  unsigned int D.19468;
  unsigned int D.19469;
  unsigned int D.19470;
  unsigned int D.19471;
  long unsigned int D.19472;
  long unsigned int D.19473;
  unsigned int D.19474;
  long unsigned int D.19475;
  unsigned int D.19476;
  unsigned int D.19477;
  unsigned int D.19478;
  unsigned int D.19479;
  unsigned int D.19480;
  unsigned int D.19481;
  unsigned int D.19482;
  unsigned int D.19483;
  unsigned int D.19484;
  unsigned int D.19485;
  long unsigned int D.19486;
  long unsigned int D.19487;
  long unsigned int D.19488;
  unsigned int D.19489;
  unsigned int D.19490;
  unsigned int D.19491;
  unsigned int D.19492;
  unsigned int D.19493;
  unsigned int D.19494;
  unsigned int D.19495;
  unsigned int D.19496;
  unsigned int D.19497;
  unsigned int D.19498;
  long unsigned int D.19499;
  long unsigned int D.19500;
  unsigned int D.19501;
  long unsigned int D.19502;
  unsigned int D.19503;
  unsigned int D.19504;
  unsigned int D.19505;
  unsigned int D.19506;
  unsigned int D.19507;
  unsigned int D.19508;
  unsigned int D.19509;
  unsigned int D.19510;
  unsigned int D.19511;
  unsigned int D.19512;
  long unsigned int D.19513;
  long unsigned int D.19514;
  long unsigned int D.19515;
  unsigned int D.19516;
  unsigned int D.19517;
  unsigned int D.19518;
  unsigned int D.19519;
  unsigned int D.19520;
  unsigned int D.19521;
  unsigned int D.19522;
  unsigned int D.19523;
  unsigned int D.19524;
  unsigned int D.19525;
  long unsigned int D.19526;
  long unsigned int D.19527;
  unsigned int D.19528;
  long unsigned int D.19529;
  unsigned int D.19530;
  unsigned int D.19531;
  unsigned int D.19532;
  unsigned int D.19533;
  unsigned int D.19534;
  unsigned int D.19535;
  unsigned int D.19536;
  unsigned int D.19537;
  unsigned int D.19538;
  unsigned int D.19539;
  long unsigned int D.19540;
  long unsigned int D.19541;
  long unsigned int D.19542;
  unsigned int D.19543;
  unsigned int D.19544;
  unsigned int D.19545;
  unsigned int D.19546;
  unsigned int D.19547;
  unsigned int D.19548;
  unsigned int D.19549;
  unsigned int D.19550;
  unsigned int D.19551;
  unsigned int D.19552;
  long unsigned int D.19553;
  long unsigned int D.19554;
  unsigned int D.19555;
  unsigned int D.19556;
  unsigned int D.19557;
  short unsigned int D.19558;
  short unsigned int D.19559;
  short unsigned int D.19560;
  short unsigned int D.19561;
  short unsigned int D.19562;
  short unsigned int D.19563;
  unsigned int D.19564;
  unsigned int D.19565;
  unsigned int D.19566;
  unsigned int D.19567;
  short unsigned int D.19568;
  short unsigned int D.19569;
  unsigned int D.19570;
  unsigned int D.19571;
  struct MonoPEDatadir * D.19572;
  unsigned int D.19574;
  unsigned int D.19575;
  unsigned int D.19576;
  unsigned int D.19577;
  unsigned int D.19578;
  unsigned int D.19579;
  unsigned int D.19580;
  unsigned int D.19581;
  unsigned int D.19582;
  unsigned int D.19583;
  unsigned int D.19584;
  unsigned int D.19585;
  unsigned int D.19586;
  unsigned int D.19587;
  unsigned int D.19588;
  unsigned int D.19589;
  unsigned int D.19590;
  unsigned int D.19591;
  unsigned int D.19592;
  unsigned int D.19593;
  short unsigned int D.19594;
  short unsigned int D.19595;
  signed short D.19596;
  int D.19597;
  int D.19598;
  signed short D.19599;
  signed short D.19600;
  short unsigned int D.19601;
  short unsigned int D.19602;
  short unsigned int D.19603;
  signed short D.19604;
  int D.19605;
  int D.19606;
  signed short D.19607;
  signed short D.19608;
  short unsigned int D.19609;
  short unsigned int D.19610;
  short unsigned int D.19611;
  signed short D.19612;
  int D.19613;
  int D.19614;
  signed short D.19615;
  signed short D.19616;
  short unsigned int D.19617;
  short unsigned int D.19618;
  short unsigned int D.19619;
  signed short D.19620;
  int D.19621;
  int D.19622;
  signed short D.19623;
  signed short D.19624;
  short unsigned int D.19625;
  short unsigned int D.19626;
  short unsigned int D.19627;
  signed short D.19628;
  int D.19629;
  int D.19630;
  signed short D.19631;
  signed short D.19632;
  short unsigned int D.19633;
  short unsigned int D.19634;
  short unsigned int D.19635;
  signed short D.19636;
  int D.19637;
  int D.19638;
  signed short D.19639;
  signed short D.19640;
  short unsigned int D.19641;
  unsigned int D.19642;
  unsigned int D.19643;
  unsigned int D.19644;
  unsigned int D.19645;
  unsigned int D.19646;
  unsigned int D.19647;
  unsigned int D.19648;
  unsigned int D.19649;
  unsigned int D.19650;
  unsigned int D.19651;
  unsigned int D.19652;
  unsigned int D.19653;
  unsigned int D.19654;
  unsigned int D.19655;
  unsigned int D.19656;
  unsigned int D.19657;
  unsigned int D.19658;
  unsigned int D.19659;
  unsigned int D.19660;
  unsigned int D.19661;
  unsigned int D.19662;
  unsigned int D.19663;
  unsigned int D.19664;
  unsigned int D.19665;
  unsigned int D.19666;
  unsigned int D.19667;
  unsigned int D.19668;
  unsigned int D.19669;
  unsigned int D.19670;
  unsigned int D.19671;
  unsigned int D.19672;
  unsigned int D.19673;
  unsigned int D.19674;
  unsigned int D.19675;
  unsigned int D.19676;
  unsigned int D.19677;
  unsigned int D.19678;
  unsigned int D.19679;
  unsigned int D.19680;
  unsigned int D.19681;
  short unsigned int D.19682;
  short unsigned int D.19683;
  signed short D.19684;
  int D.19685;
  int D.19686;
  signed short D.19687;
  signed short D.19688;
  short unsigned int D.19689;
  short unsigned int D.19690;
  short unsigned int D.19691;
  signed short D.19692;
  int D.19693;
  int D.19694;
  signed short D.19695;
  signed short D.19696;
  short unsigned int D.19697;
  unsigned int D.19698;
  unsigned int D.19699;
  unsigned int D.19700;
  unsigned int D.19701;
  unsigned int D.19702;
  unsigned int D.19703;
  unsigned int D.19704;
  unsigned int D.19705;
  unsigned int D.19706;
  unsigned int D.19707;
  unsigned int D.19708;
  unsigned int D.19709;
  unsigned int D.19710;
  unsigned int D.19711;
  unsigned int D.19712;
  unsigned int D.19713;
  unsigned int D.19714;
  unsigned int D.19715;
  unsigned int D.19716;
  unsigned int D.19717;
  unsigned int D.19718;
  unsigned int D.19719;
  unsigned int D.19720;
  unsigned int D.19721;
  unsigned int D.19722;
  unsigned int D.19723;
  unsigned int D.19724;
  unsigned int D.19725;
  unsigned int D.19726;
  unsigned int D.19727;
  unsigned int D.19728;
  unsigned int D.19729;
  unsigned int D.19730;
  unsigned int D.19731;
  unsigned int D.19732;
  unsigned int D.19733;
  unsigned int D.19734;
  unsigned int D.19735;
  unsigned int D.19736;
  unsigned int D.19737;
  unsigned int D.19738;
  unsigned int D.19739;
  unsigned int D.19740;
  unsigned int D.19741;
  unsigned int D.19742;
  unsigned int D.19743;
  unsigned int D.19744;
  unsigned int D.19745;
  unsigned int D.19746;
  unsigned int D.19747;
  unsigned int D.19748;
  unsigned int D.19749;
  unsigned int D.19750;
  unsigned int D.19751;
  unsigned int D.19752;
  unsigned int D.19753;
  unsigned int D.19754;
  unsigned int D.19755;
  unsigned int D.19756;
  unsigned int D.19757;
  unsigned int D.19758;
  unsigned int D.19759;
  unsigned int D.19760;
  unsigned int D.19761;
  unsigned int D.19762;
  unsigned int D.19763;
  unsigned int D.19764;
  unsigned int D.19765;
  unsigned int D.19766;
  unsigned int D.19767;
  unsigned int D.19768;
  unsigned int D.19769;
  unsigned int D.19770;
  unsigned int D.19771;
  unsigned int D.19772;
  unsigned int D.19773;
  unsigned int D.19774;
  unsigned int D.19775;
  unsigned int D.19776;
  unsigned int D.19777;
  unsigned int D.19778;
  unsigned int D.19779;
  unsigned int D.19780;
  unsigned int D.19781;
  unsigned int D.19782;
  unsigned int D.19783;
  unsigned int D.19784;
  unsigned int D.19785;
  unsigned int D.19786;
  unsigned int D.19787;
  unsigned int D.19788;
  unsigned int D.19789;
  unsigned int D.19790;
  unsigned int D.19791;
  unsigned int D.19792;
  unsigned int D.19793;
  unsigned int D.19794;
  unsigned int D.19795;
  unsigned int D.19796;
  unsigned int D.19797;
  unsigned int D.19798;
  unsigned int D.19799;
  unsigned int D.19800;
  unsigned int D.19801;
  unsigned int D.19802;
  unsigned int D.19803;
  unsigned int D.19804;
  unsigned int D.19805;
  unsigned int D.19806;
  unsigned int D.19807;
  unsigned int D.19808;
  unsigned int D.19809;
  unsigned int D.19810;
  unsigned int D.19811;
  unsigned int D.19812;
  unsigned int D.19813;
  unsigned int D.19814;
  unsigned int D.19815;
  unsigned int D.19816;
  unsigned int D.19817;
  unsigned int D.19818;
  unsigned int D.19819;
  unsigned int D.19820;
  unsigned int D.19821;
  unsigned int D.19822;
  unsigned int D.19823;
  unsigned int D.19824;
  unsigned int D.19825;
  unsigned int D.19826;
  unsigned int D.19827;
  unsigned int D.19828;
  unsigned int D.19829;
  unsigned int D.19830;
  unsigned int D.19831;
  unsigned int D.19832;
  unsigned int D.19833;
  unsigned int D.19834;
  unsigned int D.19835;
  unsigned int D.19836;
  unsigned int D.19837;
  unsigned int D.19838;
  unsigned int D.19839;
  unsigned int D.19840;
  unsigned int D.19841;
  unsigned int D.19842;
  unsigned int D.19843;
  unsigned int D.19844;
  unsigned int D.19845;
  unsigned int D.19846;
  unsigned int D.19847;
  unsigned int D.19848;
  unsigned int D.19849;
  unsigned int D.19850;
  unsigned int D.19851;
  unsigned int D.19852;
  unsigned int D.19853;
  unsigned int D.19854;
  unsigned int D.19855;
  unsigned int D.19856;
  unsigned int D.19857;
  unsigned int D.19858;
  unsigned int D.19859;
  unsigned int D.19860;
  unsigned int D.19861;
  unsigned int D.19862;
  unsigned int D.19863;
  unsigned int D.19864;
  unsigned int D.19865;
  unsigned int D.19866;
  unsigned int D.19867;
  unsigned int D.19868;
  unsigned int D.19869;
  unsigned int D.19870;
  unsigned int D.19871;
  unsigned int D.19872;
  unsigned int D.19873;
  unsigned int D.19874;
  unsigned int D.19875;
  unsigned int D.19876;
  unsigned int D.19877;
  unsigned int D.19878;
  unsigned int D.19879;
  unsigned int D.19880;
  unsigned int D.19881;
  unsigned int D.19882;
  unsigned int D.19883;
  unsigned int D.19884;
  unsigned int D.19885;
  unsigned int D.19886;
  unsigned int D.19887;
  unsigned int D.19888;
  unsigned int D.19889;
  unsigned int D.19890;
  unsigned int D.19891;
  unsigned int D.19892;
  unsigned int D.19893;
  unsigned int D.19894;
  unsigned int D.19895;
  unsigned int D.19896;
  unsigned int D.19897;
  unsigned int D.19898;
  unsigned int D.19899;
  unsigned int D.19900;
  unsigned int D.19901;
  unsigned int D.19902;
  unsigned int D.19903;
  unsigned int D.19904;
  unsigned int D.19905;
  unsigned int D.19906;
  unsigned int D.19907;
  unsigned int D.19908;
  unsigned int D.19909;
  unsigned int D.19910;
  unsigned int D.19911;
  unsigned int D.19912;
  unsigned int D.19913;
  unsigned int D.19914;
  unsigned int D.19915;
  unsigned int D.19916;
  unsigned int D.19917;
  unsigned int D.19918;
  unsigned int D.19919;
  unsigned int D.19920;
  unsigned int D.19921;
  unsigned int D.19922;
  unsigned int D.19923;
  unsigned int D.19924;
  unsigned int D.19925;
  unsigned int D.19926;
  unsigned int D.19927;
  unsigned int D.19928;
  unsigned int D.19929;
  unsigned int D.19930;
  unsigned int D.19931;
  unsigned int D.19932;
  unsigned int D.19933;
  unsigned int D.19934;
  unsigned int D.19935;
  unsigned int D.19936;
  unsigned int D.19937;
  unsigned int D.19938;
  unsigned int D.19939;
  unsigned int D.19940;
  unsigned int D.19941;
  unsigned int D.19942;
  unsigned int D.19943;
  unsigned int D.19944;
  unsigned int D.19945;
  unsigned int D.19946;
  unsigned int D.19947;
  unsigned int D.19948;
  unsigned int D.19949;
  unsigned int D.19950;
  unsigned int D.19951;
  unsigned int D.19952;
  unsigned int D.19953;
  unsigned int D.19954;
  unsigned int D.19955;
  unsigned int D.19956;
  unsigned int D.19957;
  unsigned int D.19958;
  unsigned int D.19959;
  unsigned int D.19960;
  unsigned int D.19961;
  unsigned int D.19962;
  unsigned int D.19963;
  unsigned int D.19964;
  unsigned int D.19965;
  unsigned int D.19966;
  unsigned int D.19967;
  unsigned int D.19968;
  unsigned int D.19969;
  unsigned int D.19970;
  unsigned int D.19971;
  unsigned int D.19972;
  unsigned int D.19973;
  unsigned int D.19974;
  unsigned int D.19975;
  unsigned int D.19976;
  unsigned int D.19977;
  unsigned int D.19978;
  unsigned int D.19979;
  unsigned int D.19980;
  unsigned int D.19981;
  unsigned int D.19982;
  unsigned int D.19983;
  unsigned int D.19984;
  unsigned int D.19985;
  unsigned int D.19986;
  unsigned int D.19987;
  unsigned int D.19988;
  unsigned int D.19989;
  unsigned int D.19990;
  unsigned int D.19991;
  unsigned int D.19992;
  unsigned int D.19993;
  unsigned int D.19994;
  unsigned int D.19995;
  unsigned int D.19996;
  unsigned int D.19997;
  unsigned int D.19998;
  unsigned int D.19999;
  unsigned int D.20000;
  unsigned int D.20001;
  unsigned int D.20002;
  unsigned int D.20003;
  unsigned int D.20004;
  unsigned int D.20005;
  unsigned int D.20006;
  unsigned int D.20007;
  unsigned int D.20008;
  unsigned int D.20009;
  unsigned int D.20010;
  unsigned int D.20011;
  unsigned int D.20012;
  unsigned int D.20013;
  unsigned int D.20014;
  unsigned int D.20015;
  unsigned int D.20016;
  unsigned int D.20017;
  unsigned int D.20018;
  unsigned int D.20019;
  unsigned int D.20020;
  unsigned int D.20021;
  unsigned int D.20022;
  unsigned int D.20023;
  unsigned int D.20024;
  unsigned int D.20025;
  unsigned int D.20026;
  unsigned int D.20027;
  unsigned int D.20028;
  unsigned int D.20029;
  unsigned int D.20030;
  unsigned int D.20031;
  unsigned int D.20032;
  unsigned int D.20033;
  unsigned int D.20034;
  unsigned int D.20035;
  unsigned int D.20036;
  unsigned int D.20037;
  struct MonoDotNetHeader64 header64;

  try
    {
      D.19215 = (long unsigned int) offset;
      D.19216 = D.19215 + 248;
      D.19217 = image->raw_data_len;
      D.19218 = (long unsigned int) D.19217;
      if (D.19216 > D.19218) goto <D.19219>; else goto <D.19220>;
      <D.19219>:
      D.19221 = -1;
      return D.19221;
      <D.19220>:
      D.19222 = image->raw_data;
      D.19223 = (sizetype) offset;
      D.19224 = D.19222 + D.19223;
      memcpy (header, D.19224, 248);
      D.19225 = BIT_FIELD_REF <MEM[(void *)header], 32, 0>;
      D.19226 = D.19225 & 4294901760;
      if (D.19226 != 1346699264) goto <D.19227>; else goto <D.19228>;
      <D.19227>:
      D.19221 = -1;
      return D.19221;
      <D.19228>:
      D.19229 = header->coff.coff_time;
      D.19230 = D.19229 << 24;
      D.19229 = header->coff.coff_time;
      D.19231 = D.19229 >> 8;
      D.19232 = D.19231 & 65280;
      D.19233 = D.19230 | D.19232;
      D.19229 = header->coff.coff_time;
      D.19234 = D.19229 << 8;
      D.19235 = D.19234 & 16711680;
      D.19236 = D.19233 | D.19235;
      D.19229 = header->coff.coff_time;
      D.19237 = D.19229 >> 24;
      D.19238 = D.19236 | D.19237;
      header->coff.coff_time = D.19238;
      D.19239 = header->coff.coff_symptr;
      D.19240 = D.19239 << 24;
      D.19239 = header->coff.coff_symptr;
      D.19241 = D.19239 >> 8;
      D.19242 = D.19241 & 65280;
      D.19243 = D.19240 | D.19242;
      D.19239 = header->coff.coff_symptr;
      D.19244 = D.19239 << 8;
      D.19245 = D.19244 & 16711680;
      D.19246 = D.19243 | D.19245;
      D.19239 = header->coff.coff_symptr;
      D.19247 = D.19239 >> 24;
      D.19248 = D.19246 | D.19247;
      header->coff.coff_symptr = D.19248;
      D.19249 = header->coff.coff_symcount;
      D.19250 = D.19249 << 24;
      D.19249 = header->coff.coff_symcount;
      D.19251 = D.19249 >> 8;
      D.19252 = D.19251 & 65280;
      D.19253 = D.19250 | D.19252;
      D.19249 = header->coff.coff_symcount;
      D.19254 = D.19249 << 8;
      D.19255 = D.19254 & 16711680;
      D.19256 = D.19253 | D.19255;
      D.19249 = header->coff.coff_symcount;
      D.19257 = D.19249 >> 24;
      D.19258 = D.19256 | D.19257;
      header->coff.coff_symcount = D.19258;
      D.19259 = header->coff.coff_machine;
      D.19260 = D.19259 >> 8;
      D.19261 = (signed short) D.19260;
      D.19259 = header->coff.coff_machine;
      D.19262 = (int) D.19259;
      D.19263 = D.19262 << 8;
      D.19264 = (signed short) D.19263;
      D.19265 = D.19261 | D.19264;
      D.19266 = (short unsigned int) D.19265;
      header->coff.coff_machine = D.19266;
      D.19267 = header->coff.coff_sections;
      D.19268 = D.19267 >> 8;
      D.19269 = (signed short) D.19268;
      D.19267 = header->coff.coff_sections;
      D.19270 = (int) D.19267;
      D.19271 = D.19270 << 8;
      D.19272 = (signed short) D.19271;
      D.19273 = D.19269 | D.19272;
      D.19274 = (short unsigned int) D.19273;
      header->coff.coff_sections = D.19274;
      D.19275 = header->coff.coff_opt_header_size;
      D.19276 = D.19275 >> 8;
      D.19277 = (signed short) D.19276;
      D.19275 = header->coff.coff_opt_header_size;
      D.19278 = (int) D.19275;
      D.19279 = D.19278 << 8;
      D.19280 = (signed short) D.19279;
      D.19281 = D.19277 | D.19280;
      D.19282 = (short unsigned int) D.19281;
      header->coff.coff_opt_header_size = D.19282;
      D.19283 = header->coff.coff_attributes;
      D.19284 = D.19283 >> 8;
      D.19285 = (signed short) D.19284;
      D.19283 = header->coff.coff_attributes;
      D.19286 = (int) D.19283;
      D.19287 = D.19286 << 8;
      D.19288 = (signed short) D.19287;
      D.19289 = D.19285 | D.19288;
      D.19290 = (short unsigned int) D.19289;
      header->coff.coff_attributes = D.19290;
      D.19291 = header->pe.pe_code_size;
      D.19292 = D.19291 << 24;
      D.19291 = header->pe.pe_code_size;
      D.19293 = D.19291 >> 8;
      D.19294 = D.19293 & 65280;
      D.19295 = D.19292 | D.19294;
      D.19291 = header->pe.pe_code_size;
      D.19296 = D.19291 << 8;
      D.19297 = D.19296 & 16711680;
      D.19298 = D.19295 | D.19297;
      D.19291 = header->pe.pe_code_size;
      D.19299 = D.19291 >> 24;
      D.19300 = D.19298 | D.19299;
      header->pe.pe_code_size = D.19300;
      D.19301 = header->pe.pe_uninit_data_size;
      D.19302 = D.19301 << 24;
      D.19301 = header->pe.pe_uninit_data_size;
      D.19303 = D.19301 >> 8;
      D.19304 = D.19303 & 65280;
      D.19305 = D.19302 | D.19304;
      D.19301 = header->pe.pe_uninit_data_size;
      D.19306 = D.19301 << 8;
      D.19307 = D.19306 & 16711680;
      D.19308 = D.19305 | D.19307;
      D.19301 = header->pe.pe_uninit_data_size;
      D.19309 = D.19301 >> 24;
      D.19310 = D.19308 | D.19309;
      header->pe.pe_uninit_data_size = D.19310;
      D.19311 = header->pe.pe_rva_entry_point;
      D.19312 = D.19311 << 24;
      D.19311 = header->pe.pe_rva_entry_point;
      D.19313 = D.19311 >> 8;
      D.19314 = D.19313 & 65280;
      D.19315 = D.19312 | D.19314;
      D.19311 = header->pe.pe_rva_entry_point;
      D.19316 = D.19311 << 8;
      D.19317 = D.19316 & 16711680;
      D.19318 = D.19315 | D.19317;
      D.19311 = header->pe.pe_rva_entry_point;
      D.19319 = D.19311 >> 24;
      D.19320 = D.19318 | D.19319;
      header->pe.pe_rva_entry_point = D.19320;
      D.19321 = header->pe.pe_rva_code_base;
      D.19322 = D.19321 << 24;
      D.19321 = header->pe.pe_rva_code_base;
      D.19323 = D.19321 >> 8;
      D.19324 = D.19323 & 65280;
      D.19325 = D.19322 | D.19324;
      D.19321 = header->pe.pe_rva_code_base;
      D.19326 = D.19321 << 8;
      D.19327 = D.19326 & 16711680;
      D.19328 = D.19325 | D.19327;
      D.19321 = header->pe.pe_rva_code_base;
      D.19329 = D.19321 >> 24;
      D.19330 = D.19328 | D.19329;
      header->pe.pe_rva_code_base = D.19330;
      D.19331 = header->pe.pe_rva_data_base;
      D.19332 = D.19331 << 24;
      D.19331 = header->pe.pe_rva_data_base;
      D.19333 = D.19331 >> 8;
      D.19334 = D.19333 & 65280;
      D.19335 = D.19332 | D.19334;
      D.19331 = header->pe.pe_rva_data_base;
      D.19336 = D.19331 << 8;
      D.19337 = D.19336 & 16711680;
      D.19338 = D.19335 | D.19337;
      D.19331 = header->pe.pe_rva_data_base;
      D.19339 = D.19331 >> 24;
      D.19340 = D.19338 | D.19339;
      header->pe.pe_rva_data_base = D.19340;
      D.19341 = header->pe.pe_magic;
      D.19342 = D.19341 >> 8;
      D.19343 = (signed short) D.19342;
      D.19341 = header->pe.pe_magic;
      D.19344 = (int) D.19341;
      D.19345 = D.19344 << 8;
      D.19346 = (signed short) D.19345;
      D.19347 = D.19343 | D.19346;
      D.19348 = (short unsigned int) D.19347;
      header->pe.pe_magic = D.19348;
      D.19341 = header->pe.pe_magic;
      if (D.19341 == 267) goto <D.19349>; else goto <D.19350>;
      <D.19349>:
      offset.10 = (unsigned int) offset;
      D.19352 = offset.10 + 248;
      offset = (int) D.19352;
      D.19353 = header->pe.pe_data_size;
      D.19354 = D.19353 << 24;
      D.19353 = header->pe.pe_data_size;
      D.19355 = D.19353 >> 8;
      D.19356 = D.19355 & 65280;
      D.19357 = D.19354 | D.19356;
      D.19353 = header->pe.pe_data_size;
      D.19358 = D.19353 << 8;
      D.19359 = D.19358 & 16711680;
      D.19360 = D.19357 | D.19359;
      D.19353 = header->pe.pe_data_size;
      D.19361 = D.19353 >> 24;
      D.19362 = D.19360 | D.19361;
      header->pe.pe_data_size = D.19362;
      D.19275 = header->coff.coff_opt_header_size;
      if (D.19275 != 224) goto <D.19363>; else goto <D.19364>;
      <D.19363>:
      D.19221 = -1;
      return D.19221;
      <D.19364>:
      D.19365 = header->nt.pe_image_base;
      D.19366 = D.19365 << 24;
      D.19365 = header->nt.pe_image_base;
      D.19367 = D.19365 >> 8;
      D.19368 = D.19367 & 65280;
      D.19369 = D.19366 | D.19368;
      D.19365 = header->nt.pe_image_base;
      D.19370 = D.19365 << 8;
      D.19371 = D.19370 & 16711680;
      D.19372 = D.19369 | D.19371;
      D.19365 = header->nt.pe_image_base;
      D.19373 = D.19365 >> 24;
      D.19374 = D.19372 | D.19373;
      header->nt.pe_image_base = D.19374;
      D.19375 = header->nt.pe_stack_reserve;
      D.19376 = D.19375 << 24;
      D.19375 = header->nt.pe_stack_reserve;
      D.19377 = D.19375 >> 8;
      D.19378 = D.19377 & 65280;
      D.19379 = D.19376 | D.19378;
      D.19375 = header->nt.pe_stack_reserve;
      D.19380 = D.19375 << 8;
      D.19381 = D.19380 & 16711680;
      D.19382 = D.19379 | D.19381;
      D.19375 = header->nt.pe_stack_reserve;
      D.19383 = D.19375 >> 24;
      D.19384 = D.19382 | D.19383;
      header->nt.pe_stack_reserve = D.19384;
      D.19385 = header->nt.pe_stack_commit;
      D.19386 = D.19385 << 24;
      D.19385 = header->nt.pe_stack_commit;
      D.19387 = D.19385 >> 8;
      D.19388 = D.19387 & 65280;
      D.19389 = D.19386 | D.19388;
      D.19385 = header->nt.pe_stack_commit;
      D.19390 = D.19385 << 8;
      D.19391 = D.19390 & 16711680;
      D.19392 = D.19389 | D.19391;
      D.19385 = header->nt.pe_stack_commit;
      D.19393 = D.19385 >> 24;
      D.19394 = D.19392 | D.19393;
      header->nt.pe_stack_commit = D.19394;
      D.19395 = header->nt.pe_heap_reserve;
      D.19396 = D.19395 << 24;
      D.19395 = header->nt.pe_heap_reserve;
      D.19397 = D.19395 >> 8;
      D.19398 = D.19397 & 65280;
      D.19399 = D.19396 | D.19398;
      D.19395 = header->nt.pe_heap_reserve;
      D.19400 = D.19395 << 8;
      D.19401 = D.19400 & 16711680;
      D.19402 = D.19399 | D.19401;
      D.19395 = header->nt.pe_heap_reserve;
      D.19403 = D.19395 >> 24;
      D.19404 = D.19402 | D.19403;
      header->nt.pe_heap_reserve = D.19404;
      D.19405 = header->nt.pe_heap_commit;
      D.19406 = D.19405 << 24;
      D.19405 = header->nt.pe_heap_commit;
      D.19407 = D.19405 >> 8;
      D.19408 = D.19407 & 65280;
      D.19409 = D.19406 | D.19408;
      D.19405 = header->nt.pe_heap_commit;
      D.19410 = D.19405 << 8;
      D.19411 = D.19410 & 16711680;
      D.19412 = D.19409 | D.19411;
      D.19405 = header->nt.pe_heap_commit;
      D.19413 = D.19405 >> 24;
      D.19414 = D.19412 | D.19413;
      header->nt.pe_heap_commit = D.19414;
      goto <D.19415>;
      <D.19350>:
      D.19341 = header->pe.pe_magic;
      if (D.19341 == 523) goto <D.19416>; else goto <D.19417>;
      <D.19416>:
      D.19275 = header->coff.coff_opt_header_size;
      if (D.19275 != 240) goto <D.19418>; else goto <D.19419>;
      <D.19418>:
      D.19221 = -1;
      return D.19221;
      <D.19419>:
      D.19222 = image->raw_data;
      D.19223 = (sizetype) offset;
      D.19224 = D.19222 + D.19223;
      memcpy (&header64, D.19224, 264);
      offset.10 = (unsigned int) offset;
      D.19420 = offset.10 + 264;
      offset = (int) D.19420;
      memcpy (&header64, header, 244);
      D.19421 = header64.nt.pe_image_base;
      D.19422 = (unsigned int) D.19421;
      D.19423 = D.19422 << 24;
      D.19421 = header64.nt.pe_image_base;
      D.19422 = (unsigned int) D.19421;
      D.19424 = D.19422 >> 8;
      D.19425 = D.19424 & 65280;
      D.19426 = D.19423 | D.19425;
      D.19421 = header64.nt.pe_image_base;
      D.19422 = (unsigned int) D.19421;
      D.19427 = D.19422 << 8;
      D.19428 = D.19427 & 16711680;
      D.19429 = D.19426 | D.19428;
      D.19421 = header64.nt.pe_image_base;
      D.19422 = (unsigned int) D.19421;
      D.19430 = D.19422 >> 24;
      D.19431 = D.19429 | D.19430;
      D.19432 = (long unsigned int) D.19431;
      D.19433 = D.19432 << 32;
      D.19421 = header64.nt.pe_image_base;
      D.19434 = D.19421 >> 32;
      D.19435 = (unsigned int) D.19434;
      D.19436 = D.19435 << 24;
      D.19421 = header64.nt.pe_image_base;
      D.19434 = D.19421 >> 32;
      D.19435 = (unsigned int) D.19434;
      D.19437 = D.19435 >> 8;
      D.19438 = D.19437 & 65280;
      D.19439 = D.19436 | D.19438;
      D.19421 = header64.nt.pe_image_base;
      D.19434 = D.19421 >> 32;
      D.19435 = (unsigned int) D.19434;
      D.19440 = D.19435 << 8;
      D.19441 = D.19440 & 16711680;
      D.19442 = D.19439 | D.19441;
      D.19421 = header64.nt.pe_image_base;
      D.19434 = D.19421 >> 32;
      D.19435 = (unsigned int) D.19434;
      D.19443 = D.19435 >> 24;
      D.19444 = D.19442 | D.19443;
      D.19445 = (long unsigned int) D.19444;
      D.19446 = D.19433 | D.19445;
      header64.nt.pe_image_base = D.19446;
      D.19421 = header64.nt.pe_image_base;
      D.19447 = (unsigned int) D.19421;
      header->nt.pe_image_base = D.19447;
      D.19448 = header64.nt.pe_stack_reserve;
      D.19449 = (unsigned int) D.19448;
      D.19450 = D.19449 << 24;
      D.19448 = header64.nt.pe_stack_reserve;
      D.19449 = (unsigned int) D.19448;
      D.19451 = D.19449 >> 8;
      D.19452 = D.19451 & 65280;
      D.19453 = D.19450 | D.19452;
      D.19448 = header64.nt.pe_stack_reserve;
      D.19449 = (unsigned int) D.19448;
      D.19454 = D.19449 << 8;
      D.19455 = D.19454 & 16711680;
      D.19456 = D.19453 | D.19455;
      D.19448 = header64.nt.pe_stack_reserve;
      D.19449 = (unsigned int) D.19448;
      D.19457 = D.19449 >> 24;
      D.19458 = D.19456 | D.19457;
      D.19459 = (long unsigned int) D.19458;
      D.19460 = D.19459 << 32;
      D.19448 = header64.nt.pe_stack_reserve;
      D.19461 = D.19448 >> 32;
      D.19462 = (unsigned int) D.19461;
      D.19463 = D.19462 << 24;
      D.19448 = header64.nt.pe_stack_reserve;
      D.19461 = D.19448 >> 32;
      D.19462 = (unsigned int) D.19461;
      D.19464 = D.19462 >> 8;
      D.19465 = D.19464 & 65280;
      D.19466 = D.19463 | D.19465;
      D.19448 = header64.nt.pe_stack_reserve;
      D.19461 = D.19448 >> 32;
      D.19462 = (unsigned int) D.19461;
      D.19467 = D.19462 << 8;
      D.19468 = D.19467 & 16711680;
      D.19469 = D.19466 | D.19468;
      D.19448 = header64.nt.pe_stack_reserve;
      D.19461 = D.19448 >> 32;
      D.19462 = (unsigned int) D.19461;
      D.19470 = D.19462 >> 24;
      D.19471 = D.19469 | D.19470;
      D.19472 = (long unsigned int) D.19471;
      D.19473 = D.19460 | D.19472;
      header64.nt.pe_stack_reserve = D.19473;
      D.19448 = header64.nt.pe_stack_reserve;
      D.19474 = (unsigned int) D.19448;
      header->nt.pe_stack_reserve = D.19474;
      D.19475 = header64.nt.pe_stack_commit;
      D.19476 = (unsigned int) D.19475;
      D.19477 = D.19476 << 24;
      D.19475 = header64.nt.pe_stack_commit;
      D.19476 = (unsigned int) D.19475;
      D.19478 = D.19476 >> 8;
      D.19479 = D.19478 & 65280;
      D.19480 = D.19477 | D.19479;
      D.19475 = header64.nt.pe_stack_commit;
      D.19476 = (unsigned int) D.19475;
      D.19481 = D.19476 << 8;
      D.19482 = D.19481 & 16711680;
      D.19483 = D.19480 | D.19482;
      D.19475 = header64.nt.pe_stack_commit;
      D.19476 = (unsigned int) D.19475;
      D.19484 = D.19476 >> 24;
      D.19485 = D.19483 | D.19484;
      D.19486 = (long unsigned int) D.19485;
      D.19487 = D.19486 << 32;
      D.19475 = header64.nt.pe_stack_commit;
      D.19488 = D.19475 >> 32;
      D.19489 = (unsigned int) D.19488;
      D.19490 = D.19489 << 24;
      D.19475 = header64.nt.pe_stack_commit;
      D.19488 = D.19475 >> 32;
      D.19489 = (unsigned int) D.19488;
      D.19491 = D.19489 >> 8;
      D.19492 = D.19491 & 65280;
      D.19493 = D.19490 | D.19492;
      D.19475 = header64.nt.pe_stack_commit;
      D.19488 = D.19475 >> 32;
      D.19489 = (unsigned int) D.19488;
      D.19494 = D.19489 << 8;
      D.19495 = D.19494 & 16711680;
      D.19496 = D.19493 | D.19495;
      D.19475 = header64.nt.pe_stack_commit;
      D.19488 = D.19475 >> 32;
      D.19489 = (unsigned int) D.19488;
      D.19497 = D.19489 >> 24;
      D.19498 = D.19496 | D.19497;
      D.19499 = (long unsigned int) D.19498;
      D.19500 = D.19487 | D.19499;
      header64.nt.pe_stack_commit = D.19500;
      D.19475 = header64.nt.pe_stack_commit;
      D.19501 = (unsigned int) D.19475;
      header->nt.pe_stack_commit = D.19501;
      D.19502 = header64.nt.pe_heap_reserve;
      D.19503 = (unsigned int) D.19502;
      D.19504 = D.19503 << 24;
      D.19502 = header64.nt.pe_heap_reserve;
      D.19503 = (unsigned int) D.19502;
      D.19505 = D.19503 >> 8;
      D.19506 = D.19505 & 65280;
      D.19507 = D.19504 | D.19506;
      D.19502 = header64.nt.pe_heap_reserve;
      D.19503 = (unsigned int) D.19502;
      D.19508 = D.19503 << 8;
      D.19509 = D.19508 & 16711680;
      D.19510 = D.19507 | D.19509;
      D.19502 = header64.nt.pe_heap_reserve;
      D.19503 = (unsigned int) D.19502;
      D.19511 = D.19503 >> 24;
      D.19512 = D.19510 | D.19511;
      D.19513 = (long unsigned int) D.19512;
      D.19514 = D.19513 << 32;
      D.19502 = header64.nt.pe_heap_reserve;
      D.19515 = D.19502 >> 32;
      D.19516 = (unsigned int) D.19515;
      D.19517 = D.19516 << 24;
      D.19502 = header64.nt.pe_heap_reserve;
      D.19515 = D.19502 >> 32;
      D.19516 = (unsigned int) D.19515;
      D.19518 = D.19516 >> 8;
      D.19519 = D.19518 & 65280;
      D.19520 = D.19517 | D.19519;
      D.19502 = header64.nt.pe_heap_reserve;
      D.19515 = D.19502 >> 32;
      D.19516 = (unsigned int) D.19515;
      D.19521 = D.19516 << 8;
      D.19522 = D.19521 & 16711680;
      D.19523 = D.19520 | D.19522;
      D.19502 = header64.nt.pe_heap_reserve;
      D.19515 = D.19502 >> 32;
      D.19516 = (unsigned int) D.19515;
      D.19524 = D.19516 >> 24;
      D.19525 = D.19523 | D.19524;
      D.19526 = (long unsigned int) D.19525;
      D.19527 = D.19514 | D.19526;
      header64.nt.pe_heap_reserve = D.19527;
      D.19502 = header64.nt.pe_heap_reserve;
      D.19528 = (unsigned int) D.19502;
      header->nt.pe_heap_reserve = D.19528;
      D.19529 = header64.nt.pe_heap_commit;
      D.19530 = (unsigned int) D.19529;
      D.19531 = D.19530 << 24;
      D.19529 = header64.nt.pe_heap_commit;
      D.19530 = (unsigned int) D.19529;
      D.19532 = D.19530 >> 8;
      D.19533 = D.19532 & 65280;
      D.19534 = D.19531 | D.19533;
      D.19529 = header64.nt.pe_heap_commit;
      D.19530 = (unsigned int) D.19529;
      D.19535 = D.19530 << 8;
      D.19536 = D.19535 & 16711680;
      D.19537 = D.19534 | D.19536;
      D.19529 = header64.nt.pe_heap_commit;
      D.19530 = (unsigned int) D.19529;
      D.19538 = D.19530 >> 24;
      D.19539 = D.19537 | D.19538;
      D.19540 = (long unsigned int) D.19539;
      D.19541 = D.19540 << 32;
      D.19529 = header64.nt.pe_heap_commit;
      D.19542 = D.19529 >> 32;
      D.19543 = (unsigned int) D.19542;
      D.19544 = D.19543 << 24;
      D.19529 = header64.nt.pe_heap_commit;
      D.19542 = D.19529 >> 32;
      D.19543 = (unsigned int) D.19542;
      D.19545 = D.19543 >> 8;
      D.19546 = D.19545 & 65280;
      D.19547 = D.19544 | D.19546;
      D.19529 = header64.nt.pe_heap_commit;
      D.19542 = D.19529 >> 32;
      D.19543 = (unsigned int) D.19542;
      D.19548 = D.19543 << 8;
      D.19549 = D.19548 & 16711680;
      D.19550 = D.19547 | D.19549;
      D.19529 = header64.nt.pe_heap_commit;
      D.19542 = D.19529 >> 32;
      D.19543 = (unsigned int) D.19542;
      D.19551 = D.19543 >> 24;
      D.19552 = D.19550 | D.19551;
      D.19553 = (long unsigned int) D.19552;
      D.19554 = D.19541 | D.19553;
      header64.nt.pe_heap_commit = D.19554;
      D.19529 = header64.nt.pe_heap_commit;
      D.19555 = (unsigned int) D.19529;
      header->nt.pe_heap_commit = D.19555;
      D.19556 = header64.nt.pe_section_align;
      header->nt.pe_section_align = D.19556;
      D.19557 = header64.nt.pe_file_alignment;
      header->nt.pe_file_alignment = D.19557;
      D.19558 = header64.nt.pe_os_major;
      header->nt.pe_os_major = D.19558;
      D.19559 = header64.nt.pe_os_minor;
      header->nt.pe_os_minor = D.19559;
      D.19560 = header64.nt.pe_user_major;
      header->nt.pe_user_major = D.19560;
      D.19561 = header64.nt.pe_user_minor;
      header->nt.pe_user_minor = D.19561;
      D.19562 = header64.nt.pe_subsys_major;
      header->nt.pe_subsys_major = D.19562;
      D.19563 = header64.nt.pe_subsys_minor;
      header->nt.pe_subsys_minor = D.19563;
      D.19564 = header64.nt.pe_reserved_1;
      header->nt.pe_reserved_1 = D.19564;
      D.19565 = header64.nt.pe_image_size;
      header->nt.pe_image_size = D.19565;
      D.19566 = header64.nt.pe_header_size;
      header->nt.pe_header_size = D.19566;
      D.19567 = header64.nt.pe_checksum;
      header->nt.pe_checksum = D.19567;
      D.19568 = header64.nt.pe_subsys_required;
      header->nt.pe_subsys_required = D.19568;
      D.19569 = header64.nt.pe_dll_flags;
      header->nt.pe_dll_flags = D.19569;
      D.19570 = header64.nt.pe_loader_flags;
      header->nt.pe_loader_flags = D.19570;
      D.19571 = header64.nt.pe_data_dir_count;
      header->nt.pe_data_dir_count = D.19571;
      D.19572 = &header->datadir;
      memcpy (D.19572, &header64.datadir, 128);
      goto <D.19573>;
      <D.19417>:
      D.19221 = -1;
      return D.19221;
      <D.19573>:
      <D.19415>:
      D.19574 = header->nt.pe_section_align;
      D.19575 = D.19574 << 24;
      D.19574 = header->nt.pe_section_align;
      D.19576 = D.19574 >> 8;
      D.19577 = D.19576 & 65280;
      D.19578 = D.19575 | D.19577;
      D.19574 = header->nt.pe_section_align;
      D.19579 = D.19574 << 8;
      D.19580 = D.19579 & 16711680;
      D.19581 = D.19578 | D.19580;
      D.19574 = header->nt.pe_section_align;
      D.19582 = D.19574 >> 24;
      D.19583 = D.19581 | D.19582;
      header->nt.pe_section_align = D.19583;
      D.19584 = header->nt.pe_file_alignment;
      D.19585 = D.19584 << 24;
      D.19584 = header->nt.pe_file_alignment;
      D.19586 = D.19584 >> 8;
      D.19587 = D.19586 & 65280;
      D.19588 = D.19585 | D.19587;
      D.19584 = header->nt.pe_file_alignment;
      D.19589 = D.19584 << 8;
      D.19590 = D.19589 & 16711680;
      D.19591 = D.19588 | D.19590;
      D.19584 = header->nt.pe_file_alignment;
      D.19592 = D.19584 >> 24;
      D.19593 = D.19591 | D.19592;
      header->nt.pe_file_alignment = D.19593;
      D.19594 = header->nt.pe_os_major;
      D.19595 = D.19594 >> 8;
      D.19596 = (signed short) D.19595;
      D.19594 = header->nt.pe_os_major;
      D.19597 = (int) D.19594;
      D.19598 = D.19597 << 8;
      D.19599 = (signed short) D.19598;
      D.19600 = D.19596 | D.19599;
      D.19601 = (short unsigned int) D.19600;
      header->nt.pe_os_major = D.19601;
      D.19602 = header->nt.pe_os_minor;
      D.19603 = D.19602 >> 8;
      D.19604 = (signed short) D.19603;
      D.19602 = header->nt.pe_os_minor;
      D.19605 = (int) D.19602;
      D.19606 = D.19605 << 8;
      D.19607 = (signed short) D.19606;
      D.19608 = D.19604 | D.19607;
      D.19609 = (short unsigned int) D.19608;
      header->nt.pe_os_minor = D.19609;
      D.19610 = header->nt.pe_user_major;
      D.19611 = D.19610 >> 8;
      D.19612 = (signed short) D.19611;
      D.19610 = header->nt.pe_user_major;
      D.19613 = (int) D.19610;
      D.19614 = D.19613 << 8;
      D.19615 = (signed short) D.19614;
      D.19616 = D.19612 | D.19615;
      D.19617 = (short unsigned int) D.19616;
      header->nt.pe_user_major = D.19617;
      D.19618 = header->nt.pe_user_minor;
      D.19619 = D.19618 >> 8;
      D.19620 = (signed short) D.19619;
      D.19618 = header->nt.pe_user_minor;
      D.19621 = (int) D.19618;
      D.19622 = D.19621 << 8;
      D.19623 = (signed short) D.19622;
      D.19624 = D.19620 | D.19623;
      D.19625 = (short unsigned int) D.19624;
      header->nt.pe_user_minor = D.19625;
      D.19626 = header->nt.pe_subsys_major;
      D.19627 = D.19626 >> 8;
      D.19628 = (signed short) D.19627;
      D.19626 = header->nt.pe_subsys_major;
      D.19629 = (int) D.19626;
      D.19630 = D.19629 << 8;
      D.19631 = (signed short) D.19630;
      D.19632 = D.19628 | D.19631;
      D.19633 = (short unsigned int) D.19632;
      header->nt.pe_subsys_major = D.19633;
      D.19634 = header->nt.pe_subsys_minor;
      D.19635 = D.19634 >> 8;
      D.19636 = (signed short) D.19635;
      D.19634 = header->nt.pe_subsys_minor;
      D.19637 = (int) D.19634;
      D.19638 = D.19637 << 8;
      D.19639 = (signed short) D.19638;
      D.19640 = D.19636 | D.19639;
      D.19641 = (short unsigned int) D.19640;
      header->nt.pe_subsys_minor = D.19641;
      D.19642 = header->nt.pe_reserved_1;
      D.19643 = D.19642 << 24;
      D.19642 = header->nt.pe_reserved_1;
      D.19644 = D.19642 >> 8;
      D.19645 = D.19644 & 65280;
      D.19646 = D.19643 | D.19645;
      D.19642 = header->nt.pe_reserved_1;
      D.19647 = D.19642 << 8;
      D.19648 = D.19647 & 16711680;
      D.19649 = D.19646 | D.19648;
      D.19642 = header->nt.pe_reserved_1;
      D.19650 = D.19642 >> 24;
      D.19651 = D.19649 | D.19650;
      header->nt.pe_reserved_1 = D.19651;
      D.19652 = header->nt.pe_image_size;
      D.19653 = D.19652 << 24;
      D.19652 = header->nt.pe_image_size;
      D.19654 = D.19652 >> 8;
      D.19655 = D.19654 & 65280;
      D.19656 = D.19653 | D.19655;
      D.19652 = header->nt.pe_image_size;
      D.19657 = D.19652 << 8;
      D.19658 = D.19657 & 16711680;
      D.19659 = D.19656 | D.19658;
      D.19652 = header->nt.pe_image_size;
      D.19660 = D.19652 >> 24;
      D.19661 = D.19659 | D.19660;
      header->nt.pe_image_size = D.19661;
      D.19662 = header->nt.pe_header_size;
      D.19663 = D.19662 << 24;
      D.19662 = header->nt.pe_header_size;
      D.19664 = D.19662 >> 8;
      D.19665 = D.19664 & 65280;
      D.19666 = D.19663 | D.19665;
      D.19662 = header->nt.pe_header_size;
      D.19667 = D.19662 << 8;
      D.19668 = D.19667 & 16711680;
      D.19669 = D.19666 | D.19668;
      D.19662 = header->nt.pe_header_size;
      D.19670 = D.19662 >> 24;
      D.19671 = D.19669 | D.19670;
      header->nt.pe_header_size = D.19671;
      D.19672 = header->nt.pe_checksum;
      D.19673 = D.19672 << 24;
      D.19672 = header->nt.pe_checksum;
      D.19674 = D.19672 >> 8;
      D.19675 = D.19674 & 65280;
      D.19676 = D.19673 | D.19675;
      D.19672 = header->nt.pe_checksum;
      D.19677 = D.19672 << 8;
      D.19678 = D.19677 & 16711680;
      D.19679 = D.19676 | D.19678;
      D.19672 = header->nt.pe_checksum;
      D.19680 = D.19672 >> 24;
      D.19681 = D.19679 | D.19680;
      header->nt.pe_checksum = D.19681;
      D.19682 = header->nt.pe_subsys_required;
      D.19683 = D.19682 >> 8;
      D.19684 = (signed short) D.19683;
      D.19682 = header->nt.pe_subsys_required;
      D.19685 = (int) D.19682;
      D.19686 = D.19685 << 8;
      D.19687 = (signed short) D.19686;
      D.19688 = D.19684 | D.19687;
      D.19689 = (short unsigned int) D.19688;
      header->nt.pe_subsys_required = D.19689;
      D.19690 = header->nt.pe_dll_flags;
      D.19691 = D.19690 >> 8;
      D.19692 = (signed short) D.19691;
      D.19690 = header->nt.pe_dll_flags;
      D.19693 = (int) D.19690;
      D.19694 = D.19693 << 8;
      D.19695 = (signed short) D.19694;
      D.19696 = D.19692 | D.19695;
      D.19697 = (short unsigned int) D.19696;
      header->nt.pe_dll_flags = D.19697;
      D.19698 = header->nt.pe_loader_flags;
      D.19699 = D.19698 << 24;
      D.19698 = header->nt.pe_loader_flags;
      D.19700 = D.19698 >> 8;
      D.19701 = D.19700 & 65280;
      D.19702 = D.19699 | D.19701;
      D.19698 = header->nt.pe_loader_flags;
      D.19703 = D.19698 << 8;
      D.19704 = D.19703 & 16711680;
      D.19705 = D.19702 | D.19704;
      D.19698 = header->nt.pe_loader_flags;
      D.19706 = D.19698 >> 24;
      D.19707 = D.19705 | D.19706;
      header->nt.pe_loader_flags = D.19707;
      D.19708 = header->nt.pe_data_dir_count;
      D.19709 = D.19708 << 24;
      D.19708 = header->nt.pe_data_dir_count;
      D.19710 = D.19708 >> 8;
      D.19711 = D.19710 & 65280;
      D.19712 = D.19709 | D.19711;
      D.19708 = header->nt.pe_data_dir_count;
      D.19713 = D.19708 << 8;
      D.19714 = D.19713 & 16711680;
      D.19715 = D.19712 | D.19714;
      D.19708 = header->nt.pe_data_dir_count;
      D.19716 = D.19708 >> 24;
      D.19717 = D.19715 | D.19716;
      header->nt.pe_data_dir_count = D.19717;
      D.19718 = header->datadir.pe_export_table.rva;
      D.19719 = D.19718 << 24;
      D.19718 = header->datadir.pe_export_table.rva;
      D.19720 = D.19718 >> 8;
      D.19721 = D.19720 & 65280;
      D.19722 = D.19719 | D.19721;
      D.19718 = header->datadir.pe_export_table.rva;
      D.19723 = D.19718 << 8;
      D.19724 = D.19723 & 16711680;
      D.19725 = D.19722 | D.19724;
      D.19718 = header->datadir.pe_export_table.rva;
      D.19726 = D.19718 >> 24;
      D.19727 = D.19725 | D.19726;
      header->datadir.pe_export_table.rva = D.19727;
      D.19728 = header->datadir.pe_export_table.size;
      D.19729 = D.19728 << 24;
      D.19728 = header->datadir.pe_export_table.size;
      D.19730 = D.19728 >> 8;
      D.19731 = D.19730 & 65280;
      D.19732 = D.19729 | D.19731;
      D.19728 = header->datadir.pe_export_table.size;
      D.19733 = D.19728 << 8;
      D.19734 = D.19733 & 16711680;
      D.19735 = D.19732 | D.19734;
      D.19728 = header->datadir.pe_export_table.size;
      D.19736 = D.19728 >> 24;
      D.19737 = D.19735 | D.19736;
      header->datadir.pe_export_table.size = D.19737;
      D.19738 = header->datadir.pe_import_table.rva;
      D.19739 = D.19738 << 24;
      D.19738 = header->datadir.pe_import_table.rva;
      D.19740 = D.19738 >> 8;
      D.19741 = D.19740 & 65280;
      D.19742 = D.19739 | D.19741;
      D.19738 = header->datadir.pe_import_table.rva;
      D.19743 = D.19738 << 8;
      D.19744 = D.19743 & 16711680;
      D.19745 = D.19742 | D.19744;
      D.19738 = header->datadir.pe_import_table.rva;
      D.19746 = D.19738 >> 24;
      D.19747 = D.19745 | D.19746;
      header->datadir.pe_import_table.rva = D.19747;
      D.19748 = header->datadir.pe_import_table.size;
      D.19749 = D.19748 << 24;
      D.19748 = header->datadir.pe_import_table.size;
      D.19750 = D.19748 >> 8;
      D.19751 = D.19750 & 65280;
      D.19752 = D.19749 | D.19751;
      D.19748 = header->datadir.pe_import_table.size;
      D.19753 = D.19748 << 8;
      D.19754 = D.19753 & 16711680;
      D.19755 = D.19752 | D.19754;
      D.19748 = header->datadir.pe_import_table.size;
      D.19756 = D.19748 >> 24;
      D.19757 = D.19755 | D.19756;
      header->datadir.pe_import_table.size = D.19757;
      D.19758 = header->datadir.pe_resource_table.rva;
      D.19759 = D.19758 << 24;
      D.19758 = header->datadir.pe_resource_table.rva;
      D.19760 = D.19758 >> 8;
      D.19761 = D.19760 & 65280;
      D.19762 = D.19759 | D.19761;
      D.19758 = header->datadir.pe_resource_table.rva;
      D.19763 = D.19758 << 8;
      D.19764 = D.19763 & 16711680;
      D.19765 = D.19762 | D.19764;
      D.19758 = header->datadir.pe_resource_table.rva;
      D.19766 = D.19758 >> 24;
      D.19767 = D.19765 | D.19766;
      header->datadir.pe_resource_table.rva = D.19767;
      D.19768 = header->datadir.pe_resource_table.size;
      D.19769 = D.19768 << 24;
      D.19768 = header->datadir.pe_resource_table.size;
      D.19770 = D.19768 >> 8;
      D.19771 = D.19770 & 65280;
      D.19772 = D.19769 | D.19771;
      D.19768 = header->datadir.pe_resource_table.size;
      D.19773 = D.19768 << 8;
      D.19774 = D.19773 & 16711680;
      D.19775 = D.19772 | D.19774;
      D.19768 = header->datadir.pe_resource_table.size;
      D.19776 = D.19768 >> 24;
      D.19777 = D.19775 | D.19776;
      header->datadir.pe_resource_table.size = D.19777;
      D.19778 = header->datadir.pe_exception_table.rva;
      D.19779 = D.19778 << 24;
      D.19778 = header->datadir.pe_exception_table.rva;
      D.19780 = D.19778 >> 8;
      D.19781 = D.19780 & 65280;
      D.19782 = D.19779 | D.19781;
      D.19778 = header->datadir.pe_exception_table.rva;
      D.19783 = D.19778 << 8;
      D.19784 = D.19783 & 16711680;
      D.19785 = D.19782 | D.19784;
      D.19778 = header->datadir.pe_exception_table.rva;
      D.19786 = D.19778 >> 24;
      D.19787 = D.19785 | D.19786;
      header->datadir.pe_exception_table.rva = D.19787;
      D.19788 = header->datadir.pe_exception_table.size;
      D.19789 = D.19788 << 24;
      D.19788 = header->datadir.pe_exception_table.size;
      D.19790 = D.19788 >> 8;
      D.19791 = D.19790 & 65280;
      D.19792 = D.19789 | D.19791;
      D.19788 = header->datadir.pe_exception_table.size;
      D.19793 = D.19788 << 8;
      D.19794 = D.19793 & 16711680;
      D.19795 = D.19792 | D.19794;
      D.19788 = header->datadir.pe_exception_table.size;
      D.19796 = D.19788 >> 24;
      D.19797 = D.19795 | D.19796;
      header->datadir.pe_exception_table.size = D.19797;
      D.19798 = header->datadir.pe_certificate_table.rva;
      D.19799 = D.19798 << 24;
      D.19798 = header->datadir.pe_certificate_table.rva;
      D.19800 = D.19798 >> 8;
      D.19801 = D.19800 & 65280;
      D.19802 = D.19799 | D.19801;
      D.19798 = header->datadir.pe_certificate_table.rva;
      D.19803 = D.19798 << 8;
      D.19804 = D.19803 & 16711680;
      D.19805 = D.19802 | D.19804;
      D.19798 = header->datadir.pe_certificate_table.rva;
      D.19806 = D.19798 >> 24;
      D.19807 = D.19805 | D.19806;
      header->datadir.pe_certificate_table.rva = D.19807;
      D.19808 = header->datadir.pe_certificate_table.size;
      D.19809 = D.19808 << 24;
      D.19808 = header->datadir.pe_certificate_table.size;
      D.19810 = D.19808 >> 8;
      D.19811 = D.19810 & 65280;
      D.19812 = D.19809 | D.19811;
      D.19808 = header->datadir.pe_certificate_table.size;
      D.19813 = D.19808 << 8;
      D.19814 = D.19813 & 16711680;
      D.19815 = D.19812 | D.19814;
      D.19808 = header->datadir.pe_certificate_table.size;
      D.19816 = D.19808 >> 24;
      D.19817 = D.19815 | D.19816;
      header->datadir.pe_certificate_table.size = D.19817;
      D.19818 = header->datadir.pe_reloc_table.rva;
      D.19819 = D.19818 << 24;
      D.19818 = header->datadir.pe_reloc_table.rva;
      D.19820 = D.19818 >> 8;
      D.19821 = D.19820 & 65280;
      D.19822 = D.19819 | D.19821;
      D.19818 = header->datadir.pe_reloc_table.rva;
      D.19823 = D.19818 << 8;
      D.19824 = D.19823 & 16711680;
      D.19825 = D.19822 | D.19824;
      D.19818 = header->datadir.pe_reloc_table.rva;
      D.19826 = D.19818 >> 24;
      D.19827 = D.19825 | D.19826;
      header->datadir.pe_reloc_table.rva = D.19827;
      D.19828 = header->datadir.pe_reloc_table.size;
      D.19829 = D.19828 << 24;
      D.19828 = header->datadir.pe_reloc_table.size;
      D.19830 = D.19828 >> 8;
      D.19831 = D.19830 & 65280;
      D.19832 = D.19829 | D.19831;
      D.19828 = header->datadir.pe_reloc_table.size;
      D.19833 = D.19828 << 8;
      D.19834 = D.19833 & 16711680;
      D.19835 = D.19832 | D.19834;
      D.19828 = header->datadir.pe_reloc_table.size;
      D.19836 = D.19828 >> 24;
      D.19837 = D.19835 | D.19836;
      header->datadir.pe_reloc_table.size = D.19837;
      D.19838 = header->datadir.pe_debug.rva;
      D.19839 = D.19838 << 24;
      D.19838 = header->datadir.pe_debug.rva;
      D.19840 = D.19838 >> 8;
      D.19841 = D.19840 & 65280;
      D.19842 = D.19839 | D.19841;
      D.19838 = header->datadir.pe_debug.rva;
      D.19843 = D.19838 << 8;
      D.19844 = D.19843 & 16711680;
      D.19845 = D.19842 | D.19844;
      D.19838 = header->datadir.pe_debug.rva;
      D.19846 = D.19838 >> 24;
      D.19847 = D.19845 | D.19846;
      header->datadir.pe_debug.rva = D.19847;
      D.19848 = header->datadir.pe_debug.size;
      D.19849 = D.19848 << 24;
      D.19848 = header->datadir.pe_debug.size;
      D.19850 = D.19848 >> 8;
      D.19851 = D.19850 & 65280;
      D.19852 = D.19849 | D.19851;
      D.19848 = header->datadir.pe_debug.size;
      D.19853 = D.19848 << 8;
      D.19854 = D.19853 & 16711680;
      D.19855 = D.19852 | D.19854;
      D.19848 = header->datadir.pe_debug.size;
      D.19856 = D.19848 >> 24;
      D.19857 = D.19855 | D.19856;
      header->datadir.pe_debug.size = D.19857;
      D.19858 = header->datadir.pe_copyright.rva;
      D.19859 = D.19858 << 24;
      D.19858 = header->datadir.pe_copyright.rva;
      D.19860 = D.19858 >> 8;
      D.19861 = D.19860 & 65280;
      D.19862 = D.19859 | D.19861;
      D.19858 = header->datadir.pe_copyright.rva;
      D.19863 = D.19858 << 8;
      D.19864 = D.19863 & 16711680;
      D.19865 = D.19862 | D.19864;
      D.19858 = header->datadir.pe_copyright.rva;
      D.19866 = D.19858 >> 24;
      D.19867 = D.19865 | D.19866;
      header->datadir.pe_copyright.rva = D.19867;
      D.19868 = header->datadir.pe_copyright.size;
      D.19869 = D.19868 << 24;
      D.19868 = header->datadir.pe_copyright.size;
      D.19870 = D.19868 >> 8;
      D.19871 = D.19870 & 65280;
      D.19872 = D.19869 | D.19871;
      D.19868 = header->datadir.pe_copyright.size;
      D.19873 = D.19868 << 8;
      D.19874 = D.19873 & 16711680;
      D.19875 = D.19872 | D.19874;
      D.19868 = header->datadir.pe_copyright.size;
      D.19876 = D.19868 >> 24;
      D.19877 = D.19875 | D.19876;
      header->datadir.pe_copyright.size = D.19877;
      D.19878 = header->datadir.pe_global_ptr.rva;
      D.19879 = D.19878 << 24;
      D.19878 = header->datadir.pe_global_ptr.rva;
      D.19880 = D.19878 >> 8;
      D.19881 = D.19880 & 65280;
      D.19882 = D.19879 | D.19881;
      D.19878 = header->datadir.pe_global_ptr.rva;
      D.19883 = D.19878 << 8;
      D.19884 = D.19883 & 16711680;
      D.19885 = D.19882 | D.19884;
      D.19878 = header->datadir.pe_global_ptr.rva;
      D.19886 = D.19878 >> 24;
      D.19887 = D.19885 | D.19886;
      header->datadir.pe_global_ptr.rva = D.19887;
      D.19888 = header->datadir.pe_global_ptr.size;
      D.19889 = D.19888 << 24;
      D.19888 = header->datadir.pe_global_ptr.size;
      D.19890 = D.19888 >> 8;
      D.19891 = D.19890 & 65280;
      D.19892 = D.19889 | D.19891;
      D.19888 = header->datadir.pe_global_ptr.size;
      D.19893 = D.19888 << 8;
      D.19894 = D.19893 & 16711680;
      D.19895 = D.19892 | D.19894;
      D.19888 = header->datadir.pe_global_ptr.size;
      D.19896 = D.19888 >> 24;
      D.19897 = D.19895 | D.19896;
      header->datadir.pe_global_ptr.size = D.19897;
      D.19898 = header->datadir.pe_tls_table.rva;
      D.19899 = D.19898 << 24;
      D.19898 = header->datadir.pe_tls_table.rva;
      D.19900 = D.19898 >> 8;
      D.19901 = D.19900 & 65280;
      D.19902 = D.19899 | D.19901;
      D.19898 = header->datadir.pe_tls_table.rva;
      D.19903 = D.19898 << 8;
      D.19904 = D.19903 & 16711680;
      D.19905 = D.19902 | D.19904;
      D.19898 = header->datadir.pe_tls_table.rva;
      D.19906 = D.19898 >> 24;
      D.19907 = D.19905 | D.19906;
      header->datadir.pe_tls_table.rva = D.19907;
      D.19908 = header->datadir.pe_tls_table.size;
      D.19909 = D.19908 << 24;
      D.19908 = header->datadir.pe_tls_table.size;
      D.19910 = D.19908 >> 8;
      D.19911 = D.19910 & 65280;
      D.19912 = D.19909 | D.19911;
      D.19908 = header->datadir.pe_tls_table.size;
      D.19913 = D.19908 << 8;
      D.19914 = D.19913 & 16711680;
      D.19915 = D.19912 | D.19914;
      D.19908 = header->datadir.pe_tls_table.size;
      D.19916 = D.19908 >> 24;
      D.19917 = D.19915 | D.19916;
      header->datadir.pe_tls_table.size = D.19917;
      D.19918 = header->datadir.pe_load_config_table.rva;
      D.19919 = D.19918 << 24;
      D.19918 = header->datadir.pe_load_config_table.rva;
      D.19920 = D.19918 >> 8;
      D.19921 = D.19920 & 65280;
      D.19922 = D.19919 | D.19921;
      D.19918 = header->datadir.pe_load_config_table.rva;
      D.19923 = D.19918 << 8;
      D.19924 = D.19923 & 16711680;
      D.19925 = D.19922 | D.19924;
      D.19918 = header->datadir.pe_load_config_table.rva;
      D.19926 = D.19918 >> 24;
      D.19927 = D.19925 | D.19926;
      header->datadir.pe_load_config_table.rva = D.19927;
      D.19928 = header->datadir.pe_load_config_table.size;
      D.19929 = D.19928 << 24;
      D.19928 = header->datadir.pe_load_config_table.size;
      D.19930 = D.19928 >> 8;
      D.19931 = D.19930 & 65280;
      D.19932 = D.19929 | D.19931;
      D.19928 = header->datadir.pe_load_config_table.size;
      D.19933 = D.19928 << 8;
      D.19934 = D.19933 & 16711680;
      D.19935 = D.19932 | D.19934;
      D.19928 = header->datadir.pe_load_config_table.size;
      D.19936 = D.19928 >> 24;
      D.19937 = D.19935 | D.19936;
      header->datadir.pe_load_config_table.size = D.19937;
      D.19938 = header->datadir.pe_bound_import.rva;
      D.19939 = D.19938 << 24;
      D.19938 = header->datadir.pe_bound_import.rva;
      D.19940 = D.19938 >> 8;
      D.19941 = D.19940 & 65280;
      D.19942 = D.19939 | D.19941;
      D.19938 = header->datadir.pe_bound_import.rva;
      D.19943 = D.19938 << 8;
      D.19944 = D.19943 & 16711680;
      D.19945 = D.19942 | D.19944;
      D.19938 = header->datadir.pe_bound_import.rva;
      D.19946 = D.19938 >> 24;
      D.19947 = D.19945 | D.19946;
      header->datadir.pe_bound_import.rva = D.19947;
      D.19948 = header->datadir.pe_bound_import.size;
      D.19949 = D.19948 << 24;
      D.19948 = header->datadir.pe_bound_import.size;
      D.19950 = D.19948 >> 8;
      D.19951 = D.19950 & 65280;
      D.19952 = D.19949 | D.19951;
      D.19948 = header->datadir.pe_bound_import.size;
      D.19953 = D.19948 << 8;
      D.19954 = D.19953 & 16711680;
      D.19955 = D.19952 | D.19954;
      D.19948 = header->datadir.pe_bound_import.size;
      D.19956 = D.19948 >> 24;
      D.19957 = D.19955 | D.19956;
      header->datadir.pe_bound_import.size = D.19957;
      D.19958 = header->datadir.pe_iat.rva;
      D.19959 = D.19958 << 24;
      D.19958 = header->datadir.pe_iat.rva;
      D.19960 = D.19958 >> 8;
      D.19961 = D.19960 & 65280;
      D.19962 = D.19959 | D.19961;
      D.19958 = header->datadir.pe_iat.rva;
      D.19963 = D.19958 << 8;
      D.19964 = D.19963 & 16711680;
      D.19965 = D.19962 | D.19964;
      D.19958 = header->datadir.pe_iat.rva;
      D.19966 = D.19958 >> 24;
      D.19967 = D.19965 | D.19966;
      header->datadir.pe_iat.rva = D.19967;
      D.19968 = header->datadir.pe_iat.size;
      D.19969 = D.19968 << 24;
      D.19968 = header->datadir.pe_iat.size;
      D.19970 = D.19968 >> 8;
      D.19971 = D.19970 & 65280;
      D.19972 = D.19969 | D.19971;
      D.19968 = header->datadir.pe_iat.size;
      D.19973 = D.19968 << 8;
      D.19974 = D.19973 & 16711680;
      D.19975 = D.19972 | D.19974;
      D.19968 = header->datadir.pe_iat.size;
      D.19976 = D.19968 >> 24;
      D.19977 = D.19975 | D.19976;
      header->datadir.pe_iat.size = D.19977;
      D.19978 = header->datadir.pe_delay_import_desc.rva;
      D.19979 = D.19978 << 24;
      D.19978 = header->datadir.pe_delay_import_desc.rva;
      D.19980 = D.19978 >> 8;
      D.19981 = D.19980 & 65280;
      D.19982 = D.19979 | D.19981;
      D.19978 = header->datadir.pe_delay_import_desc.rva;
      D.19983 = D.19978 << 8;
      D.19984 = D.19983 & 16711680;
      D.19985 = D.19982 | D.19984;
      D.19978 = header->datadir.pe_delay_import_desc.rva;
      D.19986 = D.19978 >> 24;
      D.19987 = D.19985 | D.19986;
      header->datadir.pe_delay_import_desc.rva = D.19987;
      D.19988 = header->datadir.pe_delay_import_desc.size;
      D.19989 = D.19988 << 24;
      D.19988 = header->datadir.pe_delay_import_desc.size;
      D.19990 = D.19988 >> 8;
      D.19991 = D.19990 & 65280;
      D.19992 = D.19989 | D.19991;
      D.19988 = header->datadir.pe_delay_import_desc.size;
      D.19993 = D.19988 << 8;
      D.19994 = D.19993 & 16711680;
      D.19995 = D.19992 | D.19994;
      D.19988 = header->datadir.pe_delay_import_desc.size;
      D.19996 = D.19988 >> 24;
      D.19997 = D.19995 | D.19996;
      header->datadir.pe_delay_import_desc.size = D.19997;
      D.19998 = header->datadir.pe_cli_header.rva;
      D.19999 = D.19998 << 24;
      D.19998 = header->datadir.pe_cli_header.rva;
      D.20000 = D.19998 >> 8;
      D.20001 = D.20000 & 65280;
      D.20002 = D.19999 | D.20001;
      D.19998 = header->datadir.pe_cli_header.rva;
      D.20003 = D.19998 << 8;
      D.20004 = D.20003 & 16711680;
      D.20005 = D.20002 | D.20004;
      D.19998 = header->datadir.pe_cli_header.rva;
      D.20006 = D.19998 >> 24;
      D.20007 = D.20005 | D.20006;
      header->datadir.pe_cli_header.rva = D.20007;
      D.20008 = header->datadir.pe_cli_header.size;
      D.20009 = D.20008 << 24;
      D.20008 = header->datadir.pe_cli_header.size;
      D.20010 = D.20008 >> 8;
      D.20011 = D.20010 & 65280;
      D.20012 = D.20009 | D.20011;
      D.20008 = header->datadir.pe_cli_header.size;
      D.20013 = D.20008 << 8;
      D.20014 = D.20013 & 16711680;
      D.20015 = D.20012 | D.20014;
      D.20008 = header->datadir.pe_cli_header.size;
      D.20016 = D.20008 >> 24;
      D.20017 = D.20015 | D.20016;
      header->datadir.pe_cli_header.size = D.20017;
      D.20018 = header->datadir.pe_reserved.rva;
      D.20019 = D.20018 << 24;
      D.20018 = header->datadir.pe_reserved.rva;
      D.20020 = D.20018 >> 8;
      D.20021 = D.20020 & 65280;
      D.20022 = D.20019 | D.20021;
      D.20018 = header->datadir.pe_reserved.rva;
      D.20023 = D.20018 << 8;
      D.20024 = D.20023 & 16711680;
      D.20025 = D.20022 | D.20024;
      D.20018 = header->datadir.pe_reserved.rva;
      D.20026 = D.20018 >> 24;
      D.20027 = D.20025 | D.20026;
      header->datadir.pe_reserved.rva = D.20027;
      D.20028 = header->datadir.pe_reserved.size;
      D.20029 = D.20028 << 24;
      D.20028 = header->datadir.pe_reserved.size;
      D.20030 = D.20028 >> 8;
      D.20031 = D.20030 & 65280;
      D.20032 = D.20029 | D.20031;
      D.20028 = header->datadir.pe_reserved.size;
      D.20033 = D.20028 << 8;
      D.20034 = D.20033 & 16711680;
      D.20035 = D.20032 | D.20034;
      D.20028 = header->datadir.pe_reserved.size;
      D.20036 = D.20028 >> 24;
      D.20037 = D.20035 | D.20036;
      header->datadir.pe_reserved.size = D.20037;
      D.19221 = offset;
      return D.19221;
    }
  finally
    {
      header64 = {CLOBBER};
    }
}


load_section_tables (struct MonoImage * image, struct MonoCLIImageInfo * iinfo, guint32 offset)
{
  short unsigned int D.20040;
  long unsigned int D.20041;
  long unsigned int D.20042;
  void * D.20043;
  long unsigned int D.20044;
  void * D.20045;
  struct MonoSectionTable * D.20046;
  long unsigned int D.20047;
  long unsigned int D.20048;
  long unsigned int D.20049;
  long unsigned int D.20050;
  unsigned int D.20051;
  long unsigned int D.20052;
  int D.20055;
  char * D.20056;
  sizetype D.20057;
  char * D.20058;
  unsigned int D.20059;
  unsigned int D.20060;
  unsigned int D.20061;
  unsigned int D.20062;
  unsigned int D.20063;
  unsigned int D.20064;
  unsigned int D.20065;
  unsigned int D.20066;
  unsigned int D.20067;
  unsigned int D.20068;
  unsigned int D.20069;
  unsigned int D.20070;
  unsigned int D.20071;
  unsigned int D.20072;
  unsigned int D.20073;
  unsigned int D.20074;
  unsigned int D.20075;
  unsigned int D.20076;
  unsigned int D.20077;
  unsigned int D.20078;
  unsigned int D.20079;
  unsigned int D.20080;
  unsigned int D.20081;
  unsigned int D.20082;
  unsigned int D.20083;
  unsigned int D.20084;
  unsigned int D.20085;
  unsigned int D.20086;
  unsigned int D.20087;
  unsigned int D.20088;
  unsigned int D.20089;
  unsigned int D.20090;
  unsigned int D.20091;
  unsigned int D.20092;
  unsigned int D.20093;
  unsigned int D.20094;
  unsigned int D.20095;
  unsigned int D.20096;
  unsigned int D.20097;
  unsigned int D.20098;
  unsigned int D.20099;
  unsigned int D.20100;
  unsigned int D.20101;
  unsigned int D.20102;
  unsigned int D.20103;
  unsigned int D.20104;
  unsigned int D.20105;
  unsigned int D.20106;
  unsigned int D.20107;
  unsigned int D.20108;
  unsigned int D.20109;
  unsigned int D.20110;
  unsigned int D.20111;
  unsigned int D.20112;
  unsigned int D.20113;
  unsigned int D.20114;
  unsigned int D.20115;
  unsigned int D.20116;
  unsigned int D.20117;
  unsigned int D.20118;
  short unsigned int D.20119;
  short unsigned int D.20120;
  signed short D.20121;
  int D.20122;
  int D.20123;
  signed short D.20124;
  signed short D.20125;
  short unsigned int D.20126;
  short unsigned int D.20127;
  short unsigned int D.20128;
  signed short D.20129;
  int D.20130;
  int D.20131;
  signed short D.20132;
  signed short D.20133;
  short unsigned int D.20134;
  unsigned int D.20135;
  unsigned int D.20136;
  unsigned int D.20137;
  unsigned int D.20138;
  unsigned int D.20139;
  unsigned int D.20140;
  unsigned int D.20141;
  unsigned int D.20142;
  unsigned int D.20143;
  unsigned int D.20144;
  const int top;
  int i;

  D.20040 = iinfo->cli_header.coff.coff_sections;
  top = (const int) D.20040;
  iinfo->cli_section_count = top;
  D.20041 = (long unsigned int) top;
  D.20042 = D.20041 * 40;
  D.20043 = monoeg_malloc0 (D.20042);
  iinfo->cli_section_tables = D.20043;
  D.20041 = (long unsigned int) top;
  D.20044 = D.20041 * 8;
  D.20045 = monoeg_malloc0 (D.20044);
  iinfo->cli_sections = D.20045;
  i = 0;
  goto <D.18535>;
  <D.18534>:
  {
    struct MonoSectionTable * t;

    D.20046 = iinfo->cli_section_tables;
    D.20047 = (long unsigned int) i;
    D.20048 = D.20047 * 40;
    t = D.20046 + D.20048;
    D.20049 = (long unsigned int) offset;
    D.20050 = D.20049 + 40;
    D.20051 = image->raw_data_len;
    D.20052 = (long unsigned int) D.20051;
    if (D.20050 > D.20052) goto <D.20053>; else goto <D.20054>;
    <D.20053>:
    D.20055 = 0;
    return D.20055;
    <D.20054>:
    D.20056 = image->raw_data;
    D.20057 = (sizetype) offset;
    D.20058 = D.20056 + D.20057;
    memcpy (t, D.20058, 40);
    offset = offset + 40;
    D.20059 = t->st_virtual_size;
    D.20060 = D.20059 << 24;
    D.20059 = t->st_virtual_size;
    D.20061 = D.20059 >> 8;
    D.20062 = D.20061 & 65280;
    D.20063 = D.20060 | D.20062;
    D.20059 = t->st_virtual_size;
    D.20064 = D.20059 << 8;
    D.20065 = D.20064 & 16711680;
    D.20066 = D.20063 | D.20065;
    D.20059 = t->st_virtual_size;
    D.20067 = D.20059 >> 24;
    D.20068 = D.20066 | D.20067;
    t->st_virtual_size = D.20068;
    D.20069 = t->st_virtual_address;
    D.20070 = D.20069 << 24;
    D.20069 = t->st_virtual_address;
    D.20071 = D.20069 >> 8;
    D.20072 = D.20071 & 65280;
    D.20073 = D.20070 | D.20072;
    D.20069 = t->st_virtual_address;
    D.20074 = D.20069 << 8;
    D.20075 = D.20074 & 16711680;
    D.20076 = D.20073 | D.20075;
    D.20069 = t->st_virtual_address;
    D.20077 = D.20069 >> 24;
    D.20078 = D.20076 | D.20077;
    t->st_virtual_address = D.20078;
    D.20079 = t->st_raw_data_size;
    D.20080 = D.20079 << 24;
    D.20079 = t->st_raw_data_size;
    D.20081 = D.20079 >> 8;
    D.20082 = D.20081 & 65280;
    D.20083 = D.20080 | D.20082;
    D.20079 = t->st_raw_data_size;
    D.20084 = D.20079 << 8;
    D.20085 = D.20084 & 16711680;
    D.20086 = D.20083 | D.20085;
    D.20079 = t->st_raw_data_size;
    D.20087 = D.20079 >> 24;
    D.20088 = D.20086 | D.20087;
    t->st_raw_data_size = D.20088;
    D.20089 = t->st_raw_data_ptr;
    D.20090 = D.20089 << 24;
    D.20089 = t->st_raw_data_ptr;
    D.20091 = D.20089 >> 8;
    D.20092 = D.20091 & 65280;
    D.20093 = D.20090 | D.20092;
    D.20089 = t->st_raw_data_ptr;
    D.20094 = D.20089 << 8;
    D.20095 = D.20094 & 16711680;
    D.20096 = D.20093 | D.20095;
    D.20089 = t->st_raw_data_ptr;
    D.20097 = D.20089 >> 24;
    D.20098 = D.20096 | D.20097;
    t->st_raw_data_ptr = D.20098;
    D.20099 = t->st_reloc_ptr;
    D.20100 = D.20099 << 24;
    D.20099 = t->st_reloc_ptr;
    D.20101 = D.20099 >> 8;
    D.20102 = D.20101 & 65280;
    D.20103 = D.20100 | D.20102;
    D.20099 = t->st_reloc_ptr;
    D.20104 = D.20099 << 8;
    D.20105 = D.20104 & 16711680;
    D.20106 = D.20103 | D.20105;
    D.20099 = t->st_reloc_ptr;
    D.20107 = D.20099 >> 24;
    D.20108 = D.20106 | D.20107;
    t->st_reloc_ptr = D.20108;
    D.20109 = t->st_lineno_ptr;
    D.20110 = D.20109 << 24;
    D.20109 = t->st_lineno_ptr;
    D.20111 = D.20109 >> 8;
    D.20112 = D.20111 & 65280;
    D.20113 = D.20110 | D.20112;
    D.20109 = t->st_lineno_ptr;
    D.20114 = D.20109 << 8;
    D.20115 = D.20114 & 16711680;
    D.20116 = D.20113 | D.20115;
    D.20109 = t->st_lineno_ptr;
    D.20117 = D.20109 >> 24;
    D.20118 = D.20116 | D.20117;
    t->st_lineno_ptr = D.20118;
    D.20119 = t->st_reloc_count;
    D.20120 = D.20119 >> 8;
    D.20121 = (signed short) D.20120;
    D.20119 = t->st_reloc_count;
    D.20122 = (int) D.20119;
    D.20123 = D.20122 << 8;
    D.20124 = (signed short) D.20123;
    D.20125 = D.20121 | D.20124;
    D.20126 = (short unsigned int) D.20125;
    t->st_reloc_count = D.20126;
    D.20127 = t->st_line_count;
    D.20128 = D.20127 >> 8;
    D.20129 = (signed short) D.20128;
    D.20127 = t->st_line_count;
    D.20130 = (int) D.20127;
    D.20131 = D.20130 << 8;
    D.20132 = (signed short) D.20131;
    D.20133 = D.20129 | D.20132;
    D.20134 = (short unsigned int) D.20133;
    t->st_line_count = D.20134;
    D.20135 = t->st_flags;
    D.20136 = D.20135 << 24;
    D.20135 = t->st_flags;
    D.20137 = D.20135 >> 8;
    D.20138 = D.20137 & 65280;
    D.20139 = D.20136 | D.20138;
    D.20135 = t->st_flags;
    D.20140 = D.20135 << 8;
    D.20141 = D.20140 & 16711680;
    D.20142 = D.20139 | D.20141;
    D.20135 = t->st_flags;
    D.20143 = D.20135 >> 24;
    D.20144 = D.20142 | D.20143;
    t->st_flags = D.20144;
  }
  i = i + 1;
  <D.18535>:
  if (i < top) goto <D.18534>; else goto <D.18536>;
  <D.18536>:
  D.20055 = 1;
  return D.20055;
}


__attribute__((visibility ("hidden")))
mono_image_load_cli_data (struct MonoImage * image)
{
  int D.20146;
  gboolean D.20149;
  int D.20150;
  struct MonoCLIImageInfo * iinfo;
  struct MonoDotNetHeader * header;

  iinfo = image->image_info;
  header = &iinfo->cli_header;
  D.20146 = load_cli_header (image, iinfo);
  if (D.20146 == 0) goto <D.20147>; else goto <D.20148>;
  <D.20147>:
  D.20149 = 0;
  return D.20149;
  <D.20148>:
  D.20150 = load_metadata (image, iinfo);
  if (D.20150 == 0) goto <D.20151>; else goto <D.20152>;
  <D.20151>:
  D.20149 = 0;
  return D.20149;
  <D.20152>:
  D.20149 = 1;
  return D.20149;
}


load_cli_header (struct MonoImage * image, struct MonoCLIImageInfo * iinfo)
{
  unsigned int D.20154;
  gboolean D.20157;
  long unsigned int D.20158;
  long unsigned int D.20159;
  unsigned int D.20160;
  long unsigned int D.20161;
  struct MonoCLIHeader * D.20164;
  char * D.20165;
  sizetype D.20166;
  char * D.20167;
  unsigned int D.20168;
  unsigned int D.20169;
  unsigned int D.20170;
  unsigned int D.20171;
  unsigned int D.20172;
  unsigned int D.20173;
  unsigned int D.20174;
  unsigned int D.20175;
  unsigned int D.20176;
  unsigned int D.20177;
  unsigned int D.20178;
  unsigned int D.20179;
  unsigned int D.20180;
  unsigned int D.20181;
  unsigned int D.20182;
  unsigned int D.20183;
  unsigned int D.20184;
  unsigned int D.20185;
  unsigned int D.20186;
  unsigned int D.20187;
  unsigned int D.20188;
  unsigned int D.20189;
  unsigned int D.20190;
  unsigned int D.20191;
  unsigned int D.20192;
  unsigned int D.20193;
  unsigned int D.20194;
  unsigned int D.20195;
  unsigned int D.20196;
  unsigned int D.20197;
  short unsigned int D.20198;
  short unsigned int D.20199;
  signed short D.20200;
  int D.20201;
  int D.20202;
  signed short D.20203;
  signed short D.20204;
  short unsigned int D.20205;
  short unsigned int D.20206;
  short unsigned int D.20207;
  signed short D.20208;
  int D.20209;
  int D.20210;
  signed short D.20211;
  signed short D.20212;
  short unsigned int D.20213;
  unsigned int D.20214;
  unsigned int D.20215;
  unsigned int D.20216;
  unsigned int D.20217;
  unsigned int D.20218;
  unsigned int D.20219;
  unsigned int D.20220;
  unsigned int D.20221;
  unsigned int D.20222;
  unsigned int D.20223;
  unsigned int D.20224;
  unsigned int D.20225;
  unsigned int D.20226;
  unsigned int D.20227;
  unsigned int D.20228;
  unsigned int D.20229;
  unsigned int D.20230;
  unsigned int D.20231;
  unsigned int D.20232;
  unsigned int D.20233;
  unsigned int D.20234;
  unsigned int D.20235;
  unsigned int D.20236;
  unsigned int D.20237;
  unsigned int D.20238;
  unsigned int D.20239;
  unsigned int D.20240;
  unsigned int D.20241;
  unsigned int D.20242;
  unsigned int D.20243;
  unsigned int D.20244;
  unsigned int D.20245;
  unsigned int D.20246;
  unsigned int D.20247;
  unsigned int D.20248;
  unsigned int D.20249;
  unsigned int D.20250;
  unsigned int D.20251;
  unsigned int D.20252;
  unsigned int D.20253;
  unsigned int D.20254;
  unsigned int D.20255;
  unsigned int D.20256;
  unsigned int D.20257;
  unsigned int D.20258;
  unsigned int D.20259;
  unsigned int D.20260;
  unsigned int D.20261;
  unsigned int D.20262;
  unsigned int D.20263;
  unsigned int D.20264;
  unsigned int D.20265;
  unsigned int D.20266;
  unsigned int D.20267;
  unsigned int D.20268;
  unsigned int D.20269;
  unsigned int D.20270;
  unsigned int D.20271;
  unsigned int D.20272;
  unsigned int D.20273;
  unsigned int D.20274;
  unsigned int D.20275;
  unsigned int D.20276;
  unsigned int D.20277;
  unsigned int D.20278;
  unsigned int D.20279;
  unsigned int D.20280;
  unsigned int D.20281;
  unsigned int D.20282;
  unsigned int D.20283;
  unsigned int D.20284;
  unsigned int D.20285;
  unsigned int D.20286;
  unsigned int D.20287;
  unsigned int D.20288;
  unsigned int D.20289;
  unsigned int D.20290;
  unsigned int D.20291;
  unsigned int D.20292;
  unsigned int D.20293;
  unsigned int D.20294;
  unsigned int D.20295;
  unsigned int D.20296;
  unsigned int D.20297;
  unsigned int D.20298;
  unsigned int D.20299;
  unsigned int D.20300;
  unsigned int D.20301;
  unsigned int D.20302;
  unsigned int D.20303;
  unsigned int D.20304;
  unsigned int D.20305;
  unsigned int D.20306;
  unsigned int D.20307;
  unsigned int D.20308;
  unsigned int D.20309;
  unsigned int D.20310;
  unsigned int D.20311;
  unsigned int D.20312;
  unsigned int D.20313;
  unsigned int D.20314;
  unsigned int D.20315;
  unsigned int D.20316;
  unsigned int D.20317;
  unsigned int D.20318;
  unsigned int D.20319;
  unsigned int D.20320;
  unsigned int D.20321;
  unsigned int D.20322;
  unsigned int D.20323;
  unsigned int D.20324;
  unsigned int D.20325;
  unsigned int D.20326;
  unsigned int D.20327;
  unsigned int D.20328;
  unsigned int D.20329;
  unsigned int D.20330;
  unsigned int D.20331;
  unsigned int D.20332;
  unsigned int D.20333;
  unsigned int D.20334;
  unsigned int D.20335;
  unsigned int D.20336;
  unsigned int D.20337;
  unsigned int D.20338;
  unsigned int D.20339;
  unsigned int D.20340;
  unsigned int D.20341;
  unsigned int D.20342;
  unsigned int D.20343;
  unsigned int D.20344;
  unsigned int D.20345;
  unsigned int D.20346;
  unsigned int D.20347;
  unsigned int D.20348;
  unsigned int D.20349;
  unsigned int D.20350;
  unsigned int D.20351;
  unsigned int D.20352;
  unsigned int D.20353;
  unsigned int D.20354;
  unsigned int D.20355;
  unsigned int D.20356;
  unsigned int D.20357;
  unsigned int D.20358;
  unsigned int D.20359;
  unsigned int D.20360;
  unsigned int D.20361;
  unsigned int D.20362;
  unsigned int D.20363;
  unsigned int D.20364;
  unsigned int D.20365;
  unsigned int D.20366;
  unsigned int D.20367;
  unsigned int D.20368;
  unsigned int D.20369;
  unsigned int D.20370;
  unsigned int D.20371;
  unsigned int D.20372;
  unsigned int D.20373;
  unsigned int D.20374;
  unsigned int D.20375;
  unsigned int D.20376;
  unsigned int D.20377;
  unsigned int D.20378;
  unsigned int D.20379;
  unsigned int D.20380;
  unsigned int D.20381;
  unsigned int D.20382;
  unsigned int D.20383;
  unsigned int D.20384;
  unsigned int D.20385;
  unsigned int D.20386;
  unsigned int D.20387;
  unsigned int D.20388;
  unsigned int D.20389;
  unsigned int D.20390;
  unsigned int D.20391;
  unsigned int D.20392;
  unsigned int D.20393;
  unsigned int D.20394;
  unsigned int D.20395;
  unsigned int D.20396;
  unsigned int D.20397;
  unsigned int D.20398;
  unsigned int D.20399;
  unsigned int D.20400;
  unsigned int D.20401;
  unsigned int D.20402;
  unsigned int D.20403;
  unsigned int D.20404;
  unsigned int D.20405;
  unsigned int D.20406;
  unsigned int D.20407;
  unsigned int D.20408;
  unsigned int D.20409;
  unsigned int D.20410;
  unsigned int D.20411;
  unsigned int D.20412;
  unsigned int D.20413;
  unsigned int D.20414;
  unsigned int D.20415;
  unsigned int D.20416;
  unsigned int D.20417;
  unsigned int D.20418;
  unsigned int D.20419;
  unsigned int D.20420;
  unsigned int D.20421;
  unsigned int D.20422;
  unsigned int D.20423;
  unsigned int D.20424;
  unsigned int D.20425;
  unsigned int D.20426;
  unsigned int D.20427;
  unsigned int D.20428;
  unsigned int D.20429;
  unsigned int D.20430;
  unsigned int D.20431;
  unsigned int D.20432;
  unsigned int D.20433;
  unsigned int D.20434;
  unsigned int D.20435;
  unsigned int D.20436;
  unsigned int D.20437;
  unsigned int D.20438;
  unsigned int D.20439;
  unsigned int D.20440;
  unsigned int D.20441;
  unsigned int D.20442;
  unsigned int D.20443;
  unsigned int D.20444;
  unsigned int D.20445;
  unsigned int D.20446;
  unsigned int D.20447;
  unsigned int D.20448;
  unsigned int D.20449;
  unsigned int D.20450;
  unsigned int D.20451;
  unsigned int D.20452;
  unsigned int D.20453;
  unsigned int D.20454;
  unsigned int D.20455;
  unsigned int D.20456;
  unsigned int D.20457;
  unsigned int D.20458;
  unsigned int D.20459;
  unsigned int D.20460;
  unsigned int D.20461;
  unsigned int D.20462;
  unsigned int D.20463;
  unsigned int D.20464;
  unsigned int D.20465;
  unsigned int D.20466;
  unsigned int D.20467;
  unsigned int D.20468;
  unsigned int D.20469;
  unsigned int D.20470;
  unsigned int D.20471;
  unsigned int D.20472;
  unsigned int D.20473;
  unsigned int D.20474;
  unsigned int D.20475;
  unsigned int D.20476;
  unsigned int D.20477;
  unsigned int D.20478;
  unsigned int D.20479;
  unsigned int D.20480;
  unsigned int D.20481;
  unsigned int D.20482;
  unsigned int D.20483;
  unsigned int D.20484;
  unsigned int D.20485;
  unsigned int D.20486;
  unsigned int D.20487;
  unsigned int D.20488;
  unsigned int D.20489;
  unsigned int D.20490;
  unsigned int D.20491;
  unsigned int D.20492;
  unsigned int D.20493;
  unsigned int D.20494;
  unsigned int D.20495;
  unsigned int D.20496;
  unsigned int D.20497;
  unsigned int D.20498;
  unsigned int D.20499;
  unsigned int D.20500;
  unsigned int D.20501;
  unsigned int D.20502;
  unsigned int D.20503;
  unsigned int D.20504;
  unsigned int D.20505;
  unsigned int D.20506;
  unsigned int D.20507;
  unsigned int D.20508;
  unsigned int D.20509;
  unsigned int D.20510;
  unsigned int D.20511;
  unsigned int D.20512;
  unsigned int D.20513;
  guint32 offset;

  D.20154 = iinfo->cli_header.datadir.pe_cli_header.rva;
  offset = mono_cli_rva_image_map (image, D.20154);
  if (offset == 4294967295) goto <D.20155>; else goto <D.20156>;
  <D.20155>:
  D.20157 = 0;
  return D.20157;
  <D.20156>:
  D.20158 = (long unsigned int) offset;
  D.20159 = D.20158 + 136;
  D.20160 = image->raw_data_len;
  D.20161 = (long unsigned int) D.20160;
  if (D.20159 > D.20161) goto <D.20162>; else goto <D.20163>;
  <D.20162>:
  D.20157 = 0;
  return D.20157;
  <D.20163>:
  D.20164 = &iinfo->cli_cli_header;
  D.20165 = image->raw_data;
  D.20166 = (sizetype) offset;
  D.20167 = D.20165 + D.20166;
  memcpy (D.20164, D.20167, 136);
  D.20168 = iinfo->cli_cli_header.ch_size;
  D.20169 = D.20168 << 24;
  D.20168 = iinfo->cli_cli_header.ch_size;
  D.20170 = D.20168 >> 8;
  D.20171 = D.20170 & 65280;
  D.20172 = D.20169 | D.20171;
  D.20168 = iinfo->cli_cli_header.ch_size;
  D.20173 = D.20168 << 8;
  D.20174 = D.20173 & 16711680;
  D.20175 = D.20172 | D.20174;
  D.20168 = iinfo->cli_cli_header.ch_size;
  D.20176 = D.20168 >> 24;
  D.20177 = D.20175 | D.20176;
  iinfo->cli_cli_header.ch_size = D.20177;
  D.20178 = iinfo->cli_cli_header.ch_flags;
  D.20179 = D.20178 << 24;
  D.20178 = iinfo->cli_cli_header.ch_flags;
  D.20180 = D.20178 >> 8;
  D.20181 = D.20180 & 65280;
  D.20182 = D.20179 | D.20181;
  D.20178 = iinfo->cli_cli_header.ch_flags;
  D.20183 = D.20178 << 8;
  D.20184 = D.20183 & 16711680;
  D.20185 = D.20182 | D.20184;
  D.20178 = iinfo->cli_cli_header.ch_flags;
  D.20186 = D.20178 >> 24;
  D.20187 = D.20185 | D.20186;
  iinfo->cli_cli_header.ch_flags = D.20187;
  D.20188 = iinfo->cli_cli_header.ch_entry_point;
  D.20189 = D.20188 << 24;
  D.20188 = iinfo->cli_cli_header.ch_entry_point;
  D.20190 = D.20188 >> 8;
  D.20191 = D.20190 & 65280;
  D.20192 = D.20189 | D.20191;
  D.20188 = iinfo->cli_cli_header.ch_entry_point;
  D.20193 = D.20188 << 8;
  D.20194 = D.20193 & 16711680;
  D.20195 = D.20192 | D.20194;
  D.20188 = iinfo->cli_cli_header.ch_entry_point;
  D.20196 = D.20188 >> 24;
  D.20197 = D.20195 | D.20196;
  iinfo->cli_cli_header.ch_entry_point = D.20197;
  D.20198 = iinfo->cli_cli_header.ch_runtime_major;
  D.20199 = D.20198 >> 8;
  D.20200 = (signed short) D.20199;
  D.20198 = iinfo->cli_cli_header.ch_runtime_major;
  D.20201 = (int) D.20198;
  D.20202 = D.20201 << 8;
  D.20203 = (signed short) D.20202;
  D.20204 = D.20200 | D.20203;
  D.20205 = (short unsigned int) D.20204;
  iinfo->cli_cli_header.ch_runtime_major = D.20205;
  D.20206 = iinfo->cli_cli_header.ch_runtime_minor;
  D.20207 = D.20206 >> 8;
  D.20208 = (signed short) D.20207;
  D.20206 = iinfo->cli_cli_header.ch_runtime_minor;
  D.20209 = (int) D.20206;
  D.20210 = D.20209 << 8;
  D.20211 = (signed short) D.20210;
  D.20212 = D.20208 | D.20211;
  D.20213 = (short unsigned int) D.20212;
  iinfo->cli_cli_header.ch_runtime_minor = D.20213;
  D.20214 = iinfo->cli_cli_header.ch_metadata.rva;
  D.20215 = D.20214 << 24;
  D.20214 = iinfo->cli_cli_header.ch_metadata.rva;
  D.20216 = D.20214 >> 8;
  D.20217 = D.20216 & 65280;
  D.20218 = D.20215 | D.20217;
  D.20214 = iinfo->cli_cli_header.ch_metadata.rva;
  D.20219 = D.20214 << 8;
  D.20220 = D.20219 & 16711680;
  D.20221 = D.20218 | D.20220;
  D.20214 = iinfo->cli_cli_header.ch_metadata.rva;
  D.20222 = D.20214 >> 24;
  D.20223 = D.20221 | D.20222;
  iinfo->cli_cli_header.ch_metadata.rva = D.20223;
  D.20224 = iinfo->cli_cli_header.ch_metadata.size;
  D.20225 = D.20224 << 24;
  D.20224 = iinfo->cli_cli_header.ch_metadata.size;
  D.20226 = D.20224 >> 8;
  D.20227 = D.20226 & 65280;
  D.20228 = D.20225 | D.20227;
  D.20224 = iinfo->cli_cli_header.ch_metadata.size;
  D.20229 = D.20224 << 8;
  D.20230 = D.20229 & 16711680;
  D.20231 = D.20228 | D.20230;
  D.20224 = iinfo->cli_cli_header.ch_metadata.size;
  D.20232 = D.20224 >> 24;
  D.20233 = D.20231 | D.20232;
  iinfo->cli_cli_header.ch_metadata.size = D.20233;
  D.20234 = iinfo->cli_cli_header.ch_resources.rva;
  D.20235 = D.20234 << 24;
  D.20234 = iinfo->cli_cli_header.ch_resources.rva;
  D.20236 = D.20234 >> 8;
  D.20237 = D.20236 & 65280;
  D.20238 = D.20235 | D.20237;
  D.20234 = iinfo->cli_cli_header.ch_resources.rva;
  D.20239 = D.20234 << 8;
  D.20240 = D.20239 & 16711680;
  D.20241 = D.20238 | D.20240;
  D.20234 = iinfo->cli_cli_header.ch_resources.rva;
  D.20242 = D.20234 >> 24;
  D.20243 = D.20241 | D.20242;
  iinfo->cli_cli_header.ch_resources.rva = D.20243;
  D.20244 = iinfo->cli_cli_header.ch_resources.size;
  D.20245 = D.20244 << 24;
  D.20244 = iinfo->cli_cli_header.ch_resources.size;
  D.20246 = D.20244 >> 8;
  D.20247 = D.20246 & 65280;
  D.20248 = D.20245 | D.20247;
  D.20244 = iinfo->cli_cli_header.ch_resources.size;
  D.20249 = D.20244 << 8;
  D.20250 = D.20249 & 16711680;
  D.20251 = D.20248 | D.20250;
  D.20244 = iinfo->cli_cli_header.ch_resources.size;
  D.20252 = D.20244 >> 24;
  D.20253 = D.20251 | D.20252;
  iinfo->cli_cli_header.ch_resources.size = D.20253;
  D.20254 = iinfo->cli_cli_header.ch_strong_name.rva;
  D.20255 = D.20254 << 24;
  D.20254 = iinfo->cli_cli_header.ch_strong_name.rva;
  D.20256 = D.20254 >> 8;
  D.20257 = D.20256 & 65280;
  D.20258 = D.20255 | D.20257;
  D.20254 = iinfo->cli_cli_header.ch_strong_name.rva;
  D.20259 = D.20254 << 8;
  D.20260 = D.20259 & 16711680;
  D.20261 = D.20258 | D.20260;
  D.20254 = iinfo->cli_cli_header.ch_strong_name.rva;
  D.20262 = D.20254 >> 24;
  D.20263 = D.20261 | D.20262;
  iinfo->cli_cli_header.ch_strong_name.rva = D.20263;
  D.20264 = iinfo->cli_cli_header.ch_strong_name.size;
  D.20265 = D.20264 << 24;
  D.20264 = iinfo->cli_cli_header.ch_strong_name.size;
  D.20266 = D.20264 >> 8;
  D.20267 = D.20266 & 65280;
  D.20268 = D.20265 | D.20267;
  D.20264 = iinfo->cli_cli_header.ch_strong_name.size;
  D.20269 = D.20264 << 8;
  D.20270 = D.20269 & 16711680;
  D.20271 = D.20268 | D.20270;
  D.20264 = iinfo->cli_cli_header.ch_strong_name.size;
  D.20272 = D.20264 >> 24;
  D.20273 = D.20271 | D.20272;
  iinfo->cli_cli_header.ch_strong_name.size = D.20273;
  D.20274 = iinfo->cli_cli_header.ch_code_manager_table.rva;
  D.20275 = D.20274 << 24;
  D.20274 = iinfo->cli_cli_header.ch_code_manager_table.rva;
  D.20276 = D.20274 >> 8;
  D.20277 = D.20276 & 65280;
  D.20278 = D.20275 | D.20277;
  D.20274 = iinfo->cli_cli_header.ch_code_manager_table.rva;
  D.20279 = D.20274 << 8;
  D.20280 = D.20279 & 16711680;
  D.20281 = D.20278 | D.20280;
  D.20274 = iinfo->cli_cli_header.ch_code_manager_table.rva;
  D.20282 = D.20274 >> 24;
  D.20283 = D.20281 | D.20282;
  iinfo->cli_cli_header.ch_code_manager_table.rva = D.20283;
  D.20284 = iinfo->cli_cli_header.ch_code_manager_table.size;
  D.20285 = D.20284 << 24;
  D.20284 = iinfo->cli_cli_header.ch_code_manager_table.size;
  D.20286 = D.20284 >> 8;
  D.20287 = D.20286 & 65280;
  D.20288 = D.20285 | D.20287;
  D.20284 = iinfo->cli_cli_header.ch_code_manager_table.size;
  D.20289 = D.20284 << 8;
  D.20290 = D.20289 & 16711680;
  D.20291 = D.20288 | D.20290;
  D.20284 = iinfo->cli_cli_header.ch_code_manager_table.size;
  D.20292 = D.20284 >> 24;
  D.20293 = D.20291 | D.20292;
  iinfo->cli_cli_header.ch_code_manager_table.size = D.20293;
  D.20294 = iinfo->cli_cli_header.ch_vtable_fixups.rva;
  D.20295 = D.20294 << 24;
  D.20294 = iinfo->cli_cli_header.ch_vtable_fixups.rva;
  D.20296 = D.20294 >> 8;
  D.20297 = D.20296 & 65280;
  D.20298 = D.20295 | D.20297;
  D.20294 = iinfo->cli_cli_header.ch_vtable_fixups.rva;
  D.20299 = D.20294 << 8;
  D.20300 = D.20299 & 16711680;
  D.20301 = D.20298 | D.20300;
  D.20294 = iinfo->cli_cli_header.ch_vtable_fixups.rva;
  D.20302 = D.20294 >> 24;
  D.20303 = D.20301 | D.20302;
  iinfo->cli_cli_header.ch_vtable_fixups.rva = D.20303;
  D.20304 = iinfo->cli_cli_header.ch_vtable_fixups.size;
  D.20305 = D.20304 << 24;
  D.20304 = iinfo->cli_cli_header.ch_vtable_fixups.size;
  D.20306 = D.20304 >> 8;
  D.20307 = D.20306 & 65280;
  D.20308 = D.20305 | D.20307;
  D.20304 = iinfo->cli_cli_header.ch_vtable_fixups.size;
  D.20309 = D.20304 << 8;
  D.20310 = D.20309 & 16711680;
  D.20311 = D.20308 | D.20310;
  D.20304 = iinfo->cli_cli_header.ch_vtable_fixups.size;
  D.20312 = D.20304 >> 24;
  D.20313 = D.20311 | D.20312;
  iinfo->cli_cli_header.ch_vtable_fixups.size = D.20313;
  D.20314 = iinfo->cli_cli_header.ch_export_address_table_jumps.rva;
  D.20315 = D.20314 << 24;
  D.20314 = iinfo->cli_cli_header.ch_export_address_table_jumps.rva;
  D.20316 = D.20314 >> 8;
  D.20317 = D.20316 & 65280;
  D.20318 = D.20315 | D.20317;
  D.20314 = iinfo->cli_cli_header.ch_export_address_table_jumps.rva;
  D.20319 = D.20314 << 8;
  D.20320 = D.20319 & 16711680;
  D.20321 = D.20318 | D.20320;
  D.20314 = iinfo->cli_cli_header.ch_export_address_table_jumps.rva;
  D.20322 = D.20314 >> 24;
  D.20323 = D.20321 | D.20322;
  iinfo->cli_cli_header.ch_export_address_table_jumps.rva = D.20323;
  D.20324 = iinfo->cli_cli_header.ch_export_address_table_jumps.size;
  D.20325 = D.20324 << 24;
  D.20324 = iinfo->cli_cli_header.ch_export_address_table_jumps.size;
  D.20326 = D.20324 >> 8;
  D.20327 = D.20326 & 65280;
  D.20328 = D.20325 | D.20327;
  D.20324 = iinfo->cli_cli_header.ch_export_address_table_jumps.size;
  D.20329 = D.20324 << 8;
  D.20330 = D.20329 & 16711680;
  D.20331 = D.20328 | D.20330;
  D.20324 = iinfo->cli_cli_header.ch_export_address_table_jumps.size;
  D.20332 = D.20324 >> 24;
  D.20333 = D.20331 | D.20332;
  iinfo->cli_cli_header.ch_export_address_table_jumps.size = D.20333;
  D.20334 = iinfo->cli_cli_header.ch_eeinfo_table.rva;
  D.20335 = D.20334 << 24;
  D.20334 = iinfo->cli_cli_header.ch_eeinfo_table.rva;
  D.20336 = D.20334 >> 8;
  D.20337 = D.20336 & 65280;
  D.20338 = D.20335 | D.20337;
  D.20334 = iinfo->cli_cli_header.ch_eeinfo_table.rva;
  D.20339 = D.20334 << 8;
  D.20340 = D.20339 & 16711680;
  D.20341 = D.20338 | D.20340;
  D.20334 = iinfo->cli_cli_header.ch_eeinfo_table.rva;
  D.20342 = D.20334 >> 24;
  D.20343 = D.20341 | D.20342;
  iinfo->cli_cli_header.ch_eeinfo_table.rva = D.20343;
  D.20344 = iinfo->cli_cli_header.ch_eeinfo_table.size;
  D.20345 = D.20344 << 24;
  D.20344 = iinfo->cli_cli_header.ch_eeinfo_table.size;
  D.20346 = D.20344 >> 8;
  D.20347 = D.20346 & 65280;
  D.20348 = D.20345 | D.20347;
  D.20344 = iinfo->cli_cli_header.ch_eeinfo_table.size;
  D.20349 = D.20344 << 8;
  D.20350 = D.20349 & 16711680;
  D.20351 = D.20348 | D.20350;
  D.20344 = iinfo->cli_cli_header.ch_eeinfo_table.size;
  D.20352 = D.20344 >> 24;
  D.20353 = D.20351 | D.20352;
  iinfo->cli_cli_header.ch_eeinfo_table.size = D.20353;
  D.20354 = iinfo->cli_cli_header.ch_helper_table.rva;
  D.20355 = D.20354 << 24;
  D.20354 = iinfo->cli_cli_header.ch_helper_table.rva;
  D.20356 = D.20354 >> 8;
  D.20357 = D.20356 & 65280;
  D.20358 = D.20355 | D.20357;
  D.20354 = iinfo->cli_cli_header.ch_helper_table.rva;
  D.20359 = D.20354 << 8;
  D.20360 = D.20359 & 16711680;
  D.20361 = D.20358 | D.20360;
  D.20354 = iinfo->cli_cli_header.ch_helper_table.rva;
  D.20362 = D.20354 >> 24;
  D.20363 = D.20361 | D.20362;
  iinfo->cli_cli_header.ch_helper_table.rva = D.20363;
  D.20364 = iinfo->cli_cli_header.ch_helper_table.size;
  D.20365 = D.20364 << 24;
  D.20364 = iinfo->cli_cli_header.ch_helper_table.size;
  D.20366 = D.20364 >> 8;
  D.20367 = D.20366 & 65280;
  D.20368 = D.20365 | D.20367;
  D.20364 = iinfo->cli_cli_header.ch_helper_table.size;
  D.20369 = D.20364 << 8;
  D.20370 = D.20369 & 16711680;
  D.20371 = D.20368 | D.20370;
  D.20364 = iinfo->cli_cli_header.ch_helper_table.size;
  D.20372 = D.20364 >> 24;
  D.20373 = D.20371 | D.20372;
  iinfo->cli_cli_header.ch_helper_table.size = D.20373;
  D.20374 = iinfo->cli_cli_header.ch_dynamic_info.rva;
  D.20375 = D.20374 << 24;
  D.20374 = iinfo->cli_cli_header.ch_dynamic_info.rva;
  D.20376 = D.20374 >> 8;
  D.20377 = D.20376 & 65280;
  D.20378 = D.20375 | D.20377;
  D.20374 = iinfo->cli_cli_header.ch_dynamic_info.rva;
  D.20379 = D.20374 << 8;
  D.20380 = D.20379 & 16711680;
  D.20381 = D.20378 | D.20380;
  D.20374 = iinfo->cli_cli_header.ch_dynamic_info.rva;
  D.20382 = D.20374 >> 24;
  D.20383 = D.20381 | D.20382;
  iinfo->cli_cli_header.ch_dynamic_info.rva = D.20383;
  D.20384 = iinfo->cli_cli_header.ch_dynamic_info.size;
  D.20385 = D.20384 << 24;
  D.20384 = iinfo->cli_cli_header.ch_dynamic_info.size;
  D.20386 = D.20384 >> 8;
  D.20387 = D.20386 & 65280;
  D.20388 = D.20385 | D.20387;
  D.20384 = iinfo->cli_cli_header.ch_dynamic_info.size;
  D.20389 = D.20384 << 8;
  D.20390 = D.20389 & 16711680;
  D.20391 = D.20388 | D.20390;
  D.20384 = iinfo->cli_cli_header.ch_dynamic_info.size;
  D.20392 = D.20384 >> 24;
  D.20393 = D.20391 | D.20392;
  iinfo->cli_cli_header.ch_dynamic_info.size = D.20393;
  D.20394 = iinfo->cli_cli_header.ch_delay_load_info.rva;
  D.20395 = D.20394 << 24;
  D.20394 = iinfo->cli_cli_header.ch_delay_load_info.rva;
  D.20396 = D.20394 >> 8;
  D.20397 = D.20396 & 65280;
  D.20398 = D.20395 | D.20397;
  D.20394 = iinfo->cli_cli_header.ch_delay_load_info.rva;
  D.20399 = D.20394 << 8;
  D.20400 = D.20399 & 16711680;
  D.20401 = D.20398 | D.20400;
  D.20394 = iinfo->cli_cli_header.ch_delay_load_info.rva;
  D.20402 = D.20394 >> 24;
  D.20403 = D.20401 | D.20402;
  iinfo->cli_cli_header.ch_delay_load_info.rva = D.20403;
  D.20404 = iinfo->cli_cli_header.ch_delay_load_info.size;
  D.20405 = D.20404 << 24;
  D.20404 = iinfo->cli_cli_header.ch_delay_load_info.size;
  D.20406 = D.20404 >> 8;
  D.20407 = D.20406 & 65280;
  D.20408 = D.20405 | D.20407;
  D.20404 = iinfo->cli_cli_header.ch_delay_load_info.size;
  D.20409 = D.20404 << 8;
  D.20410 = D.20409 & 16711680;
  D.20411 = D.20408 | D.20410;
  D.20404 = iinfo->cli_cli_header.ch_delay_load_info.size;
  D.20412 = D.20404 >> 24;
  D.20413 = D.20411 | D.20412;
  iinfo->cli_cli_header.ch_delay_load_info.size = D.20413;
  D.20414 = iinfo->cli_cli_header.ch_module_image.rva;
  D.20415 = D.20414 << 24;
  D.20414 = iinfo->cli_cli_header.ch_module_image.rva;
  D.20416 = D.20414 >> 8;
  D.20417 = D.20416 & 65280;
  D.20418 = D.20415 | D.20417;
  D.20414 = iinfo->cli_cli_header.ch_module_image.rva;
  D.20419 = D.20414 << 8;
  D.20420 = D.20419 & 16711680;
  D.20421 = D.20418 | D.20420;
  D.20414 = iinfo->cli_cli_header.ch_module_image.rva;
  D.20422 = D.20414 >> 24;
  D.20423 = D.20421 | D.20422;
  iinfo->cli_cli_header.ch_module_image.rva = D.20423;
  D.20424 = iinfo->cli_cli_header.ch_module_image.size;
  D.20425 = D.20424 << 24;
  D.20424 = iinfo->cli_cli_header.ch_module_image.size;
  D.20426 = D.20424 >> 8;
  D.20427 = D.20426 & 65280;
  D.20428 = D.20425 | D.20427;
  D.20424 = iinfo->cli_cli_header.ch_module_image.size;
  D.20429 = D.20424 << 8;
  D.20430 = D.20429 & 16711680;
  D.20431 = D.20428 | D.20430;
  D.20424 = iinfo->cli_cli_header.ch_module_image.size;
  D.20432 = D.20424 >> 24;
  D.20433 = D.20431 | D.20432;
  iinfo->cli_cli_header.ch_module_image.size = D.20433;
  D.20434 = iinfo->cli_cli_header.ch_external_fixups.rva;
  D.20435 = D.20434 << 24;
  D.20434 = iinfo->cli_cli_header.ch_external_fixups.rva;
  D.20436 = D.20434 >> 8;
  D.20437 = D.20436 & 65280;
  D.20438 = D.20435 | D.20437;
  D.20434 = iinfo->cli_cli_header.ch_external_fixups.rva;
  D.20439 = D.20434 << 8;
  D.20440 = D.20439 & 16711680;
  D.20441 = D.20438 | D.20440;
  D.20434 = iinfo->cli_cli_header.ch_external_fixups.rva;
  D.20442 = D.20434 >> 24;
  D.20443 = D.20441 | D.20442;
  iinfo->cli_cli_header.ch_external_fixups.rva = D.20443;
  D.20444 = iinfo->cli_cli_header.ch_external_fixups.size;
  D.20445 = D.20444 << 24;
  D.20444 = iinfo->cli_cli_header.ch_external_fixups.size;
  D.20446 = D.20444 >> 8;
  D.20447 = D.20446 & 65280;
  D.20448 = D.20445 | D.20447;
  D.20444 = iinfo->cli_cli_header.ch_external_fixups.size;
  D.20449 = D.20444 << 8;
  D.20450 = D.20449 & 16711680;
  D.20451 = D.20448 | D.20450;
  D.20444 = iinfo->cli_cli_header.ch_external_fixups.size;
  D.20452 = D.20444 >> 24;
  D.20453 = D.20451 | D.20452;
  iinfo->cli_cli_header.ch_external_fixups.size = D.20453;
  D.20454 = iinfo->cli_cli_header.ch_ridmap.rva;
  D.20455 = D.20454 << 24;
  D.20454 = iinfo->cli_cli_header.ch_ridmap.rva;
  D.20456 = D.20454 >> 8;
  D.20457 = D.20456 & 65280;
  D.20458 = D.20455 | D.20457;
  D.20454 = iinfo->cli_cli_header.ch_ridmap.rva;
  D.20459 = D.20454 << 8;
  D.20460 = D.20459 & 16711680;
  D.20461 = D.20458 | D.20460;
  D.20454 = iinfo->cli_cli_header.ch_ridmap.rva;
  D.20462 = D.20454 >> 24;
  D.20463 = D.20461 | D.20462;
  iinfo->cli_cli_header.ch_ridmap.rva = D.20463;
  D.20464 = iinfo->cli_cli_header.ch_ridmap.size;
  D.20465 = D.20464 << 24;
  D.20464 = iinfo->cli_cli_header.ch_ridmap.size;
  D.20466 = D.20464 >> 8;
  D.20467 = D.20466 & 65280;
  D.20468 = D.20465 | D.20467;
  D.20464 = iinfo->cli_cli_header.ch_ridmap.size;
  D.20469 = D.20464 << 8;
  D.20470 = D.20469 & 16711680;
  D.20471 = D.20468 | D.20470;
  D.20464 = iinfo->cli_cli_header.ch_ridmap.size;
  D.20472 = D.20464 >> 24;
  D.20473 = D.20471 | D.20472;
  iinfo->cli_cli_header.ch_ridmap.size = D.20473;
  D.20474 = iinfo->cli_cli_header.ch_debug_map.rva;
  D.20475 = D.20474 << 24;
  D.20474 = iinfo->cli_cli_header.ch_debug_map.rva;
  D.20476 = D.20474 >> 8;
  D.20477 = D.20476 & 65280;
  D.20478 = D.20475 | D.20477;
  D.20474 = iinfo->cli_cli_header.ch_debug_map.rva;
  D.20479 = D.20474 << 8;
  D.20480 = D.20479 & 16711680;
  D.20481 = D.20478 | D.20480;
  D.20474 = iinfo->cli_cli_header.ch_debug_map.rva;
  D.20482 = D.20474 >> 24;
  D.20483 = D.20481 | D.20482;
  iinfo->cli_cli_header.ch_debug_map.rva = D.20483;
  D.20484 = iinfo->cli_cli_header.ch_debug_map.size;
  D.20485 = D.20484 << 24;
  D.20484 = iinfo->cli_cli_header.ch_debug_map.size;
  D.20486 = D.20484 >> 8;
  D.20487 = D.20486 & 65280;
  D.20488 = D.20485 | D.20487;
  D.20484 = iinfo->cli_cli_header.ch_debug_map.size;
  D.20489 = D.20484 << 8;
  D.20490 = D.20489 & 16711680;
  D.20491 = D.20488 | D.20490;
  D.20484 = iinfo->cli_cli_header.ch_debug_map.size;
  D.20492 = D.20484 >> 24;
  D.20493 = D.20491 | D.20492;
  iinfo->cli_cli_header.ch_debug_map.size = D.20493;
  D.20494 = iinfo->cli_cli_header.ch_ip_map.rva;
  D.20495 = D.20494 << 24;
  D.20494 = iinfo->cli_cli_header.ch_ip_map.rva;
  D.20496 = D.20494 >> 8;
  D.20497 = D.20496 & 65280;
  D.20498 = D.20495 | D.20497;
  D.20494 = iinfo->cli_cli_header.ch_ip_map.rva;
  D.20499 = D.20494 << 8;
  D.20500 = D.20499 & 16711680;
  D.20501 = D.20498 | D.20500;
  D.20494 = iinfo->cli_cli_header.ch_ip_map.rva;
  D.20502 = D.20494 >> 24;
  D.20503 = D.20501 | D.20502;
  iinfo->cli_cli_header.ch_ip_map.rva = D.20503;
  D.20504 = iinfo->cli_cli_header.ch_ip_map.size;
  D.20505 = D.20504 << 24;
  D.20504 = iinfo->cli_cli_header.ch_ip_map.size;
  D.20506 = D.20504 >> 8;
  D.20507 = D.20506 & 65280;
  D.20508 = D.20505 | D.20507;
  D.20504 = iinfo->cli_cli_header.ch_ip_map.size;
  D.20509 = D.20504 << 8;
  D.20510 = D.20509 & 16711680;
  D.20511 = D.20508 | D.20510;
  D.20504 = iinfo->cli_cli_header.ch_ip_map.size;
  D.20512 = D.20504 >> 24;
  D.20513 = D.20511 | D.20512;
  iinfo->cli_cli_header.ch_ip_map.size = D.20513;
  D.20334 = iinfo->cli_cli_header.ch_eeinfo_table.rva;
  if (D.20334 != 0) goto <D.20514>; else goto <D.20515>;
  <D.20515>:
  D.20354 = iinfo->cli_cli_header.ch_helper_table.rva;
  if (D.20354 != 0) goto <D.20516>; else goto <D.20517>;
  <D.20517>:
  D.20374 = iinfo->cli_cli_header.ch_dynamic_info.rva;
  if (D.20374 != 0) goto <D.20518>; else goto <D.20519>;
  <D.20519>:
  D.20394 = iinfo->cli_cli_header.ch_delay_load_info.rva;
  if (D.20394 != 0) goto <D.20520>; else goto <D.20521>;
  <D.20521>:
  D.20414 = iinfo->cli_cli_header.ch_module_image.rva;
  if (D.20414 != 0) goto <D.20522>; else goto <D.20523>;
  <D.20523>:
  D.20434 = iinfo->cli_cli_header.ch_external_fixups.rva;
  if (D.20434 != 0) goto <D.20524>; else goto <D.20525>;
  <D.20525>:
  D.20454 = iinfo->cli_cli_header.ch_ridmap.rva;
  if (D.20454 != 0) goto <D.20526>; else goto <D.20527>;
  <D.20527>:
  D.20474 = iinfo->cli_cli_header.ch_debug_map.rva;
  if (D.20474 != 0) goto <D.20528>; else goto <D.20529>;
  <D.20529>:
  D.20494 = iinfo->cli_cli_header.ch_ip_map.rva;
  if (D.20494 != 0) goto <D.20530>; else goto <D.20531>;
  <D.20530>:
  <D.20531>:
  <D.20528>:
  <D.20526>:
  <D.20524>:
  <D.20522>:
  <D.20520>:
  <D.20518>:
  <D.20516>:
  <D.20514>:
  D.20157 = 1;
  return D.20157;
}


load_metadata (struct MonoImage * image, struct MonoCLIImageInfo * iinfo)
{
  int D.20533;
  gboolean D.20536;

  D.20533 = load_metadata_ptrs (image, iinfo);
  if (D.20533 == 0) goto <D.20534>; else goto <D.20535>;
  <D.20534>:
  D.20536 = 0;
  return D.20536;
  <D.20535>:
  D.20536 = load_tables (image);
  return D.20536;
}


load_metadata_ptrs (struct MonoImage * image, struct MonoCLIImageInfo * iinfo)
{
  unsigned int D.20538;
  gboolean D.20541;
  unsigned int D.20542;
  unsigned int D.20543;
  char * D.20546;
  sizetype D.20547;
  char * D.20548;
  _Bool iftmp.11;
  long unsigned int D.20550;
  int D.20553;
  int D.20555;
  short unsigned int D.20558;
  short unsigned int D.20559;
  short int D.20560;
  int D.20561;
  int D.20562;
  short int D.20563;
  short int D.20564;
  unsigned int D.20565;
  unsigned int D.20566;
  unsigned int D.20567;
  unsigned int D.20568;
  unsigned int D.20569;
  unsigned int D.20570;
  unsigned int D.20571;
  unsigned int D.20572;
  unsigned int D.20573;
  long unsigned int D.20574;
  gchar * D.20575;
  sizetype D.20576;
  long int ptr.12;
  char * D.20578;
  long int D.20579;
  long int D.20580;
  unsigned int D.20581;
  unsigned int D.20584;
  sizetype D.20585;
  signed short D.20587;
  signed short D.20588;
  signed short D.20589;
  _Bool iftmp.13;
  long unsigned int D.20591;
  char * D.20594;
  int D.20595;
  int D.20597;
  unsigned int D.20600;
  sizetype D.20601;
  char * D.20602;
  char * D.20603;
  unsigned int D.20604;
  unsigned int D.20605;
  unsigned int D.20606;
  unsigned int D.20607;
  unsigned int D.20608;
  unsigned int D.20609;
  unsigned int D.20610;
  unsigned int D.20611;
  unsigned int D.20612;
  unsigned int D.20613;
  _Bool iftmp.14;
  long unsigned int D.20616;
  int D.20619;
  int D.20621;
  _Bool iftmp.15;
  long unsigned int D.20626;
  int D.20629;
  int D.20631;
  _Bool iftmp.16;
  long unsigned int D.20636;
  int D.20639;
  int D.20641;
  _Bool iftmp.17;
  long unsigned int D.20646;
  int D.20649;
  int D.20651;
  _Bool iftmp.18;
  long unsigned int D.20656;
  int D.20659;
  int D.20661;
  char * D.20664;
  long unsigned int D.20666;
  long unsigned int D.20667;
  int D.20670;
  const char * D.20671;
  _Bool D.20672;
  long int D.20673;
  long int D.20674;
  unsigned int D.20677;
  _Bool D.20678;
  long int D.20679;
  long int D.20680;
  char * D.20683;
  guint32 offset;
  guint32 size;
  guint16 streams;
  int i;
  guint32 pad;
  char * ptr;

  D.20538 = iinfo->cli_cli_header.ch_metadata.rva;
  offset = mono_cli_rva_image_map (image, D.20538);
  if (offset == 4294967295) goto <D.20539>; else goto <D.20540>;
  <D.20539>:
  D.20541 = 0;
  return D.20541;
  <D.20540>:
  size = iinfo->cli_cli_header.ch_metadata.size;
  D.20542 = offset + size;
  D.20543 = image->raw_data_len;
  if (D.20542 > D.20543) goto <D.20544>; else goto <D.20545>;
  <D.20544>:
  D.20541 = 0;
  return D.20541;
  <D.20545>:
  D.20546 = image->raw_data;
  D.20547 = (sizetype) offset;
  D.20548 = D.20546 + D.20547;
  image->raw_metadata = D.20548;
  ptr = image->raw_metadata;
  D.20550 = __strlen_g ("BSJB");
  if (D.20550 <= 3) goto <D.20551>; else goto <D.20552>;
  <D.20551>:
  D.20553 = strcmp (ptr, "BSJB");
  iftmp.11 = D.20553 == 0;
  goto <D.20554>;
  <D.20552>:
  D.20555 = strncmp (ptr, "BSJB", 4);
  iftmp.11 = D.20555 == 0;
  <D.20554>:
  if (iftmp.11 != 0) goto <D.20556>; else goto <D.20557>;
  <D.20556>:
  {
    guint32 version_string_len;

    ptr = ptr + 4;
    D.20558 = MEM[(const guint16 *)ptr];
    D.20559 = D.20558 >> 8;
    D.20560 = (short int) D.20559;
    D.20558 = MEM[(const guint16 *)ptr];
    D.20561 = (int) D.20558;
    D.20562 = D.20561 << 8;
    D.20563 = (short int) D.20562;
    D.20564 = D.20560 | D.20563;
    image->md_version_major = D.20564;
    ptr = ptr + 2;
    D.20558 = MEM[(const guint16 *)ptr];
    D.20559 = D.20558 >> 8;
    D.20560 = (short int) D.20559;
    D.20558 = MEM[(const guint16 *)ptr];
    D.20561 = (int) D.20558;
    D.20562 = D.20561 << 8;
    D.20563 = (short int) D.20562;
    D.20564 = D.20560 | D.20563;
    image->md_version_minor = D.20564;
    ptr = ptr + 6;
    D.20565 = MEM[(const guint32 *)ptr];
    D.20566 = D.20565 << 24;
    D.20565 = MEM[(const guint32 *)ptr];
    D.20567 = D.20565 >> 8;
    D.20568 = D.20567 & 65280;
    D.20569 = D.20566 | D.20568;
    D.20565 = MEM[(const guint32 *)ptr];
    D.20570 = D.20565 << 8;
    D.20571 = D.20570 & 16711680;
    D.20572 = D.20569 | D.20571;
    D.20565 = MEM[(const guint32 *)ptr];
    D.20573 = D.20565 >> 24;
    version_string_len = D.20572 | D.20573;
    ptr = ptr + 4;
    D.20574 = (long unsigned int) version_string_len;
    D.20575 = monoeg_g_strndup (ptr, D.20574);
    image->version = D.20575;
    D.20576 = (sizetype) version_string_len;
    ptr = ptr + D.20576;
    ptr.12 = (long int) ptr;
    D.20578 = image->raw_metadata;
    D.20579 = (long int) D.20578;
    D.20580 = ptr.12 - D.20579;
    pad = (guint32) D.20580;
    D.20581 = pad & 3;
    if (D.20581 != 0) goto <D.20582>; else goto <D.20583>;
    <D.20582>:
    D.20581 = pad & 3;
    D.20584 = 4 - D.20581;
    D.20585 = (sizetype) D.20584;
    ptr = ptr + D.20585;
    <D.20583>:
  }
  goto <D.20586>;
  <D.20557>:
  D.20541 = 0;
  return D.20541;
  <D.20586>:
  ptr = ptr + 2;
  D.20558 = MEM[(const guint16 *)ptr];
  D.20559 = D.20558 >> 8;
  D.20587 = (signed short) D.20559;
  D.20558 = MEM[(const guint16 *)ptr];
  D.20561 = (int) D.20558;
  D.20562 = D.20561 << 8;
  D.20588 = (signed short) D.20562;
  D.20589 = D.20587 | D.20588;
  streams = (guint16) D.20589;
  ptr = ptr + 2;
  i = 0;
  goto <D.18554>;
  <D.18553>:
  D.20591 = __strlen_g ("#~");
  if (D.20591 <= 2) goto <D.20592>; else goto <D.20593>;
  <D.20592>:
  D.20594 = ptr + 8;
  D.20595 = strcmp (D.20594, "#~");
  iftmp.13 = D.20595 == 0;
  goto <D.20596>;
  <D.20593>:
  D.20594 = ptr + 8;
  D.20597 = strncmp (D.20594, "#~", 3);
  iftmp.13 = D.20597 == 0;
  <D.20596>:
  if (iftmp.13 != 0) goto <D.20598>; else goto <D.20599>;
  <D.20598>:
  D.20578 = image->raw_metadata;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20566 = D.20565 << 24;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20567 = D.20565 >> 8;
  D.20568 = D.20567 & 65280;
  D.20569 = D.20566 | D.20568;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20570 = D.20565 << 8;
  D.20571 = D.20570 & 16711680;
  D.20572 = D.20569 | D.20571;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20573 = D.20565 >> 24;
  D.20600 = D.20572 | D.20573;
  D.20601 = (sizetype) D.20600;
  D.20602 = D.20578 + D.20601;
  image->heap_tables.data = D.20602;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20605 = D.20604 << 24;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20606 = D.20604 >> 8;
  D.20607 = D.20606 & 65280;
  D.20608 = D.20605 | D.20607;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20609 = D.20604 << 8;
  D.20610 = D.20609 & 16711680;
  D.20611 = D.20608 | D.20610;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20612 = D.20604 >> 24;
  D.20613 = D.20611 | D.20612;
  image->heap_tables.size = D.20613;
  ptr = ptr + 11;
  goto <D.20614>;
  <D.20599>:
  D.20616 = __strlen_g ("#Strings");
  if (D.20616 <= 8) goto <D.20617>; else goto <D.20618>;
  <D.20617>:
  D.20594 = ptr + 8;
  D.20619 = strcmp (D.20594, "#Strings");
  iftmp.14 = D.20619 == 0;
  goto <D.20620>;
  <D.20618>:
  D.20594 = ptr + 8;
  D.20621 = strncmp (D.20594, "#Strings", 9);
  iftmp.14 = D.20621 == 0;
  <D.20620>:
  if (iftmp.14 != 0) goto <D.20622>; else goto <D.20623>;
  <D.20622>:
  D.20578 = image->raw_metadata;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20566 = D.20565 << 24;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20567 = D.20565 >> 8;
  D.20568 = D.20567 & 65280;
  D.20569 = D.20566 | D.20568;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20570 = D.20565 << 8;
  D.20571 = D.20570 & 16711680;
  D.20572 = D.20569 | D.20571;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20573 = D.20565 >> 24;
  D.20600 = D.20572 | D.20573;
  D.20601 = (sizetype) D.20600;
  D.20602 = D.20578 + D.20601;
  image->heap_strings.data = D.20602;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20605 = D.20604 << 24;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20606 = D.20604 >> 8;
  D.20607 = D.20606 & 65280;
  D.20608 = D.20605 | D.20607;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20609 = D.20604 << 8;
  D.20610 = D.20609 & 16711680;
  D.20611 = D.20608 | D.20610;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20612 = D.20604 >> 24;
  D.20613 = D.20611 | D.20612;
  image->heap_strings.size = D.20613;
  ptr = ptr + 17;
  goto <D.20624>;
  <D.20623>:
  D.20626 = __strlen_g ("#US");
  if (D.20626 <= 3) goto <D.20627>; else goto <D.20628>;
  <D.20627>:
  D.20594 = ptr + 8;
  D.20629 = strcmp (D.20594, "#US");
  iftmp.15 = D.20629 == 0;
  goto <D.20630>;
  <D.20628>:
  D.20594 = ptr + 8;
  D.20631 = strncmp (D.20594, "#US", 4);
  iftmp.15 = D.20631 == 0;
  <D.20630>:
  if (iftmp.15 != 0) goto <D.20632>; else goto <D.20633>;
  <D.20632>:
  D.20578 = image->raw_metadata;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20566 = D.20565 << 24;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20567 = D.20565 >> 8;
  D.20568 = D.20567 & 65280;
  D.20569 = D.20566 | D.20568;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20570 = D.20565 << 8;
  D.20571 = D.20570 & 16711680;
  D.20572 = D.20569 | D.20571;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20573 = D.20565 >> 24;
  D.20600 = D.20572 | D.20573;
  D.20601 = (sizetype) D.20600;
  D.20602 = D.20578 + D.20601;
  image->heap_us.data = D.20602;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20605 = D.20604 << 24;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20606 = D.20604 >> 8;
  D.20607 = D.20606 & 65280;
  D.20608 = D.20605 | D.20607;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20609 = D.20604 << 8;
  D.20610 = D.20609 & 16711680;
  D.20611 = D.20608 | D.20610;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20612 = D.20604 >> 24;
  D.20613 = D.20611 | D.20612;
  image->heap_us.size = D.20613;
  ptr = ptr + 12;
  goto <D.20634>;
  <D.20633>:
  D.20636 = __strlen_g ("#Blob");
  if (D.20636 <= 5) goto <D.20637>; else goto <D.20638>;
  <D.20637>:
  D.20594 = ptr + 8;
  D.20639 = strcmp (D.20594, "#Blob");
  iftmp.16 = D.20639 == 0;
  goto <D.20640>;
  <D.20638>:
  D.20594 = ptr + 8;
  D.20641 = strncmp (D.20594, "#Blob", 6);
  iftmp.16 = D.20641 == 0;
  <D.20640>:
  if (iftmp.16 != 0) goto <D.20642>; else goto <D.20643>;
  <D.20642>:
  D.20578 = image->raw_metadata;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20566 = D.20565 << 24;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20567 = D.20565 >> 8;
  D.20568 = D.20567 & 65280;
  D.20569 = D.20566 | D.20568;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20570 = D.20565 << 8;
  D.20571 = D.20570 & 16711680;
  D.20572 = D.20569 | D.20571;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20573 = D.20565 >> 24;
  D.20600 = D.20572 | D.20573;
  D.20601 = (sizetype) D.20600;
  D.20602 = D.20578 + D.20601;
  image->heap_blob.data = D.20602;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20605 = D.20604 << 24;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20606 = D.20604 >> 8;
  D.20607 = D.20606 & 65280;
  D.20608 = D.20605 | D.20607;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20609 = D.20604 << 8;
  D.20610 = D.20609 & 16711680;
  D.20611 = D.20608 | D.20610;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20612 = D.20604 >> 24;
  D.20613 = D.20611 | D.20612;
  image->heap_blob.size = D.20613;
  ptr = ptr + 14;
  goto <D.20644>;
  <D.20643>:
  D.20646 = __strlen_g ("#GUID");
  if (D.20646 <= 5) goto <D.20647>; else goto <D.20648>;
  <D.20647>:
  D.20594 = ptr + 8;
  D.20649 = strcmp (D.20594, "#GUID");
  iftmp.17 = D.20649 == 0;
  goto <D.20650>;
  <D.20648>:
  D.20594 = ptr + 8;
  D.20651 = strncmp (D.20594, "#GUID", 6);
  iftmp.17 = D.20651 == 0;
  <D.20650>:
  if (iftmp.17 != 0) goto <D.20652>; else goto <D.20653>;
  <D.20652>:
  D.20578 = image->raw_metadata;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20566 = D.20565 << 24;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20567 = D.20565 >> 8;
  D.20568 = D.20567 & 65280;
  D.20569 = D.20566 | D.20568;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20570 = D.20565 << 8;
  D.20571 = D.20570 & 16711680;
  D.20572 = D.20569 | D.20571;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20573 = D.20565 >> 24;
  D.20600 = D.20572 | D.20573;
  D.20601 = (sizetype) D.20600;
  D.20602 = D.20578 + D.20601;
  image->heap_guid.data = D.20602;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20605 = D.20604 << 24;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20606 = D.20604 >> 8;
  D.20607 = D.20606 & 65280;
  D.20608 = D.20605 | D.20607;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20609 = D.20604 << 8;
  D.20610 = D.20609 & 16711680;
  D.20611 = D.20608 | D.20610;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20612 = D.20604 >> 24;
  D.20613 = D.20611 | D.20612;
  image->heap_guid.size = D.20613;
  ptr = ptr + 14;
  goto <D.20654>;
  <D.20653>:
  D.20656 = __strlen_g ("#-");
  if (D.20656 <= 2) goto <D.20657>; else goto <D.20658>;
  <D.20657>:
  D.20594 = ptr + 8;
  D.20659 = strcmp (D.20594, "#-");
  iftmp.18 = D.20659 == 0;
  goto <D.20660>;
  <D.20658>:
  D.20594 = ptr + 8;
  D.20661 = strncmp (D.20594, "#-", 3);
  iftmp.18 = D.20661 == 0;
  <D.20660>:
  if (iftmp.18 != 0) goto <D.20662>; else goto <D.20663>;
  <D.20662>:
  D.20578 = image->raw_metadata;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20566 = D.20565 << 24;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20567 = D.20565 >> 8;
  D.20568 = D.20567 & 65280;
  D.20569 = D.20566 | D.20568;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20570 = D.20565 << 8;
  D.20571 = D.20570 & 16711680;
  D.20572 = D.20569 | D.20571;
  D.20565 = MEM[(const guint32 *)ptr];
  D.20573 = D.20565 >> 24;
  D.20600 = D.20572 | D.20573;
  D.20601 = (sizetype) D.20600;
  D.20602 = D.20578 + D.20601;
  image->heap_tables.data = D.20602;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20605 = D.20604 << 24;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20606 = D.20604 >> 8;
  D.20607 = D.20606 & 65280;
  D.20608 = D.20605 | D.20607;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20609 = D.20604 << 8;
  D.20610 = D.20609 & 16711680;
  D.20611 = D.20608 | D.20610;
  D.20603 = ptr + 4;
  D.20604 = MEM[(const guint32 *)D.20603];
  D.20612 = D.20604 >> 24;
  D.20613 = D.20611 | D.20612;
  image->heap_tables.size = D.20613;
  ptr = ptr + 11;
  image->uncompressed_metadata = 1;
  D.20664 = image->name;
  mono_trace (64, 1, "Assembly \'%s\' has the non-standard metadata heap #-.\nRecompile it correctly (without the /incremental switch or in Release mode).\n", D.20664);
  goto <D.20665>;
  <D.20663>:
  D.20594 = ptr + 8;
  monoeg_g_log (0B, 32, "Unknown heap type: %s\n", D.20594);
  D.20594 = ptr + 8;
  D.20666 = __strlen_g (D.20594);
  D.20667 = D.20666 + 9;
  ptr = ptr + D.20667;
  <D.20665>:
  <D.20654>:
  <D.20644>:
  <D.20634>:
  <D.20624>:
  <D.20614>:
  ptr.12 = (long int) ptr;
  D.20578 = image->raw_metadata;
  D.20579 = (long int) D.20578;
  D.20580 = ptr.12 - D.20579;
  pad = (guint32) D.20580;
  D.20581 = pad & 3;
  if (D.20581 != 0) goto <D.20668>; else goto <D.20669>;
  <D.20668>:
  D.20581 = pad & 3;
  D.20584 = 4 - D.20581;
  D.20585 = (sizetype) D.20584;
  ptr = ptr + D.20585;
  <D.20669>:
  i = i + 1;
  <D.18554>:
  D.20670 = (int) streams;
  if (D.20670 > i) goto <D.18553>; else goto <D.18555>;
  <D.18555>:
  D.20671 = image->heap_guid.data;
  D.20672 = D.20671 == 0B;
  D.20673 = (long int) D.20672;
  D.20674 = __builtin_expect (D.20673, 0);
  if (D.20674 != 0) goto <D.20675>; else goto <D.20676>;
  <D.20675>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 465, "image->heap_guid.data");
  <D.20676>:
  D.20677 = image->heap_guid.size;
  D.20678 = D.20677 <= 15;
  D.20679 = (long int) D.20678;
  D.20680 = __builtin_expect (D.20679, 0);
  if (D.20680 != 0) goto <D.20681>; else goto <D.20682>;
  <D.20681>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 466, "image->heap_guid.size >= 16");
  <D.20682>:
  D.20671 = image->heap_guid.data;
  D.20683 = mono_guid_to_string (D.20671);
  image->guid = D.20683;
  D.20541 = 1;
  return D.20541;
}


__attribute__((__gnu_inline__))
__strlen_g (const char * __str)
{
  size_t D.20685;
  long int __ptr.19;
  long int __str.20;
  long int D.20688;
  char * __ptr;
  char * __tmp;

  __ptr = 0B;
  __tmp = __str;
  __asm__ __volatile__("   la    0,0
0: srst  %0,%1
   jo    0b
" : "=&a" __ptr, "=&a" __tmp : "0" __ptr, "1" __tmp : "0", "memory", "cc");
  __ptr.19 = (long int) __ptr;
  __str.20 = (long int) __str;
  D.20688 = __ptr.19 - __str.20;
  D.20685 = (size_t) D.20688;
  return D.20685;
}


load_tables (struct MonoImage * image)
{
  const char * D.20690;
  char D.20691;
  int D.20692;
  _Bool D.20693;
  int D.20694;
  _Bool D.20695;
  int D.20696;
  _Bool D.20697;
  const char * D.20698;
  long unsigned int D.20699;
  unsigned int D.20700;
  unsigned int D.20701;
  unsigned int D.20702;
  unsigned int D.20703;
  unsigned int D.20704;
  unsigned int D.20705;
  unsigned int D.20706;
  unsigned int D.20707;
  unsigned int D.20708;
  unsigned int D.20709;
  long unsigned int D.20710;
  long unsigned int D.20711;
  long unsigned int D.20712;
  unsigned int D.20713;
  unsigned int D.20714;
  unsigned int D.20715;
  unsigned int D.20716;
  unsigned int D.20717;
  unsigned int D.20718;
  unsigned int D.20719;
  unsigned int D.20720;
  unsigned int D.20721;
  unsigned int D.20722;
  long unsigned int D.20723;
  const char * D.20724;
  long unsigned int D.20725;
  unsigned int D.20726;
  unsigned int D.20727;
  unsigned int D.20728;
  unsigned int D.20729;
  unsigned int D.20730;
  unsigned int D.20731;
  unsigned int D.20732;
  unsigned int D.20733;
  unsigned int D.20734;
  unsigned int D.20735;
  long unsigned int D.20736;
  long unsigned int D.20737;
  long unsigned int D.20738;
  unsigned int D.20739;
  unsigned int D.20740;
  unsigned int D.20741;
  unsigned int D.20742;
  unsigned int D.20743;
  unsigned int D.20744;
  unsigned int D.20745;
  unsigned int D.20746;
  unsigned int D.20747;
  unsigned int D.20748;
  long unsigned int D.20749;
  long unsigned int D.20750;
  long unsigned int D.20751;
  unsigned int D.20759;
  unsigned int D.20760;
  unsigned int D.20761;
  unsigned int D.20762;
  unsigned int D.20763;
  unsigned int D.20764;
  unsigned int D.20765;
  unsigned int D.20766;
  unsigned int D.20767;
  unsigned int D.20768;
  <unnamed-unsigned:24> D.20769;
  int D.20770;
  sizetype D.20771;
  sizetype D.20772;
  const char * D.20773;
  const char * D.20774;
  _Bool D.20775;
  long int D.20776;
  long int D.20777;
  gboolean D.20780;
  const char * heap_tables;
  const guint32 * rows;
  guint64 valid_mask;
  guint64 sorted_mask;
  int valid;
  int table;
  int heap_sizes;

  heap_tables = image->heap_tables.data;
  valid = 0;
  D.20690 = heap_tables + 6;
  D.20691 = *D.20690;
  heap_sizes = (int) D.20691;
  D.20692 = heap_sizes & 1;
  D.20693 = D.20692 != 0;
  image->idx_string_wide = D.20693;
  D.20694 = heap_sizes & 2;
  D.20695 = D.20694 != 0;
  image->idx_guid_wide = D.20695;
  D.20696 = heap_sizes & 4;
  D.20697 = D.20696 != 0;
  image->idx_blob_wide = D.20697;
  D.20698 = heap_tables + 8;
  D.20699 = MEM[(const guint64 *)D.20698];
  D.20700 = (unsigned int) D.20699;
  D.20701 = D.20700 << 24;
  D.20698 = heap_tables + 8;
  D.20699 = MEM[(const guint64 *)D.20698];
  D.20700 = (unsigned int) D.20699;
  D.20702 = D.20700 >> 8;
  D.20703 = D.20702 & 65280;
  D.20704 = D.20701 | D.20703;
  D.20698 = heap_tables + 8;
  D.20699 = MEM[(const guint64 *)D.20698];
  D.20700 = (unsigned int) D.20699;
  D.20705 = D.20700 << 8;
  D.20706 = D.20705 & 16711680;
  D.20707 = D.20704 | D.20706;
  D.20698 = heap_tables + 8;
  D.20699 = MEM[(const guint64 *)D.20698];
  D.20700 = (unsigned int) D.20699;
  D.20708 = D.20700 >> 24;
  D.20709 = D.20707 | D.20708;
  D.20710 = (long unsigned int) D.20709;
  D.20711 = D.20710 << 32;
  D.20698 = heap_tables + 8;
  D.20699 = MEM[(const guint64 *)D.20698];
  D.20712 = D.20699 >> 32;
  D.20713 = (unsigned int) D.20712;
  D.20714 = D.20713 << 24;
  D.20698 = heap_tables + 8;
  D.20699 = MEM[(const guint64 *)D.20698];
  D.20712 = D.20699 >> 32;
  D.20713 = (unsigned int) D.20712;
  D.20715 = D.20713 >> 8;
  D.20716 = D.20715 & 65280;
  D.20717 = D.20714 | D.20716;
  D.20698 = heap_tables + 8;
  D.20699 = MEM[(const guint64 *)D.20698];
  D.20712 = D.20699 >> 32;
  D.20713 = (unsigned int) D.20712;
  D.20718 = D.20713 << 8;
  D.20719 = D.20718 & 16711680;
  D.20720 = D.20717 | D.20719;
  D.20698 = heap_tables + 8;
  D.20699 = MEM[(const guint64 *)D.20698];
  D.20712 = D.20699 >> 32;
  D.20713 = (unsigned int) D.20712;
  D.20721 = D.20713 >> 24;
  D.20722 = D.20720 | D.20721;
  D.20723 = (long unsigned int) D.20722;
  valid_mask = D.20711 | D.20723;
  D.20724 = heap_tables + 16;
  D.20725 = MEM[(const guint64 *)D.20724];
  D.20726 = (unsigned int) D.20725;
  D.20727 = D.20726 << 24;
  D.20724 = heap_tables + 16;
  D.20725 = MEM[(const guint64 *)D.20724];
  D.20726 = (unsigned int) D.20725;
  D.20728 = D.20726 >> 8;
  D.20729 = D.20728 & 65280;
  D.20730 = D.20727 | D.20729;
  D.20724 = heap_tables + 16;
  D.20725 = MEM[(const guint64 *)D.20724];
  D.20726 = (unsigned int) D.20725;
  D.20731 = D.20726 << 8;
  D.20732 = D.20731 & 16711680;
  D.20733 = D.20730 | D.20732;
  D.20724 = heap_tables + 16;
  D.20725 = MEM[(const guint64 *)D.20724];
  D.20726 = (unsigned int) D.20725;
  D.20734 = D.20726 >> 24;
  D.20735 = D.20733 | D.20734;
  D.20736 = (long unsigned int) D.20735;
  D.20737 = D.20736 << 32;
  D.20724 = heap_tables + 16;
  D.20725 = MEM[(const guint64 *)D.20724];
  D.20738 = D.20725 >> 32;
  D.20739 = (unsigned int) D.20738;
  D.20740 = D.20739 << 24;
  D.20724 = heap_tables + 16;
  D.20725 = MEM[(const guint64 *)D.20724];
  D.20738 = D.20725 >> 32;
  D.20739 = (unsigned int) D.20738;
  D.20741 = D.20739 >> 8;
  D.20742 = D.20741 & 65280;
  D.20743 = D.20740 | D.20742;
  D.20724 = heap_tables + 16;
  D.20725 = MEM[(const guint64 *)D.20724];
  D.20738 = D.20725 >> 32;
  D.20739 = (unsigned int) D.20738;
  D.20744 = D.20739 << 8;
  D.20745 = D.20744 & 16711680;
  D.20746 = D.20743 | D.20745;
  D.20724 = heap_tables + 16;
  D.20725 = MEM[(const guint64 *)D.20724];
  D.20738 = D.20725 >> 32;
  D.20739 = (unsigned int) D.20738;
  D.20747 = D.20739 >> 24;
  D.20748 = D.20746 | D.20747;
  D.20749 = (long unsigned int) D.20748;
  sorted_mask = D.20737 | D.20749;
  rows = heap_tables + 24;
  table = 0;
  goto <D.18568>;
  <D.18567>:
  D.20750 = valid_mask >> table;
  D.20751 = D.20750 & 1;
  if (D.20751 == 0) goto <D.20752>; else goto <D.20753>;
  <D.20752>:
  if (table > 44) goto <D.20754>; else goto <D.20755>;
  <D.20754>:
  // predicted unlikely by continue predictor.
  goto <D.18566>;
  <D.20755>:
  image->tables[table].rows = 0;
  // predicted unlikely by continue predictor.
  goto <D.18566>;
  <D.20753>:
  if (table > 44) goto <D.20756>; else goto <D.20757>;
  <D.20756>:
  monoeg_g_log (0B, 16, "bits in valid must be zero above 0x2d (II - 23.1.6)");
  goto <D.20758>;
  <D.20757>:
  D.20759 = *rows;
  D.20760 = D.20759 << 24;
  D.20759 = *rows;
  D.20761 = D.20759 >> 8;
  D.20762 = D.20761 & 65280;
  D.20763 = D.20760 | D.20762;
  D.20759 = *rows;
  D.20764 = D.20759 << 8;
  D.20765 = D.20764 & 16711680;
  D.20766 = D.20763 | D.20765;
  D.20759 = *rows;
  D.20767 = D.20759 >> 24;
  D.20768 = D.20766 | D.20767;
  D.20769 = (<unnamed-unsigned:24>) D.20768;
  image->tables[table].rows = D.20769;
  <D.20758>:
  rows = rows + 4;
  valid = valid + 1;
  <D.18566>:
  table = table + 1;
  <D.18568>:
  if (table <= 63) goto <D.18567>; else goto <D.18569>;
  <D.18569>:
  D.20770 = valid * 4;
  D.20771 = (sizetype) D.20770;
  D.20772 = D.20771 + 24;
  D.20773 = heap_tables + D.20772;
  image->tables_base = D.20773;
  D.20774 = image->tables_base;
  D.20775 = D.20774 != rows;
  D.20776 = (long int) D.20775;
  D.20777 = __builtin_expect (D.20776, 0);
  if (D.20777 != 0) goto <D.20778>; else goto <D.20779>;
  <D.20778>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 516, "(const void *) image->tables_base == (const void *) rows");
  <D.20779>:
  mono_metadata_compute_table_bases (image);
  D.20780 = 1;
  return D.20780;
}


__attribute__((visibility ("hidden")))
mono_image_load_names (struct MonoImage * image)
{
  long unsigned int D.20782;
  long unsigned int D.20783;
  struct MonoTableInfo * D.20786;
  unsigned int D.20787;
  const char * D.20788;
  struct MonoTableInfo * D.20789;
  unsigned int D.20790;
  const char * D.20791;

  D.20782 = BIT_FIELD_REF <*image, 64, 5696>;
  D.20783 = D.20782 & 18446742974197923840;
  if (D.20783 != 0) goto <D.20784>; else goto <D.20785>;
  <D.20784>:
  D.20786 = &image->tables[32];
  D.20787 = mono_metadata_decode_row_col (D.20786, 0, 7);
  D.20788 = mono_metadata_string_heap (image, D.20787);
  image->assembly_name = D.20788;
  <D.20785>:
  D.20789 = &image->tables[0];
  D.20790 = mono_metadata_decode_row_col (D.20789, 0, 1);
  D.20791 = mono_metadata_string_heap (image, D.20790);
  image->module_name = D.20791;
}


mono_image_loaded_full (const char * name, gboolean refonly)
{
  struct GHashTable * iftmp.21;
  int mutex_inited.22;
  _Bool D.20801;
  long int D.20802;
  long int D.20803;
  _Bool D.20810;
  long int D.20811;
  long int D.20812;
  struct MonoImage * D.20815;
  struct MonoImage * res;
  struct GHashTable * loaded_images;

  if (refonly != 0) goto <D.20793>; else goto <D.20794>;
  <D.20793>:
  iftmp.21 = loaded_images_refonly_hash;
  goto <D.20795>;
  <D.20794>:
  iftmp.21 = loaded_images_hash;
  <D.20795>:
  loaded_images = iftmp.21;
  mutex_inited.22 = mutex_inited;
  if (mutex_inited.22 != 0) goto <D.20797>; else goto <D.20798>;
  <D.20797>:
  {
    int ret;

    ret = pthread_mutex_lock (&images_mutex.mutex);
    if (ret != 0) goto <D.20799>; else goto <D.20800>;
    <D.20799>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.20800>:
    D.20801 = ret != 0;
    D.20802 = (long int) D.20801;
    D.20803 = __builtin_expect (D.20802, 0);
    if (D.20803 != 0) goto <D.20804>; else goto <D.20805>;
    <D.20804>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1060, "ret == 0");
    <D.20805>:
  }
  <D.20798>:
  res = monoeg_g_hash_table_lookup (loaded_images, name);
  mutex_inited.22 = mutex_inited;
  if (mutex_inited.22 != 0) goto <D.20806>; else goto <D.20807>;
  <D.20806>:
  {
    int ret;

    ret = pthread_mutex_unlock (&images_mutex.mutex);
    if (ret != 0) goto <D.20808>; else goto <D.20809>;
    <D.20808>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.20809>:
    D.20810 = ret != 0;
    D.20811 = (long int) D.20810;
    D.20812 = __builtin_expect (D.20811, 0);
    if (D.20812 != 0) goto <D.20813>; else goto <D.20814>;
    <D.20813>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1062, "ret == 0");
    <D.20814>:
  }
  <D.20807>:
  D.20815 = res;
  return D.20815;
}


mono_image_loaded (const char * name)
{
  struct MonoImage * D.20817;

  D.20817 = mono_image_loaded_full (name, 0);
  return D.20817;
}


mono_image_loaded_by_guid_full (const char * guid, gboolean refonly)
{
  struct GHashTable * iftmp.23;
  int mutex_inited.24;
  _Bool D.20828;
  long int D.20829;
  long int D.20830;
  _Bool D.20837;
  long int D.20838;
  long int D.20839;
  struct MonoImage * D.20842;
  struct GuidData data;
  struct GHashTable * loaded_images;

  try
    {
      if (refonly != 0) goto <D.20820>; else goto <D.20821>;
      <D.20820>:
      iftmp.23 = loaded_images_refonly_hash;
      goto <D.20822>;
      <D.20821>:
      iftmp.23 = loaded_images_hash;
      <D.20822>:
      loaded_images = iftmp.23;
      data.res = 0B;
      data.guid = guid;
      mutex_inited.24 = mutex_inited;
      if (mutex_inited.24 != 0) goto <D.20824>; else goto <D.20825>;
      <D.20824>:
      {
        int ret;

        ret = pthread_mutex_lock (&images_mutex.mutex);
        if (ret != 0) goto <D.20826>; else goto <D.20827>;
        <D.20826>:
        monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
        <D.20827>:
        D.20828 = ret != 0;
        D.20829 = (long int) D.20828;
        D.20830 = __builtin_expect (D.20829, 0);
        if (D.20830 != 0) goto <D.20831>; else goto <D.20832>;
        <D.20831>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1106, "ret == 0");
        <D.20832>:
      }
      <D.20825>:
      monoeg_g_hash_table_foreach (loaded_images, find_by_guid, &data);
      mutex_inited.24 = mutex_inited;
      if (mutex_inited.24 != 0) goto <D.20833>; else goto <D.20834>;
      <D.20833>:
      {
        int ret;

        ret = pthread_mutex_unlock (&images_mutex.mutex);
        if (ret != 0) goto <D.20835>; else goto <D.20836>;
        <D.20835>:
        monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
        <D.20836>:
        D.20837 = ret != 0;
        D.20838 = (long int) D.20837;
        D.20839 = __builtin_expect (D.20838, 0);
        if (D.20839 != 0) goto <D.20840>; else goto <D.20841>;
        <D.20840>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1108, "ret == 0");
        <D.20841>:
      }
      <D.20834>:
      D.20842 = data.res;
      return D.20842;
    }
  finally
    {
      data = {CLOBBER};
    }
}


find_by_guid (void * key, void * val, void * user_data)
{
  struct MonoImage * D.20845;
  const char * D.20848;
  const char * D.20849;
  int D.20850;
  struct GuidData * data;
  struct MonoImage * image;

  data = user_data;
  D.20845 = data->res;
  if (D.20845 != 0B) goto <D.20846>; else goto <D.20847>;
  <D.20846>:
  return;
  <D.20847>:
  image = val;
  D.20848 = data->guid;
  D.20849 = mono_image_get_guid (image);
  D.20850 = strcmp (D.20848, D.20849);
  if (D.20850 == 0) goto <D.20851>; else goto <D.20852>;
  <D.20851>:
  data->res = image;
  <D.20852>:
}


mono_image_loaded_by_guid (const char * guid)
{
  struct MonoImage * D.20854;

  D.20854 = mono_image_loaded_by_guid_full (guid, 0);
  return D.20854;
}


mono_image_open_from_data_with_name (char * data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus * status, gboolean refonly, const char * name)
{
  struct MonoImage * D.20861;
  long unsigned int D.20864;
  long unsigned int D.20869;
  unsigned char D.20870;
  <unnamed-unsigned:1> D.20871;
  gchar * iftmp.25;
  unsigned char D.20876;
  <unnamed-unsigned:1> D.20877;
  struct MonoCLIImageInfo * iinfo;
  struct MonoImage * image;
  char * datac;

  if (data == 0B) goto <D.20856>; else goto <D.20858>;
  <D.20858>:
  if (data_len == 0) goto <D.20856>; else goto <D.20857>;
  <D.20856>:
  if (status != 0B) goto <D.20859>; else goto <D.20860>;
  <D.20859>:
  *status = 3;
  <D.20860>:
  D.20861 = 0B;
  return D.20861;
  <D.20857>:
  datac = data;
  if (need_copy != 0) goto <D.20862>; else goto <D.20863>;
  <D.20862>:
  D.20864 = (long unsigned int) data_len;
  datac = monoeg_try_malloc (D.20864);
  if (datac == 0B) goto <D.20865>; else goto <D.20866>;
  <D.20865>:
  if (status != 0B) goto <D.20867>; else goto <D.20868>;
  <D.20867>:
  *status = 1;
  <D.20868>:
  D.20861 = 0B;
  return D.20861;
  <D.20866>:
  D.20869 = (long unsigned int) data_len;
  memcpy (datac, data, D.20869);
  <D.20863>:
  image = monoeg_malloc0 (1568);
  image->raw_data = datac;
  image->raw_data_len = data_len;
  D.20870 = (unsigned char) need_copy;
  D.20871 = (<unnamed-unsigned:1>) D.20870;
  image->raw_data_allocated = D.20871;
  if (name == 0B) goto <D.20873>; else goto <D.20874>;
  <D.20873>:
  iftmp.25 = monoeg_g_strdup_printf ("data-%p", datac);
  goto <D.20875>;
  <D.20874>:
  iftmp.25 = monoeg_strdup (name);
  <D.20875>:
  image->name = iftmp.25;
  iinfo = monoeg_malloc0 (408);
  image->image_info = iinfo;
  D.20876 = (unsigned char) refonly;
  D.20877 = (<unnamed-unsigned:1>) D.20876;
  image->ref_only = D.20877;
  image = do_mono_image_load (image, status, 1, 1);
  if (image == 0B) goto <D.20878>; else goto <D.20879>;
  <D.20878>:
  D.20861 = 0B;
  return D.20861;
  <D.20879>:
  D.20861 = register_image (image);
  return D.20861;
}


monoeg_strdup (const gchar * str)
{
  gchar * D.20883;

  if (str != 0B) goto <D.20881>; else goto <D.20882>;
  <D.20881>:
  D.20883 = __strdup (str);
  return D.20883;
  <D.20882>:
  D.20883 = 0B;
  return D.20883;
}


do_mono_image_load (struct MonoImage * image, MonoImageOpenStatus * status, gboolean care_about_cli, gboolean care_about_pecoff)
{
  int D.20888;
  int D.20890;
  int D.20893;
  int D.20895;
  int D.20897;
  struct MonoImage * D.20901;
  struct GSList * errors.26;
  char * D.20905;
  char * D.20906;
  struct MonoCLIImageInfo * iinfo;
  struct MonoDotNetHeader * header;
  struct GSList * errors;
  void done = <<< error >>>;
  void invalid_image = <<< error >>>;

  try
    {
      errors = 0B;
      mono_profiler_module_event (image, 0);
      mono_image_init (image);
      iinfo = image->image_info;
      header = &iinfo->cli_header;
      if (status != 0B) goto <D.20885>; else goto <D.20886>;
      <D.20885>:
      *status = 3;
      <D.20886>:
      if (care_about_pecoff == 0) goto done; else goto <D.20887>;
      <D.20887>:
      D.20888 = mono_verifier_verify_pe_data (image, &errors);
      if (D.20888 == 0) goto invalid_image; else goto <D.20889>;
      <D.20889>:
      D.20890 = mono_image_load_pe_data (image);
      if (D.20890 == 0) goto invalid_image; else goto <D.20891>;
      <D.20891>:
      if (care_about_cli == 0) goto done; else goto <D.20892>;
      <D.20892>:
      D.20893 = mono_verifier_verify_cli_data (image, &errors);
      if (D.20893 == 0) goto invalid_image; else goto <D.20894>;
      <D.20894>:
      D.20895 = mono_image_load_cli_data (image);
      if (D.20895 == 0) goto invalid_image; else goto <D.20896>;
      <D.20896>:
      D.20897 = mono_verifier_verify_table_data (image, &errors);
      if (D.20897 == 0) goto invalid_image; else goto <D.20898>;
      <D.20898>:
      mono_image_load_names (image);
      load_modules (image);
      done:
      mono_profiler_module_loaded (image, 0);
      if (status != 0B) goto <D.20899>; else goto <D.20900>;
      <D.20899>:
      *status = 0;
      <D.20900>:
      D.20901 = image;
      return D.20901;
      invalid_image:
      errors.26 = errors;
      if (errors.26 != 0B) goto <D.20903>; else goto <D.20904>;
      <D.20903>:
      {
        struct MonoVerifyInfo * info;

        errors.26 = errors;
        info = errors.26->data;
        D.20905 = image->name;
        D.20906 = info->message;
        monoeg_g_log (0B, 16, "Could not load image %s due to %s", D.20905, D.20906);
        errors.26 = errors;
        mono_free_verify_list (errors.26);
      }
      <D.20904>:
      mono_profiler_module_loaded (image, 1);
      mono_image_close (image);
      D.20901 = 0B;
      return D.20901;
    }
  finally
    {
      errors = {CLOBBER};
    }
}


load_modules (struct MonoImage * image)
{
  struct MonoImage * * D.20909;
  <unnamed-unsigned:24> D.20912;
  long unsigned int D.20913;
  long unsigned int D.20914;
  void * D.20915;
  long unsigned int D.20916;
  void * D.20917;
  unsigned int D.20918;
  struct MonoTableInfo * t;

  D.20909 = image->modules;
  if (D.20909 != 0B) goto <D.20910>; else goto <D.20911>;
  <D.20910>:
  return;
  <D.20911>:
  t = &image->tables[26];
  D.20912 = t->rows;
  D.20913 = (long unsigned int) D.20912;
  D.20914 = D.20913 * 8;
  D.20915 = monoeg_malloc0 (D.20914);
  image->modules = D.20915;
  D.20912 = t->rows;
  D.20913 = (long unsigned int) D.20912;
  D.20916 = D.20913 * 4;
  D.20917 = monoeg_malloc0 (D.20916);
  image->modules_loaded = D.20917;
  D.20912 = t->rows;
  D.20918 = (unsigned int) D.20912;
  image->module_count = D.20918;
}


register_image (struct MonoImage * image)
{
  struct GHashTable * iftmp.27;
  long unsigned int D.20921;
  long unsigned int D.20922;
  int mutex_inited.28;
  _Bool D.20931;
  long int D.20932;
  long int D.20933;
  char * D.20936;
  _Bool D.20943;
  long int D.20944;
  long int D.20945;
  struct MonoImage * D.20948;
  const char * D.20949;
  void * D.20952;
  _Bool D.20959;
  long int D.20960;
  long int D.20961;
  struct MonoImage * image2;
  struct GHashTable * loaded_images;

  D.20921 = BIT_FIELD_REF <*image, 64, 192>;
  D.20922 = D.20921 & 134217728;
  if (D.20922 != 0) goto <D.20923>; else goto <D.20924>;
  <D.20923>:
  iftmp.27 = loaded_images_refonly_hash;
  goto <D.20925>;
  <D.20924>:
  iftmp.27 = loaded_images_hash;
  <D.20925>:
  loaded_images = iftmp.27;
  mutex_inited.28 = mutex_inited;
  if (mutex_inited.28 != 0) goto <D.20927>; else goto <D.20928>;
  <D.20927>:
  {
    int ret;

    ret = pthread_mutex_lock (&images_mutex.mutex);
    if (ret != 0) goto <D.20929>; else goto <D.20930>;
    <D.20929>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.20930>:
    D.20931 = ret != 0;
    D.20932 = (long int) D.20931;
    D.20933 = __builtin_expect (D.20932, 0);
    if (D.20933 != 0) goto <D.20934>; else goto <D.20935>;
    <D.20934>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1124, "ret == 0");
    <D.20935>:
  }
  <D.20928>:
  D.20936 = image->name;
  image2 = monoeg_g_hash_table_lookup (loaded_images, D.20936);
  if (image2 != 0B) goto <D.20937>; else goto <D.20938>;
  <D.20937>:
  mono_image_addref (image2);
  mutex_inited.28 = mutex_inited;
  if (mutex_inited.28 != 0) goto <D.20939>; else goto <D.20940>;
  <D.20939>:
  {
    int ret;

    ret = pthread_mutex_unlock (&images_mutex.mutex);
    if (ret != 0) goto <D.20941>; else goto <D.20942>;
    <D.20941>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.20942>:
    D.20943 = ret != 0;
    D.20944 = (long int) D.20943;
    D.20945 = __builtin_expect (D.20944, 0);
    if (D.20945 != 0) goto <D.20946>; else goto <D.20947>;
    <D.20946>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1130, "ret == 0");
    <D.20947>:
  }
  <D.20940>:
  mono_image_close (image);
  D.20948 = image2;
  return D.20948;
  <D.20938>:
  D.20936 = image->name;
  monoeg_g_hash_table_insert_replace (loaded_images, D.20936, image, 0);
  D.20949 = image->assembly_name;
  if (D.20949 != 0B) goto <D.20950>; else goto <D.20951>;
  <D.20950>:
  D.20949 = image->assembly_name;
  D.20952 = monoeg_g_hash_table_lookup (loaded_images, D.20949);
  if (D.20952 == 0B) goto <D.20953>; else goto <D.20954>;
  <D.20953>:
  D.20949 = image->assembly_name;
  monoeg_g_hash_table_insert_replace (loaded_images, D.20949, image, 0);
  <D.20954>:
  <D.20951>:
  mutex_inited.28 = mutex_inited;
  if (mutex_inited.28 != 0) goto <D.20955>; else goto <D.20956>;
  <D.20955>:
  {
    int ret;

    ret = pthread_mutex_unlock (&images_mutex.mutex);
    if (ret != 0) goto <D.20957>; else goto <D.20958>;
    <D.20957>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.20958>:
    D.20959 = ret != 0;
    D.20960 = (long int) D.20959;
    D.20961 = __builtin_expect (D.20960, 0);
    if (D.20961 != 0) goto <D.20962>; else goto <D.20963>;
    <D.20962>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1137, "ret == 0");
    <D.20963>:
  }
  <D.20956>:
  D.20948 = image;
  return D.20948;
}


mono_image_open_from_data_full (char * data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus * status, gboolean refonly)
{
  struct MonoImage * D.20965;

  D.20965 = mono_image_open_from_data_with_name (data, data_len, need_copy, status, refonly, 0B);
  return D.20965;
}


mono_image_open_from_data (char * data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus * status)
{
  struct MonoImage * D.20967;

  D.20967 = mono_image_open_from_data_full (data, data_len, need_copy, status, 0);
  return D.20967;
}


mono_image_open_full (const char * fname, MonoImageOpenStatus * status, gboolean refonly)
{
  struct MonoImage * D.20971;
  int mutex_inited.29;
  _Bool D.20977;
  long int D.20978;
  long int D.20979;
  struct GHashTable * iftmp.30;
  _Bool D.20992;
  long int D.20993;
  long int D.20994;
  _Bool D.21001;
  long int D.21002;
  long int D.21003;
  struct MonoImage * image;
  struct GHashTable * loaded_images;
  char * absfname;

  if (fname == 0B) goto <D.20969>; else goto <D.20970>;
  <D.20969>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "image.c", 1225, "fname != NULL");
  D.20971 = 0B;
  return D.20971;
  <D.20970>:
  absfname = mono_path_canonicalize (fname);
  mutex_inited.29 = mutex_inited;
  if (mutex_inited.29 != 0) goto <D.20973>; else goto <D.20974>;
  <D.20973>:
  {
    int ret;

    ret = pthread_mutex_lock (&images_mutex.mutex);
    if (ret != 0) goto <D.20975>; else goto <D.20976>;
    <D.20975>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.20976>:
    D.20977 = ret != 0;
    D.20978 = (long int) D.20977;
    D.20979 = __builtin_expect (D.20978, 0);
    if (D.20979 != 0) goto <D.20980>; else goto <D.20981>;
    <D.20980>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1305, "ret == 0");
    <D.20981>:
  }
  <D.20974>:
  if (refonly != 0) goto <D.20983>; else goto <D.20984>;
  <D.20983>:
  iftmp.30 = loaded_images_refonly_hash;
  goto <D.20985>;
  <D.20984>:
  iftmp.30 = loaded_images_hash;
  <D.20985>:
  loaded_images = iftmp.30;
  image = monoeg_g_hash_table_lookup (loaded_images, absfname);
  monoeg_g_free (absfname);
  if (image != 0B) goto <D.20986>; else goto <D.20987>;
  <D.20986>:
  mono_image_addref (image);
  mutex_inited.29 = mutex_inited;
  if (mutex_inited.29 != 0) goto <D.20988>; else goto <D.20989>;
  <D.20988>:
  {
    int ret;

    ret = pthread_mutex_unlock (&images_mutex.mutex);
    if (ret != 0) goto <D.20990>; else goto <D.20991>;
    <D.20990>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.20991>:
    D.20992 = ret != 0;
    D.20993 = (long int) D.20992;
    D.20994 = __builtin_expect (D.20993, 0);
    if (D.20994 != 0) goto <D.20995>; else goto <D.20996>;
    <D.20995>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1312, "ret == 0");
    <D.20996>:
  }
  <D.20989>:
  D.20971 = image;
  return D.20971;
  <D.20987>:
  mutex_inited.29 = mutex_inited;
  if (mutex_inited.29 != 0) goto <D.20997>; else goto <D.20998>;
  <D.20997>:
  {
    int ret;

    ret = pthread_mutex_unlock (&images_mutex.mutex);
    if (ret != 0) goto <D.20999>; else goto <D.21000>;
    <D.20999>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.21000>:
    D.21001 = ret != 0;
    D.21002 = (long int) D.21001;
    D.21003 = __builtin_expect (D.21002, 0);
    if (D.21003 != 0) goto <D.21004>; else goto <D.21005>;
    <D.21004>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1315, "ret == 0");
    <D.21005>:
  }
  <D.20998>:
  image = do_mono_image_open (fname, status, 1, 1, refonly);
  if (image == 0B) goto <D.21006>; else goto <D.21007>;
  <D.21006>:
  D.20971 = 0B;
  return D.20971;
  <D.21007>:
  D.20971 = register_image (image);
  return D.20971;
}


do_mono_image_open (const char * fname, MonoImageOpenStatus * status, gboolean care_about_cli, gboolean care_about_pecoff, gboolean refonly)
{
  int __mono_io_portability_helpers.31;
  struct MonoImage * D.21020;
  long unsigned int D.21021;
  unsigned int D.21022;
  unsigned int D.21023;
  long unsigned int D.21024;
  int D.21025;
  void * * D.21026;
  void * D.21027;
  char * D.21028;
  int D.21031;
  void * D.21032;
  gchar * D.21037;
  unsigned char D.21038;
  <unnamed-unsigned:1> D.21039;
  int D.21040;
  unsigned char D.21041;
  <unnamed-unsigned:1> D.21042;
  struct MonoCLIImageInfo * iinfo;
  struct MonoImage * image;
  struct MonoFileMap * filed;

  filed = mono_file_map_open (fname);
  if (filed == 0B) goto <D.21009>; else goto <D.21010>;
  <D.21009>:
  __mono_io_portability_helpers.31 = __mono_io_portability_helpers;
  if (__mono_io_portability_helpers.31 > 0) goto <D.21012>; else goto <D.21013>;
  <D.21012>:
  {
    gchar * ffname;

    ffname = mono_portability_find_file (fname, 1);
    if (ffname != 0B) goto <D.21014>; else goto <D.21015>;
    <D.21014>:
    filed = mono_file_map_open (ffname);
    monoeg_g_free (ffname);
    <D.21015>:
  }
  <D.21013>:
  if (filed == 0B) goto <D.21016>; else goto <D.21017>;
  <D.21016>:
  if (status != 0B) goto <D.21018>; else goto <D.21019>;
  <D.21018>:
  *status = 1;
  <D.21019>:
  D.21020 = 0B;
  return D.21020;
  <D.21017>:
  <D.21010>:
  image = monoeg_malloc0 (1568);
  image->raw_buffer_used = 1;
  D.21021 = mono_file_map_size (filed);
  D.21022 = (unsigned int) D.21021;
  image->raw_data_len = D.21022;
  D.21023 = image->raw_data_len;
  D.21024 = (long unsigned int) D.21023;
  D.21025 = mono_file_map_fd (filed);
  D.21026 = &image->raw_data_handle;
  D.21027 = mono_file_map (D.21024, 17, D.21025, 0, D.21026);
  image->raw_data = D.21027;
  D.21028 = image->raw_data;
  if (D.21028 == 0B) goto <D.21029>; else goto <D.21030>;
  <D.21029>:
  image->fileio_used = 1;
  D.21023 = image->raw_data_len;
  D.21024 = (long unsigned int) D.21023;
  D.21031 = mono_file_map_fd (filed);
  D.21026 = &image->raw_data_handle;
  D.21032 = mono_file_map_fileio (D.21024, 17, D.21031, 0, D.21026);
  image->raw_data = D.21032;
  <D.21030>:
  D.21028 = image->raw_data;
  if (D.21028 == 0B) goto <D.21033>; else goto <D.21034>;
  <D.21033>:
  mono_file_map_close (filed);
  monoeg_g_free (image);
  if (status != 0B) goto <D.21035>; else goto <D.21036>;
  <D.21035>:
  *status = 3;
  <D.21036>:
  D.21020 = 0B;
  return D.21020;
  <D.21034>:
  iinfo = monoeg_malloc0 (408);
  image->image_info = iinfo;
  D.21037 = mono_path_resolve_symlinks (fname);
  image->name = D.21037;
  D.21038 = (unsigned char) refonly;
  D.21039 = (<unnamed-unsigned:1>) D.21038;
  image->ref_only = D.21039;
  image->ref_count = 1;
  D.21040 = mono_security_core_clr_determine_platform_image (image);
  D.21041 = (unsigned char) D.21040;
  D.21042 = (<unnamed-unsigned:1>) D.21041;
  image->core_clr_platform_code = D.21042;
  mono_file_map_close (filed);
  D.21020 = do_mono_image_load (image, status, care_about_cli, care_about_pecoff);
  return D.21020;
}


mono_image_open (const char * fname, MonoImageOpenStatus * status)
{
  struct MonoImage * D.21044;

  D.21044 = mono_image_open_full (fname, status, 0);
  return D.21044;
}


mono_pe_file_open (const char * fname, MonoImageOpenStatus * status)
{
  struct MonoImage * D.21048;

  if (fname == 0B) goto <D.21046>; else goto <D.21047>;
  <D.21046>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "image.c", 1354, "fname != NULL");
  D.21048 = 0B;
  return D.21048;
  <D.21047>:
  D.21048 = do_mono_image_open (fname, status, 0, 1, 0);
  return D.21048;
}


__attribute__((visibility ("hidden")))
mono_image_open_raw (const char * fname, MonoImageOpenStatus * status)
{
  struct MonoImage * D.21052;

  if (fname == 0B) goto <D.21050>; else goto <D.21051>;
  <D.21050>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "image.c", 1371, "fname != NULL");
  D.21052 = 0B;
  return D.21052;
  <D.21051>:
  D.21052 = do_mono_image_open (fname, status, 0, 0, 0);
  return D.21052;
}


mono_image_fixup_vtable (struct MonoImage * image)
{
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "image.c", 1423);
}


mono_image_addref (struct MonoImage * image)
{
  int * D.21054;

  D.21054 = &image->ref_count;
  InterlockedIncrement (D.21054);
}


InterlockedIncrement (volatile gint32 * val)
{
  gint32 D.21055;
  unsigned int D.21056;

  D.21056 = __sync_add_and_fetch_4 (val, 1);
  D.21055 = (gint32) D.21056;
  return D.21055;
}


__attribute__((visibility ("hidden")))
mono_dynamic_stream_reset (struct MonoDynamicStream * stream)
{
  unsigned int D.21058;
  unsigned int D.21059;
  char * D.21060;
  struct GHashTable * D.21061;

  stream->offset = 0;
  D.21058 = stream->offset;
  stream->index = D.21058;
  D.21059 = stream->index;
  stream->alloc_size = D.21059;
  D.21060 = stream->data;
  monoeg_g_free (D.21060);
  stream->data = 0B;
  D.21061 = stream->hash;
  if (D.21061 != 0B) goto <D.21062>; else goto <D.21063>;
  <D.21062>:
  D.21061 = stream->hash;
  monoeg_g_hash_table_destroy (D.21061);
  stream->hash = 0B;
  <D.21063>:
}


__attribute__((visibility ("hidden")))
mono_image_close_except_pools (struct MonoImage * image)
{
  gboolean D.21066;
  int mutex_inited.32;
  _Bool D.21072;
  long int D.21073;
  long int D.21074;
  int * D.21077;
  int D.21078;
  _Bool D.21085;
  long int D.21086;
  long int D.21087;
  struct GHashTable * iftmp.33;
  long unsigned int D.21091;
  long unsigned int D.21092;
  char * D.21096;
  const char * D.21099;
  void * D.21102;
  _Bool D.21109;
  long int D.21110;
  long int D.21111;
  struct MonoAssembly * * D.21116;
  long unsigned int D.21118;
  long unsigned int D.21120;
  long unsigned int D.21121;
  struct MonoAssembly * * D.21122;
  struct MonoAssembly * D.21123;
  struct MonoAssembly * D.21124;
  int D.21127;
  int D.21130;
  long unsigned int D.21133;
  char * D.21136;
  long unsigned int D.21139;
  void * D.21142;
  long unsigned int D.21144;
  char * D.21147;
  unsigned int D.21150;
  sizetype D.21151;
  char * D.21152;
  void * * D.21155;
  void * * D.21156;
  void * D.21157;
  int D.21162;
  int debug_assembly_unload.34;
  gchar * D.21166;
  char * D.21168;
  char * D.21169;
  struct MonoImage * * D.21170;
  struct GHashTable * D.21171;
  struct GHashTable * D.21174;
  struct MonoInternalHashTable * D.21177;
  struct GHashTable * D.21178;
  struct GHashTable * D.21179;
  struct GHashTable * D.21182;
  struct GHashTable * D.21185;
  struct GHashTable * D.21188;
  struct GHashTable * D.21191;
  struct GHashTable * D.21192;
  struct GHashTable * D.21193;
  struct GHashTable * D.21194;
  struct GHashTable * D.21195;
  struct GHashTable * D.21196;
  struct GHashTable * D.21197;
  struct GHashTable * D.21198;
  struct GHashTable * D.21199;
  struct GHashTable * D.21200;
  struct GHashTable * D.21201;
  struct GHashTable * D.21202;
  struct GHashTable * D.21203;
  struct GHashTable * D.21204;
  struct GHashTable * D.21205;
  struct GHashTable * D.21206;
  struct GHashTable * D.21207;
  struct GHashTable * D.21208;
  struct GHashTable * D.21209;
  struct GHashTable * D.21210;
  struct GHashTable * D.21211;
  struct GHashTable * D.21212;
  struct GHashTable * D.21213;
  struct GHashTable * D.21214;
  struct GHashTable * D.21215;
  struct GHashTable * D.21216;
  struct GHashTable * D.21217;
  struct GHashTable * D.21218;
  struct GHashTable * D.21219;
  struct GHashTable * D.21220;
  struct GHashTable * D.21221;
  struct GHashTable * D.21222;
  struct GHashTable * D.21223;
  struct GHashTable * D.21224;
  struct GHashTable * D.21225;
  struct GHashTable * D.21226;
  struct GHashTable * D.21227;
  struct GHashTable * D.21228;
  struct GHashTable * D.21229;
  struct MonoPropertyHash * D.21232;
  int iftmp.35;
  struct GSList * D.21238;
  int D.21240;
  _Bool D.21242;
  long int D.21243;
  long int D.21244;
  struct MonoBitSet * D.21247;
  void * D.21250;
  struct MonoSectionTable * D.21253;
  void * * D.21256;
  struct MonoImage * * D.21259;
  struct MonoImage * * D.21260;
  struct MonoImage * D.21261;
  int D.21264;
  unsigned int D.21267;
  unsigned int i.36;
  gboolean * D.21269;
  struct CRITICAL_SECTION * D.21272;
  struct CRITICAL_SECTION * D.21273;
  const char * D.21276;
  struct MonoImage * image2;
  struct GHashTable * loaded_images;
  int i;

  if (image == 0B) goto <D.21064>; else goto <D.21065>;
  <D.21064>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "image.c", 1492, "image != NULL");
  D.21066 = 0;
  return D.21066;
  <D.21065>:
  mutex_inited.32 = mutex_inited;
  if (mutex_inited.32 != 0) goto <D.21068>; else goto <D.21069>;
  <D.21068>:
  {
    int ret;

    ret = pthread_mutex_lock (&images_mutex.mutex);
    if (ret != 0) goto <D.21070>; else goto <D.21071>;
    <D.21070>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.21071>:
    D.21072 = ret != 0;
    D.21073 = (long int) D.21072;
    D.21074 = __builtin_expect (D.21073, 0);
    if (D.21074 != 0) goto <D.21075>; else goto <D.21076>;
    <D.21075>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1498, "ret == 0");
    <D.21076>:
  }
  <D.21069>:
  D.21077 = &image->ref_count;
  D.21078 = InterlockedDecrement (D.21077);
  if (D.21078 > 0) goto <D.21079>; else goto <D.21080>;
  <D.21079>:
  mutex_inited.32 = mutex_inited;
  if (mutex_inited.32 != 0) goto <D.21081>; else goto <D.21082>;
  <D.21081>:
  {
    int ret;

    ret = pthread_mutex_unlock (&images_mutex.mutex);
    if (ret != 0) goto <D.21083>; else goto <D.21084>;
    <D.21083>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.21084>:
    D.21085 = ret != 0;
    D.21086 = (long int) D.21085;
    D.21087 = __builtin_expect (D.21086, 0);
    if (D.21087 != 0) goto <D.21088>; else goto <D.21089>;
    <D.21088>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1501, "ret == 0");
    <D.21089>:
  }
  <D.21082>:
  D.21066 = 0;
  return D.21066;
  <D.21080>:
  D.21091 = BIT_FIELD_REF <*image, 64, 192>;
  D.21092 = D.21091 & 134217728;
  if (D.21092 != 0) goto <D.21093>; else goto <D.21094>;
  <D.21093>:
  iftmp.33 = loaded_images_refonly_hash;
  goto <D.21095>;
  <D.21094>:
  iftmp.33 = loaded_images_hash;
  <D.21095>:
  loaded_images = iftmp.33;
  D.21096 = image->name;
  image2 = monoeg_g_hash_table_lookup (loaded_images, D.21096);
  if (image == image2) goto <D.21097>; else goto <D.21098>;
  <D.21097>:
  D.21096 = image->name;
  monoeg_g_hash_table_remove (loaded_images, D.21096);
  <D.21098>:
  D.21099 = image->assembly_name;
  if (D.21099 != 0B) goto <D.21100>; else goto <D.21101>;
  <D.21100>:
  D.21099 = image->assembly_name;
  D.21102 = monoeg_g_hash_table_lookup (loaded_images, D.21099);
  if (D.21102 == image) goto <D.21103>; else goto <D.21104>;
  <D.21103>:
  D.21099 = image->assembly_name;
  monoeg_g_hash_table_remove (loaded_images, D.21099);
  <D.21104>:
  <D.21101>:
  mutex_inited.32 = mutex_inited;
  if (mutex_inited.32 != 0) goto <D.21105>; else goto <D.21106>;
  <D.21105>:
  {
    int ret;

    ret = pthread_mutex_unlock (&images_mutex.mutex);
    if (ret != 0) goto <D.21107>; else goto <D.21108>;
    <D.21107>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.21108>:
    D.21109 = ret != 0;
    D.21110 = (long int) D.21109;
    D.21111 = __builtin_expect (D.21110, 0);
    if (D.21111 != 0) goto <D.21112>; else goto <D.21113>;
    <D.21112>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1514, "ret == 0");
    <D.21113>:
  }
  <D.21106>:
  mono_profiler_module_event (image, 2);
  D.21096 = image->name;
  mono_trace (64, 1, "Unloading image %s [%p].", D.21096, image);
  mono_image_invoke_unload_hook (image);
  mono_metadata_clean_for_image (image);
  D.21116 = image->references;
  if (D.21116 != 0B) goto <D.21117>; else goto <D.21114>;
  <D.21117>:
  D.21091 = BIT_FIELD_REF <*image, 64, 192>;
  D.21118 = D.21091 & 268435456;
  if (D.21118 == 0) goto <D.21119>; else goto <D.21114>;
  <D.21119>:
  i = 0;
  goto <D.18790>;
  <D.18789>:
  D.21116 = image->references;
  D.21120 = (long unsigned int) i;
  D.21121 = D.21120 * 8;
  D.21122 = D.21116 + D.21121;
  D.21123 = *D.21122;
  D.21124 = D.21123 + 18446744073709551615;
  if (D.21124 <= -3B) goto <D.21125>; else goto <D.21126>;
  <D.21125>:
  D.21116 = image->references;
  D.21120 = (long unsigned int) i;
  D.21121 = D.21120 * 8;
  D.21122 = D.21116 + D.21121;
  D.21123 = *D.21122;
  D.21127 = mono_assembly_close_except_image_pools (D.21123);
  if (D.21127 == 0) goto <D.21128>; else goto <D.21129>;
  <D.21128>:
  D.21116 = image->references;
  D.21120 = (long unsigned int) i;
  D.21121 = D.21120 * 8;
  D.21122 = D.21116 + D.21121;
  *D.21122 = 0B;
  <D.21129>:
  <D.21126>:
  i = i + 1;
  <D.18790>:
  D.21130 = image->nreferences;
  if (D.21130 > i) goto <D.18789>; else goto <D.18791>;
  <D.18791>:
  goto <D.21115>;
  <D.21114>:
  D.21116 = image->references;
  if (D.21116 != 0B) goto <D.21131>; else goto <D.21132>;
  <D.21131>:
  D.21116 = image->references;
  monoeg_g_free (D.21116);
  image->references = 0B;
  <D.21132>:
  <D.21115>:
  D.21091 = BIT_FIELD_REF <*image, 64, 192>;
  D.21133 = D.21091 & 2147483648;
  if (D.21133 != 0) goto <D.21134>; else goto <D.21135>;
  <D.21134>:
  D.21136 = image->raw_data;
  if (D.21136 != 0B) goto <D.21137>; else goto <D.21138>;
  <D.21137>:
  D.21091 = BIT_FIELD_REF <*image, 64, 192>;
  D.21139 = D.21091 & 536870912;
  if (D.21139 != 0) goto <D.21140>; else goto <D.21141>;
  <D.21140>:
  D.21136 = image->raw_data;
  D.21142 = image->raw_data_handle;
  mono_file_unmap_fileio (D.21136, D.21142);
  goto <D.21143>;
  <D.21141>:
  D.21136 = image->raw_data;
  D.21142 = image->raw_data_handle;
  mono_file_unmap (D.21136, D.21142);
  <D.21143>:
  <D.21138>:
  <D.21135>:
  D.21091 = BIT_FIELD_REF <*image, 64, 192>;
  D.21144 = D.21091 & 1073741824;
  if (D.21144 != 0) goto <D.21145>; else goto <D.21146>;
  <D.21145>:
  {
    struct MonoCLIImageInfo * ii;

    ii = image->image_info;
    D.21147 = image->raw_metadata;
    D.21136 = image->raw_data;
    if (D.21147 > D.21136) goto <D.21148>; else goto <D.21149>;
    <D.21148>:
    D.21147 = image->raw_metadata;
    D.21136 = image->raw_data;
    D.21150 = image->raw_data_len;
    D.21151 = (sizetype) D.21150;
    D.21152 = D.21136 + D.21151;
    if (D.21147 <= D.21152) goto <D.21153>; else goto <D.21154>;
    <D.21153>:
    image->raw_metadata = 0B;
    <D.21154>:
    <D.21149>:
    i = 0;
    goto <D.18794>;
    <D.18793>:
    D.21155 = ii->cli_sections;
    D.21120 = (long unsigned int) i;
    D.21121 = D.21120 * 8;
    D.21156 = D.21155 + D.21121;
    D.21157 = *D.21156;
    D.21136 = image->raw_data;
    if (D.21157 > D.21136) goto <D.21158>; else goto <D.21159>;
    <D.21158>:
    D.21155 = ii->cli_sections;
    D.21120 = (long unsigned int) i;
    D.21121 = D.21120 * 8;
    D.21156 = D.21155 + D.21121;
    D.21157 = *D.21156;
    D.21136 = image->raw_data;
    D.21150 = image->raw_data_len;
    D.21151 = (sizetype) D.21150;
    D.21152 = D.21136 + D.21151;
    if (D.21157 <= D.21152) goto <D.21160>; else goto <D.21161>;
    <D.21160>:
    D.21155 = ii->cli_sections;
    D.21120 = (long unsigned int) i;
    D.21121 = D.21120 * 8;
    D.21156 = D.21155 + D.21121;
    *D.21156 = 0B;
    <D.21161>:
    <D.21159>:
    i = i + 1;
    <D.18794>:
    D.21162 = ii->cli_section_count;
    if (D.21162 > i) goto <D.18793>; else goto <D.18795>;
    <D.18795>:
    D.21136 = image->raw_data;
    monoeg_g_free (D.21136);
  }
  <D.21146>:
  debug_assembly_unload.34 = debug_assembly_unload;
  if (debug_assembly_unload.34 != 0) goto <D.21164>; else goto <D.21165>;
  <D.21164>:
  D.21096 = image->name;
  D.21166 = monoeg_g_strdup_printf ("%s - UNLOADED", D.21096);
  image->name = D.21166;
  goto <D.21167>;
  <D.21165>:
  D.21096 = image->name;
  monoeg_g_free (D.21096);
  D.21168 = image->guid;
  monoeg_g_free (D.21168);
  D.21169 = image->version;
  monoeg_g_free (D.21169);
  D.21170 = image->files;
  monoeg_g_free (D.21170);
  <D.21167>:
  D.21171 = image->method_cache;
  if (D.21171 != 0B) goto <D.21172>; else goto <D.21173>;
  <D.21172>:
  D.21171 = image->method_cache;
  monoeg_g_hash_table_destroy (D.21171);
  <D.21173>:
  D.21174 = image->methodref_cache;
  if (D.21174 != 0B) goto <D.21175>; else goto <D.21176>;
  <D.21175>:
  D.21174 = image->methodref_cache;
  monoeg_g_hash_table_destroy (D.21174);
  <D.21176>:
  D.21177 = &image->class_cache;
  mono_internal_hash_table_destroy (D.21177);
  D.21178 = image->field_cache;
  monoeg_g_hash_table_destroy (D.21178);
  D.21179 = image->array_cache;
  if (D.21179 != 0B) goto <D.21180>; else goto <D.21181>;
  <D.21180>:
  D.21179 = image->array_cache;
  monoeg_g_hash_table_foreach (D.21179, free_array_cache_entry, 0B);
  D.21179 = image->array_cache;
  monoeg_g_hash_table_destroy (D.21179);
  <D.21181>:
  D.21182 = image->szarray_cache;
  if (D.21182 != 0B) goto <D.21183>; else goto <D.21184>;
  <D.21183>:
  D.21182 = image->szarray_cache;
  monoeg_g_hash_table_destroy (D.21182);
  <D.21184>:
  D.21185 = image->ptr_cache;
  if (D.21185 != 0B) goto <D.21186>; else goto <D.21187>;
  <D.21186>:
  D.21185 = image->ptr_cache;
  monoeg_g_hash_table_destroy (D.21185);
  <D.21187>:
  D.21188 = image->name_cache;
  if (D.21188 != 0B) goto <D.21189>; else goto <D.21190>;
  <D.21189>:
  D.21188 = image->name_cache;
  monoeg_g_hash_table_foreach (D.21188, free_hash_table, 0B);
  D.21188 = image->name_cache;
  monoeg_g_hash_table_destroy (D.21188);
  <D.21190>:
  D.21191 = image->native_wrapper_cache;
  free_hash (D.21191);
  D.21192 = image->managed_wrapper_cache;
  free_hash (D.21192);
  D.21193 = image->delegate_begin_invoke_cache;
  free_hash (D.21193);
  D.21194 = image->delegate_end_invoke_cache;
  free_hash (D.21194);
  D.21195 = image->delegate_invoke_cache;
  free_hash (D.21195);
  D.21196 = image->delegate_abstract_invoke_cache;
  free_hash (D.21196);
  D.21197 = image->delegate_bound_static_invoke_cache;
  free_hash (D.21197);
  D.21198 = image->delegate_invoke_generic_cache;
  free_hash (D.21198);
  D.21199 = image->delegate_begin_invoke_generic_cache;
  free_hash (D.21199);
  D.21200 = image->delegate_end_invoke_generic_cache;
  free_hash (D.21200);
  D.21201 = image->synchronized_generic_cache;
  free_hash (D.21201);
  D.21202 = image->remoting_invoke_cache;
  free_hash (D.21202);
  D.21203 = image->runtime_invoke_cache;
  free_hash (D.21203);
  D.21204 = image->runtime_invoke_vtype_cache;
  free_hash (D.21204);
  D.21205 = image->runtime_invoke_direct_cache;
  free_hash (D.21205);
  D.21206 = image->runtime_invoke_vcall_cache;
  free_hash (D.21206);
  D.21207 = image->synchronized_cache;
  free_hash (D.21207);
  D.21208 = image->unbox_wrapper_cache;
  free_hash (D.21208);
  D.21209 = image->cominterop_invoke_cache;
  free_hash (D.21209);
  D.21210 = image->cominterop_wrapper_cache;
  free_hash (D.21210);
  D.21211 = image->typespec_cache;
  free_hash (D.21211);
  D.21212 = image->ldfld_wrapper_cache;
  free_hash (D.21212);
  D.21213 = image->ldflda_wrapper_cache;
  free_hash (D.21213);
  D.21214 = image->stfld_wrapper_cache;
  free_hash (D.21214);
  D.21215 = image->isinst_cache;
  free_hash (D.21215);
  D.21216 = image->castclass_cache;
  free_hash (D.21216);
  D.21217 = image->proxy_isinst_cache;
  free_hash (D.21217);
  D.21218 = image->thunk_invoke_cache;
  free_hash (D.21218);
  D.21219 = image->var_cache_slow;
  free_hash (D.21219);
  D.21220 = image->mvar_cache_slow;
  free_hash (D.21220);
  D.21221 = image->wrapper_param_names;
  free_hash (D.21221);
  D.21222 = image->native_wrapper_aot_cache;
  free_hash (D.21222);
  D.21223 = image->pinvoke_scopes;
  free_hash (D.21223);
  D.21224 = image->pinvoke_scope_filenames;
  free_hash (D.21224);
  D.21225 = image->gsharedvt_types;
  free_hash (D.21225);
  D.21226 = image->memberref_signatures;
  monoeg_g_hash_table_destroy (D.21226);
  D.21227 = image->helper_signatures;
  monoeg_g_hash_table_destroy (D.21227);
  D.21228 = image->method_signatures;
  monoeg_g_hash_table_destroy (D.21228);
  D.21229 = image->rgctx_template_hash;
  if (D.21229 != 0B) goto <D.21230>; else goto <D.21231>;
  <D.21230>:
  D.21229 = image->rgctx_template_hash;
  monoeg_g_hash_table_destroy (D.21229);
  <D.21231>:
  D.21232 = image->property_hash;
  if (D.21232 != 0B) goto <D.21233>; else goto <D.21234>;
  <D.21233>:
  D.21232 = image->property_hash;
  mono_property_hash_destroy (D.21232);
  <D.21234>:
  D.21238 = image->reflection_info_unregister_classes;
  if (D.21238 != 0B) goto <D.21239>; else goto <D.21236>;
  <D.21239>:
  D.21240 = mono_runtime_is_shutting_down ();
  if (D.21240 == 0) goto <D.21241>; else goto <D.21236>;
  <D.21241>:
  iftmp.35 = 1;
  goto <D.21237>;
  <D.21236>:
  iftmp.35 = 0;
  <D.21237>:
  D.21242 = iftmp.35 != 0;
  D.21243 = (long int) D.21242;
  D.21244 = __builtin_expect (D.21243, 0);
  if (D.21244 != 0) goto <D.21245>; else goto <D.21246>;
  <D.21245>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 1670, "!image->reflection_info_unregister_classes || mono_runtime_is_shutting_down ()");
  <D.21246>:
  image->reflection_info_unregister_classes = 0B;
  D.21247 = image->interface_bitset;
  if (D.21247 != 0B) goto <D.21248>; else goto <D.21249>;
  <D.21248>:
  D.21247 = image->interface_bitset;
  mono_unload_interface_ids (D.21247);
  D.21247 = image->interface_bitset;
  mono_bitset_free (D.21247);
  <D.21249>:
  D.21250 = image->image_info;
  if (D.21250 != 0B) goto <D.21251>; else goto <D.21252>;
  <D.21251>:
  {
    struct MonoCLIImageInfo * ii;

    ii = image->image_info;
    D.21253 = ii->cli_section_tables;
    if (D.21253 != 0B) goto <D.21254>; else goto <D.21255>;
    <D.21254>:
    D.21253 = ii->cli_section_tables;
    monoeg_g_free (D.21253);
    <D.21255>:
    D.21256 = ii->cli_sections;
    if (D.21256 != 0B) goto <D.21257>; else goto <D.21258>;
    <D.21257>:
    D.21256 = ii->cli_sections;
    monoeg_g_free (D.21256);
    <D.21258>:
    D.21250 = image->image_info;
    monoeg_g_free (D.21250);
  }
  <D.21252>:
  i = 0;
  goto <D.18798>;
  <D.18797>:
  D.21259 = image->modules;
  D.21120 = (long unsigned int) i;
  D.21121 = D.21120 * 8;
  D.21260 = D.21259 + D.21121;
  D.21261 = *D.21260;
  if (D.21261 != 0B) goto <D.21262>; else goto <D.21263>;
  <D.21262>:
  D.21259 = image->modules;
  D.21120 = (long unsigned int) i;
  D.21121 = D.21120 * 8;
  D.21260 = D.21259 + D.21121;
  D.21261 = *D.21260;
  D.21264 = mono_image_close_except_pools (D.21261);
  if (D.21264 == 0) goto <D.21265>; else goto <D.21266>;
  <D.21265>:
  D.21259 = image->modules;
  D.21120 = (long unsigned int) i;
  D.21121 = D.21120 * 8;
  D.21260 = D.21259 + D.21121;
  *D.21260 = 0B;
  <D.21266>:
  <D.21263>:
  i = i + 1;
  <D.18798>:
  D.21267 = image->module_count;
  i.36 = (unsigned int) i;
  if (D.21267 > i.36) goto <D.18797>; else goto <D.18799>;
  <D.18799>:
  D.21269 = image->modules_loaded;
  if (D.21269 != 0B) goto <D.21270>; else goto <D.21271>;
  <D.21270>:
  D.21269 = image->modules_loaded;
  monoeg_g_free (D.21269);
  <D.21271>:
  D.21272 = &image->szarray_cache_lock;
  DeleteCriticalSection (D.21272);
  D.21273 = &image->lock;
  DeleteCriticalSection (D.21273);
  D.21091 = BIT_FIELD_REF <*image, 64, 192>;
  D.21118 = D.21091 & 268435456;
  if (D.21118 != 0) goto <D.21274>; else goto <D.21275>;
  <D.21274>:
  D.21276 = image->module_name;
  monoeg_g_free (D.21276);
  mono_dynamic_image_free (image);
  <D.21275>:
  mono_profiler_module_event (image, 3);
  D.21066 = 1;
  return D.21066;
}


free_hash_table (void * key, void * val, void * user_data)
{
  monoeg_g_hash_table_destroy (val);
}


free_array_cache_entry (void * key, void * val, void * user_data)
{
  monoeg_g_slist_free (val);
}


InterlockedDecrement (volatile gint32 * val)
{
  gint32 D.21278;
  unsigned int D.21279;

  D.21279 = __sync_sub_and_fetch_4 (val, 1);
  D.21278 = (gint32) D.21279;
  return D.21278;
}


mono_image_invoke_unload_hook (struct MonoImage * image)
{
  void (*<T1c70>) (struct MonoImage *, void *) D.21281;
  void * D.21282;
  struct GSList * l;
  struct ImageUnloadHook * hook;

  l = image_unload_hooks;
  goto <D.18474>;
  <D.18473>:
  hook = l->data;
  D.21281 = hook->func;
  D.21282 = hook->user_data;
  D.21281 (image, D.21282);
  l = l->next;
  <D.18474>:
  if (l != 0B) goto <D.18473>; else goto <D.18475>;
  <D.18475>:
}


free_hash (struct GHashTable * hash)
{
  if (hash != 0B) goto <D.21283>; else goto <D.21284>;
  <D.21283>:
  monoeg_g_hash_table_destroy (hash);
  <D.21284>:
}


__attribute__((visibility ("hidden")))
mono_image_close_finish (struct MonoImage * image)
{
  struct MonoAssembly * * D.21285;
  long unsigned int D.21288;
  long unsigned int D.21289;
  long unsigned int D.21292;
  long unsigned int D.21293;
  struct MonoAssembly * * D.21294;
  struct MonoAssembly * D.21295;
  struct MonoAssembly * D.21296;
  int D.21299;
  struct MonoImage * * D.21300;
  struct MonoImage * * D.21301;
  struct MonoImage * D.21302;
  unsigned int D.21305;
  unsigned int i.37;
  struct MonoMemPool * D.21309;
  unsigned int D.21310;
  struct MonoPerfCounters * mono_perfcounters.38;
  unsigned int D.21312;
  unsigned int D.21313;
  int debug_assembly_unload.39;
  int i;

  D.21285 = image->references;
  if (D.21285 != 0B) goto <D.21286>; else goto <D.21287>;
  <D.21286>:
  D.21288 = BIT_FIELD_REF <*image, 64, 192>;
  D.21289 = D.21288 & 268435456;
  if (D.21289 == 0) goto <D.21290>; else goto <D.21291>;
  <D.21290>:
  i = 0;
  goto <D.18805>;
  <D.18804>:
  D.21285 = image->references;
  D.21292 = (long unsigned int) i;
  D.21293 = D.21292 * 8;
  D.21294 = D.21285 + D.21293;
  D.21295 = *D.21294;
  D.21296 = D.21295 + 18446744073709551615;
  if (D.21296 <= -3B) goto <D.21297>; else goto <D.21298>;
  <D.21297>:
  D.21285 = image->references;
  D.21292 = (long unsigned int) i;
  D.21293 = D.21292 * 8;
  D.21294 = D.21285 + D.21293;
  D.21295 = *D.21294;
  mono_assembly_close_finish (D.21295);
  <D.21298>:
  i = i + 1;
  <D.18805>:
  D.21299 = image->nreferences;
  if (D.21299 > i) goto <D.18804>; else goto <D.18806>;
  <D.18806>:
  D.21285 = image->references;
  monoeg_g_free (D.21285);
  image->references = 0B;
  <D.21291>:
  <D.21287>:
  i = 0;
  goto <D.18808>;
  <D.18807>:
  D.21300 = image->modules;
  D.21292 = (long unsigned int) i;
  D.21293 = D.21292 * 8;
  D.21301 = D.21300 + D.21293;
  D.21302 = *D.21301;
  if (D.21302 != 0B) goto <D.21303>; else goto <D.21304>;
  <D.21303>:
  D.21300 = image->modules;
  D.21292 = (long unsigned int) i;
  D.21293 = D.21292 * 8;
  D.21301 = D.21300 + D.21293;
  D.21302 = *D.21301;
  mono_image_close_finish (D.21302);
  <D.21304>:
  i = i + 1;
  <D.18808>:
  D.21305 = image->module_count;
  i.37 = (unsigned int) i;
  if (D.21305 > i.37) goto <D.18807>; else goto <D.18809>;
  <D.18809>:
  D.21300 = image->modules;
  if (D.21300 != 0B) goto <D.21307>; else goto <D.21308>;
  <D.21307>:
  D.21300 = image->modules;
  monoeg_g_free (D.21300);
  <D.21308>:
  D.21309 = image->mempool;
  D.21310 = mono_mempool_get_allocated (D.21309);
  mono_perfcounters.38 = mono_perfcounters;
  mono_perfcounters.38 = mono_perfcounters;
  D.21312 = mono_perfcounters.38->loader_bytes;
  D.21313 = D.21312 - D.21310;
  mono_perfcounters.38->loader_bytes = D.21313;
  D.21288 = BIT_FIELD_REF <*image, 64, 192>;
  D.21289 = D.21288 & 268435456;
  if (D.21289 == 0) goto <D.21314>; else goto <D.21315>;
  <D.21314>:
  debug_assembly_unload.39 = debug_assembly_unload;
  if (debug_assembly_unload.39 != 0) goto <D.21317>; else goto <D.21318>;
  <D.21317>:
  D.21309 = image->mempool;
  mono_mempool_invalidate (D.21309);
  goto <D.21319>;
  <D.21318>:
  D.21309 = image->mempool;
  mono_mempool_destroy (D.21309);
  monoeg_g_free (image);
  <D.21319>:
  goto <D.21320>;
  <D.21315>:
  debug_assembly_unload.39 = debug_assembly_unload;
  if (debug_assembly_unload.39 != 0) goto <D.21321>; else goto <D.21322>;
  <D.21321>:
  D.21309 = image->mempool;
  mono_mempool_invalidate (D.21309);
  goto <D.21323>;
  <D.21322>:
  D.21309 = image->mempool;
  mono_mempool_destroy (D.21309);
  <D.21323>:
  <D.21320>:
}


mono_image_close (struct MonoImage * image)
{
  int D.21324;

  D.21324 = mono_image_close_except_pools (image);
  if (D.21324 != 0) goto <D.21325>; else goto <D.21326>;
  <D.21325>:
  mono_image_close_finish (image);
  <D.21326>:
}


mono_image_strerror (MonoImageOpenStatus status)
{
  const char * D.21327;
  int * D.21328;
  int D.21329;

  switch (status) <default: <D.21330>, case 0: <D.18816>, case 1: <D.18817>, case 2: <D.18819>, case 3: <D.18818>>
  <D.18816>:
  D.21327 = "success";
  return D.21327;
  <D.18817>:
  D.21328 = __errno_location ();
  D.21329 = *D.21328;
  D.21327 = strerror (D.21329);
  return D.21327;
  <D.18818>:
  D.21327 = "File does not contain a valid CIL image";
  return D.21327;
  <D.18819>:
  D.21327 = "An assembly was referenced, but could not be found";
  return D.21327;
  <D.21330>:
  D.21327 = "Internal error";
  return D.21327;
}


mono_image_lookup_resource (struct MonoImage * image, guint32 res_id, guint32 lang_id, gunichar2 * name)
{
  void * D.21334;
  unsigned int D.21343;
  short unsigned int D.21346;
  short unsigned int D.21347;
  int D.21348;
  int D.21349;
  int D.21350;
  int D.21351;
  int D.21352;
  short unsigned int D.21353;
  short unsigned int D.21354;
  int D.21355;
  int D.21356;
  int D.21357;
  int D.21358;
  int D.21359;
  int D.21360;
  long unsigned int D.21361;
  long unsigned int D.21362;
  struct MonoCLIImageInfo * info;
  struct MonoDotNetHeader * header;
  struct MonoPEDatadir * datadir;
  struct MonoPEDirEntry * rsrc;
  struct MonoPEResourceDir * resource_dir;
  struct MonoPEResourceDirEntry * res_entries;
  guint32 entries;
  guint32 i;

  if (image == 0B) goto <D.21332>; else goto <D.21333>;
  <D.21332>:
  D.21334 = 0B;
  return D.21334;
  <D.21333>:
  mono_image_ensure_section_idx (image, 1);
  info = image->image_info;
  if (info == 0B) goto <D.21335>; else goto <D.21336>;
  <D.21335>:
  D.21334 = 0B;
  return D.21334;
  <D.21336>:
  header = &info->cli_header;
  if (header == 0B) goto <D.21337>; else goto <D.21338>;
  <D.21337>:
  D.21334 = 0B;
  return D.21334;
  <D.21338>:
  datadir = &header->datadir;
  if (datadir == 0B) goto <D.21339>; else goto <D.21340>;
  <D.21339>:
  D.21334 = 0B;
  return D.21334;
  <D.21340>:
  rsrc = &datadir->pe_resource_table;
  if (rsrc == 0B) goto <D.21341>; else goto <D.21342>;
  <D.21341>:
  D.21334 = 0B;
  return D.21334;
  <D.21342>:
  D.21343 = rsrc->rva;
  resource_dir = mono_image_rva_map (image, D.21343);
  if (resource_dir == 0B) goto <D.21344>; else goto <D.21345>;
  <D.21344>:
  D.21334 = 0B;
  return D.21334;
  <D.21345>:
  D.21346 = resource_dir->res_named_entries;
  D.21347 = D.21346 >> 8;
  D.21348 = (int) D.21347;
  D.21346 = resource_dir->res_named_entries;
  D.21349 = (int) D.21346;
  D.21350 = D.21349 << 8;
  D.21351 = D.21350 & 65535;
  D.21352 = D.21348 | D.21351;
  D.21353 = resource_dir->res_id_entries;
  D.21354 = D.21353 >> 8;
  D.21355 = (int) D.21354;
  D.21353 = resource_dir->res_id_entries;
  D.21356 = (int) D.21353;
  D.21357 = D.21356 << 8;
  D.21358 = D.21357 & 65535;
  D.21359 = D.21355 | D.21358;
  D.21360 = D.21352 + D.21359;
  entries = (guint32) D.21360;
  res_entries = resource_dir + 16;
  i = 0;
  goto <D.18861>;
  <D.18860>:
  {
    struct MonoPEResourceDirEntry * entry;
    void * ret;

    D.21361 = (long unsigned int) i;
    D.21362 = D.21361 * 8;
    entry = res_entries + D.21362;
    ret = mono_image_walk_resource_tree (info, res_id, lang_id, name, entry, resource_dir, 0);
    if (ret != 0B) goto <D.21363>; else goto <D.21364>;
    <D.21363>:
    D.21334 = ret;
    return D.21334;
    <D.21364>:
  }
  i = i + 1;
  <D.18861>:
  if (i < entries) goto <D.18860>; else goto <D.18862>;
  <D.18862>:
  D.21334 = 0B;
  return D.21334;
}


mono_image_walk_resource_tree (struct MonoCLIImageInfo * info, guint32 res_id, guint32 lang_id, gunichar2 * name, struct MonoPEResourceDirEntry * entry, struct MonoPEResourceDir * root, guint32 level)
{
  unsigned int D.21366;
  unsigned int D.21367;
  unsigned int D.21368;
  unsigned int D.21369;
  unsigned int D.21370;
  unsigned int D.21371;
  unsigned int D.21372;
  unsigned int D.21373;
  unsigned int D.21374;
  unsigned int D.21375;
  unsigned int D.21376;
  unsigned int D.21377;
  unsigned int D.21378;
  unsigned int D.21379;
  unsigned int D.21380;
  unsigned int D.21381;
  unsigned int D.21382;
  unsigned int D.21383;
  unsigned int D.21384;
  unsigned int D.21385;
  unsigned int D.21386;
  unsigned int D.21387;
  void * D.21392;
  sizetype D.21409;
  short unsigned int D.21410;
  short unsigned int D.21411;
  int D.21412;
  int D.21413;
  int D.21414;
  int D.21415;
  int D.21416;
  short unsigned int D.21417;
  short unsigned int D.21418;
  int D.21419;
  int D.21420;
  int D.21421;
  int D.21422;
  int D.21423;
  int D.21424;
  long unsigned int D.21425;
  long unsigned int D.21426;
  unsigned int D.21427;
  unsigned int D.21430;
  unsigned int D.21431;
  unsigned int D.21432;
  unsigned int D.21433;
  unsigned int D.21434;
  unsigned int D.21435;
  unsigned int D.21436;
  unsigned int D.21437;
  unsigned int D.21438;
  unsigned int D.21439;
  unsigned int D.21440;
  unsigned int D.21441;
  unsigned int D.21442;
  unsigned int D.21443;
  unsigned int D.21444;
  unsigned int D.21445;
  unsigned int D.21446;
  unsigned int D.21447;
  unsigned int D.21448;
  unsigned int D.21449;
  unsigned int D.21450;
  unsigned int D.21451;
  unsigned int D.21452;
  unsigned int D.21453;
  unsigned int D.21454;
  unsigned int D.21455;
  unsigned int D.21456;
  unsigned int D.21457;
  unsigned int D.21458;
  unsigned int D.21459;
  unsigned int D.21460;
  unsigned int D.21461;
  unsigned int D.21462;
  unsigned int D.21463;
  unsigned int D.21464;
  unsigned int D.21465;
  unsigned int D.21466;
  unsigned int D.21467;
  unsigned int D.21468;
  unsigned int D.21469;
  gboolean is_string;
  gboolean is_dir;
  guint32 name_offset;
  guint32 dir_offset;

  D.21366 = entry->name;
  D.21367 = D.21366 << 24;
  D.21366 = entry->name;
  D.21368 = D.21366 >> 8;
  D.21369 = D.21368 & 65280;
  D.21370 = D.21367 | D.21369;
  D.21366 = entry->name;
  D.21371 = D.21366 << 8;
  D.21372 = D.21371 & 16711680;
  D.21373 = D.21370 | D.21372;
  D.21366 = entry->name;
  D.21374 = D.21366 >> 24;
  D.21375 = D.21373 | D.21374;
  D.21376 = D.21375 >> 31;
  is_string = (gboolean) D.21376;
  D.21366 = entry->name;
  D.21367 = D.21366 << 24;
  D.21366 = entry->name;
  D.21368 = D.21366 >> 8;
  D.21369 = D.21368 & 65280;
  D.21370 = D.21367 | D.21369;
  D.21366 = entry->name;
  D.21371 = D.21366 << 8;
  D.21372 = D.21371 & 16711680;
  D.21373 = D.21370 | D.21372;
  D.21366 = entry->name;
  D.21374 = D.21366 >> 24;
  D.21375 = D.21373 | D.21374;
  name_offset = D.21375 & 2147483647;
  D.21377 = entry->dir;
  D.21378 = D.21377 << 24;
  D.21377 = entry->dir;
  D.21379 = D.21377 >> 8;
  D.21380 = D.21379 & 65280;
  D.21381 = D.21378 | D.21380;
  D.21377 = entry->dir;
  D.21382 = D.21377 << 8;
  D.21383 = D.21382 & 16711680;
  D.21384 = D.21381 | D.21383;
  D.21377 = entry->dir;
  D.21385 = D.21377 >> 24;
  D.21386 = D.21384 | D.21385;
  D.21387 = D.21386 >> 31;
  is_dir = (gboolean) D.21387;
  D.21377 = entry->dir;
  D.21378 = D.21377 << 24;
  D.21377 = entry->dir;
  D.21379 = D.21377 >> 8;
  D.21380 = D.21379 & 65280;
  D.21381 = D.21378 | D.21380;
  D.21377 = entry->dir;
  D.21382 = D.21377 << 8;
  D.21383 = D.21382 & 16711680;
  D.21384 = D.21381 | D.21383;
  D.21377 = entry->dir;
  D.21385 = D.21377 >> 24;
  D.21386 = D.21384 | D.21385;
  dir_offset = D.21386 & 2147483647;
  if (level == 0) goto <D.21388>; else goto <D.21389>;
  <D.21388>:
  if (is_string != 0) goto <D.21390>; else goto <D.21391>;
  <D.21390>:
  D.21392 = 0B;
  return D.21392;
  <D.21391>:
  goto <D.21393>;
  <D.21389>:
  if (level == 1) goto <D.21394>; else goto <D.21395>;
  <D.21394>:
  if (res_id != name_offset) goto <D.21396>; else goto <D.21397>;
  <D.21396>:
  D.21392 = 0B;
  return D.21392;
  <D.21397>:
  goto <D.21398>;
  <D.21395>:
  if (level == 2) goto <D.21399>; else goto <D.21400>;
  <D.21399>:
  if (is_string == 1) goto <D.21401>; else goto <D.21403>;
  <D.21403>:
  if (is_string == 0) goto <D.21404>; else goto <D.21402>;
  <D.21404>:
  if (lang_id != 0) goto <D.21405>; else goto <D.21402>;
  <D.21405>:
  if (name_offset != lang_id) goto <D.21401>; else goto <D.21402>;
  <D.21401>:
  D.21392 = 0B;
  return D.21392;
  <D.21402>:
  goto <D.21406>;
  <D.21400>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "image.c", 1829);
  <D.21406>:
  <D.21398>:
  <D.21393>:
  if (is_dir == 1) goto <D.21407>; else goto <D.21408>;
  <D.21407>:
  {
    struct MonoPEResourceDir * res_dir;
    struct MonoPEResourceDirEntry * sub_entries;
    guint32 entries;
    guint32 i;

    D.21409 = (sizetype) dir_offset;
    res_dir = root + D.21409;
    sub_entries = res_dir + 16;
    D.21410 = res_dir->res_named_entries;
    D.21411 = D.21410 >> 8;
    D.21412 = (int) D.21411;
    D.21410 = res_dir->res_named_entries;
    D.21413 = (int) D.21410;
    D.21414 = D.21413 << 8;
    D.21415 = D.21414 & 65535;
    D.21416 = D.21412 | D.21415;
    D.21417 = res_dir->res_id_entries;
    D.21418 = D.21417 >> 8;
    D.21419 = (int) D.21418;
    D.21417 = res_dir->res_id_entries;
    D.21420 = (int) D.21417;
    D.21421 = D.21420 << 8;
    D.21422 = D.21421 & 65535;
    D.21423 = D.21419 | D.21422;
    D.21424 = D.21416 + D.21423;
    entries = (guint32) D.21424;
    i = 0;
    goto <D.18840>;
    <D.18839>:
    {
      struct MonoPEResourceDirEntry * sub_entry;
      void * ret;

      D.21425 = (long unsigned int) i;
      D.21426 = D.21425 * 8;
      sub_entry = sub_entries + D.21426;
      D.21427 = level + 1;
      ret = mono_image_walk_resource_tree (info, res_id, lang_id, name, sub_entry, root, D.21427);
      if (ret != 0B) goto <D.21428>; else goto <D.21429>;
      <D.21428>:
      D.21392 = ret;
      return D.21392;
      <D.21429>:
    }
    i = i + 1;
    <D.18840>:
    if (i < entries) goto <D.18839>; else goto <D.18841>;
    <D.18841>:
    D.21392 = 0B;
    return D.21392;
  }
  <D.21408>:
  {
    struct MonoPEResourceDataEntry * data_entry;
    struct MonoPEResourceDataEntry * res;

    D.21409 = (sizetype) dir_offset;
    data_entry = root + D.21409;
    res = monoeg_malloc0 (16);
    D.21430 = data_entry->rde_data_offset;
    D.21431 = D.21430 << 24;
    D.21430 = data_entry->rde_data_offset;
    D.21432 = D.21430 >> 8;
    D.21433 = D.21432 & 65280;
    D.21434 = D.21431 | D.21433;
    D.21430 = data_entry->rde_data_offset;
    D.21435 = D.21430 << 8;
    D.21436 = D.21435 & 16711680;
    D.21437 = D.21434 | D.21436;
    D.21430 = data_entry->rde_data_offset;
    D.21438 = D.21430 >> 24;
    D.21439 = D.21437 | D.21438;
    res->rde_data_offset = D.21439;
    D.21440 = data_entry->rde_size;
    D.21441 = D.21440 << 24;
    D.21440 = data_entry->rde_size;
    D.21442 = D.21440 >> 8;
    D.21443 = D.21442 & 65280;
    D.21444 = D.21441 | D.21443;
    D.21440 = data_entry->rde_size;
    D.21445 = D.21440 << 8;
    D.21446 = D.21445 & 16711680;
    D.21447 = D.21444 | D.21446;
    D.21440 = data_entry->rde_size;
    D.21448 = D.21440 >> 24;
    D.21449 = D.21447 | D.21448;
    res->rde_size = D.21449;
    D.21450 = data_entry->rde_codepage;
    D.21451 = D.21450 << 24;
    D.21450 = data_entry->rde_codepage;
    D.21452 = D.21450 >> 8;
    D.21453 = D.21452 & 65280;
    D.21454 = D.21451 | D.21453;
    D.21450 = data_entry->rde_codepage;
    D.21455 = D.21450 << 8;
    D.21456 = D.21455 & 16711680;
    D.21457 = D.21454 | D.21456;
    D.21450 = data_entry->rde_codepage;
    D.21458 = D.21450 >> 24;
    D.21459 = D.21457 | D.21458;
    res->rde_codepage = D.21459;
    D.21460 = data_entry->rde_reserved;
    D.21461 = D.21460 << 24;
    D.21460 = data_entry->rde_reserved;
    D.21462 = D.21460 >> 8;
    D.21463 = D.21462 & 65280;
    D.21464 = D.21461 | D.21463;
    D.21460 = data_entry->rde_reserved;
    D.21465 = D.21460 << 8;
    D.21466 = D.21465 & 16711680;
    D.21467 = D.21464 | D.21466;
    D.21460 = data_entry->rde_reserved;
    D.21468 = D.21460 >> 24;
    D.21469 = D.21467 | D.21468;
    res->rde_reserved = D.21469;
    D.21392 = res;
    return D.21392;
  }
}


mono_image_get_entry_point (struct MonoImage * image)
{
  uint32_t D.21471;
  void * D.21472;

  D.21472 = image->image_info;
  D.21471 = MEM[(struct MonoCLIImageInfo *)D.21472].cli_cli_header.ch_entry_point;
  return D.21471;
}


mono_image_get_resource (struct MonoImage * image, guint32 offset, guint32 * size)
{
  unsigned int D.21476;
  unsigned int D.21478;
  unsigned int D.21479;
  const char * D.21480;
  sizetype D.21483;
  unsigned int D.21486;
  unsigned int D.21487;
  unsigned int D.21488;
  unsigned int D.21489;
  unsigned int D.21490;
  unsigned int D.21491;
  unsigned int D.21492;
  unsigned int D.21493;
  unsigned int D.21494;
  unsigned int D.21495;
  struct MonoCLIImageInfo * iinfo;
  struct MonoCLIHeader * ch;
  const char * data;

  iinfo = image->image_info;
  ch = &iinfo->cli_cli_header;
  D.21476 = ch->ch_resources.rva;
  if (D.21476 == 0) goto <D.21474>; else goto <D.21477>;
  <D.21477>:
  D.21478 = offset + 4;
  D.21479 = ch->ch_resources.size;
  if (D.21478 > D.21479) goto <D.21474>; else goto <D.21475>;
  <D.21474>:
  D.21480 = 0B;
  return D.21480;
  <D.21475>:
  D.21476 = ch->ch_resources.rva;
  data = mono_image_rva_map (image, D.21476);
  if (data == 0B) goto <D.21481>; else goto <D.21482>;
  <D.21481>:
  D.21480 = 0B;
  return D.21480;
  <D.21482>:
  D.21483 = (sizetype) offset;
  data = data + D.21483;
  if (size != 0B) goto <D.21484>; else goto <D.21485>;
  <D.21484>:
  D.21486 = MEM[(const guint32 *)data];
  D.21487 = D.21486 << 24;
  D.21486 = MEM[(const guint32 *)data];
  D.21488 = D.21486 >> 8;
  D.21489 = D.21488 & 65280;
  D.21490 = D.21487 | D.21489;
  D.21486 = MEM[(const guint32 *)data];
  D.21491 = D.21486 << 8;
  D.21492 = D.21491 & 16711680;
  D.21493 = D.21490 | D.21492;
  D.21486 = MEM[(const guint32 *)data];
  D.21494 = D.21486 >> 24;
  D.21495 = D.21493 | D.21494;
  *size = D.21495;
  <D.21485>:
  data = data + 4;
  D.21480 = data;
  return D.21480;
}


mono_image_load_file_for_image (struct MonoImage * image, int fileidx)
{
  <unnamed-unsigned:24> D.21500;
  int D.21501;
  struct MonoImage * D.21502;
  struct MonoImage * * D.21503;
  long unsigned int D.21506;
  long unsigned int D.21507;
  sizetype D.21508;
  struct MonoImage * * D.21509;
  struct MonoImage * D.21510;
  long unsigned int D.21515;
  long unsigned int D.21516;
  void * D.21517;
  int D.21518;
  char * D.21519;
  struct MonoAssembly * D.21522;
  struct MonoImage * * D.21523;
  long unsigned int D.21524;
  long unsigned int D.21525;
  struct MonoImage * * D.21526;
  struct MonoImage * D.21527;
  struct MonoAssembly * D.21530;
  unsigned int D.21533;
  unsigned int i.40;
  char * base_dir;
  char * name;
  struct MonoImage * res;
  struct MonoTableInfo * t;
  const char * fname;
  guint32 fname_id;

  t = &image->tables[38];
  if (fileidx <= 0) goto <D.21497>; else goto <D.21499>;
  <D.21499>:
  D.21500 = t->rows;
  D.21501 = (int) D.21500;
  if (D.21501 < fileidx) goto <D.21497>; else goto <D.21498>;
  <D.21497>:
  D.21502 = 0B;
  return D.21502;
  <D.21498>:
  mono_loader_lock ();
  D.21503 = image->files;
  if (D.21503 != 0B) goto <D.21504>; else goto <D.21505>;
  <D.21504>:
  D.21503 = image->files;
  D.21506 = (long unsigned int) fileidx;
  D.21507 = D.21506 * 8;
  D.21508 = D.21507 + 18446744073709551608;
  D.21509 = D.21503 + D.21508;
  D.21510 = *D.21509;
  if (D.21510 != 0B) goto <D.21511>; else goto <D.21512>;
  <D.21511>:
  mono_loader_unlock ();
  D.21503 = image->files;
  D.21506 = (long unsigned int) fileidx;
  D.21507 = D.21506 * 8;
  D.21508 = D.21507 + 18446744073709551608;
  D.21509 = D.21503 + D.21508;
  D.21502 = *D.21509;
  return D.21502;
  <D.21512>:
  <D.21505>:
  D.21503 = image->files;
  if (D.21503 == 0B) goto <D.21513>; else goto <D.21514>;
  <D.21513>:
  D.21500 = t->rows;
  D.21515 = (long unsigned int) D.21500;
  D.21516 = D.21515 * 8;
  D.21517 = monoeg_malloc0 (D.21516);
  image->files = D.21517;
  <D.21514>:
  D.21518 = fileidx + -1;
  fname_id = mono_metadata_decode_row_col (t, D.21518, 1);
  fname = mono_metadata_string_heap (image, fname_id);
  D.21519 = image->name;
  base_dir = monoeg_g_path_get_dirname (D.21519);
  name = monoeg_g_build_path ("/", base_dir, fname, 0B);
  res = mono_image_open (name, 0B);
  if (res != 0B) goto <D.21520>; else goto <D.21521>;
  <D.21520>:
  {
    int i;

    D.21522 = image->assembly;
    res->assembly = D.21522;
    i = 0;
    goto <D.18886>;
    <D.18885>:
    D.21523 = res->modules;
    D.21524 = (long unsigned int) i;
    D.21525 = D.21524 * 8;
    D.21526 = D.21523 + D.21525;
    D.21527 = *D.21526;
    if (D.21527 != 0B) goto <D.21528>; else goto <D.21529>;
    <D.21528>:
    D.21523 = res->modules;
    D.21524 = (long unsigned int) i;
    D.21525 = D.21524 * 8;
    D.21526 = D.21523 + D.21525;
    D.21527 = *D.21526;
    D.21530 = D.21527->assembly;
    if (D.21530 == 0B) goto <D.21531>; else goto <D.21532>;
    <D.21531>:
    D.21523 = res->modules;
    D.21524 = (long unsigned int) i;
    D.21525 = D.21524 * 8;
    D.21526 = D.21523 + D.21525;
    D.21527 = *D.21526;
    D.21522 = image->assembly;
    D.21527->assembly = D.21522;
    <D.21532>:
    <D.21529>:
    i = i + 1;
    <D.18886>:
    D.21533 = res->module_count;
    i.40 = (unsigned int) i;
    if (D.21533 > i.40) goto <D.18885>; else goto <D.18887>;
    <D.18887>:
    D.21503 = image->files;
    D.21506 = (long unsigned int) fileidx;
    D.21507 = D.21506 * 8;
    D.21508 = D.21507 + 18446744073709551608;
    D.21509 = D.21503 + D.21508;
    *D.21509 = res;
  }
  <D.21521>:
  mono_loader_unlock ();
  monoeg_g_free (name);
  monoeg_g_free (base_dir);
  D.21502 = res;
  return D.21502;
}


mono_image_get_strong_name (struct MonoImage * image, guint32 * size)
{
  unsigned int D.21538;
  unsigned int D.21540;
  const char * D.21541;
  struct MonoCLIImageInfo * iinfo;
  struct MonoPEDirEntry * de;
  const char * data;

  iinfo = image->image_info;
  de = &iinfo->cli_cli_header.ch_strong_name;
  D.21538 = de->size;
  if (D.21538 == 0) goto <D.21536>; else goto <D.21539>;
  <D.21539>:
  D.21540 = de->rva;
  if (D.21540 == 0) goto <D.21536>; else goto <D.21537>;
  <D.21536>:
  D.21541 = 0B;
  return D.21541;
  <D.21537>:
  D.21540 = de->rva;
  data = mono_image_rva_map (image, D.21540);
  if (data == 0B) goto <D.21542>; else goto <D.21543>;
  <D.21542>:
  D.21541 = 0B;
  return D.21541;
  <D.21543>:
  if (size != 0B) goto <D.21544>; else goto <D.21545>;
  <D.21544>:
  D.21538 = de->size;
  *size = D.21538;
  <D.21545>:
  D.21541 = data;
  return D.21541;
}


mono_image_strong_name_position (struct MonoImage * image, guint32 * size)
{
  unsigned int D.21549;
  unsigned int D.21553;
  uint32_t D.21554;
  uint32_t iftmp.41;
  struct MonoCLIImageInfo * iinfo;
  struct MonoPEDirEntry * de;
  guint32 pos;

  iinfo = image->image_info;
  de = &iinfo->cli_cli_header.ch_strong_name;
  if (size != 0B) goto <D.21547>; else goto <D.21548>;
  <D.21547>:
  D.21549 = de->size;
  *size = D.21549;
  <D.21548>:
  D.21549 = de->size;
  if (D.21549 == 0) goto <D.21550>; else goto <D.21552>;
  <D.21552>:
  D.21553 = de->rva;
  if (D.21553 == 0) goto <D.21550>; else goto <D.21551>;
  <D.21550>:
  D.21554 = 0;
  return D.21554;
  <D.21551>:
  D.21553 = de->rva;
  pos = mono_cli_rva_image_map (image, D.21553);
  if (pos != 4294967295) goto <D.21556>; else goto <D.21557>;
  <D.21556>:
  iftmp.41 = pos;
  goto <D.21558>;
  <D.21557>:
  iftmp.41 = 0;
  <D.21558>:
  D.21554 = iftmp.41;
  return D.21554;
}


mono_image_get_public_key (struct MonoImage * image, guint32 * size)
{
  long unsigned int D.21560;
  long unsigned int D.21561;
  int D.21566;
  unsigned int D.21567;
  const char * D.21568;
  long unsigned int D.21569;
  long unsigned int D.21570;
  struct MonoTableInfo * D.21573;
  const char * pubkey.42;
  const char * pubkey.43;
  const char * pubkey;
  guint32 len;
  guint32 tok;

  try
    {
      D.21560 = BIT_FIELD_REF <*image, 64, 192>;
      D.21561 = D.21560 & 268435456;
      if (D.21561 != 0) goto <D.21562>; else goto <D.21563>;
      <D.21562>:
      if (size != 0B) goto <D.21564>; else goto <D.21565>;
      <D.21564>:
      D.21566 = MEM[(struct MonoDynamicImage *)image].public_key_len;
      D.21567 = (unsigned int) D.21566;
      *size = D.21567;
      <D.21565>:
      D.21568 = MEM[(struct MonoDynamicImage *)image].public_key;
      return D.21568;
      <D.21563>:
      D.21569 = BIT_FIELD_REF <*image, 64, 5696>;
      D.21570 = D.21569 & 18446742974197923840;
      if (D.21570 != 1099511627776) goto <D.21571>; else goto <D.21572>;
      <D.21571>:
      D.21568 = 0B;
      return D.21568;
      <D.21572>:
      D.21573 = &image->tables[32];
      tok = mono_metadata_decode_row_col (D.21573, 0, 6);
      if (tok == 0) goto <D.21574>; else goto <D.21575>;
      <D.21574>:
      D.21568 = 0B;
      return D.21568;
      <D.21575>:
      pubkey.42 = mono_metadata_blob_heap (image, tok);
      pubkey = pubkey.42;
      pubkey.43 = pubkey;
      len = mono_metadata_decode_blob_size (pubkey.43, &pubkey);
      if (size != 0B) goto <D.21578>; else goto <D.21579>;
      <D.21578>:
      *size = len;
      <D.21579>:
      D.21568 = pubkey;
      return D.21568;
    }
  finally
    {
      pubkey = {CLOBBER};
    }
}


mono_image_get_name (struct MonoImage * image)
{
  const char * D.21582;

  D.21582 = image->assembly_name;
  return D.21582;
}


mono_image_get_filename (struct MonoImage * image)
{
  const char * D.21584;

  D.21584 = image->name;
  return D.21584;
}


mono_image_get_guid (struct MonoImage * image)
{
  const char * D.21586;

  D.21586 = image->guid;
  return D.21586;
}


mono_image_get_table_info (struct MonoImage * image, int table_id)
{
  unsigned int table_id.44;
  const struct MonoTableInfo * D.21591;

  table_id.44 = (unsigned int) table_id;
  if (table_id.44 > 44) goto <D.21589>; else goto <D.21590>;
  <D.21589>:
  D.21591 = 0B;
  return D.21591;
  <D.21590>:
  D.21591 = &image->tables[table_id];
  return D.21591;
}


mono_image_get_table_rows (struct MonoImage * image, int table_id)
{
  unsigned int table_id.45;
  int D.21596;
  <unnamed-unsigned:24> D.21597;

  table_id.45 = (unsigned int) table_id;
  if (table_id.45 > 44) goto <D.21594>; else goto <D.21595>;
  <D.21594>:
  D.21596 = 0;
  return D.21596;
  <D.21595>:
  D.21597 = image->tables[table_id].rows;
  D.21596 = (int) D.21597;
  return D.21596;
}


mono_table_info_get_rows (const struct MonoTableInfo * table)
{
  int D.21599;
  <unnamed-unsigned:24> D.21600;

  D.21600 = table->rows;
  D.21599 = (int) D.21600;
  return D.21599;
}


mono_image_get_assembly (struct MonoImage * image)
{
  struct MonoAssembly * D.21602;

  D.21602 = image->assembly;
  return D.21602;
}


mono_image_is_dynamic (struct MonoImage * image)
{
  mono_bool D.21604;
  <unnamed-unsigned:1> D.21605;

  D.21605 = image->dynamic;
  D.21604 = (mono_bool) D.21605;
  return D.21604;
}


mono_image_has_authenticode_entry (struct MonoImage * image)
{
  mono_bool D.21607;
  int iftmp.46;
  unsigned int D.21611;
  unsigned int D.21613;
  struct MonoCLIImageInfo * iinfo;
  struct MonoDotNetHeader * header;
  struct MonoPEDirEntry * de;

  iinfo = image->image_info;
  header = &iinfo->cli_header;
  de = &header->datadir.pe_certificate_table;
  D.21611 = de->rva;
  if (D.21611 != 0) goto <D.21612>; else goto <D.21609>;
  <D.21612>:
  D.21613 = de->size;
  if (D.21613 > 8) goto <D.21614>; else goto <D.21609>;
  <D.21614>:
  iftmp.46 = 1;
  goto <D.21610>;
  <D.21609>:
  iftmp.46 = 0;
  <D.21610>:
  D.21607 = iftmp.46;
  return D.21607;
}


__attribute__((visibility ("hidden")))
mono_image_alloc (struct MonoImage * image, guint size)
{
  struct MonoPerfCounters * mono_perfcounters.47;
  unsigned int D.21617;
  unsigned int D.21618;
  struct MonoMemPool * D.21619;
  void * D.21620;
  void * res;

  mono_perfcounters.47 = mono_perfcounters;
  mono_perfcounters.47 = mono_perfcounters;
  D.21617 = mono_perfcounters.47->loader_bytes;
  D.21618 = D.21617 + size;
  mono_perfcounters.47->loader_bytes = D.21618;
  mono_image_lock (image);
  D.21619 = image->mempool;
  res = mono_mempool_alloc (D.21619, size);
  mono_image_unlock (image);
  D.21620 = res;
  return D.21620;
}


__attribute__((visibility ("hidden")))
mono_image_alloc0 (struct MonoImage * image, guint size)
{
  struct MonoPerfCounters * mono_perfcounters.48;
  unsigned int D.21623;
  unsigned int D.21624;
  struct MonoMemPool * D.21625;
  void * D.21626;
  void * res;

  mono_perfcounters.48 = mono_perfcounters;
  mono_perfcounters.48 = mono_perfcounters;
  D.21623 = mono_perfcounters.48->loader_bytes;
  D.21624 = D.21623 + size;
  mono_perfcounters.48->loader_bytes = D.21624;
  mono_image_lock (image);
  D.21625 = image->mempool;
  res = mono_mempool_alloc0 (D.21625, size);
  mono_image_unlock (image);
  D.21626 = res;
  return D.21626;
}


__attribute__((visibility ("hidden")))
mono_image_strdup (struct MonoImage * image, const char * s)
{
  long unsigned int D.21628;
  struct MonoPerfCounters * mono_perfcounters.49;
  unsigned int D.21630;
  unsigned int D.21631;
  unsigned int D.21632;
  struct MonoMemPool * D.21633;
  char * D.21634;
  char * res;

  D.21628 = __strlen_g (s);
  mono_perfcounters.49 = mono_perfcounters;
  mono_perfcounters.49 = mono_perfcounters;
  D.21630 = mono_perfcounters.49->loader_bytes;
  D.21631 = (unsigned int) D.21628;
  D.21632 = D.21630 + D.21631;
  mono_perfcounters.49->loader_bytes = D.21632;
  mono_image_lock (image);
  D.21633 = image->mempool;
  res = mono_mempool_strdup (D.21633, s);
  mono_image_unlock (image);
  D.21634 = res;
  return D.21634;
}


__attribute__((visibility ("hidden")))
g_list_prepend_image (struct MonoImage * image, struct GList * list, void * data)
{
  struct GList * iftmp.50;
  struct GList * D.21640;
  struct GList * D.21645;
  struct GList * new_list;

  new_list = mono_image_alloc (image, 24);
  new_list->data = data;
  if (list != 0B) goto <D.21637>; else goto <D.21638>;
  <D.21637>:
  iftmp.50 = list->prev;
  goto <D.21639>;
  <D.21638>:
  iftmp.50 = 0B;
  <D.21639>:
  new_list->prev = iftmp.50;
  new_list->next = list;
  D.21640 = new_list->prev;
  if (D.21640 != 0B) goto <D.21641>; else goto <D.21642>;
  <D.21641>:
  D.21640 = new_list->prev;
  D.21640->next = new_list;
  <D.21642>:
  if (list != 0B) goto <D.21643>; else goto <D.21644>;
  <D.21643>:
  list->prev = new_list;
  <D.21644>:
  D.21645 = new_list;
  return D.21645;
}


__attribute__((visibility ("hidden")))
g_slist_append_image (struct MonoImage * image, struct GSList * list, void * data)
{
  struct GSList * D.21647;
  struct GSList * new_list;

  new_list = mono_image_alloc (image, 16);
  new_list->data = data;
  new_list->next = 0B;
  D.21647 = monoeg_g_slist_concat (list, new_list);
  return D.21647;
}


__attribute__((visibility ("hidden")))
mono_image_lock (struct MonoImage * image)
{
  union mono_mutex_t * D.21649;
  _Bool D.21652;
  long int D.21653;
  long int D.21654;

  {
    int ret;

    D.21649 = &image->lock.mutex;
    ret = pthread_mutex_lock (D.21649);
    if (ret != 0) goto <D.21650>; else goto <D.21651>;
    <D.21650>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.21651>:
    D.21652 = ret != 0;
    D.21653 = (long int) D.21652;
    D.21654 = __builtin_expect (D.21653, 0);
    if (D.21654 != 0) goto <D.21655>; else goto <D.21656>;
    <D.21655>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 2304, "ret == 0");
    <D.21656>:
  }
}


__attribute__((visibility ("hidden")))
mono_image_unlock (struct MonoImage * image)
{
  union mono_mutex_t * D.21657;
  _Bool D.21660;
  long int D.21661;
  long int D.21662;

  {
    int ret;

    D.21657 = &image->lock.mutex;
    ret = pthread_mutex_unlock (D.21657);
    if (ret != 0) goto <D.21658>; else goto <D.21659>;
    <D.21658>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.21659>:
    D.21660 = ret != 0;
    D.21661 = (long int) D.21660;
    D.21662 = __builtin_expect (D.21661, 0);
    if (D.21662 != 0) goto <D.21663>; else goto <D.21664>;
    <D.21663>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 2310, "ret == 0");
    <D.21664>:
  }
}


__attribute__((visibility ("hidden")))
mono_image_property_lookup (struct MonoImage * image, void * subject, guint32 property)
{
  struct MonoPropertyHash * D.21665;
  void * D.21666;
  void * res;

  mono_image_lock (image);
  D.21665 = image->property_hash;
  res = mono_property_hash_lookup (D.21665, subject, property);
  mono_image_unlock (image);
  D.21666 = res;
  return D.21666;
}


__attribute__((visibility ("hidden")))
mono_image_property_insert (struct MonoImage * image, void * subject, guint32 property, void * value)
{
  struct MonoPropertyHash * D.21668;

  mono_image_lock (image);
  D.21668 = image->property_hash;
  mono_property_hash_insert (D.21668, subject, property, value);
  mono_image_unlock (image);
}


__attribute__((visibility ("hidden")))
mono_image_property_remove (struct MonoImage * image, void * subject)
{
  struct MonoPropertyHash * D.21669;

  mono_image_lock (image);
  D.21669 = image->property_hash;
  mono_property_hash_remove_object (D.21669, subject);
  mono_image_unlock (image);
}


__attribute__((visibility ("hidden")))
mono_image_append_class_to_reflection_info_set (struct MonoClass * class)
{
  long unsigned int D.21670;
  long unsigned int D.21671;
  _Bool D.21672;
  long int D.21673;
  long int D.21674;
  struct MonoMemPool * D.21677;
  struct GSList * D.21678;
  struct GSList * D.21679;
  struct MonoImage * image;

  image = class->image;
  D.21670 = BIT_FIELD_REF <*image, 64, 192>;
  D.21671 = D.21670 & 268435456;
  D.21672 = D.21671 == 0;
  D.21673 = (long int) D.21672;
  D.21674 = __builtin_expect (D.21673, 0);
  if (D.21674 != 0) goto <D.21675>; else goto <D.21676>;
  <D.21675>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "image.c", 2367, "image->dynamic");
  <D.21676>:
  mono_image_lock (image);
  D.21677 = image->mempool;
  D.21678 = image->reflection_info_unregister_classes;
  D.21679 = g_slist_prepend_mempool (D.21677, D.21678, class);
  image->reflection_info_unregister_classes = D.21679;
  mono_image_unlock (image);
}


g_slist_prepend_mempool (struct MonoMemPool * mp, struct GSList * list, void * data)
{
  struct GSList * D.21680;
  struct GSList * new_list;

  new_list = mono_mempool_alloc (mp, 16);
  new_list->data = data;
  new_list->next = list;
  D.21680 = new_list;
  return D.21680;
}


