mono_class_from_typeref (struct MonoImage * image, guint32 type_token)
{
  unsigned int D.24269;
  unsigned int D.24270;
  int D.24271;
  char * D.24274;
  const char * D.24275;
  struct MonoClass * D.24276;
  int D.24277;
  unsigned int D.24278;
  unsigned int D.24279;
  unsigned int D.24280;
  unsigned int D.24281;
  int idx.0;
  const char * iftmp.1;
  char D.24288;
  struct MonoAssembly * D.24292;
  struct MonoAssemblyName * D.24293;
  gchar * D.24296;
  unsigned int D.24297;
  unsigned char D.24302;
  unsigned char D.24303;
  struct MonoClassExt * D.24305;
  int D.21049;
  const char * D.24307;
  struct MonoImage * D.24310;
  unsigned int D.24311;
  unsigned int D.24312;
  struct MonoTableInfo * D.24313;
  int D.24314;
  struct MonoTableInfo * D.24315;
  unsigned int D.24316;
  int D.24317;
  int D.21065;
  unsigned int D.24320;
  int D.24321;
  int D.24324;
  unsigned int D.24325;
  unsigned int D.24326;
  <unnamed-unsigned:24> D.24328;
  unsigned int D.24329;
  gchar * D.24332;
  struct MonoAssembly * * D.24335;
  sizetype D.24337;
  sizetype D.24338;
  struct MonoAssembly * * D.24339;
  struct MonoAssembly * D.24340;
  unsigned int D.24341;
  int D.24342;
  _Bool D.24343;
  long int D.24344;
  long int D.24345;
  int iftmp.2;
  struct MonoImage * D.24354;
  struct MonoError error;
  guint32 cols[3];
  struct MonoTableInfo * t;
  guint32 idx;
  const char * name;
  const char * nspace;
  struct MonoClass * res;
  struct MonoImage * module;

  try
    {
      t = &image->tables[1];
      D.24269 = type_token & 16777215;
      D.24270 = D.24269 + 4294967295;
      D.24271 = mono_verifier_verify_typeref_row (image, D.24270, &error);
      if (D.24271 == 0) goto <D.24272>; else goto <D.24273>;
      <D.24272>:
      D.24274 = image->name;
      D.24275 = mono_error_get_message (&error);
      mono_trace (16, 2, "Failed to resolve typeref from %s due to \'%s\'", D.24274, D.24275);
      D.24276 = 0B;
      return D.24276;
      <D.24273>:
      D.24269 = type_token & 16777215;
      D.24270 = D.24269 + 4294967295;
      D.24277 = (int) D.24270;
      mono_metadata_decode_row (t, D.24277, &cols, 3);
      D.24278 = cols[1];
      name = mono_metadata_string_heap (image, D.24278);
      D.24279 = cols[2];
      nspace = mono_metadata_string_heap (image, D.24279);
      D.24280 = cols[0];
      idx = D.24280 >> 2;
      D.24280 = cols[0];
      D.24281 = D.24280 & 3;
      switch (D.24281) <default: <D.24327>, case 0: <D.21033>, case 1: <D.21035>, case 2: <D.21070>, case 3: <D.21038>>
      <D.21033>:
      if (idx == 0) goto <D.24282>; else goto <D.24283>;
      <D.24282>:
      monoeg_g_log (0B, 4, "null ResolutionScope not yet handled");
      <D.21034>:
      goto <D.21034>;
      <D.24283>:
      D.24276 = mono_class_from_name (image, nspace, name);
      return D.24276;
      <D.21035>:
      idx.0 = (int) idx;
      module = mono_image_load_module (image, idx.0);
      if (module != 0B) goto <D.24285>; else goto <D.24286>;
      <D.24285>:
      D.24276 = mono_class_from_name (module, nspace, name);
      return D.24276;
      <D.24286>:
      {
        char * msg;
        char * human_name;

        D.24288 = *nspace;
        if (D.24288 != 0) goto <D.24289>; else goto <D.24290>;
        <D.24289>:
        iftmp.1 = ".";
        goto <D.24291>;
        <D.24290>:
        iftmp.1 = "";
        <D.24291>:
        msg = monoeg_g_strdup_printf ("%s%s%s", nspace, iftmp.1, name);
        D.24292 = image->assembly;
        D.24293 = &D.24292->aname;
        human_name = mono_stringify_assembly_name (D.24293);
        mono_loader_set_error_type_load (msg, human_name);
        monoeg_g_free (msg);
        monoeg_g_free (human_name);
        D.24276 = 0B;
        return D.24276;
      }
      <D.21038>:
      {
        struct MonoClass * enclosing;
        struct GList * tmp;

        D.24269 = type_token & 16777215;
        if (D.24269 == idx) goto <D.24294>; else goto <D.24295>;
        <D.24294>:
        D.24274 = image->name;
        D.24296 = monoeg_g_strdup_printf ("Image %s with self-referencing typeref token %08x.", D.24274, type_token);
        mono_loader_set_error_bad_image (D.24296);
        D.24276 = 0B;
        return D.24276;
        <D.24295>:
        D.24297 = idx | 16777216;
        enclosing = mono_class_from_typeref (image, D.24297);
        if (enclosing == 0B) goto <D.24298>; else goto <D.24299>;
        <D.24298>:
        D.24276 = 0B;
        return D.24276;
        <D.24299>:
        D.24302 = BIT_FIELD_REF <*enclosing, 8, 184>;
        D.24303 = D.24302 & 128;
        if (D.24303 != 0) goto <D.24304>; else goto <D.24300>;
        <D.24304>:
        D.24305 = enclosing->ext;
        if (D.24305 != 0B) goto <D.24306>; else goto <D.24300>;
        <D.24306>:
        D.24305 = enclosing->ext;
        tmp = D.24305->nested_classes;
        goto <D.21051>;
        <D.21050>:
        res = tmp->data;
        {
          size_t __s1_len;
          size_t __s2_len;

          D.24307 = res->name;
          D.21049 = __builtin_strcmp (D.24307, name);
        }
        if (D.21049 == 0) goto <D.24308>; else goto <D.24309>;
        <D.24308>:
        D.24276 = res;
        return D.24276;
        <D.24309>:
        tmp = tmp->next;
        <D.21051>:
        if (tmp != 0B) goto <D.21050>; else goto <D.21052>;
        <D.21052>:
        goto <D.24301>;
        <D.24300>:
        {
          int i;

          D.24310 = enclosing->image;
          D.24311 = enclosing->type_token;
          D.24312 = mono_metadata_nesting_typedef (D.24310, D.24311, 1);
          i = (int) D.24312;
          goto <D.21068>;
          <D.21067>:
          {
            guint32 class_nested;
            guint32 string_offset;
            const char * nname;

            D.24310 = enclosing->image;
            D.24313 = &D.24310->tables[41];
            D.24314 = i + -1;
            class_nested = mono_metadata_decode_row_col (D.24313, D.24314, 0);
            D.24310 = enclosing->image;
            D.24315 = &D.24310->tables[2];
            D.24316 = class_nested + 4294967295;
            D.24317 = (int) D.24316;
            string_offset = mono_metadata_decode_row_col (D.24315, D.24317, 1);
            D.24310 = enclosing->image;
            nname = mono_metadata_string_heap (D.24310, string_offset);
            {
              size_t __s1_len;
              size_t __s2_len;

              D.21065 = __builtin_strcmp (nname, name);
            }
            if (D.21065 == 0) goto <D.24318>; else goto <D.24319>;
            <D.24318>:
            {
              struct MonoClass * res;

              D.24310 = enclosing->image;
              D.24320 = class_nested | 33554432;
              res = mono_class_create_from_typedef (D.24310, D.24320, &error);
              D.24321 = mono_error_ok (&error);
              if (D.24321 == 0) goto <D.24322>; else goto <D.24323>;
              <D.24322>:
              mono_loader_set_error_from_mono_error (&error);
              mono_error_cleanup (&error);
              D.24276 = 0B;
              return D.24276;
              <D.24323>:
              D.24276 = res;
              return D.24276;
            }
            <D.24319>:
            D.24310 = enclosing->image;
            D.24311 = enclosing->type_token;
            D.24324 = i + 1;
            D.24325 = (unsigned int) D.24324;
            D.24326 = mono_metadata_nesting_typedef (D.24310, D.24311, D.24325);
            i = (int) D.24326;
          }
          <D.21068>:
          if (i != 0) goto <D.21067>; else goto <D.21069>;
          <D.21069>:
        }
        <D.24301>:
        D.24274 = image->name;
        monoeg_g_log (0B, 16, "TypeRef ResolutionScope not yet handled (%d) for %s.%s in image %s", idx, nspace, name, D.24274);
        D.24276 = 0B;
        return D.24276;
      }
      <D.21070>:
      goto <D.21071>;
      <D.24327>:
      <D.21071>:
      D.24328 = image->tables[35].rows;
      D.24329 = (unsigned int) D.24328;
      if (D.24329 < idx) goto <D.24330>; else goto <D.24331>;
      <D.24330>:
      D.24274 = image->name;
      D.24332 = monoeg_g_strdup_printf ("Image %s with invalid assemblyref token %08x.", D.24274, idx);
      mono_loader_set_error_bad_image (D.24332);
      D.24276 = 0B;
      return D.24276;
      <D.24331>:
      D.24335 = image->references;
      if (D.24335 == 0B) goto <D.24333>; else goto <D.24336>;
      <D.24336>:
      D.24335 = image->references;
      D.24337 = idx + 1073741823;
      D.24338 = D.24337 * 4;
      D.24339 = D.24335 + D.24338;
      D.24340 = *D.24339;
      if (D.24340 == 0B) goto <D.24333>; else goto <D.24334>;
      <D.24333>:
      D.24341 = idx + 4294967295;
      D.24342 = (int) D.24341;
      mono_assembly_load_reference (image, D.24342);
      <D.24334>:
      D.24335 = image->references;
      D.24337 = idx + 1073741823;
      D.24338 = D.24337 * 4;
      D.24339 = D.24335 + D.24338;
      D.24340 = *D.24339;
      D.24343 = D.24340 == 0B;
      D.24344 = (long int) D.24343;
      D.24345 = __builtin_expect (D.24344, 0);
      if (D.24345 != 0) goto <D.24346>; else goto <D.24347>;
      <D.24346>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 248, "image->references [idx - 1]");
      <D.24347>:
      D.24335 = image->references;
      D.24337 = idx + 1073741823;
      D.24338 = D.24337 * 4;
      D.24339 = D.24335 + D.24338;
      D.24340 = *D.24339;
      if (D.24340 == 4294967295B) goto <D.24348>; else goto <D.24349>;
      <D.24348>:
      {
        struct MonoAssemblyName aname;
        char * human_name;

        try
          {
            D.24341 = idx + 4294967295;
            D.24342 = (int) D.24341;
            mono_assembly_get_assemblyref (image, D.24342, &aname);
            human_name = mono_stringify_assembly_name (&aname);
            D.24292 = image->assembly;
            if (D.24292 != 0B) goto <D.24351>; else goto <D.24352>;
            <D.24351>:
            D.24292 = image->assembly;
            iftmp.2 = D.24292->ref_only;
            goto <D.24353>;
            <D.24352>:
            iftmp.2 = 0;
            <D.24353>:
            mono_loader_set_error_assembly_load (human_name, iftmp.2);
            monoeg_g_free (human_name);
            D.24276 = 0B;
            return D.24276;
          }
        finally
          {
            aname = {CLOBBER};
          }
      }
      <D.24349>:
      D.24335 = image->references;
      D.24337 = idx + 1073741823;
      D.24338 = D.24337 * 4;
      D.24339 = D.24335 + D.24338;
      D.24340 = *D.24339;
      D.24354 = D.24340->image;
      D.24276 = mono_class_from_name (D.24354, nspace, name);
      return D.24276;
    }
  finally
    {
      error = {CLOBBER};
      cols = {CLOBBER};
    }
}


mono_class_create_from_typedef (struct MonoImage * image, guint32 type_token, struct MonoError * error)
{
  unsigned int D.24360;
  <unnamed-unsigned:24> D.24362;
  unsigned int D.24363;
  struct MonoLoaderError * D.24364;
  _Bool D.24365;
  long int D.24366;
  long int D.24367;
  struct MonoClass * D.24370;
  struct MonoInternalHashTable * D.24371;
  void * type_token.3;
  struct MonoLoaderError * D.24375;
  _Bool D.24376;
  long int D.24377;
  long int D.24378;
  unsigned int D.24381;
  int D.24382;
  unsigned int D.24383;
  unsigned int D.24384;
  unsigned int D.24385;
  unsigned int classes_size.4;
  unsigned int classes_size.5;
  unsigned int D.24388;
  struct MonoGenericContainer * D.24389;
  struct MonoGenericContainer * D.24390;
  unsigned int D.24395;
  unsigned int D.24398;
  gchar * D.24403;
  struct MonoGenericClass * D.24408;
  struct MonoClass * D.24411;
  struct MonoClass * D.24418;
  int D.24419;
  const char * D.24422;
  gchar * D.24423;
  struct MonoLoaderError * D.24424;
  _Bool D.24425;
  long int D.24426;
  long int D.24427;
  unsigned int D.24430;
  unsigned int D.24431;
  struct MonoClass * D.24434;
  unsigned char D.24435;
  unsigned char D.24436;
  int D.24439;
  gchar * D.24442;
  struct MonoClass * * interfaces.6;
  unsigned int icount.7;
  short unsigned int D.24445;
  unsigned int D.24446;
  unsigned int D.24447;
  unsigned int D.24448;
  unsigned int D.24449;
  int tidx.8;
  unsigned int D.24453;
  unsigned int D.24454;
  <unnamed-unsigned:24> D.24456;
  <unnamed-unsigned:24> D.24457;
  unsigned int D.24461;
  unsigned int D.24463;
  unsigned int D.24464;
  unsigned int D.24465;
  unsigned int D.24468;
  unsigned int D.24469;
  int D.24471;
  int D.22893;
  int iftmp.9;
  int D.22892;
  const char[7] * D.24477;
  unsigned char D.24478;
  int D.24479;
  unsigned char D.24480;
  int D.24481;
  _Bool D.24482;
  _Bool D.24483;
  _Bool D.24484;
  const unsigned char * D.24487;
  unsigned char D.24488;
  int D.24489;
  const unsigned char * D.24490;
  unsigned char D.24491;
  int D.24492;
  _Bool D.24493;
  _Bool D.24494;
  const unsigned char * D.24497;
  unsigned char D.24498;
  int D.24499;
  const unsigned char * D.24500;
  unsigned char D.24501;
  int D.24502;
  _Bool D.24503;
  _Bool D.24504;
  const unsigned char * D.24507;
  unsigned char D.24508;
  int D.24509;
  const unsigned char * D.24510;
  unsigned char D.24511;
  int D.24512;
  int D.22902;
  int iftmp.10;
  int D.22901;
  const char[6] * D.24519;
  unsigned char D.24520;
  int D.24521;
  unsigned char D.24522;
  int D.24523;
  _Bool D.24524;
  _Bool D.24525;
  _Bool D.24526;
  const unsigned char * D.24529;
  unsigned char D.24530;
  int D.24531;
  const unsigned char * D.24532;
  unsigned char D.24533;
  int D.24534;
  _Bool D.24535;
  _Bool D.24536;
  const unsigned char * D.24539;
  unsigned char D.24540;
  int D.24541;
  const unsigned char * D.24542;
  unsigned char D.24543;
  int D.24544;
  _Bool D.24545;
  _Bool D.24546;
  const unsigned char * D.24549;
  unsigned char D.24550;
  int D.24551;
  const unsigned char * D.24552;
  unsigned char D.24553;
  int D.24554;
  int D.24558;
  unsigned int D.24559;
  unsigned int D.24560;
  int D.24561;
  unsigned int D.24562;
  _Bool D.24563;
  long int D.24564;
  long int D.24565;
  struct MonoClass * D.24572;
  struct MonoLoaderError * D.24573;
  _Bool D.24574;
  long int D.24575;
  long int D.24576;
  struct MonoClass * D.24579;
  int D.24582;
  gchar * D.24585;
  struct MonoLoaderError * D.24586;
  _Bool D.24587;
  long int D.24588;
  long int D.24589;
  struct MonoImage * D.24592;
  const char * D.24593;
  int D.22912;
  int iftmp.11;
  int D.22911;
  const char[10] * D.24599;
  unsigned char D.24600;
  int D.24601;
  unsigned char D.24602;
  int D.24603;
  _Bool D.24604;
  _Bool D.24605;
  _Bool D.24606;
  const unsigned char * D.24609;
  unsigned char D.24610;
  int D.24611;
  const unsigned char * D.24612;
  unsigned char D.24613;
  int D.24614;
  _Bool D.24615;
  _Bool D.24616;
  const unsigned char * D.24619;
  unsigned char D.24620;
  int D.24621;
  const unsigned char * D.24622;
  unsigned char D.24623;
  int D.24624;
  _Bool D.24625;
  _Bool D.24626;
  const unsigned char * D.24629;
  unsigned char D.24630;
  int D.24631;
  const unsigned char * D.24632;
  unsigned char D.24633;
  int D.24634;
  int D.22921;
  int iftmp.12;
  int D.22920;
  unsigned char D.24641;
  int D.24642;
  _Bool D.24643;
  _Bool D.24644;
  _Bool D.24645;
  const unsigned char * D.24648;
  unsigned char D.24649;
  int D.24650;
  _Bool D.24651;
  _Bool D.24652;
  const unsigned char * D.24655;
  unsigned char D.24656;
  int D.24657;
  _Bool D.24658;
  _Bool D.24659;
  const unsigned char * D.24662;
  unsigned char D.24663;
  int D.24664;
  int D.24668;
  int iftmp.13;
  int D.22939;
  int iftmp.14;
  int D.22938;
  const char[3] * D.24678;
  unsigned char D.24679;
  int D.24680;
  unsigned char D.24681;
  int D.24682;
  _Bool D.24683;
  _Bool D.24684;
  _Bool D.24685;
  const unsigned char * D.24688;
  unsigned char D.24689;
  int D.24690;
  const unsigned char * D.24691;
  unsigned char D.24692;
  int D.24693;
  _Bool D.24694;
  _Bool D.24695;
  const unsigned char * D.24698;
  unsigned char D.24699;
  int D.24700;
  const unsigned char * D.24701;
  unsigned char D.24702;
  int D.24703;
  _Bool D.24704;
  _Bool D.24705;
  const unsigned char * D.24708;
  unsigned char D.24709;
  int D.24710;
  const unsigned char * D.24711;
  unsigned char D.24712;
  int D.24713;
  const char * D.24715;
  int D.22948;
  int iftmp.15;
  int D.22947;
  const char[4] * D.24720;
  unsigned char D.24721;
  int D.24722;
  unsigned char D.24723;
  int D.24724;
  _Bool D.24725;
  _Bool D.24726;
  _Bool D.24727;
  const unsigned char * D.24730;
  unsigned char D.24731;
  int D.24732;
  const unsigned char * D.24733;
  unsigned char D.24734;
  int D.24735;
  _Bool D.24736;
  _Bool D.24737;
  const unsigned char * D.24740;
  unsigned char D.24741;
  int D.24742;
  const unsigned char * D.24743;
  unsigned char D.24744;
  int D.24745;
  _Bool D.24746;
  _Bool D.24747;
  const unsigned char * D.24750;
  unsigned char D.24751;
  int D.24752;
  const unsigned char * D.24753;
  unsigned char D.24754;
  int D.24755;
  int D.22957;
  int iftmp.16;
  int D.22956;
  const char[3] * D.24761;
  unsigned char D.24762;
  int D.24763;
  unsigned char D.24764;
  int D.24765;
  _Bool D.24766;
  _Bool D.24767;
  _Bool D.24768;
  const unsigned char * D.24771;
  unsigned char D.24772;
  int D.24773;
  const unsigned char * D.24774;
  unsigned char D.24775;
  int D.24776;
  _Bool D.24777;
  _Bool D.24778;
  const unsigned char * D.24781;
  unsigned char D.24782;
  int D.24783;
  const unsigned char * D.24784;
  unsigned char D.24785;
  int D.24786;
  _Bool D.24787;
  _Bool D.24788;
  const unsigned char * D.24791;
  unsigned char D.24792;
  int D.24793;
  const unsigned char * D.24794;
  unsigned char D.24795;
  int D.24796;
  int D.22966;
  int iftmp.17;
  int D.22965;
  const char[3] * D.24802;
  unsigned char D.24803;
  int D.24804;
  unsigned char D.24805;
  int D.24806;
  _Bool D.24807;
  _Bool D.24808;
  _Bool D.24809;
  const unsigned char * D.24812;
  unsigned char D.24813;
  int D.24814;
  const unsigned char * D.24815;
  unsigned char D.24816;
  int D.24817;
  _Bool D.24818;
  _Bool D.24819;
  const unsigned char * D.24822;
  unsigned char D.24823;
  int D.24824;
  const unsigned char * D.24825;
  unsigned char D.24826;
  int D.24827;
  _Bool D.24828;
  _Bool D.24829;
  const unsigned char * D.24832;
  unsigned char D.24833;
  int D.24834;
  const unsigned char * D.24835;
  unsigned char D.24836;
  int D.24837;
  int D.22975;
  int iftmp.18;
  int D.22974;
  const char[4] * D.24843;
  unsigned char D.24844;
  int D.24845;
  unsigned char D.24846;
  int D.24847;
  _Bool D.24848;
  _Bool D.24849;
  _Bool D.24850;
  const unsigned char * D.24853;
  unsigned char D.24854;
  int D.24855;
  const unsigned char * D.24856;
  unsigned char D.24857;
  int D.24858;
  _Bool D.24859;
  _Bool D.24860;
  const unsigned char * D.24863;
  unsigned char D.24864;
  int D.24865;
  const unsigned char * D.24866;
  unsigned char D.24867;
  int D.24868;
  _Bool D.24869;
  _Bool D.24870;
  const unsigned char * D.24873;
  unsigned char D.24874;
  int D.24875;
  const unsigned char * D.24876;
  unsigned char D.24877;
  int D.24878;
  int D.22984;
  int iftmp.19;
  int D.22983;
  const char[3] * D.24884;
  unsigned char D.24885;
  int D.24886;
  unsigned char D.24887;
  int D.24888;
  _Bool D.24889;
  _Bool D.24890;
  _Bool D.24891;
  const unsigned char * D.24894;
  unsigned char D.24895;
  int D.24896;
  const unsigned char * D.24897;
  unsigned char D.24898;
  int D.24899;
  _Bool D.24900;
  _Bool D.24901;
  const unsigned char * D.24904;
  unsigned char D.24905;
  int D.24906;
  const unsigned char * D.24907;
  unsigned char D.24908;
  int D.24909;
  _Bool D.24910;
  _Bool D.24911;
  const unsigned char * D.24914;
  unsigned char D.24915;
  int D.24916;
  const unsigned char * D.24917;
  unsigned char D.24918;
  int D.24919;
  int D.22993;
  int iftmp.20;
  int D.22992;
  const char[3] * D.24925;
  unsigned char D.24926;
  int D.24927;
  unsigned char D.24928;
  int D.24929;
  _Bool D.24930;
  _Bool D.24931;
  _Bool D.24932;
  const unsigned char * D.24935;
  unsigned char D.24936;
  int D.24937;
  const unsigned char * D.24938;
  unsigned char D.24939;
  int D.24940;
  _Bool D.24941;
  _Bool D.24942;
  const unsigned char * D.24945;
  unsigned char D.24946;
  int D.24947;
  const unsigned char * D.24948;
  unsigned char D.24949;
  int D.24950;
  _Bool D.24951;
  _Bool D.24952;
  const unsigned char * D.24955;
  unsigned char D.24956;
  int D.24957;
  const unsigned char * D.24958;
  unsigned char D.24959;
  int D.24960;
  int D.23002;
  int iftmp.21;
  int D.23001;
  const char[4] * D.24966;
  unsigned char D.24967;
  int D.24968;
  unsigned char D.24969;
  int D.24970;
  _Bool D.24971;
  _Bool D.24972;
  _Bool D.24973;
  const unsigned char * D.24976;
  unsigned char D.24977;
  int D.24978;
  const unsigned char * D.24979;
  unsigned char D.24980;
  int D.24981;
  _Bool D.24982;
  _Bool D.24983;
  const unsigned char * D.24986;
  unsigned char D.24987;
  int D.24988;
  const unsigned char * D.24989;
  unsigned char D.24990;
  int D.24991;
  _Bool D.24992;
  _Bool D.24993;
  const unsigned char * D.24996;
  unsigned char D.24997;
  int D.24998;
  const unsigned char * D.24999;
  unsigned char D.25000;
  int D.25001;
  int D.23011;
  int iftmp.22;
  int D.23010;
  const char[4] * D.25007;
  unsigned char D.25008;
  int D.25009;
  unsigned char D.25010;
  int D.25011;
  _Bool D.25012;
  _Bool D.25013;
  _Bool D.25014;
  const unsigned char * D.25017;
  unsigned char D.25018;
  int D.25019;
  const unsigned char * D.25020;
  unsigned char D.25021;
  int D.25022;
  _Bool D.25023;
  _Bool D.25024;
  const unsigned char * D.25027;
  unsigned char D.25028;
  int D.25029;
  const unsigned char * D.25030;
  unsigned char D.25031;
  int D.25032;
  _Bool D.25033;
  _Bool D.25034;
  const unsigned char * D.25037;
  unsigned char D.25038;
  int D.25039;
  const unsigned char * D.25040;
  unsigned char D.25041;
  int D.25042;
  int D.23020;
  int iftmp.23;
  int D.23019;
  const char[5] * D.25048;
  unsigned char D.25049;
  int D.25050;
  unsigned char D.25051;
  int D.25052;
  _Bool D.25053;
  _Bool D.25054;
  _Bool D.25055;
  const unsigned char * D.25058;
  unsigned char D.25059;
  int D.25060;
  const unsigned char * D.25061;
  unsigned char D.25062;
  int D.25063;
  _Bool D.25064;
  _Bool D.25065;
  const unsigned char * D.25068;
  unsigned char D.25069;
  int D.25070;
  const unsigned char * D.25071;
  unsigned char D.25072;
  int D.25073;
  _Bool D.25074;
  _Bool D.25075;
  const unsigned char * D.25078;
  unsigned char D.25079;
  int D.25080;
  const unsigned char * D.25081;
  unsigned char D.25082;
  int D.25083;
  unsigned char D.25085;
  <unnamed-unsigned:1> D.25086;
  struct MonoLoaderError * D.25087;
  _Bool D.25088;
  long int D.25089;
  long int D.25090;
  struct MonoLoaderError * D.25093;
  _Bool D.25094;
  long int D.25095;
  long int D.25096;
  struct MonoTableInfo * tt;
  struct MonoClass * class;
  struct MonoClass * parent;
  guint32 cols[6];
  guint32 cols_next[6];
  guint tidx;
  struct MonoGenericContext * context;
  const char * name;
  const char * nspace;
  guint icount;
  struct MonoClass * * interfaces;
  guint32 field_last;
  guint32 method_last;
  guint32 nesting_tokeen;
  void parent_failure = <<< error >>>;

  try
    {
      tt = &image->tables[2];
      parent = 0B;
      tidx = type_token & 16777215;
      context = 0B;
      icount = 0;
      mono_error_init (error);
      D.24360 = type_token >> 24;
      if (D.24360 != 2) goto <D.24358>; else goto <D.24361>;
      <D.24361>:
      D.24362 = tt->rows;
      D.24363 = (unsigned int) D.24362;
      if (D.24363 < tidx) goto <D.24358>; else goto <D.24359>;
      <D.24358>:
      mono_error_set_bad_image (error, image, "Invalid typedef token %x", type_token);
      D.24364 = mono_loader_get_last_error ();
      D.24365 = D.24364 != 0B;
      D.24366 = (long int) D.24365;
      D.24367 = __builtin_expect (D.24366, 0);
      if (D.24367 != 0) goto <D.24368>; else goto <D.24369>;
      <D.24368>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5589, "!mono_loader_get_last_error ()");
      <D.24369>:
      D.24370 = 0B;
      return D.24370;
      <D.24359>:
      mono_loader_lock ();
      D.24371 = &image->class_cache;
      type_token.3 = (void *) type_token;
      class = mono_internal_hash_table_lookup (D.24371, type_token.3);
      if (class != 0B) goto <D.24373>; else goto <D.24374>;
      <D.24373>:
      mono_loader_unlock ();
      D.24375 = mono_loader_get_last_error ();
      D.24376 = D.24375 != 0B;
      D.24377 = (long int) D.24376;
      D.24378 = __builtin_expect (D.24377, 0);
      if (D.24378 != 0) goto <D.24379>; else goto <D.24380>;
      <D.24379>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5597, "!mono_loader_get_last_error ()");
      <D.24380>:
      D.24370 = class;
      return D.24370;
      <D.24374>:
      D.24381 = tidx + 4294967295;
      D.24382 = (int) D.24381;
      mono_metadata_decode_row (tt, D.24382, &cols, 6);
      D.24383 = cols[1];
      name = mono_metadata_string_heap (image, D.24383);
      D.24384 = cols[2];
      nspace = mono_metadata_string_heap (image, D.24384);
      class = mono_image_alloc0 (image, 164);
      class->name = name;
      class->name_space = nspace;
      mono_profiler_class_event (class, 0);
      class->image = image;
      class->type_token = type_token;
      D.24385 = cols[0];
      class->flags = D.24385;
      D.24371 = &image->class_cache;
      type_token.3 = (void *) type_token;
      mono_internal_hash_table_insert (D.24371, type_token.3, class);
      classes_size.4 = classes_size;
      classes_size.5 = classes_size.4 + 164;
      classes_size = classes_size.5;
      D.24388 = class->type_token;
      D.24389 = mono_metadata_load_generic_params (image, D.24388, 0B);
      class->generic_container = D.24389;
      D.24390 = class->generic_container;
      if (D.24390 != 0B) goto <D.24391>; else goto <D.24392>;
      <D.24391>:
      class->is_generic = 1;
      D.24390 = class->generic_container;
      D.24390->owner.klass = class;
      D.24390 = class->generic_container;
      context = &D.24390->context;
      <D.24392>:
      D.24390 = class->generic_container;
      if (D.24390 != 0B) goto <D.24393>; else goto <D.24394>;
      <D.24393>:
      enable_gclass_recording ();
      <D.24394>:
      D.24395 = cols[3];
      if (D.24395 != 0) goto <D.24396>; else goto <D.24397>;
      <D.24396>:
      {
        struct MonoClass * tmp;
        guint32 parent_token;

        D.24395 = cols[3];
        parent_token = mono_metadata_token_from_dor (D.24395);
        D.24398 = parent_token >> 24;
        if (D.24398 == 27) goto <D.24399>; else goto <D.24400>;
        <D.24399>:
        class->this_arg.byref = 1;
        class->this_arg.data.klass = class;
        class->this_arg.type = 18;
        class->byval_arg.data.klass = class;
        class->byval_arg.type = 18;
        <D.24400>:
        parent = mono_class_get_full (image, parent_token, context);
        if (parent == 0B) goto <D.24401>; else goto <D.24402>;
        <D.24401>:
        D.24403 = monoeg_g_strdup_printf ("Could not load parent, token is %x", parent_token);
        mono_class_set_failure_from_loader_error (class, error, D.24403);
        goto parent_failure;
        <D.24402>:
        tmp = parent;
        goto <D.22883>;
        <D.22882>:
        if (tmp == class) goto <D.24404>; else goto <D.24405>;
        <D.24404>:
        mono_class_set_failure_and_error (class, error, "Cycle found while resolving parent");
        goto parent_failure;
        <D.24405>:
        D.24390 = class->generic_container;
        if (D.24390 != 0B) goto <D.24406>; else goto <D.24407>;
        <D.24406>:
        D.24408 = tmp->generic_class;
        if (D.24408 != 0B) goto <D.24409>; else goto <D.24410>;
        <D.24409>:
        D.24408 = tmp->generic_class;
        D.24411 = D.24408->container_class;
        if (D.24411 == class) goto <D.24412>; else goto <D.24413>;
        <D.24412>:
        mono_class_set_failure_and_error (class, error, "Parent extends generic instance of this type");
        goto parent_failure;
        <D.24413>:
        <D.24410>:
        <D.24407>:
        tmp = tmp->parent;
        <D.22883>:
        if (tmp != 0B) goto <D.22882>; else goto <D.22884>;
        <D.22884>:
      }
      <D.24397>:
      mono_class_setup_parent (class, parent);
      mono_class_setup_mono_type (class);
      D.24390 = class->generic_container;
      if (D.24390 != 0B) goto <D.24414>; else goto <D.24415>;
      <D.24414>:
      disable_gclass_recording (fix_gclass_incomplete_instantiation, class);
      <D.24415>:
      nesting_tokeen = mono_metadata_nested_in_typedef (image, type_token);
      if (nesting_tokeen != 0) goto <D.24416>; else goto <D.24417>;
      <D.24416>:
      D.24418 = mono_class_create_from_typedef (image, nesting_tokeen, error);
      class->nested_in = D.24418;
      D.24419 = mono_error_ok (error);
      if (D.24419 == 0) goto <D.24420>; else goto <D.24421>;
      <D.24420>:
      D.24422 = mono_error_get_message (error);
      D.24423 = monoeg_strdup (D.24422);
      mono_class_set_failure (class, 7, D.24423);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.24424 = mono_loader_get_last_error ();
      D.24425 = D.24424 != 0B;
      D.24426 = (long int) D.24425;
      D.24427 = __builtin_expect (D.24426, 0);
      if (D.24427 != 0) goto <D.24428>; else goto <D.24429>;
      <D.24428>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5684, "!mono_loader_get_last_error ()");
      <D.24429>:
      D.24370 = 0B;
      return D.24370;
      <D.24421>:
      <D.24417>:
      D.24430 = class->flags;
      D.24431 = D.24430 & 196608;
      if (D.24431 == 65536) goto <D.24432>; else goto <D.24433>;
      <D.24432>:
      class->unicode = 1;
      <D.24433>:
      class->element_class = class;
      D.24434 = class->element_class;
      class->cast_class = D.24434;
      D.24435 = BIT_FIELD_REF <*class, 8, 160>;
      D.24436 = D.24435 & 16;
      if (D.24436 == 0) goto <D.24437>; else goto <D.24438>;
      <D.24437>:
      D.24439 = mono_metadata_interfaces_from_typedef_full (image, type_token, &interfaces, &icount, 0, context);
      if (D.24439 == 0) goto <D.24440>; else goto <D.24441>;
      <D.24440>:
      D.24442 = monoeg_strdup ("Could not load interfaces");
      mono_class_set_failure_from_loader_error (class, error, D.24442);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.24370 = 0B;
      return D.24370;
      <D.24441>:
      interfaces.6 = interfaces;
      class->interfaces = interfaces.6;
      icount.7 = icount;
      D.24445 = (short unsigned int) icount.7;
      class->interface_count = D.24445;
      class->interfaces_inited = 1;
      <D.24438>:
      D.24446 = cols[4];
      D.24447 = D.24446 + 4294967295;
      class->field.first = D.24447;
      D.24448 = cols[5];
      D.24449 = D.24448 + 4294967295;
      class->method.first = D.24449;
      D.24362 = tt->rows;
      D.24363 = (unsigned int) D.24362;
      if (D.24363 > tidx) goto <D.24450>; else goto <D.24451>;
      <D.24450>:
      tidx.8 = (int) tidx;
      mono_metadata_decode_row (tt, tidx.8, &cols_next, 6);
      D.24453 = cols_next[4];
      field_last = D.24453 + 4294967295;
      D.24454 = cols_next[5];
      method_last = D.24454 + 4294967295;
      goto <D.24455>;
      <D.24451>:
      D.24456 = image->tables[4].rows;
      field_last = (guint32) D.24456;
      D.24457 = image->tables[6].rows;
      method_last = (guint32) D.24457;
      <D.24455>:
      D.24446 = cols[4];
      if (D.24446 != 0) goto <D.24460>; else goto <D.24458>;
      <D.24460>:
      D.24446 = cols[4];
      D.24456 = image->tables[4].rows;
      D.24461 = (unsigned int) D.24456;
      if (D.24446 <= D.24461) goto <D.24462>; else goto <D.24458>;
      <D.24462>:
      D.24463 = class->field.first;
      D.24464 = field_last - D.24463;
      class->field.count = D.24464;
      goto <D.24459>;
      <D.24458>:
      class->field.count = 0;
      <D.24459>:
      D.24448 = cols[5];
      D.24457 = image->tables[6].rows;
      D.24465 = (unsigned int) D.24457;
      if (D.24448 <= D.24465) goto <D.24466>; else goto <D.24467>;
      <D.24466>:
      D.24468 = class->method.first;
      D.24469 = method_last - D.24468;
      class->method.count = D.24469;
      goto <D.24470>;
      <D.24467>:
      class->method.count = 0;
      <D.24470>:
      D.24471 = mono_is_corlib_image (image);
      if (D.24471 != 0) goto <D.24472>; else goto <D.24473>;
      <D.24472>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 6;
        if (__s2_len <= 3) goto <D.24475>; else goto <D.24476>;
        <D.24475>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = nspace;
          D.24477 = "System";
          D.24478 = MEM[(const unsigned char *)D.24477];
          D.24479 = (int) D.24478;
          D.24480 = *__s2;
          D.24481 = (int) D.24480;
          __result = D.24479 - D.24481;
          {
            D.24482 = __s2_len != 0;
            D.24483 = __result == 0;
            D.24484 = D.24482 & D.24483;
            if (D.24484 != 0) goto <D.24485>; else goto <D.24486>;
            <D.24485>:
            D.24487 = &MEM[(void *)"System" + 1B];
            D.24488 = *D.24487;
            D.24489 = (int) D.24488;
            D.24490 = __s2 + 1;
            D.24491 = *D.24490;
            D.24492 = (int) D.24491;
            __result = D.24489 - D.24492;
            D.24493 = __s2_len > 1;
            D.24483 = __result == 0;
            D.24494 = D.24493 & D.24483;
            if (D.24494 != 0) goto <D.24495>; else goto <D.24496>;
            <D.24495>:
            D.24497 = &MEM[(void *)"System" + 2B];
            D.24498 = *D.24497;
            D.24499 = (int) D.24498;
            D.24500 = __s2 + 2;
            D.24501 = *D.24500;
            D.24502 = (int) D.24501;
            __result = D.24499 - D.24502;
            D.24503 = __s2_len > 2;
            D.24483 = __result == 0;
            D.24504 = D.24503 & D.24483;
            if (D.24504 != 0) goto <D.24505>; else goto <D.24506>;
            <D.24505>:
            D.24507 = &MEM[(void *)"System" + 3B];
            D.24508 = *D.24507;
            D.24509 = (int) D.24508;
            D.24510 = __s2 + 3;
            D.24511 = *D.24510;
            D.24512 = (int) D.24511;
            __result = D.24509 - D.24512;
            <D.24506>:
            <D.24496>:
            <D.24486>:
          }
          D.22892 = __result;
        }
        iftmp.9 = -D.22892;
        goto <D.24513>;
        <D.24476>:
        iftmp.9 = __builtin_strcmp (nspace, "System");
        <D.24513>:
        D.22893 = iftmp.9;
      }
      if (D.22893 == 0) goto <D.24514>; else goto <D.24515>;
      <D.24514>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 5;
        if (__s2_len <= 3) goto <D.24517>; else goto <D.24518>;
        <D.24517>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name;
          D.24519 = "Array";
          D.24520 = MEM[(const unsigned char *)D.24519];
          D.24521 = (int) D.24520;
          D.24522 = *__s2;
          D.24523 = (int) D.24522;
          __result = D.24521 - D.24523;
          {
            D.24524 = __s2_len != 0;
            D.24525 = __result == 0;
            D.24526 = D.24524 & D.24525;
            if (D.24526 != 0) goto <D.24527>; else goto <D.24528>;
            <D.24527>:
            D.24529 = &MEM[(void *)"Array" + 1B];
            D.24530 = *D.24529;
            D.24531 = (int) D.24530;
            D.24532 = __s2 + 1;
            D.24533 = *D.24532;
            D.24534 = (int) D.24533;
            __result = D.24531 - D.24534;
            D.24535 = __s2_len > 1;
            D.24525 = __result == 0;
            D.24536 = D.24535 & D.24525;
            if (D.24536 != 0) goto <D.24537>; else goto <D.24538>;
            <D.24537>:
            D.24539 = &MEM[(void *)"Array" + 2B];
            D.24540 = *D.24539;
            D.24541 = (int) D.24540;
            D.24542 = __s2 + 2;
            D.24543 = *D.24542;
            D.24544 = (int) D.24543;
            __result = D.24541 - D.24544;
            D.24545 = __s2_len > 2;
            D.24525 = __result == 0;
            D.24546 = D.24545 & D.24525;
            if (D.24546 != 0) goto <D.24547>; else goto <D.24548>;
            <D.24547>:
            D.24549 = &MEM[(void *)"Array" + 3B];
            D.24550 = *D.24549;
            D.24551 = (int) D.24550;
            D.24552 = __s2 + 3;
            D.24553 = *D.24552;
            D.24554 = (int) D.24553;
            __result = D.24551 - D.24554;
            <D.24548>:
            <D.24538>:
            <D.24528>:
          }
          D.22901 = __result;
        }
        iftmp.10 = -D.22901;
        goto <D.24555>;
        <D.24518>:
        iftmp.10 = __builtin_strcmp (name, "Array");
        <D.24555>:
        D.22902 = iftmp.10;
      }
      if (D.22902 == 0) goto <D.24556>; else goto <D.24557>;
      <D.24556>:
      D.24558 = class->instance_size;
      D.24559 = (unsigned int) D.24558;
      D.24560 = D.24559 + 8;
      D.24561 = (int) D.24560;
      class->instance_size = D.24561;
      D.24562 = class->field.count;
      D.24563 = D.24562 != 0;
      D.24564 = (long int) D.24563;
      D.24565 = __builtin_expect (D.24564, 0);
      if (D.24565 != 0) goto <D.24566>; else goto <D.24567>;
      <D.24566>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5744, "class->field.count == 0");
      <D.24567>:
      <D.24557>:
      <D.24515>:
      <D.24473>:
      D.24435 = BIT_FIELD_REF <*class, 8, 160>;
      D.24436 = D.24435 & 16;
      if (D.24436 != 0) goto <D.24568>; else goto <D.24569>;
      <D.24568>:
      {
        struct MonoType * enum_basetype;

        enum_basetype = mono_class_find_enum_basetype (class);
        if (enum_basetype == 0B) goto <D.24570>; else goto <D.24571>;
        <D.24570>:
        D.24572 = mono_defaults.int32_class;
        class->element_class = D.24572;
        D.24434 = class->element_class;
        class->cast_class = D.24434;
        mono_class_set_failure_and_error (class, error, "Could not enum basetype");
        mono_loader_unlock ();
        mono_profiler_class_loaded (class, 1);
        D.24573 = mono_loader_get_last_error ();
        D.24574 = D.24573 != 0B;
        D.24575 = (long int) D.24574;
        D.24576 = __builtin_expect (D.24575, 0);
        if (D.24576 != 0) goto <D.24577>; else goto <D.24578>;
        <D.24577>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5755, "!mono_loader_get_last_error ()");
        <D.24578>:
        D.24370 = 0B;
        return D.24370;
        <D.24571>:
        D.24579 = mono_class_from_mono_type (enum_basetype);
        class->element_class = D.24579;
        D.24434 = class->element_class;
        class->cast_class = D.24434;
      }
      <D.24569>:
      D.24390 = class->generic_container;
      if (D.24390 != 0B) goto <D.24580>; else goto <D.24581>;
      <D.24580>:
      D.24390 = class->generic_container;
      D.24582 = mono_metadata_load_generic_param_constraints_full (image, type_token, D.24390);
      if (D.24582 == 0) goto <D.24583>; else goto <D.24584>;
      <D.24583>:
      D.24585 = monoeg_strdup ("Could not load generic parameter constraints");
      mono_class_set_failure_from_loader_error (class, error, D.24585);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.24586 = mono_loader_get_last_error ();
      D.24587 = D.24586 != 0B;
      D.24588 = (long int) D.24587;
      D.24589 = __builtin_expect (D.24588, 0);
      if (D.24589 != 0) goto <D.24590>; else goto <D.24591>;
      <D.24590>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5770, "!mono_loader_get_last_error ()");
      <D.24591>:
      D.24370 = 0B;
      return D.24370;
      <D.24584>:
      <D.24581>:
      D.24592 = class->image;
      D.24593 = D.24592->assembly_name;
      if (D.24593 != 0B) goto <D.24594>; else goto <D.24595>;
      <D.24594>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 9;
        if (__s2_len <= 3) goto <D.24597>; else goto <D.24598>;
        <D.24597>:
        {
          const unsigned char * __s2;
          int __result;

          D.24592 = class->image;
          __s2 = D.24592->assembly_name;
          D.24599 = "Mono.Simd";
          D.24600 = MEM[(const unsigned char *)D.24599];
          D.24601 = (int) D.24600;
          D.24602 = *__s2;
          D.24603 = (int) D.24602;
          __result = D.24601 - D.24603;
          {
            D.24604 = __s2_len != 0;
            D.24605 = __result == 0;
            D.24606 = D.24604 & D.24605;
            if (D.24606 != 0) goto <D.24607>; else goto <D.24608>;
            <D.24607>:
            D.24609 = &MEM[(void *)"Mono.Simd" + 1B];
            D.24610 = *D.24609;
            D.24611 = (int) D.24610;
            D.24612 = __s2 + 1;
            D.24613 = *D.24612;
            D.24614 = (int) D.24613;
            __result = D.24611 - D.24614;
            D.24615 = __s2_len > 1;
            D.24605 = __result == 0;
            D.24616 = D.24615 & D.24605;
            if (D.24616 != 0) goto <D.24617>; else goto <D.24618>;
            <D.24617>:
            D.24619 = &MEM[(void *)"Mono.Simd" + 2B];
            D.24620 = *D.24619;
            D.24621 = (int) D.24620;
            D.24622 = __s2 + 2;
            D.24623 = *D.24622;
            D.24624 = (int) D.24623;
            __result = D.24621 - D.24624;
            D.24625 = __s2_len > 2;
            D.24605 = __result == 0;
            D.24626 = D.24625 & D.24605;
            if (D.24626 != 0) goto <D.24627>; else goto <D.24628>;
            <D.24627>:
            D.24629 = &MEM[(void *)"Mono.Simd" + 3B];
            D.24630 = *D.24629;
            D.24631 = (int) D.24630;
            D.24632 = __s2 + 3;
            D.24633 = *D.24632;
            D.24634 = (int) D.24633;
            __result = D.24631 - D.24634;
            <D.24628>:
            <D.24618>:
            <D.24608>:
          }
          D.22911 = __result;
        }
        iftmp.11 = -D.22911;
        goto <D.24635>;
        <D.24598>:
        D.24592 = class->image;
        D.24593 = D.24592->assembly_name;
        iftmp.11 = __builtin_strcmp (D.24593, "Mono.Simd");
        <D.24635>:
        D.22912 = iftmp.11;
      }
      if (D.22912 == 0) goto <D.24636>; else goto <D.24637>;
      <D.24636>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 9;
        if (__s2_len <= 3) goto <D.24639>; else goto <D.24640>;
        <D.24639>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = nspace;
          D.24599 = "Mono.Simd";
          D.24600 = MEM[(const unsigned char *)D.24599];
          D.24601 = (int) D.24600;
          D.24641 = *__s2;
          D.24642 = (int) D.24641;
          __result = D.24601 - D.24642;
          {
            D.24643 = __s2_len != 0;
            D.24644 = __result == 0;
            D.24645 = D.24643 & D.24644;
            if (D.24645 != 0) goto <D.24646>; else goto <D.24647>;
            <D.24646>:
            D.24609 = &MEM[(void *)"Mono.Simd" + 1B];
            D.24610 = *D.24609;
            D.24611 = (int) D.24610;
            D.24648 = __s2 + 1;
            D.24649 = *D.24648;
            D.24650 = (int) D.24649;
            __result = D.24611 - D.24650;
            D.24651 = __s2_len > 1;
            D.24644 = __result == 0;
            D.24652 = D.24651 & D.24644;
            if (D.24652 != 0) goto <D.24653>; else goto <D.24654>;
            <D.24653>:
            D.24619 = &MEM[(void *)"Mono.Simd" + 2B];
            D.24620 = *D.24619;
            D.24621 = (int) D.24620;
            D.24655 = __s2 + 2;
            D.24656 = *D.24655;
            D.24657 = (int) D.24656;
            __result = D.24621 - D.24657;
            D.24658 = __s2_len > 2;
            D.24644 = __result == 0;
            D.24659 = D.24658 & D.24644;
            if (D.24659 != 0) goto <D.24660>; else goto <D.24661>;
            <D.24660>:
            D.24629 = &MEM[(void *)"Mono.Simd" + 3B];
            D.24630 = *D.24629;
            D.24631 = (int) D.24630;
            D.24662 = __s2 + 3;
            D.24663 = *D.24662;
            D.24664 = (int) D.24663;
            __result = D.24631 - D.24664;
            <D.24661>:
            <D.24654>:
            <D.24647>:
          }
          D.22920 = __result;
        }
        iftmp.12 = -D.22920;
        goto <D.24665>;
        <D.24640>:
        iftmp.12 = __builtin_strcmp (nspace, "Mono.Simd");
        <D.24665>:
        D.22921 = iftmp.12;
      }
      if (D.22921 == 0) goto <D.24666>; else goto <D.24667>;
      <D.24666>:
      D.24668 = strncmp (name, "Vector", 6);
      if (D.24668 == 0) goto <D.24669>; else goto <D.24670>;
      <D.24669>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 2;
        if (__s2_len <= 3) goto <D.24676>; else goto <D.24677>;
        <D.24676>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.24678 = "2d";
          D.24679 = MEM[(const unsigned char *)D.24678];
          D.24680 = (int) D.24679;
          D.24681 = *__s2;
          D.24682 = (int) D.24681;
          __result = D.24680 - D.24682;
          {
            D.24683 = __s2_len != 0;
            D.24684 = __result == 0;
            D.24685 = D.24683 & D.24684;
            if (D.24685 != 0) goto <D.24686>; else goto <D.24687>;
            <D.24686>:
            D.24688 = &MEM[(void *)"2d" + 1B];
            D.24689 = *D.24688;
            D.24690 = (int) D.24689;
            D.24691 = __s2 + 1;
            D.24692 = *D.24691;
            D.24693 = (int) D.24692;
            __result = D.24690 - D.24693;
            D.24694 = __s2_len > 1;
            D.24684 = __result == 0;
            D.24695 = D.24694 & D.24684;
            if (D.24695 != 0) goto <D.24696>; else goto <D.24697>;
            <D.24696>:
            D.24698 = &MEM[(void *)"2d" + 2B];
            D.24699 = *D.24698;
            D.24700 = (int) D.24699;
            D.24701 = __s2 + 2;
            D.24702 = *D.24701;
            D.24703 = (int) D.24702;
            __result = D.24700 - D.24703;
            D.24704 = __s2_len > 2;
            D.24684 = __result == 0;
            D.24705 = D.24704 & D.24684;
            if (D.24705 != 0) goto <D.24706>; else goto <D.24707>;
            <D.24706>:
            D.24708 = &MEM[(void *)"2d" + 3B];
            D.24709 = *D.24708;
            D.24710 = (int) D.24709;
            D.24711 = __s2 + 3;
            D.24712 = *D.24711;
            D.24713 = (int) D.24712;
            __result = D.24710 - D.24713;
            <D.24707>:
            <D.24697>:
            <D.24687>:
          }
          D.22938 = __result;
        }
        iftmp.14 = -D.22938;
        goto <D.24714>;
        <D.24677>:
        D.24715 = name + 6;
        iftmp.14 = __builtin_strcmp (D.24715, "2d");
        <D.24714>:
        D.22939 = iftmp.14;
      }
      if (D.22939 == 0) goto <D.24672>; else goto <D.24716>;
      <D.24716>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 3;
        if (__s2_len <= 3) goto <D.24718>; else goto <D.24719>;
        <D.24718>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.24720 = "2ul";
          D.24721 = MEM[(const unsigned char *)D.24720];
          D.24722 = (int) D.24721;
          D.24723 = *__s2;
          D.24724 = (int) D.24723;
          __result = D.24722 - D.24724;
          {
            D.24725 = __s2_len != 0;
            D.24726 = __result == 0;
            D.24727 = D.24725 & D.24726;
            if (D.24727 != 0) goto <D.24728>; else goto <D.24729>;
            <D.24728>:
            D.24730 = &MEM[(void *)"2ul" + 1B];
            D.24731 = *D.24730;
            D.24732 = (int) D.24731;
            D.24733 = __s2 + 1;
            D.24734 = *D.24733;
            D.24735 = (int) D.24734;
            __result = D.24732 - D.24735;
            D.24736 = __s2_len > 1;
            D.24726 = __result == 0;
            D.24737 = D.24736 & D.24726;
            if (D.24737 != 0) goto <D.24738>; else goto <D.24739>;
            <D.24738>:
            D.24740 = &MEM[(void *)"2ul" + 2B];
            D.24741 = *D.24740;
            D.24742 = (int) D.24741;
            D.24743 = __s2 + 2;
            D.24744 = *D.24743;
            D.24745 = (int) D.24744;
            __result = D.24742 - D.24745;
            D.24746 = __s2_len > 2;
            D.24726 = __result == 0;
            D.24747 = D.24746 & D.24726;
            if (D.24747 != 0) goto <D.24748>; else goto <D.24749>;
            <D.24748>:
            D.24750 = &MEM[(void *)"2ul" + 3B];
            D.24751 = *D.24750;
            D.24752 = (int) D.24751;
            D.24753 = __s2 + 3;
            D.24754 = *D.24753;
            D.24755 = (int) D.24754;
            __result = D.24752 - D.24755;
            <D.24749>:
            <D.24739>:
            <D.24729>:
          }
          D.22947 = __result;
        }
        iftmp.15 = -D.22947;
        goto <D.24756>;
        <D.24719>:
        D.24715 = name + 6;
        iftmp.15 = __builtin_strcmp (D.24715, "2ul");
        <D.24756>:
        D.22948 = iftmp.15;
      }
      if (D.22948 == 0) goto <D.24672>; else goto <D.24757>;
      <D.24757>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 2;
        if (__s2_len <= 3) goto <D.24759>; else goto <D.24760>;
        <D.24759>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.24761 = "2l";
          D.24762 = MEM[(const unsigned char *)D.24761];
          D.24763 = (int) D.24762;
          D.24764 = *__s2;
          D.24765 = (int) D.24764;
          __result = D.24763 - D.24765;
          {
            D.24766 = __s2_len != 0;
            D.24767 = __result == 0;
            D.24768 = D.24766 & D.24767;
            if (D.24768 != 0) goto <D.24769>; else goto <D.24770>;
            <D.24769>:
            D.24771 = &MEM[(void *)"2l" + 1B];
            D.24772 = *D.24771;
            D.24773 = (int) D.24772;
            D.24774 = __s2 + 1;
            D.24775 = *D.24774;
            D.24776 = (int) D.24775;
            __result = D.24773 - D.24776;
            D.24777 = __s2_len > 1;
            D.24767 = __result == 0;
            D.24778 = D.24777 & D.24767;
            if (D.24778 != 0) goto <D.24779>; else goto <D.24780>;
            <D.24779>:
            D.24781 = &MEM[(void *)"2l" + 2B];
            D.24782 = *D.24781;
            D.24783 = (int) D.24782;
            D.24784 = __s2 + 2;
            D.24785 = *D.24784;
            D.24786 = (int) D.24785;
            __result = D.24783 - D.24786;
            D.24787 = __s2_len > 2;
            D.24767 = __result == 0;
            D.24788 = D.24787 & D.24767;
            if (D.24788 != 0) goto <D.24789>; else goto <D.24790>;
            <D.24789>:
            D.24791 = &MEM[(void *)"2l" + 3B];
            D.24792 = *D.24791;
            D.24793 = (int) D.24792;
            D.24794 = __s2 + 3;
            D.24795 = *D.24794;
            D.24796 = (int) D.24795;
            __result = D.24793 - D.24796;
            <D.24790>:
            <D.24780>:
            <D.24770>:
          }
          D.22956 = __result;
        }
        iftmp.16 = -D.22956;
        goto <D.24797>;
        <D.24760>:
        D.24715 = name + 6;
        iftmp.16 = __builtin_strcmp (D.24715, "2l");
        <D.24797>:
        D.22957 = iftmp.16;
      }
      if (D.22957 == 0) goto <D.24672>; else goto <D.24798>;
      <D.24798>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 2;
        if (__s2_len <= 3) goto <D.24800>; else goto <D.24801>;
        <D.24800>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.24802 = "4f";
          D.24803 = MEM[(const unsigned char *)D.24802];
          D.24804 = (int) D.24803;
          D.24805 = *__s2;
          D.24806 = (int) D.24805;
          __result = D.24804 - D.24806;
          {
            D.24807 = __s2_len != 0;
            D.24808 = __result == 0;
            D.24809 = D.24807 & D.24808;
            if (D.24809 != 0) goto <D.24810>; else goto <D.24811>;
            <D.24810>:
            D.24812 = &MEM[(void *)"4f" + 1B];
            D.24813 = *D.24812;
            D.24814 = (int) D.24813;
            D.24815 = __s2 + 1;
            D.24816 = *D.24815;
            D.24817 = (int) D.24816;
            __result = D.24814 - D.24817;
            D.24818 = __s2_len > 1;
            D.24808 = __result == 0;
            D.24819 = D.24818 & D.24808;
            if (D.24819 != 0) goto <D.24820>; else goto <D.24821>;
            <D.24820>:
            D.24822 = &MEM[(void *)"4f" + 2B];
            D.24823 = *D.24822;
            D.24824 = (int) D.24823;
            D.24825 = __s2 + 2;
            D.24826 = *D.24825;
            D.24827 = (int) D.24826;
            __result = D.24824 - D.24827;
            D.24828 = __s2_len > 2;
            D.24808 = __result == 0;
            D.24829 = D.24828 & D.24808;
            if (D.24829 != 0) goto <D.24830>; else goto <D.24831>;
            <D.24830>:
            D.24832 = &MEM[(void *)"4f" + 3B];
            D.24833 = *D.24832;
            D.24834 = (int) D.24833;
            D.24835 = __s2 + 3;
            D.24836 = *D.24835;
            D.24837 = (int) D.24836;
            __result = D.24834 - D.24837;
            <D.24831>:
            <D.24821>:
            <D.24811>:
          }
          D.22965 = __result;
        }
        iftmp.17 = -D.22965;
        goto <D.24838>;
        <D.24801>:
        D.24715 = name + 6;
        iftmp.17 = __builtin_strcmp (D.24715, "4f");
        <D.24838>:
        D.22966 = iftmp.17;
      }
      if (D.22966 == 0) goto <D.24672>; else goto <D.24839>;
      <D.24839>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 3;
        if (__s2_len <= 3) goto <D.24841>; else goto <D.24842>;
        <D.24841>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.24843 = "4ui";
          D.24844 = MEM[(const unsigned char *)D.24843];
          D.24845 = (int) D.24844;
          D.24846 = *__s2;
          D.24847 = (int) D.24846;
          __result = D.24845 - D.24847;
          {
            D.24848 = __s2_len != 0;
            D.24849 = __result == 0;
            D.24850 = D.24848 & D.24849;
            if (D.24850 != 0) goto <D.24851>; else goto <D.24852>;
            <D.24851>:
            D.24853 = &MEM[(void *)"4ui" + 1B];
            D.24854 = *D.24853;
            D.24855 = (int) D.24854;
            D.24856 = __s2 + 1;
            D.24857 = *D.24856;
            D.24858 = (int) D.24857;
            __result = D.24855 - D.24858;
            D.24859 = __s2_len > 1;
            D.24849 = __result == 0;
            D.24860 = D.24859 & D.24849;
            if (D.24860 != 0) goto <D.24861>; else goto <D.24862>;
            <D.24861>:
            D.24863 = &MEM[(void *)"4ui" + 2B];
            D.24864 = *D.24863;
            D.24865 = (int) D.24864;
            D.24866 = __s2 + 2;
            D.24867 = *D.24866;
            D.24868 = (int) D.24867;
            __result = D.24865 - D.24868;
            D.24869 = __s2_len > 2;
            D.24849 = __result == 0;
            D.24870 = D.24869 & D.24849;
            if (D.24870 != 0) goto <D.24871>; else goto <D.24872>;
            <D.24871>:
            D.24873 = &MEM[(void *)"4ui" + 3B];
            D.24874 = *D.24873;
            D.24875 = (int) D.24874;
            D.24876 = __s2 + 3;
            D.24877 = *D.24876;
            D.24878 = (int) D.24877;
            __result = D.24875 - D.24878;
            <D.24872>:
            <D.24862>:
            <D.24852>:
          }
          D.22974 = __result;
        }
        iftmp.18 = -D.22974;
        goto <D.24879>;
        <D.24842>:
        D.24715 = name + 6;
        iftmp.18 = __builtin_strcmp (D.24715, "4ui");
        <D.24879>:
        D.22975 = iftmp.18;
      }
      if (D.22975 == 0) goto <D.24672>; else goto <D.24880>;
      <D.24880>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 2;
        if (__s2_len <= 3) goto <D.24882>; else goto <D.24883>;
        <D.24882>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.24884 = "4i";
          D.24885 = MEM[(const unsigned char *)D.24884];
          D.24886 = (int) D.24885;
          D.24887 = *__s2;
          D.24888 = (int) D.24887;
          __result = D.24886 - D.24888;
          {
            D.24889 = __s2_len != 0;
            D.24890 = __result == 0;
            D.24891 = D.24889 & D.24890;
            if (D.24891 != 0) goto <D.24892>; else goto <D.24893>;
            <D.24892>:
            D.24894 = &MEM[(void *)"4i" + 1B];
            D.24895 = *D.24894;
            D.24896 = (int) D.24895;
            D.24897 = __s2 + 1;
            D.24898 = *D.24897;
            D.24899 = (int) D.24898;
            __result = D.24896 - D.24899;
            D.24900 = __s2_len > 1;
            D.24890 = __result == 0;
            D.24901 = D.24900 & D.24890;
            if (D.24901 != 0) goto <D.24902>; else goto <D.24903>;
            <D.24902>:
            D.24904 = &MEM[(void *)"4i" + 2B];
            D.24905 = *D.24904;
            D.24906 = (int) D.24905;
            D.24907 = __s2 + 2;
            D.24908 = *D.24907;
            D.24909 = (int) D.24908;
            __result = D.24906 - D.24909;
            D.24910 = __s2_len > 2;
            D.24890 = __result == 0;
            D.24911 = D.24910 & D.24890;
            if (D.24911 != 0) goto <D.24912>; else goto <D.24913>;
            <D.24912>:
            D.24914 = &MEM[(void *)"4i" + 3B];
            D.24915 = *D.24914;
            D.24916 = (int) D.24915;
            D.24917 = __s2 + 3;
            D.24918 = *D.24917;
            D.24919 = (int) D.24918;
            __result = D.24916 - D.24919;
            <D.24913>:
            <D.24903>:
            <D.24893>:
          }
          D.22983 = __result;
        }
        iftmp.19 = -D.22983;
        goto <D.24920>;
        <D.24883>:
        D.24715 = name + 6;
        iftmp.19 = __builtin_strcmp (D.24715, "4i");
        <D.24920>:
        D.22984 = iftmp.19;
      }
      if (D.22984 == 0) goto <D.24672>; else goto <D.24921>;
      <D.24921>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 2;
        if (__s2_len <= 3) goto <D.24923>; else goto <D.24924>;
        <D.24923>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.24925 = "8s";
          D.24926 = MEM[(const unsigned char *)D.24925];
          D.24927 = (int) D.24926;
          D.24928 = *__s2;
          D.24929 = (int) D.24928;
          __result = D.24927 - D.24929;
          {
            D.24930 = __s2_len != 0;
            D.24931 = __result == 0;
            D.24932 = D.24930 & D.24931;
            if (D.24932 != 0) goto <D.24933>; else goto <D.24934>;
            <D.24933>:
            D.24935 = &MEM[(void *)"8s" + 1B];
            D.24936 = *D.24935;
            D.24937 = (int) D.24936;
            D.24938 = __s2 + 1;
            D.24939 = *D.24938;
            D.24940 = (int) D.24939;
            __result = D.24937 - D.24940;
            D.24941 = __s2_len > 1;
            D.24931 = __result == 0;
            D.24942 = D.24941 & D.24931;
            if (D.24942 != 0) goto <D.24943>; else goto <D.24944>;
            <D.24943>:
            D.24945 = &MEM[(void *)"8s" + 2B];
            D.24946 = *D.24945;
            D.24947 = (int) D.24946;
            D.24948 = __s2 + 2;
            D.24949 = *D.24948;
            D.24950 = (int) D.24949;
            __result = D.24947 - D.24950;
            D.24951 = __s2_len > 2;
            D.24931 = __result == 0;
            D.24952 = D.24951 & D.24931;
            if (D.24952 != 0) goto <D.24953>; else goto <D.24954>;
            <D.24953>:
            D.24955 = &MEM[(void *)"8s" + 3B];
            D.24956 = *D.24955;
            D.24957 = (int) D.24956;
            D.24958 = __s2 + 3;
            D.24959 = *D.24958;
            D.24960 = (int) D.24959;
            __result = D.24957 - D.24960;
            <D.24954>:
            <D.24944>:
            <D.24934>:
          }
          D.22992 = __result;
        }
        iftmp.20 = -D.22992;
        goto <D.24961>;
        <D.24924>:
        D.24715 = name + 6;
        iftmp.20 = __builtin_strcmp (D.24715, "8s");
        <D.24961>:
        D.22993 = iftmp.20;
      }
      if (D.22993 == 0) goto <D.24672>; else goto <D.24962>;
      <D.24962>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 3;
        if (__s2_len <= 3) goto <D.24964>; else goto <D.24965>;
        <D.24964>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.24966 = "8us";
          D.24967 = MEM[(const unsigned char *)D.24966];
          D.24968 = (int) D.24967;
          D.24969 = *__s2;
          D.24970 = (int) D.24969;
          __result = D.24968 - D.24970;
          {
            D.24971 = __s2_len != 0;
            D.24972 = __result == 0;
            D.24973 = D.24971 & D.24972;
            if (D.24973 != 0) goto <D.24974>; else goto <D.24975>;
            <D.24974>:
            D.24976 = &MEM[(void *)"8us" + 1B];
            D.24977 = *D.24976;
            D.24978 = (int) D.24977;
            D.24979 = __s2 + 1;
            D.24980 = *D.24979;
            D.24981 = (int) D.24980;
            __result = D.24978 - D.24981;
            D.24982 = __s2_len > 1;
            D.24972 = __result == 0;
            D.24983 = D.24982 & D.24972;
            if (D.24983 != 0) goto <D.24984>; else goto <D.24985>;
            <D.24984>:
            D.24986 = &MEM[(void *)"8us" + 2B];
            D.24987 = *D.24986;
            D.24988 = (int) D.24987;
            D.24989 = __s2 + 2;
            D.24990 = *D.24989;
            D.24991 = (int) D.24990;
            __result = D.24988 - D.24991;
            D.24992 = __s2_len > 2;
            D.24972 = __result == 0;
            D.24993 = D.24992 & D.24972;
            if (D.24993 != 0) goto <D.24994>; else goto <D.24995>;
            <D.24994>:
            D.24996 = &MEM[(void *)"8us" + 3B];
            D.24997 = *D.24996;
            D.24998 = (int) D.24997;
            D.24999 = __s2 + 3;
            D.25000 = *D.24999;
            D.25001 = (int) D.25000;
            __result = D.24998 - D.25001;
            <D.24995>:
            <D.24985>:
            <D.24975>:
          }
          D.23001 = __result;
        }
        iftmp.21 = -D.23001;
        goto <D.25002>;
        <D.24965>:
        D.24715 = name + 6;
        iftmp.21 = __builtin_strcmp (D.24715, "8us");
        <D.25002>:
        D.23002 = iftmp.21;
      }
      if (D.23002 == 0) goto <D.24672>; else goto <D.25003>;
      <D.25003>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 3;
        if (__s2_len <= 3) goto <D.25005>; else goto <D.25006>;
        <D.25005>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.25007 = "16b";
          D.25008 = MEM[(const unsigned char *)D.25007];
          D.25009 = (int) D.25008;
          D.25010 = *__s2;
          D.25011 = (int) D.25010;
          __result = D.25009 - D.25011;
          {
            D.25012 = __s2_len != 0;
            D.25013 = __result == 0;
            D.25014 = D.25012 & D.25013;
            if (D.25014 != 0) goto <D.25015>; else goto <D.25016>;
            <D.25015>:
            D.25017 = &MEM[(void *)"16b" + 1B];
            D.25018 = *D.25017;
            D.25019 = (int) D.25018;
            D.25020 = __s2 + 1;
            D.25021 = *D.25020;
            D.25022 = (int) D.25021;
            __result = D.25019 - D.25022;
            D.25023 = __s2_len > 1;
            D.25013 = __result == 0;
            D.25024 = D.25023 & D.25013;
            if (D.25024 != 0) goto <D.25025>; else goto <D.25026>;
            <D.25025>:
            D.25027 = &MEM[(void *)"16b" + 2B];
            D.25028 = *D.25027;
            D.25029 = (int) D.25028;
            D.25030 = __s2 + 2;
            D.25031 = *D.25030;
            D.25032 = (int) D.25031;
            __result = D.25029 - D.25032;
            D.25033 = __s2_len > 2;
            D.25013 = __result == 0;
            D.25034 = D.25033 & D.25013;
            if (D.25034 != 0) goto <D.25035>; else goto <D.25036>;
            <D.25035>:
            D.25037 = &MEM[(void *)"16b" + 3B];
            D.25038 = *D.25037;
            D.25039 = (int) D.25038;
            D.25040 = __s2 + 3;
            D.25041 = *D.25040;
            D.25042 = (int) D.25041;
            __result = D.25039 - D.25042;
            <D.25036>:
            <D.25026>:
            <D.25016>:
          }
          D.23010 = __result;
        }
        iftmp.22 = -D.23010;
        goto <D.25043>;
        <D.25006>:
        D.24715 = name + 6;
        iftmp.22 = __builtin_strcmp (D.24715, "16b");
        <D.25043>:
        D.23011 = iftmp.22;
      }
      if (D.23011 == 0) goto <D.24672>; else goto <D.25044>;
      <D.25044>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 4;
        if (__s2_len <= 3) goto <D.25046>; else goto <D.25047>;
        <D.25046>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.25048 = "16sb";
          D.25049 = MEM[(const unsigned char *)D.25048];
          D.25050 = (int) D.25049;
          D.25051 = *__s2;
          D.25052 = (int) D.25051;
          __result = D.25050 - D.25052;
          {
            D.25053 = __s2_len != 0;
            D.25054 = __result == 0;
            D.25055 = D.25053 & D.25054;
            if (D.25055 != 0) goto <D.25056>; else goto <D.25057>;
            <D.25056>:
            D.25058 = &MEM[(void *)"16sb" + 1B];
            D.25059 = *D.25058;
            D.25060 = (int) D.25059;
            D.25061 = __s2 + 1;
            D.25062 = *D.25061;
            D.25063 = (int) D.25062;
            __result = D.25060 - D.25063;
            D.25064 = __s2_len > 1;
            D.25054 = __result == 0;
            D.25065 = D.25064 & D.25054;
            if (D.25065 != 0) goto <D.25066>; else goto <D.25067>;
            <D.25066>:
            D.25068 = &MEM[(void *)"16sb" + 2B];
            D.25069 = *D.25068;
            D.25070 = (int) D.25069;
            D.25071 = __s2 + 2;
            D.25072 = *D.25071;
            D.25073 = (int) D.25072;
            __result = D.25070 - D.25073;
            D.25074 = __s2_len > 2;
            D.25054 = __result == 0;
            D.25075 = D.25074 & D.25054;
            if (D.25075 != 0) goto <D.25076>; else goto <D.25077>;
            <D.25076>:
            D.25078 = &MEM[(void *)"16sb" + 3B];
            D.25079 = *D.25078;
            D.25080 = (int) D.25079;
            D.25081 = __s2 + 3;
            D.25082 = *D.25081;
            D.25083 = (int) D.25082;
            __result = D.25080 - D.25083;
            <D.25077>:
            <D.25067>:
            <D.25057>:
          }
          D.23019 = __result;
        }
        iftmp.23 = -D.23019;
        goto <D.25084>;
        <D.25047>:
        D.24715 = name + 6;
        iftmp.23 = __builtin_strcmp (D.24715, "16sb");
        <D.25084>:
        D.23020 = iftmp.23;
      }
      if (D.23020 == 0) goto <D.24672>; else goto <D.24673>;
      <D.24672>:
      iftmp.13 = 1;
      goto <D.24674>;
      <D.24673>:
      iftmp.13 = 0;
      <D.24674>:
      D.25085 = (unsigned char) iftmp.13;
      D.25086 = (<unnamed-unsigned:1>) D.25085;
      class->simd_type = D.25086;
      <D.24670>:
      <D.24667>:
      <D.24637>:
      <D.24595>:
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 0);
      D.25087 = mono_loader_get_last_error ();
      D.25088 = D.25087 != 0B;
      D.25089 = (long int) D.25088;
      D.25090 = __builtin_expect (D.25089, 0);
      if (D.25090 != 0) goto <D.25091>; else goto <D.25092>;
      <D.25091>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5782, "!mono_loader_get_last_error ()");
      <D.25092>:
      D.24370 = class;
      return D.24370;
      parent_failure:
      mono_class_setup_mono_type (class);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.25093 = mono_loader_get_last_error ();
      D.25094 = D.25093 != 0B;
      D.25095 = (long int) D.25094;
      D.25096 = __builtin_expect (D.25095, 0);
      if (D.25096 != 0) goto <D.25097>; else goto <D.25098>;
      <D.25097>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5790, "!mono_loader_get_last_error ()");
      <D.25098>:
      D.24370 = 0B;
      return D.24370;
    }
  finally
    {
      cols = {CLOBBER};
      cols_next = {CLOBBER};
      icount = {CLOBBER};
      interfaces = {CLOBBER};
    }
}


fix_gclass_incomplete_instantiation (struct MonoClass * gclass, void * user_data)
{
  struct MonoGenericClass * D.25101;
  struct MonoClass * D.25102;
  gboolean D.25105;
  struct MonoClass * D.25106;
  struct MonoClass * D.25109;
  struct MonoClass * gtd;

  gtd = user_data;
  D.25101 = gclass->generic_class;
  D.25102 = D.25101->container_class;
  if (D.25102 != gtd) goto <D.25103>; else goto <D.25104>;
  <D.25103>:
  D.25105 = 0;
  return D.25105;
  <D.25104>:
  D.25106 = gtd->parent;
  if (D.25106 != 0B) goto <D.25107>; else goto <D.25108>;
  <D.25107>:
  D.25109 = gclass->parent;
  if (D.25109 == 0B) goto <D.25110>; else goto <D.25111>;
  <D.25110>:
  mono_generic_class_setup_parent (gclass, gtd);
  <D.25111>:
  <D.25108>:
  D.25105 = 1;
  return D.25105;
}


mono_generic_class_setup_parent (struct MonoClass * klass, struct MonoClass * gtd)
{
  struct MonoClass * D.25113;
  struct MonoGenericContext * D.25116;
  struct MonoClass * D.25117;
  int D.25118;
  struct MonoClass * D.25121;
  struct MonoClass * D.25122;
  unsigned char D.25125;
  unsigned char D.25126;
  struct MonoClass * D.25129;
  struct MonoClass * D.25130;

  D.25113 = gtd->parent;
  if (D.25113 != 0B) goto <D.25114>; else goto <D.25115>;
  <D.25114>:
  {
    struct MonoError error;
    struct MonoGenericClass * gclass;

    try
      {
        gclass = klass->generic_class;
        D.25113 = gtd->parent;
        D.25116 = mono_generic_class_get_context (gclass);
        D.25117 = mono_class_inflate_generic_class_checked (D.25113, D.25116, &error);
        klass->parent = D.25117;
        D.25118 = mono_error_ok (&error);
        if (D.25118 == 0) goto <D.25119>; else goto <D.25120>;
        <D.25119>:
        D.25121 = mono_defaults.object_class;
        klass->parent = D.25121;
        mono_class_set_failure (klass, 7, 0B);
        mono_error_cleanup (&error);
        <D.25120>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.25115>:
  D.25122 = klass->parent;
  if (D.25122 != 0B) goto <D.25123>; else goto <D.25124>;
  <D.25123>:
  D.25122 = klass->parent;
  mono_class_setup_parent (klass, D.25122);
  <D.25124>:
  D.25125 = BIT_FIELD_REF <*klass, 8, 160>;
  D.25126 = D.25125 & 16;
  if (D.25126 != 0) goto <D.25127>; else goto <D.25128>;
  <D.25127>:
  D.25129 = gtd->cast_class;
  klass->cast_class = D.25129;
  D.25130 = gtd->element_class;
  klass->element_class = D.25130;
  <D.25128>:
}


mono_class_inflate_generic_class_checked (struct MonoClass * gklass, struct MonoGenericContext * context, struct MonoError * error)
{
  struct MonoType * D.25131;
  int D.25132;
  struct MonoClass * D.25135;
  struct MonoClass * res;
  struct MonoType * inflated;

  D.25131 = &gklass->byval_arg;
  inflated = mono_class_inflate_generic_type_checked (D.25131, context, error);
  D.25132 = mono_error_ok (error);
  if (D.25132 == 0) goto <D.25133>; else goto <D.25134>;
  <D.25133>:
  D.25135 = 0B;
  return D.25135;
  <D.25134>:
  res = mono_class_from_mono_type (inflated);
  mono_metadata_free_type (inflated);
  D.25135 = res;
  return D.25135;
}


enable_gclass_recording ()
{
  int record_gclass_instantiation.24;
  int record_gclass_instantiation.25;

  record_gclass_instantiation.24 = record_gclass_instantiation;
  record_gclass_instantiation.25 = record_gclass_instantiation.24 + 1;
  record_gclass_instantiation = record_gclass_instantiation.25;
}


disable_gclass_recording (gboolean (*gclass_record_func) (struct MonoClass *, void *) func, void * user_data)
{
  int record_gclass_instantiation.26;
  _Bool D.25140;
  long int D.25141;
  long int D.25142;
  int record_gclass_instantiation.27;
  void * D.25146;
  int D.25147;
  struct GSList * D.25150;
  struct GSList * D.25152;
  struct GSList * gclass_recorded_list.28;
  struct GSList * * head;

  head = &gclass_recorded_list;
  record_gclass_instantiation.26 = record_gclass_instantiation;
  D.25140 = record_gclass_instantiation.26 <= 0;
  D.25141 = (long int) D.25140;
  D.25142 = __builtin_expect (D.25141, 0);
  if (D.25142 != 0) goto <D.25143>; else goto <D.25144>;
  <D.25143>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 120, "record_gclass_instantiation > 0");
  <D.25144>:
  record_gclass_instantiation.26 = record_gclass_instantiation;
  record_gclass_instantiation.27 = record_gclass_instantiation.26 + -1;
  record_gclass_instantiation = record_gclass_instantiation.27;
  goto <D.21019>;
  <D.21018>:
  {
    struct GSList * node;

    node = *head;
    D.25146 = node->data;
    D.25147 = func (D.25146, user_data);
    if (D.25147 != 0) goto <D.25148>; else goto <D.25149>;
    <D.25148>:
    D.25150 = node->next;
    *head = D.25150;
    monoeg_g_slist_free_1 (node);
    goto <D.25151>;
    <D.25149>:
    head = &node->next;
    <D.25151>:
  }
  <D.21019>:
  D.25152 = *head;
  if (D.25152 != 0B) goto <D.21018>; else goto <D.21020>;
  <D.21020>:
  record_gclass_instantiation.26 = record_gclass_instantiation;
  if (record_gclass_instantiation.26 == 0) goto <D.25153>; else goto <D.25154>;
  <D.25153>:
  gclass_recorded_list.28 = gclass_recorded_list;
  if (gclass_recorded_list.28 != 0B) goto <D.25156>; else goto <D.25157>;
  <D.25156>:
  gclass_recorded_list.28 = gclass_recorded_list;
  monoeg_g_slist_free (gclass_recorded_list.28);
  gclass_recorded_list = 0B;
  <D.25157>:
  <D.25154>:
}


mono_class_find_enum_basetype (struct MonoClass * class)
{
  unsigned int D.25158;
  unsigned char D.25159;
  unsigned char D.25160;
  _Bool D.25161;
  long int D.25162;
  long int D.25163;
  struct MonoGenericContainer * D.25166;
  struct MonoGenericClass * D.25170;
  _Bool D.25173;
  long int D.25174;
  long int D.25175;
  unsigned int D.25178;
  unsigned int i.29;
  unsigned int D.25180;
  unsigned int D.25181;
  unsigned int D.25182;
  struct MonoImage * D.25185;
  unsigned int D.25186;
  int D.25187;
  struct MonoType * D.25190;
  const char * sig.30;
  const char * sig.31;
  char D.25193;
  short int D.25196;
  const char * D.25197;
  struct MonoGenericContext * D.25202;
  short unsigned int D.25203;
  struct MonoGenericContainer * container;
  struct MonoImage * m;
  const int top;
  int i;

  container = 0B;
  m = class->image;
  D.25158 = class->field.count;
  top = (const int) D.25158;
  D.25159 = BIT_FIELD_REF <*class, 8, 160>;
  D.25160 = D.25159 & 16;
  D.25161 = D.25160 == 0;
  D.25162 = (long int) D.25161;
  D.25163 = __builtin_expect (D.25162, 0);
  if (D.25163 != 0) goto <D.25164>; else goto <D.25165>;
  <D.25164>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1250, "class->enumtype");
  <D.25165>:
  D.25166 = class->generic_container;
  if (D.25166 != 0B) goto <D.25167>; else goto <D.25168>;
  <D.25167>:
  container = class->generic_container;
  goto <D.25169>;
  <D.25168>:
  D.25170 = class->generic_class;
  if (D.25170 != 0B) goto <D.25171>; else goto <D.25172>;
  <D.25171>:
  {
    struct MonoClass * gklass;

    D.25170 = class->generic_class;
    gklass = D.25170->container_class;
    container = gklass->generic_container;
    D.25173 = container == 0B;
    D.25174 = (long int) D.25173;
    D.25175 = __builtin_expect (D.25174, 0);
    if (D.25175 != 0) goto <D.25176>; else goto <D.25177>;
    <D.25176>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1258, "container");
    <D.25177>:
  }
  <D.25172>:
  <D.25169>:
  i = 0;
  goto <D.21332>;
  <D.21331>:
  {
    const char * sig;
    guint32 cols[3];
    int idx;
    struct MonoType * ftype;

    try
      {
        D.25178 = class->field.first;
        i.29 = (unsigned int) i;
        D.25180 = D.25178 + i.29;
        idx = (int) D.25180;
        mono_metadata_decode_table_row (m, 4, idx, &cols, 3);
        D.25181 = cols[0];
        D.25182 = D.25181 & 16;
        if (D.25182 != 0) goto <D.25183>; else goto <D.25184>;
        <D.25183>:
        // predicted unlikely by continue predictor.
        goto <D.21330>;
        <D.25184>:
        D.25185 = class->image;
        D.25186 = cols[2];
        D.25187 = mono_verifier_verify_field_signature (D.25185, D.25186, 0B);
        if (D.25187 == 0) goto <D.25188>; else goto <D.25189>;
        <D.25188>:
        D.25190 = 0B;
        return D.25190;
        <D.25189>:
        D.25186 = cols[2];
        sig.30 = mono_metadata_blob_heap (m, D.25186);
        sig = sig.30;
        sig.31 = sig;
        mono_metadata_decode_value (sig.31, &sig);
        sig.31 = sig;
        D.25193 = *sig.31;
        if (D.25193 != 6) goto <D.25194>; else goto <D.25195>;
        <D.25194>:
        D.25190 = 0B;
        return D.25190;
        <D.25195>:
        D.25181 = cols[0];
        D.25196 = (short int) D.25181;
        sig.31 = sig;
        D.25197 = sig.31 + 1;
        ftype = mono_metadata_parse_type_full (m, container, 5, D.25196, D.25197, &sig);
        if (ftype == 0B) goto <D.25198>; else goto <D.25199>;
        <D.25198>:
        D.25190 = 0B;
        return D.25190;
        <D.25199>:
        D.25170 = class->generic_class;
        if (D.25170 != 0B) goto <D.25200>; else goto <D.25201>;
        <D.25200>:
        D.25202 = mono_class_get_context (class);
        ftype = mono_class_inflate_generic_type (ftype, D.25202);
        D.25181 = cols[0];
        D.25203 = (short unsigned int) D.25181;
        ftype->attrs = D.25203;
        <D.25201>:
        D.25190 = ftype;
        return D.25190;
      }
    finally
      {
        sig = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.21330>:
  i = i + 1;
  <D.21332>:
  if (i < top) goto <D.21331>; else goto <D.21333>;
  <D.21333>:
  D.25190 = 0B;
  return D.25190;
}


mono_class_set_failure_and_error (struct MonoClass * class, struct MonoError * error, const char * msg)
{
  gchar * D.25207;

  D.25207 = monoeg_strdup (msg);
  mono_class_set_failure (class, 7, D.25207);
  mono_error_set_type_load_class (error, class, msg);
}


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

  if (str != 0B) goto <D.25208>; else goto <D.25209>;
  <D.25208>:
  D.25210 = __strdup (str);
  return D.25210;
  <D.25209>:
  D.25210 = 0B;
  return D.25210;
}


mono_class_set_failure_from_loader_error (struct MonoClass * class, struct MonoError * error, char * msg)
{
  struct MonoLoaderError * lerror;

  lerror = mono_loader_get_last_error ();
  if (lerror != 0B) goto <D.25212>; else goto <D.25213>;
  <D.25212>:
  set_failure_from_loader_error (class, lerror);
  mono_error_set_from_loader_error (error);
  if (msg != 0B) goto <D.25214>; else goto <D.25215>;
  <D.25214>:
  monoeg_g_free (msg);
  <D.25215>:
  goto <D.25216>;
  <D.25213>:
  mono_class_set_failure (class, 7, msg);
  mono_error_set_type_load_class (error, class, msg);
  <D.25216>:
}


set_failure_from_loader_error (struct MonoClass * class, struct MonoLoaderError * error)
{
  unsigned char D.25217;
  int D.25218;
  struct MonoImage * D.25219;
  char * D.25220;
  char * D.25221;
  const char * D.25222;
  struct MonoClass * D.25223;
  const char * D.25226;
  int D.25230;
  unsigned int D.25234;
  void * exception_data;

  exception_data = 0B;
  D.25217 = error->exception_type;
  D.25218 = (int) D.25217;
  switch (D.25218) <default: <D.22468>, case 5: <D.22461>, case 6: <D.22462>, case 7: <D.22459>, case 8: <D.22465>, case 12: <D.22467>>
  <D.22459>:
  D.25219 = class->image;
  D.25220 = error->class_name;
  D.25221 = error->assembly_name;
  exception_data = concat_two_strings_with_zero (D.25219, D.25220, D.25221);
  goto <D.22460>;
  <D.22461>:
  D.25219 = class->image;
  D.25220 = error->class_name;
  D.25222 = error->member_name;
  exception_data = concat_two_strings_with_zero (D.25219, D.25220, D.25222);
  goto <D.22460>;
  <D.22462>:
  {
    const char * name_space;
    const char * class_name;

    D.25223 = error->klass;
    name_space = D.25223->name_space;
    if (name_space != 0B) goto <D.25224>; else goto <D.25225>;
    <D.25224>:
    D.25223 = error->klass;
    D.25226 = D.25223->name;
    class_name = monoeg_g_strdup_printf ("%s.%s", name_space, D.25226);
    goto <D.25227>;
    <D.25225>:
    D.25223 = error->klass;
    class_name = D.25223->name;
    <D.25227>:
    D.25219 = class->image;
    D.25222 = error->member_name;
    exception_data = concat_two_strings_with_zero (D.25219, class_name, D.25222);
    if (name_space != 0B) goto <D.25228>; else goto <D.25229>;
    <D.25228>:
    monoeg_g_free (class_name);
    <D.25229>:
    goto <D.22460>;
  }
  <D.22465>:
  {
    const char * msg;

    D.25230 = error->ref_only;
    if (D.25230 != 0) goto <D.25231>; else goto <D.25232>;
    <D.25231>:
    msg = "Cannot resolve dependency to assembly \'%s\' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.";
    goto <D.25233>;
    <D.25232>:
    msg = "Could not load file or assembly \'%s\' or one of its dependencies.";
    <D.25233>:
    D.25219 = class->image;
    D.25221 = error->assembly_name;
    exception_data = concat_two_strings_with_zero (D.25219, msg, D.25221);
    goto <D.22460>;
  }
  <D.22467>:
  exception_data = error->msg;
  goto <D.22460>;
  <D.22468>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 4891);
  <D.22460>:
  D.25217 = error->exception_type;
  D.25234 = (unsigned int) D.25217;
  mono_class_set_failure (class, D.25234, exception_data);
}


concat_two_strings_with_zero (struct MonoImage * image, const char * s1, const char * s2)
{
  size_t iftmp.32;
  size_t iftmp.33;
  unsigned int D.25243;
  unsigned int D.25244;
  unsigned int len.34;
  long unsigned int len.35;
  const char * iftmp.36;
  const char * iftmp.37;
  int D.25255;
  _Bool D.25256;
  long int D.25257;
  long int D.25258;
  char * D.25261;
  int null_length;
  int len;
  char * s;
  int result;

  null_length = 6;
  if (s1 != 0B) goto <D.25236>; else goto <D.25237>;
  <D.25236>:
  iftmp.32 = strlen (s1);
  goto <D.25238>;
  <D.25237>:
  iftmp.32 = (size_t) null_length;
  <D.25238>:
  if (s2 != 0B) goto <D.25240>; else goto <D.25241>;
  <D.25240>:
  iftmp.33 = strlen (s2);
  goto <D.25242>;
  <D.25241>:
  iftmp.33 = (size_t) null_length;
  <D.25242>:
  D.25243 = iftmp.32 + iftmp.33;
  D.25244 = D.25243 + 2;
  len = (int) D.25244;
  len.34 = (unsigned int) len;
  s = mono_image_alloc (image, len.34);
  len.35 = (long unsigned int) len;
  if (s1 != 0B) goto <D.25248>; else goto <D.25249>;
  <D.25248>:
  iftmp.36 = s1;
  goto <D.25250>;
  <D.25249>:
  iftmp.36 = "(null)";
  <D.25250>:
  if (s2 != 0B) goto <D.25252>; else goto <D.25253>;
  <D.25252>:
  iftmp.37 = s2;
  goto <D.25254>;
  <D.25253>:
  iftmp.37 = "(null)";
  <D.25254>:
  result = monoeg_g_snprintf (s, len.35, "%s%c%s", iftmp.36, 0, iftmp.37);
  D.25255 = len + -1;
  D.25256 = D.25255 != result;
  D.25257 = (long int) D.25256;
  D.25258 = __builtin_expect (D.25257, 0);
  if (D.25258 != 0) goto <D.25259>; else goto <D.25260>;
  <D.25259>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4839, "result == len - 1");
  <D.25260>:
  D.25261 = s;
  return D.25261;
}


mono_dup_array_type (struct MonoImage * image, struct MonoArrayType * a)
{
  int * D.25265;
  unsigned char D.25268;
  unsigned int D.25269;
  unsigned int D.25270;
  void * D.25271;
  int * D.25272;
  unsigned char D.25275;
  unsigned int D.25276;
  unsigned int D.25277;
  void * D.25278;
  void * D.25282;
  void * D.25285;
  struct MonoArrayType * D.25286;

  if (image != 0B) goto <D.25263>; else goto <D.25264>;
  <D.25263>:
  a = mono_image_memdup (image, a, 16);
  D.25265 = a->sizes;
  if (D.25265 != 0B) goto <D.25266>; else goto <D.25267>;
  <D.25266>:
  D.25265 = a->sizes;
  D.25268 = a->numsizes;
  D.25269 = (unsigned int) D.25268;
  D.25270 = D.25269 * 4;
  D.25271 = mono_image_memdup (image, D.25265, D.25270);
  a->sizes = D.25271;
  <D.25267>:
  D.25272 = a->lobounds;
  if (D.25272 != 0B) goto <D.25273>; else goto <D.25274>;
  <D.25273>:
  D.25272 = a->lobounds;
  D.25275 = a->numlobounds;
  D.25276 = (unsigned int) D.25275;
  D.25277 = D.25276 * 4;
  D.25278 = mono_image_memdup (image, D.25272, D.25277);
  a->lobounds = D.25278;
  <D.25274>:
  goto <D.25279>;
  <D.25264>:
  a = monoeg_g_memdup (a, 16);
  D.25265 = a->sizes;
  if (D.25265 != 0B) goto <D.25280>; else goto <D.25281>;
  <D.25280>:
  D.25265 = a->sizes;
  D.25268 = a->numsizes;
  D.25269 = (unsigned int) D.25268;
  D.25270 = D.25269 * 4;
  D.25282 = monoeg_g_memdup (D.25265, D.25270);
  a->sizes = D.25282;
  <D.25281>:
  D.25272 = a->lobounds;
  if (D.25272 != 0B) goto <D.25283>; else goto <D.25284>;
  <D.25283>:
  D.25272 = a->lobounds;
  D.25275 = a->numlobounds;
  D.25276 = (unsigned int) D.25275;
  D.25277 = D.25276 * 4;
  D.25285 = monoeg_g_memdup (D.25272, D.25277);
  a->lobounds = D.25285;
  <D.25284>:
  <D.25279>:
  D.25286 = a;
  return D.25286;
}


mono_image_memdup (struct MonoImage * image, void * data, guint size)
{
  void * D.25288;
  void * res;

  res = mono_image_alloc (image, size);
  memcpy (res, data, size);
  D.25288 = res;
  return D.25288;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.25290;
  unsigned int D.25291;

  D.25291 = __builtin_object_size (__dest, 0);
  D.25290 = __builtin___memcpy_chk (__dest, __src, __len, D.25291);
  return D.25290;
}


mono_metadata_signature_deep_dup (struct MonoImage * image, struct MonoMethodSignature * sig)
{
  struct MonoType * D.25293;
  struct MonoType * D.25294;
  struct MonoType * D.25295;
  struct MonoType * D.25296;
  short unsigned int D.25297;
  int D.25298;
  struct MonoMethodSignature * D.25299;
  int i;

  sig = mono_metadata_signature_dup_full (image, sig);
  D.25293 = sig->ret;
  D.25294 = mono_metadata_type_dup (image, D.25293);
  sig->ret = D.25294;
  i = 0;
  goto <D.21090>;
  <D.21089>:
  D.25295 = sig->params[i];
  D.25296 = mono_metadata_type_dup (image, D.25295);
  sig->params[i] = D.25296;
  i = i + 1;
  <D.21090>:
  D.25297 = sig->param_count;
  D.25298 = (int) D.25297;
  if (D.25298 > i) goto <D.21089>; else goto <D.21091>;
  <D.21091>:
  D.25299 = sig;
  return D.25299;
}


mono_type_get_name_full (struct MonoType * type, MonoTypeNameFormat format)
{
  char * D.25301;
  struct GString * result;

  result = monoeg_g_string_new ("");
  mono_type_get_name_recurse (type, result, 0, format);
  D.25301 = monoeg_g_string_free (result, 0);
  return D.25301;
}


mono_type_get_name_recurse (struct MonoType * type, struct GString * str, gboolean is_recursed, MonoTypeNameFormat format)
{
  unsigned char D.25303;
  int D.25304;
  struct MonoArrayType * D.25305;
  unsigned char D.25306;
  MonoTypeNameFormat iftmp.38;
  struct MonoClass * D.25311;
  struct MonoType * D.25312;
  MonoTypeNameFormat iftmp.39;
  struct MonoClass * D.25321;
  struct MonoType * D.25322;
  MonoTypeNameFormat iftmp.40;
  struct MonoType * D.25329;
  struct MonoClass * D.25332;
  struct MonoGenericParam * D.25336;
  struct MonoGenericContainer * D.25337;
  struct MonoGenericParamInfo * D.25339;
  const char * iftmp.41;
  short unsigned int D.25344;
  int D.25345;
  struct MonoGenericParamInfo * iftmp.42;
  const char * D.25350;
  struct MonoClass * D.25351;
  struct MonoType * D.25354;
  const char * D.25359;
  char D.25360;
  const char * D.25365;
  int iftmp.43;
  int s.44;
  int D.25370;
  unsigned int D.25372;
  struct MonoGenericClass * D.25375;
  MonoTypeNameFormat iftmp.45;
  unsigned char D.25389;
  struct MonoType * D.25394;
  <unnamed-unsigned:22> D.25401;
  int D.25402;
  struct MonoGenericContainer * D.25407;
  unsigned int D.25410;
  struct MonoGenericParamFull * D.25418;
  unsigned int i.46;
  unsigned int D.25420;
  struct MonoGenericParamFull * D.25421;
  const char * D.25422;
  <unnamed-signed:31> D.25423;
  int D.25424;
  struct MonoClass * klass;

  D.25303 = type->type;
  D.25304 = (int) D.25303;
  switch (D.25304) <default: <D.21123>, case 15: <D.21119>, case 19: <D.21121>, case 20: <D.21109>, case 29: <D.21117>, case 30: <D.21122>>
  <D.21109>:
  {
    int i;
    int rank;
    MonoTypeNameFormat nested_format;

    D.25305 = type->data.array;
    D.25306 = D.25305->rank;
    rank = (int) D.25306;
    if (format != 3) goto <D.25308>; else goto <D.25309>;
    <D.25308>:
    iftmp.38 = format;
    goto <D.25310>;
    <D.25309>:
    iftmp.38 = 2;
    <D.25310>:
    nested_format = iftmp.38;
    D.25305 = type->data.array;
    D.25311 = D.25305->eklass;
    D.25312 = &D.25311->byval_arg;
    mono_type_get_name_recurse (D.25312, str, 0, nested_format);
    monoeg_g_string_append_c (str, 91);
    if (rank == 1) goto <D.25313>; else goto <D.25314>;
    <D.25313>:
    monoeg_g_string_append_c (str, 42);
    <D.25314>:
    i = 1;
    goto <D.21114>;
    <D.21113>:
    monoeg_g_string_append_c (str, 44);
    i = i + 1;
    <D.21114>:
    if (i < rank) goto <D.21113>; else goto <D.21115>;
    <D.21115>:
    monoeg_g_string_append_c (str, 93);
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.25315>; else goto <D.25316>;
    <D.25315>:
    D.25305 = type->data.array;
    D.25311 = D.25305->eklass;
    _mono_type_get_assembly_name (D.25311, str);
    <D.25316>:
    goto <D.21116>;
  }
  <D.21117>:
  {
    MonoTypeNameFormat nested_format;

    if (format != 3) goto <D.25318>; else goto <D.25319>;
    <D.25318>:
    iftmp.39 = format;
    goto <D.25320>;
    <D.25319>:
    iftmp.39 = 2;
    <D.25320>:
    nested_format = iftmp.39;
    D.25321 = type->data.klass;
    D.25322 = &D.25321->byval_arg;
    mono_type_get_name_recurse (D.25322, str, 0, nested_format);
    monoeg_g_string_append (str, "[]");
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.25323>; else goto <D.25324>;
    <D.25323>:
    D.25321 = type->data.klass;
    _mono_type_get_assembly_name (D.25321, str);
    <D.25324>:
    goto <D.21116>;
  }
  <D.21119>:
  {
    MonoTypeNameFormat nested_format;

    if (format != 3) goto <D.25326>; else goto <D.25327>;
    <D.25326>:
    iftmp.40 = format;
    goto <D.25328>;
    <D.25327>:
    iftmp.40 = 2;
    <D.25328>:
    nested_format = iftmp.40;
    D.25329 = type->data.type;
    mono_type_get_name_recurse (D.25329, str, 0, nested_format);
    monoeg_g_string_append_c (str, 42);
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.25330>; else goto <D.25331>;
    <D.25330>:
    D.25329 = type->data.type;
    D.25332 = mono_class_from_mono_type (D.25329);
    _mono_type_get_assembly_name (D.25332, str);
    <D.25331>:
    goto <D.21116>;
  }
  <D.21121>:
  <D.21122>:
  D.25336 = type->data.generic_param;
  D.25337 = D.25336->owner;
  if (D.25337 == 0B) goto <D.25333>; else goto <D.25338>;
  <D.25338>:
  D.25336 = type->data.generic_param;
  D.25339 = &MEM[(struct MonoGenericParamFull *)D.25336].info;
  if (D.25339 == 0B) goto <D.25333>; else goto <D.25334>;
  <D.25333>:
  D.25303 = type->type;
  if (D.25303 == 19) goto <D.25341>; else goto <D.25342>;
  <D.25341>:
  iftmp.41 = "!";
  goto <D.25343>;
  <D.25342>:
  iftmp.41 = "!!";
  <D.25343>:
  D.25336 = type->data.generic_param;
  D.25344 = D.25336->num;
  D.25345 = (int) D.25344;
  monoeg_g_string_append_printf (str, "%s%d", iftmp.41, D.25345);
  goto <D.25335>;
  <D.25334>:
  D.25336 = type->data.generic_param;
  D.25337 = D.25336->owner;
  if (D.25337 != 0B) goto <D.25347>; else goto <D.25348>;
  <D.25347>:
  D.25336 = type->data.generic_param;
  iftmp.42 = &MEM[(struct MonoGenericParamFull *)D.25336].info;
  goto <D.25349>;
  <D.25348>:
  iftmp.42 = 0B;
  <D.25349>:
  D.25350 = iftmp.42->name;
  monoeg_g_string_append (str, D.25350);
  <D.25335>:
  mono_type_name_check_byref (type, str);
  goto <D.21116>;
  <D.21123>:
  klass = mono_class_from_mono_type (type);
  D.25351 = klass->nested_in;
  if (D.25351 != 0B) goto <D.25352>; else goto <D.25353>;
  <D.25352>:
  D.25351 = klass->nested_in;
  D.25354 = &D.25351->byval_arg;
  mono_type_get_name_recurse (D.25354, str, 1, format);
  if (format == 0) goto <D.25355>; else goto <D.25356>;
  <D.25355>:
  monoeg_g_string_append_c (str, 46);
  goto <D.25357>;
  <D.25356>:
  monoeg_g_string_append_c (str, 43);
  <D.25357>:
  goto <D.25358>;
  <D.25353>:
  D.25359 = klass->name_space;
  D.25360 = *D.25359;
  if (D.25360 != 0) goto <D.25361>; else goto <D.25362>;
  <D.25361>:
  D.25359 = klass->name_space;
  monoeg_g_string_append (str, D.25359);
  monoeg_g_string_append_c (str, 46);
  <D.25362>:
  <D.25358>:
  if (format == 0) goto <D.25363>; else goto <D.25364>;
  <D.25363>:
  {
    char * s;
    int len;

    D.25365 = klass->name;
    s = __builtin_strchr (D.25365, 96);
    if (s != 0B) goto <D.25367>; else goto <D.25368>;
    <D.25367>:
    s.44 = (int) s;
    D.25365 = klass->name;
    D.25370 = (int) D.25365;
    iftmp.43 = s.44 - D.25370;
    goto <D.25371>;
    <D.25368>:
    D.25365 = klass->name;
    D.25372 = strlen (D.25365);
    iftmp.43 = (int) D.25372;
    <D.25371>:
    len = iftmp.43;
    D.25365 = klass->name;
    monoeg_g_string_append_len (str, D.25365, len);
  }
  goto <D.25373>;
  <D.25364>:
  D.25365 = klass->name;
  monoeg_g_string_append (str, D.25365);
  <D.25373>:
  if (is_recursed != 0) goto <D.21116>; else goto <D.25374>;
  <D.25374>:
  D.25375 = klass->generic_class;
  if (D.25375 != 0B) goto <D.25376>; else goto <D.25377>;
  <D.25376>:
  {
    struct MonoGenericClass * gclass;
    struct MonoGenericInst * inst;
    MonoTypeNameFormat nested_format;
    int i;

    gclass = klass->generic_class;
    inst = gclass->context.class_inst;
    if (format != 2) goto <D.25379>; else goto <D.25380>;
    <D.25379>:
    iftmp.45 = format;
    goto <D.25381>;
    <D.25380>:
    iftmp.45 = 3;
    <D.25381>:
    nested_format = iftmp.45;
    if (format == 0) goto <D.25382>; else goto <D.25383>;
    <D.25382>:
    monoeg_g_string_append_c (str, 60);
    goto <D.25384>;
    <D.25383>:
    monoeg_g_string_append_c (str, 91);
    <D.25384>:
    i = 0;
    goto <D.21132>;
    <D.21131>:
    {
      struct MonoType * t;

      t = inst->type_argv[i];
      if (i != 0) goto <D.25385>; else goto <D.25386>;
      <D.25385>:
      monoeg_g_string_append_c (str, 44);
      <D.25386>:
      if (nested_format == 3) goto <D.25387>; else goto <D.25388>;
      <D.25387>:
      D.25389 = t->type;
      if (D.25389 != 19) goto <D.25390>; else goto <D.25391>;
      <D.25390>:
      D.25303 = type->type;
      if (D.25303 != 30) goto <D.25392>; else goto <D.25393>;
      <D.25392>:
      monoeg_g_string_append_c (str, 91);
      <D.25393>:
      <D.25391>:
      <D.25388>:
      D.25394 = inst->type_argv[i];
      mono_type_get_name_recurse (D.25394, str, 0, nested_format);
      if (nested_format == 3) goto <D.25395>; else goto <D.25396>;
      <D.25395>:
      D.25389 = t->type;
      if (D.25389 != 19) goto <D.25397>; else goto <D.25398>;
      <D.25397>:
      D.25303 = type->type;
      if (D.25303 != 30) goto <D.25399>; else goto <D.25400>;
      <D.25399>:
      monoeg_g_string_append_c (str, 93);
      <D.25400>:
      <D.25398>:
      <D.25396>:
    }
    i = i + 1;
    <D.21132>:
    D.25401 = inst->type_argc;
    D.25402 = (int) D.25401;
    if (D.25402 > i) goto <D.21131>; else goto <D.21133>;
    <D.21133>:
    if (format == 0) goto <D.25403>; else goto <D.25404>;
    <D.25403>:
    monoeg_g_string_append_c (str, 62);
    goto <D.25405>;
    <D.25404>:
    monoeg_g_string_append_c (str, 93);
    <D.25405>:
  }
  goto <D.25406>;
  <D.25377>:
  D.25407 = klass->generic_container;
  if (D.25407 != 0B) goto <D.25408>; else goto <D.25409>;
  <D.25408>:
  D.25410 = format + 4294967294;
  if (D.25410 > 1) goto <D.25411>; else goto <D.25412>;
  <D.25411>:
  {
    int i;

    if (format == 0) goto <D.25413>; else goto <D.25414>;
    <D.25413>:
    monoeg_g_string_append_c (str, 60);
    goto <D.25415>;
    <D.25414>:
    monoeg_g_string_append_c (str, 91);
    <D.25415>:
    i = 0;
    goto <D.21136>;
    <D.21135>:
    if (i != 0) goto <D.25416>; else goto <D.25417>;
    <D.25416>:
    monoeg_g_string_append_c (str, 44);
    <D.25417>:
    D.25407 = klass->generic_container;
    D.25418 = D.25407->type_params;
    i.46 = (unsigned int) i;
    D.25420 = i.46 * 32;
    D.25421 = D.25418 + D.25420;
    D.25422 = D.25421->info.name;
    monoeg_g_string_append (str, D.25422);
    i = i + 1;
    <D.21136>:
    D.25407 = klass->generic_container;
    D.25423 = D.25407->type_argc;
    D.25424 = (int) D.25423;
    if (D.25424 > i) goto <D.21135>; else goto <D.21137>;
    <D.21137>:
    if (format == 0) goto <D.25425>; else goto <D.25426>;
    <D.25425>:
    monoeg_g_string_append_c (str, 62);
    goto <D.25427>;
    <D.25426>:
    monoeg_g_string_append_c (str, 93);
    <D.25427>:
  }
  <D.25412>:
  <D.25409>:
  <D.25406>:
  mono_type_name_check_byref (type, str);
  if (format == 3) goto <D.25428>; else goto <D.25429>;
  <D.25428>:
  D.25303 = type->type;
  if (D.25303 != 19) goto <D.25430>; else goto <D.25431>;
  <D.25430>:
  D.25303 = type->type;
  if (D.25303 != 30) goto <D.25432>; else goto <D.25433>;
  <D.25432>:
  _mono_type_get_assembly_name (klass, str);
  <D.25433>:
  <D.25431>:
  <D.25429>:
  goto <D.21116>;
  <D.21116>:
}


mono_type_name_check_byref (struct MonoType * type, struct GString * str)
{
  unsigned char D.25434;
  unsigned char D.25435;

  D.25434 = BIT_FIELD_REF <*type, 8, 56>;
  D.25435 = D.25434 & 64;
  if (D.25435 != 0) goto <D.25436>; else goto <D.25437>;
  <D.25436>:
  monoeg_g_string_append_c (str, 38);
  <D.25437>:
}


_mono_type_get_assembly_name (struct MonoClass * klass, struct GString * str)
{
  struct MonoImage * D.25438;
  struct MonoAssemblyName * D.25439;
  struct MonoAssembly * ta;
  char * name;

  D.25438 = klass->image;
  ta = D.25438->assembly;
  D.25439 = &ta->aname;
  name = mono_stringify_assembly_name (D.25439);
  monoeg_g_string_append_printf (str, ", %s", name);
  monoeg_g_free (name);
}


mono_type_get_full_name (struct MonoClass * class)
{
  char * D.25440;
  struct MonoType * D.25441;

  D.25441 = mono_class_get_type (class);
  D.25440 = mono_type_get_name_full (D.25441, 1);
  return D.25440;
}


mono_type_get_name (struct MonoType * type)
{
  char * D.25443;

  D.25443 = mono_type_get_name_full (type, 0);
  return D.25443;
}


mono_type_get_underlying_type (struct MonoType * type)
{
  unsigned char D.25445;
  struct MonoClass * D.25448;
  unsigned char D.25449;
  unsigned char D.25450;
  unsigned char D.25453;
  unsigned char D.25454;
  struct MonoType * D.25457;
  struct MonoGenericClass * D.25460;
  struct MonoClass * D.25461;
  unsigned char D.25462;
  unsigned char D.25463;

  D.25445 = type->type;
  if (D.25445 == 17) goto <D.25446>; else goto <D.25447>;
  <D.25446>:
  D.25448 = type->data.klass;
  D.25449 = BIT_FIELD_REF <*D.25448, 8, 160>;
  D.25450 = D.25449 & 16;
  if (D.25450 != 0) goto <D.25451>; else goto <D.25452>;
  <D.25451>:
  D.25453 = BIT_FIELD_REF <*type, 8, 56>;
  D.25454 = D.25453 & 64;
  if (D.25454 == 0) goto <D.25455>; else goto <D.25456>;
  <D.25455>:
  D.25448 = type->data.klass;
  D.25457 = mono_class_enum_basetype (D.25448);
  return D.25457;
  <D.25456>:
  <D.25452>:
  <D.25447>:
  D.25445 = type->type;
  if (D.25445 == 21) goto <D.25458>; else goto <D.25459>;
  <D.25458>:
  D.25460 = type->data.generic_class;
  D.25461 = D.25460->container_class;
  D.25462 = BIT_FIELD_REF <*D.25461, 8, 160>;
  D.25463 = D.25462 & 16;
  if (D.25463 != 0) goto <D.25464>; else goto <D.25465>;
  <D.25464>:
  D.25453 = BIT_FIELD_REF <*type, 8, 56>;
  D.25454 = D.25453 & 64;
  if (D.25454 == 0) goto <D.25466>; else goto <D.25467>;
  <D.25466>:
  D.25460 = type->data.generic_class;
  D.25461 = D.25460->container_class;
  D.25457 = mono_class_enum_basetype (D.25461);
  return D.25457;
  <D.25467>:
  <D.25465>:
  <D.25459>:
  D.25457 = type;
  return D.25457;
}


mono_class_is_open_constructed_type (struct MonoType * t)
{
  unsigned char D.25469;
  int D.25470;
  gboolean D.25471;
  struct MonoClass * D.25472;
  struct MonoType * D.25473;
  struct MonoArrayType * D.25474;
  struct MonoClass * D.25475;
  struct MonoType * D.25476;
  struct MonoType * D.25477;
  struct MonoGenericClass * D.25478;
  struct MonoGenericInst * D.25479;
  <unnamed-unsigned:1> D.25480;
  struct MonoGenericContainer * D.25481;
  _Bool D.25482;

  D.25469 = t->type;
  D.25470 = (int) D.25469;
  switch (D.25470) <default: <D.21163>, case 15: <D.21159>, case 17: <D.21162>, case 18: <D.21161>, case 19: <D.21155>, case 20: <D.21158>, case 21: <D.21160>, case 29: <D.21157>, case 30: <D.21156>>
  <D.21155>:
  <D.21156>:
  D.25471 = 1;
  return D.25471;
  <D.21157>:
  D.25472 = t->data.klass;
  D.25473 = &D.25472->byval_arg;
  D.25471 = mono_class_is_open_constructed_type (D.25473);
  return D.25471;
  <D.21158>:
  D.25474 = t->data.array;
  D.25475 = D.25474->eklass;
  D.25476 = &D.25475->byval_arg;
  D.25471 = mono_class_is_open_constructed_type (D.25476);
  return D.25471;
  <D.21159>:
  D.25477 = t->data.type;
  D.25471 = mono_class_is_open_constructed_type (D.25477);
  return D.25471;
  <D.21160>:
  D.25478 = t->data.generic_class;
  D.25479 = D.25478->context.class_inst;
  D.25480 = D.25479->is_open;
  D.25471 = (gboolean) D.25480;
  return D.25471;
  <D.21161>:
  <D.21162>:
  D.25472 = t->data.klass;
  D.25481 = D.25472->generic_container;
  D.25482 = D.25481 != 0B;
  D.25471 = (gboolean) D.25482;
  return D.25471;
  <D.21163>:
  D.25471 = 0;
  return D.25471;
}


mono_generic_class_get_context (struct MonoGenericClass * gclass)
{
  struct MonoGenericContext * D.25484;

  D.25484 = &gclass->context;
  return D.25484;
}


mono_class_get_context (struct MonoClass * class)
{
  struct MonoGenericContext * D.25486;
  struct MonoGenericContext * iftmp.47;
  struct MonoGenericClass * D.25488;

  D.25488 = class->generic_class;
  if (D.25488 != 0B) goto <D.25489>; else goto <D.25490>;
  <D.25489>:
  D.25488 = class->generic_class;
  iftmp.47 = mono_generic_class_get_context (D.25488);
  goto <D.25491>;
  <D.25490>:
  iftmp.47 = 0B;
  <D.25491>:
  D.25486 = iftmp.47;
  return D.25486;
}


mono_class_get_generic_container (struct MonoClass * klass)
{
  unsigned char D.25493;
  unsigned char D.25494;
  _Bool D.25495;
  long int D.25496;
  long int D.25497;
  struct MonoGenericContainer * D.25500;

  D.25493 = BIT_FIELD_REF <*klass, 8, 192>;
  D.25494 = D.25493 & 4;
  D.25495 = D.25494 == 0;
  D.25496 = (long int) D.25495;
  D.25497 = __builtin_expect (D.25496, 0);
  if (D.25497 != 0) goto <D.25498>; else goto <D.25499>;
  <D.25498>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 752, "klass->is_generic");
  <D.25499>:
  D.25500 = klass->generic_container;
  return D.25500;
}


mono_class_get_generic_class (struct MonoClass * klass)
{
  unsigned char D.25502;
  unsigned char D.25503;
  _Bool D.25504;
  long int D.25505;
  long int D.25506;
  struct MonoGenericClass * D.25509;

  D.25502 = BIT_FIELD_REF <*klass, 8, 192>;
  D.25503 = D.25502 & 8;
  D.25504 = D.25503 == 0;
  D.25505 = (long int) D.25504;
  D.25506 = __builtin_expect (D.25505, 0);
  if (D.25506 != 0) goto <D.25507>; else goto <D.25508>;
  <D.25507>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 765, "klass->is_inflated");
  <D.25508>:
  D.25509 = klass->generic_class;
  return D.25509;
}


mono_class_inflate_generic_type_with_mempool (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.25513;
  struct MonoType * D.25516;
  long unsigned int D.25521;
  long unsigned int D.25522;
  struct MonoType * inflated;

  inflated = 0B;
  mono_error_init (error);
  if (context != 0B) goto <D.25511>; else goto <D.25512>;
  <D.25511>:
  inflated = inflate_generic_type (image, type, context, error);
  <D.25512>:
  D.25513 = mono_error_ok (error);
  if (D.25513 == 0) goto <D.25514>; else goto <D.25515>;
  <D.25514>:
  D.25516 = 0B;
  return D.25516;
  <D.25515>:
  if (inflated == 0B) goto <D.25517>; else goto <D.25518>;
  <D.25517>:
  {
    struct MonoType * shared;

    shared = mono_metadata_get_shared_type (type);
    if (shared != 0B) goto <D.25519>; else goto <D.25520>;
    <D.25519>:
    D.25516 = shared;
    return D.25516;
    <D.25520>:
    D.25516 = mono_metadata_type_dup (image, type);
    return D.25516;
  }
  <D.25518>:
  D.25521 = mono_stats.inflated_type_count;
  D.25522 = D.25521 + 1;
  mono_stats.inflated_type_count = D.25522;
  D.25516 = inflated;
  return D.25516;
}


inflate_generic_type (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  unsigned char D.25524;
  int D.25525;
  struct MonoGenericParam * D.25526;
  short unsigned int D.25527;
  struct MonoType *[0:] * D.25531;
  struct MonoType * D.25532;
  <unnamed-unsigned:22> D.25533;
  int D.25534;
  struct MonoGenericParamInfo * iftmp.48;
  struct MonoGenericContainer * D.25538;
  const char * iftmp.49;
  struct MonoType * D.25546;
  int D.25547;
  struct MonoGenericParamInfo * iftmp.50;
  const char * iftmp.51;
  unsigned char D.25558;
  int D.25559;
  <unnamed-unsigned:1> D.25560;
  short unsigned int D.25561;
  <unnamed-unsigned:22> D.25564;
  int D.25565;
  struct MonoGenericParamInfo * iftmp.52;
  const char * iftmp.53;
  struct MonoType * D.25576;
  int D.25577;
  struct MonoGenericParamInfo * iftmp.54;
  const char * iftmp.55;
  unsigned char D.25588;
  int D.25589;
  struct MonoType * D.25590;
  int D.25594;
  struct MonoClass * D.25595;
  struct MonoArrayType * D.25596;
  struct MonoType * D.25597;
  int D.25601;
  struct MonoArrayType * D.25602;
  struct MonoClass * D.25603;
  struct MonoGenericInst * D.25604;
  unsigned char D.25605;
  unsigned char D.25606;
  int D.25609;
  struct MonoClass * D.25614;
  <unnamed-unsigned:1> D.25615;
  int D.25616;
  struct MonoGenericClass * D.25617;
  struct MonoGenericInst * D.25622;
  int D.25623;
  struct MonoImage * D.25628;
  <unnamed-unsigned:1> D.25629;
  int D.25630;

  mono_error_init (error);
  D.25524 = type->type;
  D.25525 = (int) D.25524;
  switch (D.25525) <default: <D.21205>, case 17: <D.21199>, case 18: <D.21198>, case 19: <D.21180>, case 20: <D.21190>, case 21: <D.21194>, case 29: <D.21186>, case 30: <D.21174>>
  <D.21174>:
  {
    struct MonoType * nt;
    int num;
    struct MonoGenericInst * inst;

    D.25526 = type->data.generic_param;
    D.25527 = D.25526->num;
    num = (int) D.25527;
    inst = context->method_inst;
    if (inst == 0B) goto <D.25528>; else goto <D.25530>;
    <D.25530>:
    D.25531 = &inst->type_argv;
    if (D.25531 == 0B) goto <D.25528>; else goto <D.25529>;
    <D.25528>:
    D.25532 = 0B;
    return D.25532;
    <D.25529>:
    D.25533 = inst->type_argc;
    D.25534 = (int) D.25533;
    if (D.25534 <= num) goto <D.25535>; else goto <D.25536>;
    <D.25535>:
    {
      struct MonoGenericParamInfo * info;

      D.25526 = type->data.generic_param;
      D.25538 = D.25526->owner;
      if (D.25538 != 0B) goto <D.25539>; else goto <D.25540>;
      <D.25539>:
      D.25526 = type->data.generic_param;
      iftmp.48 = &MEM[(struct MonoGenericParamFull *)D.25526].info;
      goto <D.25541>;
      <D.25540>:
      iftmp.48 = 0B;
      <D.25541>:
      info = iftmp.48;
      if (info != 0B) goto <D.25543>; else goto <D.25544>;
      <D.25543>:
      iftmp.49 = info->name;
      goto <D.25545>;
      <D.25544>:
      iftmp.49 = "";
      <D.25545>:
      D.25533 = inst->type_argc;
      D.25534 = (int) D.25533;
      mono_error_set_bad_image (error, image, "MVAR %d (%s) cannot be expanded in this context with %d instantiations", num, iftmp.49, D.25534);
      D.25532 = 0B;
      return D.25532;
    }
    <D.25536>:
    D.25546 = inst->type_argv[num];
    D.25547 = is_valid_generic_argument (D.25546);
    if (D.25547 == 0) goto <D.25548>; else goto <D.25549>;
    <D.25548>:
    {
      struct MonoGenericParamInfo * info;

      D.25526 = type->data.generic_param;
      D.25538 = D.25526->owner;
      if (D.25538 != 0B) goto <D.25551>; else goto <D.25552>;
      <D.25551>:
      D.25526 = type->data.generic_param;
      iftmp.50 = &MEM[(struct MonoGenericParamFull *)D.25526].info;
      goto <D.25553>;
      <D.25552>:
      iftmp.50 = 0B;
      <D.25553>:
      info = iftmp.50;
      if (info != 0B) goto <D.25555>; else goto <D.25556>;
      <D.25555>:
      iftmp.51 = info->name;
      goto <D.25557>;
      <D.25556>:
      iftmp.51 = "";
      <D.25557>:
      D.25546 = inst->type_argv[num];
      D.25558 = D.25546->type;
      D.25559 = (int) D.25558;
      mono_error_set_bad_image (error, image, "MVAR %d (%s) cannot be expanded with type 0x%x", num, iftmp.51, D.25559);
      D.25532 = 0B;
      return D.25532;
    }
    <D.25549>:
    D.25546 = inst->type_argv[num];
    nt = mono_metadata_type_dup (image, D.25546);
    D.25560 = type->byref;
    nt->byref = D.25560;
    D.25561 = type->attrs;
    nt->attrs = D.25561;
    D.25532 = nt;
    return D.25532;
  }
  <D.21180>:
  {
    struct MonoType * nt;
    int num;
    struct MonoGenericInst * inst;

    D.25526 = type->data.generic_param;
    D.25527 = D.25526->num;
    num = (int) D.25527;
    inst = context->class_inst;
    if (inst == 0B) goto <D.25562>; else goto <D.25563>;
    <D.25562>:
    D.25532 = 0B;
    return D.25532;
    <D.25563>:
    D.25564 = inst->type_argc;
    D.25565 = (int) D.25564;
    if (D.25565 <= num) goto <D.25566>; else goto <D.25567>;
    <D.25566>:
    {
      struct MonoGenericParamInfo * info;

      D.25526 = type->data.generic_param;
      D.25538 = D.25526->owner;
      if (D.25538 != 0B) goto <D.25569>; else goto <D.25570>;
      <D.25569>:
      D.25526 = type->data.generic_param;
      iftmp.52 = &MEM[(struct MonoGenericParamFull *)D.25526].info;
      goto <D.25571>;
      <D.25570>:
      iftmp.52 = 0B;
      <D.25571>:
      info = iftmp.52;
      if (info != 0B) goto <D.25573>; else goto <D.25574>;
      <D.25573>:
      iftmp.53 = info->name;
      goto <D.25575>;
      <D.25574>:
      iftmp.53 = "";
      <D.25575>:
      D.25564 = inst->type_argc;
      D.25565 = (int) D.25564;
      mono_error_set_bad_image (error, image, "VAR %d (%s) cannot be expanded in this context with %d instantiations", num, iftmp.53, D.25565);
      D.25532 = 0B;
      return D.25532;
    }
    <D.25567>:
    D.25576 = inst->type_argv[num];
    D.25577 = is_valid_generic_argument (D.25576);
    if (D.25577 == 0) goto <D.25578>; else goto <D.25579>;
    <D.25578>:
    {
      struct MonoGenericParamInfo * info;

      D.25526 = type->data.generic_param;
      D.25538 = D.25526->owner;
      if (D.25538 != 0B) goto <D.25581>; else goto <D.25582>;
      <D.25581>:
      D.25526 = type->data.generic_param;
      iftmp.54 = &MEM[(struct MonoGenericParamFull *)D.25526].info;
      goto <D.25583>;
      <D.25582>:
      iftmp.54 = 0B;
      <D.25583>:
      info = iftmp.54;
      if (info != 0B) goto <D.25585>; else goto <D.25586>;
      <D.25585>:
      iftmp.55 = info->name;
      goto <D.25587>;
      <D.25586>:
      iftmp.55 = "";
      <D.25587>:
      D.25576 = inst->type_argv[num];
      D.25588 = D.25576->type;
      D.25589 = (int) D.25588;
      mono_error_set_bad_image (error, image, "VAR %d (%s) cannot be expanded with type 0x%x", num, iftmp.55, D.25589);
      D.25532 = 0B;
      return D.25532;
    }
    <D.25579>:
    D.25576 = inst->type_argv[num];
    nt = mono_metadata_type_dup (image, D.25576);
    D.25560 = type->byref;
    nt->byref = D.25560;
    D.25561 = type->attrs;
    nt->attrs = D.25561;
    D.25532 = nt;
    return D.25532;
  }
  <D.21186>:
  {
    struct MonoClass * eclass;
    struct MonoType * nt;
    struct MonoType * inflated;

    eclass = type->data.klass;
    D.25590 = &eclass->byval_arg;
    inflated = inflate_generic_type (0B, D.25590, context, error);
    if (inflated == 0B) goto <D.25591>; else goto <D.25593>;
    <D.25593>:
    D.25594 = mono_error_ok (error);
    if (D.25594 == 0) goto <D.25591>; else goto <D.25592>;
    <D.25591>:
    D.25532 = 0B;
    return D.25532;
    <D.25592>:
    nt = mono_metadata_type_dup (image, type);
    D.25595 = mono_class_from_mono_type (inflated);
    nt->data.klass = D.25595;
    mono_metadata_free_type (inflated);
    D.25532 = nt;
    return D.25532;
  }
  <D.21190>:
  {
    struct MonoClass * eclass;
    struct MonoType * nt;
    struct MonoType * inflated;

    D.25596 = type->data.array;
    eclass = D.25596->eklass;
    D.25597 = &eclass->byval_arg;
    inflated = inflate_generic_type (0B, D.25597, context, error);
    if (inflated == 0B) goto <D.25598>; else goto <D.25600>;
    <D.25600>:
    D.25601 = mono_error_ok (error);
    if (D.25601 == 0) goto <D.25598>; else goto <D.25599>;
    <D.25598>:
    D.25532 = 0B;
    return D.25532;
    <D.25599>:
    nt = mono_metadata_type_dup (image, type);
    D.25602 = nt->data.array;
    D.25603 = mono_class_from_mono_type (inflated);
    D.25602->eklass = D.25603;
    mono_metadata_free_type (inflated);
    D.25532 = nt;
    return D.25532;
  }
  <D.21194>:
  {
    struct MonoGenericClass * gclass;
    struct MonoGenericInst * inst;
    struct MonoType * nt;

    gclass = type->data.generic_class;
    D.25604 = gclass->context.class_inst;
    D.25605 = BIT_FIELD_REF <*D.25604, 8, 48>;
    D.25606 = D.25605 & 64;
    if (D.25606 == 0) goto <D.25607>; else goto <D.25608>;
    <D.25607>:
    D.25532 = 0B;
    return D.25532;
    <D.25608>:
    D.25604 = gclass->context.class_inst;
    inst = mono_metadata_inflate_generic_inst (D.25604, context, error);
    D.25609 = mono_error_ok (error);
    if (D.25609 == 0) goto <D.25610>; else goto <D.25611>;
    <D.25610>:
    D.25532 = 0B;
    return D.25532;
    <D.25611>:
    D.25604 = gclass->context.class_inst;
    if (D.25604 != inst) goto <D.25612>; else goto <D.25613>;
    <D.25612>:
    D.25614 = gclass->container_class;
    D.25615 = gclass->is_dynamic;
    D.25616 = (int) D.25615;
    gclass = mono_metadata_lookup_generic_class (D.25614, inst, D.25616);
    <D.25613>:
    D.25617 = type->data.generic_class;
    if (D.25617 == gclass) goto <D.25618>; else goto <D.25619>;
    <D.25618>:
    D.25532 = 0B;
    return D.25532;
    <D.25619>:
    nt = mono_metadata_type_dup (image, type);
    nt->data.generic_class = gclass;
    D.25532 = nt;
    return D.25532;
  }
  <D.21198>:
  <D.21199>:
  {
    struct MonoClass * klass;
    struct MonoGenericContainer * container;
    struct MonoGenericInst * inst;
    struct MonoGenericClass * gclass;
    struct MonoType * nt;

    klass = type->data.klass;
    container = klass->generic_container;
    gclass = 0B;
    if (container == 0B) goto <D.25620>; else goto <D.25621>;
    <D.25620>:
    D.25532 = 0B;
    return D.25532;
    <D.25621>:
    D.25622 = container->context.class_inst;
    inst = mono_metadata_inflate_generic_inst (D.25622, context, error);
    D.25623 = mono_error_ok (error);
    if (D.25623 == 0) goto <D.25624>; else goto <D.25625>;
    <D.25624>:
    D.25532 = 0B;
    return D.25532;
    <D.25625>:
    D.25622 = container->context.class_inst;
    if (D.25622 == inst) goto <D.25626>; else goto <D.25627>;
    <D.25626>:
    D.25532 = 0B;
    return D.25532;
    <D.25627>:
    D.25628 = klass->image;
    D.25629 = D.25628->dynamic;
    D.25630 = (int) D.25629;
    gclass = mono_metadata_lookup_generic_class (klass, inst, D.25630);
    nt = mono_metadata_type_dup (image, type);
    nt->type = 21;
    nt->data.generic_class = gclass;
    D.25532 = nt;
    return D.25532;
  }
  <D.21205>:
  D.25532 = 0B;
  return D.25532;
  D.25532 = 0B;
  return D.25532;
}


is_valid_generic_argument (struct MonoType * type)
{
  unsigned char D.25632;
  int D.25633;
  gboolean D.25634;

  D.25632 = type->type;
  D.25633 = (int) D.25632;
  switch (D.25633) <default: <D.25635>, case 1: <D.21167>>
  <D.21167>:
  D.25634 = 0;
  return D.25634;
  <D.25635>:
  D.25634 = 1;
  return D.25634;
}


mono_class_inflate_generic_type (struct MonoType * type, struct MonoGenericContext * context)
{
  int D.25637;
  struct MonoType * D.25640;
  struct MonoError error;
  struct MonoType * result;

  try
    {
      result = mono_class_inflate_generic_type_checked (type, context, &error);
      D.25637 = mono_error_ok (&error);
      if (D.25637 == 0) goto <D.25638>; else goto <D.25639>;
      <D.25638>:
      mono_error_cleanup (&error);
      D.25640 = 0B;
      return D.25640;
      <D.25639>:
      D.25640 = result;
      return D.25640;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_type_checked (struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  struct MonoType * D.25643;

  D.25643 = mono_class_inflate_generic_type_with_mempool (0B, type, context, error);
  return D.25643;
}


mono_class_inflate_generic_class (struct MonoClass * gklass, struct MonoGenericContext * context)
{
  int D.25645;
  _Bool D.25646;
  long int D.25647;
  long int D.25648;
  struct MonoClass * D.25651;
  struct MonoError error;
  struct MonoClass * res;

  try
    {
      res = mono_class_inflate_generic_class_checked (gklass, context, &error);
      D.25645 = mono_error_ok (&error);
      D.25646 = D.25645 == 0;
      D.25647 = (long int) D.25646;
      D.25648 = __builtin_expect (D.25647, 0);
      if (D.25648 != 0) goto <D.25649>; else goto <D.25650>;
      <D.25649>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 905, "mono_error_ok (&error)");
      <D.25650>:
      D.25651 = res;
      return D.25651;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_method (struct MonoMethod * method, struct MonoGenericContext * context)
{
  struct MonoMethod * D.25654;

  D.25654 = mono_class_inflate_generic_method_full (method, 0B, context);
  return D.25654;
}


mono_class_inflate_generic_method_full (struct MonoMethod * method, struct MonoClass * klass_hint, struct MonoGenericContext * context)
{
  int D.25656;
  const char * D.25659;
  struct MonoMethod * D.25660;
  struct MonoError error;
  struct MonoMethod * res;

  try
    {
      res = mono_class_inflate_generic_method_full_checked (method, klass_hint, context, &error);
      D.25656 = mono_error_ok (&error);
      if (D.25656 == 0) goto <D.25657>; else goto <D.25658>;
      <D.25657>:
      D.25659 = mono_error_get_message (&error);
      monoeg_g_log (0B, 4, "Could not inflate generic method due to %s", D.25659);
      <D.21277>:
      goto <D.21277>;
      <D.25658>:
      D.25660 = res;
      return D.25660;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_method_full_checked (struct MonoMethod * method, struct MonoClass * klass_hint, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.25663;
  struct MonoMethod * D.25666;
  int D.25667;
  unsigned char D.25670;
  unsigned char D.25671;
  unsigned char D.25675;
  struct MonoGenericInst * D.25677;
  struct MonoClass * D.25678;
  struct MonoGenericContainer * D.25679;
  struct MonoGenericInst * D.25681;
  int iftmp.56;
  struct MonoImage * D.25686;
  unsigned char D.25687;
  unsigned char D.25688;
  unsigned char D.25690;
  unsigned char D.25691;
  struct MonoGenericContainer * D.25693;
  struct MonoGenericInst * D.25694;
  unsigned char D.25696;
  <unnamed-unsigned:1> D.25697;
  struct MonoGenericContainer * D.25702;
  struct MonoGenericInst * D.25703;
  struct MonoMethod * D.25706;
  struct MonoClass * D.25707;
  struct MonoGenericClass * D.25708;
  _Bool D.25709;
  long int D.25710;
  long int D.25711;
  struct MonoGenericContainer * D.25714;
  struct MonoGenericInst * D.25717;
  struct MonoGenericInst * D.25721;
  long unsigned int D.25724;
  long unsigned int D.25725;
  unsigned int inflated_methods_size.57;
  unsigned int inflated_methods_size.58;
  const char * D.25730;
  unsigned char D.25731;
  unsigned char D.25732;
  struct MonoMethodPInvoke * D.25735;
  struct MonoMethod * D.25737;
  struct MonoGenericClass * D.25745;
  struct MonoClass * D.25747;
  struct MonoGenericInst * D.25749;
  struct MonoClass * D.25752;
  struct MonoType * D.25755;
  int D.25756;
  struct MonoClass * iftmp.59;
  struct MonoMethod * result;
  struct MonoMethodInflated * iresult;
  struct MonoMethodInflated * cached;
  struct MonoMethodSignature * sig;
  struct MonoGenericContext tmp_context;
  gboolean is_mb_open;
  void fail = <<< error >>>;

  try
    {
      is_mb_open = 0;
      mono_error_init (error);
      goto <D.21293>;
      <D.21292>:
      {
        struct MonoGenericContext * method_context;
        struct MonoMethodInflated * imethod;

        method_context = mono_method_get_context (method);
        imethod = method;
        tmp_context = inflate_generic_context (method_context, context, error);
        D.25663 = mono_error_ok (error);
        if (D.25663 == 0) goto <D.25664>; else goto <D.25665>;
        <D.25664>:
        D.25666 = 0B;
        return D.25666;
        <D.25665>:
        context = &tmp_context;
        D.25667 = mono_metadata_generic_context_equal (method_context, context);
        if (D.25667 != 0) goto <D.25668>; else goto <D.25669>;
        <D.25668>:
        D.25666 = method;
        return D.25666;
        <D.25669>:
        method = imethod->declaring;
      }
      <D.21293>:
      D.25670 = BIT_FIELD_REF <*method, 8, 168>;
      D.25671 = D.25670 & 16;
      if (D.25671 != 0) goto <D.21292>; else goto <D.21294>;
      <D.21294>:
      D.25670 = BIT_FIELD_REF <*method, 8, 168>;
      D.25675 = D.25670 & 8;
      if (D.25675 == 0) goto <D.25674>; else goto <D.25676>;
      <D.25676>:
      D.25677 = context->method_inst;
      if (D.25677 == 0B) goto <D.25674>; else goto <D.25673>;
      <D.25674>:
      D.25678 = method->klass;
      D.25679 = D.25678->generic_container;
      if (D.25679 == 0B) goto <D.25672>; else goto <D.25680>;
      <D.25680>:
      D.25681 = context->class_inst;
      if (D.25681 == 0B) goto <D.25672>; else goto <D.25673>;
      <D.25672>:
      D.25666 = method;
      return D.25666;
      <D.25673>:
      D.25670 = BIT_FIELD_REF <*method, 8, 168>;
      D.25675 = D.25670 & 8;
      if (D.25675 != 0) goto <D.25685>; else goto <D.25683>;
      <D.25685>:
      D.25678 = method->klass;
      D.25686 = D.25678->image;
      D.25687 = BIT_FIELD_REF <*D.25686, 8, 128>;
      D.25688 = D.25687 & 8;
      if (D.25688 != 0) goto <D.25689>; else goto <D.25683>;
      <D.25689>:
      D.25678 = method->klass;
      D.25690 = BIT_FIELD_REF <*D.25678, 8, 160>;
      D.25691 = D.25690 & 128;
      if (D.25691 == 0) goto <D.25692>; else goto <D.25683>;
      <D.25692>:
      D.25677 = context->method_inst;
      D.25693 = mono_method_get_generic_container (method);
      D.25694 = D.25693->context.method_inst;
      if (D.25677 == D.25694) goto <D.25695>; else goto <D.25683>;
      <D.25695>:
      iftmp.56 = 1;
      goto <D.25684>;
      <D.25683>:
      iftmp.56 = 0;
      <D.25684>:
      is_mb_open = iftmp.56;
      iresult = monoeg_malloc0 (48);
      iresult->context = *context;
      iresult->declaring = method;
      D.25696 = (unsigned char) is_mb_open;
      D.25697 = (<unnamed-unsigned:1>) D.25696;
      iresult->method.method.is_mb_open = D.25697;
      D.25677 = context->method_inst;
      if (D.25677 == 0B) goto <D.25698>; else goto <D.25699>;
      <D.25698>:
      D.25670 = BIT_FIELD_REF <*method, 8, 168>;
      D.25675 = D.25670 & 8;
      if (D.25675 != 0) goto <D.25700>; else goto <D.25701>;
      <D.25700>:
      D.25702 = mono_method_get_generic_container (method);
      D.25703 = D.25702->context.method_inst;
      iresult->context.method_inst = D.25703;
      <D.25701>:
      <D.25699>:
      D.25681 = context->class_inst;
      if (D.25681 == 0B) goto <D.25704>; else goto <D.25705>;
      <D.25704>:
      D.25706 = iresult->declaring;
      D.25707 = D.25706->klass;
      D.25708 = D.25707->generic_class;
      D.25709 = D.25708 != 0B;
      D.25710 = (long int) D.25709;
      D.25711 = __builtin_expect (D.25710, 0);
      if (D.25711 != 0) goto <D.25712>; else goto <D.25713>;
      <D.25712>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1059, "!iresult->declaring->klass->generic_class");
      <D.25713>:
      D.25706 = iresult->declaring;
      D.25707 = D.25706->klass;
      D.25714 = D.25707->generic_container;
      if (D.25714 != 0B) goto <D.25715>; else goto <D.25716>;
      <D.25715>:
      D.25706 = iresult->declaring;
      D.25707 = D.25706->klass;
      D.25714 = D.25707->generic_container;
      D.25717 = D.25714->context.class_inst;
      iresult->context.class_inst = D.25717;
      goto <D.25718>;
      <D.25716>:
      D.25706 = iresult->declaring;
      D.25707 = D.25706->klass;
      D.25708 = D.25707->generic_class;
      if (D.25708 != 0B) goto <D.25719>; else goto <D.25720>;
      <D.25719>:
      D.25706 = iresult->declaring;
      D.25707 = D.25706->klass;
      D.25708 = D.25707->generic_class;
      D.25721 = D.25708->context.class_inst;
      iresult->context.class_inst = D.25721;
      <D.25720>:
      <D.25718>:
      <D.25705>:
      mono_loader_lock ();
      cached = mono_method_inflated_lookup (iresult, 0);
      if (cached != 0B) goto <D.25722>; else goto <D.25723>;
      <D.25722>:
      mono_loader_unlock ();
      monoeg_g_free (iresult);
      D.25666 = cached;
      return D.25666;
      <D.25723>:
      D.25724 = mono_stats.inflated_method_count;
      D.25725 = D.25724 + 1;
      mono_stats.inflated_method_count = D.25725;
      inflated_methods_size.57 = inflated_methods_size;
      inflated_methods_size.58 = inflated_methods_size.57 + 48;
      inflated_methods_size = inflated_methods_size.58;
      sig = mono_method_signature (method);
      if (sig == 0B) goto <D.25728>; else goto <D.25729>;
      <D.25728>:
      {
        char * name;

        D.25678 = method->klass;
        name = mono_type_get_full_name (D.25678);
        D.25678 = method->klass;
        D.25686 = D.25678->image;
        D.25730 = method->name;
        mono_error_set_bad_image (error, D.25686, "Could not resolve signature of method %s:%s", name, D.25730);
        monoeg_g_free (name);
        goto fail;
      }
      <D.25729>:
      D.25731 = BIT_FIELD_REF <*sig, 8, 88>;
      D.25732 = D.25731 & 1;
      if (D.25732 != 0) goto <D.25733>; else goto <D.25734>;
      <D.25733>:
      D.25735 = &iresult->method.pinvoke;
      memcpy (D.25735, method, 32);
      goto <D.25736>;
      <D.25734>:
      D.25737 = &iresult->method.method;
      memcpy (D.25737, method, 24);
      <D.25736>:
      result = iresult;
      result->is_inflated = 1;
      result->is_generic = 0;
      result->sre_method = 0;
      result->signature = 0B;
      D.25696 = (unsigned char) is_mb_open;
      D.25697 = (<unnamed-unsigned:1>) D.25696;
      result->is_mb_open = D.25697;
      D.25677 = context->method_inst;
      if (D.25677 == 0B) goto <D.25738>; else goto <D.25739>;
      <D.25738>:
      {
        struct MonoGenericContainer * generic_container;

        generic_container = mono_method_get_generic_container (method);
        if (generic_container != 0B) goto <D.25740>; else goto <D.25741>;
        <D.25740>:
        result->is_generic = 1;
        mono_method_set_generic_container (result, generic_container);
        <D.25741>:
      }
      <D.25739>:
      if (klass_hint == 0B) goto <D.25742>; else goto <D.25744>;
      <D.25744>:
      D.25745 = klass_hint->generic_class;
      if (D.25745 == 0B) goto <D.25742>; else goto <D.25746>;
      <D.25746>:
      D.25745 = klass_hint->generic_class;
      D.25747 = D.25745->container_class;
      D.25678 = method->klass;
      if (D.25747 != D.25678) goto <D.25742>; else goto <D.25748>;
      <D.25748>:
      D.25745 = klass_hint->generic_class;
      D.25749 = D.25745->context.class_inst;
      D.25681 = context->class_inst;
      if (D.25749 != D.25681) goto <D.25742>; else goto <D.25743>;
      <D.25742>:
      klass_hint = 0B;
      <D.25743>:
      D.25678 = method->klass;
      D.25679 = D.25678->generic_container;
      if (D.25679 != 0B) goto <D.25750>; else goto <D.25751>;
      <D.25750>:
      result->klass = klass_hint;
      <D.25751>:
      D.25752 = result->klass;
      if (D.25752 == 0B) goto <D.25753>; else goto <D.25754>;
      <D.25753>:
      {
        struct MonoType * inflated;

        D.25678 = method->klass;
        D.25755 = &D.25678->byval_arg;
        inflated = inflate_generic_type (0B, D.25755, context, error);
        D.25756 = mono_error_ok (error);
        if (D.25756 == 0) goto fail; else goto <D.25757>;
        <D.25757>:
        if (inflated != 0B) goto <D.25759>; else goto <D.25760>;
        <D.25759>:
        iftmp.59 = mono_class_from_mono_type (inflated);
        goto <D.25761>;
        <D.25760>:
        iftmp.59 = method->klass;
        <D.25761>:
        result->klass = iftmp.59;
        if (inflated != 0B) goto <D.25762>; else goto <D.25763>;
        <D.25762>:
        mono_metadata_free_type (inflated);
        <D.25763>:
      }
      <D.25754>:
      mono_method_inflated_lookup (iresult, 1);
      mono_loader_unlock ();
      D.25666 = result;
      return D.25666;
      fail:
      mono_loader_unlock ();
      monoeg_g_free (iresult);
      D.25666 = 0B;
      return D.25666;
    }
  finally
    {
      tmp_context = {CLOBBER};
    }
}


inflate_generic_context (struct MonoGenericContext * context, struct MonoGenericContext * inflate_with, struct MonoError * error)
{
  struct MonoGenericInst * D.25767;
  int D.25770;
  struct MonoGenericInst * D.25772;
  int D.25775;
  struct MonoGenericInst * class_inst;
  struct MonoGenericInst * method_inst;
  struct MonoGenericContext res;
  void fail = <<< error >>>;

  try
    {
      class_inst = 0B;
      method_inst = 0B;
      res.class_inst = 0B;
      res.method_inst = 0B;
      mono_error_init (error);
      D.25767 = context->class_inst;
      if (D.25767 != 0B) goto <D.25768>; else goto <D.25769>;
      <D.25768>:
      D.25767 = context->class_inst;
      class_inst = mono_metadata_inflate_generic_inst (D.25767, inflate_with, error);
      D.25770 = mono_error_ok (error);
      if (D.25770 == 0) goto fail; else goto <D.25771>;
      <D.25771>:
      <D.25769>:
      D.25772 = context->method_inst;
      if (D.25772 != 0B) goto <D.25773>; else goto <D.25774>;
      <D.25773>:
      D.25772 = context->method_inst;
      method_inst = mono_metadata_inflate_generic_inst (D.25772, inflate_with, error);
      D.25775 = mono_error_ok (error);
      if (D.25775 == 0) goto fail; else goto <D.25776>;
      <D.25776>:
      <D.25774>:
      res.class_inst = class_inst;
      res.method_inst = method_inst;
      fail:
      <retval> = res;
      return <retval>;
    }
  finally
    {
      res = {CLOBBER};
    }
}


mono_get_inflated_method (struct MonoMethod * method)
{
  struct MonoMethod * D.25779;

  D.25779 = method;
  return D.25779;
}


mono_method_get_context_general (struct MonoMethod * method, gboolean uninflated)
{
  unsigned char D.25781;
  unsigned char D.25782;
  struct MonoGenericContext * D.25785;
  unsigned char D.25788;
  struct MonoGenericContainer * D.25791;
  struct MonoClass * D.25792;
  struct MonoGenericContainer * D.25793;

  D.25781 = BIT_FIELD_REF <*method, 8, 168>;
  D.25782 = D.25781 & 16;
  if (D.25782 != 0) goto <D.25783>; else goto <D.25784>;
  <D.25783>:
  {
    struct MonoMethodInflated * imethod;

    imethod = method;
    D.25785 = &imethod->context;
    return D.25785;
  }
  <D.25784>:
  if (uninflated == 0) goto <D.25786>; else goto <D.25787>;
  <D.25786>:
  D.25785 = 0B;
  return D.25785;
  <D.25787>:
  D.25781 = BIT_FIELD_REF <*method, 8, 168>;
  D.25788 = D.25781 & 8;
  if (D.25788 != 0) goto <D.25789>; else goto <D.25790>;
  <D.25789>:
  D.25791 = mono_method_get_generic_container (method);
  D.25785 = &D.25791->context;
  return D.25785;
  <D.25790>:
  D.25792 = method->klass;
  D.25793 = D.25792->generic_container;
  if (D.25793 != 0B) goto <D.25794>; else goto <D.25795>;
  <D.25794>:
  D.25792 = method->klass;
  D.25793 = D.25792->generic_container;
  D.25785 = &D.25793->context;
  return D.25785;
  <D.25795>:
  D.25785 = 0B;
  return D.25785;
}


mono_method_get_context (struct MonoMethod * method)
{
  struct MonoGenericContext * D.25797;

  D.25797 = mono_method_get_context_general (method, 0);
  return D.25797;
}


mono_method_get_generic_container (struct MonoMethod * method)
{
  unsigned char D.25799;
  unsigned char D.25800;
  struct MonoGenericContainer * D.25803;
  struct MonoClass * D.25804;
  struct MonoImage * D.25805;
  _Bool D.25806;
  long int D.25807;
  long int D.25808;
  struct MonoGenericContainer * container;

  D.25799 = BIT_FIELD_REF <*method, 8, 168>;
  D.25800 = D.25799 & 8;
  if (D.25800 == 0) goto <D.25801>; else goto <D.25802>;
  <D.25801>:
  D.25803 = 0B;
  return D.25803;
  <D.25802>:
  D.25804 = method->klass;
  D.25805 = D.25804->image;
  container = mono_image_property_lookup (D.25805, method, 0);
  D.25806 = container == 0B;
  D.25807 = (long int) D.25806;
  D.25808 = __builtin_expect (D.25807, 0);
  if (D.25808 != 0) goto <D.25809>; else goto <D.25810>;
  <D.25809>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1216, "container");
  <D.25810>:
  D.25803 = container;
  return D.25803;
}


mono_method_set_generic_container (struct MonoMethod * method, struct MonoGenericContainer * container)
{
  unsigned char D.25812;
  unsigned char D.25813;
  _Bool D.25814;
  long int D.25815;
  long int D.25816;
  struct MonoClass * D.25819;
  struct MonoImage * D.25820;

  D.25812 = BIT_FIELD_REF <*method, 8, 168>;
  D.25813 = D.25812 & 8;
  D.25814 = D.25813 == 0;
  D.25815 = (long int) D.25814;
  D.25816 = __builtin_expect (D.25815, 0);
  if (D.25816 != 0) goto <D.25817>; else goto <D.25818>;
  <D.25817>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1230, "method->is_generic");
  <D.25818>:
  D.25819 = method->klass;
  D.25820 = D.25819->image;
  mono_image_property_insert (D.25820, method, 0, container);
}


mono_class_setup_fields_locking (struct MonoClass * class)
{
  unsigned char D.25821;
  unsigned char D.25822;

  D.25821 = BIT_FIELD_REF <*class, 8, 192>;
  D.25822 = D.25821 & 32;
  if (D.25822 != 0) goto <D.25823>; else goto <D.25824>;
  <D.25823>:
  return;
  <D.25824>:
  mono_loader_lock ();
  mono_class_setup_fields (class);
  mono_loader_unlock ();
}


mono_class_setup_fields (struct MonoClass * class)
{
  unsigned int D.25826;
  struct MonoClass * iftmp.60;
  struct MonoGenericClass * D.25828;
  unsigned char D.25832;
  unsigned char D.25833;
  struct MonoClass * D.25838;
  struct MonoImage * D.25839;
  unsigned char D.25840;
  unsigned char D.25841;
  unsigned char D.25844;
  unsigned char D.25845;
  unsigned int D.25848;
  unsigned char D.25851;
  unsigned char D.25854;
  struct MonoClass * D.25857;
  unsigned char D.25860;
  unsigned char D.25861;
  unsigned char D.25864;
  int D.25867;
  int D.25868;
  int D.25869;
  unsigned char D.25870;
  <unnamed-unsigned:1> D.25871;
  unsigned char D.25872;
  <unnamed-unsigned:1> D.25873;
  unsigned char D.25874;
  unsigned char D.25875;
  <unnamed-unsigned:1> D.25876;
  <unnamed-unsigned:1> D.25877;
  struct MonoImage * D.25879;
  unsigned int D.25880;
  unsigned int D.25881;
  unsigned int packing_size.61;
  unsigned int D.25885;
  const char * D.25888;
  unsigned char D.25889;
  <unnamed-unsigned:4> D.25890;
  unsigned int D.25891;
  unsigned int real_size.62;
  unsigned int real_size.63;
  unsigned int D.25900;
  int D.25901;
  unsigned char D.25902;
  <unnamed-unsigned:1> D.25903;
  struct MonoGenericContainer * D.25906;
  _Bool D.25912;
  long int D.25913;
  long int D.25914;
  unsigned int D.25917;
  unsigned int i.64;
  unsigned int D.25919;
  struct MonoClassField * D.25920;
  unsigned int i.65;
  unsigned int D.25922;
  struct MonoType * D.25923;
  int D.25926;
  char * D.25931;
  const char * D.25932;
  _Bool D.25933;
  long int D.25934;
  long int D.25935;
  short unsigned int D.25938;
  int D.25939;
  int D.25940;
  int D.21390;
  int iftmp.66;
  int D.21389;
  const char[9] * D.25946;
  unsigned char D.25947;
  int D.25948;
  unsigned char D.25949;
  int D.25950;
  _Bool D.25951;
  _Bool D.25952;
  _Bool D.25953;
  const unsigned char * D.25956;
  unsigned char D.25957;
  int D.25958;
  const unsigned char * D.25959;
  unsigned char D.25960;
  int D.25961;
  _Bool D.25962;
  _Bool D.25963;
  const unsigned char * D.25966;
  unsigned char D.25967;
  int D.25968;
  const unsigned char * D.25969;
  unsigned char D.25970;
  int D.25971;
  _Bool D.25972;
  _Bool D.25973;
  const unsigned char * D.25976;
  unsigned char D.25977;
  int D.25978;
  const unsigned char * D.25979;
  unsigned char D.25980;
  int D.25981;
  const char * D.25983;
  struct MonoClassField * D.25988;
  int D.25989;
  unsigned int idx.67;
  unsigned int offset.68;
  int offset.69;
  int D.25996;
  int D.25999;
  gchar * D.26002;
  gchar * D.26005;
  unsigned char D.26013;
  unsigned char D.26014;
  int D.26016;
  unsigned char D.26019;
  unsigned char D.26025;
  unsigned char D.26026;
  unsigned char D.26027;
  unsigned char D.26028;
  struct MonoClass * D.26033;
  struct MonoClass * D.26034;
  <unnamed-unsigned:1> D.26035;
  int D.26036;
  struct MonoClass * D.26039;
  struct MonoType * D.26044;
  unsigned char D.26051;
  unsigned char D.26054;
  unsigned int D.26057;
  unsigned int D.26058;
  struct MonoError error;
  struct MonoImage * m;
  int top;
  guint32 layout;
  int i;
  int blittable;
  guint32 real_size;
  guint32 packing_size;
  gboolean explicit_size;
  struct MonoClassField * field;
  struct MonoGenericContainer * container;
  struct MonoClass * gtd;

  try
    {
      m = class->image;
      D.25826 = class->flags;
      layout = D.25826 & 24;
      blittable = 1;
      real_size = 0;
      packing_size = 0;
      container = 0B;
      D.25828 = class->generic_class;
      if (D.25828 != 0B) goto <D.25829>; else goto <D.25830>;
      <D.25829>:
      iftmp.60 = mono_class_get_generic_type_definition (class);
      goto <D.25831>;
      <D.25830>:
      iftmp.60 = 0B;
      <D.25831>:
      gtd = iftmp.60;
      D.25832 = BIT_FIELD_REF <*class, 8, 192>;
      D.25833 = D.25832 & 64;
      if (D.25833 != 0) goto <D.25834>; else goto <D.25835>;
      <D.25834>:
      return;
      <D.25835>:
      D.25828 = class->generic_class;
      if (D.25828 != 0B) goto <D.25836>; else goto <D.25837>;
      <D.25836>:
      D.25828 = class->generic_class;
      D.25838 = D.25828->container_class;
      D.25839 = D.25838->image;
      D.25840 = BIT_FIELD_REF <*D.25839, 8, 128>;
      D.25841 = D.25840 & 8;
      if (D.25841 != 0) goto <D.25842>; else goto <D.25843>;
      <D.25842>:
      D.25828 = class->generic_class;
      D.25838 = D.25828->container_class;
      D.25844 = BIT_FIELD_REF <*D.25838, 8, 160>;
      D.25845 = D.25844 & 128;
      if (D.25845 == 0) goto <D.25846>; else goto <D.25847>;
      <D.25846>:
      return;
      <D.25847>:
      <D.25843>:
      <D.25837>:
      mono_class_setup_basic_field_info (class);
      D.25848 = class->field.count;
      top = (int) D.25848;
      if (gtd != 0B) goto <D.25849>; else goto <D.25850>;
      <D.25849>:
      mono_class_setup_fields (gtd);
      D.25851 = gtd->exception_type;
      if (D.25851 != 0) goto <D.25852>; else goto <D.25853>;
      <D.25852>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.25853>:
      <D.25850>:
      class->instance_size = 0;
      D.25854 = class->rank;
      if (D.25854 == 0) goto <D.25855>; else goto <D.25856>;
      <D.25855>:
      class->sizes.class_size = 0;
      <D.25856>:
      D.25857 = class->parent;
      if (D.25857 != 0B) goto <D.25858>; else goto <D.25859>;
      <D.25858>:
      D.25857 = class->parent;
      mono_class_init (D.25857);
      D.25857 = class->parent;
      D.25860 = BIT_FIELD_REF <*D.25857, 8, 160>;
      D.25861 = D.25860 & 4;
      if (D.25861 == 0) goto <D.25862>; else goto <D.25863>;
      <D.25862>:
      D.25857 = class->parent;
      mono_class_setup_fields (D.25857);
      D.25857 = class->parent;
      D.25864 = D.25857->exception_type;
      if (D.25864 != 0) goto <D.25865>; else goto <D.25866>;
      <D.25865>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.25866>:
      <D.25863>:
      D.25867 = class->instance_size;
      D.25857 = class->parent;
      D.25868 = D.25857->instance_size;
      D.25869 = D.25867 + D.25868;
      class->instance_size = D.25869;
      D.25857 = class->parent;
      D.25870 = D.25857->min_align;
      class->min_align = D.25870;
      D.25871 = class->has_references;
      D.25872 = (unsigned char) D.25871;
      D.25857 = class->parent;
      D.25873 = D.25857->has_references;
      D.25874 = (unsigned char) D.25873;
      D.25875 = D.25872 | D.25874;
      D.25876 = (<unnamed-unsigned:1>) D.25875;
      class->has_references = D.25876;
      D.25857 = class->parent;
      D.25877 = D.25857->blittable;
      blittable = (int) D.25877;
      goto <D.25878>;
      <D.25859>:
      class->instance_size = 8;
      class->min_align = 1;
      <D.25878>:
      D.25879 = class->image;
      D.25880 = class->type_token;
      D.25881 = mono_metadata_packing_from_typedef (D.25879, D.25880, &packing_size, &real_size);
      explicit_size = (gboolean) D.25881;
      if (explicit_size != 0) goto <D.25882>; else goto <D.25883>;
      <D.25882>:
      packing_size.61 = packing_size;
      D.25885 = packing_size.61 & 4294967280;
      if (D.25885 != 0) goto <D.25886>; else goto <D.25887>;
      <D.25886>:
      {
        char * err_msg;

        D.25888 = class->name;
        packing_size.61 = packing_size;
        err_msg = monoeg_g_strdup_printf ("Could not load struct \'%s\' with packing size %d >= 16", D.25888, packing_size.61);
        mono_class_set_failure (class, 7, err_msg);
        return;
      }
      <D.25887>:
      packing_size.61 = packing_size;
      D.25889 = (unsigned char) packing_size.61;
      D.25890 = (<unnamed-unsigned:4>) D.25889;
      class->packing_size = D.25890;
      D.25867 = class->instance_size;
      D.25891 = (unsigned int) D.25867;
      real_size.62 = real_size;
      real_size.63 = D.25891 + real_size.62;
      real_size = real_size.63;
      <D.25883>:
      if (top == 0) goto <D.25894>; else goto <D.25895>;
      <D.25894>:
      if (explicit_size != 0) goto <D.25896>; else goto <D.25897>;
      <D.25896>:
      real_size.62 = real_size;
      if (real_size.62 != 0) goto <D.25898>; else goto <D.25899>;
      <D.25898>:
      D.25867 = class->instance_size;
      D.25891 = (unsigned int) D.25867;
      real_size.62 = real_size;
      D.25900 = MAX_EXPR <D.25891, real_size.62>;
      D.25901 = (int) D.25900;
      class->instance_size = D.25901;
      <D.25899>:
      <D.25897>:
      D.25902 = (unsigned char) blittable;
      D.25903 = (<unnamed-unsigned:1>) D.25902;
      class->blittable = D.25903;
      mono_memory_barrier ();
      class->size_inited = 1;
      class->fields_inited = 1;
      class->setup_fields_called = 1;
      return;
      <D.25895>:
      if (layout == 0) goto <D.25904>; else goto <D.25905>;
      <D.25904>:
      blittable = 0;
      <D.25905>:
      class->setup_fields_called = 1;
      D.25906 = class->generic_container;
      if (D.25906 != 0B) goto <D.25907>; else goto <D.25908>;
      <D.25907>:
      container = class->generic_container;
      goto <D.25909>;
      <D.25908>:
      if (gtd != 0B) goto <D.25910>; else goto <D.25911>;
      <D.25910>:
      container = gtd->generic_container;
      D.25912 = container == 0B;
      D.25913 = (long int) D.25912;
      D.25914 = __builtin_expect (D.25913, 0);
      if (D.25914 != 0) goto <D.25915>; else goto <D.25916>;
      <D.25915>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1567, "container");
      <D.25916>:
      <D.25911>:
      <D.25909>:
      i = 0;
      goto <D.21399>;
      <D.21398>:
      {
        int idx;

        D.25917 = class->field.first;
        i.64 = (unsigned int) i;
        D.25919 = D.25917 + i.64;
        idx = (int) D.25919;
        D.25920 = class->fields;
        i.65 = (unsigned int) i;
        D.25922 = i.65 * 16;
        field = D.25920 + D.25922;
        field->parent = class;
        D.25923 = field->type;
        if (D.25923 == 0B) goto <D.25924>; else goto <D.25925>;
        <D.25924>:
        mono_field_resolve_type (field, &error);
        D.25926 = mono_error_ok (&error);
        if (D.25926 == 0) goto <D.25927>; else goto <D.25928>;
        <D.25927>:
        mono_error_cleanup (&error);
        return;
        <D.25928>:
        D.25923 = field->type;
        if (D.25923 == 0B) goto <D.25929>; else goto <D.25930>;
        <D.25929>:
        D.25931 = mono_type_get_full_name (class);
        D.25932 = field->name;
        monoeg_g_log (0B, 4, "could not resolve %s:%s\n", D.25931, D.25932);
        <D.21381>:
        goto <D.21381>;
        <D.25930>:
        D.25923 = field->type;
        D.25933 = D.25923 == 0B;
        D.25934 = (long int) D.25933;
        D.25935 = __builtin_expect (D.25934, 0);
        if (D.25935 != 0) goto <D.25936>; else goto <D.25937>;
        <D.25936>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1588, "field->type");
        <D.25937>:
        <D.25925>:
        D.25923 = field->type;
        D.25938 = D.25923->attrs;
        D.25939 = (int) D.25938;
        D.25940 = D.25939 & 1536;
        if (D.25940 != 0) goto <D.25941>; else goto <D.25942>;
        <D.25941>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 8;
          if (__s2_len <= 3) goto <D.25944>; else goto <D.25945>;
          <D.25944>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.25946 = "_Deleted";
            D.25947 = MEM[(const unsigned char *)D.25946];
            D.25948 = (int) D.25947;
            D.25949 = *__s2;
            D.25950 = (int) D.25949;
            __result = D.25948 - D.25950;
            {
              D.25951 = __s2_len != 0;
              D.25952 = __result == 0;
              D.25953 = D.25951 & D.25952;
              if (D.25953 != 0) goto <D.25954>; else goto <D.25955>;
              <D.25954>:
              D.25956 = &MEM[(void *)"_Deleted" + 1B];
              D.25957 = *D.25956;
              D.25958 = (int) D.25957;
              D.25959 = __s2 + 1;
              D.25960 = *D.25959;
              D.25961 = (int) D.25960;
              __result = D.25958 - D.25961;
              D.25962 = __s2_len > 1;
              D.25952 = __result == 0;
              D.25963 = D.25962 & D.25952;
              if (D.25963 != 0) goto <D.25964>; else goto <D.25965>;
              <D.25964>:
              D.25966 = &MEM[(void *)"_Deleted" + 2B];
              D.25967 = *D.25966;
              D.25968 = (int) D.25967;
              D.25969 = __s2 + 2;
              D.25970 = *D.25969;
              D.25971 = (int) D.25970;
              __result = D.25968 - D.25971;
              D.25972 = __s2_len > 2;
              D.25952 = __result == 0;
              D.25973 = D.25972 & D.25952;
              if (D.25973 != 0) goto <D.25974>; else goto <D.25975>;
              <D.25974>:
              D.25976 = &MEM[(void *)"_Deleted" + 3B];
              D.25977 = *D.25976;
              D.25978 = (int) D.25977;
              D.25979 = __s2 + 3;
              D.25980 = *D.25979;
              D.25981 = (int) D.25980;
              __result = D.25978 - D.25981;
              <D.25975>:
              <D.25965>:
              <D.25955>:
            }
            D.21389 = __result;
          }
          iftmp.66 = -D.21389;
          goto <D.25982>;
          <D.25945>:
          D.25983 = mono_field_get_name (field);
          iftmp.66 = __builtin_strcmp (D.25983, "_Deleted");
          <D.25982>:
          D.21390 = iftmp.66;
        }
        if (D.21390 == 0) goto <D.25984>; else goto <D.25985>;
        <D.25984>:
        // predicted unlikely by continue predictor.
        goto <D.21391>;
        <D.25985>:
        <D.25942>:
        if (gtd != 0B) goto <D.25986>; else goto <D.25987>;
        <D.25986>:
        {
          struct MonoClassField * gfield;

          D.25988 = gtd->fields;
          i.65 = (unsigned int) i;
          D.25922 = i.65 * 16;
          gfield = D.25988 + D.25922;
          D.25989 = gfield->offset;
          field->offset = D.25989;
        }
        goto <D.25990>;
        <D.25987>:
        if (layout == 16) goto <D.25991>; else goto <D.25992>;
        <D.25991>:
        {
          guint32 offset;

          try
            {
              idx.67 = (unsigned int) idx;
              mono_metadata_field_info (m, idx.67, &offset, 0B, 0B);
              offset.68 = offset;
              offset.69 = (int) offset.68;
              field->offset = offset.69;
              D.25996 = field->offset;
              if (D.25996 == -1) goto <D.25997>; else goto <D.25998>;
              <D.25997>:
              D.25923 = field->type;
              D.25938 = D.25923->attrs;
              D.25939 = (int) D.25938;
              D.25999 = D.25939 & 16;
              if (D.25999 == 0) goto <D.26000>; else goto <D.26001>;
              <D.26000>:
              D.25932 = field->name;
              D.26002 = monoeg_g_strdup_printf ("Missing field layout info for %s", D.25932);
              mono_class_set_failure (class, 7, D.26002);
              goto <D.21394>;
              <D.26001>:
              <D.25998>:
              D.25996 = field->offset;
              if (D.25996 < -1) goto <D.26003>; else goto <D.26004>;
              <D.26003>:
              D.25996 = field->offset;
              D.25932 = field->name;
              D.26005 = monoeg_g_strdup_printf ("Invalid negative field offset %d for %s", D.25996, D.25932);
              mono_class_set_failure (class, 7, D.26005);
              goto <D.21394>;
              <D.26004>:
            }
          finally
            {
              offset = {CLOBBER};
            }
        }
        <D.25992>:
        <D.25990>:
        if (blittable != 0) goto <D.26006>; else goto <D.26007>;
        <D.26006>:
        D.25923 = field->type;
        D.25938 = D.25923->attrs;
        D.25939 = (int) D.25938;
        D.25999 = D.25939 & 16;
        if (D.25999 == 0) goto <D.26008>; else goto <D.26009>;
        <D.26008>:
        D.25923 = field->type;
        D.26013 = BIT_FIELD_REF <*D.25923, 8, 56>;
        D.26014 = D.26013 & 64;
        if (D.26014 != 0) goto <D.26010>; else goto <D.26015>;
        <D.26015>:
        D.25923 = field->type;
        D.26016 = mono_type_is_reference (D.25923);
        if (D.26016 != 0) goto <D.26010>; else goto <D.26011>;
        <D.26010>:
        blittable = 0;
        goto <D.26012>;
        <D.26011>:
        {
          struct MonoClass * field_class;

          D.25923 = field->type;
          field_class = mono_class_from_mono_type (D.25923);
          if (field_class != 0B) goto <D.26017>; else goto <D.26018>;
          <D.26017>:
          mono_class_setup_fields (field_class);
          D.26019 = field_class->exception_type;
          if (D.26019 != 0) goto <D.26020>; else goto <D.26021>;
          <D.26020>:
          mono_class_set_failure (class, 7, 0B);
          goto <D.21394>;
          <D.26021>:
          <D.26018>:
          if (field_class == 0B) goto <D.26022>; else goto <D.26024>;
          <D.26024>:
          D.26025 = BIT_FIELD_REF <*field_class, 8, 160>;
          D.26026 = D.26025 & 32;
          if (D.26026 == 0) goto <D.26022>; else goto <D.26023>;
          <D.26022>:
          blittable = 0;
          <D.26023>:
        }
        <D.26012>:
        <D.26009>:
        <D.26007>:
        D.26027 = BIT_FIELD_REF <*class, 8, 160>;
        D.26028 = D.26027 & 16;
        if (D.26028 != 0) goto <D.26029>; else goto <D.26030>;
        <D.26029>:
        D.25923 = field->type;
        D.25938 = D.25923->attrs;
        D.25939 = (int) D.25938;
        D.25999 = D.25939 & 16;
        if (D.25999 == 0) goto <D.26031>; else goto <D.26032>;
        <D.26031>:
        D.25923 = field->type;
        D.26033 = mono_class_from_mono_type (D.25923);
        class->element_class = D.26033;
        D.26034 = class->element_class;
        class->cast_class = D.26034;
        D.26034 = class->element_class;
        D.26035 = D.26034->blittable;
        blittable = (int) D.26035;
        <D.26032>:
        <D.26030>:
        D.25923 = field->type;
        D.26036 = mono_type_has_exceptions (D.25923);
        if (D.26036 != 0) goto <D.26037>; else goto <D.26038>;
        <D.26037>:
        {
          char * class_name;
          char * type_name;

          class_name = mono_type_get_full_name (class);
          D.25923 = field->type;
          type_name = mono_type_full_name (D.25923);
          mono_class_set_failure (class, 7, 0B);
          D.25932 = field->name;
          monoeg_g_log (0B, 16, "Invalid type %s for instance field %s:%s", type_name, class_name, D.25932);
          monoeg_g_free (class_name);
          monoeg_g_free (type_name);
          goto <D.21394>;
        }
        <D.26038>:
      }
      <D.21391>:
      i = i + 1;
      <D.21399>:
      if (i < top) goto <D.21398>; else goto <D.21394>;
      <D.21394>:
      D.26039 = mono_defaults.string_class;
      if (D.26039 == class) goto <D.26040>; else goto <D.26041>;
      <D.26040>:
      blittable = 0;
      <D.26041>:
      D.25902 = (unsigned char) blittable;
      D.25903 = (<unnamed-unsigned:1>) D.25902;
      class->blittable = D.25903;
      D.26027 = BIT_FIELD_REF <*class, 8, 160>;
      D.26028 = D.26027 & 16;
      if (D.26028 != 0) goto <D.26042>; else goto <D.26043>;
      <D.26042>:
      D.26044 = mono_class_enum_basetype (class);
      if (D.26044 == 0B) goto <D.26045>; else goto <D.26046>;
      <D.26045>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.26046>:
      <D.26043>:
      if (explicit_size != 0) goto <D.26047>; else goto <D.26048>;
      <D.26047>:
      real_size.62 = real_size;
      if (real_size.62 != 0) goto <D.26049>; else goto <D.26050>;
      <D.26049>:
      D.25867 = class->instance_size;
      D.25891 = (unsigned int) D.25867;
      real_size.62 = real_size;
      D.25900 = MAX_EXPR <D.25891, real_size.62>;
      D.25901 = (int) D.25900;
      class->instance_size = D.25901;
      <D.26050>:
      <D.26048>:
      D.26051 = class->exception_type;
      if (D.26051 != 0) goto <D.26052>; else goto <D.26053>;
      <D.26052>:
      return;
      <D.26053>:
      mono_class_layout_fields (class);
      D.26027 = BIT_FIELD_REF <*class, 8, 160>;
      D.26054 = D.26027 & 8;
      if (D.26054 != 0) goto <D.26055>; else goto <D.26056>;
      <D.26055>:
      D.25867 = class->instance_size;
      D.26057 = (unsigned int) D.25867;
      D.26058 = D.26057 + 4294967295;
      if (D.26058 > 1048583) goto <D.26059>; else goto <D.26060>;
      <D.26059>:
      mono_class_set_failure (class, 7, 0B);
      <D.26060>:
      <D.26056>:
      mono_memory_barrier ();
      class->fields_inited = 1;
    }
  finally
    {
      error = {CLOBBER};
      real_size = {CLOBBER};
      packing_size = {CLOBBER};
    }
}


mono_class_setup_basic_field_info (struct MonoClass * class)
{
  struct MonoClassField * D.26066;
  struct MonoClass * iftmp.70;
  struct MonoGenericClass * D.26070;
  unsigned int D.26074;
  struct MonoClass * D.26077;
  struct MonoImage * D.26078;
  unsigned char D.26079;
  unsigned char D.26080;
  unsigned char D.26083;
  unsigned char D.26084;
  unsigned int D.26089;
  unsigned int D.26090;
  unsigned int top.71;
  unsigned int D.26092;
  int D.26093;
  void * D.26094;
  unsigned int i.72;
  unsigned int D.26096;
  struct MonoClassField * D.26099;
  struct MonoClassField * D.26100;
  const char * D.26101;
  unsigned int D.26103;
  unsigned int i.73;
  unsigned int D.26105;
  const char * D.26106;
  struct MonoClassField * field;
  struct MonoClass * gtd;
  struct MonoImage * image;
  int i;
  int top;

  D.26066 = class->fields;
  if (D.26066 != 0B) goto <D.26067>; else goto <D.26068>;
  <D.26067>:
  return;
  <D.26068>:
  D.26070 = class->generic_class;
  if (D.26070 != 0B) goto <D.26071>; else goto <D.26072>;
  <D.26071>:
  iftmp.70 = mono_class_get_generic_type_definition (class);
  goto <D.26073>;
  <D.26072>:
  iftmp.70 = 0B;
  <D.26073>:
  gtd = iftmp.70;
  image = class->image;
  D.26074 = class->field.count;
  top = (int) D.26074;
  D.26070 = class->generic_class;
  if (D.26070 != 0B) goto <D.26075>; else goto <D.26076>;
  <D.26075>:
  D.26070 = class->generic_class;
  D.26077 = D.26070->container_class;
  D.26078 = D.26077->image;
  D.26079 = BIT_FIELD_REF <*D.26078, 8, 128>;
  D.26080 = D.26079 & 8;
  if (D.26080 != 0) goto <D.26081>; else goto <D.26082>;
  <D.26081>:
  D.26070 = class->generic_class;
  D.26077 = D.26070->container_class;
  D.26083 = BIT_FIELD_REF <*D.26077, 8, 160>;
  D.26084 = D.26083 & 128;
  if (D.26084 == 0) goto <D.26085>; else goto <D.26086>;
  <D.26085>:
  return;
  <D.26086>:
  <D.26082>:
  <D.26076>:
  if (gtd != 0B) goto <D.26087>; else goto <D.26088>;
  <D.26087>:
  mono_class_setup_basic_field_info (gtd);
  D.26089 = gtd->field.count;
  top = (int) D.26089;
  D.26090 = gtd->field.first;
  class->field.first = D.26090;
  D.26089 = gtd->field.count;
  class->field.count = D.26089;
  <D.26088>:
  top.71 = (unsigned int) top;
  D.26092 = top.71 * 16;
  D.26093 = (int) D.26092;
  D.26094 = mono_class_alloc0 (class, D.26093);
  class->fields = D.26094;
  i = 0;
  goto <D.21362>;
  <D.21361>:
  D.26066 = class->fields;
  i.72 = (unsigned int) i;
  D.26096 = i.72 * 16;
  field = D.26066 + D.26096;
  field->parent = class;
  if (gtd != 0B) goto <D.26097>; else goto <D.26098>;
  <D.26097>:
  D.26099 = gtd->fields;
  i.72 = (unsigned int) i;
  D.26096 = i.72 * 16;
  D.26100 = D.26099 + D.26096;
  D.26101 = mono_field_get_name (D.26100);
  field->name = D.26101;
  goto <D.26102>;
  <D.26098>:
  {
    int idx;
    guint32 name_idx;

    D.26103 = class->field.first;
    i.73 = (unsigned int) i;
    D.26105 = D.26103 + i.73;
    idx = (int) D.26105;
    name_idx = mono_metadata_decode_table_row_col (image, 4, idx, 1);
    D.26106 = mono_metadata_string_heap (image, name_idx);
    field->name = D.26106;
  }
  <D.26102>:
  i = i + 1;
  <D.21362>:
  if (i < top) goto <D.21361>; else goto <D.21363>;
  <D.21363>:
}


mono_class_alloc0 (struct MonoClass * class, int size)
{
  unsigned int size.74;
  void * D.26109;
  void * res;

  res = mono_class_alloc (class, size);
  size.74 = (unsigned int) size;
  memset (res, 0, size.74);
  D.26109 = res;
  return D.26109;
}


mono_class_alloc (struct MonoClass * class, int size)
{
  struct MonoGenericClass * D.26111;
  void * D.26114;
  struct MonoImageSet * D.26115;
  unsigned int size.75;
  struct MonoImage * D.26117;

  D.26111 = class->generic_class;
  if (D.26111 != 0B) goto <D.26112>; else goto <D.26113>;
  <D.26112>:
  D.26111 = class->generic_class;
  D.26115 = D.26111->owner;
  size.75 = (unsigned int) size;
  D.26114 = mono_image_set_alloc (D.26115, size.75);
  return D.26114;
  <D.26113>:
  D.26117 = class->image;
  size.75 = (unsigned int) size;
  D.26114 = mono_image_alloc (D.26117, size.75);
  return D.26114;
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.26121;
  int D.26126;
  void * D.26128;
  unsigned int D.26129;

  D.26121 = __builtin_constant_p (__len);
  if (D.26121 != 0) goto <D.26122>; else goto <D.26123>;
  <D.26122>:
  if (__len == 0) goto <D.26124>; else goto <D.26125>;
  <D.26124>:
  D.26126 = __builtin_constant_p (__ch);
  if (D.26126 == 0) goto <D.26119>; else goto <D.26127>;
  <D.26127>:
  if (__ch != 0) goto <D.26119>; else goto <D.26120>;
  <D.26119>:
  __warn_memset_zero_len ();
  D.26128 = __dest;
  return D.26128;
  <D.26120>:
  <D.26125>:
  <D.26123>:
  D.26129 = __builtin_object_size (__dest, 0);
  D.26128 = __builtin___memset_chk (__dest, __ch, __len, D.26129);
  return D.26128;
}


mono_field_resolve_type (struct MonoClassField * field, struct MonoError * error)
{
  struct MonoClass * iftmp.76;
  struct MonoGenericClass * D.26132;
  int field.77;
  struct MonoClassField * D.26137;
  int D.26138;
  int D.26139;
  struct MonoClassField * D.26142;
  unsigned int field_idx.78;
  unsigned int D.26144;
  int D.26145;
  const char * D.26148;
  struct MonoGenericContext * D.26149;
  struct MonoType * D.26150;
  int D.26151;
  const char * D.26154;
  unsigned int D.26156;
  unsigned int field_idx.79;
  unsigned int D.26158;
  unsigned char D.26159;
  unsigned char D.26160;
  _Bool D.26161;
  long int D.26162;
  long int D.26163;
  struct MonoGenericContainer * D.26166;
  _Bool D.26172;
  long int D.26173;
  long int D.26174;
  unsigned int D.26177;
  int D.26178;
  const char * D.26181;
  const char * sig.80;
  const char * sig.81;
  char D.26184;
  _Bool D.26185;
  long int D.26186;
  long int D.26187;
  unsigned int D.26190;
  short int D.26191;
  const char * D.26192;
  struct MonoType * D.26193;
  struct MonoType * D.26194;
  gchar * D.26197;
  struct MonoClass * class;
  struct MonoImage * image;
  struct MonoClass * gtd;
  int field_idx;

  class = field->parent;
  image = class->image;
  D.26132 = class->generic_class;
  if (D.26132 != 0B) goto <D.26133>; else goto <D.26134>;
  <D.26133>:
  iftmp.76 = mono_class_get_generic_type_definition (class);
  goto <D.26135>;
  <D.26134>:
  iftmp.76 = 0B;
  <D.26135>:
  gtd = iftmp.76;
  field.77 = (int) field;
  D.26137 = class->fields;
  D.26138 = (int) D.26137;
  D.26139 = field.77 - D.26138;
  field_idx = D.26139 /[ex] 16;
  mono_error_init (error);
  if (gtd != 0B) goto <D.26140>; else goto <D.26141>;
  <D.26140>:
  {
    struct MonoClassField * gfield;
    struct MonoType * gtype;

    D.26142 = gtd->fields;
    field_idx.78 = (unsigned int) field_idx;
    D.26144 = field_idx.78 * 16;
    gfield = D.26142 + D.26144;
    gtype = mono_field_get_type_checked (gfield, error);
    D.26145 = mono_error_ok (error);
    if (D.26145 == 0) goto <D.26146>; else goto <D.26147>;
    <D.26146>:
    {
      char * err_msg;

      D.26148 = mono_error_get_message (error);
      err_msg = monoeg_g_strdup_printf ("Could not load field %d type due to: %s", field_idx, D.26148);
      mono_class_set_failure (class, 7, err_msg);
      monoeg_g_free (err_msg);
    }
    <D.26147>:
    D.26149 = mono_class_get_context (class);
    D.26150 = mono_class_inflate_generic_type_no_copy (image, gtype, D.26149, error);
    field->type = D.26150;
    D.26151 = mono_error_ok (error);
    if (D.26151 == 0) goto <D.26152>; else goto <D.26153>;
    <D.26152>:
    {
      char * err_msg;

      D.26154 = mono_error_get_message (error);
      err_msg = monoeg_g_strdup_printf ("Could not load field %d type due to: %s", field_idx, D.26154);
      mono_class_set_failure (class, 7, err_msg);
      monoeg_g_free (err_msg);
    }
    <D.26153>:
  }
  goto <D.26155>;
  <D.26141>:
  {
    const char * sig;
    guint32 cols[3];
    struct MonoGenericContainer * container;
    int idx;

    try
      {
        container = 0B;
        D.26156 = class->field.first;
        field_idx.79 = (unsigned int) field_idx;
        D.26158 = D.26156 + field_idx.79;
        idx = (int) D.26158;
        D.26159 = BIT_FIELD_REF <*image, 8, 128>;
        D.26160 = D.26159 & 8;
        D.26161 = D.26160 != 0;
        D.26162 = (long int) D.26161;
        D.26163 = __builtin_expect (D.26162, 0);
        if (D.26163 != 0) goto <D.26164>; else goto <D.26165>;
        <D.26164>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10119, "!image->dynamic");
        <D.26165>:
        D.26166 = class->generic_container;
        if (D.26166 != 0B) goto <D.26167>; else goto <D.26168>;
        <D.26167>:
        container = class->generic_container;
        goto <D.26169>;
        <D.26168>:
        if (gtd != 0B) goto <D.26170>; else goto <D.26171>;
        <D.26170>:
        container = gtd->generic_container;
        D.26172 = container == 0B;
        D.26173 = (long int) D.26172;
        D.26174 = __builtin_expect (D.26173, 0);
        if (D.26174 != 0) goto <D.26175>; else goto <D.26176>;
        <D.26175>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10125, "container");
        <D.26176>:
        <D.26171>:
        <D.26169>:
        mono_metadata_decode_table_row (image, 4, idx, &cols, 3);
        D.26177 = cols[2];
        D.26178 = mono_verifier_verify_field_signature (image, D.26177, 0B);
        if (D.26178 == 0) goto <D.26179>; else goto <D.26180>;
        <D.26179>:
        D.26181 = field->name;
        mono_error_set_type_load_class (error, class, "Could not verify field %s signature", D.26181);
        mono_class_set_failure (class, 7, 0B);
        return;
        <D.26180>:
        D.26177 = cols[2];
        sig.80 = mono_metadata_blob_heap (image, D.26177);
        sig = sig.80;
        sig.81 = sig;
        mono_metadata_decode_value (sig.81, &sig);
        sig.81 = sig;
        D.26184 = *sig.81;
        D.26185 = D.26184 != 6;
        D.26186 = (long int) D.26185;
        D.26187 = __builtin_expect (D.26186, 0);
        if (D.26187 != 0) goto <D.26188>; else goto <D.26189>;
        <D.26188>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10141, "*sig == 0x06");
        <D.26189>:
        D.26190 = cols[0];
        D.26191 = (short int) D.26190;
        sig.81 = sig;
        D.26192 = sig.81 + 1;
        D.26193 = mono_metadata_parse_type_full (image, container, 5, D.26191, D.26192, &sig);
        field->type = D.26193;
        D.26194 = field->type;
        if (D.26194 == 0B) goto <D.26195>; else goto <D.26196>;
        <D.26195>:
        D.26181 = field->name;
        D.26197 = monoeg_g_strdup_printf ("Could not load field %s type", D.26181);
        mono_class_set_failure_from_loader_error (class, error, D.26197);
        <D.26196>:
      }
    finally
      {
        sig = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.26155>:
}


mono_class_inflate_generic_type_no_copy (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.26203;
  struct MonoType * D.26206;
  long unsigned int D.26209;
  long unsigned int D.26210;
  struct MonoType * inflated;

  inflated = 0B;
  mono_error_init (error);
  if (context != 0B) goto <D.26201>; else goto <D.26202>;
  <D.26201>:
  inflated = inflate_generic_type (image, type, context, error);
  D.26203 = mono_error_ok (error);
  if (D.26203 == 0) goto <D.26204>; else goto <D.26205>;
  <D.26204>:
  D.26206 = 0B;
  return D.26206;
  <D.26205>:
  <D.26202>:
  if (inflated == 0B) goto <D.26207>; else goto <D.26208>;
  <D.26207>:
  D.26206 = type;
  return D.26206;
  <D.26208>:
  D.26209 = mono_stats.inflated_type_count;
  D.26210 = D.26209 + 1;
  mono_stats.inflated_type_count = D.26210;
  D.26206 = inflated;
  return D.26206;
}


mono_type_has_exceptions (struct MonoType * type)
{
  unsigned char D.26212;
  int D.26213;
  gboolean D.26214;
  struct MonoClass * D.26215;
  unsigned char D.26216;
  struct MonoArrayType * D.26217;
  struct MonoClass * D.26218;
  unsigned char D.26219;
  struct MonoGenericClass * D.26220;
  struct MonoClass * D.26221;
  unsigned char D.26222;

  D.26212 = type->type;
  D.26213 = (int) D.26212;
  switch (D.26213) <default: <D.26223>, case 17: <D.21338>, case 18: <D.21337>, case 20: <D.21340>, case 21: <D.21341>, case 29: <D.21339>>
  <D.21337>:
  <D.21338>:
  <D.21339>:
  D.26215 = type->data.klass;
  D.26216 = D.26215->exception_type;
  D.26214 = (gboolean) D.26216;
  return D.26214;
  <D.21340>:
  D.26217 = type->data.array;
  D.26218 = D.26217->eklass;
  D.26219 = D.26218->exception_type;
  D.26214 = (gboolean) D.26219;
  return D.26214;
  <D.21341>:
  D.26220 = type->data.generic_class;
  D.26221 = mono_generic_class_get_class (D.26220);
  D.26222 = D.26221->exception_type;
  D.26214 = (gboolean) D.26222;
  return D.26214;
  <D.26223>:
  D.26214 = 0;
  return D.26214;
}


mono_memory_barrier ()
{
  __sync_synchronize ();
}


mono_type_get_basic_type_from_generic (struct MonoType * type)
{
  unsigned char D.26225;
  unsigned char D.26226;
  unsigned char D.26229;
  _Bool D.26230;
  _Bool D.26231;
  _Bool D.26232;
  struct MonoType * D.26235;
  struct MonoClass * D.26236;

  D.26225 = BIT_FIELD_REF <*type, 8, 56>;
  D.26226 = D.26225 & 64;
  if (D.26226 == 0) goto <D.26227>; else goto <D.26228>;
  <D.26227>:
  D.26229 = type->type;
  D.26230 = D.26229 == 19;
  D.26231 = D.26229 == 30;
  D.26232 = D.26230 | D.26231;
  if (D.26232 != 0) goto <D.26233>; else goto <D.26234>;
  <D.26233>:
  D.26236 = mono_defaults.object_class;
  D.26235 = &D.26236->byval_arg;
  return D.26235;
  <D.26234>:
  <D.26228>:
  D.26235 = type;
  return D.26235;
}


mono_class_layout_fields (struct MonoClass * class)
{
  unsigned int D.26238;
  unsigned int D.26239;
  unsigned char D.26242;
  unsigned char D.26243;
  struct MonoClassField * D.26246;
  unsigned int i.82;
  unsigned int D.26248;
  struct MonoType * D.26249;
  short unsigned int D.26250;
  int D.26251;
  int D.26252;
  int D.26258;
  int D.26260;
  unsigned char D.26262;
  struct MonoImage * D.26264;
  struct MonoImage * D.26265;
  int D.26266;
  struct MonoClass * D.26268;
  int D.26269;
  int D.26275;
  int D.26277;
  unsigned char D.26279;
  int D.26281;
  struct MonoClass * D.26283;
  int D.26284;
  int D.26288;
  int D.26290;
  unsigned char D.26292;
  int D.26294;
  struct MonoClass * D.26296;
  int D.26297;
  struct MonoClass * D.26306;
  unsigned char D.26309;
  int D.26312;
  int D.26314;
  int D.21445;
  int iftmp.83;
  int D.21444;
  const char[9] * D.26320;
  unsigned char D.26321;
  int D.26322;
  unsigned char D.26323;
  int D.26324;
  _Bool D.26325;
  _Bool D.26326;
  _Bool D.26327;
  const unsigned char * D.26330;
  unsigned char D.26331;
  int D.26332;
  const unsigned char * D.26333;
  unsigned char D.26334;
  int D.26335;
  _Bool D.26336;
  _Bool D.26337;
  const unsigned char * D.26340;
  unsigned char D.26341;
  int D.26342;
  const unsigned char * D.26343;
  unsigned char D.26344;
  int D.26345;
  _Bool D.26346;
  _Bool D.26347;
  const unsigned char * D.26350;
  unsigned char D.26351;
  int D.26352;
  const unsigned char * D.26353;
  unsigned char D.26354;
  int D.26355;
  const char * D.26357;
  int D.26368;
  int D.26370;
  unsigned char D.26372;
  int D.26374;
  struct MonoClass * D.26376;
  int D.26377;
  int D.26384;
  int D.21455;
  int iftmp.84;
  int D.21454;
  const char[10] * D.26390;
  unsigned char D.26391;
  int D.26392;
  unsigned char D.26393;
  int D.26394;
  _Bool D.26395;
  _Bool D.26396;
  _Bool D.26397;
  const unsigned char * D.26400;
  unsigned char D.26401;
  int D.26402;
  const unsigned char * D.26403;
  unsigned char D.26404;
  int D.26405;
  _Bool D.26406;
  _Bool D.26407;
  const unsigned char * D.26410;
  unsigned char D.26411;
  int D.26412;
  const unsigned char * D.26413;
  unsigned char D.26414;
  int D.26415;
  _Bool D.26416;
  _Bool D.26417;
  const unsigned char * D.26420;
  unsigned char D.26421;
  int D.26422;
  const unsigned char * D.26423;
  unsigned char D.26424;
  int D.26425;
  const char * D.26427;
  int D.26430;
  int iftmp.85;
  unsigned char D.26432;
  unsigned char D.26433;
  <unnamed-unsigned:4> D.26436;
  int D.26437;
  int align.86;
  int D.26443;
  int D.26445;
  int D.26448;
  struct MonoClass * D.26450;
  int D.26451;
  unsigned int align.87;
  unsigned int D.26453;
  int align.88;
  unsigned char D.26455;
  int D.26456;
  int D.26457;
  unsigned char D.26458;
  int real_size.89;
  int D.26462;
  int D.26463;
  int D.26464;
  int D.26465;
  int D.26466;
  int iftmp.90;
  unsigned char D.26470;
  unsigned char D.26471;
  _Bool D.26474;
  long int D.26475;
  long int D.26476;
  unsigned int D.26479;
  unsigned int D.26480;
  unsigned int D.26481;
  int D.26482;
  int D.26483;
  int D.26484;
  int D.26487;
  int D.26488;
  int D.26489;
  int D.21475;
  int iftmp.91;
  int D.21474;
  unsigned char D.26495;
  int D.26496;
  _Bool D.26497;
  _Bool D.26498;
  _Bool D.26499;
  const unsigned char * D.26502;
  unsigned char D.26503;
  int D.26504;
  _Bool D.26505;
  _Bool D.26506;
  const unsigned char * D.26509;
  unsigned char D.26510;
  int D.26511;
  _Bool D.26512;
  _Bool D.26513;
  const unsigned char * D.26516;
  unsigned char D.26517;
  int D.26518;
  const char * D.26520;
  int D.26525;
  int iftmp.92;
  int align.93;
  int D.26531;
  unsigned char D.26532;
  unsigned int D.26533;
  unsigned int D.26534;
  int D.26535;
  int D.26538;
  int D.26540;
  struct MonoClass * D.26542;
  int D.26543;
  unsigned int D.26544;
  unsigned int D.26547;
  unsigned int D.26553;
  unsigned int D.26556;
  unsigned int D.26557;
  unsigned int D.26558;
  unsigned char D.26559;
  unsigned int D.26560;
  unsigned int D.26561;
  int D.21491;
  int iftmp.94;
  int D.21490;
  unsigned char D.26569;
  int D.26570;
  _Bool D.26571;
  _Bool D.26572;
  _Bool D.26573;
  const unsigned char * D.26576;
  unsigned char D.26577;
  int D.26578;
  _Bool D.26579;
  _Bool D.26580;
  const unsigned char * D.26583;
  unsigned char D.26584;
  int D.26585;
  _Bool D.26586;
  _Bool D.26587;
  const unsigned char * D.26590;
  unsigned char D.26591;
  int D.26592;
  const char * D.26594;
  int D.26597;
  int D.26600;
  int D.26601;
  int align.95;
  int D.26603;
  int D.26604;
  int D.26605;
  int D.26606;
  unsigned int D.26607;
  int D.26608;
  int i;
  const int top;
  guint32 layout;
  guint32 pass;
  guint32 passes;
  guint32 real_size;
  gboolean gc_aware_layout;
  struct MonoClassField * field;

  D.26238 = class->field.count;
  top = (const int) D.26238;
  D.26239 = class->flags;
  layout = D.26239 & 24;
  gc_aware_layout = 0;
  if (layout == 0) goto <D.26240>; else goto <D.26241>;
  <D.26240>:
  D.26242 = BIT_FIELD_REF <*class, 8, 160>;
  D.26243 = D.26242 & 8;
  if (D.26243 == 0) goto <D.26244>; else goto <D.26245>;
  <D.26244>:
  gc_aware_layout = 1;
  <D.26245>:
  <D.26241>:
  i = 0;
  goto <D.21422>;
  <D.21421>:
  {
    struct MonoType * ftype;

    D.26246 = class->fields;
    i.82 = (unsigned int) i;
    D.26248 = i.82 * 16;
    field = D.26246 + D.26248;
    D.26249 = field->type;
    D.26250 = D.26249->attrs;
    D.26251 = (int) D.26250;
    D.26252 = D.26251 & 16;
    if (D.26252 == 0) goto <D.26253>; else goto <D.26254>;
    <D.26253>:
    D.26249 = field->type;
    ftype = mono_type_get_underlying_type (D.26249);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.26258 = mono_type_is_reference (ftype);
    if (D.26258 != 0) goto <D.26255>; else goto <D.26259>;
    <D.26259>:
    D.26260 = mono_gc_is_moving ();
    if (D.26260 == 0) goto <D.26261>; else goto <D.26256>;
    <D.26261>:
    D.26262 = ftype->type;
    if (D.26262 == 25) goto <D.26263>; else goto <D.26256>;
    <D.26263>:
    D.26264 = class->image;
    D.26265 = mono_defaults.corlib;
    if (D.26264 == D.26265) goto <D.26255>; else goto <D.26256>;
    <D.26256>:
    D.26266 = mono_type_is_struct (ftype);
    if (D.26266 != 0) goto <D.26267>; else goto <D.26257>;
    <D.26267>:
    D.26268 = mono_class_from_mono_type (ftype);
    D.26269 = mono_class_has_references (D.26268);
    if (D.26269 != 0) goto <D.26255>; else goto <D.26257>;
    <D.26255>:
    class->has_references = 1;
    <D.26257>:
    <D.26254>:
  }
  i = i + 1;
  <D.21422>:
  if (i < top) goto <D.21421>; else goto <D.21423>;
  <D.21423>:
  i = 0;
  goto <D.21426>;
  <D.21425>:
  {
    struct MonoType * ftype;

    D.26246 = class->fields;
    i.82 = (unsigned int) i;
    D.26248 = i.82 * 16;
    field = D.26246 + D.26248;
    D.26249 = field->type;
    D.26250 = D.26249->attrs;
    D.26251 = (int) D.26250;
    D.26252 = D.26251 & 16;
    if (D.26252 != 0) goto <D.26270>; else goto <D.26271>;
    <D.26270>:
    D.26249 = field->type;
    ftype = mono_type_get_underlying_type (D.26249);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.26275 = mono_type_is_reference (ftype);
    if (D.26275 != 0) goto <D.26272>; else goto <D.26276>;
    <D.26276>:
    D.26277 = mono_gc_is_moving ();
    if (D.26277 == 0) goto <D.26278>; else goto <D.26273>;
    <D.26278>:
    D.26279 = ftype->type;
    if (D.26279 == 25) goto <D.26280>; else goto <D.26273>;
    <D.26280>:
    D.26264 = class->image;
    D.26265 = mono_defaults.corlib;
    if (D.26264 == D.26265) goto <D.26272>; else goto <D.26273>;
    <D.26273>:
    D.26281 = mono_type_is_struct (ftype);
    if (D.26281 != 0) goto <D.26282>; else goto <D.26274>;
    <D.26282>:
    D.26283 = mono_class_from_mono_type (ftype);
    D.26284 = mono_class_has_references (D.26283);
    if (D.26284 != 0) goto <D.26272>; else goto <D.26274>;
    <D.26272>:
    class->has_static_refs = 1;
    <D.26274>:
    <D.26271>:
  }
  i = i + 1;
  <D.21426>:
  if (i < top) goto <D.21425>; else goto <D.21427>;
  <D.21427>:
  i = 0;
  goto <D.21430>;
  <D.21429>:
  {
    struct MonoType * ftype;

    D.26246 = class->fields;
    i.82 = (unsigned int) i;
    D.26248 = i.82 * 16;
    field = D.26246 + D.26248;
    D.26249 = field->type;
    ftype = mono_type_get_underlying_type (D.26249);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.26288 = mono_type_is_reference (ftype);
    if (D.26288 != 0) goto <D.26285>; else goto <D.26289>;
    <D.26289>:
    D.26290 = mono_gc_is_moving ();
    if (D.26290 == 0) goto <D.26291>; else goto <D.26286>;
    <D.26291>:
    D.26292 = ftype->type;
    if (D.26292 == 25) goto <D.26293>; else goto <D.26286>;
    <D.26293>:
    D.26264 = class->image;
    D.26265 = mono_defaults.corlib;
    if (D.26264 == D.26265) goto <D.26285>; else goto <D.26286>;
    <D.26286>:
    D.26294 = mono_type_is_struct (ftype);
    if (D.26294 != 0) goto <D.26295>; else goto <D.26287>;
    <D.26295>:
    D.26296 = mono_class_from_mono_type (ftype);
    D.26297 = mono_class_has_references (D.26296);
    if (D.26297 != 0) goto <D.26285>; else goto <D.26287>;
    <D.26285>:
    D.26249 = field->type;
    D.26250 = D.26249->attrs;
    D.26251 = (int) D.26250;
    D.26252 = D.26251 & 16;
    if (D.26252 != 0) goto <D.26298>; else goto <D.26299>;
    <D.26298>:
    class->has_static_refs = 1;
    goto <D.26300>;
    <D.26299>:
    class->has_references = 1;
    <D.26300>:
    <D.26287>:
  }
  i = i + 1;
  <D.21430>:
  if (i < top) goto <D.21429>; else goto <D.21431>;
  <D.21431>:
  switch (layout) <default: <D.26550>, case 0: <D.21432>, case 8: <D.21433>, case 16: <D.21463>>
  <D.21432>:
  <D.21433>:
  if (gc_aware_layout != 0) goto <D.26301>; else goto <D.26302>;
  <D.26301>:
  passes = 2;
  goto <D.26303>;
  <D.26302>:
  passes = 1;
  <D.26303>:
  if (layout != 0) goto <D.26304>; else goto <D.26305>;
  <D.26304>:
  passes = 1;
  <D.26305>:
  D.26306 = class->parent;
  if (D.26306 != 0B) goto <D.26307>; else goto <D.26308>;
  <D.26307>:
  D.26306 = class->parent;
  mono_class_setup_fields (D.26306);
  D.26306 = class->parent;
  D.26309 = D.26306->exception_type;
  if (D.26309 != 0) goto <D.26310>; else goto <D.26311>;
  <D.26310>:
  mono_class_set_failure (class, 7, 0B);
  return;
  <D.26311>:
  D.26306 = class->parent;
  D.26312 = D.26306->instance_size;
  real_size = (guint32) D.26312;
  goto <D.26313>;
  <D.26308>:
  real_size = 8;
  <D.26313>:
  pass = 0;
  goto <D.21460>;
  <D.21459>:
  i = 0;
  goto <D.21457>;
  <D.21456>:
  {
    gint32 align;
    guint32 size;
    struct MonoType * ftype;

    try
      {
        D.26246 = class->fields;
        i.82 = (unsigned int) i;
        D.26248 = i.82 * 16;
        field = D.26246 + D.26248;
        D.26249 = field->type;
        D.26250 = D.26249->attrs;
        D.26251 = (int) D.26250;
        D.26314 = D.26251 & 1536;
        if (D.26314 != 0) goto <D.26315>; else goto <D.26316>;
        <D.26315>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 8;
          if (__s2_len <= 3) goto <D.26318>; else goto <D.26319>;
          <D.26318>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.26320 = "_Deleted";
            D.26321 = MEM[(const unsigned char *)D.26320];
            D.26322 = (int) D.26321;
            D.26323 = *__s2;
            D.26324 = (int) D.26323;
            __result = D.26322 - D.26324;
            {
              D.26325 = __s2_len != 0;
              D.26326 = __result == 0;
              D.26327 = D.26325 & D.26326;
              if (D.26327 != 0) goto <D.26328>; else goto <D.26329>;
              <D.26328>:
              D.26330 = &MEM[(void *)"_Deleted" + 1B];
              D.26331 = *D.26330;
              D.26332 = (int) D.26331;
              D.26333 = __s2 + 1;
              D.26334 = *D.26333;
              D.26335 = (int) D.26334;
              __result = D.26332 - D.26335;
              D.26336 = __s2_len > 1;
              D.26326 = __result == 0;
              D.26337 = D.26336 & D.26326;
              if (D.26337 != 0) goto <D.26338>; else goto <D.26339>;
              <D.26338>:
              D.26340 = &MEM[(void *)"_Deleted" + 2B];
              D.26341 = *D.26340;
              D.26342 = (int) D.26341;
              D.26343 = __s2 + 2;
              D.26344 = *D.26343;
              D.26345 = (int) D.26344;
              __result = D.26342 - D.26345;
              D.26346 = __s2_len > 2;
              D.26326 = __result == 0;
              D.26347 = D.26346 & D.26326;
              if (D.26347 != 0) goto <D.26348>; else goto <D.26349>;
              <D.26348>:
              D.26350 = &MEM[(void *)"_Deleted" + 3B];
              D.26351 = *D.26350;
              D.26352 = (int) D.26351;
              D.26353 = __s2 + 3;
              D.26354 = *D.26353;
              D.26355 = (int) D.26354;
              __result = D.26352 - D.26355;
              <D.26349>:
              <D.26339>:
              <D.26329>:
            }
            D.21444 = __result;
          }
          iftmp.83 = -D.21444;
          goto <D.26356>;
          <D.26319>:
          D.26357 = mono_field_get_name (field);
          iftmp.83 = __builtin_strcmp (D.26357, "_Deleted");
          <D.26356>:
          D.21445 = iftmp.83;
        }
        if (D.21445 == 0) goto <D.26358>; else goto <D.26359>;
        <D.26358>:
        // predicted unlikely by continue predictor.
        goto <D.21446>;
        <D.26359>:
        <D.26316>:
        D.26249 = field->type;
        D.26250 = D.26249->attrs;
        D.26251 = (int) D.26250;
        D.26252 = D.26251 & 16;
        if (D.26252 != 0) goto <D.26360>; else goto <D.26361>;
        <D.26360>:
        // predicted unlikely by continue predictor.
        goto <D.21446>;
        <D.26361>:
        D.26249 = field->type;
        ftype = mono_type_get_underlying_type (D.26249);
        ftype = mono_type_get_basic_type_from_generic (ftype);
        if (gc_aware_layout != 0) goto <D.26362>; else goto <D.26363>;
        <D.26362>:
        D.26368 = mono_type_is_reference (ftype);
        if (D.26368 != 0) goto <D.26364>; else goto <D.26369>;
        <D.26369>:
        D.26370 = mono_gc_is_moving ();
        if (D.26370 == 0) goto <D.26371>; else goto <D.26365>;
        <D.26371>:
        D.26372 = ftype->type;
        if (D.26372 == 25) goto <D.26373>; else goto <D.26365>;
        <D.26373>:
        D.26264 = class->image;
        D.26265 = mono_defaults.corlib;
        if (D.26264 == D.26265) goto <D.26364>; else goto <D.26365>;
        <D.26365>:
        D.26374 = mono_type_is_struct (ftype);
        if (D.26374 != 0) goto <D.26375>; else goto <D.26366>;
        <D.26375>:
        D.26376 = mono_class_from_mono_type (ftype);
        D.26377 = mono_class_has_references (D.26376);
        if (D.26377 != 0) goto <D.26364>; else goto <D.26366>;
        <D.26364>:
        if (pass == 1) goto <D.26378>; else goto <D.26379>;
        <D.26378>:
        // predicted unlikely by continue predictor.
        goto <D.21446>;
        <D.26379>:
        goto <D.26367>;
        <D.26366>:
        if (pass == 0) goto <D.26380>; else goto <D.26381>;
        <D.26380>:
        // predicted unlikely by continue predictor.
        goto <D.21446>;
        <D.26381>:
        <D.26367>:
        <D.26363>:
        if (top == 1) goto <D.26382>; else goto <D.26383>;
        <D.26382>:
        D.26384 = class->instance_size;
        if (D.26384 == 8) goto <D.26385>; else goto <D.26386>;
        <D.26385>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 9;
          if (__s2_len <= 3) goto <D.26388>; else goto <D.26389>;
          <D.26388>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.26390 = "$PRIVATE$";
            D.26391 = MEM[(const unsigned char *)D.26390];
            D.26392 = (int) D.26391;
            D.26393 = *__s2;
            D.26394 = (int) D.26393;
            __result = D.26392 - D.26394;
            {
              D.26395 = __s2_len != 0;
              D.26396 = __result == 0;
              D.26397 = D.26395 & D.26396;
              if (D.26397 != 0) goto <D.26398>; else goto <D.26399>;
              <D.26398>:
              D.26400 = &MEM[(void *)"$PRIVATE$" + 1B];
              D.26401 = *D.26400;
              D.26402 = (int) D.26401;
              D.26403 = __s2 + 1;
              D.26404 = *D.26403;
              D.26405 = (int) D.26404;
              __result = D.26402 - D.26405;
              D.26406 = __s2_len > 1;
              D.26396 = __result == 0;
              D.26407 = D.26406 & D.26396;
              if (D.26407 != 0) goto <D.26408>; else goto <D.26409>;
              <D.26408>:
              D.26410 = &MEM[(void *)"$PRIVATE$" + 2B];
              D.26411 = *D.26410;
              D.26412 = (int) D.26411;
              D.26413 = __s2 + 2;
              D.26414 = *D.26413;
              D.26415 = (int) D.26414;
              __result = D.26412 - D.26415;
              D.26416 = __s2_len > 2;
              D.26396 = __result == 0;
              D.26417 = D.26416 & D.26396;
              if (D.26417 != 0) goto <D.26418>; else goto <D.26419>;
              <D.26418>:
              D.26420 = &MEM[(void *)"$PRIVATE$" + 3B];
              D.26421 = *D.26420;
              D.26422 = (int) D.26421;
              D.26423 = __s2 + 3;
              D.26424 = *D.26423;
              D.26425 = (int) D.26424;
              __result = D.26422 - D.26425;
              <D.26419>:
              <D.26409>:
              <D.26399>:
            }
            D.21454 = __result;
          }
          iftmp.84 = -D.21454;
          goto <D.26426>;
          <D.26389>:
          D.26427 = mono_field_get_name (field);
          iftmp.84 = __builtin_strcmp (D.26427, "$PRIVATE$");
          <D.26426>:
          D.21455 = iftmp.84;
        }
        if (D.21455 == 0) goto <D.26428>; else goto <D.26429>;
        <D.26428>:
        // predicted unlikely by continue predictor.
        goto <D.21446>;
        <D.26429>:
        <D.26386>:
        <D.26383>:
        D.26249 = field->type;
        D.26430 = mono_type_size (D.26249, &align);
        size = (guint32) D.26430;
        D.26432 = BIT_FIELD_REF <*class, 8, 176>;
        D.26433 = D.26432 & 15;
        if (D.26433 != 0) goto <D.26434>; else goto <D.26435>;
        <D.26434>:
        D.26436 = class->packing_size;
        D.26437 = (int) D.26436;
        align.86 = align;
        iftmp.85 = MIN_EXPR <D.26437, align.86>;
        goto <D.26439>;
        <D.26435>:
        iftmp.85 = align;
        <D.26439>:
        align = iftmp.85;
        D.26443 = mono_type_is_reference (ftype);
        if (D.26443 != 0) goto <D.26440>; else goto <D.26444>;
        <D.26444>:
        D.26445 = mono_gc_is_moving ();
        if (D.26445 == 0) goto <D.26446>; else goto <D.26441>;
        <D.26446>:
        D.26372 = ftype->type;
        if (D.26372 == 25) goto <D.26447>; else goto <D.26441>;
        <D.26447>:
        D.26264 = class->image;
        D.26265 = mono_defaults.corlib;
        if (D.26264 == D.26265) goto <D.26440>; else goto <D.26441>;
        <D.26441>:
        D.26448 = mono_type_is_struct (ftype);
        if (D.26448 != 0) goto <D.26449>; else goto <D.26442>;
        <D.26449>:
        D.26450 = mono_class_from_mono_type (ftype);
        D.26451 = mono_class_has_references (D.26450);
        if (D.26451 != 0) goto <D.26440>; else goto <D.26442>;
        <D.26440>:
        align.86 = align;
        align.87 = (unsigned int) align.86;
        D.26453 = MAX_EXPR <align.87, 4>;
        align.88 = (int) D.26453;
        align = align.88;
        <D.26442>:
        D.26455 = class->min_align;
        D.26456 = (int) D.26455;
        align.86 = align;
        D.26457 = MAX_EXPR <D.26456, align.86>;
        D.26458 = (unsigned char) D.26457;
        class->min_align = D.26458;
        real_size.89 = (int) real_size;
        field->offset = real_size.89;
        align.86 = align;
        if (align.86 != 0) goto <D.26460>; else goto <D.26461>;
        <D.26460>:
        D.26462 = field->offset;
        align.86 = align;
        D.26463 = align.86 + -1;
        D.26464 = D.26462 + D.26463;
        field->offset = D.26464;
        D.26462 = field->offset;
        align.86 = align;
        D.26465 = -align.86;
        D.26466 = D.26462 & D.26465;
        field->offset = D.26466;
        <D.26461>:
        D.26264 = class->image;
        D.26470 = BIT_FIELD_REF <*D.26264, 8, 128>;
        D.26471 = D.26470 & 8;
        if (D.26471 == 0) goto <D.26472>; else goto <D.26468>;
        <D.26472>:
        D.26462 = field->offset;
        if (D.26462 <= 0) goto <D.26473>; else goto <D.26468>;
        <D.26473>:
        iftmp.90 = 1;
        goto <D.26469>;
        <D.26468>:
        iftmp.90 = 0;
        <D.26469>:
        D.26474 = iftmp.90 != 0;
        D.26475 = (long int) D.26474;
        D.26476 = __builtin_expect (D.26475, 0);
        if (D.26476 != 0) goto <D.26477>; else goto <D.26478>;
        <D.26477>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1894, "class->image->dynamic || field->offset > 0");
        <D.26478>:
        D.26462 = field->offset;
        D.26479 = (unsigned int) D.26462;
        real_size = D.26479 + size;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.21446>:
  i = i + 1;
  <D.21457>:
  if (i < top) goto <D.21456>; else goto <D.21458>;
  <D.21458>:
  D.26384 = class->instance_size;
  D.26480 = (unsigned int) D.26384;
  D.26481 = MAX_EXPR <D.26480, real_size>;
  D.26482 = (int) D.26481;
  class->instance_size = D.26482;
  D.26384 = class->instance_size;
  D.26455 = class->min_align;
  D.26456 = (int) D.26455;
  D.26483 = D.26456 + -1;
  D.26484 = D.26384 & D.26483;
  if (D.26484 != 0) goto <D.26485>; else goto <D.26486>;
  <D.26485>:
  D.26384 = class->instance_size;
  D.26455 = class->min_align;
  D.26456 = (int) D.26455;
  D.26483 = D.26456 + -1;
  D.26487 = D.26384 + D.26483;
  class->instance_size = D.26487;
  D.26384 = class->instance_size;
  D.26455 = class->min_align;
  D.26456 = (int) D.26455;
  D.26488 = -D.26456;
  D.26489 = D.26384 & D.26488;
  class->instance_size = D.26489;
  <D.26486>:
  pass = pass + 1;
  <D.21460>:
  if (pass < passes) goto <D.21459>; else goto <D.21461>;
  <D.21461>:
  goto <D.21462>;
  <D.21463>:
  real_size = 0;
  i = 0;
  goto <D.21478>;
  <D.21477>:
  {
    gint32 align;
    guint32 size;
    struct MonoType * ftype;

    try
      {
        D.26246 = class->fields;
        i.82 = (unsigned int) i;
        D.26248 = i.82 * 16;
        field = D.26246 + D.26248;
        D.26249 = field->type;
        D.26250 = D.26249->attrs;
        D.26251 = (int) D.26250;
        D.26314 = D.26251 & 1536;
        if (D.26314 != 0) goto <D.26490>; else goto <D.26491>;
        <D.26490>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 8;
          if (__s2_len <= 3) goto <D.26493>; else goto <D.26494>;
          <D.26493>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.26320 = "_Deleted";
            D.26321 = MEM[(const unsigned char *)D.26320];
            D.26322 = (int) D.26321;
            D.26495 = *__s2;
            D.26496 = (int) D.26495;
            __result = D.26322 - D.26496;
            {
              D.26497 = __s2_len != 0;
              D.26498 = __result == 0;
              D.26499 = D.26497 & D.26498;
              if (D.26499 != 0) goto <D.26500>; else goto <D.26501>;
              <D.26500>:
              D.26330 = &MEM[(void *)"_Deleted" + 1B];
              D.26331 = *D.26330;
              D.26332 = (int) D.26331;
              D.26502 = __s2 + 1;
              D.26503 = *D.26502;
              D.26504 = (int) D.26503;
              __result = D.26332 - D.26504;
              D.26505 = __s2_len > 1;
              D.26498 = __result == 0;
              D.26506 = D.26505 & D.26498;
              if (D.26506 != 0) goto <D.26507>; else goto <D.26508>;
              <D.26507>:
              D.26340 = &MEM[(void *)"_Deleted" + 2B];
              D.26341 = *D.26340;
              D.26342 = (int) D.26341;
              D.26509 = __s2 + 2;
              D.26510 = *D.26509;
              D.26511 = (int) D.26510;
              __result = D.26342 - D.26511;
              D.26512 = __s2_len > 2;
              D.26498 = __result == 0;
              D.26513 = D.26512 & D.26498;
              if (D.26513 != 0) goto <D.26514>; else goto <D.26515>;
              <D.26514>:
              D.26350 = &MEM[(void *)"_Deleted" + 3B];
              D.26351 = *D.26350;
              D.26352 = (int) D.26351;
              D.26516 = __s2 + 3;
              D.26517 = *D.26516;
              D.26518 = (int) D.26517;
              __result = D.26352 - D.26518;
              <D.26515>:
              <D.26508>:
              <D.26501>:
            }
            D.21474 = __result;
          }
          iftmp.91 = -D.21474;
          goto <D.26519>;
          <D.26494>:
          D.26520 = mono_field_get_name (field);
          iftmp.91 = __builtin_strcmp (D.26520, "_Deleted");
          <D.26519>:
          D.21475 = iftmp.91;
        }
        if (D.21475 == 0) goto <D.26521>; else goto <D.26522>;
        <D.26521>:
        // predicted unlikely by continue predictor.
        goto <D.21476>;
        <D.26522>:
        <D.26491>:
        D.26249 = field->type;
        D.26250 = D.26249->attrs;
        D.26251 = (int) D.26250;
        D.26252 = D.26251 & 16;
        if (D.26252 != 0) goto <D.26523>; else goto <D.26524>;
        <D.26523>:
        // predicted unlikely by continue predictor.
        goto <D.21476>;
        <D.26524>:
        D.26249 = field->type;
        D.26525 = mono_type_size (D.26249, &align);
        size = (guint32) D.26525;
        D.26432 = BIT_FIELD_REF <*class, 8, 176>;
        D.26433 = D.26432 & 15;
        if (D.26433 != 0) goto <D.26527>; else goto <D.26528>;
        <D.26527>:
        D.26436 = class->packing_size;
        D.26437 = (int) D.26436;
        align.93 = align;
        iftmp.92 = MIN_EXPR <D.26437, align.93>;
        goto <D.26530>;
        <D.26528>:
        iftmp.92 = align;
        <D.26530>:
        align = iftmp.92;
        D.26455 = class->min_align;
        D.26456 = (int) D.26455;
        align.93 = align;
        D.26531 = MAX_EXPR <D.26456, align.93>;
        D.26532 = (unsigned char) D.26531;
        class->min_align = D.26532;
        D.26462 = field->offset;
        D.26533 = (unsigned int) D.26462;
        D.26534 = D.26533 + 8;
        D.26535 = (int) D.26534;
        field->offset = D.26535;
        D.26249 = field->type;
        ftype = mono_type_get_underlying_type (D.26249);
        ftype = mono_type_get_basic_type_from_generic (ftype);
        D.26538 = mono_type_is_reference (ftype);
        if (D.26538 != 0) goto <D.26536>; else goto <D.26539>;
        <D.26539>:
        D.26540 = mono_type_is_struct (ftype);
        if (D.26540 != 0) goto <D.26541>; else goto <D.26537>;
        <D.26541>:
        D.26542 = mono_class_from_mono_type (ftype);
        D.26543 = mono_class_has_references (D.26542);
        if (D.26543 != 0) goto <D.26536>; else goto <D.26537>;
        <D.26536>:
        D.26462 = field->offset;
        D.26533 = (unsigned int) D.26462;
        D.26544 = D.26533 & 3;
        if (D.26544 != 0) goto <D.26545>; else goto <D.26546>;
        <D.26545>:
        mono_class_set_failure (class, 7, 0B);
        <D.26546>:
        <D.26537>:
        D.26462 = field->offset;
        D.26479 = (unsigned int) D.26462;
        D.26547 = D.26479 + size;
        real_size = MAX_EXPR <D.26547, real_size>;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.21476>:
  i = i + 1;
  <D.21478>:
  if (i < top) goto <D.21477>; else goto <D.21479>;
  <D.21479>:
  D.26384 = class->instance_size;
  D.26480 = (unsigned int) D.26384;
  D.26481 = MAX_EXPR <D.26480, real_size>;
  D.26482 = (int) D.26481;
  class->instance_size = D.26482;
  D.26384 = class->instance_size;
  D.26455 = class->min_align;
  D.26456 = (int) D.26455;
  D.26483 = D.26456 + -1;
  D.26484 = D.26384 & D.26483;
  if (D.26484 != 0) goto <D.26548>; else goto <D.26549>;
  <D.26548>:
  D.26384 = class->instance_size;
  D.26455 = class->min_align;
  D.26456 = (int) D.26455;
  D.26483 = D.26456 + -1;
  D.26487 = D.26384 + D.26483;
  class->instance_size = D.26487;
  D.26384 = class->instance_size;
  D.26455 = class->min_align;
  D.26456 = (int) D.26455;
  D.26488 = -D.26456;
  D.26489 = D.26384 & D.26488;
  class->instance_size = D.26489;
  <D.26549>:
  goto <D.21462>;
  <D.26550>:
  <D.21462>:
  if (layout != 16) goto <D.26551>; else goto <D.26552>;
  <D.26551>:
  D.26384 = class->instance_size;
  D.26553 = (unsigned int) D.26384;
  if (D.26553 <= 12) goto <D.26554>; else goto <D.26555>;
  <D.26554>:
  D.26384 = class->instance_size;
  D.26553 = (unsigned int) D.26384;
  D.26556 = D.26553 + 4294967288;
  D.26455 = class->min_align;
  D.26557 = (unsigned int) D.26455;
  D.26558 = MAX_EXPR <D.26556, D.26557>;
  D.26559 = (unsigned char) D.26558;
  class->min_align = D.26559;
  <D.26555>:
  <D.26552>:
  mono_memory_barrier ();
  class->size_inited = 1;
  i = 0;
  goto <D.21494>;
  <D.21493>:
  {
    gint32 align;
    guint32 size;

    try
      {
        D.26246 = class->fields;
        i.82 = (unsigned int) i;
        D.26248 = i.82 * 16;
        field = D.26246 + D.26248;
        D.26249 = field->type;
        D.26250 = D.26249->attrs;
        D.26560 = (unsigned int) D.26250;
        D.26561 = D.26560 & 80;
        if (D.26561 != 16) goto <D.26562>; else goto <D.26563>;
        <D.26562>:
        // predicted unlikely by continue predictor.
        goto <D.21482>;
        <D.26563>:
        D.26249 = field->type;
        D.26250 = D.26249->attrs;
        D.26251 = (int) D.26250;
        D.26314 = D.26251 & 1536;
        if (D.26314 != 0) goto <D.26564>; else goto <D.26565>;
        <D.26564>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 8;
          if (__s2_len <= 3) goto <D.26567>; else goto <D.26568>;
          <D.26567>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.26320 = "_Deleted";
            D.26321 = MEM[(const unsigned char *)D.26320];
            D.26322 = (int) D.26321;
            D.26569 = *__s2;
            D.26570 = (int) D.26569;
            __result = D.26322 - D.26570;
            {
              D.26571 = __s2_len != 0;
              D.26572 = __result == 0;
              D.26573 = D.26571 & D.26572;
              if (D.26573 != 0) goto <D.26574>; else goto <D.26575>;
              <D.26574>:
              D.26330 = &MEM[(void *)"_Deleted" + 1B];
              D.26331 = *D.26330;
              D.26332 = (int) D.26331;
              D.26576 = __s2 + 1;
              D.26577 = *D.26576;
              D.26578 = (int) D.26577;
              __result = D.26332 - D.26578;
              D.26579 = __s2_len > 1;
              D.26572 = __result == 0;
              D.26580 = D.26579 & D.26572;
              if (D.26580 != 0) goto <D.26581>; else goto <D.26582>;
              <D.26581>:
              D.26340 = &MEM[(void *)"_Deleted" + 2B];
              D.26341 = *D.26340;
              D.26342 = (int) D.26341;
              D.26583 = __s2 + 2;
              D.26584 = *D.26583;
              D.26585 = (int) D.26584;
              __result = D.26342 - D.26585;
              D.26586 = __s2_len > 2;
              D.26572 = __result == 0;
              D.26587 = D.26586 & D.26572;
              if (D.26587 != 0) goto <D.26588>; else goto <D.26589>;
              <D.26588>:
              D.26350 = &MEM[(void *)"_Deleted" + 3B];
              D.26351 = *D.26350;
              D.26352 = (int) D.26351;
              D.26590 = __s2 + 3;
              D.26591 = *D.26590;
              D.26592 = (int) D.26591;
              __result = D.26352 - D.26592;
              <D.26589>:
              <D.26582>:
              <D.26575>:
            }
            D.21490 = __result;
          }
          iftmp.94 = -D.21490;
          goto <D.26593>;
          <D.26568>:
          D.26594 = mono_field_get_name (field);
          iftmp.94 = __builtin_strcmp (D.26594, "_Deleted");
          <D.26593>:
          D.21491 = iftmp.94;
        }
        if (D.21491 == 0) goto <D.26595>; else goto <D.26596>;
        <D.26595>:
        // predicted unlikely by continue predictor.
        goto <D.21482>;
        <D.26596>:
        <D.26565>:
        D.26249 = field->type;
        D.26597 = mono_type_has_exceptions (D.26249);
        if (D.26597 != 0) goto <D.26598>; else goto <D.26599>;
        <D.26598>:
        mono_class_set_failure (class, 7, 0B);
        goto <D.21492>;
        <D.26599>:
        D.26249 = field->type;
        D.26600 = mono_type_size (D.26249, &align);
        size = (guint32) D.26600;
        D.26601 = class->sizes.class_size;
        field->offset = D.26601;
        D.26462 = field->offset;
        align.95 = align;
        D.26603 = align.95 + -1;
        D.26604 = D.26462 + D.26603;
        field->offset = D.26604;
        D.26462 = field->offset;
        align.95 = align;
        D.26605 = -align.95;
        D.26606 = D.26462 & D.26605;
        field->offset = D.26606;
        D.26462 = field->offset;
        D.26479 = (unsigned int) D.26462;
        D.26607 = D.26479 + size;
        D.26608 = (int) D.26607;
        class->sizes.class_size = D.26608;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.21482>:
  i = i + 1;
  <D.21494>:
  if (i < top) goto <D.21493>; else goto <D.21492>;
  <D.21492>:
}


mono_class_has_references (struct MonoClass * klass)
{
  unsigned char D.26617;
  unsigned char D.26618;
  gboolean D.26621;
  <unnamed-unsigned:1> D.26622;

  D.26617 = BIT_FIELD_REF <*klass, 8, 160>;
  D.26618 = D.26617 & 2;
  if (D.26618 != 0) goto <D.26619>; else goto <D.26620>;
  <D.26619>:
  D.26621 = 1;
  return D.26621;
  <D.26620>:
  mono_class_init (klass);
  D.26622 = klass->has_references;
  D.26621 = (gboolean) D.26622;
  return D.26621;
}


mono_class_setup_methods (struct MonoClass * class)
{
  struct MonoMethod * * D.26624;
  struct MonoGenericClass * D.26629;
  unsigned char D.26632;
  gchar * D.26637;
  unsigned int D.26638;
  unsigned int D.26639;
  unsigned int D.26640;
  unsigned int D.26641;
  int D.26642;
  unsigned int i.96;
  unsigned int D.26644;
  struct MonoMethod * * D.26645;
  struct MonoMethod * * D.26646;
  struct MonoMethod * * D.26647;
  struct MonoMethod * D.26648;
  struct MonoGenericContext * D.26649;
  struct MonoMethod * D.26650;
  int D.26651;
  const char * D.26654;
  gchar * D.26655;
  unsigned int i.97;
  unsigned char D.26658;
  guint32 iftmp.98;
  int D.26665;
  _Bool D.26666;
  long int D.26667;
  long int D.26668;
  short unsigned int D.26671;
  int D.26674;
  int D.26675;
  unsigned int D.26676;
  unsigned int D.26677;
  unsigned int D.26678;
  int D.26679;
  struct MonoImage * D.26680;
  unsigned int D.26681;
  struct MonoClass * D.26682;
  struct MonoType * D.26683;
  struct MonoClass * D.26684;
  struct MonoType * D.26685;
  int D.26686;
  int method_num.99;
  unsigned int method_num.100;
  unsigned int D.26689;
  struct MonoMethod * * D.26690;
  int D.26693;
  unsigned int D.26694;
  int method_num.101;
  unsigned int method_num.102;
  unsigned int D.26697;
  struct MonoMethod * * D.26698;
  struct MonoClass * D.26699;
  struct MonoType * D.26700;
  int method_num.103;
  unsigned int method_num.104;
  unsigned int D.26703;
  struct MonoMethod * * D.26704;
  struct MonoType * D.26705;
  int method_num.105;
  unsigned int method_num.106;
  unsigned int D.26708;
  struct MonoMethod * * D.26709;
  int D.26710;
  unsigned int D.26711;
  int method_num.107;
  unsigned int method_num.108;
  unsigned int D.26714;
  struct MonoMethod * * D.26715;
  struct MonoClass * * D.26716;
  struct MonoClass * * D.26717;
  struct MonoClass * D.26718;
  int D.26719;
  int D.26720;
  unsigned int D.26722;
  unsigned int D.26723;
  unsigned int D.26724;
  unsigned int D.26725;
  int D.26726;
  unsigned int D.26727;
  struct MonoMethod * D.26728;
  unsigned int D.26731;
  unsigned int D.26732;
  unsigned char D.26734;
  struct MonoMethod * D.26736;
  short unsigned int D.26737;
  int D.26738;
  int D.26739;
  int slot.109;
  short int D.26743;
  int i;
  struct MonoMethod * * methods;

  D.26624 = class->methods;
  if (D.26624 != 0B) goto <D.26625>; else goto <D.26626>;
  <D.26625>:
  return;
  <D.26626>:
  mono_loader_lock ();
  D.26624 = class->methods;
  if (D.26624 != 0B) goto <D.26627>; else goto <D.26628>;
  <D.26627>:
  mono_loader_unlock ();
  return;
  <D.26628>:
  D.26629 = class->generic_class;
  if (D.26629 != 0B) goto <D.26630>; else goto <D.26631>;
  <D.26630>:
  {
    struct MonoError error;
    struct MonoClass * gklass;

    try
      {
        D.26629 = class->generic_class;
        gklass = D.26629->container_class;
        mono_class_init (gklass);
        D.26632 = gklass->exception_type;
        if (D.26632 == 0) goto <D.26633>; else goto <D.26634>;
        <D.26633>:
        mono_class_setup_methods (gklass);
        <D.26634>:
        D.26632 = gklass->exception_type;
        if (D.26632 != 0) goto <D.26635>; else goto <D.26636>;
        <D.26635>:
        D.26637 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.26637);
        mono_loader_unlock ();
        return;
        <D.26636>:
        D.26638 = gklass->method.count;
        class->method.count = D.26638;
        D.26639 = class->method.count;
        D.26640 = D.26639 + 1;
        D.26641 = D.26640 * 4;
        D.26642 = (int) D.26641;
        methods = mono_class_alloc0 (class, D.26642);
        i = 0;
        goto <D.21510>;
        <D.21509>:
        i.96 = (unsigned int) i;
        D.26644 = i.96 * 4;
        D.26645 = methods + D.26644;
        D.26646 = gklass->methods;
        i.96 = (unsigned int) i;
        D.26644 = i.96 * 4;
        D.26647 = D.26646 + D.26644;
        D.26648 = *D.26647;
        D.26649 = mono_class_get_context (class);
        D.26650 = mono_class_inflate_generic_method_full_checked (D.26648, class, D.26649, &error);
        *D.26645 = D.26650;
        D.26651 = mono_error_ok (&error);
        if (D.26651 == 0) goto <D.26652>; else goto <D.26653>;
        <D.26652>:
        {
          char * method;

          D.26646 = gklass->methods;
          i.96 = (unsigned int) i;
          D.26644 = i.96 * 4;
          D.26647 = D.26646 + D.26644;
          D.26648 = *D.26647;
          method = mono_method_full_name (D.26648, 1);
          D.26654 = mono_error_get_message (&error);
          D.26655 = monoeg_g_strdup_printf ("Could not inflate method %s due to %s", method, D.26654);
          mono_class_set_failure (class, 7, D.26655);
          monoeg_g_free (method);
          mono_error_cleanup (&error);
          mono_loader_unlock ();
          return;
        }
        <D.26653>:
        i = i + 1;
        <D.21510>:
        i.97 = (unsigned int) i;
        D.26639 = class->method.count;
        if (i.97 < D.26639) goto <D.21509>; else goto <D.21511>;
        <D.21511>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  goto <D.26657>;
  <D.26631>:
  D.26658 = class->rank;
  if (D.26658 != 0) goto <D.26659>; else goto <D.26660>;
  <D.26659>:
  {
    struct MonoError error;
    struct MonoMethod * amethod;
    struct MonoMethodSignature * sig;
    int count_generic;
    int first_generic;
    int method_num;

    try
      {
        count_generic = 0;
        first_generic = 0;
        method_num = 0;
        D.26658 = class->rank;
        if (D.26658 > 1) goto <D.26662>; else goto <D.26663>;
        <D.26662>:
        iftmp.98 = 5;
        goto <D.26664>;
        <D.26663>:
        iftmp.98 = 4;
        <D.26664>:
        class->method.count = iftmp.98;
        mono_class_setup_interfaces (class, &error);
        D.26665 = mono_error_ok (&error);
        D.26666 = D.26665 == 0;
        D.26667 = (long int) D.26666;
        D.26668 = __builtin_expect (D.26667, 0);
        if (D.26668 != 0) goto <D.26669>; else goto <D.26670>;
        <D.26669>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2088, "mono_error_ok (&error)");
        <D.26670>:
        D.26671 = class->interface_count;
        if (D.26671 != 0) goto <D.26672>; else goto <D.26673>;
        <D.26672>:
        count_generic = generic_array_methods (class);
        D.26639 = class->method.count;
        first_generic = (int) D.26639;
        D.26639 = class->method.count;
        D.26671 = class->interface_count;
        D.26674 = (int) D.26671;
        D.26675 = D.26674 * count_generic;
        D.26676 = (unsigned int) D.26675;
        D.26677 = D.26639 + D.26676;
        class->method.count = D.26677;
        <D.26673>:
        D.26639 = class->method.count;
        D.26678 = D.26639 * 4;
        D.26679 = (int) D.26678;
        methods = mono_class_alloc0 (class, D.26679);
        D.26680 = class->image;
        D.26658 = class->rank;
        D.26681 = (unsigned int) D.26658;
        sig = mono_metadata_signature_alloc (D.26680, D.26681);
        D.26682 = mono_defaults.void_class;
        D.26683 = &D.26682->byval_arg;
        sig->ret = D.26683;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.21519>;
        <D.21518>:
        D.26684 = mono_defaults.int32_class;
        D.26685 = &D.26684->byval_arg;
        sig->params[i] = D.26685;
        i = i + 1;
        <D.21519>:
        D.26658 = class->rank;
        D.26686 = (int) D.26658;
        if (D.26686 > i) goto <D.21518>; else goto <D.21520>;
        <D.21520>:
        amethod = create_array_method (class, ".ctor", sig);
        method_num.99 = method_num;
        method_num = method_num.99 + 1;
        method_num.100 = (unsigned int) method_num.99;
        D.26689 = method_num.100 * 4;
        D.26690 = methods + D.26689;
        *D.26690 = amethod;
        D.26658 = class->rank;
        if (D.26658 > 1) goto <D.26691>; else goto <D.26692>;
        <D.26691>:
        D.26680 = class->image;
        D.26658 = class->rank;
        D.26686 = (int) D.26658;
        D.26693 = D.26686 * 2;
        D.26694 = (unsigned int) D.26693;
        sig = mono_metadata_signature_alloc (D.26680, D.26694);
        D.26682 = mono_defaults.void_class;
        D.26683 = &D.26682->byval_arg;
        sig->ret = D.26683;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.21522>;
        <D.21521>:
        D.26684 = mono_defaults.int32_class;
        D.26685 = &D.26684->byval_arg;
        sig->params[i] = D.26685;
        i = i + 1;
        <D.21522>:
        D.26658 = class->rank;
        D.26686 = (int) D.26658;
        D.26693 = D.26686 * 2;
        if (D.26693 > i) goto <D.21521>; else goto <D.21523>;
        <D.21523>:
        amethod = create_array_method (class, ".ctor", sig);
        method_num.101 = method_num;
        method_num = method_num.101 + 1;
        method_num.102 = (unsigned int) method_num.101;
        D.26697 = method_num.102 * 4;
        D.26698 = methods + D.26697;
        *D.26698 = amethod;
        <D.26692>:
        D.26680 = class->image;
        D.26658 = class->rank;
        D.26681 = (unsigned int) D.26658;
        sig = mono_metadata_signature_alloc (D.26680, D.26681);
        D.26699 = class->element_class;
        D.26700 = &D.26699->byval_arg;
        sig->ret = D.26700;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.21525>;
        <D.21524>:
        D.26684 = mono_defaults.int32_class;
        D.26685 = &D.26684->byval_arg;
        sig->params[i] = D.26685;
        i = i + 1;
        <D.21525>:
        D.26658 = class->rank;
        D.26686 = (int) D.26658;
        if (D.26686 > i) goto <D.21524>; else goto <D.21526>;
        <D.21526>:
        amethod = create_array_method (class, "Get", sig);
        method_num.103 = method_num;
        method_num = method_num.103 + 1;
        method_num.104 = (unsigned int) method_num.103;
        D.26703 = method_num.104 * 4;
        D.26704 = methods + D.26703;
        *D.26704 = amethod;
        D.26680 = class->image;
        D.26658 = class->rank;
        D.26681 = (unsigned int) D.26658;
        sig = mono_metadata_signature_alloc (D.26680, D.26681);
        D.26699 = class->element_class;
        D.26705 = &D.26699->this_arg;
        sig->ret = D.26705;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.21528>;
        <D.21527>:
        D.26684 = mono_defaults.int32_class;
        D.26685 = &D.26684->byval_arg;
        sig->params[i] = D.26685;
        i = i + 1;
        <D.21528>:
        D.26658 = class->rank;
        D.26686 = (int) D.26658;
        if (D.26686 > i) goto <D.21527>; else goto <D.21529>;
        <D.21529>:
        amethod = create_array_method (class, "Address", sig);
        method_num.105 = method_num;
        method_num = method_num.105 + 1;
        method_num.106 = (unsigned int) method_num.105;
        D.26708 = method_num.106 * 4;
        D.26709 = methods + D.26708;
        *D.26709 = amethod;
        D.26680 = class->image;
        D.26658 = class->rank;
        D.26686 = (int) D.26658;
        D.26710 = D.26686 + 1;
        D.26711 = (unsigned int) D.26710;
        sig = mono_metadata_signature_alloc (D.26680, D.26711);
        D.26682 = mono_defaults.void_class;
        D.26683 = &D.26682->byval_arg;
        sig->ret = D.26683;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.21531>;
        <D.21530>:
        D.26684 = mono_defaults.int32_class;
        D.26685 = &D.26684->byval_arg;
        sig->params[i] = D.26685;
        i = i + 1;
        <D.21531>:
        D.26658 = class->rank;
        D.26686 = (int) D.26658;
        if (D.26686 > i) goto <D.21530>; else goto <D.21532>;
        <D.21532>:
        D.26699 = class->element_class;
        D.26700 = &D.26699->byval_arg;
        sig->params[i] = D.26700;
        amethod = create_array_method (class, "Set", sig);
        method_num.107 = method_num;
        method_num = method_num.107 + 1;
        method_num.108 = (unsigned int) method_num.107;
        D.26714 = method_num.108 * 4;
        D.26715 = methods + D.26714;
        *D.26715 = amethod;
        i = 0;
        goto <D.21534>;
        <D.21533>:
        D.26716 = class->interfaces;
        i.96 = (unsigned int) i;
        D.26644 = i.96 * 4;
        D.26717 = D.26716 + D.26644;
        D.26718 = *D.26717;
        D.26719 = i * count_generic;
        D.26720 = D.26719 + first_generic;
        setup_generic_array_ifaces (class, D.26718, methods, D.26720);
        i = i + 1;
        <D.21534>:
        D.26671 = class->interface_count;
        D.26674 = (int) D.26671;
        if (D.26674 > i) goto <D.21533>; else goto <D.21535>;
        <D.21535>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  goto <D.26721>;
  <D.26660>:
  D.26639 = class->method.count;
  D.26678 = D.26639 * 4;
  D.26679 = (int) D.26678;
  methods = mono_class_alloc (class, D.26679);
  i = 0;
  goto <D.21538>;
  <D.21537>:
  {
    int idx;

    D.26680 = class->image;
    D.26722 = class->method.first;
    i.97 = (unsigned int) i;
    D.26723 = D.26722 + i.97;
    D.26724 = D.26723 + 1;
    D.26725 = mono_metadata_translate_token_index (D.26680, 6, D.26724);
    idx = (int) D.26725;
    i.96 = (unsigned int) i;
    D.26644 = i.96 * 4;
    D.26645 = methods + D.26644;
    D.26680 = class->image;
    D.26726 = idx | 100663296;
    D.26727 = (unsigned int) D.26726;
    D.26728 = mono_get_method (D.26680, D.26727, class);
    *D.26645 = D.26728;
  }
  i = i + 1;
  <D.21538>:
  i.97 = (unsigned int) i;
  D.26639 = class->method.count;
  if (i.97 < D.26639) goto <D.21537>; else goto <D.21539>;
  <D.21539>:
  <D.26721>:
  <D.26657>:
  D.26731 = class->flags;
  D.26732 = D.26731 & 32;
  if (D.26732 != 0) goto <D.26729>; else goto <D.26733>;
  <D.26733>:
  D.26734 = class->byval_arg.type;
  if (D.26734 == 19) goto <D.26729>; else goto <D.26735>;
  <D.26735>:
  D.26734 = class->byval_arg.type;
  if (D.26734 == 30) goto <D.26729>; else goto <D.26730>;
  <D.26729>:
  {
    int slot;

    slot = 0;
    i = 0;
    goto <D.21542>;
    <D.21541>:
    i.96 = (unsigned int) i;
    D.26644 = i.96 * 4;
    D.26645 = methods + D.26644;
    D.26736 = *D.26645;
    D.26737 = D.26736->flags;
    D.26738 = (int) D.26737;
    D.26739 = D.26738 & 64;
    if (D.26739 != 0) goto <D.26740>; else goto <D.26741>;
    <D.26740>:
    i.96 = (unsigned int) i;
    D.26644 = i.96 * 4;
    D.26645 = methods + D.26644;
    D.26736 = *D.26645;
    slot.109 = slot;
    slot = slot.109 + 1;
    D.26743 = (short int) slot.109;
    D.26736->slot = D.26743;
    <D.26741>:
    i = i + 1;
    <D.21542>:
    i.97 = (unsigned int) i;
    D.26639 = class->method.count;
    if (i.97 < D.26639) goto <D.21541>; else goto <D.21543>;
    <D.21543>:
  }
  <D.26730>:
  mono_memory_barrier ();
  class->methods = methods;
  mono_loader_unlock ();
}


generic_array_methods (struct MonoClass * class)
{
  int generic_array_method_num.110;
  int D.26750;
  struct MonoClass * D.26751;
  unsigned char D.26752;
  _Bool D.26753;
  long int D.26754;
  long int D.26755;
  struct MonoMethod * * D.26758;
  unsigned int i.111;
  unsigned int D.26760;
  struct MonoMethod * * D.26761;
  const char * D.26762;
  int D.26763;
  unsigned int i.112;
  unsigned int D.26767;
  struct MonoImage * D.26768;
  unsigned int count_generic.113;
  unsigned int D.26770;
  void * generic_array_method_info.114;
  struct GenericArrayMethodInfo * generic_array_method_info.115;
  unsigned int D.26773;
  struct GenericArrayMethodInfo * D.26774;
  const char * D.26775;
  int D.26776;
  int D.26780;
  unsigned int D.26784;
  int D.26785;
  unsigned int D.26788;
  unsigned int D.26790;
  int D.26791;
  unsigned int D.26794;
  int D.26796;
  unsigned int D.26800;
  unsigned int D.26801;
  unsigned int D.26802;
  unsigned int D.26803;
  unsigned int D.26804;
  gchar * D.26805;
  int i;
  int count_generic;
  struct GList * list;
  struct GList * tmp;

  count_generic = 0;
  list = 0B;
  generic_array_method_num.110 = generic_array_method_num;
  if (generic_array_method_num.110 != 0) goto <D.26748>; else goto <D.26749>;
  <D.26748>:
  D.26750 = generic_array_method_num;
  return D.26750;
  <D.26749>:
  D.26751 = class->parent;
  mono_class_setup_methods (D.26751);
  D.26751 = class->parent;
  D.26752 = D.26751->exception_type;
  D.26753 = D.26752 != 0;
  D.26754 = (long int) D.26753;
  D.26755 = __builtin_expect (D.26754, 0);
  if (D.26755 != 0) goto <D.26756>; else goto <D.26757>;
  <D.26756>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4760, "!class->parent->exception_type");
  <D.26757>:
  i = 0;
  goto <D.22376>;
  <D.22375>:
  {
    struct MonoMethod * m;

    D.26751 = class->parent;
    D.26758 = D.26751->methods;
    i.111 = (unsigned int) i;
    D.26760 = i.111 * 4;
    D.26761 = D.26758 + D.26760;
    m = *D.26761;
    D.26762 = m->name;
    D.26763 = strncmp (D.26762, "InternalArray__", 15);
    if (D.26763 == 0) goto <D.26764>; else goto <D.26765>;
    <D.26764>:
    count_generic = count_generic + 1;
    list = monoeg_g_list_prepend (list, m);
    <D.26765>:
  }
  i = i + 1;
  <D.22376>:
  i.112 = (unsigned int) i;
  D.26751 = class->parent;
  D.26767 = D.26751->method.count;
  if (i.112 < D.26767) goto <D.22375>; else goto <D.22377>;
  <D.22377>:
  list = monoeg_g_list_reverse (list);
  D.26768 = mono_defaults.corlib;
  count_generic.113 = (unsigned int) count_generic;
  D.26770 = count_generic.113 * 8;
  generic_array_method_info.114 = mono_image_alloc (D.26768, D.26770);
  generic_array_method_info = generic_array_method_info.114;
  i = 0;
  tmp = list;
  goto <D.22430>;
  <D.22429>:
  {
    const char * mname;
    const char * iname;
    gchar * name;
    struct MonoMethod * m;
    const char * ireadonlylist_prefix;
    const char * ireadonlycollection_prefix;

    m = tmp->data;
    ireadonlylist_prefix = "InternalArray__IReadOnlyList_";
    ireadonlycollection_prefix = "InternalArray__IReadOnlyCollection_";
    generic_array_method_info.115 = generic_array_method_info;
    i.111 = (unsigned int) i;
    D.26773 = i.111 * 8;
    D.26774 = generic_array_method_info.115 + D.26773;
    D.26774->array_method = m;
    D.26775 = m->name;
    D.26776 = strncmp (D.26775, "InternalArray__ICollection_", 27);
    if (D.26776 == 0) goto <D.26777>; else goto <D.26778>;
    <D.26777>:
    iname = "System.Collections.Generic.ICollection`1.";
    D.26775 = m->name;
    mname = D.26775 + 27;
    goto <D.26779>;
    <D.26778>:
    D.26775 = m->name;
    D.26780 = strncmp (D.26775, "InternalArray__IEnumerable_", 27);
    if (D.26780 == 0) goto <D.26781>; else goto <D.26782>;
    <D.26781>:
    iname = "System.Collections.Generic.IEnumerable`1.";
    D.26775 = m->name;
    mname = D.26775 + 27;
    goto <D.26783>;
    <D.26782>:
    D.26775 = m->name;
    D.26784 = strlen (ireadonlylist_prefix);
    D.26785 = strncmp (D.26775, ireadonlylist_prefix, D.26784);
    if (D.26785 == 0) goto <D.26786>; else goto <D.26787>;
    <D.26786>:
    iname = "System.Collections.Generic.IReadOnlyList`1.";
    D.26775 = m->name;
    D.26788 = strlen (ireadonlylist_prefix);
    mname = D.26775 + D.26788;
    goto <D.26789>;
    <D.26787>:
    D.26775 = m->name;
    D.26790 = strlen (ireadonlycollection_prefix);
    D.26791 = strncmp (D.26775, ireadonlycollection_prefix, D.26790);
    if (D.26791 == 0) goto <D.26792>; else goto <D.26793>;
    <D.26792>:
    iname = "System.Collections.Generic.IReadOnlyCollection`1.";
    D.26775 = m->name;
    D.26794 = strlen (ireadonlycollection_prefix);
    mname = D.26775 + D.26794;
    goto <D.26795>;
    <D.26793>:
    D.26775 = m->name;
    D.26796 = strncmp (D.26775, "InternalArray__", 15);
    if (D.26796 == 0) goto <D.26797>; else goto <D.26798>;
    <D.26797>:
    iname = "System.Collections.Generic.IList`1.";
    D.26775 = m->name;
    mname = D.26775 + 15;
    goto <D.26799>;
    <D.26798>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 4795);
    <D.26799>:
    <D.26795>:
    <D.26789>:
    <D.26783>:
    <D.26779>:
    D.26768 = mono_defaults.corlib;
    D.26800 = strlen (iname);
    D.26801 = strlen (mname);
    D.26802 = D.26800 + D.26801;
    D.26803 = D.26802 + 1;
    name = mono_image_alloc (D.26768, D.26803);
    strcpy (name, iname);
    D.26804 = strlen (iname);
    D.26805 = name + D.26804;
    strcpy (D.26805, mname);
    generic_array_method_info.115 = generic_array_method_info;
    i.111 = (unsigned int) i;
    D.26773 = i.111 * 8;
    D.26774 = generic_array_method_info.115 + D.26773;
    D.26774->name = name;
    i = i + 1;
  }
  tmp = tmp->next;
  <D.22430>:
  if (tmp != 0B) goto <D.22429>; else goto <D.22431>;
  <D.22431>:
  generic_array_method_num = count_generic;
  monoeg_g_list_free (list);
  D.26750 = generic_array_method_num;
  return D.26750;
}


strcpy (char * restrict __dest, const char * restrict __src)
{
  char * D.26807;
  unsigned int D.26808;

  D.26808 = __builtin_object_size (__dest, 1);
  D.26807 = __builtin___strcpy_chk (__dest, __src, D.26808);
  return D.26807;
}


create_array_method (struct MonoClass * class, const char * name, struct MonoMethodSignature * sig)
{
  struct MonoImage * D.26810;
  char D.26811;
  short unsigned int D.26814;
  short unsigned int D.26815;
  short unsigned int D.26817;
  short unsigned int D.26818;
  struct MonoMethod * D.26819;
  struct MonoMethod * method;

  D.26810 = class->image;
  method = mono_image_alloc0 (D.26810, 32);
  method->klass = class;
  method->flags = 6;
  method->iflags = 4096;
  method->signature = sig;
  method->name = name;
  method->slot = -1;
  D.26811 = *name;
  if (D.26811 == 46) goto <D.26812>; else goto <D.26813>;
  <D.26812>:
  D.26814 = method->flags;
  D.26815 = D.26814 | 6144;
  method->flags = D.26815;
  goto <D.26816>;
  <D.26813>:
  D.26817 = method->iflags;
  D.26818 = D.26817 | 3;
  method->iflags = D.26818;
  <D.26816>:
  D.26819 = method;
  return D.26819;
}


setup_generic_array_ifaces (struct MonoClass * class, struct MonoClass * iface, struct MonoMethod * * methods, int pos)
{
  struct MonoGenericClass * D.26821;
  struct MonoGenericInst * D.26822;
  struct GenericArrayMethodInfo * generic_array_method_info.116;
  unsigned int i.117;
  unsigned int D.26825;
  struct GenericArrayMethodInfo * D.26826;
  int pos.118;
  unsigned int pos.119;
  unsigned int D.26829;
  struct MonoMethod * * D.26830;
  char * D.26831;
  struct MonoMethod * D.26832;
  int generic_array_method_num.120;
  struct MonoGenericContext tmp_context;
  int i;

  try
    {
      tmp_context.class_inst = 0B;
      D.26821 = iface->generic_class;
      D.26822 = D.26821->context.class_inst;
      tmp_context.method_inst = D.26822;
      i = 0;
      goto <D.22443>;
      <D.22442>:
      {
        struct MonoMethod * m;
        struct MonoMethod * inflated;

        generic_array_method_info.116 = generic_array_method_info;
        i.117 = (unsigned int) i;
        D.26825 = i.117 * 8;
        D.26826 = generic_array_method_info.116 + D.26825;
        m = D.26826->array_method;
        inflated = mono_class_inflate_generic_method (m, &tmp_context);
        pos.118 = pos;
        pos = pos.118 + 1;
        pos.119 = (unsigned int) pos.118;
        D.26829 = pos.119 * 4;
        D.26830 = methods + D.26829;
        generic_array_method_info.116 = generic_array_method_info;
        i.117 = (unsigned int) i;
        D.26825 = i.117 * 8;
        D.26826 = generic_array_method_info.116 + D.26825;
        D.26831 = D.26826->name;
        D.26832 = mono_marshal_get_generic_array_helper (class, iface, D.26831, inflated);
        *D.26830 = D.26832;
      }
      i = i + 1;
      <D.22443>:
      generic_array_method_num.120 = generic_array_method_num;
      if (i < generic_array_method_num.120) goto <D.22442>; else goto <D.22444>;
      <D.22444>:
    }
  finally
    {
      tmp_context = {CLOBBER};
    }
}


mono_class_get_method_by_index (struct MonoClass * class, int index)
{
  struct MonoGenericClass * D.26835;
  struct MonoMethod * * D.26837;
  struct MonoMethod * * D.26839;
  unsigned int index.121;
  unsigned int D.26841;
  struct MonoMethod * * D.26842;
  struct MonoMethod * D.26843;
  struct MonoGenericContext * D.26844;
  struct MonoMethod * D.26845;
  unsigned char D.26846;
  int iftmp.122;
  unsigned int index.123;
  unsigned int D.26855;
  _Bool D.26856;
  long int D.26857;
  long int D.26858;
  struct MonoMethod * * D.26861;

  D.26835 = class->generic_class;
  if (D.26835 != 0B) goto <D.26836>; else goto <D.26834>;
  <D.26836>:
  D.26837 = class->methods;
  if (D.26837 == 0B) goto <D.26838>; else goto <D.26834>;
  <D.26838>:
  {
    struct MonoClass * gklass;
    struct MonoMethod * m;

    D.26835 = class->generic_class;
    gklass = D.26835->container_class;
    D.26839 = gklass->methods;
    index.121 = (unsigned int) index;
    D.26841 = index.121 * 4;
    D.26842 = D.26839 + D.26841;
    D.26843 = *D.26842;
    D.26844 = mono_class_get_context (class);
    m = mono_class_inflate_generic_method_full (D.26843, class, D.26844);
    D.26845 = m;
    return D.26845;
  }
  <D.26834>:
  mono_class_setup_methods (class);
  D.26846 = class->exception_type;
  if (D.26846 != 0) goto <D.26847>; else goto <D.26848>;
  <D.26847>:
  D.26845 = 0B;
  return D.26845;
  <D.26848>:
  if (index < 0) goto <D.26850>; else goto <D.26853>;
  <D.26853>:
  index.123 = (unsigned int) index;
  D.26855 = class->method.count;
  if (index.123 >= D.26855) goto <D.26850>; else goto <D.26851>;
  <D.26850>:
  iftmp.122 = 1;
  goto <D.26852>;
  <D.26851>:
  iftmp.122 = 0;
  <D.26852>:
  D.26856 = iftmp.122 != 0;
  D.26857 = (long int) D.26856;
  D.26858 = __builtin_expect (D.26857, 0);
  if (D.26858 != 0) goto <D.26859>; else goto <D.26860>;
  <D.26859>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2205, "index >= 0 && index < class->method.count");
  <D.26860>:
  D.26837 = class->methods;
  index.121 = (unsigned int) index;
  D.26841 = index.121 * 4;
  D.26861 = D.26837 + D.26841;
  D.26845 = *D.26861;
  return D.26845;
}


mono_class_get_inflated_method (struct MonoClass * class, struct MonoMethod * method)
{
  struct MonoGenericClass * D.26863;
  struct MonoClass * D.26864;
  _Bool D.26865;
  long int D.26866;
  long int D.26867;
  unsigned char D.26870;
  _Bool D.26871;
  long int D.26872;
  long int D.26873;
  struct MonoMethod * * D.26876;
  unsigned int i.124;
  unsigned int D.26878;
  struct MonoMethod * * D.26879;
  struct MonoMethod * D.26880;
  struct MonoMethod * * D.26883;
  struct MonoMethod * D.26886;
  struct MonoMethod * * D.26887;
  struct MonoGenericContext * D.26888;
  unsigned int i.125;
  unsigned int D.26890;
  struct MonoClass * gklass;
  int i;

  D.26863 = class->generic_class;
  gklass = D.26863->container_class;
  D.26864 = method->klass;
  D.26865 = D.26864 != gklass;
  D.26866 = (long int) D.26865;
  D.26867 = __builtin_expect (D.26866, 0);
  if (D.26867 != 0) goto <D.26868>; else goto <D.26869>;
  <D.26868>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2222, "method->klass == gklass");
  <D.26869>:
  mono_class_setup_methods (gklass);
  D.26870 = gklass->exception_type;
  D.26871 = D.26870 != 0;
  D.26872 = (long int) D.26871;
  D.26873 = __builtin_expect (D.26872, 0);
  if (D.26873 != 0) goto <D.26874>; else goto <D.26875>;
  <D.26874>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2225, "!gklass->exception_type");
  <D.26875>:
  i = 0;
  goto <D.21557>;
  <D.21556>:
  D.26876 = gklass->methods;
  i.124 = (unsigned int) i;
  D.26878 = i.124 * 4;
  D.26879 = D.26876 + D.26878;
  D.26880 = *D.26879;
  if (D.26880 == method) goto <D.26881>; else goto <D.26882>;
  <D.26881>:
  D.26883 = class->methods;
  if (D.26883 != 0B) goto <D.26884>; else goto <D.26885>;
  <D.26884>:
  D.26883 = class->methods;
  i.124 = (unsigned int) i;
  D.26878 = i.124 * 4;
  D.26887 = D.26883 + D.26878;
  D.26886 = *D.26887;
  return D.26886;
  <D.26885>:
  D.26876 = gklass->methods;
  i.124 = (unsigned int) i;
  D.26878 = i.124 * 4;
  D.26879 = D.26876 + D.26878;
  D.26880 = *D.26879;
  D.26888 = mono_class_get_context (class);
  D.26886 = mono_class_inflate_generic_method_full (D.26880, class, D.26888);
  return D.26886;
  <D.26882>:
  i = i + 1;
  <D.21557>:
  i.125 = (unsigned int) i;
  D.26890 = gklass->method.count;
  if (i.125 < D.26890) goto <D.21556>; else goto <D.21558>;
  <D.21558>:
  D.26886 = 0B;
  return D.26886;
}


mono_class_get_vtable_entry (struct MonoClass * class, int offset)
{
  unsigned char D.26892;
  struct MonoClass * D.26895;
  int D.26896;
  struct MonoMethod * D.26899;
  struct MonoMethod * * D.26900;
  unsigned int offset.126;
  unsigned int D.26902;
  struct MonoMethod * * D.26903;
  struct MonoGenericClass * D.26904;
  struct MonoMethod * * D.26907;
  struct MonoMethod * * D.26908;
  struct MonoGenericContext * D.26909;
  unsigned char D.26911;
  struct MonoMethod * * D.26914;
  struct MonoMethod * * D.26915;
  struct MonoMethod * m;

  D.26892 = class->rank;
  if (D.26892 == 1) goto <D.26893>; else goto <D.26894>;
  <D.26893>:
  D.26895 = class->parent;
  mono_class_setup_vtable (D.26895);
  D.26895 = class->parent;
  D.26896 = D.26895->vtable_size;
  if (D.26896 > offset) goto <D.26897>; else goto <D.26898>;
  <D.26897>:
  D.26895 = class->parent;
  D.26900 = D.26895->vtable;
  offset.126 = (unsigned int) offset;
  D.26902 = offset.126 * 4;
  D.26903 = D.26900 + D.26902;
  D.26899 = *D.26903;
  return D.26899;
  <D.26898>:
  <D.26894>:
  D.26904 = class->generic_class;
  if (D.26904 != 0B) goto <D.26905>; else goto <D.26906>;
  <D.26905>:
  {
    struct MonoClass * gklass;

    D.26904 = class->generic_class;
    gklass = D.26904->container_class;
    mono_class_setup_vtable (gklass);
    D.26907 = gklass->vtable;
    offset.126 = (unsigned int) offset;
    D.26902 = offset.126 * 4;
    D.26908 = D.26907 + D.26902;
    m = *D.26908;
    D.26909 = mono_class_get_context (class);
    m = mono_class_inflate_generic_method_full (m, class, D.26909);
  }
  goto <D.26910>;
  <D.26906>:
  mono_class_setup_vtable (class);
  D.26911 = class->exception_type;
  if (D.26911 != 0) goto <D.26912>; else goto <D.26913>;
  <D.26912>:
  D.26899 = 0B;
  return D.26899;
  <D.26913>:
  D.26914 = class->vtable;
  offset.126 = (unsigned int) offset;
  D.26902 = offset.126 * 4;
  D.26915 = D.26914 + D.26902;
  m = *D.26915;
  <D.26910>:
  D.26899 = m;
  return D.26899;
}


mono_class_get_vtable_size (struct MonoClass * klass)
{
  int D.26917;

  mono_class_setup_vtable (klass);
  D.26917 = klass->vtable_size;
  return D.26917;
}


mono_unload_interface_ids (struct MonoBitSet * bitset)
{
  struct MonoBitSet * global_interface_bitset.127;

  mono_loader_lock ();
  global_interface_bitset.127 = global_interface_bitset;
  mono_bitset_sub (global_interface_bitset.127, bitset);
  mono_loader_unlock ();
}


mono_unload_interface_id (struct MonoClass * class)
{
  struct MonoBitSet * global_interface_bitset.128;
  short unsigned int D.26923;
  unsigned int D.26926;

  global_interface_bitset.128 = global_interface_bitset;
  if (global_interface_bitset.128 != 0B) goto <D.26921>; else goto <D.26922>;
  <D.26921>:
  D.26923 = class->interface_id;
  if (D.26923 != 0) goto <D.26924>; else goto <D.26925>;
  <D.26924>:
  mono_loader_lock ();
  global_interface_bitset.128 = global_interface_bitset;
  D.26923 = class->interface_id;
  D.26926 = (unsigned int) D.26923;
  mono_bitset_clear (global_interface_bitset.128, D.26926);
  mono_loader_unlock ();
  <D.26925>:
  <D.26922>:
}


mono_class_get_implemented_interfaces (struct MonoClass * klass, struct MonoError * error)
{
  int D.26927;
  struct GPtrArray * res.129;
  struct GPtrArray * D.26933;
  struct GPtrArray * res;

  try
    {
      res = 0B;
      collect_implemented_interfaces_aux (klass, &res, error);
      D.26927 = mono_error_ok (error);
      if (D.26927 == 0) goto <D.26928>; else goto <D.26929>;
      <D.26928>:
      res.129 = res;
      if (res.129 != 0B) goto <D.26931>; else goto <D.26932>;
      <D.26931>:
      res.129 = res;
      monoeg_g_ptr_array_free (res.129, 1);
      <D.26932>:
      D.26933 = 0B;
      return D.26933;
      <D.26929>:
      D.26933 = res;
      return D.26933;
    }
  finally
    {
      res = {CLOBBER};
    }
}


collect_implemented_interfaces_aux (struct MonoClass * klass, struct GPtrArray * * res, struct MonoError * error)
{
  int D.26936;
  struct MonoClass * * D.26939;
  unsigned int i.130;
  unsigned int D.26941;
  struct MonoClass * * D.26942;
  struct GPtrArray * D.26943;
  struct GPtrArray * D.26946;
  unsigned char D.26947;
  int D.26950;
  short unsigned int D.26953;
  int D.26954;
  int i;
  struct MonoClass * ic;

  mono_class_setup_interfaces (klass, error);
  D.26936 = mono_error_ok (error);
  if (D.26936 == 0) goto <D.26937>; else goto <D.26938>;
  <D.26937>:
  return;
  <D.26938>:
  i = 0;
  goto <D.21673>;
  <D.21672>:
  D.26939 = klass->interfaces;
  i.130 = (unsigned int) i;
  D.26941 = i.130 * 4;
  D.26942 = D.26939 + D.26941;
  ic = *D.26942;
  D.26943 = *res;
  if (D.26943 == 0B) goto <D.26944>; else goto <D.26945>;
  <D.26944>:
  D.26946 = monoeg_g_ptr_array_new ();
  *res = D.26946;
  <D.26945>:
  D.26943 = *res;
  monoeg_g_ptr_array_add (D.26943, ic);
  mono_class_init (ic);
  D.26947 = ic->exception_type;
  if (D.26947 != 0) goto <D.26948>; else goto <D.26949>;
  <D.26948>:
  mono_error_set_type_load_class (error, ic, "Error Loading class");
  return;
  <D.26949>:
  collect_implemented_interfaces_aux (ic, res, error);
  D.26950 = mono_error_ok (error);
  if (D.26950 == 0) goto <D.26951>; else goto <D.26952>;
  <D.26951>:
  return;
  <D.26952>:
  i = i + 1;
  <D.21673>:
  D.26953 = klass->interface_count;
  D.26954 = (int) D.26953;
  if (D.26954 > i) goto <D.21672>; else goto <D.21674>;
  <D.21674>:
}


mono_class_interface_offset (struct MonoClass * klass, struct MonoClass * itf)
{
  struct MonoClass * * D.26956;
  short unsigned int D.26957;
  unsigned int D.26958;
  int D.26961;
  guint16 * D.26962;
  int result.131;
  int D.26964;
  int D.26965;
  int D.26966;
  unsigned int D.26967;
  unsigned int D.26968;
  guint16 * D.26969;
  short unsigned int D.26970;
  struct MonoClass * * result;

  D.26956 = klass->interfaces_packed;
  D.26957 = klass->interface_offsets_count;
  D.26958 = (unsigned int) D.26957;
  result = mono_binary_search (itf, D.26956, D.26958, 4, compare_interface_ids);
  if (result != 0B) goto <D.26959>; else goto <D.26960>;
  <D.26959>:
  D.26962 = klass->interface_offsets_packed;
  result.131 = (int) result;
  D.26956 = klass->interfaces_packed;
  D.26964 = (int) D.26956;
  D.26965 = result.131 - D.26964;
  D.26966 = D.26965 /[ex] 4;
  D.26967 = (unsigned int) D.26966;
  D.26968 = D.26967 * 2;
  D.26969 = D.26962 + D.26968;
  D.26970 = *D.26969;
  D.26961 = (int) D.26970;
  return D.26961;
  <D.26960>:
  D.26961 = -1;
  return D.26961;
}


compare_interface_ids (const void * p_key, const void * p_element)
{
  int D.26972;
  short unsigned int D.26973;
  int D.26974;
  short unsigned int D.26975;
  int D.26976;
  const struct MonoClass * key;
  const struct MonoClass * element;

  key = p_key;
  element = MEM[(struct MonoClass * *)p_element];
  D.26973 = key->interface_id;
  D.26974 = (int) D.26973;
  D.26975 = element->interface_id;
  D.26976 = (int) D.26975;
  D.26972 = D.26974 - D.26976;
  return D.26972;
}


mono_class_interface_offset_with_variance (struct MonoClass * klass, struct MonoClass * itf, gboolean * non_exact_match)
{
  int D.26980;
  int D.26981;
  struct MonoClass * * D.26984;
  unsigned int i.132;
  unsigned int D.26986;
  struct MonoClass * * D.26987;
  struct MonoClass * D.26988;
  int D.26989;
  guint16 * D.26992;
  unsigned int D.26993;
  guint16 * D.26994;
  short unsigned int D.26995;
  short unsigned int D.26996;
  int D.26997;
  int i;

  i = mono_class_interface_offset (klass, itf);
  *non_exact_match = 0;
  if (i >= 0) goto <D.26978>; else goto <D.26979>;
  <D.26978>:
  D.26980 = i;
  return D.26980;
  <D.26979>:
  D.26981 = mono_class_has_variant_generic_params (itf);
  if (D.26981 == 0) goto <D.26982>; else goto <D.26983>;
  <D.26982>:
  D.26980 = -1;
  return D.26980;
  <D.26983>:
  i = 0;
  goto <D.21698>;
  <D.21697>:
  D.26984 = klass->interfaces_packed;
  i.132 = (unsigned int) i;
  D.26986 = i.132 * 4;
  D.26987 = D.26984 + D.26986;
  D.26988 = *D.26987;
  D.26989 = mono_class_is_variant_compatible (itf, D.26988, 0);
  if (D.26989 != 0) goto <D.26990>; else goto <D.26991>;
  <D.26990>:
  *non_exact_match = 1;
  D.26992 = klass->interface_offsets_packed;
  i.132 = (unsigned int) i;
  D.26993 = i.132 * 2;
  D.26994 = D.26992 + D.26993;
  D.26995 = *D.26994;
  D.26980 = (int) D.26995;
  return D.26980;
  <D.26991>:
  i = i + 1;
  <D.21698>:
  D.26996 = klass->interface_offsets_count;
  D.26997 = (int) D.26996;
  if (D.26997 > i) goto <D.21697>; else goto <D.21699>;
  <D.21699>:
  D.26980 = -1;
  return D.26980;
}


mono_class_setup_interface_offsets (struct MonoClass * class)
{
  mono_loader_lock ();
  setup_interface_offsets (class, 0, 0);
  mono_loader_unlock ();
}


setup_interface_offsets (struct MonoClass * class, int cur_slot, gboolean overwrite)
{
  short unsigned int D.26999;
  unsigned int D.27000;
  unsigned int D.27001;
  struct MonoClass * * D.27002;
  unsigned int j.133;
  unsigned int D.27004;
  struct MonoClass * * D.27005;
  short unsigned int D.27006;
  int D.27007;
  struct MonoClass * * D.27008;
  unsigned int i.134;
  unsigned int D.27010;
  struct MonoClass * * D.27011;
  unsigned char D.27012;
  unsigned char D.27013;
  short unsigned int D.27016;
  int D.27017;
  int D.27020;
  const char * D.27023;
  gchar * D.27024;
  unsigned int D.27027;
  unsigned int num_ifaces.135;
  unsigned int D.27029;
  void * * D.27030;
  void * * D.27031;
  unsigned int i.136;
  struct GPtrArray * * D.27035;
  int D.27036;
  struct MonoClass * * D.27037;
  int num_array_interfaces.137;
  unsigned int D.27043;
  unsigned int D.27044;
  unsigned char D.27046;
  short unsigned int D.27048;
  int D.27049;
  short unsigned int D.27052;
  unsigned int num_ifaces.138;
  unsigned int D.27054;
  int * D.27055;
  _Bool D.27058;
  long int D.27059;
  long int D.27060;
  int D.27063;
  sizetype D.27064;
  sizetype D.27065;
  sizetype D.27066;
  struct MonoClass * * D.27067;
  struct MonoClass * D.27068;
  _Bool D.27069;
  long int D.27070;
  long int D.27071;
  struct GPtrArray * * D.27074;
  int D.27077;
  gchar * D.27082;
  int is_enumerator.139;
  struct MonoClass * * D.27092;
  unsigned int ienumerator_idx.140;
  unsigned int D.27094;
  struct MonoClass * * D.27095;
  struct MonoClass * D.27096;
  _Bool D.27097;
  long int D.27098;
  long int D.27099;
  int D.21914;
  int iftmp.141;
  int D.21913;
  const char[14] * D.27105;
  unsigned char D.27106;
  int D.27107;
  unsigned char D.27108;
  int D.27109;
  _Bool D.27110;
  _Bool D.27111;
  _Bool D.27112;
  const unsigned char * D.27115;
  unsigned char D.27116;
  int D.27117;
  const unsigned char * D.27118;
  unsigned char D.27119;
  int D.27120;
  _Bool D.27121;
  _Bool D.27122;
  const unsigned char * D.27125;
  unsigned char D.27126;
  int D.27127;
  const unsigned char * D.27128;
  unsigned char D.27129;
  int D.27130;
  _Bool D.27131;
  _Bool D.27132;
  const unsigned char * D.27135;
  unsigned char D.27136;
  int D.27137;
  const unsigned char * D.27138;
  unsigned char D.27139;
  int D.27140;
  const char * D.27142;
  unsigned int ilist_iface_idx.142;
  unsigned int D.27148;
  struct MonoClass * * D.27149;
  struct MonoClass * iftmp.143;
  unsigned int ireadonlylist_iface_idx.144;
  unsigned int D.27154;
  struct MonoClass * * D.27155;
  int iftmp.145;
  struct MonoClass * D.27161;
  struct MonoClass * * D.27162;
  unsigned int icollection_iface_idx.146;
  unsigned int D.27164;
  struct MonoClass * * D.27165;
  struct MonoClass * D.27166;
  unsigned int ienumerable_iface_idx.147;
  unsigned int D.27168;
  struct MonoClass * * D.27169;
  struct MonoClass * D.27170;
  int iftmp.148;
  struct MonoClass * D.27174;
  int iftmp.149;
  struct MonoClass * * D.27179;
  unsigned int ireadonlycollection_iface_idx.150;
  unsigned int D.27181;
  struct MonoClass * * D.27182;
  struct MonoClass * D.27183;
  int iftmp.151;
  _Bool D.27189;
  _Bool D.27190;
  _Bool D.27191;
  _Bool D.27193;
  long int D.27194;
  long int D.27195;
  struct MonoGenericClass * D.27198;
  struct MonoClass * D.27199;
  struct MonoClass * D.27200;
  int D.21939;
  int iftmp.152;
  int D.21938;
  const char[14] * D.27207;
  unsigned char D.27208;
  int D.27209;
  unsigned char D.27210;
  int D.27211;
  _Bool D.27212;
  _Bool D.27213;
  _Bool D.27214;
  const unsigned char * D.27217;
  unsigned char D.27218;
  int D.27219;
  const unsigned char * D.27220;
  unsigned char D.27221;
  int D.27222;
  _Bool D.27223;
  _Bool D.27224;
  const unsigned char * D.27227;
  unsigned char D.27228;
  int D.27229;
  const unsigned char * D.27230;
  unsigned char D.27231;
  int D.27232;
  _Bool D.27233;
  _Bool D.27234;
  const unsigned char * D.27237;
  unsigned char D.27238;
  int D.27239;
  const unsigned char * D.27240;
  unsigned char D.27241;
  int D.27242;
  int D.21948;
  int iftmp.153;
  int D.21947;
  const char[14] * D.27250;
  unsigned char D.27251;
  int D.27252;
  unsigned char D.27253;
  int D.27254;
  _Bool D.27255;
  _Bool D.27256;
  _Bool D.27257;
  const unsigned char * D.27260;
  unsigned char D.27261;
  int D.27262;
  const unsigned char * D.27263;
  unsigned char D.27264;
  int D.27265;
  _Bool D.27266;
  _Bool D.27267;
  const unsigned char * D.27270;
  unsigned char D.27271;
  int D.27272;
  const unsigned char * D.27273;
  unsigned char D.27274;
  int D.27275;
  _Bool D.27276;
  _Bool D.27277;
  const unsigned char * D.27280;
  unsigned char D.27281;
  int D.27282;
  const unsigned char * D.27283;
  unsigned char D.27284;
  int D.27285;
  int D.21957;
  int iftmp.154;
  int D.21956;
  const char[16] * D.27293;
  unsigned char D.27294;
  int D.27295;
  unsigned char D.27296;
  int D.27297;
  _Bool D.27298;
  _Bool D.27299;
  _Bool D.27300;
  const unsigned char * D.27303;
  unsigned char D.27304;
  int D.27305;
  const unsigned char * D.27306;
  unsigned char D.27307;
  int D.27308;
  _Bool D.27309;
  _Bool D.27310;
  const unsigned char * D.27313;
  unsigned char D.27314;
  int D.27315;
  const unsigned char * D.27316;
  unsigned char D.27317;
  int D.27318;
  _Bool D.27319;
  _Bool D.27320;
  const unsigned char * D.27323;
  unsigned char D.27324;
  int D.27325;
  const unsigned char * D.27326;
  unsigned char D.27327;
  int D.27328;
  int D.21966;
  int iftmp.155;
  int D.21965;
  const char[22] * D.27336;
  unsigned char D.27337;
  int D.27338;
  unsigned char D.27339;
  int D.27340;
  _Bool D.27341;
  _Bool D.27342;
  _Bool D.27343;
  const unsigned char * D.27346;
  unsigned char D.27347;
  int D.27348;
  const unsigned char * D.27349;
  unsigned char D.27350;
  int D.27351;
  _Bool D.27352;
  _Bool D.27353;
  const unsigned char * D.27356;
  unsigned char D.27357;
  int D.27358;
  const unsigned char * D.27359;
  unsigned char D.27360;
  int D.27361;
  _Bool D.27362;
  _Bool D.27363;
  const unsigned char * D.27366;
  unsigned char D.27367;
  int D.27368;
  const unsigned char * D.27369;
  unsigned char D.27370;
  int D.27371;
  int D.27376;
  struct MonoClass * * D.27381;
  short unsigned int D.27384;
  int D.27385;
  _Bool D.27386;
  long int D.27387;
  long int D.27388;
  short unsigned int D.27391;
  unsigned int interface_offsets_count.156;
  unsigned int D.27393;
  int D.27394;
  void * D.27395;
  unsigned int D.27396;
  int D.27397;
  void * D.27398;
  int D.27399;
  int D.27400;
  unsigned int D.27401;
  unsigned int iftmp.157;
  int D.27403;
  unsigned int D.27407;
  struct MonoClass * * D.27408;
  struct MonoClass * D.27409;
  short unsigned int D.27410;
  int D.27411;
  sizetype D.27412;
  uint8_t * D.27413;
  unsigned char D.27414;
  signed char D.27415;
  int D.27416;
  int D.27417;
  signed char D.27418;
  signed char D.27419;
  unsigned char D.27420;
  struct MonoClass * * D.27421;
  guint16 * D.27422;
  unsigned int D.27423;
  guint16 * D.27424;
  short unsigned int D.27425;
  struct GPtrArray * * D.27426;
  int D.27429;
  struct MonoError error;
  struct MonoClass * k;
  struct MonoClass * ic;
  int i;
  int j;
  int max_iid;
  int num_ifaces;
  struct MonoClass * * interfaces_full;
  int * interface_offsets_full;
  struct GPtrArray * ifaces;
  struct GPtrArray * * ifaces_array;
  int interface_offsets_count;
  struct MonoClass * * array_interfaces;
  int num_array_interfaces;
  int is_enumerator;
  void end = <<< error >>>;

  try
    {
      interfaces_full = 0B;
      interface_offsets_full = 0B;
      ifaces_array = 0B;
      array_interfaces = 0B;
      is_enumerator = 0;
      mono_class_setup_supertypes (class);
      array_interfaces = get_implicit_generic_array_interfaces (class, &num_array_interfaces, &is_enumerator);
      max_iid = 0;
      num_ifaces = num_array_interfaces;
      D.26999 = class->idepth;
      D.27000 = (unsigned int) D.26999;
      D.27001 = D.27000 * 4;
      ifaces_array = monoeg_malloc0 (D.27001);
      j = 0;
      goto <D.21883>;
      <D.21882>:
      D.27002 = class->supertypes;
      j.133 = (unsigned int) j;
      D.27004 = j.133 * 4;
      D.27005 = D.27002 + D.27004;
      k = *D.27005;
      D.27006 = k->interface_count;
      D.27007 = (int) D.27006;
      num_ifaces = D.27007 + num_ifaces;
      i = 0;
      goto <D.21875>;
      <D.21874>:
      D.27008 = k->interfaces;
      i.134 = (unsigned int) i;
      D.27010 = i.134 * 4;
      D.27011 = D.27008 + D.27010;
      ic = *D.27011;
      D.27012 = BIT_FIELD_REF <*ic, 8, 160>;
      D.27013 = D.27012 & 1;
      if (D.27013 == 0) goto <D.27014>; else goto <D.27015>;
      <D.27014>:
      mono_class_init (ic);
      <D.27015>:
      D.27016 = ic->interface_id;
      D.27017 = (int) D.27016;
      if (D.27017 > max_iid) goto <D.27018>; else goto <D.27019>;
      <D.27018>:
      D.27016 = ic->interface_id;
      max_iid = (int) D.27016;
      <D.27019>:
      i = i + 1;
      <D.21875>:
      D.27006 = k->interface_count;
      D.27007 = (int) D.27006;
      if (D.27007 > i) goto <D.21874>; else goto <D.21876>;
      <D.21876>:
      ifaces = mono_class_get_implemented_interfaces (k, &error);
      D.27020 = mono_error_ok (&error);
      if (D.27020 == 0) goto <D.27021>; else goto <D.27022>;
      <D.27021>:
      {
        char * name;

        name = mono_type_get_full_name (k);
        D.27023 = mono_error_get_message (&error);
        D.27024 = monoeg_g_strdup_printf ("Error getting the interfaces of %s due to %s", name, D.27023);
        mono_class_set_failure (class, 7, D.27024);
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        cur_slot = -1;
        goto end;
      }
      <D.27022>:
      if (ifaces != 0B) goto <D.27025>; else goto <D.27026>;
      <D.27025>:
      D.27027 = ifaces->len;
      num_ifaces.135 = (unsigned int) num_ifaces;
      D.27029 = D.27027 + num_ifaces.135;
      num_ifaces = (int) D.27029;
      i = 0;
      goto <D.21880>;
      <D.21879>:
      D.27030 = ifaces->pdata;
      i.134 = (unsigned int) i;
      D.27010 = i.134 * 4;
      D.27031 = D.27030 + D.27010;
      ic = *D.27031;
      D.27016 = ic->interface_id;
      D.27017 = (int) D.27016;
      if (D.27017 > max_iid) goto <D.27032>; else goto <D.27033>;
      <D.27032>:
      D.27016 = ic->interface_id;
      max_iid = (int) D.27016;
      <D.27033>:
      i = i + 1;
      <D.21880>:
      i.136 = (unsigned int) i;
      D.27027 = ifaces->len;
      if (i.136 < D.27027) goto <D.21879>; else goto <D.21881>;
      <D.21881>:
      j.133 = (unsigned int) j;
      D.27004 = j.133 * 4;
      D.27035 = ifaces_array + D.27004;
      *D.27035 = ifaces;
      <D.27026>:
      j = j + 1;
      <D.21883>:
      D.26999 = class->idepth;
      D.27036 = (int) D.26999;
      if (D.27036 > j) goto <D.21882>; else goto <D.21884>;
      <D.21884>:
      i = 0;
      goto <D.21886>;
      <D.21885>:
      i.134 = (unsigned int) i;
      D.27010 = i.134 * 4;
      D.27037 = array_interfaces + D.27010;
      ic = *D.27037;
      mono_class_init (ic);
      D.27016 = ic->interface_id;
      D.27017 = (int) D.27016;
      if (D.27017 > max_iid) goto <D.27038>; else goto <D.27039>;
      <D.27038>:
      D.27016 = ic->interface_id;
      max_iid = (int) D.27016;
      <D.27039>:
      i = i + 1;
      <D.21886>:
      num_array_interfaces.137 = num_array_interfaces;
      if (i < num_array_interfaces.137) goto <D.21885>; else goto <D.21887>;
      <D.21887>:
      D.27043 = class->flags;
      D.27044 = D.27043 & 32;
      if (D.27044 != 0) goto <D.27041>; else goto <D.27045>;
      <D.27045>:
      D.27046 = class->byval_arg.type;
      if (D.27046 == 19) goto <D.27041>; else goto <D.27047>;
      <D.27047>:
      D.27046 = class->byval_arg.type;
      if (D.27046 == 30) goto <D.27041>; else goto <D.27042>;
      <D.27041>:
      num_ifaces = num_ifaces + 1;
      D.27048 = class->interface_id;
      D.27049 = (int) D.27048;
      if (D.27049 > max_iid) goto <D.27050>; else goto <D.27051>;
      <D.27050>:
      D.27048 = class->interface_id;
      max_iid = (int) D.27048;
      <D.27051>:
      <D.27042>:
      D.27052 = (short unsigned int) max_iid;
      class->max_interface_id = D.27052;
      num_ifaces.138 = (unsigned int) num_ifaces;
      D.27054 = num_ifaces.138 * 4;
      interfaces_full = monoeg_malloc0 (D.27054);
      num_ifaces.138 = (unsigned int) num_ifaces;
      D.27054 = num_ifaces.138 * 4;
      interface_offsets_full = monoeg_malloc (D.27054);
      i = 0;
      goto <D.21889>;
      <D.21888>:
      i.134 = (unsigned int) i;
      D.27010 = i.134 * 4;
      D.27055 = interface_offsets_full + D.27010;
      *D.27055 = -1;
      i = i + 1;
      <D.21889>:
      if (i < num_ifaces) goto <D.21888>; else goto <D.21890>;
      <D.21890>:
      j = 0;
      goto <D.21896>;
      <D.21895>:
      D.27002 = class->supertypes;
      j.133 = (unsigned int) j;
      D.27004 = j.133 * 4;
      D.27005 = D.27002 + D.27004;
      k = *D.27005;
      j.133 = (unsigned int) j;
      D.27004 = j.133 * 4;
      D.27035 = ifaces_array + D.27004;
      ifaces = *D.27035;
      if (ifaces != 0B) goto <D.27056>; else goto <D.27057>;
      <D.27056>:
      i = 0;
      goto <D.21893>;
      <D.21892>:
      {
        int io;

        D.27030 = ifaces->pdata;
        i.134 = (unsigned int) i;
        D.27010 = i.134 * 4;
        D.27031 = D.27030 + D.27010;
        ic = *D.27031;
        io = mono_class_interface_offset (k, ic);
        D.27058 = io < 0;
        D.27059 = (long int) D.27058;
        D.27060 = __builtin_expect (D.27059, 0);
        if (D.27060 != 0) goto <D.27061>; else goto <D.27062>;
        <D.27061>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3372, "io >= 0");
        <D.27062>:
        set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, io, 1);
      }
      i = i + 1;
      <D.21893>:
      i.136 = (unsigned int) i;
      D.27027 = ifaces->len;
      if (i.136 < D.27027) goto <D.21892>; else goto <D.21894>;
      <D.21894>:
      <D.27057>:
      j = j + 1;
      <D.21896>:
      D.26999 = class->idepth;
      D.27036 = (int) D.26999;
      D.27063 = D.27036 + -1;
      if (D.27063 > j) goto <D.21895>; else goto <D.21897>;
      <D.21897>:
      D.27002 = class->supertypes;
      D.26999 = class->idepth;
      D.27064 = (sizetype) D.26999;
      D.27065 = D.27064 + 1073741823;
      D.27066 = D.27065 * 4;
      D.27067 = D.27002 + D.27066;
      D.27068 = *D.27067;
      D.27069 = D.27068 != class;
      D.27070 = (long int) D.27069;
      D.27071 = __builtin_expect (D.27070, 0);
      if (D.27071 != 0) goto <D.27072>; else goto <D.27073>;
      <D.27072>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3378, "class == class->supertypes [class->idepth - 1]");
      <D.27073>:
      D.26999 = class->idepth;
      D.27064 = (sizetype) D.26999;
      D.27065 = D.27064 + 1073741823;
      D.27066 = D.27065 * 4;
      D.27074 = ifaces_array + D.27066;
      ifaces = *D.27074;
      if (ifaces != 0B) goto <D.27075>; else goto <D.27076>;
      <D.27075>:
      i = 0;
      goto <D.21902>;
      <D.21901>:
      {
        int count;

        D.27030 = ifaces->pdata;
        i.134 = (unsigned int) i;
        D.27010 = i.134 * 4;
        D.27031 = D.27030 + D.27010;
        ic = *D.27031;
        D.27077 = set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, cur_slot, 0);
        if (D.27077 != 0) goto <D.27078>; else goto <D.27079>;
        <D.27078>:
        // predicted unlikely by continue predictor.
        goto <D.21899>;
        <D.27079>:
        count = count_virtual_methods (ic);
        if (count == -1) goto <D.27080>; else goto <D.27081>;
        <D.27080>:
        {
          char * name;

          name = mono_type_get_full_name (ic);
          D.27082 = monoeg_g_strdup_printf ("Error calculating interface offset of %s", name);
          mono_class_set_failure (class, 7, D.27082);
          monoeg_g_free (name);
          cur_slot = -1;
          goto end;
        }
        <D.27081>:
        cur_slot = cur_slot + count;
      }
      <D.21899>:
      i = i + 1;
      <D.21902>:
      i.136 = (unsigned int) i;
      D.27027 = ifaces->len;
      if (i.136 < D.27027) goto <D.21901>; else goto <D.21903>;
      <D.21903>:
      <D.27076>:
      D.27043 = class->flags;
      D.27044 = D.27043 & 32;
      if (D.27044 != 0) goto <D.27083>; else goto <D.27085>;
      <D.27085>:
      D.27046 = class->byval_arg.type;
      if (D.27046 == 19) goto <D.27083>; else goto <D.27086>;
      <D.27086>:
      D.27046 = class->byval_arg.type;
      if (D.27046 == 30) goto <D.27083>; else goto <D.27084>;
      <D.27083>:
      set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, class, cur_slot, 1);
      <D.27084>:
      num_array_interfaces.137 = num_array_interfaces;
      if (num_array_interfaces.137 != 0) goto <D.27087>; else goto <D.27088>;
      <D.27087>:
      is_enumerator.139 = is_enumerator;
      if (is_enumerator.139 != 0) goto <D.27090>; else goto <D.27091>;
      <D.27090>:
      {
        int ienumerator_idx;
        int ienumerator_offset;

        ienumerator_idx = find_array_interface (class, "IEnumerator`1");
        D.27092 = class->interfaces;
        ienumerator_idx.140 = (unsigned int) ienumerator_idx;
        D.27094 = ienumerator_idx.140 * 4;
        D.27095 = D.27092 + D.27094;
        D.27096 = *D.27095;
        ienumerator_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.27096);
        D.27097 = ienumerator_offset < 0;
        D.27098 = (long int) D.27097;
        D.27099 = __builtin_expect (D.27098, 0);
        if (D.27099 != 0) goto <D.27100>; else goto <D.27101>;
        <D.27100>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3405, "ienumerator_offset >= 0");
        <D.27101>:
        i = 0;
        goto <D.21916>;
        <D.21915>:
        i.134 = (unsigned int) i;
        D.27010 = i.134 * 4;
        D.27037 = array_interfaces + D.27010;
        ic = *D.27037;
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 13;
          if (__s2_len <= 3) goto <D.27103>; else goto <D.27104>;
          <D.27103>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = ic->name;
            D.27105 = "IEnumerator`1";
            D.27106 = MEM[(const unsigned char *)D.27105];
            D.27107 = (int) D.27106;
            D.27108 = *__s2;
            D.27109 = (int) D.27108;
            __result = D.27107 - D.27109;
            {
              D.27110 = __s2_len != 0;
              D.27111 = __result == 0;
              D.27112 = D.27110 & D.27111;
              if (D.27112 != 0) goto <D.27113>; else goto <D.27114>;
              <D.27113>:
              D.27115 = &MEM[(void *)"IEnumerator`1" + 1B];
              D.27116 = *D.27115;
              D.27117 = (int) D.27116;
              D.27118 = __s2 + 1;
              D.27119 = *D.27118;
              D.27120 = (int) D.27119;
              __result = D.27117 - D.27120;
              D.27121 = __s2_len > 1;
              D.27111 = __result == 0;
              D.27122 = D.27121 & D.27111;
              if (D.27122 != 0) goto <D.27123>; else goto <D.27124>;
              <D.27123>:
              D.27125 = &MEM[(void *)"IEnumerator`1" + 2B];
              D.27126 = *D.27125;
              D.27127 = (int) D.27126;
              D.27128 = __s2 + 2;
              D.27129 = *D.27128;
              D.27130 = (int) D.27129;
              __result = D.27127 - D.27130;
              D.27131 = __s2_len > 2;
              D.27111 = __result == 0;
              D.27132 = D.27131 & D.27111;
              if (D.27132 != 0) goto <D.27133>; else goto <D.27134>;
              <D.27133>:
              D.27135 = &MEM[(void *)"IEnumerator`1" + 3B];
              D.27136 = *D.27135;
              D.27137 = (int) D.27136;
              D.27138 = __s2 + 3;
              D.27139 = *D.27138;
              D.27140 = (int) D.27139;
              __result = D.27137 - D.27140;
              <D.27134>:
              <D.27124>:
              <D.27114>:
            }
            D.21913 = __result;
          }
          iftmp.141 = -D.21913;
          goto <D.27141>;
          <D.27104>:
          D.27142 = ic->name;
          iftmp.141 = __builtin_strcmp (D.27142, "IEnumerator`1");
          <D.27141>:
          D.21914 = iftmp.141;
        }
        if (D.21914 == 0) goto <D.27143>; else goto <D.27144>;
        <D.27143>:
        set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, ienumerator_offset, 1);
        goto <D.27145>;
        <D.27144>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 3411);
        <D.27145>:
        i = i + 1;
        <D.21916>:
        num_array_interfaces.137 = num_array_interfaces;
        if (i < num_array_interfaces.137) goto <D.21915>; else goto <D.21917>;
        <D.21917>:
      }
      goto <D.27146>;
      <D.27091>:
      {
        int ilist_offset;
        int icollection_offset;
        int ienumerable_offset;
        int ireadonlylist_offset;
        int ireadonlycollection_offset;
        int ilist_iface_idx;
        struct MonoClass * ilist_class;
        int ireadonlylist_iface_idx;
        struct MonoClass * ireadonlylist_class;
        int icollection_iface_idx;
        int ienumerable_iface_idx;
        int ireadonlycollection_iface_idx;

        ilist_iface_idx = find_array_interface (class, "IList`1");
        D.27092 = class->interfaces;
        ilist_iface_idx.142 = (unsigned int) ilist_iface_idx;
        D.27148 = ilist_iface_idx.142 * 4;
        D.27149 = D.27092 + D.27148;
        ilist_class = *D.27149;
        ireadonlylist_iface_idx = find_array_interface (class, "IReadOnlyList`1");
        if (ireadonlylist_iface_idx != -1) goto <D.27151>; else goto <D.27152>;
        <D.27151>:
        D.27092 = class->interfaces;
        ireadonlylist_iface_idx.144 = (unsigned int) ireadonlylist_iface_idx;
        D.27154 = ireadonlylist_iface_idx.144 * 4;
        D.27155 = D.27092 + D.27154;
        iftmp.143 = *D.27155;
        goto <D.27156>;
        <D.27152>:
        iftmp.143 = 0B;
        <D.27156>:
        ireadonlylist_class = iftmp.143;
        icollection_iface_idx = find_array_interface (ilist_class, "ICollection`1");
        ienumerable_iface_idx = find_array_interface (ilist_class, "IEnumerable`1");
        if (ireadonlylist_iface_idx != -1) goto <D.27158>; else goto <D.27159>;
        <D.27158>:
        iftmp.145 = find_array_interface (ireadonlylist_class, "IReadOnlyCollection`1");
        goto <D.27160>;
        <D.27159>:
        iftmp.145 = -1;
        <D.27160>:
        ireadonlycollection_iface_idx = iftmp.145;
        D.27092 = class->interfaces;
        ilist_iface_idx.142 = (unsigned int) ilist_iface_idx;
        D.27148 = ilist_iface_idx.142 * 4;
        D.27149 = D.27092 + D.27148;
        D.27161 = *D.27149;
        ilist_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.27161);
        D.27162 = ilist_class->interfaces;
        icollection_iface_idx.146 = (unsigned int) icollection_iface_idx;
        D.27164 = icollection_iface_idx.146 * 4;
        D.27165 = D.27162 + D.27164;
        D.27166 = *D.27165;
        icollection_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.27166);
        D.27162 = ilist_class->interfaces;
        ienumerable_iface_idx.147 = (unsigned int) ienumerable_iface_idx;
        D.27168 = ienumerable_iface_idx.147 * 4;
        D.27169 = D.27162 + D.27168;
        D.27170 = *D.27169;
        ienumerable_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.27170);
        if (ireadonlylist_iface_idx != -1) goto <D.27172>; else goto <D.27173>;
        <D.27172>:
        D.27092 = class->interfaces;
        ireadonlylist_iface_idx.144 = (unsigned int) ireadonlylist_iface_idx;
        D.27154 = ireadonlylist_iface_idx.144 * 4;
        D.27155 = D.27092 + D.27154;
        D.27174 = *D.27155;
        iftmp.148 = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.27174);
        goto <D.27175>;
        <D.27173>:
        iftmp.148 = -1;
        <D.27175>:
        ireadonlylist_offset = iftmp.148;
        if (ireadonlycollection_iface_idx != -1) goto <D.27177>; else goto <D.27178>;
        <D.27177>:
        D.27179 = ireadonlylist_class->interfaces;
        ireadonlycollection_iface_idx.150 = (unsigned int) ireadonlycollection_iface_idx;
        D.27181 = ireadonlycollection_iface_idx.150 * 4;
        D.27182 = D.27179 + D.27181;
        D.27183 = *D.27182;
        iftmp.149 = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.27183);
        goto <D.27184>;
        <D.27178>:
        iftmp.149 = -1;
        <D.27184>:
        ireadonlycollection_offset = iftmp.149;
        D.27189 = ilist_offset < 0;
        D.27190 = icollection_offset < 0;
        D.27191 = D.27189 | D.27190;
        if (D.27191 != 0) goto <D.27186>; else goto <D.27192>;
        <D.27192>:
        if (ienumerable_offset < 0) goto <D.27186>; else goto <D.27187>;
        <D.27186>:
        iftmp.151 = 1;
        goto <D.27188>;
        <D.27187>:
        iftmp.151 = 0;
        <D.27188>:
        D.27193 = iftmp.151 != 0;
        D.27194 = (long int) D.27193;
        D.27195 = __builtin_expect (D.27194, 0);
        if (D.27195 != 0) goto <D.27196>; else goto <D.27197>;
        <D.27196>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3428, "ilist_offset >= 0 && icollection_offset >= 0 && ienumerable_offset >= 0");
        <D.27197>:
        i = 0;
        goto <D.21968>;
        <D.21967>:
        {
          int offset;

          i.134 = (unsigned int) i;
          D.27010 = i.134 * 4;
          D.27037 = array_interfaces + D.27010;
          ic = *D.27037;
          D.27198 = ic->generic_class;
          D.27199 = D.27198->container_class;
          D.27200 = mono_defaults.generic_ilist_class;
          if (D.27199 == D.27200) goto <D.27201>; else goto <D.27202>;
          <D.27201>:
          offset = ilist_offset;
          goto <D.27203>;
          <D.27202>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s2_len = 13;
            if (__s2_len <= 3) goto <D.27205>; else goto <D.27206>;
            <D.27205>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = ic->name;
              D.27207 = "ICollection`1";
              D.27208 = MEM[(const unsigned char *)D.27207];
              D.27209 = (int) D.27208;
              D.27210 = *__s2;
              D.27211 = (int) D.27210;
              __result = D.27209 - D.27211;
              {
                D.27212 = __s2_len != 0;
                D.27213 = __result == 0;
                D.27214 = D.27212 & D.27213;
                if (D.27214 != 0) goto <D.27215>; else goto <D.27216>;
                <D.27215>:
                D.27217 = &MEM[(void *)"ICollection`1" + 1B];
                D.27218 = *D.27217;
                D.27219 = (int) D.27218;
                D.27220 = __s2 + 1;
                D.27221 = *D.27220;
                D.27222 = (int) D.27221;
                __result = D.27219 - D.27222;
                D.27223 = __s2_len > 1;
                D.27213 = __result == 0;
                D.27224 = D.27223 & D.27213;
                if (D.27224 != 0) goto <D.27225>; else goto <D.27226>;
                <D.27225>:
                D.27227 = &MEM[(void *)"ICollection`1" + 2B];
                D.27228 = *D.27227;
                D.27229 = (int) D.27228;
                D.27230 = __s2 + 2;
                D.27231 = *D.27230;
                D.27232 = (int) D.27231;
                __result = D.27229 - D.27232;
                D.27233 = __s2_len > 2;
                D.27213 = __result == 0;
                D.27234 = D.27233 & D.27213;
                if (D.27234 != 0) goto <D.27235>; else goto <D.27236>;
                <D.27235>:
                D.27237 = &MEM[(void *)"ICollection`1" + 3B];
                D.27238 = *D.27237;
                D.27239 = (int) D.27238;
                D.27240 = __s2 + 3;
                D.27241 = *D.27240;
                D.27242 = (int) D.27241;
                __result = D.27239 - D.27242;
                <D.27236>:
                <D.27226>:
                <D.27216>:
              }
              D.21938 = __result;
            }
            iftmp.152 = -D.21938;
            goto <D.27243>;
            <D.27206>:
            D.27142 = ic->name;
            iftmp.152 = __builtin_strcmp (D.27142, "ICollection`1");
            <D.27243>:
            D.21939 = iftmp.152;
          }
          if (D.21939 == 0) goto <D.27244>; else goto <D.27245>;
          <D.27244>:
          offset = icollection_offset;
          goto <D.27246>;
          <D.27245>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s2_len = 13;
            if (__s2_len <= 3) goto <D.27248>; else goto <D.27249>;
            <D.27248>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = ic->name;
              D.27250 = "IEnumerable`1";
              D.27251 = MEM[(const unsigned char *)D.27250];
              D.27252 = (int) D.27251;
              D.27253 = *__s2;
              D.27254 = (int) D.27253;
              __result = D.27252 - D.27254;
              {
                D.27255 = __s2_len != 0;
                D.27256 = __result == 0;
                D.27257 = D.27255 & D.27256;
                if (D.27257 != 0) goto <D.27258>; else goto <D.27259>;
                <D.27258>:
                D.27260 = &MEM[(void *)"IEnumerable`1" + 1B];
                D.27261 = *D.27260;
                D.27262 = (int) D.27261;
                D.27263 = __s2 + 1;
                D.27264 = *D.27263;
                D.27265 = (int) D.27264;
                __result = D.27262 - D.27265;
                D.27266 = __s2_len > 1;
                D.27256 = __result == 0;
                D.27267 = D.27266 & D.27256;
                if (D.27267 != 0) goto <D.27268>; else goto <D.27269>;
                <D.27268>:
                D.27270 = &MEM[(void *)"IEnumerable`1" + 2B];
                D.27271 = *D.27270;
                D.27272 = (int) D.27271;
                D.27273 = __s2 + 2;
                D.27274 = *D.27273;
                D.27275 = (int) D.27274;
                __result = D.27272 - D.27275;
                D.27276 = __s2_len > 2;
                D.27256 = __result == 0;
                D.27277 = D.27276 & D.27256;
                if (D.27277 != 0) goto <D.27278>; else goto <D.27279>;
                <D.27278>:
                D.27280 = &MEM[(void *)"IEnumerable`1" + 3B];
                D.27281 = *D.27280;
                D.27282 = (int) D.27281;
                D.27283 = __s2 + 3;
                D.27284 = *D.27283;
                D.27285 = (int) D.27284;
                __result = D.27282 - D.27285;
                <D.27279>:
                <D.27269>:
                <D.27259>:
              }
              D.21947 = __result;
            }
            iftmp.153 = -D.21947;
            goto <D.27286>;
            <D.27249>:
            D.27142 = ic->name;
            iftmp.153 = __builtin_strcmp (D.27142, "IEnumerable`1");
            <D.27286>:
            D.21948 = iftmp.153;
          }
          if (D.21948 == 0) goto <D.27287>; else goto <D.27288>;
          <D.27287>:
          offset = ienumerable_offset;
          goto <D.27289>;
          <D.27288>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s2_len = 15;
            if (__s2_len <= 3) goto <D.27291>; else goto <D.27292>;
            <D.27291>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = ic->name;
              D.27293 = "IReadOnlyList`1";
              D.27294 = MEM[(const unsigned char *)D.27293];
              D.27295 = (int) D.27294;
              D.27296 = *__s2;
              D.27297 = (int) D.27296;
              __result = D.27295 - D.27297;
              {
                D.27298 = __s2_len != 0;
                D.27299 = __result == 0;
                D.27300 = D.27298 & D.27299;
                if (D.27300 != 0) goto <D.27301>; else goto <D.27302>;
                <D.27301>:
                D.27303 = &MEM[(void *)"IReadOnlyList`1" + 1B];
                D.27304 = *D.27303;
                D.27305 = (int) D.27304;
                D.27306 = __s2 + 1;
                D.27307 = *D.27306;
                D.27308 = (int) D.27307;
                __result = D.27305 - D.27308;
                D.27309 = __s2_len > 1;
                D.27299 = __result == 0;
                D.27310 = D.27309 & D.27299;
                if (D.27310 != 0) goto <D.27311>; else goto <D.27312>;
                <D.27311>:
                D.27313 = &MEM[(void *)"IReadOnlyList`1" + 2B];
                D.27314 = *D.27313;
                D.27315 = (int) D.27314;
                D.27316 = __s2 + 2;
                D.27317 = *D.27316;
                D.27318 = (int) D.27317;
                __result = D.27315 - D.27318;
                D.27319 = __s2_len > 2;
                D.27299 = __result == 0;
                D.27320 = D.27319 & D.27299;
                if (D.27320 != 0) goto <D.27321>; else goto <D.27322>;
                <D.27321>:
                D.27323 = &MEM[(void *)"IReadOnlyList`1" + 3B];
                D.27324 = *D.27323;
                D.27325 = (int) D.27324;
                D.27326 = __s2 + 3;
                D.27327 = *D.27326;
                D.27328 = (int) D.27327;
                __result = D.27325 - D.27328;
                <D.27322>:
                <D.27312>:
                <D.27302>:
              }
              D.21956 = __result;
            }
            iftmp.154 = -D.21956;
            goto <D.27329>;
            <D.27292>:
            D.27142 = ic->name;
            iftmp.154 = __builtin_strcmp (D.27142, "IReadOnlyList`1");
            <D.27329>:
            D.21957 = iftmp.154;
          }
          if (D.21957 == 0) goto <D.27330>; else goto <D.27331>;
          <D.27330>:
          offset = ireadonlylist_offset;
          goto <D.27332>;
          <D.27331>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s2_len = 21;
            if (__s2_len <= 3) goto <D.27334>; else goto <D.27335>;
            <D.27334>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = ic->name;
              D.27336 = "IReadOnlyCollection`1";
              D.27337 = MEM[(const unsigned char *)D.27336];
              D.27338 = (int) D.27337;
              D.27339 = *__s2;
              D.27340 = (int) D.27339;
              __result = D.27338 - D.27340;
              {
                D.27341 = __s2_len != 0;
                D.27342 = __result == 0;
                D.27343 = D.27341 & D.27342;
                if (D.27343 != 0) goto <D.27344>; else goto <D.27345>;
                <D.27344>:
                D.27346 = &MEM[(void *)"IReadOnlyCollection`1" + 1B];
                D.27347 = *D.27346;
                D.27348 = (int) D.27347;
                D.27349 = __s2 + 1;
                D.27350 = *D.27349;
                D.27351 = (int) D.27350;
                __result = D.27348 - D.27351;
                D.27352 = __s2_len > 1;
                D.27342 = __result == 0;
                D.27353 = D.27352 & D.27342;
                if (D.27353 != 0) goto <D.27354>; else goto <D.27355>;
                <D.27354>:
                D.27356 = &MEM[(void *)"IReadOnlyCollection`1" + 2B];
                D.27357 = *D.27356;
                D.27358 = (int) D.27357;
                D.27359 = __s2 + 2;
                D.27360 = *D.27359;
                D.27361 = (int) D.27360;
                __result = D.27358 - D.27361;
                D.27362 = __s2_len > 2;
                D.27342 = __result == 0;
                D.27363 = D.27362 & D.27342;
                if (D.27363 != 0) goto <D.27364>; else goto <D.27365>;
                <D.27364>:
                D.27366 = &MEM[(void *)"IReadOnlyCollection`1" + 3B];
                D.27367 = *D.27366;
                D.27368 = (int) D.27367;
                D.27369 = __s2 + 3;
                D.27370 = *D.27369;
                D.27371 = (int) D.27370;
                __result = D.27368 - D.27371;
                <D.27365>:
                <D.27355>:
                <D.27345>:
              }
              D.21965 = __result;
            }
            iftmp.155 = -D.21965;
            goto <D.27372>;
            <D.27335>:
            D.27142 = ic->name;
            iftmp.155 = __builtin_strcmp (D.27142, "IReadOnlyCollection`1");
            <D.27372>:
            D.21966 = iftmp.155;
          }
          if (D.21966 == 0) goto <D.27373>; else goto <D.27374>;
          <D.27373>:
          offset = ireadonlycollection_offset;
          goto <D.27375>;
          <D.27374>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 3443);
          <D.27375>:
          <D.27332>:
          <D.27289>:
          <D.27246>:
          <D.27203>:
          set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, offset, 1);
        }
        i = i + 1;
        <D.21968>:
        num_array_interfaces.137 = num_array_interfaces;
        if (i < num_array_interfaces.137) goto <D.21967>; else goto <D.21969>;
        <D.21969>:
      }
      <D.27146>:
      <D.27088>:
      interface_offsets_count = 0;
      i = 0;
      goto <D.21971>;
      <D.21970>:
      i.134 = (unsigned int) i;
      D.27010 = i.134 * 4;
      D.27055 = interface_offsets_full + D.27010;
      D.27376 = *D.27055;
      if (D.27376 != -1) goto <D.27377>; else goto <D.27378>;
      <D.27377>:
      interface_offsets_count = interface_offsets_count + 1;
      <D.27378>:
      i = i + 1;
      <D.21971>:
      if (i < num_ifaces) goto <D.21970>; else goto <D.21972>;
      <D.21972>:
      D.27381 = class->interfaces_packed;
      if (D.27381 != 0B) goto <D.27382>; else goto <D.27379>;
      <D.27382>:
      if (overwrite == 0) goto <D.27383>; else goto <D.27379>;
      <D.27383>:
      D.27384 = class->interface_offsets_count;
      D.27385 = (int) D.27384;
      D.27386 = D.27385 != interface_offsets_count;
      D.27387 = (long int) D.27386;
      D.27388 = __builtin_expect (D.27387, 0);
      if (D.27388 != 0) goto <D.27389>; else goto <D.27390>;
      <D.27389>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3465, "class->interface_offsets_count == interface_offsets_count");
      <D.27390>:
      goto <D.27380>;
      <D.27379>:
      {
        uint8_t * bitmap;
        int bsize;

        D.27391 = (short unsigned int) interface_offsets_count;
        class->interface_offsets_count = D.27391;
        interface_offsets_count.156 = (unsigned int) interface_offsets_count;
        D.27393 = interface_offsets_count.156 * 4;
        D.27394 = (int) D.27393;
        D.27395 = mono_class_alloc (class, D.27394);
        class->interfaces_packed = D.27395;
        interface_offsets_count.156 = (unsigned int) interface_offsets_count;
        D.27396 = interface_offsets_count.156 * 2;
        D.27397 = (int) D.27396;
        D.27398 = mono_class_alloc (class, D.27397);
        class->interface_offsets_packed = D.27398;
        D.27399 = max_iid + 1;
        D.27400 = D.27399 >> 3;
        D.27401 = (unsigned int) D.27400;
        D.27399 = max_iid + 1;
        D.27403 = D.27399 & 7;
        if (D.27403 != 0) goto <D.27404>; else goto <D.27405>;
        <D.27404>:
        iftmp.157 = 1;
        goto <D.27406>;
        <D.27405>:
        iftmp.157 = 0;
        <D.27406>:
        D.27407 = D.27401 + iftmp.157;
        bsize = (int) D.27407;
        bitmap = mono_class_alloc0 (class, bsize);
        i = 0;
        goto <D.21977>;
        <D.21976>:
        {
          int id;

          i.134 = (unsigned int) i;
          D.27010 = i.134 * 4;
          D.27408 = interfaces_full + D.27010;
          D.27409 = *D.27408;
          D.27410 = D.27409->interface_id;
          id = (int) D.27410;
          D.27411 = id >> 3;
          D.27412 = (sizetype) D.27411;
          D.27413 = bitmap + D.27412;
          D.27411 = id >> 3;
          D.27412 = (sizetype) D.27411;
          D.27413 = bitmap + D.27412;
          D.27414 = *D.27413;
          D.27415 = (signed char) D.27414;
          D.27416 = id & 7;
          D.27417 = 1 << D.27416;
          D.27418 = (signed char) D.27417;
          D.27419 = D.27415 | D.27418;
          D.27420 = (unsigned char) D.27419;
          *D.27413 = D.27420;
          D.27381 = class->interfaces_packed;
          i.134 = (unsigned int) i;
          D.27010 = i.134 * 4;
          D.27421 = D.27381 + D.27010;
          i.134 = (unsigned int) i;
          D.27010 = i.134 * 4;
          D.27408 = interfaces_full + D.27010;
          D.27409 = *D.27408;
          *D.27421 = D.27409;
          D.27422 = class->interface_offsets_packed;
          i.134 = (unsigned int) i;
          D.27423 = i.134 * 2;
          D.27424 = D.27422 + D.27423;
          i.134 = (unsigned int) i;
          D.27010 = i.134 * 4;
          D.27055 = interface_offsets_full + D.27010;
          D.27376 = *D.27055;
          D.27425 = (short unsigned int) D.27376;
          *D.27424 = D.27425;
        }
        i = i + 1;
        <D.21977>:
        if (i < interface_offsets_count) goto <D.21976>; else goto <D.21978>;
        <D.21978>:
        class->interface_bitmap = bitmap;
      }
      <D.27380>:
      end:
      monoeg_g_free (interfaces_full);
      monoeg_g_free (interface_offsets_full);
      monoeg_g_free (array_interfaces);
      i = 0;
      goto <D.21980>;
      <D.21979>:
      i.134 = (unsigned int) i;
      D.27010 = i.134 * 4;
      D.27426 = ifaces_array + D.27010;
      ifaces = *D.27426;
      if (ifaces != 0B) goto <D.27427>; else goto <D.27428>;
      <D.27427>:
      monoeg_g_ptr_array_free (ifaces, 1);
      <D.27428>:
      i = i + 1;
      <D.21980>:
      D.26999 = class->idepth;
      D.27036 = (int) D.26999;
      if (D.27036 > i) goto <D.21979>; else goto <D.21981>;
      <D.21981>:
      monoeg_g_free (ifaces_array);
      D.27429 = cur_slot;
      return D.27429;
    }
  finally
    {
      error = {CLOBBER};
      num_array_interfaces = {CLOBBER};
      is_enumerator = {CLOBBER};
    }
}


get_implicit_generic_array_interfaces (struct MonoClass * class, int * num, int * is_enumerator)
{
  struct MonoClass * D.27432;
  struct MonoClass * * D.27435;
  unsigned char D.27436;
  unsigned char D.27437;
  struct MonoGenericClass * D.27442;
  struct MonoClass * D.27444;
  struct MonoClass * D.27445;
  int D.21767;
  int iftmp.158;
  int D.21766;
  const char[21] * D.27450;
  unsigned char D.27451;
  int D.27452;
  unsigned char D.27453;
  int D.27454;
  _Bool D.27455;
  _Bool D.27456;
  _Bool D.27457;
  const unsigned char * D.27460;
  unsigned char D.27461;
  int D.27462;
  const unsigned char * D.27463;
  unsigned char D.27464;
  int D.27465;
  _Bool D.27466;
  _Bool D.27467;
  const unsigned char * D.27470;
  unsigned char D.27471;
  int D.27472;
  const unsigned char * D.27473;
  unsigned char D.27474;
  int D.27475;
  _Bool D.27476;
  _Bool D.27477;
  const unsigned char * D.27480;
  unsigned char D.27481;
  int D.27482;
  const unsigned char * D.27483;
  unsigned char D.27484;
  int D.27485;
  const char * D.27487;
  struct MonoGenericInst * D.27489;
  struct MonoType * D.27490;
  int iftmp.159;
  struct MonoClass * D.27498;
  unsigned char D.27499;
  struct MonoClass * generic_icollection_class.160;
  struct MonoImage * D.27503;
  struct MonoClass * generic_icollection_class.161;
  struct MonoClass * generic_ienumerable_class.162;
  struct MonoClass * generic_ienumerator_class.163;
  struct MonoClass * generic_ireadonlylist_class.164;
  struct MonoClass * generic_ireadonlycollection_class.165;
  unsigned char D.27509;
  unsigned char D.27510;
  int iftmp.166;
  struct MonoClass * generic_ireadonlylist_class.167;
  int iftmp.168;
  struct MonoClass * D.27519;
  unsigned int real_count.169;
  unsigned int D.27528;
  struct MonoClass * D.27529;
  unsigned int nifaces.170;
  unsigned int D.27533;
  struct MonoClass * * D.27534;
  short unsigned int D.27536;
  int iftmp.171;
  unsigned char D.27545;
  _Bool D.27546;
  _Bool D.27547;
  _Bool D.27548;
  struct MonoImage * D.27551;
  unsigned char D.27552;
  unsigned char D.27553;
  unsigned char D.27555;
  int iftmp.172;
  short unsigned int D.27559;
  short unsigned int D.27561;
  unsigned int D.27565;
  unsigned int D.27566;
  unsigned char D.27568;
  unsigned char D.27572;
  unsigned char D.27573;
  int iftmp.173;
  int D.27586;
  int D.27587;
  struct MonoClass * D.27594;
  struct MonoClass * * D.27595;
  unsigned int i.174;
  unsigned int D.27597;
  struct MonoClass * * D.27598;
  struct MonoClass * D.27599;
  unsigned int j.175;
  unsigned int D.27601;
  struct MonoClass * * D.27602;
  struct MonoClass * * D.27605;
  struct MonoClass * * D.27606;
  struct MonoClass * D.27607;
  struct MonoClass * * D.27609;
  struct MonoClass * * D.27610;
  struct MonoClass * D.27611;
  int D.27612;
  unsigned int original_rank.176;
  struct MonoClass * D.27616;
  struct MonoClass * * D.27617;
  struct MonoClass * D.27618;
  sizetype i.177;
  sizetype D.27620;
  sizetype D.27621;
  struct MonoClass * * D.27622;
  struct MonoClass * D.27623;
  sizetype D.27626;
  sizetype D.27627;
  struct MonoClass * * D.27628;
  struct MonoClass * generic_ienumerable_class.178;
  struct MonoClass * D.27630;
  sizetype D.27633;
  sizetype D.27634;
  struct MonoClass * * D.27635;
  struct MonoClass * D.27636;
  sizetype D.27637;
  sizetype D.27638;
  struct MonoClass * * D.27639;
  struct MonoClass * generic_ireadonlycollection_class.179;
  struct MonoClass * D.27641;
  struct MonoClass * D.27645;
  struct MonoClass * generic_ienumerator_class.180;
  struct MonoClass * D.27649;
  struct MonoClass * D.27650;
  unsigned int j.181;
  unsigned int D.27658;
  struct MonoClass * * D.27659;
  struct MonoClass * D.27660;
  struct MonoClass * D.27661;
  int D.27662;
  struct MonoClass * D.27663;
  int j.182;
  unsigned int j.183;
  unsigned int D.27667;
  struct MonoClass * * D.27668;
  struct MonoClass * D.27669;
  struct MonoClass * D.27670;
  struct MonoClass * D.27673;
  struct MonoClass * D.27674;
  struct MonoClass * eclass;
  static struct MonoClass * generic_icollection_class = 0B;
  static struct MonoClass * generic_ienumerable_class = 0B;
  static struct MonoClass * generic_ienumerator_class = 0B;
  static struct MonoClass * generic_ireadonlylist_class = 0B;
  static struct MonoClass * generic_ireadonlycollection_class = 0B;
  struct MonoClass * valuetype_types[2];
  struct MonoClass * * interfaces;
  int i;
  int nifaces;
  int interface_count;
  int real_count;
  int original_rank;
  int all_interfaces;
  gboolean internal_enumerator;
  gboolean eclass_is_valuetype;

  try
    {
      eclass = class->element_class;
      valuetype_types[0] = 0B;
      valuetype_types[1] = 0B;
      interfaces = 0B;
      D.27432 = mono_defaults.generic_ilist_class;
      if (D.27432 == 0B) goto <D.27433>; else goto <D.27434>;
      <D.27433>:
      *num = 0;
      D.27435 = 0B;
      return D.27435;
      <D.27434>:
      internal_enumerator = 0;
      eclass_is_valuetype = 0;
      D.27436 = eclass->rank;
      original_rank = (int) D.27436;
      D.27437 = class->byval_arg.type;
      if (D.27437 != 29) goto <D.27438>; else goto <D.27439>;
      <D.27438>:
      D.27442 = class->generic_class;
      if (D.27442 != 0B) goto <D.27443>; else goto <D.27440>;
      <D.27443>:
      D.27444 = class->nested_in;
      D.27445 = mono_defaults.array_class;
      if (D.27444 == D.27445) goto <D.27446>; else goto <D.27440>;
      <D.27446>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 20;
        if (__s2_len <= 3) goto <D.27448>; else goto <D.27449>;
        <D.27448>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = class->name;
          D.27450 = "InternalEnumerator`1";
          D.27451 = MEM[(const unsigned char *)D.27450];
          D.27452 = (int) D.27451;
          D.27453 = *__s2;
          D.27454 = (int) D.27453;
          __result = D.27452 - D.27454;
          {
            D.27455 = __s2_len != 0;
            D.27456 = __result == 0;
            D.27457 = D.27455 & D.27456;
            if (D.27457 != 0) goto <D.27458>; else goto <D.27459>;
            <D.27458>:
            D.27460 = &MEM[(void *)"InternalEnumerator`1" + 1B];
            D.27461 = *D.27460;
            D.27462 = (int) D.27461;
            D.27463 = __s2 + 1;
            D.27464 = *D.27463;
            D.27465 = (int) D.27464;
            __result = D.27462 - D.27465;
            D.27466 = __s2_len > 1;
            D.27456 = __result == 0;
            D.27467 = D.27466 & D.27456;
            if (D.27467 != 0) goto <D.27468>; else goto <D.27469>;
            <D.27468>:
            D.27470 = &MEM[(void *)"InternalEnumerator`1" + 2B];
            D.27471 = *D.27470;
            D.27472 = (int) D.27471;
            D.27473 = __s2 + 2;
            D.27474 = *D.27473;
            D.27475 = (int) D.27474;
            __result = D.27472 - D.27475;
            D.27476 = __s2_len > 2;
            D.27456 = __result == 0;
            D.27477 = D.27476 & D.27456;
            if (D.27477 != 0) goto <D.27478>; else goto <D.27479>;
            <D.27478>:
            D.27480 = &MEM[(void *)"InternalEnumerator`1" + 3B];
            D.27481 = *D.27480;
            D.27482 = (int) D.27481;
            D.27483 = __s2 + 3;
            D.27484 = *D.27483;
            D.27485 = (int) D.27484;
            __result = D.27482 - D.27485;
            <D.27479>:
            <D.27469>:
            <D.27459>:
          }
          D.21766 = __result;
        }
        iftmp.158 = -D.21766;
        goto <D.27486>;
        <D.27449>:
        D.27487 = class->name;
        iftmp.158 = __builtin_strcmp (D.27487, "InternalEnumerator`1");
        <D.27486>:
        D.21767 = iftmp.158;
      }
      if (D.21767 == 0) goto <D.27488>; else goto <D.27440>;
      <D.27488>:
      D.27442 = class->generic_class;
      D.27489 = D.27442->context.class_inst;
      D.27490 = D.27489->type_argv[0];
      eclass = mono_class_from_mono_type (D.27490);
      D.27436 = eclass->rank;
      original_rank = (int) D.27436;
      D.27436 = eclass->rank;
      if (D.27436 == 0) goto <D.27491>; else goto <D.27492>;
      <D.27491>:
      eclass = eclass->element_class;
      <D.27492>:
      internal_enumerator = 1;
      *is_enumerator = 1;
      goto <D.27441>;
      <D.27440>:
      *num = 0;
      D.27435 = 0B;
      return D.27435;
      <D.27441>:
      <D.27439>:
      D.27436 = eclass->rank;
      if (D.27436 == 0) goto <D.27494>; else goto <D.27497>;
      <D.27497>:
      D.27498 = eclass->element_class;
      D.27499 = D.27498->rank;
      if (D.27499 == 0) goto <D.27494>; else goto <D.27495>;
      <D.27494>:
      iftmp.159 = 1;
      goto <D.27496>;
      <D.27495>:
      iftmp.159 = 0;
      <D.27496>:
      all_interfaces = iftmp.159;
      generic_icollection_class.160 = generic_icollection_class;
      if (generic_icollection_class.160 == 0B) goto <D.27501>; else goto <D.27502>;
      <D.27501>:
      D.27503 = mono_defaults.corlib;
      generic_icollection_class.161 = mono_class_from_name (D.27503, "System.Collections.Generic", "ICollection`1");
      generic_icollection_class = generic_icollection_class.161;
      D.27503 = mono_defaults.corlib;
      generic_ienumerable_class.162 = mono_class_from_name (D.27503, "System.Collections.Generic", "IEnumerable`1");
      generic_ienumerable_class = generic_ienumerable_class.162;
      D.27503 = mono_defaults.corlib;
      generic_ienumerator_class.163 = mono_class_from_name (D.27503, "System.Collections.Generic", "IEnumerator`1");
      generic_ienumerator_class = generic_ienumerator_class.163;
      D.27503 = mono_defaults.corlib;
      generic_ireadonlylist_class.164 = mono_class_from_name (D.27503, "System.Collections.Generic", "IReadOnlyList`1");
      generic_ireadonlylist_class = generic_ireadonlylist_class.164;
      D.27503 = mono_defaults.corlib;
      generic_ireadonlycollection_class.165 = mono_class_from_name (D.27503, "System.Collections.Generic", "IReadOnlyCollection`1");
      generic_ireadonlycollection_class = generic_ireadonlycollection_class.165;
      <D.27502>:
      mono_class_init (eclass);
      D.27509 = BIT_FIELD_REF <*eclass, 8, 160>;
      D.27510 = D.27509 & 8;
      if (D.27510 != 0) goto <D.27511>; else goto <D.27512>;
      <D.27511>:
      generic_ireadonlylist_class.167 = generic_ireadonlylist_class;
      if (generic_ireadonlylist_class.167 != 0B) goto <D.27515>; else goto <D.27516>;
      <D.27515>:
      iftmp.166 = 5;
      goto <D.27517>;
      <D.27516>:
      iftmp.166 = 3;
      <D.27517>:
      nifaces = iftmp.166;
      fill_valuetype_array_derived_types (&valuetype_types, eclass, original_rank);
      D.27519 = valuetype_types[1];
      if (D.27519 != 0B) goto <D.27520>; else goto <D.27521>;
      <D.27520>:
      iftmp.168 = nifaces * 2;
      goto <D.27522>;
      <D.27521>:
      iftmp.168 = nifaces;
      <D.27522>:
      interface_count = iftmp.168;
      real_count = interface_count;
      if (internal_enumerator != 0) goto <D.27523>; else goto <D.27524>;
      <D.27523>:
      real_count = real_count + 1;
      D.27519 = valuetype_types[1];
      if (D.27519 != 0B) goto <D.27525>; else goto <D.27526>;
      <D.27525>:
      real_count = real_count + 1;
      <D.27526>:
      <D.27524>:
      real_count.169 = (unsigned int) real_count;
      D.27528 = real_count.169 * 4;
      interfaces = monoeg_malloc0 (D.27528);
      D.27529 = valuetype_types[0];
      *interfaces = D.27529;
      D.27519 = valuetype_types[1];
      if (D.27519 != 0B) goto <D.27530>; else goto <D.27531>;
      <D.27530>:
      nifaces.170 = (unsigned int) nifaces;
      D.27533 = nifaces.170 * 4;
      D.27534 = interfaces + D.27533;
      D.27519 = valuetype_types[1];
      *D.27534 = D.27519;
      <D.27531>:
      eclass_is_valuetype = 1;
      goto <D.27535>;
      <D.27512>:
      {
        int j;
        int idepth;

        D.27536 = eclass->idepth;
        idepth = (int) D.27536;
        if (internal_enumerator == 0) goto <D.27537>; else goto <D.27538>;
        <D.27537>:
        idepth = idepth + -1;
        <D.27538>:
        generic_ireadonlylist_class.167 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.167 != 0B) goto <D.27540>; else goto <D.27541>;
        <D.27540>:
        iftmp.171 = 2;
        goto <D.27542>;
        <D.27541>:
        iftmp.171 = 3;
        <D.27542>:
        nifaces = iftmp.171;
        D.27545 = eclass->this_arg.type;
        D.27546 = D.27545 != 19;
        D.27547 = D.27545 != 30;
        D.27548 = D.27546 & D.27547;
        if (D.27548 != 0) goto <D.27549>; else goto <D.27550>;
        <D.27549>:
        D.27551 = eclass->image;
        D.27552 = BIT_FIELD_REF <*D.27551, 8, 128>;
        D.27553 = D.27552 & 8;
        if (D.27553 == 0) goto <D.27543>; else goto <D.27554>;
        <D.27554>:
        D.27509 = BIT_FIELD_REF <*eclass, 8, 160>;
        D.27555 = D.27509 & 128;
        if (D.27555 != 0) goto <D.27543>; else goto <D.27544>;
        <D.27543>:
        mono_class_setup_interface_offsets (eclass);
        <D.27544>:
        <D.27550>:
        if (all_interfaces != 0) goto <D.27557>; else goto <D.27558>;
        <D.27557>:
        D.27559 = eclass->interface_offsets_count;
        iftmp.172 = (int) D.27559;
        goto <D.27560>;
        <D.27558>:
        D.27561 = eclass->interface_count;
        iftmp.172 = (int) D.27561;
        <D.27560>:
        interface_count = iftmp.172;
        D.27565 = eclass->flags;
        D.27566 = D.27565 & 32;
        if (D.27566 != 0) goto <D.27562>; else goto <D.27567>;
        <D.27567>:
        D.27568 = eclass->byval_arg.type;
        if (D.27568 == 19) goto <D.27562>; else goto <D.27569>;
        <D.27569>:
        D.27568 = eclass->byval_arg.type;
        if (D.27568 == 30) goto <D.27562>; else goto <D.27563>;
        <D.27562>:
        interface_count = interface_count + 1;
        goto <D.27564>;
        <D.27563>:
        interface_count = interface_count + idepth;
        <D.27564>:
        D.27436 = eclass->rank;
        if (D.27436 != 0) goto <D.27570>; else goto <D.27571>;
        <D.27570>:
        D.27498 = eclass->element_class;
        D.27572 = BIT_FIELD_REF <*D.27498, 8, 160>;
        D.27573 = D.27572 & 8;
        if (D.27573 != 0) goto <D.27574>; else goto <D.27575>;
        <D.27574>:
        D.27498 = eclass->element_class;
        fill_valuetype_array_derived_types (&valuetype_types, D.27498, original_rank);
        D.27519 = valuetype_types[1];
        if (D.27519 != 0B) goto <D.27576>; else goto <D.27577>;
        <D.27576>:
        interface_count = interface_count + 1;
        <D.27577>:
        <D.27575>:
        <D.27571>:
        interface_count = interface_count * nifaces;
        real_count = interface_count;
        if (internal_enumerator != 0) goto <D.27578>; else goto <D.27579>;
        <D.27578>:
        D.27565 = eclass->flags;
        D.27566 = D.27565 & 32;
        if (D.27566 == 0) goto <D.27583>; else goto <D.27581>;
        <D.27583>:
        D.27568 = eclass->byval_arg.type;
        if (D.27568 != 19) goto <D.27584>; else goto <D.27581>;
        <D.27584>:
        D.27568 = eclass->byval_arg.type;
        if (D.27568 != 30) goto <D.27585>; else goto <D.27581>;
        <D.27585>:
        iftmp.173 = idepth;
        goto <D.27582>;
        <D.27581>:
        iftmp.173 = 1;
        <D.27582>:
        D.27559 = eclass->interface_offsets_count;
        D.27586 = (int) D.27559;
        D.27587 = iftmp.173 + D.27586;
        real_count = D.27587 + real_count;
        D.27519 = valuetype_types[1];
        if (D.27519 != 0B) goto <D.27588>; else goto <D.27589>;
        <D.27588>:
        real_count = real_count + 1;
        <D.27589>:
        <D.27579>:
        real_count.169 = (unsigned int) real_count;
        D.27528 = real_count.169 * 4;
        interfaces = monoeg_malloc0 (D.27528);
        D.27565 = eclass->flags;
        D.27566 = D.27565 & 32;
        if (D.27566 != 0) goto <D.27590>; else goto <D.27592>;
        <D.27592>:
        D.27568 = eclass->byval_arg.type;
        if (D.27568 == 19) goto <D.27590>; else goto <D.27593>;
        <D.27593>:
        D.27568 = eclass->byval_arg.type;
        if (D.27568 == 30) goto <D.27590>; else goto <D.27591>;
        <D.27590>:
        D.27594 = mono_defaults.object_class;
        *interfaces = D.27594;
        j = nifaces;
        goto <D.21772>;
        <D.27591>:
        j = 0;
        i = 0;
        goto <D.21771>;
        <D.21770>:
        D.27595 = eclass->supertypes;
        i.174 = (unsigned int) i;
        D.27597 = i.174 * 4;
        D.27598 = D.27595 + D.27597;
        D.27599 = *D.27598;
        mono_class_init (D.27599);
        j.175 = (unsigned int) j;
        D.27601 = j.175 * 4;
        D.27602 = interfaces + D.27601;
        D.27595 = eclass->supertypes;
        i.174 = (unsigned int) i;
        D.27597 = i.174 * 4;
        D.27598 = D.27595 + D.27597;
        D.27599 = *D.27598;
        *D.27602 = D.27599;
        j = j + nifaces;
        i = i + 1;
        <D.21771>:
        if (i < idepth) goto <D.21770>; else goto <D.21772>;
        <D.21772>:
        if (all_interfaces != 0) goto <D.27603>; else goto <D.27604>;
        <D.27603>:
        i = 0;
        goto <D.21774>;
        <D.21773>:
        j.175 = (unsigned int) j;
        D.27601 = j.175 * 4;
        D.27602 = interfaces + D.27601;
        D.27605 = eclass->interfaces_packed;
        i.174 = (unsigned int) i;
        D.27597 = i.174 * 4;
        D.27606 = D.27605 + D.27597;
        D.27607 = *D.27606;
        *D.27602 = D.27607;
        j = j + nifaces;
        i = i + 1;
        <D.21774>:
        D.27559 = eclass->interface_offsets_count;
        D.27586 = (int) D.27559;
        if (D.27586 > i) goto <D.21773>; else goto <D.21775>;
        <D.21775>:
        goto <D.27608>;
        <D.27604>:
        i = 0;
        goto <D.21777>;
        <D.21776>:
        j.175 = (unsigned int) j;
        D.27601 = j.175 * 4;
        D.27602 = interfaces + D.27601;
        D.27609 = eclass->interfaces;
        i.174 = (unsigned int) i;
        D.27597 = i.174 * 4;
        D.27610 = D.27609 + D.27597;
        D.27611 = *D.27610;
        *D.27602 = D.27611;
        j = j + nifaces;
        i = i + 1;
        <D.21777>:
        D.27561 = eclass->interface_count;
        D.27612 = (int) D.27561;
        if (D.27612 > i) goto <D.21776>; else goto <D.21778>;
        <D.21778>:
        <D.27608>:
        D.27519 = valuetype_types[1];
        if (D.27519 != 0B) goto <D.27613>; else goto <D.27614>;
        <D.27613>:
        j.175 = (unsigned int) j;
        D.27601 = j.175 * 4;
        D.27602 = interfaces + D.27601;
        D.27519 = valuetype_types[1];
        original_rank.176 = (unsigned int) original_rank;
        D.27616 = array_class_get_if_rank (D.27519, original_rank.176);
        *D.27602 = D.27616;
        j = j + nifaces;
        <D.27614>:
      }
      <D.27535>:
      i = 0;
      goto <D.21781>;
      <D.21780>:
      {
        struct MonoClass * iface;

        i.174 = (unsigned int) i;
        D.27597 = i.174 * 4;
        D.27617 = interfaces + D.27597;
        iface = *D.27617;
        i.174 = (unsigned int) i;
        D.27597 = i.174 * 4;
        D.27617 = interfaces + D.27597;
        D.27432 = mono_defaults.generic_ilist_class;
        D.27618 = inflate_class_one_arg (D.27432, iface);
        *D.27617 = D.27618;
        i.177 = (sizetype) i;
        D.27620 = i.177 + 1;
        D.27621 = D.27620 * 4;
        D.27622 = interfaces + D.27621;
        generic_icollection_class.160 = generic_icollection_class;
        D.27623 = inflate_class_one_arg (generic_icollection_class.160, iface);
        *D.27622 = D.27623;
        D.27509 = BIT_FIELD_REF <*eclass, 8, 160>;
        D.27510 = D.27509 & 8;
        if (D.27510 != 0) goto <D.27624>; else goto <D.27625>;
        <D.27624>:
        i.177 = (sizetype) i;
        D.27626 = i.177 + 2;
        D.27627 = D.27626 * 4;
        D.27628 = interfaces + D.27627;
        generic_ienumerable_class.178 = generic_ienumerable_class;
        D.27630 = inflate_class_one_arg (generic_ienumerable_class.178, iface);
        *D.27628 = D.27630;
        generic_ireadonlylist_class.167 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.167 != 0B) goto <D.27631>; else goto <D.27632>;
        <D.27631>:
        i.177 = (sizetype) i;
        D.27633 = i.177 + 3;
        D.27634 = D.27633 * 4;
        D.27635 = interfaces + D.27634;
        generic_ireadonlylist_class.167 = generic_ireadonlylist_class;
        D.27636 = inflate_class_one_arg (generic_ireadonlylist_class.167, iface);
        *D.27635 = D.27636;
        i.177 = (sizetype) i;
        D.27637 = i.177 + 4;
        D.27638 = D.27637 * 4;
        D.27639 = interfaces + D.27638;
        generic_ireadonlycollection_class.179 = generic_ireadonlycollection_class;
        D.27641 = inflate_class_one_arg (generic_ireadonlycollection_class.179, iface);
        *D.27639 = D.27641;
        <D.27632>:
        goto <D.27642>;
        <D.27625>:
        generic_ireadonlylist_class.167 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.167 == 0B) goto <D.27643>; else goto <D.27644>;
        <D.27643>:
        i.177 = (sizetype) i;
        D.27626 = i.177 + 2;
        D.27627 = D.27626 * 4;
        D.27628 = interfaces + D.27627;
        generic_ienumerable_class.178 = generic_ienumerable_class;
        D.27645 = inflate_class_one_arg (generic_ienumerable_class.178, iface);
        *D.27628 = D.27645;
        <D.27644>:
        <D.27642>:
      }
      i = i + nifaces;
      <D.21781>:
      if (i < interface_count) goto <D.21780>; else goto <D.21782>;
      <D.21782>:
      if (internal_enumerator != 0) goto <D.27646>; else goto <D.27647>;
      <D.27646>:
      {
        int j;

        i = 0;
        goto <D.21785>;
        <D.21784>:
        i.174 = (unsigned int) i;
        D.27597 = i.174 * 4;
        D.27617 = interfaces + D.27597;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        i.174 = (unsigned int) i;
        D.27597 = i.174 * 4;
        D.27617 = interfaces + D.27597;
        D.27649 = *D.27617;
        D.27650 = inflate_class_one_arg (generic_ienumerator_class.180, D.27649);
        *D.27617 = D.27650;
        i = i + 1;
        <D.21785>:
        if (i < interface_count) goto <D.21784>; else goto <D.21786>;
        <D.21786>:
        j = interface_count;
        if (eclass_is_valuetype == 0) goto <D.27651>; else goto <D.27652>;
        <D.27651>:
        D.27565 = eclass->flags;
        D.27566 = D.27565 & 32;
        if (D.27566 != 0) goto <D.27653>; else goto <D.27655>;
        <D.27655>:
        D.27568 = eclass->byval_arg.type;
        if (D.27568 == 19) goto <D.27653>; else goto <D.27656>;
        <D.27656>:
        D.27568 = eclass->byval_arg.type;
        if (D.27568 == 30) goto <D.27653>; else goto <D.27654>;
        <D.27653>:
        j.181 = (unsigned int) j;
        D.27658 = j.181 * 4;
        D.27659 = interfaces + D.27658;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        D.27594 = mono_defaults.object_class;
        D.27660 = inflate_class_one_arg (generic_ienumerator_class.180, D.27594);
        *D.27659 = D.27660;
        j = j + 1;
        goto <D.21789>;
        <D.27654>:
        i = 0;
        goto <D.21788>;
        <D.21787>:
        j.181 = (unsigned int) j;
        D.27658 = j.181 * 4;
        D.27659 = interfaces + D.27658;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        D.27595 = eclass->supertypes;
        i.174 = (unsigned int) i;
        D.27597 = i.174 * 4;
        D.27598 = D.27595 + D.27597;
        D.27599 = *D.27598;
        D.27661 = inflate_class_one_arg (generic_ienumerator_class.180, D.27599);
        *D.27659 = D.27661;
        j = j + 1;
        i = i + 1;
        <D.21788>:
        D.27536 = eclass->idepth;
        D.27662 = (int) D.27536;
        if (D.27662 > i) goto <D.21787>; else goto <D.21789>;
        <D.21789>:
        i = 0;
        goto <D.21791>;
        <D.21790>:
        j.181 = (unsigned int) j;
        D.27658 = j.181 * 4;
        D.27659 = interfaces + D.27658;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        D.27605 = eclass->interfaces_packed;
        i.174 = (unsigned int) i;
        D.27597 = i.174 * 4;
        D.27606 = D.27605 + D.27597;
        D.27607 = *D.27606;
        D.27663 = inflate_class_one_arg (generic_ienumerator_class.180, D.27607);
        *D.27659 = D.27663;
        j = j + 1;
        i = i + 1;
        <D.21791>:
        D.27559 = eclass->interface_offsets_count;
        D.27586 = (int) D.27559;
        if (D.27586 > i) goto <D.21790>; else goto <D.21792>;
        <D.21792>:
        goto <D.27664>;
        <D.27652>:
        j.182 = j;
        j = j.182 + 1;
        j.183 = (unsigned int) j.182;
        D.27667 = j.183 * 4;
        D.27668 = interfaces + D.27667;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        D.27529 = valuetype_types[0];
        original_rank.176 = (unsigned int) original_rank;
        D.27669 = array_class_get_if_rank (D.27529, original_rank.176);
        D.27670 = inflate_class_one_arg (generic_ienumerator_class.180, D.27669);
        *D.27668 = D.27670;
        <D.27664>:
        D.27519 = valuetype_types[1];
        if (D.27519 != 0B) goto <D.27671>; else goto <D.27672>;
        <D.27671>:
        j.181 = (unsigned int) j;
        D.27658 = j.181 * 4;
        D.27659 = interfaces + D.27658;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        D.27519 = valuetype_types[1];
        original_rank.176 = (unsigned int) original_rank;
        D.27673 = array_class_get_if_rank (D.27519, original_rank.176);
        D.27674 = inflate_class_one_arg (generic_ienumerator_class.180, D.27673);
        *D.27659 = D.27674;
        <D.27672>:
      }
      <D.27647>:
      *num = real_count;
      D.27435 = interfaces;
      return D.27435;
    }
  finally
    {
      valuetype_types = {CLOBBER};
    }
}


fill_valuetype_array_derived_types (struct MonoClass * * valuetype_types, struct MonoClass * eclass, int rank)
{
  struct MonoClass * D.27677;
  struct MonoClass * * D.27680;
  struct MonoClass * D.27681;
  struct MonoClass * D.27686;
  struct MonoClass * D.27689;
  struct MonoClass * D.27694;
  struct MonoClass * D.27697;
  struct MonoClass * D.27702;
  struct MonoClass * D.27705;
  unsigned char D.27710;
  unsigned char D.27711;
  struct MonoType * D.27714;
  struct MonoType * D.27717;
  struct MonoClass * D.27718;

  *valuetype_types = eclass;
  D.27677 = mono_defaults.int16_class;
  if (D.27677 == eclass) goto <D.27678>; else goto <D.27679>;
  <D.27678>:
  D.27680 = valuetype_types + 4;
  D.27681 = mono_defaults.uint16_class;
  *D.27680 = D.27681;
  goto <D.27682>;
  <D.27679>:
  D.27681 = mono_defaults.uint16_class;
  if (D.27681 == eclass) goto <D.27683>; else goto <D.27684>;
  <D.27683>:
  D.27680 = valuetype_types + 4;
  D.27677 = mono_defaults.int16_class;
  *D.27680 = D.27677;
  goto <D.27685>;
  <D.27684>:
  D.27686 = mono_defaults.int32_class;
  if (D.27686 == eclass) goto <D.27687>; else goto <D.27688>;
  <D.27687>:
  D.27680 = valuetype_types + 4;
  D.27689 = mono_defaults.uint32_class;
  *D.27680 = D.27689;
  goto <D.27690>;
  <D.27688>:
  D.27689 = mono_defaults.uint32_class;
  if (D.27689 == eclass) goto <D.27691>; else goto <D.27692>;
  <D.27691>:
  D.27680 = valuetype_types + 4;
  D.27686 = mono_defaults.int32_class;
  *D.27680 = D.27686;
  goto <D.27693>;
  <D.27692>:
  D.27694 = mono_defaults.int64_class;
  if (D.27694 == eclass) goto <D.27695>; else goto <D.27696>;
  <D.27695>:
  D.27680 = valuetype_types + 4;
  D.27697 = mono_defaults.uint64_class;
  *D.27680 = D.27697;
  goto <D.27698>;
  <D.27696>:
  D.27697 = mono_defaults.uint64_class;
  if (D.27697 == eclass) goto <D.27699>; else goto <D.27700>;
  <D.27699>:
  D.27680 = valuetype_types + 4;
  D.27694 = mono_defaults.int64_class;
  *D.27680 = D.27694;
  goto <D.27701>;
  <D.27700>:
  D.27702 = mono_defaults.byte_class;
  if (D.27702 == eclass) goto <D.27703>; else goto <D.27704>;
  <D.27703>:
  D.27680 = valuetype_types + 4;
  D.27705 = mono_defaults.sbyte_class;
  *D.27680 = D.27705;
  goto <D.27706>;
  <D.27704>:
  D.27705 = mono_defaults.sbyte_class;
  if (D.27705 == eclass) goto <D.27707>; else goto <D.27708>;
  <D.27707>:
  D.27680 = valuetype_types + 4;
  D.27702 = mono_defaults.byte_class;
  *D.27680 = D.27702;
  goto <D.27709>;
  <D.27708>:
  D.27710 = BIT_FIELD_REF <*eclass, 8, 160>;
  D.27711 = D.27710 & 16;
  if (D.27711 != 0) goto <D.27712>; else goto <D.27713>;
  <D.27712>:
  D.27714 = mono_class_enum_basetype (eclass);
  if (D.27714 != 0B) goto <D.27715>; else goto <D.27716>;
  <D.27715>:
  D.27680 = valuetype_types + 4;
  D.27717 = mono_class_enum_basetype (eclass);
  D.27718 = mono_class_from_mono_type (D.27717);
  *D.27680 = D.27718;
  <D.27716>:
  <D.27713>:
  <D.27709>:
  <D.27706>:
  <D.27701>:
  <D.27698>:
  <D.27693>:
  <D.27690>:
  <D.27685>:
  <D.27682>:
}


array_class_get_if_rank (struct MonoClass * class, guint rank)
{
  struct MonoClass * D.27719;
  struct MonoClass * iftmp.184;

  if (rank != 0) goto <D.27721>; else goto <D.27722>;
  <D.27721>:
  iftmp.184 = mono_array_class_get (class, rank);
  goto <D.27723>;
  <D.27722>:
  iftmp.184 = class;
  <D.27723>:
  D.27719 = iftmp.184;
  return D.27719;
}


inflate_class_one_arg (struct MonoClass * gtype, struct MonoClass * arg0)
{
  struct MonoType * D.27725;
  struct MonoClass * D.27726;
  struct MonoType * args[1];

  try
    {
      D.27725 = &arg0->byval_arg;
      args[0] = D.27725;
      D.27726 = mono_class_bind_generic_parameters (gtype, 1, &args, 0);
      return D.27726;
    }
  finally
    {
      args = {CLOBBER};
    }
}


count_virtual_methods (struct MonoClass * class)
{
  struct MonoMethod * * D.27731;
  unsigned int D.27733;
  struct MonoImage * D.27735;
  unsigned char D.27736;
  unsigned char D.27737;
  struct MonoGenericClass * D.27739;
  unsigned char D.27740;
  int D.27743;
  unsigned int i.185;
  unsigned int D.27745;
  struct MonoMethod * * D.27746;
  struct MonoMethod * D.27747;
  short unsigned int D.27748;
  unsigned int D.27749;
  unsigned int i.186;
  unsigned int D.27753;
  unsigned int D.27754;
  unsigned int D.27755;
  int D.27756;
  int i;
  int count;
  guint32 flags;

  count = 0;
  class = mono_class_get_generic_type_definition (class);
  D.27731 = class->methods;
  if (D.27731 != 0B) goto <D.27729>; else goto <D.27732>;
  <D.27732>:
  D.27733 = class->type_token;
  if (D.27733 == 0) goto <D.27729>; else goto <D.27734>;
  <D.27734>:
  D.27735 = class->image;
  D.27736 = BIT_FIELD_REF <*D.27735, 8, 128>;
  D.27737 = D.27736 & 8;
  if (D.27737 != 0) goto <D.27729>; else goto <D.27738>;
  <D.27738>:
  D.27739 = class->generic_class;
  if (D.27739 != 0B) goto <D.27729>; else goto <D.27730>;
  <D.27729>:
  mono_class_setup_methods (class);
  D.27740 = class->exception_type;
  if (D.27740 != 0) goto <D.27741>; else goto <D.27742>;
  <D.27741>:
  D.27743 = -1;
  return D.27743;
  <D.27742>:
  i = 0;
  goto <D.21817>;
  <D.21816>:
  D.27731 = class->methods;
  i.185 = (unsigned int) i;
  D.27745 = i.185 * 4;
  D.27746 = D.27731 + D.27745;
  D.27747 = *D.27746;
  D.27748 = D.27747->flags;
  flags = (guint32) D.27748;
  D.27749 = flags & 64;
  if (D.27749 != 0) goto <D.27750>; else goto <D.27751>;
  <D.27750>:
  count = count + 1;
  <D.27751>:
  i = i + 1;
  <D.21817>:
  i.186 = (unsigned int) i;
  D.27753 = class->method.count;
  if (i.186 < D.27753) goto <D.21816>; else goto <D.21818>;
  <D.21818>:
  goto <D.21821>;
  <D.27730>:
  i = 0;
  goto <D.21820>;
  <D.21819>:
  D.27735 = class->image;
  D.27754 = class->method.first;
  i.186 = (unsigned int) i;
  D.27755 = D.27754 + i.186;
  D.27756 = (int) D.27755;
  flags = mono_metadata_decode_table_row_col (D.27735, 6, D.27756, 2);
  D.27749 = flags & 64;
  if (D.27749 != 0) goto <D.27757>; else goto <D.27758>;
  <D.27757>:
  count = count + 1;
  <D.27758>:
  i = i + 1;
  <D.21820>:
  i.186 = (unsigned int) i;
  D.27753 = class->method.count;
  if (i.186 < D.27753) goto <D.21819>; else goto <D.21821>;
  <D.21821>:
  D.27743 = count;
  return D.27743;
}


find_array_interface (struct MonoClass * klass, const char * name)
{
  int D.21806;
  struct MonoClass * * D.27760;
  unsigned int i.187;
  unsigned int D.27762;
  struct MonoClass * * D.27763;
  struct MonoClass * D.27764;
  const char * D.27765;
  int D.27768;
  short unsigned int D.27769;
  int D.27770;
  int i;

  i = 0;
  goto <D.21808>;
  <D.21807>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.27760 = klass->interfaces;
    i.187 = (unsigned int) i;
    D.27762 = i.187 * 4;
    D.27763 = D.27760 + D.27762;
    D.27764 = *D.27763;
    D.27765 = D.27764->name;
    D.21806 = __builtin_strcmp (D.27765, name);
  }
  if (D.21806 == 0) goto <D.27766>; else goto <D.27767>;
  <D.27766>:
  D.27768 = i;
  return D.27768;
  <D.27767>:
  i = i + 1;
  <D.21808>:
  D.27769 = klass->interface_count;
  D.27770 = (int) D.27769;
  if (D.27770 > i) goto <D.21807>; else goto <D.21809>;
  <D.21809>:
  D.27768 = -1;
  return D.27768;
}


find_interface_offset (int num_ifaces, struct MonoClass * * interfaces_full, int * interface_offsets_full, struct MonoClass * ic)
{
  int D.27774;
  unsigned int i.188;
  unsigned int D.27776;
  int * D.27777;
  int i;

  i = find_interface (num_ifaces, interfaces_full, ic);
  if (1 != 0) goto <D.27772>; else goto <D.27773>;
  <D.27772>:
  i.188 = (unsigned int) i;
  D.27776 = i.188 * 4;
  D.27777 = interface_offsets_full + D.27776;
  D.27774 = *D.27777;
  return D.27774;
  <D.27773>:
  D.27774 = -1;
  return D.27774;
}


find_interface (int num_ifaces, struct MonoClass * * interfaces_full, struct MonoClass * ic)
{
  int D.27781;
  int D.27784;
  unsigned int m.189;
  unsigned int D.27786;
  struct MonoClass * * D.27787;
  struct MonoClass * D.27788;
  short unsigned int D.27797;
  short unsigned int D.27798;
  int m;
  int l;

  l = 0;
  if (num_ifaces == 0) goto <D.27779>; else goto <D.27780>;
  <D.27779>:
  D.27781 = -1;
  return D.27781;
  <D.27780>:
  <D.21829>:
  if (l > num_ifaces) goto <D.27782>; else goto <D.27783>;
  <D.27782>:
  D.27781 = -1;
  return D.27781;
  <D.27783>:
  D.27784 = l + num_ifaces;
  m = D.27784 / 2;
  m.189 = (unsigned int) m;
  D.27786 = m.189 * 4;
  D.27787 = interfaces_full + D.27786;
  D.27788 = *D.27787;
  if (D.27788 == ic) goto <D.27789>; else goto <D.27790>;
  <D.27789>:
  D.27781 = m;
  return D.27781;
  <D.27790>:
  if (l == num_ifaces) goto <D.27791>; else goto <D.27792>;
  <D.27791>:
  D.27781 = -1;
  return D.27781;
  <D.27792>:
  m.189 = (unsigned int) m;
  D.27786 = m.189 * 4;
  D.27787 = interfaces_full + D.27786;
  D.27788 = *D.27787;
  if (D.27788 == 0B) goto <D.27793>; else goto <D.27796>;
  <D.27796>:
  m.189 = (unsigned int) m;
  D.27786 = m.189 * 4;
  D.27787 = interfaces_full + D.27786;
  D.27788 = *D.27787;
  D.27797 = D.27788->interface_id;
  D.27798 = ic->interface_id;
  if (D.27797 > D.27798) goto <D.27793>; else goto <D.27794>;
  <D.27793>:
  num_ifaces = m + -1;
  goto <D.27795>;
  <D.27794>:
  l = m + 1;
  <D.27795>:
  goto <D.21829>;
}


set_interface_and_offset (int num_ifaces, struct MonoClass * * interfaces_full, int * interface_offsets_full, struct MonoClass * ic, int offset, mono_bool force_set)
{
  mono_bool D.27804;
  unsigned int i.190;
  unsigned int D.27806;
  int * D.27807;
  struct MonoClass * * D.27808;
  struct MonoClass * D.27809;
  short unsigned int D.27812;
  short unsigned int D.27813;
  unsigned int end.191;
  unsigned int D.27818;
  struct MonoClass * * D.27819;
  struct MonoClass * D.27820;
  sizetype i.192;
  sizetype D.27822;
  sizetype D.27823;
  struct MonoClass * * D.27824;
  const void * D.27825;
  int D.27826;
  unsigned int D.27827;
  unsigned int D.27828;
  int * D.27829;
  const void * D.27830;
  int i;

  i = find_interface (num_ifaces, interfaces_full, ic);
  if (i >= 0) goto <D.27800>; else goto <D.27801>;
  <D.27800>:
  if (force_set == 0) goto <D.27802>; else goto <D.27803>;
  <D.27802>:
  D.27804 = 1;
  return D.27804;
  <D.27803>:
  i.190 = (unsigned int) i;
  D.27806 = i.190 * 4;
  D.27807 = interface_offsets_full + D.27806;
  *D.27807 = offset;
  D.27804 = 0;
  return D.27804;
  <D.27801>:
  i = 0;
  goto <D.21853>;
  <D.21852>:
  i.190 = (unsigned int) i;
  D.27806 = i.190 * 4;
  D.27808 = interfaces_full + D.27806;
  D.27809 = *D.27808;
  if (D.27809 != 0B) goto <D.27810>; else goto <D.27811>;
  <D.27810>:
  {
    int end;

    i.190 = (unsigned int) i;
    D.27806 = i.190 * 4;
    D.27808 = interfaces_full + D.27806;
    D.27809 = *D.27808;
    D.27812 = D.27809->interface_id;
    D.27813 = ic->interface_id;
    if (D.27812 < D.27813) goto <D.27814>; else goto <D.27815>;
    <D.27814>:
    // predicted unlikely by continue predictor.
    goto <D.21847>;
    <D.27815>:
    end = i + 1;
    goto <D.21849>;
    <D.21848>:
    end = end + 1;
    <D.21849>:
    if (end < num_ifaces) goto <D.27816>; else goto <D.21850>;
    <D.27816>:
    end.191 = (unsigned int) end;
    D.27818 = end.191 * 4;
    D.27819 = interfaces_full + D.27818;
    D.27820 = *D.27819;
    if (D.27820 != 0B) goto <D.21848>; else goto <D.21850>;
    <D.21850>:
    i.192 = (sizetype) i;
    D.27822 = i.192 + 1;
    D.27823 = D.27822 * 4;
    D.27824 = interfaces_full + D.27823;
    i.190 = (unsigned int) i;
    D.27806 = i.190 * 4;
    D.27825 = interfaces_full + D.27806;
    D.27826 = end - i;
    D.27827 = (unsigned int) D.27826;
    D.27828 = D.27827 * 4;
    memmove (D.27824, D.27825, D.27828);
    i.192 = (sizetype) i;
    D.27822 = i.192 + 1;
    D.27823 = D.27822 * 4;
    D.27829 = interface_offsets_full + D.27823;
    i.190 = (unsigned int) i;
    D.27806 = i.190 * 4;
    D.27830 = interface_offsets_full + D.27806;
    D.27826 = end - i;
    D.27827 = (unsigned int) D.27826;
    D.27828 = D.27827 * 4;
    memmove (D.27829, D.27830, D.27828);
  }
  <D.27811>:
  i.190 = (unsigned int) i;
  D.27806 = i.190 * 4;
  D.27808 = interfaces_full + D.27806;
  *D.27808 = ic;
  i.190 = (unsigned int) i;
  D.27806 = i.190 * 4;
  D.27807 = interface_offsets_full + D.27806;
  *D.27807 = offset;
  goto <D.21851>;
  <D.21847>:
  i = i + 1;
  <D.21853>:
  if (i < num_ifaces) goto <D.21852>; else goto <D.21851>;
  <D.21851>:
  D.27804 = 0;
  return D.27804;
}


memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.27832;
  unsigned int D.27833;

  D.27833 = __builtin_object_size (__dest, 0);
  D.27832 = __builtin___memmove_chk (__dest, __src, __len, D.27833);
  return D.27832;
}


mono_class_check_vtable_constraints (struct MonoClass * class, struct GList * in_setup)
{
  struct MonoGenericClass * D.27835;
  gboolean D.27838;
  unsigned char D.27839;
  _Bool D.27840;
  struct MonoClass * D.27841;
  struct MonoClass * D.27842;
  unsigned char D.27843;
  gchar * D.27846;
  struct MonoType * D.27847;
  unsigned char D.27848;
  int D.27853;
  int D.27855;
  int D.27856;
  gchar * D.27859;
  <unnamed-unsigned:22> D.27860;
  int D.27861;
  struct MonoGenericInst * ginst;
  int i;

  D.27835 = class->generic_class;
  if (D.27835 == 0B) goto <D.27836>; else goto <D.27837>;
  <D.27836>:
  mono_class_setup_vtable_full (class, in_setup);
  D.27839 = class->exception_type;
  D.27840 = D.27839 == 0;
  D.27838 = (gboolean) D.27840;
  return D.27838;
  <D.27837>:
  D.27841 = mono_class_get_generic_type_definition (class);
  mono_class_setup_vtable_full (D.27841, in_setup);
  D.27835 = class->generic_class;
  D.27842 = D.27835->container_class;
  D.27843 = D.27842->exception_type;
  if (D.27843 != 0) goto <D.27844>; else goto <D.27845>;
  <D.27844>:
  D.27846 = monoeg_strdup ("Failed to load generic definition vtable");
  mono_class_set_failure (class, 7, D.27846);
  D.27838 = 0;
  return D.27838;
  <D.27845>:
  D.27835 = class->generic_class;
  ginst = D.27835->context.class_inst;
  i = 0;
  goto <D.21998>;
  <D.21997>:
  {
    struct MonoClass * arg;

    D.27847 = ginst->type_argv[i];
    D.27848 = D.27847->type;
    if (D.27848 != 21) goto <D.27849>; else goto <D.27850>;
    <D.27849>:
    // predicted unlikely by continue predictor.
    goto <D.21996>;
    <D.27850>:
    D.27847 = ginst->type_argv[i];
    arg = mono_class_from_mono_type (D.27847);
    D.27853 = mono_class_has_gtd_parent (class, arg);
    if (D.27853 != 0) goto <D.27851>; else goto <D.27854>;
    <D.27854>:
    D.27855 = mono_class_has_gtd_parent (arg, class);
    if (D.27855 != 0) goto <D.27851>; else goto <D.27852>;
    <D.27851>:
    // predicted unlikely by continue predictor.
    goto <D.21996>;
    <D.27852>:
    D.27856 = mono_class_check_vtable_constraints (arg, in_setup);
    if (D.27856 == 0) goto <D.27857>; else goto <D.27858>;
    <D.27857>:
    D.27859 = monoeg_g_strdup_printf ("Failed to load generic parameter %d", i);
    mono_class_set_failure (class, 7, D.27859);
    D.27838 = 0;
    return D.27838;
    <D.27858>:
  }
  <D.21996>:
  i = i + 1;
  <D.21998>:
  D.27860 = ginst->type_argc;
  D.27861 = (int) D.27860;
  if (D.27861 > i) goto <D.21997>; else goto <D.21999>;
  <D.21999>:
  D.27838 = 1;
  return D.27838;
}


mono_class_setup_vtable_full (struct MonoClass * class, struct GList * in_setup)
{
  struct MonoMethod * * D.27863;
  unsigned int D.27868;
  unsigned int D.27869;
  unsigned char D.27871;
  unsigned char D.27873;
  struct GList * D.27876;
  long unsigned int D.27881;
  long unsigned int D.27882;
  struct MonoGenericClass * D.27883;
  int D.27886;
  struct MonoClass * D.27889;
  struct MonoImage * D.27891;
  unsigned char D.27892;
  unsigned char D.27893;
  struct MonoMethod * * overrides.193;
  int onum.194;
  gchar * D.27902;
  struct MonoMethod * * overrides;
  struct MonoGenericContext * context;
  guint32 type_token;
  int onum;
  gboolean ok;

  try
    {
      onum = 0;
      ok = 1;
      D.27863 = class->vtable;
      if (D.27863 != 0B) goto <D.27864>; else goto <D.27865>;
      <D.27864>:
      return;
      <D.27865>:
      D.27868 = class->flags;
      D.27869 = D.27868 & 32;
      if (D.27869 != 0) goto <D.27866>; else goto <D.27870>;
      <D.27870>:
      D.27871 = class->byval_arg.type;
      if (D.27871 == 19) goto <D.27866>; else goto <D.27872>;
      <D.27872>:
      D.27871 = class->byval_arg.type;
      if (D.27871 == 30) goto <D.27866>; else goto <D.27867>;
      <D.27866>:
      mono_class_setup_methods (class);
      return;
      <D.27867>:
      D.27873 = class->exception_type;
      if (D.27873 != 0) goto <D.27874>; else goto <D.27875>;
      <D.27874>:
      return;
      <D.27875>:
      D.27876 = monoeg_g_list_find (in_setup, class);
      if (D.27876 != 0B) goto <D.27877>; else goto <D.27878>;
      <D.27877>:
      return;
      <D.27878>:
      mono_loader_lock ();
      D.27863 = class->vtable;
      if (D.27863 != 0B) goto <D.27879>; else goto <D.27880>;
      <D.27879>:
      mono_loader_unlock ();
      return;
      <D.27880>:
      D.27881 = mono_stats.generic_vtable_count;
      D.27882 = D.27881 + 1;
      mono_stats.generic_vtable_count = D.27882;
      in_setup = monoeg_g_list_prepend (in_setup, class);
      D.27883 = class->generic_class;
      if (D.27883 != 0B) goto <D.27884>; else goto <D.27885>;
      <D.27884>:
      D.27886 = mono_class_check_vtable_constraints (class, in_setup);
      if (D.27886 == 0) goto <D.27887>; else goto <D.27888>;
      <D.27887>:
      mono_loader_unlock ();
      monoeg_g_list_remove (in_setup, class);
      return;
      <D.27888>:
      context = mono_class_get_context (class);
      D.27883 = class->generic_class;
      D.27889 = D.27883->container_class;
      type_token = D.27889->type_token;
      goto <D.27890>;
      <D.27885>:
      context = class->generic_container;
      type_token = class->type_token;
      <D.27890>:
      D.27891 = class->image;
      D.27892 = BIT_FIELD_REF <*D.27891, 8, 128>;
      D.27893 = D.27892 & 8;
      if (D.27893 != 0) goto <D.27894>; else goto <D.27895>;
      <D.27894>:
      mono_reflection_get_dynamic_overrides (class, &overrides, &onum);
      goto <D.27896>;
      <D.27895>:
      D.27891 = class->image;
      ok = mono_class_get_overrides_full (D.27891, type_token, &overrides, &onum, context);
      <D.27896>:
      if (ok != 0) goto <D.27897>; else goto <D.27898>;
      <D.27897>:
      overrides.193 = overrides;
      onum.194 = onum;
      mono_class_setup_vtable_general (class, overrides.193, onum.194, in_setup);
      goto <D.27901>;
      <D.27898>:
      D.27902 = monoeg_strdup ("Could not load list of method overrides");
      mono_class_set_failure (class, 7, D.27902);
      <D.27901>:
      overrides.193 = overrides;
      monoeg_g_free (overrides.193);
      mono_loader_unlock ();
      monoeg_g_list_remove (in_setup, class);
      return;
    }
  finally
    {
      overrides = {CLOBBER};
      onum = {CLOBBER};
    }
}


mono_class_has_gtd_parent (struct MonoClass * klass, struct MonoClass * parent)
{
  gboolean D.27905;
  int iftmp.195;
  short unsigned int D.27909;
  short unsigned int D.27910;
  struct MonoClass * * D.27912;
  sizetype D.27913;
  sizetype D.27914;
  sizetype D.27915;
  struct MonoClass * * D.27916;
  struct MonoClass * D.27917;
  struct MonoClass * D.27918;

  klass = mono_class_get_generic_type_definition (klass);
  parent = mono_class_get_generic_type_definition (parent);
  mono_class_setup_supertypes (klass);
  mono_class_setup_supertypes (parent);
  D.27909 = klass->idepth;
  D.27910 = parent->idepth;
  if (D.27909 >= D.27910) goto <D.27911>; else goto <D.27907>;
  <D.27911>:
  D.27912 = klass->supertypes;
  D.27910 = parent->idepth;
  D.27913 = (sizetype) D.27910;
  D.27914 = D.27913 + 1073741823;
  D.27915 = D.27914 * 4;
  D.27916 = D.27912 + D.27915;
  D.27917 = *D.27916;
  D.27918 = mono_class_get_generic_type_definition (D.27917);
  if (D.27918 == parent) goto <D.27919>; else goto <D.27907>;
  <D.27919>:
  iftmp.195 = 1;
  goto <D.27908>;
  <D.27907>:
  iftmp.195 = 0;
  <D.27908>:
  D.27905 = iftmp.195;
  return D.27905;
}


mono_class_setup_vtable (struct MonoClass * class)
{
  mono_class_setup_vtable_full (class, 0B);
}


mono_class_setup_vtable_general (struct MonoClass * class, struct MonoMethod * * overrides, int onum, struct GList * in_setup)
{
  struct MonoMethod * * D.27921;
  int D.27926;
  int D.27929;
  const char * D.27932;
  gchar * D.27933;
  void * * D.27936;
  unsigned int i.196;
  unsigned int D.27938;
  void * * D.27939;
  unsigned int D.27940;
  unsigned int max_vtsize.197;
  unsigned int D.27942;
  unsigned int i.198;
  unsigned int D.27944;
  struct MonoClass * D.27945;
  unsigned char D.27948;
  gchar * D.27951;
  int D.27952;
  unsigned int D.27953;
  unsigned int D.27954;
  int D.27955;
  unsigned int max_vtsize.199;
  unsigned int D.27959;
  short unsigned int D.27962;
  struct MonoGenericClass * D.27963;
  unsigned char D.27966;
  int D.27969;
  unsigned int D.27970;
  unsigned int D.27971;
  int D.27972;
  struct MonoMethod * * D.27973;
  struct MonoMethod * * D.27974;
  struct MonoMethod * D.27975;
  struct MonoGenericContext * D.27978;
  int D.27979;
  const char * D.27982;
  struct MonoMethod * * D.27983;
  struct MonoMethod * D.27984;
  short int D.27985;
  struct MonoMethod * * D.27986;
  struct MonoMethod * * D.27989;
  struct MonoMethod * * D.27992;
  struct MonoMethod * D.27993;
  short int D.27994;
  struct MonoMethod * * D.27997;
  struct MonoMethod * D.27998;
  short int D.27999;
  unsigned int i.200;
  struct MonoMethod * * D.28005;
  int D.28006;
  unsigned int D.28007;
  unsigned int D.28008;
  struct MonoClass * * D.28009;
  unsigned int i.201;
  unsigned int D.28011;
  struct MonoClass * * D.28012;
  int D.28015;
  unsigned int D.28016;
  unsigned int D.28017;
  struct MonoMethod * * D.28018;
  int D.28019;
  unsigned int D.28020;
  unsigned int D.28021;
  struct MonoMethod * * D.28022;
  struct MonoMethod * D.28023;
  unsigned int j.202;
  unsigned int D.28025;
  unsigned char D.28027;
  short unsigned int D.28028;
  int D.28029;
  int D.28030;
  short int D.28033;
  short int D.28036;
  int D.28038;
  _Bool D.28039;
  long int D.28040;
  long int D.28041;
  unsigned int stelemref_slot.203;
  unsigned int D.28045;
  struct MonoMethod * * D.28046;
  unsigned int D.28047;
  struct MonoMethod * * D.28048;
  struct MonoClass * D.28051;
  unsigned int D.28052;
  unsigned int D.28053;
  unsigned char D.28055;
  int D.28059;
  unsigned int dslot.204;
  unsigned int D.28061;
  struct MonoMethod * * D.28062;
  sizetype i.205;
  sizetype D.28064;
  sizetype D.28065;
  struct MonoMethod * * D.28066;
  struct MonoMethod * D.28067;
  struct MonoMethod * D.28068;
  short int D.28069;
  struct MonoMethod * D.28072;
  <unnamed type> D.28073;
  struct MonoClass * * D.28077;
  struct MonoClass * * D.28078;
  unsigned char D.28079;
  struct MonoClass * * D.28083;
  unsigned int implemented_interfaces_index.206;
  unsigned int D.28085;
  struct MonoClass * * D.28086;
  struct MonoClass * D.28087;
  short unsigned int D.28090;
  int D.28091;
  struct MonoMethod * * D.28093;
  unsigned int im_index.207;
  unsigned int D.28095;
  struct MonoMethod * * D.28096;
  short int D.28097;
  int D.28098;
  struct MonoMethod * iftmp.208;
  short unsigned int D.28103;
  int D.28104;
  int D.28105;
  unsigned int im_slot.209;
  unsigned int D.28111;
  struct MonoMethod * * D.28112;
  struct MonoMethod * D.28113;
  _Bool D.28114;
  int D.28115;
  int D.28116;
  short int D.28119;
  short int D.28122;
  int D.28128;
  struct MonoMethod * * D.28129;
  unsigned int cm_index.210;
  unsigned int D.28131;
  struct MonoMethod * * D.28132;
  int D.28135;
  short int D.28138;
  _Bool D.28143;
  long int D.28144;
  long int D.28145;
  unsigned int im_index.211;
  unsigned int D.28149;
  short unsigned int D.28150;
  int D.28151;
  unsigned int D.28152;
  unsigned int D.28153;
  unsigned int im_index.212;
  unsigned int D.28157;
  struct MonoMethod * * D.28158;
  short int D.28159;
  int D.28160;
  short unsigned int D.28161;
  int D.28162;
  int D.28163;
  unsigned int im_slot.213;
  unsigned int D.28167;
  struct MonoMethod * * D.28168;
  struct MonoMethod * D.28169;
  unsigned int im_index.214;
  short unsigned int D.28173;
  int D.28174;
  int D.28175;
  _Bool D.28178;
  _Bool D.28179;
  _Bool D.28180;
  int D.22265;
  const char * D.28183;
  const char * D.28184;
  int D.28187;
  short unsigned int D.28192;
  int D.28193;
  int D.28194;
  <unnamed type> D.28197;
  int D.28201;
  int D.28204;
  gchar * D.28207;
  short int D.28208;
  int D.28209;
  _Bool D.28210;
  long int D.28211;
  long int D.28212;
  unsigned char D.28217;
  short int D.28222;
  unsigned int D.28223;
  unsigned int D.28224;
  int cur_slot.215;
  short int D.28232;
  int D.28233;
  unsigned int D.28236;
  unsigned int D.28237;
  struct MonoMethod * * D.28238;
  struct MonoClass * D.28239;
  unsigned int D.28240;
  unsigned int D.28241;
  unsigned char D.28244;
  short int D.28249;
  _Bool D.28250;
  long int D.28251;
  long int D.28252;
  unsigned int D.28255;
  unsigned int D.28256;
  struct MonoMethod * * D.28257;
  <unnamed type> D.28260;
  struct MonoMethod * D.28263;
  struct MonoMethod * * D.28266;
  struct MonoMethod * D.28267;
  short unsigned int D.28277;
  int D.28278;
  int D.28279;
  char * iftmp.216;
  gchar * D.28284;
  int D.28287;
  int D.28288;
  int D.28290;
  _Bool D.28293;
  long int D.28294;
  long int D.28295;
  struct MonoMethod * * D.28302;
  unsigned int D.28303;
  unsigned int D.28304;
  int D.28305;
  int D.28307;
  int mono_print_vtable.217;
  int D.28311;
  guint8 * D.28314;
  int D.28315;
  sizetype D.28316;
  guint8 * D.28317;
  unsigned char D.28318;
  int D.28319;
  int D.28320;
  int D.28321;
  int D.28322;
  struct MonoType * D.28325;
  char * D.28326;
  short int D.28329;
  int D.28330;
  char * D.28331;
  const char * D.28334;
  const char * D.28335;
  struct MonoClass * * D.28336;
  int D.28337;
  int D.28338;
  short unsigned int D.28339;
  int D.28340;
  struct MonoType * D.28341;
  char * D.28342;
  struct MonoClass * * D.28343;
  struct MonoClass * * D.28344;
  int D.28345;
  int D.28346;
  char * D.28347;
  short unsigned int D.28348;
  int D.28349;
  gchar * D.28350;
  struct MonoError error;
  struct MonoClass * k;
  struct MonoClass * ic;
  struct MonoMethod * * vtable;
  int i;
  int max_vtsize;
  int max_iid;
  int cur_slot;
  struct GPtrArray * ifaces;
  struct GHashTable * override_map;
  gboolean security_enabled;
  struct MonoMethod * cm;
  void * class_iter;
  struct GSList * virt_methods;
  struct GSList * l;
  int stelemref_slot;
  void fail = <<< error >>>;

  try
    {
      max_vtsize = 0;
      cur_slot = 0;
      ifaces = 0B;
      override_map = 0B;
      security_enabled = mono_is_security_manager_active ();
      virt_methods = 0B;
      stelemref_slot = 0;
      D.27921 = class->vtable;
      if (D.27921 != 0B) goto <D.27922>; else goto <D.27923>;
      <D.27922>:
      return;
      <D.27923>:
      if (overrides != 0B) goto <D.27924>; else goto <D.27925>;
      <D.27924>:
      D.27926 = verify_class_overrides (class, overrides, onum);
      if (D.27926 == 0) goto <D.27927>; else goto <D.27928>;
      <D.27927>:
      return;
      <D.27928>:
      <D.27925>:
      ifaces = mono_class_get_implemented_interfaces (class, &error);
      D.27929 = mono_error_ok (&error);
      if (D.27929 == 0) goto <D.27930>; else goto <D.27931>;
      <D.27930>:
      {
        char * name;

        name = mono_type_get_full_name (class);
        D.27932 = mono_error_get_message (&error);
        D.27933 = monoeg_g_strdup_printf ("Could not resolve %s interfaces due to %s", name, D.27932);
        mono_class_set_failure (class, 7, D.27933);
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        return;
      }
      <D.27931>:
      if (ifaces != 0B) goto <D.27934>; else goto <D.27935>;
      <D.27934>:
      i = 0;
      goto <D.22174>;
      <D.22173>:
      {
        struct MonoClass * ic;

        D.27936 = ifaces->pdata;
        i.196 = (unsigned int) i;
        D.27938 = i.196 * 4;
        D.27939 = D.27936 + D.27938;
        ic = *D.27939;
        D.27940 = ic->method.count;
        max_vtsize.197 = (unsigned int) max_vtsize;
        D.27942 = D.27940 + max_vtsize.197;
        max_vtsize = (int) D.27942;
      }
      i = i + 1;
      <D.22174>:
      i.198 = (unsigned int) i;
      D.27944 = ifaces->len;
      if (i.198 < D.27944) goto <D.22173>; else goto <D.22175>;
      <D.22175>:
      monoeg_g_ptr_array_free (ifaces, 1);
      ifaces = 0B;
      <D.27935>:
      D.27945 = class->parent;
      if (D.27945 != 0B) goto <D.27946>; else goto <D.27947>;
      <D.27946>:
      D.27945 = class->parent;
      mono_class_init (D.27945);
      D.27945 = class->parent;
      mono_class_setup_vtable_full (D.27945, in_setup);
      D.27945 = class->parent;
      D.27948 = D.27945->exception_type;
      if (D.27948 != 0) goto <D.27949>; else goto <D.27950>;
      <D.27949>:
      {
        char * name;

        D.27945 = class->parent;
        name = mono_type_get_full_name (D.27945);
        D.27951 = monoeg_g_strdup_printf ("Parent %s failed to load", name);
        mono_class_set_failure (class, 7, D.27951);
        monoeg_g_free (name);
        return;
      }
      <D.27950>:
      D.27945 = class->parent;
      D.27952 = D.27945->vtable_size;
      max_vtsize = D.27952 + max_vtsize;
      D.27945 = class->parent;
      cur_slot = D.27945->vtable_size;
      <D.27947>:
      D.27953 = class->method.count;
      max_vtsize.197 = (unsigned int) max_vtsize;
      D.27954 = D.27953 + max_vtsize.197;
      max_vtsize = (int) D.27954;
      D.27955 = mono_class_need_stelemref_method (class);
      if (D.27955 != 0) goto <D.27956>; else goto <D.27957>;
      <D.27956>:
      stelemref_slot = cur_slot;
      max_vtsize = max_vtsize + 1;
      cur_slot = cur_slot + 1;
      <D.27957>:
      max_vtsize.199 = (unsigned int) max_vtsize;
      D.27959 = max_vtsize.199 * 4;
      vtable = __builtin_alloca (D.27959);
      max_vtsize.199 = (unsigned int) max_vtsize;
      D.27959 = max_vtsize.199 * 4;
      memset (vtable, 0, D.27959);
      cur_slot = setup_interface_offsets (class, cur_slot, 1);
      if (cur_slot == -1) goto <D.27960>; else goto <D.27961>;
      <D.27960>:
      return;
      <D.27961>:
      D.27962 = class->max_interface_id;
      max_iid = (int) D.27962;
      D.27963 = class->generic_class;
      if (D.27963 != 0B) goto <D.27964>; else goto <D.27965>;
      <D.27964>:
      {
        struct MonoError error;
        struct MonoClass * gklass;
        struct MonoMethod * * tmp;

        try
          {
            D.27963 = class->generic_class;
            gklass = D.27963->container_class;
            mono_class_setup_vtable_full (gklass, in_setup);
            D.27966 = gklass->exception_type;
            if (D.27966 != 0) goto <D.27967>; else goto <D.27968>;
            <D.27967>:
            mono_class_set_failure (class, 7, 0B);
            return;
            <D.27968>:
            D.27969 = gklass->vtable_size;
            D.27970 = (unsigned int) D.27969;
            D.27971 = D.27970 * 4;
            D.27972 = (int) D.27971;
            tmp = mono_class_alloc0 (class, D.27972);
            D.27969 = gklass->vtable_size;
            class->vtable_size = D.27969;
            i = 0;
            goto <D.22183>;
            <D.22182>:
            D.27973 = gklass->vtable;
            i.196 = (unsigned int) i;
            D.27938 = i.196 * 4;
            D.27974 = D.27973 + D.27938;
            D.27975 = *D.27974;
            if (D.27975 != 0B) goto <D.27976>; else goto <D.27977>;
            <D.27976>:
            {
              struct MonoMethod * inflated;

              D.27973 = gklass->vtable;
              i.196 = (unsigned int) i;
              D.27938 = i.196 * 4;
              D.27974 = D.27973 + D.27938;
              D.27975 = *D.27974;
              D.27978 = mono_class_get_context (class);
              inflated = mono_class_inflate_generic_method_full_checked (D.27975, class, D.27978, &error);
              D.27979 = mono_error_ok (&error);
              if (D.27979 == 0) goto <D.27980>; else goto <D.27981>;
              <D.27980>:
              {
                char * err_msg;

                D.27982 = mono_error_get_message (&error);
                err_msg = monoeg_g_strdup_printf ("Could not inflate method due to %s", D.27982);
                mono_class_set_failure (class, 7, err_msg);
                monoeg_g_free (err_msg);
                mono_error_cleanup (&error);
                return;
              }
              <D.27981>:
              i.196 = (unsigned int) i;
              D.27938 = i.196 * 4;
              D.27983 = tmp + D.27938;
              *D.27983 = inflated;
              i.196 = (unsigned int) i;
              D.27938 = i.196 * 4;
              D.27983 = tmp + D.27938;
              D.27984 = *D.27983;
              D.27973 = gklass->vtable;
              i.196 = (unsigned int) i;
              D.27938 = i.196 * 4;
              D.27974 = D.27973 + D.27938;
              D.27975 = *D.27974;
              D.27985 = D.27975->slot;
              D.27984->slot = D.27985;
            }
            <D.27977>:
            i = i + 1;
            <D.22183>:
            D.27969 = gklass->vtable_size;
            if (D.27969 > i) goto <D.22182>; else goto <D.22184>;
            <D.22184>:
            mono_memory_barrier ();
            class->vtable = tmp;
            D.27986 = class->methods;
            if (D.27986 != 0B) goto <D.27987>; else goto <D.27988>;
            <D.27987>:
            D.27989 = gklass->methods;
            if (D.27989 != 0B) goto <D.27990>; else goto <D.27991>;
            <D.27990>:
            i = 0;
            goto <D.22186>;
            <D.22185>:
            D.27986 = class->methods;
            i.196 = (unsigned int) i;
            D.27938 = i.196 * 4;
            D.27992 = D.27986 + D.27938;
            D.27993 = *D.27992;
            D.27994 = D.27993->slot;
            if (D.27994 == -1) goto <D.27995>; else goto <D.27996>;
            <D.27995>:
            D.27986 = class->methods;
            i.196 = (unsigned int) i;
            D.27938 = i.196 * 4;
            D.27992 = D.27986 + D.27938;
            D.27993 = *D.27992;
            D.27989 = gklass->methods;
            i.196 = (unsigned int) i;
            D.27938 = i.196 * 4;
            D.27997 = D.27989 + D.27938;
            D.27998 = *D.27997;
            D.27999 = D.27998->slot;
            D.27993->slot = D.27999;
            <D.27996>:
            i = i + 1;
            <D.22186>:
            i.200 = (unsigned int) i;
            D.27953 = class->method.count;
            if (i.200 < D.27953) goto <D.22185>; else goto <D.22187>;
            <D.22187>:
            <D.27991>:
            <D.27988>:
            return;
          }
        finally
          {
            error = {CLOBBER};
          }
      }
      <D.27965>:
      D.27945 = class->parent;
      if (D.27945 != 0B) goto <D.28001>; else goto <D.28002>;
      <D.28001>:
      D.27945 = class->parent;
      D.27952 = D.27945->vtable_size;
      if (D.27952 != 0) goto <D.28003>; else goto <D.28004>;
      <D.28003>:
      {
        struct MonoClass * parent;
        int i;

        parent = class->parent;
        D.28005 = parent->vtable;
        D.28006 = parent->vtable_size;
        D.28007 = (unsigned int) D.28006;
        D.28008 = D.28007 * 4;
        memcpy (vtable, D.28005, D.28008);
        i = 0;
        goto <D.22198>;
        <D.22197>:
        {
          struct MonoClass * parent_interface;
          int interface_offset;

          D.28009 = parent->interfaces_packed;
          i.201 = (unsigned int) i;
          D.28011 = i.201 * 4;
          D.28012 = D.28009 + D.28011;
          parent_interface = *D.28012;
          interface_offset = mono_class_interface_offset (class, parent_interface);
          D.28006 = parent->vtable_size;
          if (D.28006 <= interface_offset) goto <D.28013>; else goto <D.28014>;
          <D.28013>:
          {
            int parent_interface_offset;
            int j;

            parent_interface_offset = mono_class_interface_offset (parent, parent_interface);
            mono_class_setup_methods (parent_interface);
            j = 0;
            goto <D.22195>;
            <D.22194>:
            D.28015 = interface_offset + j;
            D.28016 = (unsigned int) D.28015;
            D.28017 = D.28016 * 4;
            D.28018 = vtable + D.28017;
            D.28005 = parent->vtable;
            D.28019 = parent_interface_offset + j;
            D.28020 = (unsigned int) D.28019;
            D.28021 = D.28020 * 4;
            D.28022 = D.28005 + D.28021;
            D.28023 = *D.28022;
            *D.28018 = D.28023;
            j = j + 1;
            <D.22195>:
            j.202 = (unsigned int) j;
            D.28025 = parent_interface->method.count;
            if (j.202 < D.28025) goto <D.28026>; else goto <D.22196>;
            <D.28026>:
            D.28027 = class->exception_type;
            if (D.28027 == 0) goto <D.22194>; else goto <D.22196>;
            <D.22196>:
          }
          <D.28014>:
        }
        i = i + 1;
        <D.22198>:
        D.28028 = parent->interface_offsets_count;
        D.28029 = (int) D.28028;
        if (D.28029 > i) goto <D.22197>; else goto <D.22199>;
        <D.22199>:
      }
      <D.28004>:
      <D.28002>:
      D.28030 = mono_class_need_stelemref_method (class);
      if (D.28030 != 0) goto <D.28031>; else goto <D.28032>;
      <D.28031>:
      {
        struct MonoMethod * method;

        method = mono_marshal_get_virtual_stelemref (class);
        D.28033 = method->slot;
        if (D.28033 == 0) goto <D.28034>; else goto <D.28035>;
        <D.28034>:
        D.28036 = (short int) stelemref_slot;
        method->slot = D.28036;
        goto <D.28037>;
        <D.28035>:
        D.28033 = method->slot;
        D.28038 = (int) D.28033;
        D.28039 = D.28038 != stelemref_slot;
        D.28040 = (long int) D.28039;
        D.28041 = __builtin_expect (D.28040, 0);
        if (D.28041 != 0) goto <D.28042>; else goto <D.28043>;
        <D.28042>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4263, "method->slot == stelemref_slot");
        <D.28043>:
        <D.28037>:
        stelemref_slot.203 = (unsigned int) stelemref_slot;
        D.28045 = stelemref_slot.203 * 4;
        D.28046 = vtable + D.28045;
        *D.28046 = method;
      }
      <D.28032>:
      i = 0;
      goto <D.22204>;
      <D.22203>:
      {
        struct MonoMethod * decl;

        i.196 = (unsigned int) i;
        D.28047 = i.196 * 8;
        D.28048 = overrides + D.28047;
        decl = *D.28048;
        D.28051 = decl->klass;
        D.28052 = D.28051->flags;
        D.28053 = D.28052 & 32;
        if (D.28053 != 0) goto <D.28049>; else goto <D.28054>;
        <D.28054>:
        D.28051 = decl->klass;
        D.28055 = D.28051->byval_arg.type;
        if (D.28055 == 19) goto <D.28049>; else goto <D.28056>;
        <D.28056>:
        D.28051 = decl->klass;
        D.28055 = D.28051->byval_arg.type;
        if (D.28055 == 30) goto <D.28049>; else goto <D.28050>;
        <D.28049>:
        {
          int dslot;

          dslot = mono_method_get_vtable_slot (decl);
          if (dslot == -1) goto <D.28057>; else goto <D.28058>;
          <D.28057>:
          mono_class_set_failure (class, 7, 0B);
          return;
          <D.28058>:
          D.28051 = decl->klass;
          D.28059 = mono_class_interface_offset (class, D.28051);
          dslot = D.28059 + dslot;
          dslot.204 = (unsigned int) dslot;
          D.28061 = dslot.204 * 4;
          D.28062 = vtable + D.28061;
          i.205 = (sizetype) i;
          D.28064 = i.205 * 8;
          D.28065 = D.28064 + 4;
          D.28066 = overrides + D.28065;
          D.28067 = *D.28066;
          *D.28062 = D.28067;
          dslot.204 = (unsigned int) dslot;
          D.28061 = dslot.204 * 4;
          D.28062 = vtable + D.28061;
          D.28068 = *D.28062;
          D.28069 = (short int) dslot;
          D.28068->slot = D.28069;
          if (override_map == 0B) goto <D.28070>; else goto <D.28071>;
          <D.28070>:
          override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
          <D.28071>:
          i.196 = (unsigned int) i;
          D.28047 = i.196 * 8;
          D.28048 = overrides + D.28047;
          D.28072 = *D.28048;
          i.205 = (sizetype) i;
          D.28064 = i.205 * 8;
          D.28065 = D.28064 + 4;
          D.28066 = overrides + D.28065;
          D.28067 = *D.28066;
          monoeg_g_hash_table_insert_replace (override_map, D.28072, D.28067, 0);
          D.28073 = mono_security_get_mode ();
          if (D.28073 == 1) goto <D.28074>; else goto <D.28075>;
          <D.28074>:
          dslot.204 = (unsigned int) dslot;
          D.28061 = dslot.204 * 4;
          D.28062 = vtable + D.28061;
          D.28068 = *D.28062;
          mono_security_core_clr_check_override (class, D.28068, decl);
          <D.28075>:
        }
        <D.28050>:
      }
      i = i + 1;
      <D.22204>:
      if (i < onum) goto <D.22203>; else goto <D.22205>;
      <D.22205>:
      {
        void * iter;
        struct MonoMethod * cm;

        try
          {
            iter = 0B;
            virt_methods = 0B;
            goto <D.22209>;
            <D.22208>:
            virt_methods = monoeg_g_slist_prepend (virt_methods, cm);
            <D.22209>:
            cm = mono_class_get_virtual_methods (class, &iter);
            if (cm != 0B) goto <D.22208>; else goto <D.22210>;
            <D.22210>:
            D.28027 = class->exception_type;
            if (D.28027 != 0) goto fail; else goto <D.28076>;
            <D.28076>:
          }
        finally
          {
            iter = {CLOBBER};
          }
      }
      i = 0;
      goto <D.22239>;
      <D.22238>:
      {
        struct MonoClass * parent;
        int ic_offset;
        gboolean interface_is_explicitly_implemented_by_class;
        int im_index;

        parent = class->parent;
        D.28077 = class->interfaces_packed;
        i.196 = (unsigned int) i;
        D.27938 = i.196 * 4;
        D.28078 = D.28077 + D.27938;
        ic = *D.28078;
        ic_offset = mono_class_interface_offset (class, ic);
        mono_class_setup_methods (ic);
        D.28079 = ic->exception_type;
        if (D.28079 != 0) goto fail; else goto <D.28080>;
        <D.28080>:
        if (parent != 0B) goto <D.28081>; else goto <D.28082>;
        <D.28081>:
        {
          int implemented_interfaces_index;

          interface_is_explicitly_implemented_by_class = 0;
          implemented_interfaces_index = 0;
          goto <D.22219>;
          <D.22218>:
          D.28083 = class->interfaces;
          implemented_interfaces_index.206 = (unsigned int) implemented_interfaces_index;
          D.28085 = implemented_interfaces_index.206 * 4;
          D.28086 = D.28083 + D.28085;
          D.28087 = *D.28086;
          if (D.28087 == ic) goto <D.28088>; else goto <D.28089>;
          <D.28088>:
          interface_is_explicitly_implemented_by_class = 1;
          goto <D.22217>;
          <D.28089>:
          implemented_interfaces_index = implemented_interfaces_index + 1;
          <D.22219>:
          D.28090 = class->interface_count;
          D.28091 = (int) D.28090;
          if (D.28091 > implemented_interfaces_index) goto <D.22218>; else goto <D.22217>;
          <D.22217>:
        }
        goto <D.28092>;
        <D.28082>:
        interface_is_explicitly_implemented_by_class = 1;
        <D.28092>:
        im_index = 0;
        goto <D.22236>;
        <D.22235>:
        {
          struct MonoMethod * im;
          int im_slot;
          struct MonoMethod * override_im;

          D.28093 = ic->methods;
          im_index.207 = (unsigned int) im_index;
          D.28095 = im_index.207 * 4;
          D.28096 = D.28093 + D.28095;
          im = *D.28096;
          D.28097 = im->slot;
          D.28098 = (int) D.28097;
          im_slot = D.28098 + ic_offset;
          if (override_map != 0B) goto <D.28100>; else goto <D.28101>;
          <D.28100>:
          iftmp.208 = monoeg_g_hash_table_lookup (override_map, im);
          goto <D.28102>;
          <D.28101>:
          iftmp.208 = 0B;
          <D.28102>:
          override_im = iftmp.208;
          D.28103 = im->flags;
          D.28104 = (int) D.28103;
          D.28105 = D.28104 & 16;
          if (D.28105 != 0) goto <D.28106>; else goto <D.28107>;
          <D.28106>:
          // predicted unlikely by continue predictor.
          goto <D.22223>;
          <D.28107>:
          if (override_im == 0B) goto <D.28108>; else goto <D.28109>;
          <D.28108>:
          {
            int cm_index;
            void * iter;
            struct MonoMethod * cm;

            iter = 0B;
            l = virt_methods;
            goto <D.22228>;
            <D.22227>:
            cm = l->data;
            im_slot.209 = (unsigned int) im_slot;
            D.28111 = im_slot.209 * 4;
            D.28112 = vtable + D.28111;
            D.28113 = *D.28112;
            D.28114 = D.28113 == 0B;
            D.28115 = (int) D.28114;
            D.28116 = check_interface_method_override (class, im, cm, 1, interface_is_explicitly_implemented_by_class, D.28115, security_enabled);
            if (D.28116 != 0) goto <D.28117>; else goto <D.28118>;
            <D.28117>:
            im_slot.209 = (unsigned int) im_slot;
            D.28111 = im_slot.209 * 4;
            D.28112 = vtable + D.28111;
            *D.28112 = cm;
            D.28119 = cm->slot;
            if (D.28119 < 0) goto <D.28120>; else goto <D.28121>;
            <D.28120>:
            D.28122 = (short int) im_slot;
            cm->slot = D.28122;
            <D.28121>:
            <D.28118>:
            D.28027 = class->exception_type;
            if (D.28027 != 0) goto fail; else goto <D.28123>;
            <D.28123>:
            l = l->next;
            <D.22228>:
            if (l != 0B) goto <D.22227>; else goto <D.22229>;
            <D.22229>:
            im_slot.209 = (unsigned int) im_slot;
            D.28111 = im_slot.209 * 4;
            D.28112 = vtable + D.28111;
            D.28113 = *D.28112;
            if (D.28113 == 0B) goto <D.28124>; else goto <D.28125>;
            <D.28124>:
            D.27945 = class->parent;
            if (D.27945 != 0B) goto <D.28126>; else goto <D.28127>;
            <D.28126>:
            {
              struct MonoClass * parent;

              parent = class->parent;
              D.28128 = parent->vtable_size;
              cm_index = D.28128 + -1;
              goto <D.22234>;
              <D.22233>:
              {
                struct MonoMethod * cm;

                D.28129 = parent->vtable;
                cm_index.210 = (unsigned int) cm_index;
                D.28131 = cm_index.210 * 4;
                D.28132 = D.28129 + D.28131;
                cm = *D.28132;
                if (cm != 0B) goto <D.28133>; else goto <D.28134>;
                <D.28133>:
                D.28135 = check_interface_method_override (class, im, cm, 0, 0, 1, security_enabled);
                if (D.28135 != 0) goto <D.28136>; else goto <D.28137>;
                <D.28136>:
                im_slot.209 = (unsigned int) im_slot;
                D.28111 = im_slot.209 * 4;
                D.28112 = vtable + D.28111;
                *D.28112 = cm;
                D.28138 = cm->slot;
                if (D.28138 < 0) goto <D.28139>; else goto <D.28140>;
                <D.28139>:
                D.28122 = (short int) im_slot;
                cm->slot = D.28122;
                <D.28140>:
                goto <D.22232>;
                <D.28137>:
                <D.28134>:
                D.28027 = class->exception_type;
                if (D.28027 != 0) goto fail; else goto <D.28141>;
                <D.28141>:
              }
              cm_index = cm_index + -1;
              <D.22234>:
              if (cm_index >= 0) goto <D.22233>; else goto <D.22232>;
              <D.22232>:
            }
            <D.28127>:
            <D.28125>:
          }
          goto <D.28142>;
          <D.28109>:
          im_slot.209 = (unsigned int) im_slot;
          D.28111 = im_slot.209 * 4;
          D.28112 = vtable + D.28111;
          D.28113 = *D.28112;
          D.28143 = D.28113 != override_im;
          D.28144 = (long int) D.28143;
          D.28145 = __builtin_expect (D.28144, 0);
          if (D.28145 != 0) goto <D.28146>; else goto <D.28147>;
          <D.28146>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4399, "vtable [im_slot] == override_im");
          <D.28147>:
          <D.28142>:
        }
        <D.22223>:
        im_index = im_index + 1;
        <D.22236>:
        im_index.211 = (unsigned int) im_index;
        D.28149 = ic->method.count;
        if (im_index.211 < D.28149) goto <D.22235>; else goto <D.22237>;
        <D.22237>:
      }
      i = i + 1;
      <D.22239>:
      D.28150 = class->interface_offsets_count;
      D.28151 = (int) D.28150;
      if (D.28151 > i) goto <D.22238>; else goto <D.22240>;
      <D.22240>:
      D.28152 = class->flags;
      D.28153 = D.28152 & 128;
      if (D.28153 == 0) goto <D.28154>; else goto <D.28155>;
      <D.28154>:
      i = 0;
      goto <D.22250>;
      <D.22249>:
      {
        int ic_offset;
        int im_index;

        D.28077 = class->interfaces_packed;
        i.196 = (unsigned int) i;
        D.27938 = i.196 * 4;
        D.28078 = D.28077 + D.27938;
        ic = *D.28078;
        ic_offset = mono_class_interface_offset (class, ic);
        im_index = 0;
        goto <D.22247>;
        <D.22246>:
        {
          struct MonoMethod * im;
          int im_slot;

          D.28093 = ic->methods;
          im_index.212 = (unsigned int) im_index;
          D.28157 = im_index.212 * 4;
          D.28158 = D.28093 + D.28157;
          im = *D.28158;
          D.28159 = im->slot;
          D.28160 = (int) D.28159;
          im_slot = D.28160 + ic_offset;
          D.28161 = im->flags;
          D.28162 = (int) D.28161;
          D.28163 = D.28162 & 16;
          if (D.28163 != 0) goto <D.28164>; else goto <D.28165>;
          <D.28164>:
          // predicted unlikely by continue predictor.
          goto <D.22245>;
          <D.28165>:
          im_slot.213 = (unsigned int) im_slot;
          D.28167 = im_slot.213 * 4;
          D.28168 = vtable + D.28167;
          D.28169 = *D.28168;
          if (D.28169 == 0B) goto <D.28170>; else goto <D.28171>;
          <D.28170>:
          print_unimplemented_interface_method_info (class, ic, im, im_slot, overrides, onum);
          goto fail;
          <D.28171>:
        }
        <D.22245>:
        im_index = im_index + 1;
        <D.22247>:
        im_index.214 = (unsigned int) im_index;
        D.28149 = ic->method.count;
        if (im_index.214 < D.28149) goto <D.22246>; else goto <D.22248>;
        <D.22248>:
      }
      i = i + 1;
      <D.22250>:
      D.28150 = class->interface_offsets_count;
      D.28151 = (int) D.28150;
      if (D.28151 > i) goto <D.22249>; else goto <D.22251>;
      <D.22251>:
      <D.28155>:
      class_iter = 0B;
      l = virt_methods;
      goto <D.22275>;
      <D.22274>:
      cm = l->data;
      D.28173 = cm->flags;
      D.28174 = (int) D.28173;
      D.28175 = D.28174 & 256;
      if (D.28175 == 0) goto <D.28176>; else goto <D.28177>;
      <D.28176>:
      {
        int slot;

        slot = -1;
        k = class->parent;
        goto <D.22273>;
        <D.22272>:
        {
          void * k_iter;
          struct MonoMethod * m1;

          try
            {
              k_iter = 0B;
              goto <D.22270>;
              <D.22269>:
              {
                struct MonoMethodSignature * cmsig;
                struct MonoMethodSignature * m1sig;

                cmsig = mono_method_signature (cm);
                m1sig = mono_method_signature (m1);
                D.28178 = cmsig == 0B;
                D.28179 = m1sig == 0B;
                D.28180 = D.28178 | D.28179;
                if (D.28180 != 0) goto <D.28181>; else goto <D.28182>;
                <D.28181>:
                mono_class_set_failure (class, 7, 0B);
                return;
                <D.28182>:
                {
                  size_t __s1_len;
                  size_t __s2_len;

                  D.28183 = cm->name;
                  D.28184 = m1->name;
                  D.22265 = __builtin_strcmp (D.28183, D.28184);
                }
                if (D.22265 == 0) goto <D.28185>; else goto <D.28186>;
                <D.28185>:
                D.28187 = mono_metadata_signature_equal (cmsig, m1sig);
                if (D.28187 != 0) goto <D.28188>; else goto <D.28189>;
                <D.28188>:
                if (security_enabled != 0) goto <D.28190>; else goto <D.28191>;
                <D.28190>:
                D.28192 = m1->flags;
                D.28193 = (int) D.28192;
                D.28194 = D.28193 & 16384;
                if (D.28194 != 0) goto <D.28195>; else goto <D.28196>;
                <D.28195>:
                mono_secman_inheritancedemand_method (cm, m1);
                <D.28196>:
                <D.28191>:
                D.28197 = mono_security_get_mode ();
                if (D.28197 == 1) goto <D.28198>; else goto <D.28199>;
                <D.28198>:
                mono_security_core_clr_check_override (class, cm, m1);
                <D.28199>:
                slot = mono_method_get_vtable_slot (m1);
                if (slot == -1) goto fail; else goto <D.28200>;
                <D.28200>:
                D.28201 = is_wcf_hack_disabled ();
                if (D.28201 != 0) goto <D.28202>; else goto <D.28203>;
                <D.28202>:
                D.28204 = mono_method_can_access_method_full (cm, m1, 0B);
                if (D.28204 == 0) goto <D.28205>; else goto <D.28206>;
                <D.28205>:
                {
                  char * body_name;
                  char * decl_name;

                  body_name = mono_method_full_name (cm, 1);
                  decl_name = mono_method_full_name (m1, 1);
                  D.28207 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
                  mono_class_set_failure (class, 7, D.28207);
                  monoeg_g_free (body_name);
                  monoeg_g_free (decl_name);
                  goto fail;
                }
                <D.28206>:
                <D.28203>:
                D.28208 = cm->slot;
                D.28209 = (int) D.28208;
                D.28210 = D.28209 >= max_vtsize;
                D.28211 = (long int) D.28210;
                D.28212 = __builtin_expect (D.28211, 0);
                if (D.28212 != 0) goto <D.28213>; else goto <D.28214>;
                <D.28213>:
                monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4484, "cm->slot < max_vtsize");
                <D.28214>:
                if (override_map == 0B) goto <D.28215>; else goto <D.28216>;
                <D.28215>:
                override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
                <D.28216>:
                monoeg_g_hash_table_insert_replace (override_map, m1, cm, 0);
                goto <D.22268>;
                <D.28189>:
                <D.28186>:
              }
              <D.22270>:
              m1 = mono_class_get_virtual_methods (k, &k_iter);
              if (m1 != 0B) goto <D.22269>; else goto <D.22268>;
              <D.22268>:
              D.28217 = k->exception_type;
              if (D.28217 != 0) goto fail; else goto <D.28218>;
              <D.28218>:
              if (slot >= 0) goto <D.22271>; else goto <D.28219>;
              <D.28219>:
            }
          finally
            {
              k_iter = {CLOBBER};
            }
        }
        k = k->parent;
        <D.22273>:
        if (k != 0B) goto <D.22272>; else goto <D.22271>;
        <D.22271>:
        if (slot >= 0) goto <D.28220>; else goto <D.28221>;
        <D.28220>:
        D.28222 = (short int) slot;
        cm->slot = D.28222;
        <D.28221>:
      }
      <D.28177>:
      D.28173 = cm->flags;
      D.28223 = (unsigned int) D.28173;
      D.28224 = D.28223 & 288;
      if (D.28224 == 256) goto <D.28225>; else goto <D.28226>;
      <D.28225>:
      D.28208 = cm->slot;
      if (D.28208 >= 0) goto <D.28227>; else goto <D.28228>;
      <D.28227>:
      cm->slot = -1;
      <D.28228>:
      <D.28226>:
      D.28208 = cm->slot;
      if (D.28208 < 0) goto <D.28229>; else goto <D.28230>;
      <D.28229>:
      cur_slot.215 = cur_slot;
      cur_slot = cur_slot.215 + 1;
      D.28232 = (short int) cur_slot.215;
      cm->slot = D.28232;
      <D.28230>:
      D.28173 = cm->flags;
      D.28174 = (int) D.28173;
      D.28233 = D.28174 & 1024;
      if (D.28233 == 0) goto <D.28234>; else goto <D.28235>;
      <D.28234>:
      D.28208 = cm->slot;
      D.28236 = (unsigned int) D.28208;
      D.28237 = D.28236 * 4;
      D.28238 = vtable + D.28237;
      *D.28238 = cm;
      <D.28235>:
      l = l->next;
      <D.22275>:
      if (l != 0B) goto <D.22274>; else goto <D.22276>;
      <D.22276>:
      i = 0;
      goto <D.22279>;
      <D.22278>:
      {
        struct MonoMethod * decl;

        i.196 = (unsigned int) i;
        D.28047 = i.196 * 8;
        D.28048 = overrides + D.28047;
        decl = *D.28048;
        D.28239 = decl->klass;
        D.28240 = D.28239->flags;
        D.28241 = D.28240 & 32;
        if (D.28241 == 0) goto <D.28242>; else goto <D.28243>;
        <D.28242>:
        D.28239 = decl->klass;
        D.28244 = D.28239->byval_arg.type;
        if (D.28244 != 19) goto <D.28245>; else goto <D.28246>;
        <D.28245>:
        D.28239 = decl->klass;
        D.28244 = D.28239->byval_arg.type;
        if (D.28244 != 30) goto <D.28247>; else goto <D.28248>;
        <D.28247>:
        D.28249 = decl->slot;
        D.28250 = D.28249 == -1;
        D.28251 = (long int) D.28250;
        D.28252 = __builtin_expect (D.28251, 0);
        if (D.28252 != 0) goto <D.28253>; else goto <D.28254>;
        <D.28253>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4519, "decl->slot != -1");
        <D.28254>:
        D.28249 = decl->slot;
        D.28255 = (unsigned int) D.28249;
        D.28256 = D.28255 * 4;
        D.28257 = vtable + D.28256;
        i.205 = (sizetype) i;
        D.28064 = i.205 * 8;
        D.28065 = D.28064 + 4;
        D.28066 = overrides + D.28065;
        D.28067 = *D.28066;
        *D.28257 = D.28067;
        i.205 = (sizetype) i;
        D.28064 = i.205 * 8;
        D.28065 = D.28064 + 4;
        D.28066 = overrides + D.28065;
        D.28067 = *D.28066;
        D.28249 = decl->slot;
        D.28067->slot = D.28249;
        if (override_map == 0B) goto <D.28258>; else goto <D.28259>;
        <D.28258>:
        override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
        <D.28259>:
        i.205 = (sizetype) i;
        D.28064 = i.205 * 8;
        D.28065 = D.28064 + 4;
        D.28066 = overrides + D.28065;
        D.28067 = *D.28066;
        monoeg_g_hash_table_insert_replace (override_map, decl, D.28067, 0);
        D.28260 = mono_security_get_mode ();
        if (D.28260 == 1) goto <D.28261>; else goto <D.28262>;
        <D.28261>:
        D.28249 = decl->slot;
        D.28255 = (unsigned int) D.28249;
        D.28256 = D.28255 * 4;
        D.28257 = vtable + D.28256;
        D.28263 = *D.28257;
        mono_security_core_clr_check_override (class, D.28263, decl);
        <D.28262>:
        <D.28248>:
        <D.28246>:
        <D.28243>:
      }
      i = i + 1;
      <D.22279>:
      if (i < onum) goto <D.22278>; else goto <D.22280>;
      <D.22280>:
      if (override_map != 0B) goto <D.28264>; else goto <D.28265>;
      <D.28264>:
      {
        struct MonoMethod * cm;

        i = 0;
        goto <D.22283>;
        <D.22282>:
        i.196 = (unsigned int) i;
        D.27938 = i.196 * 4;
        D.28266 = vtable + D.27938;
        D.28267 = *D.28266;
        if (D.28267 != 0B) goto <D.28268>; else goto <D.28269>;
        <D.28268>:
        i.196 = (unsigned int) i;
        D.27938 = i.196 * 4;
        D.28266 = vtable + D.27938;
        D.28267 = *D.28266;
        cm = monoeg_g_hash_table_lookup (override_map, D.28267);
        if (cm != 0B) goto <D.28270>; else goto <D.28271>;
        <D.28270>:
        i.196 = (unsigned int) i;
        D.27938 = i.196 * 4;
        D.28266 = vtable + D.27938;
        *D.28266 = cm;
        <D.28271>:
        <D.28269>:
        i = i + 1;
        <D.22283>:
        if (i < max_vtsize) goto <D.22282>; else goto <D.22284>;
        <D.22284>:
        monoeg_g_hash_table_destroy (override_map);
        override_map = 0B;
      }
      <D.28265>:
      monoeg_g_slist_free (virt_methods);
      virt_methods = 0B;
      D.28152 = class->flags;
      D.28153 = D.28152 & 128;
      if (D.28153 == 0) goto <D.28272>; else goto <D.28273>;
      <D.28272>:
      i = 0;
      goto <D.22288>;
      <D.22287>:
      i.196 = (unsigned int) i;
      D.27938 = i.196 * 4;
      D.28266 = vtable + D.27938;
      D.28267 = *D.28266;
      if (D.28267 == 0B) goto <D.28274>; else goto <D.28276>;
      <D.28276>:
      i.196 = (unsigned int) i;
      D.27938 = i.196 * 4;
      D.28266 = vtable + D.27938;
      D.28267 = *D.28266;
      D.28277 = D.28267->flags;
      D.28278 = (int) D.28277;
      D.28279 = D.28278 & 1040;
      if (D.28279 != 0) goto <D.28274>; else goto <D.28275>;
      <D.28274>:
      {
        char * type_name;
        char * method_name;

        type_name = mono_type_get_full_name (class);
        i.196 = (unsigned int) i;
        D.27938 = i.196 * 4;
        D.28266 = vtable + D.27938;
        D.28267 = *D.28266;
        if (D.28267 != 0B) goto <D.28281>; else goto <D.28282>;
        <D.28281>:
        i.196 = (unsigned int) i;
        D.27938 = i.196 * 4;
        D.28266 = vtable + D.27938;
        D.28267 = *D.28266;
        iftmp.216 = mono_method_full_name (D.28267, 1);
        goto <D.28283>;
        <D.28282>:
        iftmp.216 = monoeg_strdup ("none");
        <D.28283>:
        method_name = iftmp.216;
        D.28284 = monoeg_g_strdup_printf ("Type %s has invalid vtable method slot %d with method %s", type_name, i, method_name);
        mono_class_set_failure (class, 7, D.28284);
        monoeg_g_free (type_name);
        monoeg_g_free (method_name);
        return;
      }
      <D.28275>:
      i = i + 1;
      <D.22288>:
      if (i < cur_slot) goto <D.22287>; else goto <D.22289>;
      <D.22289>:
      <D.28273>:
      D.27963 = class->generic_class;
      if (D.27963 != 0B) goto <D.28285>; else goto <D.28286>;
      <D.28285>:
      {
        struct MonoClass * gklass;

        D.27963 = class->generic_class;
        gklass = D.27963->container_class;
        mono_class_init (gklass);
        D.28287 = gklass->vtable_size;
        D.28288 = MAX_EXPR <D.28287, cur_slot>;
        class->vtable_size = D.28288;
      }
      goto <D.28289>;
      <D.28286>:
      D.28290 = class->vtable_size;
      if (D.28290 != 0) goto <D.28291>; else goto <D.28292>;
      <D.28291>:
      D.28290 = class->vtable_size;
      D.28293 = D.28290 != cur_slot;
      D.28294 = (long int) D.28293;
      D.28295 = __builtin_expect (D.28294, 0);
      if (D.28295 != 0) goto <D.28296>; else goto <D.28297>;
      <D.28296>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4580, "cur_slot == class->vtable_size");
      <D.28297>:
      <D.28292>:
      class->vtable_size = cur_slot;
      <D.28289>:
      D.27945 = class->parent;
      if (D.27945 != 0B) goto <D.28300>; else goto <D.28298>;
      <D.28300>:
      D.27945 = class->parent;
      D.27952 = D.27945->vtable_size;
      D.28290 = class->vtable_size;
      if (D.27952 == D.28290) goto <D.28301>; else goto <D.28298>;
      <D.28301>:
      D.27945 = class->parent;
      D.28302 = D.27945->vtable;
      D.28290 = class->vtable_size;
      D.28303 = (unsigned int) D.28290;
      D.28304 = D.28303 * 4;
      D.28305 = memcmp (D.28302, vtable, D.28304);
      if (D.28305 == 0) goto <D.28306>; else goto <D.28298>;
      <D.28306>:
      mono_memory_barrier ();
      D.27945 = class->parent;
      D.28302 = D.27945->vtable;
      class->vtable = D.28302;
      goto <D.28299>;
      <D.28298>:
      {
        struct MonoMethod * * tmp;

        D.28290 = class->vtable_size;
        D.28303 = (unsigned int) D.28290;
        D.28304 = D.28303 * 4;
        D.28307 = (int) D.28304;
        tmp = mono_class_alloc0 (class, D.28307);
        D.28290 = class->vtable_size;
        D.28303 = (unsigned int) D.28290;
        D.28304 = D.28303 * 4;
        memcpy (tmp, vtable, D.28304);
        mono_memory_barrier ();
        class->vtable = tmp;
      }
      <D.28299>:
      mono_print_vtable.217 = mono_print_vtable;
      if (mono_print_vtable.217 != 0) goto <D.28309>; else goto <D.28310>;
      <D.28309>:
      {
        int icount;

        icount = 0;
        print_implemented_interfaces (class);
        i = 0;
        goto <D.22294>;
        <D.22293>:
        D.27962 = class->max_interface_id;
        D.28311 = (int) D.27962;
        if (D.28311 >= i) goto <D.28312>; else goto <D.28313>;
        <D.28312>:
        D.28314 = class->interface_bitmap;
        D.28315 = i >> 3;
        D.28316 = (sizetype) D.28315;
        D.28317 = D.28314 + D.28316;
        D.28318 = *D.28317;
        D.28319 = (int) D.28318;
        D.28320 = i & 7;
        D.28321 = D.28319 >> D.28320;
        D.28322 = D.28321 & 1;
        if (D.28322 != 0) goto <D.28323>; else goto <D.28324>;
        <D.28323>:
        icount = icount + 1;
        <D.28324>:
        <D.28313>:
        i = i + 1;
        <D.22294>:
        if (i <= max_iid) goto <D.22293>; else goto <D.22295>;
        <D.22295>:
        D.28325 = &class->byval_arg;
        D.28326 = mono_type_full_name (D.28325);
        D.28290 = class->vtable_size;
        printf ("VTable %s (vtable entries = %d, interfaces = %d)\n", D.28326, D.28290, icount);
        i = 0;
        goto <D.22298>;
        <D.22297>:
        {
          struct MonoMethod * cm;

          i.196 = (unsigned int) i;
          D.27938 = i.196 * 4;
          D.28266 = vtable + D.27938;
          cm = *D.28266;
          if (cm != 0B) goto <D.28327>; else goto <D.28328>;
          <D.28327>:
          D.28329 = cm->slot;
          D.28330 = (int) D.28329;
          D.28331 = mono_method_full_name (cm, 1);
          printf ("  slot assigned: %03d, slot index: %03d %s\n", i, D.28330, D.28331);
          <D.28328>:
        }
        i = i + 1;
        <D.22298>:
        if (i < cur_slot) goto <D.22297>; else goto <D.22299>;
        <D.22299>:
        if (icount != 0) goto <D.28332>; else goto <D.28333>;
        <D.28332>:
        D.28334 = class->name_space;
        D.28335 = class->name;
        printf ("Interfaces %s.%s (max_iid = %d)\n", D.28334, D.28335, max_iid);
        i = 0;
        goto <D.22301>;
        <D.22300>:
        D.28083 = class->interfaces;
        i.196 = (unsigned int) i;
        D.27938 = i.196 * 4;
        D.28336 = D.28083 + D.27938;
        ic = *D.28336;
        D.28337 = mono_class_interface_offset (class, ic);
        D.28338 = count_virtual_methods (ic);
        D.28339 = ic->interface_id;
        D.28340 = (int) D.28339;
        D.28341 = &ic->byval_arg;
        D.28342 = mono_type_full_name (D.28341);
        printf ("  slot offset: %03d, method count: %03d, iid: %03d %s\n", D.28337, D.28338, D.28340, D.28342);
        i = i + 1;
        <D.22301>:
        D.28090 = class->interface_count;
        D.28091 = (int) D.28090;
        if (D.28091 > i) goto <D.22300>; else goto <D.22302>;
        <D.22302>:
        k = class->parent;
        goto <D.22307>;
        <D.22306>:
        i = 0;
        goto <D.22304>;
        <D.22303>:
        D.28343 = k->interfaces;
        i.196 = (unsigned int) i;
        D.27938 = i.196 * 4;
        D.28344 = D.28343 + D.27938;
        ic = *D.28344;
        D.28345 = mono_class_interface_offset (class, ic);
        D.28346 = count_virtual_methods (ic);
        D.28339 = ic->interface_id;
        D.28340 = (int) D.28339;
        D.28341 = &ic->byval_arg;
        D.28347 = mono_type_full_name (D.28341);
        printf ("  parent slot offset: %03d, method count: %03d, iid: %03d %s\n", D.28345, D.28346, D.28340, D.28347);
        i = i + 1;
        <D.22304>:
        D.28348 = k->interface_count;
        D.28349 = (int) D.28348;
        if (D.28349 > i) goto <D.22303>; else goto <D.22305>;
        <D.22305>:
        k = k->parent;
        <D.22307>:
        if (k != 0B) goto <D.22306>; else goto <D.22308>;
        <D.22308>:
        <D.28333>:
      }
      <D.28310>:
      return;
      fail:
      {
        char * name;

        name = mono_type_get_full_name (class);
        D.28350 = monoeg_g_strdup_printf ("VTable setup of type %s failed", name);
        mono_class_set_failure (class, 7, D.28350);
        monoeg_g_free (name);
        if (override_map != 0B) goto <D.28351>; else goto <D.28352>;
        <D.28351>:
        monoeg_g_hash_table_destroy (override_map);
        <D.28352>:
        if (virt_methods != 0B) goto <D.28353>; else goto <D.28354>;
        <D.28353>:
        monoeg_g_slist_free (virt_methods);
        <D.28354>:
      }
    }
  finally
    {
      error = {CLOBBER};
    }
}


verify_class_overrides (struct MonoClass * class, struct MonoMethod * * overrides, int onum)
{
  unsigned int i.218;
  unsigned int D.28366;
  struct MonoMethod * * D.28367;
  sizetype i.219;
  sizetype D.28369;
  sizetype D.28370;
  struct MonoMethod * * D.28371;
  struct MonoClass * D.28372;
  struct MonoClass * D.28373;
  struct MonoClass * D.28374;
  gchar * D.28377;
  gboolean D.28378;
  short unsigned int D.28379;
  unsigned int D.28380;
  unsigned int D.28381;
  int D.28384;
  int D.28385;
  gchar * D.28388;
  gchar * D.28390;
  short unsigned int D.28391;
  unsigned int D.28392;
  unsigned int D.28393;
  gchar * D.28398;
  gchar * D.28400;
  struct MonoClass * D.28401;
  int D.28402;
  gchar * D.28405;
  int D.28406;
  int D.28409;
  gchar * D.28412;
  int i;

  i = 0;
  goto <D.22144>;
  <D.22143>:
  {
    struct MonoMethod * decl;
    struct MonoMethod * body;

    i.218 = (unsigned int) i;
    D.28366 = i.218 * 8;
    D.28367 = overrides + D.28366;
    decl = *D.28367;
    i.219 = (sizetype) i;
    D.28369 = i.219 * 8;
    D.28370 = D.28369 + 4;
    D.28371 = overrides + D.28370;
    body = *D.28371;
    D.28372 = body->klass;
    D.28373 = mono_class_get_generic_type_definition (D.28372);
    D.28374 = mono_class_get_generic_type_definition (class);
    if (D.28373 != D.28374) goto <D.28375>; else goto <D.28376>;
    <D.28375>:
    D.28377 = monoeg_strdup ("Method belongs to a different class than the declared one");
    mono_class_set_failure (class, 7, D.28377);
    D.28378 = 0;
    return D.28378;
    <D.28376>:
    D.28379 = body->flags;
    D.28380 = (unsigned int) D.28379;
    D.28381 = D.28380 & 80;
    if (D.28381 != 64) goto <D.28382>; else goto <D.28383>;
    <D.28382>:
    D.28379 = body->flags;
    D.28384 = (int) D.28379;
    D.28385 = D.28384 & 16;
    if (D.28385 != 0) goto <D.28386>; else goto <D.28387>;
    <D.28386>:
    D.28388 = monoeg_strdup ("Method must not be static to override a base type");
    mono_class_set_failure (class, 7, D.28388);
    goto <D.28389>;
    <D.28387>:
    D.28390 = monoeg_strdup ("Method must be virtual to override a base type");
    mono_class_set_failure (class, 7, D.28390);
    <D.28389>:
    D.28378 = 0;
    return D.28378;
    <D.28383>:
    D.28391 = decl->flags;
    D.28392 = (unsigned int) D.28391;
    D.28393 = D.28392 & 80;
    if (D.28393 != 64) goto <D.28394>; else goto <D.28395>;
    <D.28394>:
    D.28379 = body->flags;
    D.28384 = (int) D.28379;
    D.28385 = D.28384 & 16;
    if (D.28385 != 0) goto <D.28396>; else goto <D.28397>;
    <D.28396>:
    D.28398 = monoeg_strdup ("Cannot override a static method in a base type");
    mono_class_set_failure (class, 7, D.28398);
    goto <D.28399>;
    <D.28397>:
    D.28400 = monoeg_strdup ("Cannot override a non virtual method in a base type");
    mono_class_set_failure (class, 7, D.28400);
    <D.28399>:
    D.28378 = 0;
    return D.28378;
    <D.28395>:
    D.28401 = decl->klass;
    D.28402 = mono_class_is_assignable_from_slow (D.28401, class);
    if (D.28402 == 0) goto <D.28403>; else goto <D.28404>;
    <D.28403>:
    D.28405 = monoeg_strdup ("Method overrides a class or interface that extended or implemented by this type");
    mono_class_set_failure (class, 7, D.28405);
    D.28378 = 0;
    return D.28378;
    <D.28404>:
    body = mono_method_get_method_definition (body);
    decl = mono_method_get_method_definition (decl);
    D.28406 = is_wcf_hack_disabled ();
    if (D.28406 != 0) goto <D.28407>; else goto <D.28408>;
    <D.28407>:
    D.28409 = mono_method_can_access_method_full (body, decl, 0B);
    if (D.28409 == 0) goto <D.28410>; else goto <D.28411>;
    <D.28410>:
    {
      char * body_name;
      char * decl_name;

      body_name = mono_method_full_name (body, 1);
      decl_name = mono_method_full_name (decl, 1);
      D.28412 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
      mono_class_set_failure (class, 7, D.28412);
      monoeg_g_free (body_name);
      monoeg_g_free (decl_name);
      D.28378 = 0;
      return D.28378;
    }
    <D.28411>:
    <D.28408>:
  }
  i = i + 1;
  <D.22144>:
  if (i < onum) goto <D.22143>; else goto <D.22145>;
  <D.22145>:
  D.28378 = 1;
  return D.28378;
}


mono_method_get_method_definition (struct MonoMethod * method)
{
  unsigned char D.28414;
  unsigned char D.28415;
  struct MonoMethod * D.28416;

  goto <D.22131>;
  <D.22130>:
  method = MEM[(struct MonoMethodInflated *)method].declaring;
  <D.22131>:
  D.28414 = BIT_FIELD_REF <*method, 8, 168>;
  D.28415 = D.28414 & 16;
  if (D.28415 != 0) goto <D.22130>; else goto <D.22132>;
  <D.22132>:
  D.28416 = method;
  return D.28416;
}


mono_class_need_stelemref_method (struct MonoClass * class)
{
  gboolean D.28418;
  int iftmp.220;
  unsigned char D.28422;
  struct MonoClass * D.28424;
  struct MonoType * D.28425;
  int D.28426;

  D.28422 = class->rank;
  if (D.28422 == 1) goto <D.28423>; else goto <D.28420>;
  <D.28423>:
  D.28424 = class->element_class;
  D.28425 = &D.28424->byval_arg;
  D.28426 = mono_type_is_reference (D.28425);
  if (D.28426 != 0) goto <D.28427>; else goto <D.28420>;
  <D.28427>:
  iftmp.220 = 1;
  goto <D.28421>;
  <D.28420>:
  iftmp.220 = 0;
  <D.28421>:
  D.28418 = iftmp.220;
  return D.28418;
}


check_interface_method_override (struct MonoClass * class, struct MonoMethod * im, struct MonoMethod * cm, gboolean require_newslot, gboolean interface_is_explicitly_implemented_by_class, gboolean slot_is_empty, gboolean security_enabled)
{
  int D.22036;
  const char * D.28429;
  const char * D.28430;
  short unsigned int D.28433;
  int D.28434;
  int D.28435;
  gboolean D.28438;
  int D.28445;
  _Bool D.28449;
  _Bool D.28450;
  _Bool D.28451;
  gchar * D.28454;
  int D.28455;
  short unsigned int D.28460;
  int D.28461;
  int D.28462;
  <unnamed type> D.28465;
  int D.28468;
  int D.28471;
  gchar * D.28474;
  struct MonoClass * D.28477;
  unsigned char D.28478;
  gchar * D.28483;
  int D.28484;
  struct MonoImage * D.28487;
  struct MonoImage * D.28488;
  int D.22051;
  int iftmp.221;
  int D.22050;
  const char[27] * D.28497;
  unsigned char D.28498;
  int D.28499;
  unsigned char D.28500;
  int D.28501;
  _Bool D.28502;
  _Bool D.28503;
  _Bool D.28504;
  const unsigned char * D.28507;
  unsigned char D.28508;
  int D.28509;
  const unsigned char * D.28510;
  unsigned char D.28511;
  int D.28512;
  _Bool D.28513;
  _Bool D.28514;
  const unsigned char * D.28517;
  unsigned char D.28518;
  int D.28519;
  const unsigned char * D.28520;
  unsigned char D.28521;
  int D.28522;
  _Bool D.28523;
  _Bool D.28524;
  const unsigned char * D.28527;
  unsigned char D.28528;
  int D.28529;
  const unsigned char * D.28530;
  unsigned char D.28531;
  int D.28532;
  int D.22060;
  int iftmp.222;
  int D.22059;
  const char[14] * D.28540;
  unsigned char D.28541;
  int D.28542;
  unsigned char D.28543;
  int D.28544;
  _Bool D.28545;
  _Bool D.28546;
  _Bool D.28547;
  const unsigned char * D.28550;
  unsigned char D.28551;
  int D.28552;
  const unsigned char * D.28553;
  unsigned char D.28554;
  int D.28555;
  _Bool D.28556;
  _Bool D.28557;
  const unsigned char * D.28560;
  unsigned char D.28561;
  int D.28562;
  const unsigned char * D.28563;
  unsigned char D.28564;
  int D.28565;
  _Bool D.28566;
  _Bool D.28567;
  const unsigned char * D.28570;
  unsigned char D.28571;
  int D.28572;
  const unsigned char * D.28573;
  unsigned char D.28574;
  int D.28575;
  int D.22069;
  int iftmp.223;
  int D.22068;
  const char[14] * D.28581;
  unsigned char D.28582;
  int D.28583;
  unsigned char D.28584;
  int D.28585;
  _Bool D.28586;
  _Bool D.28587;
  _Bool D.28588;
  const unsigned char * D.28591;
  unsigned char D.28592;
  int D.28593;
  const unsigned char * D.28594;
  unsigned char D.28595;
  int D.28596;
  _Bool D.28597;
  _Bool D.28598;
  const unsigned char * D.28601;
  unsigned char D.28602;
  int D.28603;
  const unsigned char * D.28604;
  unsigned char D.28605;
  int D.28606;
  _Bool D.28607;
  _Bool D.28608;
  const unsigned char * D.28611;
  unsigned char D.28612;
  int D.28613;
  const unsigned char * D.28614;
  unsigned char D.28615;
  int D.28616;
  int D.22078;
  int iftmp.224;
  int D.22077;
  const char[8] * D.28622;
  unsigned char D.28623;
  int D.28624;
  unsigned char D.28625;
  int D.28626;
  _Bool D.28627;
  _Bool D.28628;
  _Bool D.28629;
  const unsigned char * D.28632;
  unsigned char D.28633;
  int D.28634;
  const unsigned char * D.28635;
  unsigned char D.28636;
  int D.28637;
  _Bool D.28638;
  _Bool D.28639;
  const unsigned char * D.28642;
  unsigned char D.28643;
  int D.28644;
  const unsigned char * D.28645;
  unsigned char D.28646;
  int D.28647;
  _Bool D.28648;
  _Bool D.28649;
  const unsigned char * D.28652;
  unsigned char D.28653;
  int D.28654;
  const unsigned char * D.28655;
  unsigned char D.28656;
  int D.28657;
  int D.22087;
  int iftmp.225;
  int D.22086;
  const char[16] * D.28663;
  unsigned char D.28664;
  int D.28665;
  unsigned char D.28666;
  int D.28667;
  _Bool D.28668;
  _Bool D.28669;
  _Bool D.28670;
  const unsigned char * D.28673;
  unsigned char D.28674;
  int D.28675;
  const unsigned char * D.28676;
  unsigned char D.28677;
  int D.28678;
  _Bool D.28679;
  _Bool D.28680;
  const unsigned char * D.28683;
  unsigned char D.28684;
  int D.28685;
  const unsigned char * D.28686;
  unsigned char D.28687;
  int D.28688;
  _Bool D.28689;
  _Bool D.28690;
  const unsigned char * D.28693;
  unsigned char D.28694;
  int D.28695;
  const unsigned char * D.28696;
  unsigned char D.28697;
  int D.28698;
  int D.22096;
  int iftmp.226;
  int D.22095;
  const char[22] * D.28704;
  unsigned char D.28705;
  int D.28706;
  unsigned char D.28707;
  int D.28708;
  _Bool D.28709;
  _Bool D.28710;
  _Bool D.28711;
  const unsigned char * D.28714;
  unsigned char D.28715;
  int D.28716;
  const unsigned char * D.28717;
  unsigned char D.28718;
  int D.28719;
  _Bool D.28720;
  _Bool D.28721;
  const unsigned char * D.28724;
  unsigned char D.28725;
  int D.28726;
  const unsigned char * D.28727;
  unsigned char D.28728;
  int D.28729;
  _Bool D.28730;
  _Bool D.28731;
  const unsigned char * D.28734;
  unsigned char D.28735;
  int D.28736;
  const unsigned char * D.28737;
  unsigned char D.28738;
  int D.28739;
  unsigned int D.28743;
  char D.28744;
  char * D.28747;
  unsigned int D.28750;
  int D.22105;
  <unnamed type> D.28759;
  int D.28762;
  int D.28765;
  gchar * D.28768;
  struct MonoMethodSignature * cmsig;
  struct MonoMethodSignature * imsig;

  {
    size_t __s1_len;
    size_t __s2_len;

    D.28429 = im->name;
    D.28430 = cm->name;
    D.22036 = __builtin_strcmp (D.28429, D.28430);
  }
  if (D.22036 == 0) goto <D.28431>; else goto <D.28432>;
  <D.28431>:
  D.28433 = cm->flags;
  D.28434 = (int) D.28433;
  D.28435 = D.28434 & 6;
  if (D.28435 == 0) goto <D.28436>; else goto <D.28437>;
  <D.28436>:
  D.28438 = 0;
  return D.28438;
  <D.28437>:
  if (slot_is_empty == 0) goto <D.28439>; else goto <D.28440>;
  <D.28439>:
  if (require_newslot != 0) goto <D.28441>; else goto <D.28442>;
  <D.28441>:
  if (interface_is_explicitly_implemented_by_class == 0) goto <D.28443>; else goto <D.28444>;
  <D.28443>:
  D.28438 = 0;
  return D.28438;
  <D.28444>:
  D.28433 = cm->flags;
  D.28434 = (int) D.28433;
  D.28445 = D.28434 & 256;
  if (D.28445 == 0) goto <D.28446>; else goto <D.28447>;
  <D.28446>:
  D.28438 = 0;
  return D.28438;
  <D.28447>:
  goto <D.28448>;
  <D.28442>:
  <D.28448>:
  <D.28440>:
  cmsig = mono_method_signature (cm);
  imsig = mono_method_signature (im);
  D.28449 = cmsig == 0B;
  D.28450 = imsig == 0B;
  D.28451 = D.28449 | D.28450;
  if (D.28451 != 0) goto <D.28452>; else goto <D.28453>;
  <D.28452>:
  D.28454 = monoeg_strdup ("Could not resolve the signature of a virtual method");
  mono_class_set_failure (class, 7, D.28454);
  D.28438 = 0;
  return D.28438;
  <D.28453>:
  D.28455 = mono_metadata_signature_equal (cmsig, imsig);
  if (D.28455 == 0) goto <D.28456>; else goto <D.28457>;
  <D.28456>:
  D.28438 = 0;
  return D.28438;
  <D.28457>:
  if (security_enabled != 0) goto <D.28458>; else goto <D.28459>;
  <D.28458>:
  D.28460 = im->flags;
  D.28461 = (int) D.28460;
  D.28462 = D.28461 & 16384;
  if (D.28462 != 0) goto <D.28463>; else goto <D.28464>;
  <D.28463>:
  mono_secman_inheritancedemand_method (cm, im);
  <D.28464>:
  <D.28459>:
  D.28465 = mono_security_get_mode ();
  if (D.28465 == 1) goto <D.28466>; else goto <D.28467>;
  <D.28466>:
  mono_security_core_clr_check_override (class, cm, im);
  <D.28467>:
  D.28468 = is_wcf_hack_disabled ();
  if (D.28468 != 0) goto <D.28469>; else goto <D.28470>;
  <D.28469>:
  D.28471 = mono_method_can_access_method_full (cm, im, 0B);
  if (D.28471 == 0) goto <D.28472>; else goto <D.28473>;
  <D.28472>:
  {
    char * body_name;
    char * decl_name;

    body_name = mono_method_full_name (cm, 1);
    decl_name = mono_method_full_name (im, 1);
    D.28474 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
    mono_class_set_failure (class, 7, D.28474);
    monoeg_g_free (body_name);
    monoeg_g_free (decl_name);
    D.28438 = 0;
    return D.28438;
  }
  <D.28473>:
  <D.28470>:
  D.28438 = 1;
  return D.28438;
  <D.28432>:
  {
    struct MonoClass * ic;
    const char * ic_name_space;
    const char * ic_name;
    char * subname;

    ic = im->klass;
    ic_name_space = ic->name_space;
    ic_name = ic->name;
    if (require_newslot == 0) goto <D.28475>; else goto <D.28476>;
    <D.28475>:
    D.28438 = 0;
    return D.28438;
    <D.28476>:
    D.28477 = cm->klass;
    D.28478 = D.28477->rank;
    if (D.28478 == 0) goto <D.28479>; else goto <D.28480>;
    <D.28479>:
    D.28438 = 0;
    return D.28438;
    <D.28480>:
    cmsig = mono_method_signature (cm);
    imsig = mono_method_signature (im);
    D.28449 = cmsig == 0B;
    D.28450 = imsig == 0B;
    D.28451 = D.28449 | D.28450;
    if (D.28451 != 0) goto <D.28481>; else goto <D.28482>;
    <D.28481>:
    D.28483 = monoeg_strdup ("Could not resolve the signature of a virtual method");
    mono_class_set_failure (class, 7, D.28483);
    D.28438 = 0;
    return D.28438;
    <D.28482>:
    D.28484 = mono_metadata_signature_equal (cmsig, imsig);
    if (D.28484 == 0) goto <D.28485>; else goto <D.28486>;
    <D.28485>:
    D.28438 = 0;
    return D.28438;
    <D.28486>:
    D.28487 = mono_class_get_image (ic);
    D.28488 = mono_defaults.corlib;
    if (D.28487 != D.28488) goto <D.28489>; else goto <D.28490>;
    <D.28489>:
    D.28438 = 0;
    return D.28438;
    <D.28490>:
    if (ic_name_space == 0B) goto <D.28491>; else goto <D.28493>;
    <D.28493>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 26;
      if (__s2_len <= 3) goto <D.28495>; else goto <D.28496>;
      <D.28495>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name_space;
        D.28497 = "System.Collections.Generic";
        D.28498 = MEM[(const unsigned char *)D.28497];
        D.28499 = (int) D.28498;
        D.28500 = *__s2;
        D.28501 = (int) D.28500;
        __result = D.28499 - D.28501;
        {
          D.28502 = __s2_len != 0;
          D.28503 = __result == 0;
          D.28504 = D.28502 & D.28503;
          if (D.28504 != 0) goto <D.28505>; else goto <D.28506>;
          <D.28505>:
          D.28507 = &MEM[(void *)"System.Collections.Generic" + 1B];
          D.28508 = *D.28507;
          D.28509 = (int) D.28508;
          D.28510 = __s2 + 1;
          D.28511 = *D.28510;
          D.28512 = (int) D.28511;
          __result = D.28509 - D.28512;
          D.28513 = __s2_len > 1;
          D.28503 = __result == 0;
          D.28514 = D.28513 & D.28503;
          if (D.28514 != 0) goto <D.28515>; else goto <D.28516>;
          <D.28515>:
          D.28517 = &MEM[(void *)"System.Collections.Generic" + 2B];
          D.28518 = *D.28517;
          D.28519 = (int) D.28518;
          D.28520 = __s2 + 2;
          D.28521 = *D.28520;
          D.28522 = (int) D.28521;
          __result = D.28519 - D.28522;
          D.28523 = __s2_len > 2;
          D.28503 = __result == 0;
          D.28524 = D.28523 & D.28503;
          if (D.28524 != 0) goto <D.28525>; else goto <D.28526>;
          <D.28525>:
          D.28527 = &MEM[(void *)"System.Collections.Generic" + 3B];
          D.28528 = *D.28527;
          D.28529 = (int) D.28528;
          D.28530 = __s2 + 3;
          D.28531 = *D.28530;
          D.28532 = (int) D.28531;
          __result = D.28529 - D.28532;
          <D.28526>:
          <D.28516>:
          <D.28506>:
        }
        D.22050 = __result;
      }
      iftmp.221 = -D.22050;
      goto <D.28533>;
      <D.28496>:
      iftmp.221 = __builtin_strcmp (ic_name_space, "System.Collections.Generic");
      <D.28533>:
      D.22051 = iftmp.221;
    }
    if (D.22051 != 0) goto <D.28491>; else goto <D.28492>;
    <D.28491>:
    D.28438 = 0;
    return D.28438;
    <D.28492>:
    if (ic_name == 0B) goto <D.28534>; else goto <D.28536>;
    <D.28536>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 13;
      if (__s2_len <= 3) goto <D.28538>; else goto <D.28539>;
      <D.28538>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name;
        D.28540 = "IEnumerable`1";
        D.28541 = MEM[(const unsigned char *)D.28540];
        D.28542 = (int) D.28541;
        D.28543 = *__s2;
        D.28544 = (int) D.28543;
        __result = D.28542 - D.28544;
        {
          D.28545 = __s2_len != 0;
          D.28546 = __result == 0;
          D.28547 = D.28545 & D.28546;
          if (D.28547 != 0) goto <D.28548>; else goto <D.28549>;
          <D.28548>:
          D.28550 = &MEM[(void *)"IEnumerable`1" + 1B];
          D.28551 = *D.28550;
          D.28552 = (int) D.28551;
          D.28553 = __s2 + 1;
          D.28554 = *D.28553;
          D.28555 = (int) D.28554;
          __result = D.28552 - D.28555;
          D.28556 = __s2_len > 1;
          D.28546 = __result == 0;
          D.28557 = D.28556 & D.28546;
          if (D.28557 != 0) goto <D.28558>; else goto <D.28559>;
          <D.28558>:
          D.28560 = &MEM[(void *)"IEnumerable`1" + 2B];
          D.28561 = *D.28560;
          D.28562 = (int) D.28561;
          D.28563 = __s2 + 2;
          D.28564 = *D.28563;
          D.28565 = (int) D.28564;
          __result = D.28562 - D.28565;
          D.28566 = __s2_len > 2;
          D.28546 = __result == 0;
          D.28567 = D.28566 & D.28546;
          if (D.28567 != 0) goto <D.28568>; else goto <D.28569>;
          <D.28568>:
          D.28570 = &MEM[(void *)"IEnumerable`1" + 3B];
          D.28571 = *D.28570;
          D.28572 = (int) D.28571;
          D.28573 = __s2 + 3;
          D.28574 = *D.28573;
          D.28575 = (int) D.28574;
          __result = D.28572 - D.28575;
          <D.28569>:
          <D.28559>:
          <D.28549>:
        }
        D.22059 = __result;
      }
      iftmp.222 = -D.22059;
      goto <D.28576>;
      <D.28539>:
      iftmp.222 = __builtin_strcmp (ic_name, "IEnumerable`1");
      <D.28576>:
      D.22060 = iftmp.222;
    }
    if (D.22060 != 0) goto <D.28577>; else goto <D.28535>;
    <D.28577>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 13;
      if (__s2_len <= 3) goto <D.28579>; else goto <D.28580>;
      <D.28579>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name;
        D.28581 = "ICollection`1";
        D.28582 = MEM[(const unsigned char *)D.28581];
        D.28583 = (int) D.28582;
        D.28584 = *__s2;
        D.28585 = (int) D.28584;
        __result = D.28583 - D.28585;
        {
          D.28586 = __s2_len != 0;
          D.28587 = __result == 0;
          D.28588 = D.28586 & D.28587;
          if (D.28588 != 0) goto <D.28589>; else goto <D.28590>;
          <D.28589>:
          D.28591 = &MEM[(void *)"ICollection`1" + 1B];
          D.28592 = *D.28591;
          D.28593 = (int) D.28592;
          D.28594 = __s2 + 1;
          D.28595 = *D.28594;
          D.28596 = (int) D.28595;
          __result = D.28593 - D.28596;
          D.28597 = __s2_len > 1;
          D.28587 = __result == 0;
          D.28598 = D.28597 & D.28587;
          if (D.28598 != 0) goto <D.28599>; else goto <D.28600>;
          <D.28599>:
          D.28601 = &MEM[(void *)"ICollection`1" + 2B];
          D.28602 = *D.28601;
          D.28603 = (int) D.28602;
          D.28604 = __s2 + 2;
          D.28605 = *D.28604;
          D.28606 = (int) D.28605;
          __result = D.28603 - D.28606;
          D.28607 = __s2_len > 2;
          D.28587 = __result == 0;
          D.28608 = D.28607 & D.28587;
          if (D.28608 != 0) goto <D.28609>; else goto <D.28610>;
          <D.28609>:
          D.28611 = &MEM[(void *)"ICollection`1" + 3B];
          D.28612 = *D.28611;
          D.28613 = (int) D.28612;
          D.28614 = __s2 + 3;
          D.28615 = *D.28614;
          D.28616 = (int) D.28615;
          __result = D.28613 - D.28616;
          <D.28610>:
          <D.28600>:
          <D.28590>:
        }
        D.22068 = __result;
      }
      iftmp.223 = -D.22068;
      goto <D.28617>;
      <D.28580>:
      iftmp.223 = __builtin_strcmp (ic_name, "ICollection`1");
      <D.28617>:
      D.22069 = iftmp.223;
    }
    if (D.22069 != 0) goto <D.28618>; else goto <D.28535>;
    <D.28618>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 7;
      if (__s2_len <= 3) goto <D.28620>; else goto <D.28621>;
      <D.28620>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name;
        D.28622 = "IList`1";
        D.28623 = MEM[(const unsigned char *)D.28622];
        D.28624 = (int) D.28623;
        D.28625 = *__s2;
        D.28626 = (int) D.28625;
        __result = D.28624 - D.28626;
        {
          D.28627 = __s2_len != 0;
          D.28628 = __result == 0;
          D.28629 = D.28627 & D.28628;
          if (D.28629 != 0) goto <D.28630>; else goto <D.28631>;
          <D.28630>:
          D.28632 = &MEM[(void *)"IList`1" + 1B];
          D.28633 = *D.28632;
          D.28634 = (int) D.28633;
          D.28635 = __s2 + 1;
          D.28636 = *D.28635;
          D.28637 = (int) D.28636;
          __result = D.28634 - D.28637;
          D.28638 = __s2_len > 1;
          D.28628 = __result == 0;
          D.28639 = D.28638 & D.28628;
          if (D.28639 != 0) goto <D.28640>; else goto <D.28641>;
          <D.28640>:
          D.28642 = &MEM[(void *)"IList`1" + 2B];
          D.28643 = *D.28642;
          D.28644 = (int) D.28643;
          D.28645 = __s2 + 2;
          D.28646 = *D.28645;
          D.28647 = (int) D.28646;
          __result = D.28644 - D.28647;
          D.28648 = __s2_len > 2;
          D.28628 = __result == 0;
          D.28649 = D.28648 & D.28628;
          if (D.28649 != 0) goto <D.28650>; else goto <D.28651>;
          <D.28650>:
          D.28652 = &MEM[(void *)"IList`1" + 3B];
          D.28653 = *D.28652;
          D.28654 = (int) D.28653;
          D.28655 = __s2 + 3;
          D.28656 = *D.28655;
          D.28657 = (int) D.28656;
          __result = D.28654 - D.28657;
          <D.28651>:
          <D.28641>:
          <D.28631>:
        }
        D.22077 = __result;
      }
      iftmp.224 = -D.22077;
      goto <D.28658>;
      <D.28621>:
      iftmp.224 = __builtin_strcmp (ic_name, "IList`1");
      <D.28658>:
      D.22078 = iftmp.224;
    }
    if (D.22078 != 0) goto <D.28659>; else goto <D.28535>;
    <D.28659>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 15;
      if (__s2_len <= 3) goto <D.28661>; else goto <D.28662>;
      <D.28661>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name;
        D.28663 = "IReadOnlyList`1";
        D.28664 = MEM[(const unsigned char *)D.28663];
        D.28665 = (int) D.28664;
        D.28666 = *__s2;
        D.28667 = (int) D.28666;
        __result = D.28665 - D.28667;
        {
          D.28668 = __s2_len != 0;
          D.28669 = __result == 0;
          D.28670 = D.28668 & D.28669;
          if (D.28670 != 0) goto <D.28671>; else goto <D.28672>;
          <D.28671>:
          D.28673 = &MEM[(void *)"IReadOnlyList`1" + 1B];
          D.28674 = *D.28673;
          D.28675 = (int) D.28674;
          D.28676 = __s2 + 1;
          D.28677 = *D.28676;
          D.28678 = (int) D.28677;
          __result = D.28675 - D.28678;
          D.28679 = __s2_len > 1;
          D.28669 = __result == 0;
          D.28680 = D.28679 & D.28669;
          if (D.28680 != 0) goto <D.28681>; else goto <D.28682>;
          <D.28681>:
          D.28683 = &MEM[(void *)"IReadOnlyList`1" + 2B];
          D.28684 = *D.28683;
          D.28685 = (int) D.28684;
          D.28686 = __s2 + 2;
          D.28687 = *D.28686;
          D.28688 = (int) D.28687;
          __result = D.28685 - D.28688;
          D.28689 = __s2_len > 2;
          D.28669 = __result == 0;
          D.28690 = D.28689 & D.28669;
          if (D.28690 != 0) goto <D.28691>; else goto <D.28692>;
          <D.28691>:
          D.28693 = &MEM[(void *)"IReadOnlyList`1" + 3B];
          D.28694 = *D.28693;
          D.28695 = (int) D.28694;
          D.28696 = __s2 + 3;
          D.28697 = *D.28696;
          D.28698 = (int) D.28697;
          __result = D.28695 - D.28698;
          <D.28692>:
          <D.28682>:
          <D.28672>:
        }
        D.22086 = __result;
      }
      iftmp.225 = -D.22086;
      goto <D.28699>;
      <D.28662>:
      iftmp.225 = __builtin_strcmp (ic_name, "IReadOnlyList`1");
      <D.28699>:
      D.22087 = iftmp.225;
    }
    if (D.22087 != 0) goto <D.28700>; else goto <D.28535>;
    <D.28700>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 21;
      if (__s2_len <= 3) goto <D.28702>; else goto <D.28703>;
      <D.28702>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name;
        D.28704 = "IReadOnlyCollection`1";
        D.28705 = MEM[(const unsigned char *)D.28704];
        D.28706 = (int) D.28705;
        D.28707 = *__s2;
        D.28708 = (int) D.28707;
        __result = D.28706 - D.28708;
        {
          D.28709 = __s2_len != 0;
          D.28710 = __result == 0;
          D.28711 = D.28709 & D.28710;
          if (D.28711 != 0) goto <D.28712>; else goto <D.28713>;
          <D.28712>:
          D.28714 = &MEM[(void *)"IReadOnlyCollection`1" + 1B];
          D.28715 = *D.28714;
          D.28716 = (int) D.28715;
          D.28717 = __s2 + 1;
          D.28718 = *D.28717;
          D.28719 = (int) D.28718;
          __result = D.28716 - D.28719;
          D.28720 = __s2_len > 1;
          D.28710 = __result == 0;
          D.28721 = D.28720 & D.28710;
          if (D.28721 != 0) goto <D.28722>; else goto <D.28723>;
          <D.28722>:
          D.28724 = &MEM[(void *)"IReadOnlyCollection`1" + 2B];
          D.28725 = *D.28724;
          D.28726 = (int) D.28725;
          D.28727 = __s2 + 2;
          D.28728 = *D.28727;
          D.28729 = (int) D.28728;
          __result = D.28726 - D.28729;
          D.28730 = __s2_len > 2;
          D.28710 = __result == 0;
          D.28731 = D.28730 & D.28710;
          if (D.28731 != 0) goto <D.28732>; else goto <D.28733>;
          <D.28732>:
          D.28734 = &MEM[(void *)"IReadOnlyCollection`1" + 3B];
          D.28735 = *D.28734;
          D.28736 = (int) D.28735;
          D.28737 = __s2 + 3;
          D.28738 = *D.28737;
          D.28739 = (int) D.28738;
          __result = D.28736 - D.28739;
          <D.28733>:
          <D.28723>:
          <D.28713>:
        }
        D.22095 = __result;
      }
      iftmp.226 = -D.22095;
      goto <D.28740>;
      <D.28703>:
      iftmp.226 = __builtin_strcmp (ic_name, "IReadOnlyCollection`1");
      <D.28740>:
      D.22096 = iftmp.226;
    }
    if (D.22096 != 0) goto <D.28534>; else goto <D.28535>;
    <D.28534>:
    D.28438 = 0;
    return D.28438;
    <D.28535>:
    D.28430 = cm->name;
    subname = strstr (D.28430, ic_name_space);
    D.28430 = cm->name;
    if (D.28430 != subname) goto <D.28741>; else goto <D.28742>;
    <D.28741>:
    D.28438 = 0;
    return D.28438;
    <D.28742>:
    D.28743 = strlen (ic_name_space);
    subname = subname + D.28743;
    D.28744 = *subname;
    if (D.28744 != 46) goto <D.28745>; else goto <D.28746>;
    <D.28745>:
    D.28438 = 0;
    return D.28438;
    <D.28746>:
    subname = subname + 1;
    D.28747 = strstr (subname, ic_name);
    if (D.28747 != subname) goto <D.28748>; else goto <D.28749>;
    <D.28748>:
    D.28438 = 0;
    return D.28438;
    <D.28749>:
    D.28750 = strlen (ic_name);
    subname = subname + D.28750;
    D.28744 = *subname;
    if (D.28744 != 46) goto <D.28751>; else goto <D.28752>;
    <D.28751>:
    D.28438 = 0;
    return D.28438;
    <D.28752>:
    subname = subname + 1;
    {
      size_t __s1_len;
      size_t __s2_len;

      D.28429 = im->name;
      D.22105 = __builtin_strcmp (subname, D.28429);
    }
    if (D.22105 != 0) goto <D.28753>; else goto <D.28754>;
    <D.28753>:
    D.28438 = 0;
    return D.28438;
    <D.28754>:
    if (security_enabled != 0) goto <D.28755>; else goto <D.28756>;
    <D.28755>:
    D.28460 = im->flags;
    D.28461 = (int) D.28460;
    D.28462 = D.28461 & 16384;
    if (D.28462 != 0) goto <D.28757>; else goto <D.28758>;
    <D.28757>:
    mono_secman_inheritancedemand_method (cm, im);
    <D.28758>:
    <D.28756>:
    D.28759 = mono_security_get_mode ();
    if (D.28759 == 1) goto <D.28760>; else goto <D.28761>;
    <D.28760>:
    mono_security_core_clr_check_override (class, cm, im);
    <D.28761>:
    D.28762 = is_wcf_hack_disabled ();
    if (D.28762 != 0) goto <D.28763>; else goto <D.28764>;
    <D.28763>:
    D.28765 = mono_method_can_access_method_full (cm, im, 0B);
    if (D.28765 == 0) goto <D.28766>; else goto <D.28767>;
    <D.28766>:
    {
      char * body_name;
      char * decl_name;

      body_name = mono_method_full_name (cm, 1);
      decl_name = mono_method_full_name (im, 1);
      D.28768 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
      mono_class_set_failure (class, 7, D.28768);
      monoeg_g_free (body_name);
      monoeg_g_free (decl_name);
      D.28438 = 0;
      return D.28438;
    }
    <D.28767>:
    <D.28764>:
    D.28438 = 1;
    return D.28438;
  }
}


print_unimplemented_interface_method_info (struct MonoClass * class, struct MonoClass * ic, struct MonoMethod * im, int im_slot, struct MonoMethod * * overrides, int onum)
{
  sizetype index.227;
  sizetype D.28771;
  sizetype D.28772;
  struct MonoMethod * * D.28773;
  struct MonoMethod * D.28774;
  const char * D.28775;
  short int D.28776;
  int D.28777;
  unsigned int index.228;
  unsigned int D.28779;
  struct MonoMethod * * D.28780;
  struct MonoMethod * D.28781;
  const char * D.28782;
  short int D.28783;
  int D.28784;
  struct MonoMethodSignature * D.28785;
  struct MonoType * D.28786;
  struct MonoType * D.28787;
  char * D.28788;
  const char * D.28789;
  unsigned char D.28790;
  struct MonoMethod * * D.28793;
  unsigned int D.28794;
  struct MonoMethod * * D.28795;
  struct MonoMethodSignature * D.28796;
  const char * D.28797;
  unsigned int index.229;
  unsigned int D.28799;
  int index;
  char * method_signature;
  char * type_name;

  index = 0;
  goto <D.22120>;
  <D.22119>:
  index.227 = (sizetype) index;
  D.28771 = index.227 * 8;
  D.28772 = D.28771 + 4;
  D.28773 = overrides + D.28772;
  D.28774 = *D.28773;
  D.28775 = D.28774->name;
  index.227 = (sizetype) index;
  D.28771 = index.227 * 8;
  D.28772 = D.28771 + 4;
  D.28773 = overrides + D.28772;
  D.28774 = *D.28773;
  D.28776 = D.28774->slot;
  D.28777 = (int) D.28776;
  index.228 = (unsigned int) index;
  D.28779 = index.228 * 8;
  D.28780 = overrides + D.28779;
  D.28781 = *D.28780;
  D.28782 = D.28781->name;
  index.228 = (unsigned int) index;
  D.28779 = index.228 * 8;
  D.28780 = overrides + D.28779;
  D.28781 = *D.28780;
  D.28783 = D.28781->slot;
  D.28784 = (int) D.28783;
  mono_trace (16, 2, " at slot %d: %s (%d) overrides %s (%d)\n", im_slot, D.28775, D.28777, D.28782, D.28784);
  index = index + 1;
  <D.22120>:
  if (index < onum) goto <D.22119>; else goto <D.22121>;
  <D.22121>:
  D.28785 = mono_method_signature (im);
  method_signature = mono_signature_get_desc (D.28785, 0);
  D.28786 = &class->byval_arg;
  type_name = mono_type_full_name (D.28786);
  D.28787 = &ic->byval_arg;
  D.28788 = mono_type_get_name (D.28787);
  D.28789 = im->name;
  mono_trace (16, 2, "no implementation for interface method %s::%s(%s) in class %s\n", D.28788, D.28789, method_signature, type_name);
  monoeg_g_free (method_signature);
  monoeg_g_free (type_name);
  mono_class_setup_methods (class);
  D.28790 = class->exception_type;
  if (D.28790 != 0) goto <D.28791>; else goto <D.28792>;
  <D.28791>:
  {
    char * name;

    name = mono_type_get_full_name (class);
    mono_trace (16, 2, "CLASS %s failed to resolve methods\n", name);
    monoeg_g_free (name);
    return;
  }
  <D.28792>:
  index = 0;
  goto <D.22125>;
  <D.22124>:
  {
    struct MonoMethod * cm;

    D.28793 = class->methods;
    index.228 = (unsigned int) index;
    D.28794 = index.228 * 4;
    D.28795 = D.28793 + D.28794;
    cm = *D.28795;
    D.28796 = mono_method_signature (cm);
    method_signature = mono_signature_get_desc (D.28796, 1);
    D.28797 = cm->name;
    mono_trace (16, 2, "METHOD %s(%s)\n", D.28797, method_signature);
    monoeg_g_free (method_signature);
  }
  index = index + 1;
  <D.22125>:
  index.229 = (unsigned int) index;
  D.28799 = class->method.count;
  if (index.229 < D.28799) goto <D.22124>; else goto <D.22126>;
  <D.22126>:
}


is_wcf_hack_disabled ()
{
  int inited.230;
  const gchar * D.28804;
  _Bool D.28805;
  int disabled.231;
  gboolean D.28807;
  static gboolean disabled;
  static gboolean inited = 0;

  inited.230 = inited;
  if (inited.230 == 0) goto <D.28802>; else goto <D.28803>;
  <D.28802>:
  D.28804 = monoeg_g_getenv ("MONO_DISABLE_WCF_HACK");
  D.28805 = D.28804 != 0B;
  disabled.231 = (int) D.28805;
  disabled = disabled.231;
  inited = 1;
  <D.28803>:
  D.28807 = disabled;
  return D.28807;
}


mono_class_get_virtual_methods (struct MonoClass * klass, void * * iter)
{
  struct MonoMethod * D.28811;
  struct MonoMethod * * D.28814;
  unsigned int D.28816;
  struct MonoImage * D.28818;
  unsigned char D.28819;
  unsigned char D.28820;
  struct MonoGenericClass * D.28822;
  void * D.28823;
  struct MonoMethod * D.28829;
  short unsigned int D.28832;
  int D.28833;
  int D.28834;
  unsigned int D.28836;
  unsigned int D.28837;
  struct MonoMethod * * D.28838;
  unsigned int D.28844;
  unsigned int i.232;
  unsigned int D.28846;
  int D.28847;
  unsigned int D.28848;
  unsigned int D.28852;
  unsigned int D.28853;
  int D.28854;
  void * D.28855;
  struct MonoMethod * * method;

  if (iter == 0B) goto <D.28809>; else goto <D.28810>;
  <D.28809>:
  D.28811 = 0B;
  return D.28811;
  <D.28810>:
  D.28814 = klass->methods;
  if (D.28814 != 0B) goto <D.28812>; else goto <D.28815>;
  <D.28815>:
  D.28816 = klass->type_token;
  if (D.28816 == 0) goto <D.28812>; else goto <D.28817>;
  <D.28817>:
  D.28818 = klass->image;
  D.28819 = BIT_FIELD_REF <*D.28818, 8, 128>;
  D.28820 = D.28819 & 8;
  if (D.28820 != 0) goto <D.28812>; else goto <D.28821>;
  <D.28821>:
  D.28822 = klass->generic_class;
  if (D.28822 != 0B) goto <D.28812>; else goto <D.28813>;
  <D.28812>:
  D.28823 = *iter;
  if (D.28823 == 0B) goto <D.28824>; else goto <D.28825>;
  <D.28824>:
  mono_class_setup_methods (klass);
  D.28814 = klass->methods;
  if (D.28814 == 0B) goto <D.28826>; else goto <D.28827>;
  <D.28826>:
  D.28811 = 0B;
  return D.28811;
  <D.28827>:
  method = klass->methods;
  goto <D.28828>;
  <D.28825>:
  method = *iter;
  method = method + 4;
  <D.28828>:
  goto <D.23822>;
  <D.23821>:
  D.28829 = *method;
  if (D.28829 != 0B) goto <D.28830>; else goto <D.28831>;
  <D.28830>:
  D.28829 = *method;
  D.28832 = D.28829->flags;
  D.28833 = (int) D.28832;
  D.28834 = D.28833 & 64;
  if (D.28834 != 0) goto <D.23820>; else goto <D.28835>;
  <D.28835>:
  <D.28831>:
  method = method + 4;
  <D.23822>:
  D.28814 = klass->methods;
  D.28836 = klass->method.count;
  D.28837 = D.28836 * 4;
  D.28838 = D.28814 + D.28837;
  if (D.28838 > method) goto <D.23821>; else goto <D.23820>;
  <D.23820>:
  D.28814 = klass->methods;
  D.28836 = klass->method.count;
  D.28837 = D.28836 * 4;
  D.28838 = D.28814 + D.28837;
  if (D.28838 > method) goto <D.28839>; else goto <D.28840>;
  <D.28839>:
  *iter = method;
  D.28811 = *method;
  return D.28811;
  <D.28840>:
  D.28811 = 0B;
  return D.28811;
  <D.28813>:
  {
    struct MonoMethod * res;
    int i;
    int start_index;

    res = 0B;
    D.28823 = *iter;
    if (D.28823 == 0B) goto <D.28841>; else goto <D.28842>;
    <D.28841>:
    start_index = 0;
    goto <D.28843>;
    <D.28842>:
    D.28823 = *iter;
    start_index = (int) D.28823;
    <D.28843>:
    i = start_index;
    goto <D.23829>;
    <D.23828>:
    {
      guint32 flags;

      D.28818 = klass->image;
      D.28844 = klass->method.first;
      i.232 = (unsigned int) i;
      D.28846 = D.28844 + i.232;
      D.28847 = (int) D.28846;
      flags = mono_metadata_decode_table_row_col (D.28818, 6, D.28847, 2);
      D.28848 = flags & 64;
      if (D.28848 != 0) goto <D.23827>; else goto <D.28849>;
      <D.28849>:
    }
    i = i + 1;
    <D.23829>:
    i.232 = (unsigned int) i;
    D.28836 = klass->method.count;
    if (i.232 < D.28836) goto <D.23828>; else goto <D.23827>;
    <D.23827>:
    i.232 = (unsigned int) i;
    D.28836 = klass->method.count;
    if (i.232 < D.28836) goto <D.28850>; else goto <D.28851>;
    <D.28850>:
    D.28818 = klass->image;
    D.28844 = klass->method.first;
    i.232 = (unsigned int) i;
    D.28846 = D.28844 + i.232;
    D.28852 = D.28846 + 1;
    D.28853 = D.28852 | 100663296;
    res = mono_get_method (D.28818, D.28853, klass);
    D.28854 = i + 1;
    D.28855 = (void *) D.28854;
    *iter = D.28855;
    D.28811 = res;
    return D.28811;
    <D.28851>:
    D.28811 = 0B;
    return D.28811;
  }
}


print_implemented_interfaces (struct MonoClass * klass)
{
  short unsigned int D.28857;
  int D.28858;
  struct MonoClass * * D.28859;
  unsigned int i.233;
  unsigned int D.28861;
  struct MonoClass * * D.28862;
  struct MonoClass * D.28863;
  short unsigned int D.28864;
  int D.28865;
  guint16 * D.28866;
  unsigned int D.28867;
  guint16 * D.28868;
  short unsigned int D.28869;
  int D.28870;
  unsigned int D.28871;
  const char * D.28872;
  const char * D.28873;
  short unsigned int D.28876;
  int D.28877;
  guint8 * D.28879;
  int D.28880;
  sizetype D.28881;
  guint8 * D.28882;
  unsigned char D.28883;
  int D.28884;
  int D.28885;
  int D.28886;
  int D.28887;
  sizetype i.234;
  guint8 * D.28890;
  unsigned char D.28891;
  int D.28892;
  int D.28893;
  int D.28894;
  int D.28895;
  _Bool D.28896;
  int D.28897;
  int D.28898;
  const char * D.28899;
  int D.28900;
  const char * D.28903;
  void * * D.28907;
  void * * D.28908;
  short unsigned int D.28909;
  int D.28910;
  const char * D.28911;
  int D.28912;
  unsigned int D.28913;
  const char * D.28914;
  unsigned int i.235;
  unsigned int D.28916;
  char * name;
  struct MonoError error;
  struct GPtrArray * ifaces;
  int i;
  int ancestor_level;

  try
    {
      ifaces = 0B;
      ancestor_level = 0;
      name = mono_type_get_full_name (klass);
      D.28857 = klass->interface_offsets_count;
      D.28858 = (int) D.28857;
      printf ("Packed interface table for class %s has size %d\n", name, D.28858);
      monoeg_g_free (name);
      i = 0;
      goto <D.21709>;
      <D.21708>:
      D.28859 = klass->interfaces_packed;
      i.233 = (unsigned int) i;
      D.28861 = i.233 * 4;
      D.28862 = D.28859 + D.28861;
      D.28863 = *D.28862;
      D.28864 = D.28863->interface_id;
      D.28865 = (int) D.28864;
      D.28866 = klass->interface_offsets_packed;
      i.233 = (unsigned int) i;
      D.28867 = i.233 * 2;
      D.28868 = D.28866 + D.28867;
      D.28869 = *D.28868;
      D.28870 = (int) D.28869;
      D.28859 = klass->interfaces_packed;
      i.233 = (unsigned int) i;
      D.28861 = i.233 * 4;
      D.28862 = D.28859 + D.28861;
      D.28863 = *D.28862;
      D.28871 = D.28863->method.count;
      D.28859 = klass->interfaces_packed;
      i.233 = (unsigned int) i;
      D.28861 = i.233 * 4;
      D.28862 = D.28859 + D.28861;
      D.28863 = *D.28862;
      D.28872 = D.28863->name_space;
      D.28859 = klass->interfaces_packed;
      i.233 = (unsigned int) i;
      D.28861 = i.233 * 4;
      D.28862 = D.28859 + D.28861;
      D.28863 = *D.28862;
      D.28873 = D.28863->name;
      printf ("  [%03d][UUID %03d][SLOT %03d][SIZE  %03d] interface %s.%s\n", i, D.28865, D.28870, D.28871, D.28872, D.28873);
      i = i + 1;
      <D.21709>:
      D.28857 = klass->interface_offsets_count;
      D.28858 = (int) D.28857;
      if (D.28858 > i) goto <D.21708>; else goto <D.21710>;
      <D.21710>:
      printf ("Interface flags: ");
      i = 0;
      goto <D.21712>;
      <D.21711>:
      D.28876 = klass->max_interface_id;
      D.28877 = (int) D.28876;
      if (D.28877 >= i) goto <D.28878>; else goto <D.28874>;
      <D.28878>:
      D.28879 = klass->interface_bitmap;
      D.28880 = i >> 3;
      D.28881 = (sizetype) D.28880;
      D.28882 = D.28879 + D.28881;
      D.28883 = *D.28882;
      D.28884 = (int) D.28883;
      D.28885 = i & 7;
      D.28886 = D.28884 >> D.28885;
      D.28887 = D.28886 & 1;
      if (D.28887 != 0) goto <D.28888>; else goto <D.28874>;
      <D.28888>:
      printf ("(%d,T)", i);
      goto <D.28875>;
      <D.28874>:
      printf ("(%d,F)", i);
      <D.28875>:
      i = i + 1;
      <D.21712>:
      D.28876 = klass->max_interface_id;
      D.28877 = (int) D.28876;
      if (D.28877 >= i) goto <D.21711>; else goto <D.21713>;
      <D.21713>:
      printf ("\n");
      printf ("Dump interface flags:");
      i = 0;
      goto <D.21715>;
      <D.21714>:
      D.28879 = klass->interface_bitmap;
      i.234 = (sizetype) i;
      D.28890 = D.28879 + i.234;
      D.28891 = *D.28890;
      D.28892 = (int) D.28891;
      printf (" %02X", D.28892);
      i = i + 1;
      <D.21715>:
      D.28876 = klass->max_interface_id;
      D.28877 = (int) D.28876;
      D.28893 = D.28877 + 1;
      D.28894 = D.28893 >> 3;
      D.28876 = klass->max_interface_id;
      D.28877 = (int) D.28876;
      D.28893 = D.28877 + 1;
      D.28895 = D.28893 & 7;
      D.28896 = D.28895 != 0;
      D.28897 = (int) D.28896;
      D.28898 = D.28894 + D.28897;
      if (D.28898 > i) goto <D.21714>; else goto <D.21716>;
      <D.21716>:
      printf ("\n");
      goto <D.21722>;
      <D.21721>:
      D.28899 = klass->name;
      printf ("[LEVEL %d] Implemented interfaces by class %s:\n", ancestor_level, D.28899);
      ifaces = mono_class_get_implemented_interfaces (klass, &error);
      D.28900 = mono_error_ok (&error);
      if (D.28900 == 0) goto <D.28901>; else goto <D.28902>;
      <D.28901>:
      D.28903 = mono_error_get_message (&error);
      printf ("  Type failed due to %s\n", D.28903);
      mono_error_cleanup (&error);
      goto <D.28904>;
      <D.28902>:
      if (ifaces != 0B) goto <D.28905>; else goto <D.28906>;
      <D.28905>:
      i = 0;
      goto <D.21719>;
      <D.21718>:
      {
        struct MonoClass * ic;

        D.28907 = ifaces->pdata;
        i.233 = (unsigned int) i;
        D.28861 = i.233 * 4;
        D.28908 = D.28907 + D.28861;
        ic = *D.28908;
        D.28909 = ic->interface_id;
        D.28910 = (int) D.28909;
        D.28911 = ic->name;
        printf ("  [UIID %d] interface %s\n", D.28910, D.28911);
        D.28909 = ic->interface_id;
        D.28910 = (int) D.28909;
        D.28912 = mono_class_interface_offset (klass, ic);
        D.28913 = ic->method.count;
        D.28914 = ic->name_space;
        D.28911 = ic->name;
        printf ("  [%03d][UUID %03d][SLOT %03d][SIZE  %03d] interface %s.%s\n", i, D.28910, D.28912, D.28913, D.28914, D.28911);
      }
      i = i + 1;
      <D.21719>:
      i.235 = (unsigned int) i;
      D.28916 = ifaces->len;
      if (i.235 < D.28916) goto <D.21718>; else goto <D.21720>;
      <D.21720>:
      monoeg_g_ptr_array_free (ifaces, 1);
      <D.28906>:
      <D.28904>:
      ancestor_level = ancestor_level + 1;
      klass = klass->parent;
      <D.21722>:
      if (klass != 0B) goto <D.21721>; else goto <D.21723>;
      <D.21723>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


printf (const char * restrict __fmt)
{
  int D.28917;

  D.28917 = __printf_chk (1, __fmt, __builtin_va_arg_pack ());
  return D.28917;
}


mono_method_get_vtable_slot (struct MonoMethod * method)
{
  short int D.28919;
  struct MonoClass * D.28922;
  unsigned char D.28923;
  int D.28926;
  struct MonoGenericClass * D.28929;
  _Bool D.28930;
  long int D.28931;
  long int D.28932;
  struct MonoMethod * * D.28935;
  _Bool D.28936;
  long int D.28937;
  long int D.28938;
  unsigned int i.236;
  unsigned int D.28942;
  struct MonoMethod * * D.28943;
  struct MonoMethod * D.28944;
  unsigned int i.237;
  unsigned int D.28947;
  _Bool D.28948;
  long int D.28949;
  long int D.28950;
  struct MonoMethod * * D.28953;
  _Bool D.28954;
  long int D.28955;
  long int D.28956;
  struct MonoMethod * * D.28959;
  struct MonoMethod * D.28960;
  short int D.28961;
  _Bool D.28962;
  long int D.28963;
  long int D.28964;

  D.28919 = method->slot;
  if (D.28919 == -1) goto <D.28920>; else goto <D.28921>;
  <D.28920>:
  D.28922 = method->klass;
  mono_class_setup_vtable (D.28922);
  D.28922 = method->klass;
  D.28923 = D.28922->exception_type;
  if (D.28923 != 0) goto <D.28924>; else goto <D.28925>;
  <D.28924>:
  D.28926 = -1;
  return D.28926;
  <D.28925>:
  D.28919 = method->slot;
  if (D.28919 == -1) goto <D.28927>; else goto <D.28928>;
  <D.28927>:
  {
    struct MonoClass * gklass;
    int i;

    D.28922 = method->klass;
    D.28929 = D.28922->generic_class;
    D.28930 = D.28929 == 0B;
    D.28931 = (long int) D.28930;
    D.28932 = __builtin_expect (D.28931, 0);
    if (D.28932 != 0) goto <D.28933>; else goto <D.28934>;
    <D.28933>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4676, "method->klass->generic_class");
    <D.28934>:
    D.28922 = method->klass;
    D.28929 = D.28922->generic_class;
    gklass = D.28929->container_class;
    D.28922 = method->klass;
    mono_class_setup_methods (D.28922);
    D.28922 = method->klass;
    D.28935 = D.28922->methods;
    D.28936 = D.28935 == 0B;
    D.28937 = (long int) D.28936;
    D.28938 = __builtin_expect (D.28937, 0);
    if (D.28938 != 0) goto <D.28939>; else goto <D.28940>;
    <D.28939>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4679, "method->klass->methods");
    <D.28940>:
    i = 0;
    goto <D.22317>;
    <D.22316>:
    D.28922 = method->klass;
    D.28935 = D.28922->methods;
    i.236 = (unsigned int) i;
    D.28942 = i.236 * 4;
    D.28943 = D.28935 + D.28942;
    D.28944 = *D.28943;
    if (D.28944 == method) goto <D.22315>; else goto <D.28945>;
    <D.28945>:
    i = i + 1;
    <D.22317>:
    i.237 = (unsigned int) i;
    D.28922 = method->klass;
    D.28947 = D.28922->method.count;
    if (i.237 < D.28947) goto <D.22316>; else goto <D.22315>;
    <D.22315>:
    i.237 = (unsigned int) i;
    D.28922 = method->klass;
    D.28947 = D.28922->method.count;
    D.28948 = i.237 >= D.28947;
    D.28949 = (long int) D.28948;
    D.28950 = __builtin_expect (D.28949, 0);
    if (D.28950 != 0) goto <D.28951>; else goto <D.28952>;
    <D.28951>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4684, "i < method->klass->method.count");
    <D.28952>:
    D.28953 = gklass->methods;
    D.28954 = D.28953 == 0B;
    D.28955 = (long int) D.28954;
    D.28956 = __builtin_expect (D.28955, 0);
    if (D.28956 != 0) goto <D.28957>; else goto <D.28958>;
    <D.28957>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4685, "gklass->methods");
    <D.28958>:
    D.28953 = gklass->methods;
    i.236 = (unsigned int) i;
    D.28942 = i.236 * 4;
    D.28959 = D.28953 + D.28942;
    D.28960 = *D.28959;
    D.28961 = D.28960->slot;
    method->slot = D.28961;
  }
  <D.28928>:
  D.28919 = method->slot;
  D.28962 = D.28919 == -1;
  D.28963 = (long int) D.28962;
  D.28964 = __builtin_expect (D.28963, 0);
  if (D.28964 != 0) goto <D.28965>; else goto <D.28966>;
  <D.28965>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4688, "method->slot != -1");
  <D.28966>:
  <D.28921>:
  D.28919 = method->slot;
  D.28926 = (int) D.28919;
  return D.28926;
}


mono_method_get_vtable_index (struct MonoMethod * method)
{
  unsigned char D.28968;
  unsigned char D.28969;
  short unsigned int D.28972;
  int D.28973;
  int D.28974;
  struct MonoMethod * D.28977;
  unsigned char D.28978;
  unsigned char D.28979;
  int D.28982;

  D.28968 = BIT_FIELD_REF <*method, 8, 168>;
  D.28969 = D.28968 & 16;
  if (D.28969 != 0) goto <D.28970>; else goto <D.28971>;
  <D.28970>:
  D.28972 = method->flags;
  D.28973 = (int) D.28972;
  D.28974 = D.28973 & 64;
  if (D.28974 != 0) goto <D.28975>; else goto <D.28976>;
  <D.28975>:
  {
    struct MonoMethodInflated * imethod;

    imethod = method;
    D.28977 = imethod->declaring;
    D.28978 = BIT_FIELD_REF <*D.28977, 8, 168>;
    D.28979 = D.28978 & 8;
    if (D.28979 != 0) goto <D.28980>; else goto <D.28981>;
    <D.28980>:
    D.28977 = imethod->declaring;
    D.28982 = mono_method_get_vtable_slot (D.28977);
    return D.28982;
    <D.28981>:
  }
  <D.28976>:
  <D.28971>:
  D.28982 = mono_method_get_vtable_slot (method);
  return D.28982;
}


mono_class_init (struct MonoClass * class)
{
  _Bool D.28984;
  long int D.28985;
  long int D.28986;
  unsigned char D.28991;
  unsigned char D.28992;
  unsigned char D.28994;
  mono_bool D.28995;
  _Bool D.28996;
  unsigned char D.29000;
  gchar * D.29003;
  int D.29004;
  int D.29007;
  struct MonoImage * D.29010;
  const char * D.29011;
  const char * D.29012;
  char * D.29013;
  unsigned char D.29014;
  _Bool D.29015;
  _Bool D.29016;
  _Bool D.29017;
  unsigned char D.29020;
  unsigned char D.29021;
  unsigned char D.29024;
  int D.29027;
  struct MonoClass * D.29030;
  unsigned int D.29033;
  unsigned int D.29034;
  long unsigned int D.29037;
  long unsigned int D.29038;
  struct MonoGenericClass * D.29039;
  unsigned char D.29042;
  unsigned char D.29043;
  long unsigned int D.29046;
  long unsigned int D.29047;
  unsigned char D.29048;
  gchar * D.29053;
  unsigned int D.29056;
  unsigned int D.29057;
  unsigned char D.29059;
  unsigned int D.29061;
  short unsigned int D.29062;
  unsigned char D.29065;
  unsigned char D.29066;
  unsigned char D.29072;
  unsigned char D.29073;
  unsigned int D.29075;
  unsigned char D.29078;
  unsigned char D.29079;
  unsigned int D.29082;
  int D.29083;
  unsigned int D.29084;
  int D.29085;
  unsigned int D.29086;
  unsigned char D.29087;
  <unnamed-unsigned:4> D.29088;
  unsigned int D.29089;
  unsigned char D.29090;
  <unnamed-unsigned:1> D.29091;
  <unnamed-unsigned:1> D.29092;
  <unnamed-unsigned:1> D.29093;
  <unnamed-unsigned:1> D.29094;
  unsigned char D.29096;
  struct MonoLoaderError * D.29100;
  unsigned char D.29102;
  guint32 iftmp.238;
  short unsigned int D.29109;
  unsigned int D.29112;
  int D.29113;
  int D.29114;
  unsigned int D.29115;
  unsigned int D.29116;
  struct MonoMethod * default_ghc.239;
  unsigned int D.29122;
  int D.29123;
  <unnamed-unsigned:1> D.29124;
  <unnamed-unsigned:1> D.29125;
  <unnamed-unsigned:1> D.29126;
  struct MonoClass * D.29132;
  struct MonoType * D.29133;
  int D.29134;
  _Bool D.29135;
  int D.29136;
  int D.29139;
  <unnamed-unsigned:1> D.29147;
  int D.29148;
  unsigned char D.29149;
  <unnamed-unsigned:1> D.29150;
  <unnamed-unsigned:1> D.29151;
  unsigned char D.29152;
  int D.29155;
  struct MonoImage * D.29161;
  short unsigned int D.29166;
  int D.29167;
  int D.29168;
  struct MonoMethod * * D.29173;
  unsigned int i.240;
  unsigned int D.29175;
  struct MonoMethod * * D.29176;
  short unsigned int D.29177;
  int D.29178;
  int D.29179;
  int D.22492;
  int iftmp.241;
  int D.22488;
  const char[7] * D.29185;
  unsigned char D.29186;
  int D.29187;
  unsigned char D.29188;
  int D.29189;
  _Bool D.29190;
  _Bool D.29191;
  _Bool D.29192;
  const unsigned char * D.29195;
  unsigned char D.29196;
  int D.29197;
  const unsigned char * D.29198;
  unsigned char D.29199;
  int D.29200;
  _Bool D.29201;
  _Bool D.29202;
  const unsigned char * D.29205;
  unsigned char D.29206;
  int D.29207;
  const unsigned char * D.29208;
  unsigned char D.29209;
  int D.29210;
  _Bool D.29211;
  _Bool D.29212;
  const unsigned char * D.29215;
  unsigned char D.29216;
  int D.29217;
  const unsigned char * D.29218;
  unsigned char D.29219;
  int D.29220;
  const char * D.29222;
  unsigned int i.242;
  unsigned char D.29228;
  struct MonoLoaderError * D.29231;
  int D.29233;
  struct MonoLoaderError * D.29238;
  int D.29240;
  <unnamed type> D.29244;
  struct MonoLoaderError * D.29247;
  struct MonoLoaderError * D.29252;
  int D.29255;
  gchar * D.29258;
  void (*<T2885>) (struct MonoClass *) mono_debugger_class_init_func.243;
  int i;
  struct MonoCachedClassInfo cached_info;
  gboolean has_cached_info;
  void leave = <<< error >>>;

  try
    {
      D.28984 = class == 0B;
      D.28985 = (long int) D.28984;
      D.28986 = __builtin_expect (D.28985, 0);
      if (D.28986 != 0) goto <D.28987>; else goto <D.28988>;
      <D.28987>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4915, "class");
      <D.28988>:
      D.28991 = BIT_FIELD_REF <*class, 8, 160>;
      D.28992 = D.28991 & 1;
      if (D.28992 != 0) goto <D.28989>; else goto <D.28993>;
      <D.28993>:
      D.28994 = class->exception_type;
      if (D.28994 != 0) goto <D.28989>; else goto <D.28990>;
      <D.28989>:
      D.28994 = class->exception_type;
      D.28996 = D.28994 == 0;
      D.28995 = (mono_bool) D.28996;
      return D.28995;
      <D.28990>:
      mono_loader_lock ();
      D.28991 = BIT_FIELD_REF <*class, 8, 160>;
      D.28992 = D.28991 & 1;
      if (D.28992 != 0) goto <D.28997>; else goto <D.28999>;
      <D.28999>:
      D.28994 = class->exception_type;
      if (D.28994 != 0) goto <D.28997>; else goto <D.28998>;
      <D.28997>:
      mono_loader_unlock ();
      D.28994 = class->exception_type;
      D.28996 = D.28994 == 0;
      D.28995 = (mono_bool) D.28996;
      return D.28995;
      <D.28998>:
      D.28991 = BIT_FIELD_REF <*class, 8, 160>;
      D.29000 = D.28991 & 2;
      if (D.29000 != 0) goto <D.29001>; else goto <D.29002>;
      <D.29001>:
      D.29003 = monoeg_strdup ("Recursive type definition detected");
      mono_class_set_failure (class, 7, D.29003);
      goto leave;
      <D.29002>:
      class->init_pending = 1;
      D.29004 = mono_verifier_is_enabled_for_class (class);
      if (D.29004 != 0) goto <D.29005>; else goto <D.29006>;
      <D.29005>:
      D.29007 = mono_verifier_verify_class (class);
      if (D.29007 == 0) goto <D.29008>; else goto <D.29009>;
      <D.29008>:
      D.29010 = class->image;
      D.29011 = class->name;
      D.29010 = class->image;
      D.29012 = D.29010->assembly_name;
      D.29013 = concat_two_strings_with_zero (D.29010, D.29011, D.29012);
      mono_class_set_failure (class, 7, D.29013);
      goto leave;
      <D.29009>:
      <D.29006>:
      D.29014 = class->byval_arg.type;
      D.29015 = D.29014 == 20;
      D.29016 = D.29014 == 29;
      D.29017 = D.29015 | D.29016;
      if (D.29017 != 0) goto <D.29018>; else goto <D.29019>;
      <D.29018>:
      {
        struct MonoClass * element_class;

        element_class = class->element_class;
        D.29020 = BIT_FIELD_REF <*element_class, 8, 160>;
        D.29021 = D.29020 & 1;
        if (D.29021 == 0) goto <D.29022>; else goto <D.29023>;
        <D.29022>:
        mono_class_init (element_class);
        <D.29023>:
        D.29024 = element_class->exception_type;
        if (D.29024 != 0) goto <D.29025>; else goto <D.29026>;
        <D.29025>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.29026>:
      }
      <D.29019>:
      D.29027 = mono_is_security_manager_active ();
      if (D.29027 != 0) goto <D.29028>; else goto <D.29029>;
      <D.29028>:
      D.29030 = class->parent;
      if (D.29030 != 0B) goto <D.29031>; else goto <D.29032>;
      <D.29031>:
      D.29030 = class->parent;
      D.29033 = D.29030->flags;
      D.29034 = D.29033 & 262144;
      if (D.29034 != 0) goto <D.29035>; else goto <D.29036>;
      <D.29035>:
      D.29030 = class->parent;
      mono_secman_inheritancedemand_class (class, D.29030);
      <D.29036>:
      <D.29032>:
      <D.29029>:
      D.29037 = mono_stats.initialized_class_count;
      D.29038 = D.29037 + 1;
      mono_stats.initialized_class_count = D.29038;
      D.29039 = class->generic_class;
      if (D.29039 != 0B) goto <D.29040>; else goto <D.29041>;
      <D.29040>:
      D.29039 = class->generic_class;
      D.29042 = BIT_FIELD_REF <*D.29039, 8, 96>;
      D.29043 = D.29042 & 1;
      if (D.29043 == 0) goto <D.29044>; else goto <D.29045>;
      <D.29044>:
      {
        struct MonoClass * gklass;

        D.29039 = class->generic_class;
        gklass = D.29039->container_class;
        D.29046 = mono_stats.generic_class_count;
        D.29047 = D.29046 + 1;
        mono_stats.generic_class_count = D.29047;
        class->method = gklass->method;
        class->field = gklass->field;
        mono_class_init (gklass);
        D.29048 = gklass->exception_type;
        if (D.29048 == 0) goto <D.29049>; else goto <D.29050>;
        <D.29049>:
        mono_class_setup_methods (gklass);
        <D.29050>:
        D.29048 = gklass->exception_type;
        if (D.29048 != 0) goto <D.29051>; else goto <D.29052>;
        <D.29051>:
        D.29053 = monoeg_g_strdup_printf ("Generic Type Defintion failed to init");
        mono_class_set_failure (class, 7, D.29053);
        goto leave;
        <D.29052>:
        D.29056 = class->flags;
        D.29057 = D.29056 & 32;
        if (D.29057 != 0) goto <D.29054>; else goto <D.29058>;
        <D.29058>:
        D.29059 = class->byval_arg.type;
        if (D.29059 == 19) goto <D.29054>; else goto <D.29060>;
        <D.29060>:
        D.29059 = class->byval_arg.type;
        if (D.29059 == 30) goto <D.29054>; else goto <D.29055>;
        <D.29054>:
        D.29061 = mono_get_unique_iid (class);
        D.29062 = (short unsigned int) D.29061;
        class->interface_id = D.29062;
        <D.29055>:
      }
      <D.29045>:
      <D.29041>:
      D.29030 = class->parent;
      if (D.29030 != 0B) goto <D.29063>; else goto <D.29064>;
      <D.29063>:
      D.29030 = class->parent;
      D.29065 = BIT_FIELD_REF <*D.29030, 8, 160>;
      D.29066 = D.29065 & 1;
      if (D.29066 == 0) goto <D.29067>; else goto <D.29068>;
      <D.29067>:
      D.29030 = class->parent;
      mono_class_init (D.29030);
      <D.29068>:
      <D.29064>:
      has_cached_info = mono_class_get_cached_class_info (class, &cached_info);
      D.29039 = class->generic_class;
      if (D.29039 != 0B) goto <D.29069>; else goto <D.29071>;
      <D.29071>:
      D.29010 = class->image;
      D.29072 = BIT_FIELD_REF <*D.29010, 8, 128>;
      D.29073 = D.29072 & 8;
      if (D.29073 != 0) goto <D.29069>; else goto <D.29074>;
      <D.29074>:
      D.29075 = class->type_token;
      if (D.29075 == 0) goto <D.29069>; else goto <D.29076>;
      <D.29076>:
      if (has_cached_info != 0) goto <D.29077>; else goto <D.29070>;
      <D.29077>:
      D.29078 = BIT_FIELD_REF <cached_info, 8, 32>;
      D.29079 = D.29078 & 8;
      if (D.29079 == 0) goto <D.29069>; else goto <D.29070>;
      <D.29069>:
      class->nested_classes_inited = 1;
      <D.29070>:
      if (has_cached_info != 0) goto <D.29080>; else goto <D.29081>;
      <D.29080>:
      D.29082 = cached_info.instance_size;
      D.29083 = (int) D.29082;
      class->instance_size = D.29083;
      D.29084 = cached_info.class_size;
      D.29085 = (int) D.29084;
      class->sizes.class_size = D.29085;
      D.29086 = cached_info.packing_size;
      D.29087 = (unsigned char) D.29086;
      D.29088 = (<unnamed-unsigned:4>) D.29087;
      class->packing_size = D.29088;
      D.29089 = cached_info.min_align;
      D.29090 = (unsigned char) D.29089;
      class->min_align = D.29090;
      D.29091 = cached_info.blittable;
      class->blittable = D.29091;
      D.29092 = cached_info.has_references;
      class->has_references = D.29092;
      D.29093 = cached_info.has_static_refs;
      class->has_static_refs = D.29093;
      D.29094 = cached_info.no_special_static_fields;
      class->no_special_static_fields = D.29094;
      goto <D.29095>;
      <D.29081>:
      D.28991 = BIT_FIELD_REF <*class, 8, 160>;
      D.29096 = D.28991 & 4;
      if (D.29096 == 0) goto <D.29097>; else goto <D.29098>;
      <D.29097>:
      mono_class_setup_fields (class);
      D.28994 = class->exception_type;
      if (D.28994 != 0) goto leave; else goto <D.29099>;
      <D.29099>:
      D.29100 = mono_loader_get_last_error ();
      if (D.29100 != 0B) goto leave; else goto <D.29101>;
      <D.29101>:
      <D.29098>:
      <D.29095>:
      D.29102 = class->rank;
      if (D.29102 != 0) goto <D.29103>; else goto <D.29104>;
      <D.29103>:
      D.29102 = class->rank;
      if (D.29102 > 1) goto <D.29106>; else goto <D.29107>;
      <D.29106>:
      iftmp.238 = 5;
      goto <D.29108>;
      <D.29107>:
      iftmp.238 = 4;
      <D.29108>:
      class->method.count = iftmp.238;
      D.29109 = class->interface_count;
      if (D.29109 != 0) goto <D.29110>; else goto <D.29111>;
      <D.29110>:
      {
        int count_generic;

        count_generic = generic_array_methods (class);
        D.29112 = class->method.count;
        D.29109 = class->interface_count;
        D.29113 = (int) D.29109;
        D.29114 = D.29113 * count_generic;
        D.29115 = (unsigned int) D.29114;
        D.29116 = D.29112 + D.29115;
        class->method.count = D.29116;
      }
      <D.29111>:
      <D.29104>:
      mono_class_setup_supertypes (class);
      default_ghc.239 = default_ghc;
      if (default_ghc.239 == 0B) goto <D.29118>; else goto <D.29119>;
      <D.29118>:
      initialize_object_slots (class);
      <D.29119>:
      if (has_cached_info != 0) goto <D.29120>; else goto <D.29121>;
      <D.29120>:
      D.29122 = cached_info.vtable_size;
      D.29123 = (int) D.29122;
      class->vtable_size = D.29123;
      D.29124 = cached_info.has_finalize;
      class->has_finalize = D.29124;
      class->has_finalize_inited = 1;
      D.29125 = cached_info.ghcimpl;
      class->ghcimpl = D.29125;
      D.29126 = cached_info.has_cctor;
      class->has_cctor = D.29126;
      goto <D.29127>;
      <D.29121>:
      D.29102 = class->rank;
      if (D.29102 == 1) goto <D.29130>; else goto <D.29128>;
      <D.29130>:
      D.29059 = class->byval_arg.type;
      if (D.29059 == 29) goto <D.29131>; else goto <D.29128>;
      <D.29131>:
      {
        static int szarray_vtable_size[2] = {0};
        int slot;

        D.29132 = class->element_class;
        D.29133 = &D.29132->byval_arg;
        D.29134 = mono_type_is_reference (D.29133);
        D.29135 = D.29134 == 0;
        slot = (int) D.29135;
        D.29136 = szarray_vtable_size[slot];
        if (D.29136 == 0) goto <D.29137>; else goto <D.29138>;
        <D.29137>:
        mono_class_setup_vtable (class);
        D.29139 = class->vtable_size;
        szarray_vtable_size[slot] = D.29139;
        goto <D.29140>;
        <D.29138>:
        D.29136 = szarray_vtable_size[slot];
        class->vtable_size = D.29136;
        <D.29140>:
        class->has_finalize_inited = 1;
      }
      goto <D.29129>;
      <D.29128>:
      D.29039 = class->generic_class;
      if (D.29039 != 0B) goto <D.29143>; else goto <D.29141>;
      <D.29143>:
      D.29056 = class->flags;
      D.29057 = D.29056 & 32;
      if (D.29057 == 0) goto <D.29144>; else goto <D.29141>;
      <D.29144>:
      D.29059 = class->byval_arg.type;
      if (D.29059 != 19) goto <D.29145>; else goto <D.29141>;
      <D.29145>:
      D.29059 = class->byval_arg.type;
      if (D.29059 != 30) goto <D.29146>; else goto <D.29141>;
      <D.29146>:
      {
        struct MonoClass * gklass;

        D.29039 = class->generic_class;
        gklass = D.29039->container_class;
        D.29147 = gklass->ghcimpl;
        class->ghcimpl = D.29147;
        D.29148 = mono_class_has_finalizer (gklass);
        D.29149 = (unsigned char) D.29148;
        D.29150 = (<unnamed-unsigned:1>) D.29149;
        class->has_finalize = D.29150;
        class->has_finalize_inited = 1;
        D.29151 = gklass->has_cctor;
        class->has_cctor = D.29151;
        mono_class_setup_vtable (gklass);
        D.29152 = gklass->exception_type;
        if (D.29152 != 0) goto <D.29153>; else goto <D.29154>;
        <D.29153>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.29154>:
        D.29155 = gklass->vtable_size;
        class->vtable_size = D.29155;
      }
      goto <D.29142>;
      <D.29141>:
      D.29056 = class->flags;
      D.29057 = D.29056 & 32;
      if (D.29057 == 0) goto <D.29159>; else goto <D.29156>;
      <D.29159>:
      D.29059 = class->byval_arg.type;
      if (D.29059 != 19) goto <D.29160>; else goto <D.29156>;
      <D.29160>:
      D.29059 = class->byval_arg.type;
      if (D.29059 != 30) goto <D.29157>; else goto <D.29156>;
      <D.29156>:
      D.29010 = class->image;
      D.29161 = mono_defaults.corlib;
      if (D.29010 != D.29161) goto <D.29157>; else goto <D.29158>;
      <D.29157>:
      {
        struct MonoMethod * cmethod;

        cmethod = 0B;
        D.29075 = class->type_token;
        if (D.29075 != 0) goto <D.29162>; else goto <D.29163>;
        <D.29162>:
        cmethod = find_method_in_metadata (class, ".cctor", 0, 2048);
        if (cmethod != 0B) goto <D.29164>; else goto <D.29165>;
        <D.29164>:
        D.29166 = cmethod->flags;
        D.29167 = (int) D.29166;
        D.29168 = D.29167 & 2048;
        if (D.29168 != 0) goto <D.29169>; else goto <D.29170>;
        <D.29169>:
        class->has_cctor = 1;
        <D.29170>:
        <D.29165>:
        goto <D.29171>;
        <D.29163>:
        mono_class_setup_methods (class);
        D.28994 = class->exception_type;
        if (D.28994 != 0) goto leave; else goto <D.29172>;
        <D.29172>:
        i = 0;
        goto <D.22495>;
        <D.22494>:
        {
          struct MonoMethod * method;

          D.29173 = class->methods;
          i.240 = (unsigned int) i;
          D.29175 = i.240 * 4;
          D.29176 = D.29173 + D.29175;
          method = *D.29176;
          D.29177 = method->flags;
          D.29178 = (int) D.29177;
          D.29179 = D.29178 & 2048;
          if (D.29179 != 0) goto <D.29180>; else goto <D.29181>;
          <D.29180>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s1_len = 6;
            if (__s1_len <= 3) goto <D.29183>; else goto <D.29184>;
            <D.29183>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = method->name;
              D.29185 = ".cctor";
              D.29186 = MEM[(const unsigned char *)D.29185];
              D.29187 = (int) D.29186;
              D.29188 = *__s2;
              D.29189 = (int) D.29188;
              __result = D.29187 - D.29189;
              {
                D.29190 = __s1_len != 0;
                D.29191 = __result == 0;
                D.29192 = D.29190 & D.29191;
                if (D.29192 != 0) goto <D.29193>; else goto <D.29194>;
                <D.29193>:
                D.29195 = &MEM[(void *)".cctor" + 1B];
                D.29196 = *D.29195;
                D.29197 = (int) D.29196;
                D.29198 = __s2 + 1;
                D.29199 = *D.29198;
                D.29200 = (int) D.29199;
                __result = D.29197 - D.29200;
                D.29201 = __s1_len > 1;
                D.29191 = __result == 0;
                D.29202 = D.29201 & D.29191;
                if (D.29202 != 0) goto <D.29203>; else goto <D.29204>;
                <D.29203>:
                D.29205 = &MEM[(void *)".cctor" + 2B];
                D.29206 = *D.29205;
                D.29207 = (int) D.29206;
                D.29208 = __s2 + 2;
                D.29209 = *D.29208;
                D.29210 = (int) D.29209;
                __result = D.29207 - D.29210;
                D.29211 = __s1_len > 2;
                D.29191 = __result == 0;
                D.29212 = D.29211 & D.29191;
                if (D.29212 != 0) goto <D.29213>; else goto <D.29214>;
                <D.29213>:
                D.29215 = &MEM[(void *)".cctor" + 3B];
                D.29216 = *D.29215;
                D.29217 = (int) D.29216;
                D.29218 = __s2 + 3;
                D.29219 = *D.29218;
                D.29220 = (int) D.29219;
                __result = D.29217 - D.29220;
                <D.29214>:
                <D.29204>:
                <D.29194>:
              }
              D.22488 = __result;
            }
            iftmp.241 = D.22488;
            goto <D.29221>;
            <D.29184>:
            D.29222 = method->name;
            iftmp.241 = __builtin_strcmp (".cctor", D.29222);
            <D.29221>:
            D.22492 = iftmp.241;
          }
          if (D.22492 == 0) goto <D.29223>; else goto <D.29224>;
          <D.29223>:
          class->has_cctor = 1;
          goto <D.22493>;
          <D.29224>:
          <D.29181>:
        }
        i = i + 1;
        <D.22495>:
        i.242 = (unsigned int) i;
        D.29112 = class->method.count;
        if (i.242 < D.29112) goto <D.22494>; else goto <D.22493>;
        <D.22493>:
        <D.29171>:
      }
      <D.29158>:
      <D.29142>:
      <D.29129>:
      <D.29127>:
      D.29030 = class->parent;
      if (D.29030 != 0B) goto <D.29226>; else goto <D.29227>;
      <D.29226>:
      {
        int first_iface_slot;

        D.29030 = class->parent;
        mono_class_init (D.29030);
        D.29030 = class->parent;
        D.29228 = D.29030->exception_type;
        if (D.29228 != 0) goto <D.29229>; else goto <D.29230>;
        <D.29229>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.29230>:
        D.29231 = mono_loader_get_last_error ();
        if (D.29231 != 0B) goto leave; else goto <D.29232>;
        <D.29232>:
        D.29030 = class->parent;
        D.29233 = D.29030->vtable_size;
        if (D.29233 == 0) goto <D.29234>; else goto <D.29235>;
        <D.29234>:
        D.29030 = class->parent;
        mono_class_setup_vtable (D.29030);
        D.29030 = class->parent;
        D.29228 = D.29030->exception_type;
        if (D.29228 != 0) goto <D.29236>; else goto <D.29237>;
        <D.29236>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.29237>:
        D.29238 = mono_loader_get_last_error ();
        if (D.29238 != 0B) goto leave; else goto <D.29239>;
        <D.29239>:
        <D.29235>:
        D.29030 = class->parent;
        first_iface_slot = D.29030->vtable_size;
        D.29240 = mono_class_need_stelemref_method (class);
        if (D.29240 != 0) goto <D.29241>; else goto <D.29242>;
        <D.29241>:
        first_iface_slot = first_iface_slot + 1;
        <D.29242>:
        setup_interface_offsets (class, first_iface_slot, 1);
      }
      goto <D.29243>;
      <D.29227>:
      setup_interface_offsets (class, 0, 1);
      <D.29243>:
      D.29244 = mono_security_get_mode ();
      if (D.29244 == 1) goto <D.29245>; else goto <D.29246>;
      <D.29245>:
      mono_security_core_clr_check_inheritance (class);
      <D.29246>:
      D.29247 = mono_loader_get_last_error ();
      if (D.29247 != 0B) goto <D.29248>; else goto <D.29249>;
      <D.29248>:
      D.28994 = class->exception_type;
      if (D.28994 == 0) goto <D.29250>; else goto <D.29251>;
      <D.29250>:
      D.29252 = mono_loader_get_last_error ();
      set_failure_from_loader_error (class, D.29252);
      <D.29251>:
      mono_loader_clear_error ();
      <D.29249>:
      D.29039 = class->generic_class;
      if (D.29039 != 0B) goto <D.29253>; else goto <D.29254>;
      <D.29253>:
      D.29255 = mono_verifier_class_is_valid_generic_instantiation (class);
      if (D.29255 == 0) goto <D.29256>; else goto <D.29257>;
      <D.29256>:
      D.29258 = monoeg_strdup ("Invalid generic instantiation");
      mono_class_set_failure (class, 7, D.29258);
      <D.29257>:
      <D.29254>:
      goto leave;
      leave:
      mono_memory_barrier ();
      class->inited = 1;
      class->init_pending = 0;
      mono_loader_unlock ();
      mono_debugger_class_init_func.243 = mono_debugger_class_init_func;
      if (mono_debugger_class_init_func.243 != 0B) goto <D.29260>; else goto <D.29261>;
      <D.29260>:
      mono_debugger_class_init_func.243 = mono_debugger_class_init_func;
      mono_debugger_class_init_func.243 (class);
      <D.29261>:
      D.28994 = class->exception_type;
      D.28996 = D.28994 == 0;
      D.28995 = (mono_bool) D.28996;
      return D.28995;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_get_unique_iid (struct MonoClass * class)
{
  int iftmp.244;
  unsigned int D.29267;
  unsigned int D.29268;
  unsigned char D.29270;
  _Bool D.29273;
  long int D.29274;
  long int D.29275;
  struct MonoBitSet * global_interface_bitset.245;
  struct MonoBitSet * global_interface_bitset.246;
  unsigned int D.29284;
  int D.29285;
  unsigned int D.29286;
  unsigned int iid.247;
  struct MonoGenericClass * D.29288;
  struct MonoImage * D.29291;
  struct MonoBitSet * D.29292;
  unsigned int D.29295;
  int D.29298;
  unsigned int D.29299;
  struct MonoBitSet * D.29301;
  int mono_print_vtable.248;
  struct MonoType * D.29305;
  struct MonoGenericInst * D.29309;
  unsigned char D.29310;
  unsigned char D.29311;
  unsigned int D.29313;
  _Bool D.29314;
  long int D.29315;
  long int D.29316;
  char * D.29319;
  _Bool D.29320;
  long int D.29321;
  long int D.29322;
  guint D.29325;
  int iid;

  D.29267 = class->flags;
  D.29268 = D.29267 & 32;
  if (D.29268 == 0) goto <D.29269>; else goto <D.29265>;
  <D.29269>:
  D.29270 = class->byval_arg.type;
  if (D.29270 != 19) goto <D.29271>; else goto <D.29265>;
  <D.29271>:
  D.29270 = class->byval_arg.type;
  if (D.29270 != 30) goto <D.29272>; else goto <D.29265>;
  <D.29272>:
  iftmp.244 = 1;
  goto <D.29266>;
  <D.29265>:
  iftmp.244 = 0;
  <D.29266>:
  D.29273 = iftmp.244 != 0;
  D.29274 = (long int) D.29273;
  D.29275 = __builtin_expect (D.29274, 0);
  if (D.29275 != 0) goto <D.29276>; else goto <D.29277>;
  <D.29276>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2592, "MONO_CLASS_IS_INTERFACE (class)");
  <D.29277>:
  global_interface_bitset.245 = global_interface_bitset;
  if (global_interface_bitset.245 == 0B) goto <D.29279>; else goto <D.29280>;
  <D.29279>:
  global_interface_bitset.246 = mono_bitset_new (128, 0);
  global_interface_bitset = global_interface_bitset.246;
  <D.29280>:
  global_interface_bitset.245 = global_interface_bitset;
  iid = mono_bitset_find_first_unset (global_interface_bitset.245, -1);
  if (iid < 0) goto <D.29282>; else goto <D.29283>;
  <D.29282>:
  {
    int old_size;
    struct MonoBitSet * new_set;

    global_interface_bitset.245 = global_interface_bitset;
    D.29284 = mono_bitset_size (global_interface_bitset.245);
    old_size = (int) D.29284;
    global_interface_bitset.245 = global_interface_bitset;
    D.29285 = old_size * 2;
    D.29286 = (unsigned int) D.29285;
    new_set = mono_bitset_clone (global_interface_bitset.245, D.29286);
    global_interface_bitset.245 = global_interface_bitset;
    mono_bitset_free (global_interface_bitset.245);
    global_interface_bitset = new_set;
    iid = old_size;
  }
  <D.29283>:
  global_interface_bitset.245 = global_interface_bitset;
  iid.247 = (unsigned int) iid;
  mono_bitset_set (global_interface_bitset.245, iid.247);
  D.29288 = class->generic_class;
  if (D.29288 == 0B) goto <D.29289>; else goto <D.29290>;
  <D.29289>:
  D.29291 = class->image;
  D.29292 = D.29291->interface_bitset;
  if (D.29292 != 0B) goto <D.29293>; else goto <D.29294>;
  <D.29293>:
  iid.247 = (unsigned int) iid;
  D.29291 = class->image;
  D.29292 = D.29291->interface_bitset;
  D.29295 = mono_bitset_size (D.29292);
  if (iid.247 >= D.29295) goto <D.29296>; else goto <D.29297>;
  <D.29296>:
  {
    struct MonoBitSet * new_set;

    D.29291 = class->image;
    D.29292 = D.29291->interface_bitset;
    D.29298 = iid + 1;
    D.29299 = (unsigned int) D.29298;
    new_set = mono_bitset_clone (D.29292, D.29299);
    D.29291 = class->image;
    D.29292 = D.29291->interface_bitset;
    mono_bitset_free (D.29292);
    D.29291 = class->image;
    D.29291->interface_bitset = new_set;
  }
  <D.29297>:
  goto <D.29300>;
  <D.29294>:
  D.29291 = class->image;
  D.29298 = iid + 1;
  D.29299 = (unsigned int) D.29298;
  D.29301 = mono_bitset_new (D.29299, 0);
  D.29291->interface_bitset = D.29301;
  <D.29300>:
  D.29291 = class->image;
  D.29292 = D.29291->interface_bitset;
  iid.247 = (unsigned int) iid;
  mono_bitset_set (D.29292, iid.247);
  <D.29290>:
  mono_print_vtable.248 = mono_print_vtable;
  if (mono_print_vtable.248 != 0) goto <D.29303>; else goto <D.29304>;
  <D.29303>:
  {
    int generic_id;
    char * type_name;

    D.29305 = &class->byval_arg;
    type_name = mono_type_full_name (D.29305);
    D.29288 = class->generic_class;
    if (D.29288 != 0B) goto <D.29308>; else goto <D.29306>;
    <D.29308>:
    D.29288 = class->generic_class;
    D.29309 = D.29288->context.class_inst;
    D.29310 = BIT_FIELD_REF <*D.29309, 8, 48>;
    D.29311 = D.29310 & 64;
    if (D.29311 == 0) goto <D.29312>; else goto <D.29306>;
    <D.29312>:
    D.29288 = class->generic_class;
    D.29309 = D.29288->context.class_inst;
    D.29313 = D.29309->id;
    generic_id = (int) D.29313;
    D.29314 = generic_id == 0;
    D.29315 = (long int) D.29314;
    D.29316 = __builtin_expect (D.29315, 0);
    if (D.29316 != 0) goto <D.29317>; else goto <D.29318>;
    <D.29317>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2627, "generic_id != 0");
    <D.29318>:
    goto <D.29307>;
    <D.29306>:
    generic_id = 0;
    <D.29307>:
    D.29291 = class->image;
    D.29319 = D.29291->name;
    printf ("Interface: assigned id %d to %s|%s|%d\n", iid, D.29319, type_name, generic_id);
    monoeg_g_free (type_name);
  }
  <D.29304>:
  D.29320 = iid > 65535;
  D.29321 = (long int) D.29320;
  D.29322 = __builtin_expect (D.29321, 0);
  if (D.29322 != 0) goto <D.29323>; else goto <D.29324>;
  <D.29323>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2636, "iid <= 65535");
  <D.29324>:
  D.29325 = (guint) iid;
  return D.29325;
}


mono_class_get_cached_class_info (struct MonoClass * klass, struct MonoCachedClassInfo * res)
{
  gboolean (*<T28bc>) (struct MonoClass *, struct MonoCachedClassInfo *) get_cached_class_info.249;
  gboolean D.29330;

  get_cached_class_info.249 = get_cached_class_info;
  if (get_cached_class_info.249 == 0B) goto <D.29328>; else goto <D.29329>;
  <D.29328>:
  D.29330 = 0;
  return D.29330;
  <D.29329>:
  get_cached_class_info.249 = get_cached_class_info;
  D.29330 = get_cached_class_info.249 (klass, res);
  return D.29330;
}


initialize_object_slots (struct MonoClass * class)
{
  struct MonoMethod * default_ghc.250;
  struct MonoClass * D.29335;
  struct MonoMethod * * D.29338;
  unsigned int i.251;
  unsigned int D.29340;
  struct MonoMethod * * D.29341;
  int D.22339;
  int iftmp.252;
  int D.22338;
  const char[12] * D.29345;
  unsigned char D.29346;
  int D.29347;
  unsigned char D.29348;
  int D.29349;
  _Bool D.29350;
  _Bool D.29351;
  _Bool D.29352;
  const unsigned char * D.29355;
  unsigned char D.29356;
  int D.29357;
  const unsigned char * D.29358;
  unsigned char D.29359;
  int D.29360;
  _Bool D.29361;
  _Bool D.29362;
  const unsigned char * D.29365;
  unsigned char D.29366;
  int D.29367;
  const unsigned char * D.29368;
  unsigned char D.29369;
  int D.29370;
  _Bool D.29371;
  _Bool D.29372;
  const unsigned char * D.29375;
  unsigned char D.29376;
  int D.29377;
  const unsigned char * D.29378;
  unsigned char D.29379;
  int D.29380;
  const char * D.29382;
  int D.22348;
  int iftmp.253;
  int D.22347;
  const char[9] * D.29389;
  unsigned char D.29390;
  int D.29391;
  unsigned char D.29392;
  int D.29393;
  _Bool D.29394;
  _Bool D.29395;
  _Bool D.29396;
  const unsigned char * D.29399;
  unsigned char D.29400;
  int D.29401;
  const unsigned char * D.29402;
  unsigned char D.29403;
  int D.29404;
  _Bool D.29405;
  _Bool D.29406;
  const unsigned char * D.29409;
  unsigned char D.29410;
  int D.29411;
  const unsigned char * D.29412;
  unsigned char D.29413;
  int D.29414;
  _Bool D.29415;
  _Bool D.29416;
  const unsigned char * D.29419;
  unsigned char D.29420;
  int D.29421;
  const unsigned char * D.29422;
  unsigned char D.29423;
  int D.29424;
  int D.29428;
  int ghc_slot.254;
  _Bool D.29430;
  long int D.29431;
  long int D.29432;
  unsigned int ghc_slot.255;
  unsigned int D.29436;
  struct MonoMethod * * D.29437;
  struct MonoMethod * default_ghc.256;
  int finalize_slot.257;
  _Bool D.29440;
  long int D.29441;
  long int D.29442;
  unsigned int finalize_slot.258;
  unsigned int D.29446;
  struct MonoMethod * * D.29447;
  struct MonoMethod * default_finalize.259;
  int i;

  default_ghc.250 = default_ghc;
  if (default_ghc.250 != 0B) goto <D.29333>; else goto <D.29334>;
  <D.29333>:
  return;
  <D.29334>:
  D.29335 = mono_defaults.object_class;
  if (D.29335 == class) goto <D.29336>; else goto <D.29337>;
  <D.29336>:
  mono_class_setup_vtable (class);
  i = 0;
  goto <D.22350>;
  <D.22349>:
  {
    struct MonoMethod * cm;

    D.29338 = class->vtable;
    i.251 = (unsigned int) i;
    D.29340 = i.251 * 4;
    D.29341 = D.29338 + D.29340;
    cm = *D.29341;
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 11;
      if (__s2_len <= 3) goto <D.29343>; else goto <D.29344>;
      <D.29343>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = cm->name;
        D.29345 = "GetHashCode";
        D.29346 = MEM[(const unsigned char *)D.29345];
        D.29347 = (int) D.29346;
        D.29348 = *__s2;
        D.29349 = (int) D.29348;
        __result = D.29347 - D.29349;
        {
          D.29350 = __s2_len != 0;
          D.29351 = __result == 0;
          D.29352 = D.29350 & D.29351;
          if (D.29352 != 0) goto <D.29353>; else goto <D.29354>;
          <D.29353>:
          D.29355 = &MEM[(void *)"GetHashCode" + 1B];
          D.29356 = *D.29355;
          D.29357 = (int) D.29356;
          D.29358 = __s2 + 1;
          D.29359 = *D.29358;
          D.29360 = (int) D.29359;
          __result = D.29357 - D.29360;
          D.29361 = __s2_len > 1;
          D.29351 = __result == 0;
          D.29362 = D.29361 & D.29351;
          if (D.29362 != 0) goto <D.29363>; else goto <D.29364>;
          <D.29363>:
          D.29365 = &MEM[(void *)"GetHashCode" + 2B];
          D.29366 = *D.29365;
          D.29367 = (int) D.29366;
          D.29368 = __s2 + 2;
          D.29369 = *D.29368;
          D.29370 = (int) D.29369;
          __result = D.29367 - D.29370;
          D.29371 = __s2_len > 2;
          D.29351 = __result == 0;
          D.29372 = D.29371 & D.29351;
          if (D.29372 != 0) goto <D.29373>; else goto <D.29374>;
          <D.29373>:
          D.29375 = &MEM[(void *)"GetHashCode" + 3B];
          D.29376 = *D.29375;
          D.29377 = (int) D.29376;
          D.29378 = __s2 + 3;
          D.29379 = *D.29378;
          D.29380 = (int) D.29379;
          __result = D.29377 - D.29380;
          <D.29374>:
          <D.29364>:
          <D.29354>:
        }
        D.22338 = __result;
      }
      iftmp.252 = -D.22338;
      goto <D.29381>;
      <D.29344>:
      D.29382 = cm->name;
      iftmp.252 = __builtin_strcmp (D.29382, "GetHashCode");
      <D.29381>:
      D.22339 = iftmp.252;
    }
    if (D.22339 == 0) goto <D.29383>; else goto <D.29384>;
    <D.29383>:
    ghc_slot = i;
    goto <D.29385>;
    <D.29384>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 8;
      if (__s2_len <= 3) goto <D.29387>; else goto <D.29388>;
      <D.29387>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = cm->name;
        D.29389 = "Finalize";
        D.29390 = MEM[(const unsigned char *)D.29389];
        D.29391 = (int) D.29390;
        D.29392 = *__s2;
        D.29393 = (int) D.29392;
        __result = D.29391 - D.29393;
        {
          D.29394 = __s2_len != 0;
          D.29395 = __result == 0;
          D.29396 = D.29394 & D.29395;
          if (D.29396 != 0) goto <D.29397>; else goto <D.29398>;
          <D.29397>:
          D.29399 = &MEM[(void *)"Finalize" + 1B];
          D.29400 = *D.29399;
          D.29401 = (int) D.29400;
          D.29402 = __s2 + 1;
          D.29403 = *D.29402;
          D.29404 = (int) D.29403;
          __result = D.29401 - D.29404;
          D.29405 = __s2_len > 1;
          D.29395 = __result == 0;
          D.29406 = D.29405 & D.29395;
          if (D.29406 != 0) goto <D.29407>; else goto <D.29408>;
          <D.29407>:
          D.29409 = &MEM[(void *)"Finalize" + 2B];
          D.29410 = *D.29409;
          D.29411 = (int) D.29410;
          D.29412 = __s2 + 2;
          D.29413 = *D.29412;
          D.29414 = (int) D.29413;
          __result = D.29411 - D.29414;
          D.29415 = __s2_len > 2;
          D.29395 = __result == 0;
          D.29416 = D.29415 & D.29395;
          if (D.29416 != 0) goto <D.29417>; else goto <D.29418>;
          <D.29417>:
          D.29419 = &MEM[(void *)"Finalize" + 3B];
          D.29420 = *D.29419;
          D.29421 = (int) D.29420;
          D.29422 = __s2 + 3;
          D.29423 = *D.29422;
          D.29424 = (int) D.29423;
          __result = D.29421 - D.29424;
          <D.29418>:
          <D.29408>:
          <D.29398>:
        }
        D.22347 = __result;
      }
      iftmp.253 = -D.22347;
      goto <D.29425>;
      <D.29388>:
      D.29382 = cm->name;
      iftmp.253 = __builtin_strcmp (D.29382, "Finalize");
      <D.29425>:
      D.22348 = iftmp.253;
    }
    if (D.22348 == 0) goto <D.29426>; else goto <D.29427>;
    <D.29426>:
    finalize_slot = i;
    <D.29427>:
    <D.29385>:
  }
  i = i + 1;
  <D.22350>:
  D.29428 = class->vtable_size;
  if (D.29428 > i) goto <D.22349>; else goto <D.22351>;
  <D.22351>:
  ghc_slot.254 = ghc_slot;
  D.29430 = ghc_slot.254 <= 0;
  D.29431 = (long int) D.29430;
  D.29432 = __builtin_expect (D.29431, 0);
  if (D.29432 != 0) goto <D.29433>; else goto <D.29434>;
  <D.29433>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4736, "ghc_slot > 0");
  <D.29434>:
  D.29338 = class->vtable;
  ghc_slot.254 = ghc_slot;
  ghc_slot.255 = (unsigned int) ghc_slot.254;
  D.29436 = ghc_slot.255 * 4;
  D.29437 = D.29338 + D.29436;
  default_ghc.256 = *D.29437;
  default_ghc = default_ghc.256;
  finalize_slot.257 = finalize_slot;
  D.29440 = finalize_slot.257 <= 0;
  D.29441 = (long int) D.29440;
  D.29442 = __builtin_expect (D.29441, 0);
  if (D.29442 != 0) goto <D.29443>; else goto <D.29444>;
  <D.29443>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4739, "finalize_slot > 0");
  <D.29444>:
  D.29338 = class->vtable;
  finalize_slot.257 = finalize_slot;
  finalize_slot.258 = (unsigned int) finalize_slot.257;
  D.29446 = finalize_slot.258 * 4;
  D.29447 = D.29338 + D.29446;
  default_finalize.259 = *D.29447;
  default_finalize = default_finalize.259;
  <D.29337>:
}


find_method_in_metadata (struct MonoClass * klass, const char * name, int param_count, int flags)
{
  struct MonoImage * D.29450;
  unsigned int D.29451;
  unsigned int i.260;
  unsigned int D.29453;
  int D.29454;
  int D.23953;
  unsigned int D.29455;
  const char * D.29456;
  unsigned int D.29459;
  unsigned int D.29460;
  short unsigned int D.29465;
  int D.29466;
  unsigned int D.29469;
  struct MonoMethod * D.29470;
  struct MonoMethod * res;
  int i;

  res = 0B;
  i = 0;
  goto <D.23956>;
  <D.23955>:
  {
    guint32 cols[6];
    struct MonoMethod * method;
    struct MonoMethodSignature * sig;

    try
      {
        D.29450 = klass->image;
        D.29451 = klass->method.first;
        i.260 = (unsigned int) i;
        D.29453 = D.29451 + i.260;
        D.29454 = (int) D.29453;
        mono_metadata_decode_table_row (D.29450, 6, D.29454, &cols, 6);
        {
          size_t __s1_len;
          size_t __s2_len;

          D.29450 = klass->image;
          D.29455 = cols[3];
          D.29456 = mono_metadata_string_heap (D.29450, D.29455);
          D.23953 = __builtin_strcmp (D.29456, name);
        }
        if (D.23953 == 0) goto <D.29457>; else goto <D.29458>;
        <D.29457>:
        D.29450 = klass->image;
        D.29451 = klass->method.first;
        i.260 = (unsigned int) i;
        D.29453 = D.29451 + i.260;
        D.29459 = D.29453 + 1;
        D.29460 = D.29459 | 100663296;
        method = mono_get_method (D.29450, D.29460, klass);
        if (param_count == -1) goto <D.29461>; else goto <D.29462>;
        <D.29461>:
        res = method;
        goto <D.23954>;
        <D.29462>:
        sig = mono_method_signature (method);
        if (sig != 0B) goto <D.29463>; else goto <D.29464>;
        <D.29463>:
        D.29465 = sig->param_count;
        D.29466 = (int) D.29465;
        if (D.29466 == param_count) goto <D.29467>; else goto <D.29468>;
        <D.29467>:
        res = method;
        goto <D.23954>;
        <D.29468>:
        <D.29464>:
        <D.29458>:
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  i = i + 1;
  <D.23956>:
  i.260 = (unsigned int) i;
  D.29469 = klass->method.count;
  if (i.260 < D.29469) goto <D.23955>; else goto <D.23954>;
  <D.23954>:
  D.29470 = res;
  return D.29470;
}


mono_class_has_finalizer (struct MonoClass * klass)
{
  unsigned char D.29474;
  unsigned char D.29475;
  unsigned int D.29478;
  unsigned int D.29479;
  unsigned char D.29482;
  unsigned char D.29487;
  unsigned char D.29488;
  struct MonoClass * D.29493;
  unsigned char D.29495;
  unsigned char D.29496;
  unsigned char D.29500;
  struct MonoLoaderError * D.29502;
  struct MonoMethod * * D.29504;
  int finalize_slot.261;
  unsigned int finalize_slot.262;
  unsigned int D.29507;
  struct MonoMethod * * D.29508;
  int D.29511;
  _Bool D.29512;
  long int D.29513;
  long int D.29514;
  unsigned char D.29519;
  unsigned char D.29520;
  struct MonoMethod * default_finalize.263;
  gboolean D.29526;
  <unnamed-unsigned:1> D.29527;
  void leave = <<< error >>>;

  D.29474 = BIT_FIELD_REF <*klass, 8, 192>;
  D.29475 = D.29474 & 16;
  if (D.29475 == 0) goto <D.29476>; else goto <D.29477>;
  <D.29476>:
  {
    struct MonoClass * class;

    class = klass;
    mono_loader_lock ();
    D.29478 = class->flags;
    D.29479 = D.29478 & 32;
    if (D.29479 == 0) goto <D.29480>; else goto <D.29481>;
    <D.29480>:
    D.29482 = class->byval_arg.type;
    if (D.29482 != 19) goto <D.29483>; else goto <D.29484>;
    <D.29483>:
    D.29482 = class->byval_arg.type;
    if (D.29482 != 30) goto <D.29485>; else goto <D.29486>;
    <D.29485>:
    D.29487 = BIT_FIELD_REF <*class, 8, 160>;
    D.29488 = D.29487 & 8;
    if (D.29488 == 0) goto <D.29489>; else goto <D.29490>;
    <D.29489>:
    {
      struct MonoMethod * cmethod;

      cmethod = 0B;
      D.29493 = class->parent;
      if (D.29493 != 0B) goto <D.29494>; else goto <D.29491>;
      <D.29494>:
      D.29493 = class->parent;
      D.29495 = BIT_FIELD_REF <*D.29493, 8, 176>;
      D.29496 = D.29495 & 32;
      if (D.29496 != 0) goto <D.29497>; else goto <D.29491>;
      <D.29497>:
      class->has_finalize = 1;
      goto <D.29492>;
      <D.29491>:
      D.29493 = class->parent;
      if (D.29493 != 0B) goto <D.29498>; else goto <D.29499>;
      <D.29498>:
      mono_class_setup_vtable (class);
      D.29500 = class->exception_type;
      if (D.29500 != 0) goto leave; else goto <D.29501>;
      <D.29501>:
      D.29502 = mono_loader_get_last_error ();
      if (D.29502 != 0B) goto leave; else goto <D.29503>;
      <D.29503>:
      D.29504 = class->vtable;
      finalize_slot.261 = finalize_slot;
      finalize_slot.262 = (unsigned int) finalize_slot.261;
      D.29507 = finalize_slot.262 * 4;
      D.29508 = D.29504 + D.29507;
      cmethod = *D.29508;
      <D.29499>:
      if (cmethod != 0B) goto <D.29509>; else goto <D.29510>;
      <D.29509>:
      D.29511 = class->vtable_size;
      finalize_slot.261 = finalize_slot;
      D.29512 = D.29511 <= finalize_slot.261;
      D.29513 = (long int) D.29512;
      D.29514 = __builtin_expect (D.29513, 0);
      if (D.29514 != 0) goto <D.29515>; else goto <D.29516>;
      <D.29515>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5201, "class->vtable_size > finalize_slot");
      <D.29516>:
      class->has_finalize = 0;
      D.29493 = class->parent;
      if (D.29493 != 0B) goto <D.29517>; else goto <D.29518>;
      <D.29517>:
      D.29519 = BIT_FIELD_REF <*cmethod, 8, 168>;
      D.29520 = D.29519 & 16;
      if (D.29520 != 0) goto <D.29521>; else goto <D.29522>;
      <D.29521>:
      cmethod = MEM[(struct MonoMethodInflated *)cmethod].declaring;
      <D.29522>:
      default_finalize.263 = default_finalize;
      if (cmethod != default_finalize.263) goto <D.29524>; else goto <D.29525>;
      <D.29524>:
      class->has_finalize = 1;
      <D.29525>:
      <D.29518>:
      <D.29510>:
      <D.29492>:
    }
    <D.29490>:
    <D.29486>:
    <D.29484>:
    <D.29481>:
    mono_memory_barrier ();
    klass->has_finalize_inited = 1;
    mono_loader_unlock ();
  }
  <D.29477>:
  D.29527 = klass->has_finalize;
  D.29526 = (gboolean) D.29527;
  return D.29526;
  leave:
  mono_loader_unlock ();
  D.29526 = 0;
  return D.29526;
}


mono_is_corlib_image (struct MonoImage * image)
{
  unsigned char D.29529;
  unsigned char D.29530;
  gboolean D.29533;
  int iftmp.264;
  struct MonoAssembly * D.29537;
  int D.22514;
  int iftmp.265;
  int D.22513;
  const char[9] * D.29542;
  unsigned char D.29543;
  int D.29544;
  unsigned char D.29545;
  int D.29546;
  _Bool D.29547;
  _Bool D.29548;
  _Bool D.29549;
  const unsigned char * D.29552;
  unsigned char D.29553;
  int D.29554;
  const unsigned char * D.29555;
  unsigned char D.29556;
  int D.29557;
  _Bool D.29558;
  _Bool D.29559;
  const unsigned char * D.29562;
  unsigned char D.29563;
  int D.29564;
  const unsigned char * D.29565;
  unsigned char D.29566;
  int D.29567;
  _Bool D.29568;
  _Bool D.29569;
  const unsigned char * D.29572;
  unsigned char D.29573;
  int D.29574;
  const unsigned char * D.29575;
  unsigned char D.29576;
  int D.29577;
  const char * D.29579;
  struct MonoImage * D.29581;
  _Bool D.29582;

  D.29529 = BIT_FIELD_REF <*image, 8, 128>;
  D.29530 = D.29529 & 8;
  if (D.29530 != 0) goto <D.29531>; else goto <D.29532>;
  <D.29531>:
  D.29537 = image->assembly;
  if (D.29537 != 0B) goto <D.29538>; else goto <D.29535>;
  <D.29538>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.29540>; else goto <D.29541>;
    <D.29540>:
    {
      const unsigned char * __s2;
      int __result;

      D.29537 = image->assembly;
      __s2 = D.29537->aname.name;
      D.29542 = "mscorlib";
      D.29543 = MEM[(const unsigned char *)D.29542];
      D.29544 = (int) D.29543;
      D.29545 = *__s2;
      D.29546 = (int) D.29545;
      __result = D.29544 - D.29546;
      {
        D.29547 = __s2_len != 0;
        D.29548 = __result == 0;
        D.29549 = D.29547 & D.29548;
        if (D.29549 != 0) goto <D.29550>; else goto <D.29551>;
        <D.29550>:
        D.29552 = &MEM[(void *)"mscorlib" + 1B];
        D.29553 = *D.29552;
        D.29554 = (int) D.29553;
        D.29555 = __s2 + 1;
        D.29556 = *D.29555;
        D.29557 = (int) D.29556;
        __result = D.29554 - D.29557;
        D.29558 = __s2_len > 1;
        D.29548 = __result == 0;
        D.29559 = D.29558 & D.29548;
        if (D.29559 != 0) goto <D.29560>; else goto <D.29561>;
        <D.29560>:
        D.29562 = &MEM[(void *)"mscorlib" + 2B];
        D.29563 = *D.29562;
        D.29564 = (int) D.29563;
        D.29565 = __s2 + 2;
        D.29566 = *D.29565;
        D.29567 = (int) D.29566;
        __result = D.29564 - D.29567;
        D.29568 = __s2_len > 2;
        D.29548 = __result == 0;
        D.29569 = D.29568 & D.29548;
        if (D.29569 != 0) goto <D.29570>; else goto <D.29571>;
        <D.29570>:
        D.29572 = &MEM[(void *)"mscorlib" + 3B];
        D.29573 = *D.29572;
        D.29574 = (int) D.29573;
        D.29575 = __s2 + 3;
        D.29576 = *D.29575;
        D.29577 = (int) D.29576;
        __result = D.29574 - D.29577;
        <D.29571>:
        <D.29561>:
        <D.29551>:
      }
      D.22513 = __result;
    }
    iftmp.265 = -D.22513;
    goto <D.29578>;
    <D.29541>:
    D.29537 = image->assembly;
    D.29579 = D.29537->aname.name;
    iftmp.265 = __builtin_strcmp (D.29579, "mscorlib");
    <D.29578>:
    D.22514 = iftmp.265;
  }
  if (D.22514 == 0) goto <D.29580>; else goto <D.29535>;
  <D.29580>:
  iftmp.264 = 1;
  goto <D.29536>;
  <D.29535>:
  iftmp.264 = 0;
  <D.29536>:
  D.29533 = iftmp.264;
  return D.29533;
  <D.29532>:
  D.29581 = mono_defaults.corlib;
  D.29582 = D.29581 == image;
  D.29533 = (gboolean) D.29582;
  return D.29533;
}


mono_class_setup_mono_type (struct MonoClass * class)
{
  struct MonoImage * D.29584;
  int D.22529;
  int iftmp.266;
  int D.22528;
  const char[7] * D.29590;
  unsigned char D.29591;
  int D.29592;
  unsigned char D.29593;
  int D.29594;
  _Bool D.29595;
  _Bool D.29596;
  _Bool D.29597;
  const unsigned char * D.29600;
  unsigned char D.29601;
  int D.29602;
  const unsigned char * D.29603;
  unsigned char D.29604;
  int D.29605;
  _Bool D.29606;
  _Bool D.29607;
  const unsigned char * D.29610;
  unsigned char D.29611;
  int D.29612;
  const unsigned char * D.29613;
  unsigned char D.29614;
  int D.29615;
  _Bool D.29616;
  _Bool D.29617;
  const unsigned char * D.29620;
  unsigned char D.29621;
  int D.29622;
  const unsigned char * D.29623;
  unsigned char D.29624;
  int D.29625;
  int D.22538;
  int iftmp.267;
  int D.22537;
  const char[10] * D.29632;
  unsigned char D.29633;
  int D.29634;
  unsigned char D.29635;
  int D.29636;
  _Bool D.29637;
  _Bool D.29638;
  _Bool D.29639;
  const unsigned char * D.29642;
  unsigned char D.29643;
  int D.29644;
  const unsigned char * D.29645;
  unsigned char D.29646;
  int D.29647;
  _Bool D.29648;
  _Bool D.29649;
  const unsigned char * D.29652;
  unsigned char D.29653;
  int D.29654;
  const unsigned char * D.29655;
  unsigned char D.29656;
  int D.29657;
  _Bool D.29658;
  _Bool D.29659;
  const unsigned char * D.29662;
  unsigned char D.29663;
  int D.29664;
  const unsigned char * D.29665;
  unsigned char D.29666;
  int D.29667;
  int D.22547;
  int iftmp.268;
  int D.22546;
  const char[5] * D.29675;
  unsigned char D.29676;
  int D.29677;
  unsigned char D.29678;
  int D.29679;
  _Bool D.29680;
  _Bool D.29681;
  _Bool D.29682;
  const unsigned char * D.29685;
  unsigned char D.29686;
  int D.29687;
  const unsigned char * D.29688;
  unsigned char D.29689;
  int D.29690;
  _Bool D.29691;
  _Bool D.29692;
  const unsigned char * D.29695;
  unsigned char D.29696;
  int D.29697;
  const unsigned char * D.29698;
  unsigned char D.29699;
  int D.29700;
  _Bool D.29701;
  _Bool D.29702;
  const unsigned char * D.29705;
  unsigned char D.29706;
  int D.29707;
  const unsigned char * D.29708;
  unsigned char D.29709;
  int D.29710;
  int D.22556;
  int iftmp.269;
  int D.22555;
  const char[7] * D.29718;
  unsigned char D.29719;
  int D.29720;
  unsigned char D.29721;
  int D.29722;
  _Bool D.29723;
  _Bool D.29724;
  _Bool D.29725;
  const unsigned char * D.29728;
  unsigned char D.29729;
  int D.29730;
  const unsigned char * D.29731;
  unsigned char D.29732;
  int D.29733;
  _Bool D.29734;
  _Bool D.29735;
  const unsigned char * D.29738;
  unsigned char D.29739;
  int D.29740;
  const unsigned char * D.29741;
  unsigned char D.29742;
  int D.29743;
  _Bool D.29744;
  _Bool D.29745;
  const unsigned char * D.29748;
  unsigned char D.29749;
  int D.29750;
  const unsigned char * D.29751;
  unsigned char D.29752;
  int D.29753;
  unsigned char D.29757;
  int D.22565;
  int iftmp.270;
  int D.22564;
  const char[7] * D.29762;
  unsigned char D.29763;
  int D.29764;
  unsigned char D.29765;
  int D.29766;
  _Bool D.29767;
  _Bool D.29768;
  _Bool D.29769;
  const unsigned char * D.29772;
  unsigned char D.29773;
  int D.29774;
  const unsigned char * D.29775;
  unsigned char D.29776;
  int D.29777;
  _Bool D.29778;
  _Bool D.29779;
  const unsigned char * D.29782;
  unsigned char D.29783;
  int D.29784;
  const unsigned char * D.29785;
  unsigned char D.29786;
  int D.29787;
  _Bool D.29788;
  _Bool D.29789;
  const unsigned char * D.29792;
  unsigned char D.29793;
  int D.29794;
  const unsigned char * D.29795;
  unsigned char D.29796;
  int D.29797;
  int D.22574;
  int iftmp.271;
  int D.22573;
  const char[15] * D.29805;
  unsigned char D.29806;
  int D.29807;
  unsigned char D.29808;
  int D.29809;
  _Bool D.29810;
  _Bool D.29811;
  _Bool D.29812;
  const unsigned char * D.29815;
  unsigned char D.29816;
  int D.29817;
  const unsigned char * D.29818;
  unsigned char D.29819;
  int D.29820;
  _Bool D.29821;
  _Bool D.29822;
  const unsigned char * D.29825;
  unsigned char D.29826;
  int D.29827;
  const unsigned char * D.29828;
  unsigned char D.29829;
  int D.29830;
  _Bool D.29831;
  _Bool D.29832;
  const unsigned char * D.29835;
  unsigned char D.29836;
  int D.29837;
  const unsigned char * D.29838;
  unsigned char D.29839;
  int D.29840;
  unsigned char D.29844;
  unsigned char D.29845;
  int D.22584;
  int iftmp.272;
  int D.22583;
  unsigned char D.29853;
  int D.29854;
  _Bool D.29855;
  _Bool D.29856;
  _Bool D.29857;
  const unsigned char * D.29860;
  unsigned char D.29861;
  int D.29862;
  _Bool D.29863;
  _Bool D.29864;
  const unsigned char * D.29867;
  unsigned char D.29868;
  int D.29869;
  _Bool D.29870;
  _Bool D.29871;
  const unsigned char * D.29874;
  unsigned char D.29875;
  int D.29876;
  char D.29880;
  int D.29881;
  int D.22594;
  int iftmp.273;
  int D.22593;
  const char[8] * D.29885;
  unsigned char D.29886;
  int D.29887;
  unsigned char D.29888;
  int D.29889;
  _Bool D.29890;
  _Bool D.29891;
  _Bool D.29892;
  const unsigned char * D.29895;
  unsigned char D.29896;
  int D.29897;
  const unsigned char * D.29898;
  unsigned char D.29899;
  int D.29900;
  _Bool D.29901;
  _Bool D.29902;
  const unsigned char * D.29905;
  unsigned char D.29906;
  int D.29907;
  const unsigned char * D.29908;
  unsigned char D.29909;
  int D.29910;
  _Bool D.29911;
  _Bool D.29912;
  const unsigned char * D.29915;
  unsigned char D.29916;
  int D.29917;
  const unsigned char * D.29918;
  unsigned char D.29919;
  int D.29920;
  int D.22603;
  int iftmp.274;
  int D.22602;
  const char[5] * D.29928;
  unsigned char D.29929;
  int D.29930;
  unsigned char D.29931;
  int D.29932;
  _Bool D.29933;
  _Bool D.29934;
  _Bool D.29935;
  const unsigned char * D.29938;
  unsigned char D.29939;
  int D.29940;
  const unsigned char * D.29941;
  unsigned char D.29942;
  int D.29943;
  _Bool D.29944;
  _Bool D.29945;
  const unsigned char * D.29948;
  unsigned char D.29949;
  int D.29950;
  const unsigned char * D.29951;
  unsigned char D.29952;
  int D.29953;
  _Bool D.29954;
  _Bool D.29955;
  const unsigned char * D.29958;
  unsigned char D.29959;
  int D.29960;
  const unsigned char * D.29961;
  unsigned char D.29962;
  int D.29963;
  int D.22614;
  int iftmp.275;
  int D.22613;
  const char[5] * D.29970;
  unsigned char D.29971;
  int D.29972;
  unsigned char D.29973;
  int D.29974;
  _Bool D.29975;
  _Bool D.29976;
  _Bool D.29977;
  const unsigned char * D.29980;
  unsigned char D.29981;
  int D.29982;
  const unsigned char * D.29983;
  unsigned char D.29984;
  int D.29985;
  _Bool D.29986;
  _Bool D.29987;
  const unsigned char * D.29990;
  unsigned char D.29991;
  int D.29992;
  const unsigned char * D.29993;
  unsigned char D.29994;
  int D.29995;
  _Bool D.29996;
  _Bool D.29997;
  const unsigned char * D.30000;
  unsigned char D.30001;
  int D.30002;
  const unsigned char * D.30003;
  unsigned char D.30004;
  int D.30005;
  int D.22624;
  int iftmp.276;
  int D.22623;
  const char[7] * D.30012;
  unsigned char D.30013;
  int D.30014;
  unsigned char D.30015;
  int D.30016;
  _Bool D.30017;
  _Bool D.30018;
  _Bool D.30019;
  const unsigned char * D.30022;
  unsigned char D.30023;
  int D.30024;
  const unsigned char * D.30025;
  unsigned char D.30026;
  int D.30027;
  _Bool D.30028;
  _Bool D.30029;
  const unsigned char * D.30032;
  unsigned char D.30033;
  int D.30034;
  const unsigned char * D.30035;
  unsigned char D.30036;
  int D.30037;
  _Bool D.30038;
  _Bool D.30039;
  const unsigned char * D.30042;
  unsigned char D.30043;
  int D.30044;
  const unsigned char * D.30045;
  unsigned char D.30046;
  int D.30047;
  int D.22634;
  int iftmp.277;
  int D.22633;
  const char[6] * D.30054;
  unsigned char D.30055;
  int D.30056;
  unsigned char D.30057;
  int D.30058;
  _Bool D.30059;
  _Bool D.30060;
  _Bool D.30061;
  const unsigned char * D.30064;
  unsigned char D.30065;
  int D.30066;
  const unsigned char * D.30067;
  unsigned char D.30068;
  int D.30069;
  _Bool D.30070;
  _Bool D.30071;
  const unsigned char * D.30074;
  unsigned char D.30075;
  int D.30076;
  const unsigned char * D.30077;
  unsigned char D.30078;
  int D.30079;
  _Bool D.30080;
  _Bool D.30081;
  const unsigned char * D.30084;
  unsigned char D.30085;
  int D.30086;
  const unsigned char * D.30087;
  unsigned char D.30088;
  int D.30089;
  int D.22643;
  int iftmp.278;
  int D.22642;
  const char[6] * D.30097;
  unsigned char D.30098;
  int D.30099;
  unsigned char D.30100;
  int D.30101;
  _Bool D.30102;
  _Bool D.30103;
  _Bool D.30104;
  const unsigned char * D.30107;
  unsigned char D.30108;
  int D.30109;
  const unsigned char * D.30110;
  unsigned char D.30111;
  int D.30112;
  _Bool D.30113;
  _Bool D.30114;
  const unsigned char * D.30117;
  unsigned char D.30118;
  int D.30119;
  const unsigned char * D.30120;
  unsigned char D.30121;
  int D.30122;
  _Bool D.30123;
  _Bool D.30124;
  const unsigned char * D.30127;
  unsigned char D.30128;
  int D.30129;
  const unsigned char * D.30130;
  unsigned char D.30131;
  int D.30132;
  int D.22652;
  int iftmp.279;
  int D.22651;
  const char[6] * D.30140;
  unsigned char D.30141;
  int D.30142;
  unsigned char D.30143;
  int D.30144;
  _Bool D.30145;
  _Bool D.30146;
  _Bool D.30147;
  const unsigned char * D.30150;
  unsigned char D.30151;
  int D.30152;
  const unsigned char * D.30153;
  unsigned char D.30154;
  int D.30155;
  _Bool D.30156;
  _Bool D.30157;
  const unsigned char * D.30160;
  unsigned char D.30161;
  int D.30162;
  const unsigned char * D.30163;
  unsigned char D.30164;
  int D.30165;
  _Bool D.30166;
  _Bool D.30167;
  const unsigned char * D.30170;
  unsigned char D.30171;
  int D.30172;
  const unsigned char * D.30173;
  unsigned char D.30174;
  int D.30175;
  int D.22661;
  int iftmp.280;
  int D.22660;
  const char[7] * D.30183;
  unsigned char D.30184;
  int D.30185;
  unsigned char D.30186;
  int D.30187;
  _Bool D.30188;
  _Bool D.30189;
  _Bool D.30190;
  const unsigned char * D.30193;
  unsigned char D.30194;
  int D.30195;
  const unsigned char * D.30196;
  unsigned char D.30197;
  int D.30198;
  _Bool D.30199;
  _Bool D.30200;
  const unsigned char * D.30203;
  unsigned char D.30204;
  int D.30205;
  const unsigned char * D.30206;
  unsigned char D.30207;
  int D.30208;
  _Bool D.30209;
  _Bool D.30210;
  const unsigned char * D.30213;
  unsigned char D.30214;
  int D.30215;
  const unsigned char * D.30216;
  unsigned char D.30217;
  int D.30218;
  int D.22671;
  int iftmp.281;
  int D.22670;
  const char[7] * D.30225;
  unsigned char D.30226;
  int D.30227;
  unsigned char D.30228;
  int D.30229;
  _Bool D.30230;
  _Bool D.30231;
  _Bool D.30232;
  const unsigned char * D.30235;
  unsigned char D.30236;
  int D.30237;
  const unsigned char * D.30238;
  unsigned char D.30239;
  int D.30240;
  _Bool D.30241;
  _Bool D.30242;
  const unsigned char * D.30245;
  unsigned char D.30246;
  int D.30247;
  const unsigned char * D.30248;
  unsigned char D.30249;
  int D.30250;
  _Bool D.30251;
  _Bool D.30252;
  const unsigned char * D.30255;
  unsigned char D.30256;
  int D.30257;
  const unsigned char * D.30258;
  unsigned char D.30259;
  int D.30260;
  int D.22680;
  int iftmp.282;
  int D.22679;
  const char[6] * D.30268;
  unsigned char D.30269;
  int D.30270;
  unsigned char D.30271;
  int D.30272;
  _Bool D.30273;
  _Bool D.30274;
  _Bool D.30275;
  const unsigned char * D.30278;
  unsigned char D.30279;
  int D.30280;
  const unsigned char * D.30281;
  unsigned char D.30282;
  int D.30283;
  _Bool D.30284;
  _Bool D.30285;
  const unsigned char * D.30288;
  unsigned char D.30289;
  int D.30290;
  const unsigned char * D.30291;
  unsigned char D.30292;
  int D.30293;
  _Bool D.30294;
  _Bool D.30295;
  const unsigned char * D.30298;
  unsigned char D.30299;
  int D.30300;
  const unsigned char * D.30301;
  unsigned char D.30302;
  int D.30303;
  int D.22690;
  int iftmp.283;
  int D.22689;
  const char[7] * D.30310;
  unsigned char D.30311;
  int D.30312;
  unsigned char D.30313;
  int D.30314;
  _Bool D.30315;
  _Bool D.30316;
  _Bool D.30317;
  const unsigned char * D.30320;
  unsigned char D.30321;
  int D.30322;
  const unsigned char * D.30323;
  unsigned char D.30324;
  int D.30325;
  _Bool D.30326;
  _Bool D.30327;
  const unsigned char * D.30330;
  unsigned char D.30331;
  int D.30332;
  const unsigned char * D.30333;
  unsigned char D.30334;
  int D.30335;
  _Bool D.30336;
  _Bool D.30337;
  const unsigned char * D.30340;
  unsigned char D.30341;
  int D.30342;
  const unsigned char * D.30343;
  unsigned char D.30344;
  int D.30345;
  int D.22699;
  int iftmp.284;
  int D.22698;
  const char[7] * D.30353;
  unsigned char D.30354;
  int D.30355;
  unsigned char D.30356;
  int D.30357;
  _Bool D.30358;
  _Bool D.30359;
  _Bool D.30360;
  const unsigned char * D.30363;
  unsigned char D.30364;
  int D.30365;
  const unsigned char * D.30366;
  unsigned char D.30367;
  int D.30368;
  _Bool D.30369;
  _Bool D.30370;
  const unsigned char * D.30373;
  unsigned char D.30374;
  int D.30375;
  const unsigned char * D.30376;
  unsigned char D.30377;
  int D.30378;
  _Bool D.30379;
  _Bool D.30380;
  const unsigned char * D.30383;
  unsigned char D.30384;
  int D.30385;
  const unsigned char * D.30386;
  unsigned char D.30387;
  int D.30388;
  int D.22708;
  int iftmp.285;
  int D.22707;
  const char[7] * D.30396;
  unsigned char D.30397;
  int D.30398;
  unsigned char D.30399;
  int D.30400;
  _Bool D.30401;
  _Bool D.30402;
  _Bool D.30403;
  const unsigned char * D.30406;
  unsigned char D.30407;
  int D.30408;
  const unsigned char * D.30409;
  unsigned char D.30410;
  int D.30411;
  _Bool D.30412;
  _Bool D.30413;
  const unsigned char * D.30416;
  unsigned char D.30417;
  int D.30418;
  const unsigned char * D.30419;
  unsigned char D.30420;
  int D.30421;
  _Bool D.30422;
  _Bool D.30423;
  const unsigned char * D.30426;
  unsigned char D.30427;
  int D.30428;
  const unsigned char * D.30429;
  unsigned char D.30430;
  int D.30431;
  int D.22717;
  int iftmp.286;
  int D.22716;
  const char[8] * D.30439;
  unsigned char D.30440;
  int D.30441;
  unsigned char D.30442;
  int D.30443;
  _Bool D.30444;
  _Bool D.30445;
  _Bool D.30446;
  const unsigned char * D.30449;
  unsigned char D.30450;
  int D.30451;
  const unsigned char * D.30452;
  unsigned char D.30453;
  int D.30454;
  _Bool D.30455;
  _Bool D.30456;
  const unsigned char * D.30459;
  unsigned char D.30460;
  int D.30461;
  const unsigned char * D.30462;
  unsigned char D.30463;
  int D.30464;
  _Bool D.30465;
  _Bool D.30466;
  const unsigned char * D.30469;
  unsigned char D.30470;
  int D.30471;
  const unsigned char * D.30472;
  unsigned char D.30473;
  int D.30474;
  int D.22727;
  int iftmp.287;
  int D.22726;
  unsigned char D.30481;
  int D.30482;
  _Bool D.30483;
  _Bool D.30484;
  _Bool D.30485;
  const unsigned char * D.30488;
  unsigned char D.30489;
  int D.30490;
  _Bool D.30491;
  _Bool D.30492;
  const unsigned char * D.30495;
  unsigned char D.30496;
  int D.30497;
  _Bool D.30498;
  _Bool D.30499;
  const unsigned char * D.30502;
  unsigned char D.30503;
  int D.30504;
  int D.22737;
  int iftmp.288;
  int D.22736;
  const char[5] * D.30511;
  unsigned char D.30512;
  int D.30513;
  unsigned char D.30514;
  int D.30515;
  _Bool D.30516;
  _Bool D.30517;
  _Bool D.30518;
  const unsigned char * D.30521;
  unsigned char D.30522;
  int D.30523;
  const unsigned char * D.30524;
  unsigned char D.30525;
  int D.30526;
  _Bool D.30527;
  _Bool D.30528;
  const unsigned char * D.30531;
  unsigned char D.30532;
  int D.30533;
  const unsigned char * D.30534;
  unsigned char D.30535;
  int D.30536;
  _Bool D.30537;
  _Bool D.30538;
  const unsigned char * D.30541;
  unsigned char D.30542;
  int D.30543;
  const unsigned char * D.30544;
  unsigned char D.30545;
  int D.30546;
  unsigned char D.30550;
  unsigned int D.30553;
  unsigned int D.30554;
  unsigned int D.30557;
  short unsigned int D.30558;
  const char * name;
  const char * nspace;
  gboolean is_corlib;

  name = class->name;
  nspace = class->name_space;
  D.29584 = class->image;
  is_corlib = mono_is_corlib_image (D.29584);
  class->this_arg.byref = 1;
  class->this_arg.data.klass = class;
  class->this_arg.type = 18;
  class->byval_arg.data.klass = class;
  class->byval_arg.type = 18;
  if (is_corlib != 0) goto <D.29585>; else goto <D.29586>;
  <D.29585>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.29588>; else goto <D.29589>;
    <D.29588>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = nspace;
      D.29590 = "System";
      D.29591 = MEM[(const unsigned char *)D.29590];
      D.29592 = (int) D.29591;
      D.29593 = *__s2;
      D.29594 = (int) D.29593;
      __result = D.29592 - D.29594;
      {
        D.29595 = __s2_len != 0;
        D.29596 = __result == 0;
        D.29597 = D.29595 & D.29596;
        if (D.29597 != 0) goto <D.29598>; else goto <D.29599>;
        <D.29598>:
        D.29600 = &MEM[(void *)"System" + 1B];
        D.29601 = *D.29600;
        D.29602 = (int) D.29601;
        D.29603 = __s2 + 1;
        D.29604 = *D.29603;
        D.29605 = (int) D.29604;
        __result = D.29602 - D.29605;
        D.29606 = __s2_len > 1;
        D.29596 = __result == 0;
        D.29607 = D.29606 & D.29596;
        if (D.29607 != 0) goto <D.29608>; else goto <D.29609>;
        <D.29608>:
        D.29610 = &MEM[(void *)"System" + 2B];
        D.29611 = *D.29610;
        D.29612 = (int) D.29611;
        D.29613 = __s2 + 2;
        D.29614 = *D.29613;
        D.29615 = (int) D.29614;
        __result = D.29612 - D.29615;
        D.29616 = __s2_len > 2;
        D.29596 = __result == 0;
        D.29617 = D.29616 & D.29596;
        if (D.29617 != 0) goto <D.29618>; else goto <D.29619>;
        <D.29618>:
        D.29620 = &MEM[(void *)"System" + 3B];
        D.29621 = *D.29620;
        D.29622 = (int) D.29621;
        D.29623 = __s2 + 3;
        D.29624 = *D.29623;
        D.29625 = (int) D.29624;
        __result = D.29622 - D.29625;
        <D.29619>:
        <D.29609>:
        <D.29599>:
      }
      D.22528 = __result;
    }
    iftmp.266 = -D.22528;
    goto <D.29626>;
    <D.29589>:
    iftmp.266 = __builtin_strcmp (nspace, "System");
    <D.29626>:
    D.22529 = iftmp.266;
  }
  if (D.22529 == 0) goto <D.29627>; else goto <D.29628>;
  <D.29627>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 9;
    if (__s2_len <= 3) goto <D.29630>; else goto <D.29631>;
    <D.29630>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = name;
      D.29632 = "ValueType";
      D.29633 = MEM[(const unsigned char *)D.29632];
      D.29634 = (int) D.29633;
      D.29635 = *__s2;
      D.29636 = (int) D.29635;
      __result = D.29634 - D.29636;
      {
        D.29637 = __s2_len != 0;
        D.29638 = __result == 0;
        D.29639 = D.29637 & D.29638;
        if (D.29639 != 0) goto <D.29640>; else goto <D.29641>;
        <D.29640>:
        D.29642 = &MEM[(void *)"ValueType" + 1B];
        D.29643 = *D.29642;
        D.29644 = (int) D.29643;
        D.29645 = __s2 + 1;
        D.29646 = *D.29645;
        D.29647 = (int) D.29646;
        __result = D.29644 - D.29647;
        D.29648 = __s2_len > 1;
        D.29638 = __result == 0;
        D.29649 = D.29648 & D.29638;
        if (D.29649 != 0) goto <D.29650>; else goto <D.29651>;
        <D.29650>:
        D.29652 = &MEM[(void *)"ValueType" + 2B];
        D.29653 = *D.29652;
        D.29654 = (int) D.29653;
        D.29655 = __s2 + 2;
        D.29656 = *D.29655;
        D.29657 = (int) D.29656;
        __result = D.29654 - D.29657;
        D.29658 = __s2_len > 2;
        D.29638 = __result == 0;
        D.29659 = D.29658 & D.29638;
        if (D.29659 != 0) goto <D.29660>; else goto <D.29661>;
        <D.29660>:
        D.29662 = &MEM[(void *)"ValueType" + 3B];
        D.29663 = *D.29662;
        D.29664 = (int) D.29663;
        D.29665 = __s2 + 3;
        D.29666 = *D.29665;
        D.29667 = (int) D.29666;
        __result = D.29664 - D.29667;
        <D.29661>:
        <D.29651>:
        <D.29641>:
      }
      D.22537 = __result;
    }
    iftmp.267 = -D.22537;
    goto <D.29668>;
    <D.29631>:
    iftmp.267 = __builtin_strcmp (name, "ValueType");
    <D.29668>:
    D.22538 = iftmp.267;
  }
  if (D.22538 == 0) goto <D.29669>; else goto <D.29670>;
  <D.29669>:
  class->blittable = 1;
  goto <D.29671>;
  <D.29670>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.29673>; else goto <D.29674>;
    <D.29673>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = name;
      D.29675 = "Enum";
      D.29676 = MEM[(const unsigned char *)D.29675];
      D.29677 = (int) D.29676;
      D.29678 = *__s2;
      D.29679 = (int) D.29678;
      __result = D.29677 - D.29679;
      {
        D.29680 = __s2_len != 0;
        D.29681 = __result == 0;
        D.29682 = D.29680 & D.29681;
        if (D.29682 != 0) goto <D.29683>; else goto <D.29684>;
        <D.29683>:
        D.29685 = &MEM[(void *)"Enum" + 1B];
        D.29686 = *D.29685;
        D.29687 = (int) D.29686;
        D.29688 = __s2 + 1;
        D.29689 = *D.29688;
        D.29690 = (int) D.29689;
        __result = D.29687 - D.29690;
        D.29691 = __s2_len > 1;
        D.29681 = __result == 0;
        D.29692 = D.29691 & D.29681;
        if (D.29692 != 0) goto <D.29693>; else goto <D.29694>;
        <D.29693>:
        D.29695 = &MEM[(void *)"Enum" + 2B];
        D.29696 = *D.29695;
        D.29697 = (int) D.29696;
        D.29698 = __s2 + 2;
        D.29699 = *D.29698;
        D.29700 = (int) D.29699;
        __result = D.29697 - D.29700;
        D.29701 = __s2_len > 2;
        D.29681 = __result == 0;
        D.29702 = D.29701 & D.29681;
        if (D.29702 != 0) goto <D.29703>; else goto <D.29704>;
        <D.29703>:
        D.29705 = &MEM[(void *)"Enum" + 3B];
        D.29706 = *D.29705;
        D.29707 = (int) D.29706;
        D.29708 = __s2 + 3;
        D.29709 = *D.29708;
        D.29710 = (int) D.29709;
        __result = D.29707 - D.29710;
        <D.29704>:
        <D.29694>:
        <D.29684>:
      }
      D.22546 = __result;
    }
    iftmp.268 = -D.22546;
    goto <D.29711>;
    <D.29674>:
    iftmp.268 = __builtin_strcmp (name, "Enum");
    <D.29711>:
    D.22547 = iftmp.268;
  }
  if (D.22547 == 0) goto <D.29712>; else goto <D.29713>;
  <D.29712>:
  class->valuetype = 0;
  class->enumtype = 0;
  goto <D.29714>;
  <D.29713>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.29716>; else goto <D.29717>;
    <D.29716>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = name;
      D.29718 = "Object";
      D.29719 = MEM[(const unsigned char *)D.29718];
      D.29720 = (int) D.29719;
      D.29721 = *__s2;
      D.29722 = (int) D.29721;
      __result = D.29720 - D.29722;
      {
        D.29723 = __s2_len != 0;
        D.29724 = __result == 0;
        D.29725 = D.29723 & D.29724;
        if (D.29725 != 0) goto <D.29726>; else goto <D.29727>;
        <D.29726>:
        D.29728 = &MEM[(void *)"Object" + 1B];
        D.29729 = *D.29728;
        D.29730 = (int) D.29729;
        D.29731 = __s2 + 1;
        D.29732 = *D.29731;
        D.29733 = (int) D.29732;
        __result = D.29730 - D.29733;
        D.29734 = __s2_len > 1;
        D.29724 = __result == 0;
        D.29735 = D.29734 & D.29724;
        if (D.29735 != 0) goto <D.29736>; else goto <D.29737>;
        <D.29736>:
        D.29738 = &MEM[(void *)"Object" + 2B];
        D.29739 = *D.29738;
        D.29740 = (int) D.29739;
        D.29741 = __s2 + 2;
        D.29742 = *D.29741;
        D.29743 = (int) D.29742;
        __result = D.29740 - D.29743;
        D.29744 = __s2_len > 2;
        D.29724 = __result == 0;
        D.29745 = D.29744 & D.29724;
        if (D.29745 != 0) goto <D.29746>; else goto <D.29747>;
        <D.29746>:
        D.29748 = &MEM[(void *)"Object" + 3B];
        D.29749 = *D.29748;
        D.29750 = (int) D.29749;
        D.29751 = __s2 + 3;
        D.29752 = *D.29751;
        D.29753 = (int) D.29752;
        __result = D.29750 - D.29753;
        <D.29747>:
        <D.29737>:
        <D.29727>:
      }
      D.22555 = __result;
    }
    iftmp.269 = -D.22555;
    goto <D.29754>;
    <D.29717>:
    iftmp.269 = __builtin_strcmp (name, "Object");
    <D.29754>:
    D.22556 = iftmp.269;
  }
  if (D.22556 == 0) goto <D.29755>; else goto <D.29756>;
  <D.29755>:
  class->byval_arg.type = 28;
  D.29757 = class->byval_arg.type;
  class->this_arg.type = D.29757;
  goto <D.29758>;
  <D.29756>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.29760>; else goto <D.29761>;
    <D.29760>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = name;
      D.29762 = "String";
      D.29763 = MEM[(const unsigned char *)D.29762];
      D.29764 = (int) D.29763;
      D.29765 = *__s2;
      D.29766 = (int) D.29765;
      __result = D.29764 - D.29766;
      {
        D.29767 = __s2_len != 0;
        D.29768 = __result == 0;
        D.29769 = D.29767 & D.29768;
        if (D.29769 != 0) goto <D.29770>; else goto <D.29771>;
        <D.29770>:
        D.29772 = &MEM[(void *)"String" + 1B];
        D.29773 = *D.29772;
        D.29774 = (int) D.29773;
        D.29775 = __s2 + 1;
        D.29776 = *D.29775;
        D.29777 = (int) D.29776;
        __result = D.29774 - D.29777;
        D.29778 = __s2_len > 1;
        D.29768 = __result == 0;
        D.29779 = D.29778 & D.29768;
        if (D.29779 != 0) goto <D.29780>; else goto <D.29781>;
        <D.29780>:
        D.29782 = &MEM[(void *)"String" + 2B];
        D.29783 = *D.29782;
        D.29784 = (int) D.29783;
        D.29785 = __s2 + 2;
        D.29786 = *D.29785;
        D.29787 = (int) D.29786;
        __result = D.29784 - D.29787;
        D.29788 = __s2_len > 2;
        D.29768 = __result == 0;
        D.29789 = D.29788 & D.29768;
        if (D.29789 != 0) goto <D.29790>; else goto <D.29791>;
        <D.29790>:
        D.29792 = &MEM[(void *)"String" + 3B];
        D.29793 = *D.29792;
        D.29794 = (int) D.29793;
        D.29795 = __s2 + 3;
        D.29796 = *D.29795;
        D.29797 = (int) D.29796;
        __result = D.29794 - D.29797;
        <D.29791>:
        <D.29781>:
        <D.29771>:
      }
      D.22564 = __result;
    }
    iftmp.270 = -D.22564;
    goto <D.29798>;
    <D.29761>:
    iftmp.270 = __builtin_strcmp (name, "String");
    <D.29798>:
    D.22565 = iftmp.270;
  }
  if (D.22565 == 0) goto <D.29799>; else goto <D.29800>;
  <D.29799>:
  class->byval_arg.type = 14;
  D.29757 = class->byval_arg.type;
  class->this_arg.type = D.29757;
  goto <D.29801>;
  <D.29800>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 14;
    if (__s2_len <= 3) goto <D.29803>; else goto <D.29804>;
    <D.29803>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = name;
      D.29805 = "TypedReference";
      D.29806 = MEM[(const unsigned char *)D.29805];
      D.29807 = (int) D.29806;
      D.29808 = *__s2;
      D.29809 = (int) D.29808;
      __result = D.29807 - D.29809;
      {
        D.29810 = __s2_len != 0;
        D.29811 = __result == 0;
        D.29812 = D.29810 & D.29811;
        if (D.29812 != 0) goto <D.29813>; else goto <D.29814>;
        <D.29813>:
        D.29815 = &MEM[(void *)"TypedReference" + 1B];
        D.29816 = *D.29815;
        D.29817 = (int) D.29816;
        D.29818 = __s2 + 1;
        D.29819 = *D.29818;
        D.29820 = (int) D.29819;
        __result = D.29817 - D.29820;
        D.29821 = __s2_len > 1;
        D.29811 = __result == 0;
        D.29822 = D.29821 & D.29811;
        if (D.29822 != 0) goto <D.29823>; else goto <D.29824>;
        <D.29823>:
        D.29825 = &MEM[(void *)"TypedReference" + 2B];
        D.29826 = *D.29825;
        D.29827 = (int) D.29826;
        D.29828 = __s2 + 2;
        D.29829 = *D.29828;
        D.29830 = (int) D.29829;
        __result = D.29827 - D.29830;
        D.29831 = __s2_len > 2;
        D.29811 = __result == 0;
        D.29832 = D.29831 & D.29811;
        if (D.29832 != 0) goto <D.29833>; else goto <D.29834>;
        <D.29833>:
        D.29835 = &MEM[(void *)"TypedReference" + 3B];
        D.29836 = *D.29835;
        D.29837 = (int) D.29836;
        D.29838 = __s2 + 3;
        D.29839 = *D.29838;
        D.29840 = (int) D.29839;
        __result = D.29837 - D.29840;
        <D.29834>:
        <D.29824>:
        <D.29814>:
      }
      D.22573 = __result;
    }
    iftmp.271 = -D.22573;
    goto <D.29841>;
    <D.29804>:
    iftmp.271 = __builtin_strcmp (name, "TypedReference");
    <D.29841>:
    D.22574 = iftmp.271;
  }
  if (D.22574 == 0) goto <D.29842>; else goto <D.29843>;
  <D.29842>:
  class->byval_arg.type = 22;
  D.29757 = class->byval_arg.type;
  class->this_arg.type = D.29757;
  <D.29843>:
  <D.29801>:
  <D.29758>:
  <D.29714>:
  <D.29671>:
  <D.29628>:
  <D.29586>:
  D.29844 = BIT_FIELD_REF <*class, 8, 160>;
  D.29845 = D.29844 & 8;
  if (D.29845 != 0) goto <D.29846>; else goto <D.29847>;
  <D.29846>:
  {
    int t;

    t = 17;
    if (is_corlib != 0) goto <D.29848>; else goto <D.29849>;
    <D.29848>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.29851>; else goto <D.29852>;
      <D.29851>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = nspace;
        D.29590 = "System";
        D.29591 = MEM[(const unsigned char *)D.29590];
        D.29592 = (int) D.29591;
        D.29853 = *__s2;
        D.29854 = (int) D.29853;
        __result = D.29592 - D.29854;
        {
          D.29855 = __s2_len != 0;
          D.29856 = __result == 0;
          D.29857 = D.29855 & D.29856;
          if (D.29857 != 0) goto <D.29858>; else goto <D.29859>;
          <D.29858>:
          D.29600 = &MEM[(void *)"System" + 1B];
          D.29601 = *D.29600;
          D.29602 = (int) D.29601;
          D.29860 = __s2 + 1;
          D.29861 = *D.29860;
          D.29862 = (int) D.29861;
          __result = D.29602 - D.29862;
          D.29863 = __s2_len > 1;
          D.29856 = __result == 0;
          D.29864 = D.29863 & D.29856;
          if (D.29864 != 0) goto <D.29865>; else goto <D.29866>;
          <D.29865>:
          D.29610 = &MEM[(void *)"System" + 2B];
          D.29611 = *D.29610;
          D.29612 = (int) D.29611;
          D.29867 = __s2 + 2;
          D.29868 = *D.29867;
          D.29869 = (int) D.29868;
          __result = D.29612 - D.29869;
          D.29870 = __s2_len > 2;
          D.29856 = __result == 0;
          D.29871 = D.29870 & D.29856;
          if (D.29871 != 0) goto <D.29872>; else goto <D.29873>;
          <D.29872>:
          D.29620 = &MEM[(void *)"System" + 3B];
          D.29621 = *D.29620;
          D.29622 = (int) D.29621;
          D.29874 = __s2 + 3;
          D.29875 = *D.29874;
          D.29876 = (int) D.29875;
          __result = D.29622 - D.29876;
          <D.29873>:
          <D.29866>:
          <D.29859>:
        }
        D.22583 = __result;
      }
      iftmp.272 = -D.22583;
      goto <D.29877>;
      <D.29852>:
      iftmp.272 = __builtin_strcmp (nspace, "System");
      <D.29877>:
      D.22584 = iftmp.272;
    }
    if (D.22584 == 0) goto <D.29878>; else goto <D.29879>;
    <D.29878>:
    D.29880 = *name;
    D.29881 = (int) D.29880;
    switch (D.29881) <default: <D.22738>, case 66: <D.22585>, case 67: <D.22605>, case 68: <D.22615>, case 73: <D.22625>, case 83: <D.22662>, case 84: <D.22718>, case 85: <D.22681>, case 86: <D.22728>>
    <D.22585>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 7;
      if (__s2_len <= 3) goto <D.29883>; else goto <D.29884>;
      <D.29883>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.29885 = "Boolean";
        D.29886 = MEM[(const unsigned char *)D.29885];
        D.29887 = (int) D.29886;
        D.29888 = *__s2;
        D.29889 = (int) D.29888;
        __result = D.29887 - D.29889;
        {
          D.29890 = __s2_len != 0;
          D.29891 = __result == 0;
          D.29892 = D.29890 & D.29891;
          if (D.29892 != 0) goto <D.29893>; else goto <D.29894>;
          <D.29893>:
          D.29895 = &MEM[(void *)"Boolean" + 1B];
          D.29896 = *D.29895;
          D.29897 = (int) D.29896;
          D.29898 = __s2 + 1;
          D.29899 = *D.29898;
          D.29900 = (int) D.29899;
          __result = D.29897 - D.29900;
          D.29901 = __s2_len > 1;
          D.29891 = __result == 0;
          D.29902 = D.29901 & D.29891;
          if (D.29902 != 0) goto <D.29903>; else goto <D.29904>;
          <D.29903>:
          D.29905 = &MEM[(void *)"Boolean" + 2B];
          D.29906 = *D.29905;
          D.29907 = (int) D.29906;
          D.29908 = __s2 + 2;
          D.29909 = *D.29908;
          D.29910 = (int) D.29909;
          __result = D.29907 - D.29910;
          D.29911 = __s2_len > 2;
          D.29891 = __result == 0;
          D.29912 = D.29911 & D.29891;
          if (D.29912 != 0) goto <D.29913>; else goto <D.29914>;
          <D.29913>:
          D.29915 = &MEM[(void *)"Boolean" + 3B];
          D.29916 = *D.29915;
          D.29917 = (int) D.29916;
          D.29918 = __s2 + 3;
          D.29919 = *D.29918;
          D.29920 = (int) D.29919;
          __result = D.29917 - D.29920;
          <D.29914>:
          <D.29904>:
          <D.29894>:
        }
        D.22593 = __result;
      }
      iftmp.273 = -D.22593;
      goto <D.29921>;
      <D.29884>:
      iftmp.273 = __builtin_strcmp (name, "Boolean");
      <D.29921>:
      D.22594 = iftmp.273;
    }
    if (D.22594 == 0) goto <D.29922>; else goto <D.29923>;
    <D.29922>:
    t = 2;
    goto <D.29924>;
    <D.29923>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 4;
      if (__s2_len <= 3) goto <D.29926>; else goto <D.29927>;
      <D.29926>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.29928 = "Byte";
        D.29929 = MEM[(const unsigned char *)D.29928];
        D.29930 = (int) D.29929;
        D.29931 = *__s2;
        D.29932 = (int) D.29931;
        __result = D.29930 - D.29932;
        {
          D.29933 = __s2_len != 0;
          D.29934 = __result == 0;
          D.29935 = D.29933 & D.29934;
          if (D.29935 != 0) goto <D.29936>; else goto <D.29937>;
          <D.29936>:
          D.29938 = &MEM[(void *)"Byte" + 1B];
          D.29939 = *D.29938;
          D.29940 = (int) D.29939;
          D.29941 = __s2 + 1;
          D.29942 = *D.29941;
          D.29943 = (int) D.29942;
          __result = D.29940 - D.29943;
          D.29944 = __s2_len > 1;
          D.29934 = __result == 0;
          D.29945 = D.29944 & D.29934;
          if (D.29945 != 0) goto <D.29946>; else goto <D.29947>;
          <D.29946>:
          D.29948 = &MEM[(void *)"Byte" + 2B];
          D.29949 = *D.29948;
          D.29950 = (int) D.29949;
          D.29951 = __s2 + 2;
          D.29952 = *D.29951;
          D.29953 = (int) D.29952;
          __result = D.29950 - D.29953;
          D.29954 = __s2_len > 2;
          D.29934 = __result == 0;
          D.29955 = D.29954 & D.29934;
          if (D.29955 != 0) goto <D.29956>; else goto <D.29957>;
          <D.29956>:
          D.29958 = &MEM[(void *)"Byte" + 3B];
          D.29959 = *D.29958;
          D.29960 = (int) D.29959;
          D.29961 = __s2 + 3;
          D.29962 = *D.29961;
          D.29963 = (int) D.29962;
          __result = D.29960 - D.29963;
          <D.29957>:
          <D.29947>:
          <D.29937>:
        }
        D.22602 = __result;
      }
      iftmp.274 = -D.22602;
      goto <D.29964>;
      <D.29927>:
      iftmp.274 = __builtin_strcmp (name, "Byte");
      <D.29964>:
      D.22603 = iftmp.274;
    }
    if (D.22603 == 0) goto <D.29965>; else goto <D.29966>;
    <D.29965>:
    t = 5;
    class->blittable = 1;
    <D.29966>:
    <D.29924>:
    goto <D.22604>;
    <D.22605>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 4;
      if (__s2_len <= 3) goto <D.29968>; else goto <D.29969>;
      <D.29968>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.29970 = "Char";
        D.29971 = MEM[(const unsigned char *)D.29970];
        D.29972 = (int) D.29971;
        D.29973 = *__s2;
        D.29974 = (int) D.29973;
        __result = D.29972 - D.29974;
        {
          D.29975 = __s2_len != 0;
          D.29976 = __result == 0;
          D.29977 = D.29975 & D.29976;
          if (D.29977 != 0) goto <D.29978>; else goto <D.29979>;
          <D.29978>:
          D.29980 = &MEM[(void *)"Char" + 1B];
          D.29981 = *D.29980;
          D.29982 = (int) D.29981;
          D.29983 = __s2 + 1;
          D.29984 = *D.29983;
          D.29985 = (int) D.29984;
          __result = D.29982 - D.29985;
          D.29986 = __s2_len > 1;
          D.29976 = __result == 0;
          D.29987 = D.29986 & D.29976;
          if (D.29987 != 0) goto <D.29988>; else goto <D.29989>;
          <D.29988>:
          D.29990 = &MEM[(void *)"Char" + 2B];
          D.29991 = *D.29990;
          D.29992 = (int) D.29991;
          D.29993 = __s2 + 2;
          D.29994 = *D.29993;
          D.29995 = (int) D.29994;
          __result = D.29992 - D.29995;
          D.29996 = __s2_len > 2;
          D.29976 = __result == 0;
          D.29997 = D.29996 & D.29976;
          if (D.29997 != 0) goto <D.29998>; else goto <D.29999>;
          <D.29998>:
          D.30000 = &MEM[(void *)"Char" + 3B];
          D.30001 = *D.30000;
          D.30002 = (int) D.30001;
          D.30003 = __s2 + 3;
          D.30004 = *D.30003;
          D.30005 = (int) D.30004;
          __result = D.30002 - D.30005;
          <D.29999>:
          <D.29989>:
          <D.29979>:
        }
        D.22613 = __result;
      }
      iftmp.275 = -D.22613;
      goto <D.30006>;
      <D.29969>:
      iftmp.275 = __builtin_strcmp (name, "Char");
      <D.30006>:
      D.22614 = iftmp.275;
    }
    if (D.22614 == 0) goto <D.30007>; else goto <D.30008>;
    <D.30007>:
    t = 3;
    <D.30008>:
    goto <D.22604>;
    <D.22615>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.30010>; else goto <D.30011>;
      <D.30010>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30012 = "Double";
        D.30013 = MEM[(const unsigned char *)D.30012];
        D.30014 = (int) D.30013;
        D.30015 = *__s2;
        D.30016 = (int) D.30015;
        __result = D.30014 - D.30016;
        {
          D.30017 = __s2_len != 0;
          D.30018 = __result == 0;
          D.30019 = D.30017 & D.30018;
          if (D.30019 != 0) goto <D.30020>; else goto <D.30021>;
          <D.30020>:
          D.30022 = &MEM[(void *)"Double" + 1B];
          D.30023 = *D.30022;
          D.30024 = (int) D.30023;
          D.30025 = __s2 + 1;
          D.30026 = *D.30025;
          D.30027 = (int) D.30026;
          __result = D.30024 - D.30027;
          D.30028 = __s2_len > 1;
          D.30018 = __result == 0;
          D.30029 = D.30028 & D.30018;
          if (D.30029 != 0) goto <D.30030>; else goto <D.30031>;
          <D.30030>:
          D.30032 = &MEM[(void *)"Double" + 2B];
          D.30033 = *D.30032;
          D.30034 = (int) D.30033;
          D.30035 = __s2 + 2;
          D.30036 = *D.30035;
          D.30037 = (int) D.30036;
          __result = D.30034 - D.30037;
          D.30038 = __s2_len > 2;
          D.30018 = __result == 0;
          D.30039 = D.30038 & D.30018;
          if (D.30039 != 0) goto <D.30040>; else goto <D.30041>;
          <D.30040>:
          D.30042 = &MEM[(void *)"Double" + 3B];
          D.30043 = *D.30042;
          D.30044 = (int) D.30043;
          D.30045 = __s2 + 3;
          D.30046 = *D.30045;
          D.30047 = (int) D.30046;
          __result = D.30044 - D.30047;
          <D.30041>:
          <D.30031>:
          <D.30021>:
        }
        D.22623 = __result;
      }
      iftmp.276 = -D.22623;
      goto <D.30048>;
      <D.30011>:
      iftmp.276 = __builtin_strcmp (name, "Double");
      <D.30048>:
      D.22624 = iftmp.276;
    }
    if (D.22624 == 0) goto <D.30049>; else goto <D.30050>;
    <D.30049>:
    t = 13;
    class->blittable = 1;
    <D.30050>:
    goto <D.22604>;
    <D.22625>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 5;
      if (__s2_len <= 3) goto <D.30052>; else goto <D.30053>;
      <D.30052>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30054 = "Int32";
        D.30055 = MEM[(const unsigned char *)D.30054];
        D.30056 = (int) D.30055;
        D.30057 = *__s2;
        D.30058 = (int) D.30057;
        __result = D.30056 - D.30058;
        {
          D.30059 = __s2_len != 0;
          D.30060 = __result == 0;
          D.30061 = D.30059 & D.30060;
          if (D.30061 != 0) goto <D.30062>; else goto <D.30063>;
          <D.30062>:
          D.30064 = &MEM[(void *)"Int32" + 1B];
          D.30065 = *D.30064;
          D.30066 = (int) D.30065;
          D.30067 = __s2 + 1;
          D.30068 = *D.30067;
          D.30069 = (int) D.30068;
          __result = D.30066 - D.30069;
          D.30070 = __s2_len > 1;
          D.30060 = __result == 0;
          D.30071 = D.30070 & D.30060;
          if (D.30071 != 0) goto <D.30072>; else goto <D.30073>;
          <D.30072>:
          D.30074 = &MEM[(void *)"Int32" + 2B];
          D.30075 = *D.30074;
          D.30076 = (int) D.30075;
          D.30077 = __s2 + 2;
          D.30078 = *D.30077;
          D.30079 = (int) D.30078;
          __result = D.30076 - D.30079;
          D.30080 = __s2_len > 2;
          D.30060 = __result == 0;
          D.30081 = D.30080 & D.30060;
          if (D.30081 != 0) goto <D.30082>; else goto <D.30083>;
          <D.30082>:
          D.30084 = &MEM[(void *)"Int32" + 3B];
          D.30085 = *D.30084;
          D.30086 = (int) D.30085;
          D.30087 = __s2 + 3;
          D.30088 = *D.30087;
          D.30089 = (int) D.30088;
          __result = D.30086 - D.30089;
          <D.30083>:
          <D.30073>:
          <D.30063>:
        }
        D.22633 = __result;
      }
      iftmp.277 = -D.22633;
      goto <D.30090>;
      <D.30053>:
      iftmp.277 = __builtin_strcmp (name, "Int32");
      <D.30090>:
      D.22634 = iftmp.277;
    }
    if (D.22634 == 0) goto <D.30091>; else goto <D.30092>;
    <D.30091>:
    t = 8;
    class->blittable = 1;
    goto <D.30093>;
    <D.30092>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 5;
      if (__s2_len <= 3) goto <D.30095>; else goto <D.30096>;
      <D.30095>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30097 = "Int16";
        D.30098 = MEM[(const unsigned char *)D.30097];
        D.30099 = (int) D.30098;
        D.30100 = *__s2;
        D.30101 = (int) D.30100;
        __result = D.30099 - D.30101;
        {
          D.30102 = __s2_len != 0;
          D.30103 = __result == 0;
          D.30104 = D.30102 & D.30103;
          if (D.30104 != 0) goto <D.30105>; else goto <D.30106>;
          <D.30105>:
          D.30107 = &MEM[(void *)"Int16" + 1B];
          D.30108 = *D.30107;
          D.30109 = (int) D.30108;
          D.30110 = __s2 + 1;
          D.30111 = *D.30110;
          D.30112 = (int) D.30111;
          __result = D.30109 - D.30112;
          D.30113 = __s2_len > 1;
          D.30103 = __result == 0;
          D.30114 = D.30113 & D.30103;
          if (D.30114 != 0) goto <D.30115>; else goto <D.30116>;
          <D.30115>:
          D.30117 = &MEM[(void *)"Int16" + 2B];
          D.30118 = *D.30117;
          D.30119 = (int) D.30118;
          D.30120 = __s2 + 2;
          D.30121 = *D.30120;
          D.30122 = (int) D.30121;
          __result = D.30119 - D.30122;
          D.30123 = __s2_len > 2;
          D.30103 = __result == 0;
          D.30124 = D.30123 & D.30103;
          if (D.30124 != 0) goto <D.30125>; else goto <D.30126>;
          <D.30125>:
          D.30127 = &MEM[(void *)"Int16" + 3B];
          D.30128 = *D.30127;
          D.30129 = (int) D.30128;
          D.30130 = __s2 + 3;
          D.30131 = *D.30130;
          D.30132 = (int) D.30131;
          __result = D.30129 - D.30132;
          <D.30126>:
          <D.30116>:
          <D.30106>:
        }
        D.22642 = __result;
      }
      iftmp.278 = -D.22642;
      goto <D.30133>;
      <D.30096>:
      iftmp.278 = __builtin_strcmp (name, "Int16");
      <D.30133>:
      D.22643 = iftmp.278;
    }
    if (D.22643 == 0) goto <D.30134>; else goto <D.30135>;
    <D.30134>:
    t = 6;
    class->blittable = 1;
    goto <D.30136>;
    <D.30135>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 5;
      if (__s2_len <= 3) goto <D.30138>; else goto <D.30139>;
      <D.30138>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30140 = "Int64";
        D.30141 = MEM[(const unsigned char *)D.30140];
        D.30142 = (int) D.30141;
        D.30143 = *__s2;
        D.30144 = (int) D.30143;
        __result = D.30142 - D.30144;
        {
          D.30145 = __s2_len != 0;
          D.30146 = __result == 0;
          D.30147 = D.30145 & D.30146;
          if (D.30147 != 0) goto <D.30148>; else goto <D.30149>;
          <D.30148>:
          D.30150 = &MEM[(void *)"Int64" + 1B];
          D.30151 = *D.30150;
          D.30152 = (int) D.30151;
          D.30153 = __s2 + 1;
          D.30154 = *D.30153;
          D.30155 = (int) D.30154;
          __result = D.30152 - D.30155;
          D.30156 = __s2_len > 1;
          D.30146 = __result == 0;
          D.30157 = D.30156 & D.30146;
          if (D.30157 != 0) goto <D.30158>; else goto <D.30159>;
          <D.30158>:
          D.30160 = &MEM[(void *)"Int64" + 2B];
          D.30161 = *D.30160;
          D.30162 = (int) D.30161;
          D.30163 = __s2 + 2;
          D.30164 = *D.30163;
          D.30165 = (int) D.30164;
          __result = D.30162 - D.30165;
          D.30166 = __s2_len > 2;
          D.30146 = __result == 0;
          D.30167 = D.30166 & D.30146;
          if (D.30167 != 0) goto <D.30168>; else goto <D.30169>;
          <D.30168>:
          D.30170 = &MEM[(void *)"Int64" + 3B];
          D.30171 = *D.30170;
          D.30172 = (int) D.30171;
          D.30173 = __s2 + 3;
          D.30174 = *D.30173;
          D.30175 = (int) D.30174;
          __result = D.30172 - D.30175;
          <D.30169>:
          <D.30159>:
          <D.30149>:
        }
        D.22651 = __result;
      }
      iftmp.279 = -D.22651;
      goto <D.30176>;
      <D.30139>:
      iftmp.279 = __builtin_strcmp (name, "Int64");
      <D.30176>:
      D.22652 = iftmp.279;
    }
    if (D.22652 == 0) goto <D.30177>; else goto <D.30178>;
    <D.30177>:
    t = 10;
    class->blittable = 1;
    goto <D.30179>;
    <D.30178>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.30181>; else goto <D.30182>;
      <D.30181>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30183 = "IntPtr";
        D.30184 = MEM[(const unsigned char *)D.30183];
        D.30185 = (int) D.30184;
        D.30186 = *__s2;
        D.30187 = (int) D.30186;
        __result = D.30185 - D.30187;
        {
          D.30188 = __s2_len != 0;
          D.30189 = __result == 0;
          D.30190 = D.30188 & D.30189;
          if (D.30190 != 0) goto <D.30191>; else goto <D.30192>;
          <D.30191>:
          D.30193 = &MEM[(void *)"IntPtr" + 1B];
          D.30194 = *D.30193;
          D.30195 = (int) D.30194;
          D.30196 = __s2 + 1;
          D.30197 = *D.30196;
          D.30198 = (int) D.30197;
          __result = D.30195 - D.30198;
          D.30199 = __s2_len > 1;
          D.30189 = __result == 0;
          D.30200 = D.30199 & D.30189;
          if (D.30200 != 0) goto <D.30201>; else goto <D.30202>;
          <D.30201>:
          D.30203 = &MEM[(void *)"IntPtr" + 2B];
          D.30204 = *D.30203;
          D.30205 = (int) D.30204;
          D.30206 = __s2 + 2;
          D.30207 = *D.30206;
          D.30208 = (int) D.30207;
          __result = D.30205 - D.30208;
          D.30209 = __s2_len > 2;
          D.30189 = __result == 0;
          D.30210 = D.30209 & D.30189;
          if (D.30210 != 0) goto <D.30211>; else goto <D.30212>;
          <D.30211>:
          D.30213 = &MEM[(void *)"IntPtr" + 3B];
          D.30214 = *D.30213;
          D.30215 = (int) D.30214;
          D.30216 = __s2 + 3;
          D.30217 = *D.30216;
          D.30218 = (int) D.30217;
          __result = D.30215 - D.30218;
          <D.30212>:
          <D.30202>:
          <D.30192>:
        }
        D.22660 = __result;
      }
      iftmp.280 = -D.22660;
      goto <D.30219>;
      <D.30182>:
      iftmp.280 = __builtin_strcmp (name, "IntPtr");
      <D.30219>:
      D.22661 = iftmp.280;
    }
    if (D.22661 == 0) goto <D.30220>; else goto <D.30221>;
    <D.30220>:
    t = 24;
    class->blittable = 1;
    <D.30221>:
    <D.30179>:
    <D.30136>:
    <D.30093>:
    goto <D.22604>;
    <D.22662>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.30223>; else goto <D.30224>;
      <D.30223>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30225 = "Single";
        D.30226 = MEM[(const unsigned char *)D.30225];
        D.30227 = (int) D.30226;
        D.30228 = *__s2;
        D.30229 = (int) D.30228;
        __result = D.30227 - D.30229;
        {
          D.30230 = __s2_len != 0;
          D.30231 = __result == 0;
          D.30232 = D.30230 & D.30231;
          if (D.30232 != 0) goto <D.30233>; else goto <D.30234>;
          <D.30233>:
          D.30235 = &MEM[(void *)"Single" + 1B];
          D.30236 = *D.30235;
          D.30237 = (int) D.30236;
          D.30238 = __s2 + 1;
          D.30239 = *D.30238;
          D.30240 = (int) D.30239;
          __result = D.30237 - D.30240;
          D.30241 = __s2_len > 1;
          D.30231 = __result == 0;
          D.30242 = D.30241 & D.30231;
          if (D.30242 != 0) goto <D.30243>; else goto <D.30244>;
          <D.30243>:
          D.30245 = &MEM[(void *)"Single" + 2B];
          D.30246 = *D.30245;
          D.30247 = (int) D.30246;
          D.30248 = __s2 + 2;
          D.30249 = *D.30248;
          D.30250 = (int) D.30249;
          __result = D.30247 - D.30250;
          D.30251 = __s2_len > 2;
          D.30231 = __result == 0;
          D.30252 = D.30251 & D.30231;
          if (D.30252 != 0) goto <D.30253>; else goto <D.30254>;
          <D.30253>:
          D.30255 = &MEM[(void *)"Single" + 3B];
          D.30256 = *D.30255;
          D.30257 = (int) D.30256;
          D.30258 = __s2 + 3;
          D.30259 = *D.30258;
          D.30260 = (int) D.30259;
          __result = D.30257 - D.30260;
          <D.30254>:
          <D.30244>:
          <D.30234>:
        }
        D.22670 = __result;
      }
      iftmp.281 = -D.22670;
      goto <D.30261>;
      <D.30224>:
      iftmp.281 = __builtin_strcmp (name, "Single");
      <D.30261>:
      D.22671 = iftmp.281;
    }
    if (D.22671 == 0) goto <D.30262>; else goto <D.30263>;
    <D.30262>:
    t = 12;
    class->blittable = 1;
    goto <D.30264>;
    <D.30263>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 5;
      if (__s2_len <= 3) goto <D.30266>; else goto <D.30267>;
      <D.30266>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30268 = "SByte";
        D.30269 = MEM[(const unsigned char *)D.30268];
        D.30270 = (int) D.30269;
        D.30271 = *__s2;
        D.30272 = (int) D.30271;
        __result = D.30270 - D.30272;
        {
          D.30273 = __s2_len != 0;
          D.30274 = __result == 0;
          D.30275 = D.30273 & D.30274;
          if (D.30275 != 0) goto <D.30276>; else goto <D.30277>;
          <D.30276>:
          D.30278 = &MEM[(void *)"SByte" + 1B];
          D.30279 = *D.30278;
          D.30280 = (int) D.30279;
          D.30281 = __s2 + 1;
          D.30282 = *D.30281;
          D.30283 = (int) D.30282;
          __result = D.30280 - D.30283;
          D.30284 = __s2_len > 1;
          D.30274 = __result == 0;
          D.30285 = D.30284 & D.30274;
          if (D.30285 != 0) goto <D.30286>; else goto <D.30287>;
          <D.30286>:
          D.30288 = &MEM[(void *)"SByte" + 2B];
          D.30289 = *D.30288;
          D.30290 = (int) D.30289;
          D.30291 = __s2 + 2;
          D.30292 = *D.30291;
          D.30293 = (int) D.30292;
          __result = D.30290 - D.30293;
          D.30294 = __s2_len > 2;
          D.30274 = __result == 0;
          D.30295 = D.30294 & D.30274;
          if (D.30295 != 0) goto <D.30296>; else goto <D.30297>;
          <D.30296>:
          D.30298 = &MEM[(void *)"SByte" + 3B];
          D.30299 = *D.30298;
          D.30300 = (int) D.30299;
          D.30301 = __s2 + 3;
          D.30302 = *D.30301;
          D.30303 = (int) D.30302;
          __result = D.30300 - D.30303;
          <D.30297>:
          <D.30287>:
          <D.30277>:
        }
        D.22679 = __result;
      }
      iftmp.282 = -D.22679;
      goto <D.30304>;
      <D.30267>:
      iftmp.282 = __builtin_strcmp (name, "SByte");
      <D.30304>:
      D.22680 = iftmp.282;
    }
    if (D.22680 == 0) goto <D.30305>; else goto <D.30306>;
    <D.30305>:
    t = 4;
    class->blittable = 1;
    <D.30306>:
    <D.30264>:
    goto <D.22604>;
    <D.22681>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.30308>; else goto <D.30309>;
      <D.30308>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30310 = "UInt32";
        D.30311 = MEM[(const unsigned char *)D.30310];
        D.30312 = (int) D.30311;
        D.30313 = *__s2;
        D.30314 = (int) D.30313;
        __result = D.30312 - D.30314;
        {
          D.30315 = __s2_len != 0;
          D.30316 = __result == 0;
          D.30317 = D.30315 & D.30316;
          if (D.30317 != 0) goto <D.30318>; else goto <D.30319>;
          <D.30318>:
          D.30320 = &MEM[(void *)"UInt32" + 1B];
          D.30321 = *D.30320;
          D.30322 = (int) D.30321;
          D.30323 = __s2 + 1;
          D.30324 = *D.30323;
          D.30325 = (int) D.30324;
          __result = D.30322 - D.30325;
          D.30326 = __s2_len > 1;
          D.30316 = __result == 0;
          D.30327 = D.30326 & D.30316;
          if (D.30327 != 0) goto <D.30328>; else goto <D.30329>;
          <D.30328>:
          D.30330 = &MEM[(void *)"UInt32" + 2B];
          D.30331 = *D.30330;
          D.30332 = (int) D.30331;
          D.30333 = __s2 + 2;
          D.30334 = *D.30333;
          D.30335 = (int) D.30334;
          __result = D.30332 - D.30335;
          D.30336 = __s2_len > 2;
          D.30316 = __result == 0;
          D.30337 = D.30336 & D.30316;
          if (D.30337 != 0) goto <D.30338>; else goto <D.30339>;
          <D.30338>:
          D.30340 = &MEM[(void *)"UInt32" + 3B];
          D.30341 = *D.30340;
          D.30342 = (int) D.30341;
          D.30343 = __s2 + 3;
          D.30344 = *D.30343;
          D.30345 = (int) D.30344;
          __result = D.30342 - D.30345;
          <D.30339>:
          <D.30329>:
          <D.30319>:
        }
        D.22689 = __result;
      }
      iftmp.283 = -D.22689;
      goto <D.30346>;
      <D.30309>:
      iftmp.283 = __builtin_strcmp (name, "UInt32");
      <D.30346>:
      D.22690 = iftmp.283;
    }
    if (D.22690 == 0) goto <D.30347>; else goto <D.30348>;
    <D.30347>:
    t = 9;
    class->blittable = 1;
    goto <D.30349>;
    <D.30348>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.30351>; else goto <D.30352>;
      <D.30351>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30353 = "UInt16";
        D.30354 = MEM[(const unsigned char *)D.30353];
        D.30355 = (int) D.30354;
        D.30356 = *__s2;
        D.30357 = (int) D.30356;
        __result = D.30355 - D.30357;
        {
          D.30358 = __s2_len != 0;
          D.30359 = __result == 0;
          D.30360 = D.30358 & D.30359;
          if (D.30360 != 0) goto <D.30361>; else goto <D.30362>;
          <D.30361>:
          D.30363 = &MEM[(void *)"UInt16" + 1B];
          D.30364 = *D.30363;
          D.30365 = (int) D.30364;
          D.30366 = __s2 + 1;
          D.30367 = *D.30366;
          D.30368 = (int) D.30367;
          __result = D.30365 - D.30368;
          D.30369 = __s2_len > 1;
          D.30359 = __result == 0;
          D.30370 = D.30369 & D.30359;
          if (D.30370 != 0) goto <D.30371>; else goto <D.30372>;
          <D.30371>:
          D.30373 = &MEM[(void *)"UInt16" + 2B];
          D.30374 = *D.30373;
          D.30375 = (int) D.30374;
          D.30376 = __s2 + 2;
          D.30377 = *D.30376;
          D.30378 = (int) D.30377;
          __result = D.30375 - D.30378;
          D.30379 = __s2_len > 2;
          D.30359 = __result == 0;
          D.30380 = D.30379 & D.30359;
          if (D.30380 != 0) goto <D.30381>; else goto <D.30382>;
          <D.30381>:
          D.30383 = &MEM[(void *)"UInt16" + 3B];
          D.30384 = *D.30383;
          D.30385 = (int) D.30384;
          D.30386 = __s2 + 3;
          D.30387 = *D.30386;
          D.30388 = (int) D.30387;
          __result = D.30385 - D.30388;
          <D.30382>:
          <D.30372>:
          <D.30362>:
        }
        D.22698 = __result;
      }
      iftmp.284 = -D.22698;
      goto <D.30389>;
      <D.30352>:
      iftmp.284 = __builtin_strcmp (name, "UInt16");
      <D.30389>:
      D.22699 = iftmp.284;
    }
    if (D.22699 == 0) goto <D.30390>; else goto <D.30391>;
    <D.30390>:
    t = 7;
    class->blittable = 1;
    goto <D.30392>;
    <D.30391>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.30394>; else goto <D.30395>;
      <D.30394>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30396 = "UInt64";
        D.30397 = MEM[(const unsigned char *)D.30396];
        D.30398 = (int) D.30397;
        D.30399 = *__s2;
        D.30400 = (int) D.30399;
        __result = D.30398 - D.30400;
        {
          D.30401 = __s2_len != 0;
          D.30402 = __result == 0;
          D.30403 = D.30401 & D.30402;
          if (D.30403 != 0) goto <D.30404>; else goto <D.30405>;
          <D.30404>:
          D.30406 = &MEM[(void *)"UInt64" + 1B];
          D.30407 = *D.30406;
          D.30408 = (int) D.30407;
          D.30409 = __s2 + 1;
          D.30410 = *D.30409;
          D.30411 = (int) D.30410;
          __result = D.30408 - D.30411;
          D.30412 = __s2_len > 1;
          D.30402 = __result == 0;
          D.30413 = D.30412 & D.30402;
          if (D.30413 != 0) goto <D.30414>; else goto <D.30415>;
          <D.30414>:
          D.30416 = &MEM[(void *)"UInt64" + 2B];
          D.30417 = *D.30416;
          D.30418 = (int) D.30417;
          D.30419 = __s2 + 2;
          D.30420 = *D.30419;
          D.30421 = (int) D.30420;
          __result = D.30418 - D.30421;
          D.30422 = __s2_len > 2;
          D.30402 = __result == 0;
          D.30423 = D.30422 & D.30402;
          if (D.30423 != 0) goto <D.30424>; else goto <D.30425>;
          <D.30424>:
          D.30426 = &MEM[(void *)"UInt64" + 3B];
          D.30427 = *D.30426;
          D.30428 = (int) D.30427;
          D.30429 = __s2 + 3;
          D.30430 = *D.30429;
          D.30431 = (int) D.30430;
          __result = D.30428 - D.30431;
          <D.30425>:
          <D.30415>:
          <D.30405>:
        }
        D.22707 = __result;
      }
      iftmp.285 = -D.22707;
      goto <D.30432>;
      <D.30395>:
      iftmp.285 = __builtin_strcmp (name, "UInt64");
      <D.30432>:
      D.22708 = iftmp.285;
    }
    if (D.22708 == 0) goto <D.30433>; else goto <D.30434>;
    <D.30433>:
    t = 11;
    class->blittable = 1;
    goto <D.30435>;
    <D.30434>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 7;
      if (__s2_len <= 3) goto <D.30437>; else goto <D.30438>;
      <D.30437>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30439 = "UIntPtr";
        D.30440 = MEM[(const unsigned char *)D.30439];
        D.30441 = (int) D.30440;
        D.30442 = *__s2;
        D.30443 = (int) D.30442;
        __result = D.30441 - D.30443;
        {
          D.30444 = __s2_len != 0;
          D.30445 = __result == 0;
          D.30446 = D.30444 & D.30445;
          if (D.30446 != 0) goto <D.30447>; else goto <D.30448>;
          <D.30447>:
          D.30449 = &MEM[(void *)"UIntPtr" + 1B];
          D.30450 = *D.30449;
          D.30451 = (int) D.30450;
          D.30452 = __s2 + 1;
          D.30453 = *D.30452;
          D.30454 = (int) D.30453;
          __result = D.30451 - D.30454;
          D.30455 = __s2_len > 1;
          D.30445 = __result == 0;
          D.30456 = D.30455 & D.30445;
          if (D.30456 != 0) goto <D.30457>; else goto <D.30458>;
          <D.30457>:
          D.30459 = &MEM[(void *)"UIntPtr" + 2B];
          D.30460 = *D.30459;
          D.30461 = (int) D.30460;
          D.30462 = __s2 + 2;
          D.30463 = *D.30462;
          D.30464 = (int) D.30463;
          __result = D.30461 - D.30464;
          D.30465 = __s2_len > 2;
          D.30445 = __result == 0;
          D.30466 = D.30465 & D.30445;
          if (D.30466 != 0) goto <D.30467>; else goto <D.30468>;
          <D.30467>:
          D.30469 = &MEM[(void *)"UIntPtr" + 3B];
          D.30470 = *D.30469;
          D.30471 = (int) D.30470;
          D.30472 = __s2 + 3;
          D.30473 = *D.30472;
          D.30474 = (int) D.30473;
          __result = D.30471 - D.30474;
          <D.30468>:
          <D.30458>:
          <D.30448>:
        }
        D.22716 = __result;
      }
      iftmp.286 = -D.22716;
      goto <D.30475>;
      <D.30438>:
      iftmp.286 = __builtin_strcmp (name, "UIntPtr");
      <D.30475>:
      D.22717 = iftmp.286;
    }
    if (D.22717 == 0) goto <D.30476>; else goto <D.30477>;
    <D.30476>:
    t = 25;
    class->blittable = 1;
    <D.30477>:
    <D.30435>:
    <D.30392>:
    <D.30349>:
    goto <D.22604>;
    <D.22718>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 14;
      if (__s2_len <= 3) goto <D.30479>; else goto <D.30480>;
      <D.30479>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.29805 = "TypedReference";
        D.29806 = MEM[(const unsigned char *)D.29805];
        D.29807 = (int) D.29806;
        D.30481 = *__s2;
        D.30482 = (int) D.30481;
        __result = D.29807 - D.30482;
        {
          D.30483 = __s2_len != 0;
          D.30484 = __result == 0;
          D.30485 = D.30483 & D.30484;
          if (D.30485 != 0) goto <D.30486>; else goto <D.30487>;
          <D.30486>:
          D.29815 = &MEM[(void *)"TypedReference" + 1B];
          D.29816 = *D.29815;
          D.29817 = (int) D.29816;
          D.30488 = __s2 + 1;
          D.30489 = *D.30488;
          D.30490 = (int) D.30489;
          __result = D.29817 - D.30490;
          D.30491 = __s2_len > 1;
          D.30484 = __result == 0;
          D.30492 = D.30491 & D.30484;
          if (D.30492 != 0) goto <D.30493>; else goto <D.30494>;
          <D.30493>:
          D.29825 = &MEM[(void *)"TypedReference" + 2B];
          D.29826 = *D.29825;
          D.29827 = (int) D.29826;
          D.30495 = __s2 + 2;
          D.30496 = *D.30495;
          D.30497 = (int) D.30496;
          __result = D.29827 - D.30497;
          D.30498 = __s2_len > 2;
          D.30484 = __result == 0;
          D.30499 = D.30498 & D.30484;
          if (D.30499 != 0) goto <D.30500>; else goto <D.30501>;
          <D.30500>:
          D.29835 = &MEM[(void *)"TypedReference" + 3B];
          D.29836 = *D.29835;
          D.29837 = (int) D.29836;
          D.30502 = __s2 + 3;
          D.30503 = *D.30502;
          D.30504 = (int) D.30503;
          __result = D.29837 - D.30504;
          <D.30501>:
          <D.30494>:
          <D.30487>:
        }
        D.22726 = __result;
      }
      iftmp.287 = -D.22726;
      goto <D.30505>;
      <D.30480>:
      iftmp.287 = __builtin_strcmp (name, "TypedReference");
      <D.30505>:
      D.22727 = iftmp.287;
    }
    if (D.22727 == 0) goto <D.30506>; else goto <D.30507>;
    <D.30506>:
    t = 22;
    class->blittable = 1;
    <D.30507>:
    goto <D.22604>;
    <D.22728>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 4;
      if (__s2_len <= 3) goto <D.30509>; else goto <D.30510>;
      <D.30509>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.30511 = "Void";
        D.30512 = MEM[(const unsigned char *)D.30511];
        D.30513 = (int) D.30512;
        D.30514 = *__s2;
        D.30515 = (int) D.30514;
        __result = D.30513 - D.30515;
        {
          D.30516 = __s2_len != 0;
          D.30517 = __result == 0;
          D.30518 = D.30516 & D.30517;
          if (D.30518 != 0) goto <D.30519>; else goto <D.30520>;
          <D.30519>:
          D.30521 = &MEM[(void *)"Void" + 1B];
          D.30522 = *D.30521;
          D.30523 = (int) D.30522;
          D.30524 = __s2 + 1;
          D.30525 = *D.30524;
          D.30526 = (int) D.30525;
          __result = D.30523 - D.30526;
          D.30527 = __s2_len > 1;
          D.30517 = __result == 0;
          D.30528 = D.30527 & D.30517;
          if (D.30528 != 0) goto <D.30529>; else goto <D.30530>;
          <D.30529>:
          D.30531 = &MEM[(void *)"Void" + 2B];
          D.30532 = *D.30531;
          D.30533 = (int) D.30532;
          D.30534 = __s2 + 2;
          D.30535 = *D.30534;
          D.30536 = (int) D.30535;
          __result = D.30533 - D.30536;
          D.30537 = __s2_len > 2;
          D.30517 = __result == 0;
          D.30538 = D.30537 & D.30517;
          if (D.30538 != 0) goto <D.30539>; else goto <D.30540>;
          <D.30539>:
          D.30541 = &MEM[(void *)"Void" + 3B];
          D.30542 = *D.30541;
          D.30543 = (int) D.30542;
          D.30544 = __s2 + 3;
          D.30545 = *D.30544;
          D.30546 = (int) D.30545;
          __result = D.30543 - D.30546;
          <D.30540>:
          <D.30530>:
          <D.30520>:
        }
        D.22736 = __result;
      }
      iftmp.288 = -D.22736;
      goto <D.30547>;
      <D.30510>:
      iftmp.288 = __builtin_strcmp (name, "Void");
      <D.30547>:
      D.22737 = iftmp.288;
    }
    if (D.22737 == 0) goto <D.30548>; else goto <D.30549>;
    <D.30548>:
    t = 1;
    <D.30549>:
    goto <D.22604>;
    <D.22738>:
    goto <D.22604>;
    <D.22604>:
    <D.29879>:
    <D.29849>:
    D.30550 = (unsigned char) t;
    class->byval_arg.type = D.30550;
    D.29757 = class->byval_arg.type;
    class->this_arg.type = D.29757;
  }
  <D.29847>:
  D.30553 = class->flags;
  D.30554 = D.30553 & 32;
  if (D.30554 != 0) goto <D.30551>; else goto <D.30555>;
  <D.30555>:
  D.29757 = class->byval_arg.type;
  if (D.29757 == 19) goto <D.30551>; else goto <D.30556>;
  <D.30556>:
  D.29757 = class->byval_arg.type;
  if (D.29757 == 30) goto <D.30551>; else goto <D.30552>;
  <D.30551>:
  D.30557 = mono_get_unique_iid (class);
  D.30558 = (short unsigned int) D.30557;
  class->interface_id = D.30558;
  <D.30552>:
}


mono_class_setup_parent (struct MonoClass * class, struct MonoClass * parent)
{
  struct MonoImage * D.30560;
  int iftmp.289;
  int D.22756;
  int iftmp.290;
  int D.22755;
  const char[7] * D.30567;
  unsigned char D.30568;
  int D.30569;
  unsigned char D.30570;
  int D.30571;
  _Bool D.30572;
  _Bool D.30573;
  _Bool D.30574;
  const unsigned char * D.30577;
  unsigned char D.30578;
  int D.30579;
  const unsigned char * D.30580;
  unsigned char D.30581;
  int D.30582;
  _Bool D.30583;
  _Bool D.30584;
  const unsigned char * D.30587;
  unsigned char D.30588;
  int D.30589;
  const unsigned char * D.30590;
  unsigned char D.30591;
  int D.30592;
  _Bool D.30593;
  _Bool D.30594;
  const unsigned char * D.30597;
  unsigned char D.30598;
  int D.30599;
  const unsigned char * D.30600;
  unsigned char D.30601;
  int D.30602;
  const char * D.30604;
  int D.22765;
  int iftmp.291;
  int D.22764;
  const char[7] * D.30612;
  unsigned char D.30613;
  int D.30614;
  unsigned char D.30615;
  int D.30616;
  _Bool D.30617;
  _Bool D.30618;
  _Bool D.30619;
  const unsigned char * D.30622;
  unsigned char D.30623;
  int D.30624;
  const unsigned char * D.30625;
  unsigned char D.30626;
  int D.30627;
  _Bool D.30628;
  _Bool D.30629;
  const unsigned char * D.30632;
  unsigned char D.30633;
  int D.30634;
  const unsigned char * D.30635;
  unsigned char D.30636;
  int D.30637;
  _Bool D.30638;
  _Bool D.30639;
  const unsigned char * D.30642;
  unsigned char D.30643;
  int D.30644;
  const unsigned char * D.30645;
  unsigned char D.30646;
  int D.30647;
  const char * D.30649;
  int D.22774;
  int iftmp.292;
  int D.22773;
  const char[9] * D.30655;
  unsigned char D.30656;
  int D.30657;
  unsigned char D.30658;
  int D.30659;
  _Bool D.30660;
  _Bool D.30661;
  _Bool D.30662;
  const unsigned char * D.30665;
  unsigned char D.30666;
  int D.30667;
  const unsigned char * D.30668;
  unsigned char D.30669;
  int D.30670;
  _Bool D.30671;
  _Bool D.30672;
  const unsigned char * D.30675;
  unsigned char D.30676;
  int D.30677;
  const unsigned char * D.30678;
  unsigned char D.30679;
  int D.30680;
  _Bool D.30681;
  _Bool D.30682;
  const unsigned char * D.30685;
  unsigned char D.30686;
  int D.30687;
  const unsigned char * D.30688;
  unsigned char D.30689;
  int D.30690;
  unsigned int D.30696;
  unsigned int D.30697;
  unsigned char D.30699;
  unsigned int D.30702;
  struct MonoClass * D.30705;
  struct MonoGenericClass * D.30710;
  const char * D.30713;
  <unnamed-unsigned:1> D.30716;
  <unnamed-unsigned:1> D.30717;
  <unnamed-unsigned:1> D.30718;
  unsigned char D.30722;
  unsigned char D.30723;
  char D.30726;
  int D.22783;
  int iftmp.293;
  int D.22782;
  const char[19] * D.30732;
  unsigned char D.30733;
  int D.30734;
  unsigned char D.30735;
  int D.30736;
  _Bool D.30737;
  _Bool D.30738;
  _Bool D.30739;
  const unsigned char * D.30742;
  unsigned char D.30743;
  int D.30744;
  const unsigned char * D.30745;
  unsigned char D.30746;
  int D.30747;
  _Bool D.30748;
  _Bool D.30749;
  const unsigned char * D.30752;
  unsigned char D.30753;
  int D.30754;
  const unsigned char * D.30755;
  unsigned char D.30756;
  int D.30757;
  _Bool D.30758;
  _Bool D.30759;
  const unsigned char * D.30762;
  unsigned char D.30763;
  int D.30764;
  const unsigned char * D.30765;
  unsigned char D.30766;
  int D.30767;
  int D.22792;
  int iftmp.294;
  int D.22791;
  const char[19] * D.30776;
  unsigned char D.30777;
  int D.30778;
  unsigned char D.30779;
  int D.30780;
  _Bool D.30781;
  _Bool D.30782;
  _Bool D.30783;
  const unsigned char * D.30786;
  unsigned char D.30787;
  int D.30788;
  const unsigned char * D.30789;
  unsigned char D.30790;
  int D.30791;
  _Bool D.30792;
  _Bool D.30793;
  const unsigned char * D.30796;
  unsigned char D.30797;
  int D.30798;
  const unsigned char * D.30799;
  unsigned char D.30800;
  int D.30801;
  _Bool D.30802;
  _Bool D.30803;
  const unsigned char * D.30806;
  unsigned char D.30807;
  int D.30808;
  const unsigned char * D.30809;
  unsigned char D.30810;
  int D.30811;
  int D.22801;
  int iftmp.295;
  int D.22800;
  const char[9] * D.30820;
  unsigned char D.30821;
  int D.30822;
  unsigned char D.30823;
  int D.30824;
  _Bool D.30825;
  _Bool D.30826;
  _Bool D.30827;
  const unsigned char * D.30830;
  unsigned char D.30831;
  int D.30832;
  const unsigned char * D.30833;
  unsigned char D.30834;
  int D.30835;
  _Bool D.30836;
  _Bool D.30837;
  const unsigned char * D.30840;
  unsigned char D.30841;
  int D.30842;
  const unsigned char * D.30843;
  unsigned char D.30844;
  int D.30845;
  _Bool D.30846;
  _Bool D.30847;
  const unsigned char * D.30850;
  unsigned char D.30851;
  int D.30852;
  const unsigned char * D.30853;
  unsigned char D.30854;
  int D.30855;
  struct MonoClass * D.30861;
  unsigned char D.30862;
  unsigned char D.30863;
  struct MonoImage * D.30865;
  int D.30866;
  int D.22810;
  int iftmp.296;
  int D.22809;
  const char[10] * D.30871;
  unsigned char D.30872;
  int D.30873;
  unsigned char D.30874;
  int D.30875;
  _Bool D.30876;
  _Bool D.30877;
  _Bool D.30878;
  const unsigned char * D.30881;
  unsigned char D.30882;
  int D.30883;
  const unsigned char * D.30884;
  unsigned char D.30885;
  int D.30886;
  _Bool D.30887;
  _Bool D.30888;
  const unsigned char * D.30891;
  unsigned char D.30892;
  int D.30893;
  const unsigned char * D.30894;
  unsigned char D.30895;
  int D.30896;
  _Bool D.30897;
  _Bool D.30898;
  const unsigned char * D.30901;
  unsigned char D.30902;
  int D.30903;
  const unsigned char * D.30904;
  unsigned char D.30905;
  int D.30906;
  const char * D.30908;
  int D.22819;
  int iftmp.297;
  int D.22818;
  unsigned char D.30913;
  int D.30914;
  _Bool D.30915;
  _Bool D.30916;
  _Bool D.30917;
  const unsigned char * D.30920;
  unsigned char D.30921;
  int D.30922;
  _Bool D.30923;
  _Bool D.30924;
  const unsigned char * D.30927;
  unsigned char D.30928;
  int D.30929;
  _Bool D.30930;
  _Bool D.30931;
  const unsigned char * D.30934;
  unsigned char D.30935;
  int D.30936;
  const char * D.30938;
  int D.30939;
  int D.22828;
  int iftmp.298;
  int D.22827;
  const char[5] * D.30945;
  unsigned char D.30946;
  int D.30947;
  unsigned char D.30948;
  int D.30949;
  _Bool D.30950;
  _Bool D.30951;
  _Bool D.30952;
  const unsigned char * D.30955;
  unsigned char D.30956;
  int D.30957;
  const unsigned char * D.30958;
  unsigned char D.30959;
  int D.30960;
  _Bool D.30961;
  _Bool D.30962;
  const unsigned char * D.30965;
  unsigned char D.30966;
  int D.30967;
  const unsigned char * D.30968;
  unsigned char D.30969;
  int D.30970;
  _Bool D.30971;
  _Bool D.30972;
  const unsigned char * D.30975;
  unsigned char D.30976;
  int D.30977;
  const unsigned char * D.30978;
  unsigned char D.30979;
  int D.30980;
  int D.22837;
  int iftmp.299;
  int D.22836;
  unsigned char D.30987;
  int D.30988;
  _Bool D.30989;
  _Bool D.30990;
  _Bool D.30991;
  const unsigned char * D.30994;
  unsigned char D.30995;
  int D.30996;
  _Bool D.30997;
  _Bool D.30998;
  const unsigned char * D.31001;
  unsigned char D.31002;
  int D.31003;
  _Bool D.31004;
  _Bool D.31005;
  const unsigned char * D.31008;
  unsigned char D.31009;
  int D.31010;
  <unnamed-unsigned:1> D.31014;
  gboolean system_namespace;
  gboolean is_corlib;

  D.30560 = class->image;
  is_corlib = mono_is_corlib_image (D.30560);
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.30565>; else goto <D.30566>;
    <D.30565>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name_space;
      D.30567 = "System";
      D.30568 = MEM[(const unsigned char *)D.30567];
      D.30569 = (int) D.30568;
      D.30570 = *__s2;
      D.30571 = (int) D.30570;
      __result = D.30569 - D.30571;
      {
        D.30572 = __s2_len != 0;
        D.30573 = __result == 0;
        D.30574 = D.30572 & D.30573;
        if (D.30574 != 0) goto <D.30575>; else goto <D.30576>;
        <D.30575>:
        D.30577 = &MEM[(void *)"System" + 1B];
        D.30578 = *D.30577;
        D.30579 = (int) D.30578;
        D.30580 = __s2 + 1;
        D.30581 = *D.30580;
        D.30582 = (int) D.30581;
        __result = D.30579 - D.30582;
        D.30583 = __s2_len > 1;
        D.30573 = __result == 0;
        D.30584 = D.30583 & D.30573;
        if (D.30584 != 0) goto <D.30585>; else goto <D.30586>;
        <D.30585>:
        D.30587 = &MEM[(void *)"System" + 2B];
        D.30588 = *D.30587;
        D.30589 = (int) D.30588;
        D.30590 = __s2 + 2;
        D.30591 = *D.30590;
        D.30592 = (int) D.30591;
        __result = D.30589 - D.30592;
        D.30593 = __s2_len > 2;
        D.30573 = __result == 0;
        D.30594 = D.30593 & D.30573;
        if (D.30594 != 0) goto <D.30595>; else goto <D.30596>;
        <D.30595>:
        D.30597 = &MEM[(void *)"System" + 3B];
        D.30598 = *D.30597;
        D.30599 = (int) D.30598;
        D.30600 = __s2 + 3;
        D.30601 = *D.30600;
        D.30602 = (int) D.30601;
        __result = D.30599 - D.30602;
        <D.30596>:
        <D.30586>:
        <D.30576>:
      }
      D.22755 = __result;
    }
    iftmp.290 = -D.22755;
    goto <D.30603>;
    <D.30566>:
    D.30604 = class->name_space;
    iftmp.290 = __builtin_strcmp (D.30604, "System");
    <D.30603>:
    D.22756 = iftmp.290;
  }
  if (D.22756 == 0) goto <D.30605>; else goto <D.30562>;
  <D.30605>:
  if (is_corlib != 0) goto <D.30606>; else goto <D.30562>;
  <D.30606>:
  iftmp.289 = 1;
  goto <D.30563>;
  <D.30562>:
  iftmp.289 = 0;
  <D.30563>:
  system_namespace = iftmp.289;
  if (system_namespace != 0) goto <D.30607>; else goto <D.30608>;
  <D.30607>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.30610>; else goto <D.30611>;
    <D.30610>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.30612 = "Object";
      D.30613 = MEM[(const unsigned char *)D.30612];
      D.30614 = (int) D.30613;
      D.30615 = *__s2;
      D.30616 = (int) D.30615;
      __result = D.30614 - D.30616;
      {
        D.30617 = __s2_len != 0;
        D.30618 = __result == 0;
        D.30619 = D.30617 & D.30618;
        if (D.30619 != 0) goto <D.30620>; else goto <D.30621>;
        <D.30620>:
        D.30622 = &MEM[(void *)"Object" + 1B];
        D.30623 = *D.30622;
        D.30624 = (int) D.30623;
        D.30625 = __s2 + 1;
        D.30626 = *D.30625;
        D.30627 = (int) D.30626;
        __result = D.30624 - D.30627;
        D.30628 = __s2_len > 1;
        D.30618 = __result == 0;
        D.30629 = D.30628 & D.30618;
        if (D.30629 != 0) goto <D.30630>; else goto <D.30631>;
        <D.30630>:
        D.30632 = &MEM[(void *)"Object" + 2B];
        D.30633 = *D.30632;
        D.30634 = (int) D.30633;
        D.30635 = __s2 + 2;
        D.30636 = *D.30635;
        D.30637 = (int) D.30636;
        __result = D.30634 - D.30637;
        D.30638 = __s2_len > 2;
        D.30618 = __result == 0;
        D.30639 = D.30638 & D.30618;
        if (D.30639 != 0) goto <D.30640>; else goto <D.30641>;
        <D.30640>:
        D.30642 = &MEM[(void *)"Object" + 3B];
        D.30643 = *D.30642;
        D.30644 = (int) D.30643;
        D.30645 = __s2 + 3;
        D.30646 = *D.30645;
        D.30647 = (int) D.30646;
        __result = D.30644 - D.30647;
        <D.30641>:
        <D.30631>:
        <D.30621>:
      }
      D.22764 = __result;
    }
    iftmp.291 = -D.22764;
    goto <D.30648>;
    <D.30611>:
    D.30649 = class->name;
    iftmp.291 = __builtin_strcmp (D.30649, "Object");
    <D.30648>:
    D.22765 = iftmp.291;
  }
  if (D.22765 == 0) goto <D.30650>; else goto <D.30651>;
  <D.30650>:
  class->parent = 0B;
  class->instance_size = 8;
  return;
  <D.30651>:
  <D.30608>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.30653>; else goto <D.30654>;
    <D.30653>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.30655 = "<Module>";
      D.30656 = MEM[(const unsigned char *)D.30655];
      D.30657 = (int) D.30656;
      D.30658 = *__s2;
      D.30659 = (int) D.30658;
      __result = D.30657 - D.30659;
      {
        D.30660 = __s2_len != 0;
        D.30661 = __result == 0;
        D.30662 = D.30660 & D.30661;
        if (D.30662 != 0) goto <D.30663>; else goto <D.30664>;
        <D.30663>:
        D.30665 = &MEM[(void *)"<Module>" + 1B];
        D.30666 = *D.30665;
        D.30667 = (int) D.30666;
        D.30668 = __s2 + 1;
        D.30669 = *D.30668;
        D.30670 = (int) D.30669;
        __result = D.30667 - D.30670;
        D.30671 = __s2_len > 1;
        D.30661 = __result == 0;
        D.30672 = D.30671 & D.30661;
        if (D.30672 != 0) goto <D.30673>; else goto <D.30674>;
        <D.30673>:
        D.30675 = &MEM[(void *)"<Module>" + 2B];
        D.30676 = *D.30675;
        D.30677 = (int) D.30676;
        D.30678 = __s2 + 2;
        D.30679 = *D.30678;
        D.30680 = (int) D.30679;
        __result = D.30677 - D.30680;
        D.30681 = __s2_len > 2;
        D.30661 = __result == 0;
        D.30682 = D.30681 & D.30661;
        if (D.30682 != 0) goto <D.30683>; else goto <D.30684>;
        <D.30683>:
        D.30685 = &MEM[(void *)"<Module>" + 3B];
        D.30686 = *D.30685;
        D.30687 = (int) D.30686;
        D.30688 = __s2 + 3;
        D.30689 = *D.30688;
        D.30690 = (int) D.30689;
        __result = D.30687 - D.30690;
        <D.30684>:
        <D.30674>:
        <D.30664>:
      }
      D.22773 = __result;
    }
    iftmp.292 = -D.22773;
    goto <D.30691>;
    <D.30654>:
    D.30649 = class->name;
    iftmp.292 = __builtin_strcmp (D.30649, "<Module>");
    <D.30691>:
    D.22774 = iftmp.292;
  }
  if (D.22774 == 0) goto <D.30692>; else goto <D.30693>;
  <D.30692>:
  class->parent = 0B;
  class->instance_size = 0;
  return;
  <D.30693>:
  D.30696 = class->flags;
  D.30697 = D.30696 & 32;
  if (D.30697 == 0) goto <D.30698>; else goto <D.30694>;
  <D.30698>:
  D.30699 = class->byval_arg.type;
  if (D.30699 != 19) goto <D.30700>; else goto <D.30694>;
  <D.30700>:
  D.30699 = class->byval_arg.type;
  if (D.30699 != 30) goto <D.30701>; else goto <D.30694>;
  <D.30701>:
  D.30696 = class->flags;
  D.30702 = D.30696 & 4096;
  if (D.30702 != 0) goto <D.30703>; else goto <D.30704>;
  <D.30703>:
  init_com_from_comimport (class);
  D.30705 = mono_defaults.object_class;
  if (D.30705 == parent) goto <D.30706>; else goto <D.30707>;
  <D.30706>:
  parent = mono_class_get_com_object_class ();
  <D.30707>:
  <D.30704>:
  if (parent == 0B) goto <D.30708>; else goto <D.30709>;
  <D.30708>:
  parent = mono_defaults.object_class;
  mono_class_set_failure (class, 7, 0B);
  <D.30709>:
  class->parent = parent;
  D.30710 = parent->generic_class;
  if (D.30710 != 0B) goto <D.30711>; else goto <D.30712>;
  <D.30711>:
  D.30713 = parent->name;
  if (D.30713 == 0B) goto <D.30714>; else goto <D.30715>;
  <D.30714>:
  return;
  <D.30715>:
  <D.30712>:
  D.30716 = parent->marshalbyref;
  class->marshalbyref = D.30716;
  D.30717 = parent->contextbound;
  class->contextbound = D.30717;
  D.30718 = parent->delegate;
  class->delegate = D.30718;
  D.30696 = class->flags;
  D.30702 = D.30696 & 4096;
  if (D.30702 != 0) goto <D.30719>; else goto <D.30721>;
  <D.30721>:
  D.30722 = BIT_FIELD_REF <*parent, 8, 184>;
  D.30723 = D.30722 & 64;
  if (D.30723 != 0) goto <D.30719>; else goto <D.30720>;
  <D.30719>:
  class->is_com_object = 1;
  <D.30720>:
  if (system_namespace != 0) goto <D.30724>; else goto <D.30725>;
  <D.30724>:
  D.30649 = class->name;
  D.30726 = *D.30649;
  if (D.30726 == 77) goto <D.30727>; else goto <D.30728>;
  <D.30727>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 18;
    if (__s2_len <= 3) goto <D.30730>; else goto <D.30731>;
    <D.30730>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.30732 = "MarshalByRefObject";
      D.30733 = MEM[(const unsigned char *)D.30732];
      D.30734 = (int) D.30733;
      D.30735 = *__s2;
      D.30736 = (int) D.30735;
      __result = D.30734 - D.30736;
      {
        D.30737 = __s2_len != 0;
        D.30738 = __result == 0;
        D.30739 = D.30737 & D.30738;
        if (D.30739 != 0) goto <D.30740>; else goto <D.30741>;
        <D.30740>:
        D.30742 = &MEM[(void *)"MarshalByRefObject" + 1B];
        D.30743 = *D.30742;
        D.30744 = (int) D.30743;
        D.30745 = __s2 + 1;
        D.30746 = *D.30745;
        D.30747 = (int) D.30746;
        __result = D.30744 - D.30747;
        D.30748 = __s2_len > 1;
        D.30738 = __result == 0;
        D.30749 = D.30748 & D.30738;
        if (D.30749 != 0) goto <D.30750>; else goto <D.30751>;
        <D.30750>:
        D.30752 = &MEM[(void *)"MarshalByRefObject" + 2B];
        D.30753 = *D.30752;
        D.30754 = (int) D.30753;
        D.30755 = __s2 + 2;
        D.30756 = *D.30755;
        D.30757 = (int) D.30756;
        __result = D.30754 - D.30757;
        D.30758 = __s2_len > 2;
        D.30738 = __result == 0;
        D.30759 = D.30758 & D.30738;
        if (D.30759 != 0) goto <D.30760>; else goto <D.30761>;
        <D.30760>:
        D.30762 = &MEM[(void *)"MarshalByRefObject" + 3B];
        D.30763 = *D.30762;
        D.30764 = (int) D.30763;
        D.30765 = __s2 + 3;
        D.30766 = *D.30765;
        D.30767 = (int) D.30766;
        __result = D.30764 - D.30767;
        <D.30761>:
        <D.30751>:
        <D.30741>:
      }
      D.22782 = __result;
    }
    iftmp.293 = -D.22782;
    goto <D.30768>;
    <D.30731>:
    D.30649 = class->name;
    iftmp.293 = __builtin_strcmp (D.30649, "MarshalByRefObject");
    <D.30768>:
    D.22783 = iftmp.293;
  }
  if (D.22783 == 0) goto <D.30769>; else goto <D.30770>;
  <D.30769>:
  class->marshalbyref = 1;
  <D.30770>:
  <D.30728>:
  D.30649 = class->name;
  D.30726 = *D.30649;
  if (D.30726 == 67) goto <D.30771>; else goto <D.30772>;
  <D.30771>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 18;
    if (__s2_len <= 3) goto <D.30774>; else goto <D.30775>;
    <D.30774>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.30776 = "ContextBoundObject";
      D.30777 = MEM[(const unsigned char *)D.30776];
      D.30778 = (int) D.30777;
      D.30779 = *__s2;
      D.30780 = (int) D.30779;
      __result = D.30778 - D.30780;
      {
        D.30781 = __s2_len != 0;
        D.30782 = __result == 0;
        D.30783 = D.30781 & D.30782;
        if (D.30783 != 0) goto <D.30784>; else goto <D.30785>;
        <D.30784>:
        D.30786 = &MEM[(void *)"ContextBoundObject" + 1B];
        D.30787 = *D.30786;
        D.30788 = (int) D.30787;
        D.30789 = __s2 + 1;
        D.30790 = *D.30789;
        D.30791 = (int) D.30790;
        __result = D.30788 - D.30791;
        D.30792 = __s2_len > 1;
        D.30782 = __result == 0;
        D.30793 = D.30792 & D.30782;
        if (D.30793 != 0) goto <D.30794>; else goto <D.30795>;
        <D.30794>:
        D.30796 = &MEM[(void *)"ContextBoundObject" + 2B];
        D.30797 = *D.30796;
        D.30798 = (int) D.30797;
        D.30799 = __s2 + 2;
        D.30800 = *D.30799;
        D.30801 = (int) D.30800;
        __result = D.30798 - D.30801;
        D.30802 = __s2_len > 2;
        D.30782 = __result == 0;
        D.30803 = D.30802 & D.30782;
        if (D.30803 != 0) goto <D.30804>; else goto <D.30805>;
        <D.30804>:
        D.30806 = &MEM[(void *)"ContextBoundObject" + 3B];
        D.30807 = *D.30806;
        D.30808 = (int) D.30807;
        D.30809 = __s2 + 3;
        D.30810 = *D.30809;
        D.30811 = (int) D.30810;
        __result = D.30808 - D.30811;
        <D.30805>:
        <D.30795>:
        <D.30785>:
      }
      D.22791 = __result;
    }
    iftmp.294 = -D.22791;
    goto <D.30812>;
    <D.30775>:
    D.30649 = class->name;
    iftmp.294 = __builtin_strcmp (D.30649, "ContextBoundObject");
    <D.30812>:
    D.22792 = iftmp.294;
  }
  if (D.22792 == 0) goto <D.30813>; else goto <D.30814>;
  <D.30813>:
  class->contextbound = 1;
  <D.30814>:
  <D.30772>:
  D.30649 = class->name;
  D.30726 = *D.30649;
  if (D.30726 == 68) goto <D.30815>; else goto <D.30816>;
  <D.30815>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.30818>; else goto <D.30819>;
    <D.30818>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.30820 = "Delegate";
      D.30821 = MEM[(const unsigned char *)D.30820];
      D.30822 = (int) D.30821;
      D.30823 = *__s2;
      D.30824 = (int) D.30823;
      __result = D.30822 - D.30824;
      {
        D.30825 = __s2_len != 0;
        D.30826 = __result == 0;
        D.30827 = D.30825 & D.30826;
        if (D.30827 != 0) goto <D.30828>; else goto <D.30829>;
        <D.30828>:
        D.30830 = &MEM[(void *)"Delegate" + 1B];
        D.30831 = *D.30830;
        D.30832 = (int) D.30831;
        D.30833 = __s2 + 1;
        D.30834 = *D.30833;
        D.30835 = (int) D.30834;
        __result = D.30832 - D.30835;
        D.30836 = __s2_len > 1;
        D.30826 = __result == 0;
        D.30837 = D.30836 & D.30826;
        if (D.30837 != 0) goto <D.30838>; else goto <D.30839>;
        <D.30838>:
        D.30840 = &MEM[(void *)"Delegate" + 2B];
        D.30841 = *D.30840;
        D.30842 = (int) D.30841;
        D.30843 = __s2 + 2;
        D.30844 = *D.30843;
        D.30845 = (int) D.30844;
        __result = D.30842 - D.30845;
        D.30846 = __s2_len > 2;
        D.30826 = __result == 0;
        D.30847 = D.30846 & D.30826;
        if (D.30847 != 0) goto <D.30848>; else goto <D.30849>;
        <D.30848>:
        D.30850 = &MEM[(void *)"Delegate" + 3B];
        D.30851 = *D.30850;
        D.30852 = (int) D.30851;
        D.30853 = __s2 + 3;
        D.30854 = *D.30853;
        D.30855 = (int) D.30854;
        __result = D.30852 - D.30855;
        <D.30849>:
        <D.30839>:
        <D.30829>:
      }
      D.22800 = __result;
    }
    iftmp.295 = -D.22800;
    goto <D.30856>;
    <D.30819>:
    D.30649 = class->name;
    iftmp.295 = __builtin_strcmp (D.30649, "Delegate");
    <D.30856>:
    D.22801 = iftmp.295;
  }
  if (D.22801 == 0) goto <D.30857>; else goto <D.30858>;
  <D.30857>:
  class->delegate = 1;
  <D.30858>:
  <D.30816>:
  <D.30725>:
  D.30861 = class->parent;
  D.30862 = BIT_FIELD_REF <*D.30861, 8, 160>;
  D.30863 = D.30862 & 16;
  if (D.30863 != 0) goto <D.30859>; else goto <D.30864>;
  <D.30864>:
  D.30861 = class->parent;
  D.30865 = D.30861->image;
  D.30866 = mono_is_corlib_image (D.30865);
  if (D.30866 != 0) goto <D.30867>; else goto <D.30860>;
  <D.30867>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 9;
    if (__s2_len <= 3) goto <D.30869>; else goto <D.30870>;
    <D.30869>:
    {
      const unsigned char * __s2;
      int __result;

      D.30861 = class->parent;
      __s2 = D.30861->name;
      D.30871 = "ValueType";
      D.30872 = MEM[(const unsigned char *)D.30871];
      D.30873 = (int) D.30872;
      D.30874 = *__s2;
      D.30875 = (int) D.30874;
      __result = D.30873 - D.30875;
      {
        D.30876 = __s2_len != 0;
        D.30877 = __result == 0;
        D.30878 = D.30876 & D.30877;
        if (D.30878 != 0) goto <D.30879>; else goto <D.30880>;
        <D.30879>:
        D.30881 = &MEM[(void *)"ValueType" + 1B];
        D.30882 = *D.30881;
        D.30883 = (int) D.30882;
        D.30884 = __s2 + 1;
        D.30885 = *D.30884;
        D.30886 = (int) D.30885;
        __result = D.30883 - D.30886;
        D.30887 = __s2_len > 1;
        D.30877 = __result == 0;
        D.30888 = D.30887 & D.30877;
        if (D.30888 != 0) goto <D.30889>; else goto <D.30890>;
        <D.30889>:
        D.30891 = &MEM[(void *)"ValueType" + 2B];
        D.30892 = *D.30891;
        D.30893 = (int) D.30892;
        D.30894 = __s2 + 2;
        D.30895 = *D.30894;
        D.30896 = (int) D.30895;
        __result = D.30893 - D.30896;
        D.30897 = __s2_len > 2;
        D.30877 = __result == 0;
        D.30898 = D.30897 & D.30877;
        if (D.30898 != 0) goto <D.30899>; else goto <D.30900>;
        <D.30899>:
        D.30901 = &MEM[(void *)"ValueType" + 3B];
        D.30902 = *D.30901;
        D.30903 = (int) D.30902;
        D.30904 = __s2 + 3;
        D.30905 = *D.30904;
        D.30906 = (int) D.30905;
        __result = D.30903 - D.30906;
        <D.30900>:
        <D.30890>:
        <D.30880>:
      }
      D.22809 = __result;
    }
    iftmp.296 = -D.22809;
    goto <D.30907>;
    <D.30870>:
    D.30861 = class->parent;
    D.30908 = D.30861->name;
    iftmp.296 = __builtin_strcmp (D.30908, "ValueType");
    <D.30907>:
    D.22810 = iftmp.296;
  }
  if (D.22810 == 0) goto <D.30909>; else goto <D.30860>;
  <D.30909>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.30911>; else goto <D.30912>;
    <D.30911>:
    {
      const unsigned char * __s2;
      int __result;

      D.30861 = class->parent;
      __s2 = D.30861->name_space;
      D.30567 = "System";
      D.30568 = MEM[(const unsigned char *)D.30567];
      D.30569 = (int) D.30568;
      D.30913 = *__s2;
      D.30914 = (int) D.30913;
      __result = D.30569 - D.30914;
      {
        D.30915 = __s2_len != 0;
        D.30916 = __result == 0;
        D.30917 = D.30915 & D.30916;
        if (D.30917 != 0) goto <D.30918>; else goto <D.30919>;
        <D.30918>:
        D.30577 = &MEM[(void *)"System" + 1B];
        D.30578 = *D.30577;
        D.30579 = (int) D.30578;
        D.30920 = __s2 + 1;
        D.30921 = *D.30920;
        D.30922 = (int) D.30921;
        __result = D.30579 - D.30922;
        D.30923 = __s2_len > 1;
        D.30916 = __result == 0;
        D.30924 = D.30923 & D.30916;
        if (D.30924 != 0) goto <D.30925>; else goto <D.30926>;
        <D.30925>:
        D.30587 = &MEM[(void *)"System" + 2B];
        D.30588 = *D.30587;
        D.30589 = (int) D.30588;
        D.30927 = __s2 + 2;
        D.30928 = *D.30927;
        D.30929 = (int) D.30928;
        __result = D.30589 - D.30929;
        D.30930 = __s2_len > 2;
        D.30916 = __result == 0;
        D.30931 = D.30930 & D.30916;
        if (D.30931 != 0) goto <D.30932>; else goto <D.30933>;
        <D.30932>:
        D.30597 = &MEM[(void *)"System" + 3B];
        D.30598 = *D.30597;
        D.30599 = (int) D.30598;
        D.30934 = __s2 + 3;
        D.30935 = *D.30934;
        D.30936 = (int) D.30935;
        __result = D.30599 - D.30936;
        <D.30933>:
        <D.30926>:
        <D.30919>:
      }
      D.22818 = __result;
    }
    iftmp.297 = -D.22818;
    goto <D.30937>;
    <D.30912>:
    D.30861 = class->parent;
    D.30938 = D.30861->name_space;
    iftmp.297 = __builtin_strcmp (D.30938, "System");
    <D.30937>:
    D.22819 = iftmp.297;
  }
  if (D.22819 == 0) goto <D.30859>; else goto <D.30860>;
  <D.30859>:
  class->valuetype = 1;
  <D.30860>:
  D.30861 = class->parent;
  D.30865 = D.30861->image;
  D.30939 = mono_is_corlib_image (D.30865);
  if (D.30939 != 0) goto <D.30940>; else goto <D.30941>;
  <D.30940>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.30943>; else goto <D.30944>;
    <D.30943>:
    {
      const unsigned char * __s2;
      int __result;

      D.30861 = class->parent;
      __s2 = D.30861->name;
      D.30945 = "Enum";
      D.30946 = MEM[(const unsigned char *)D.30945];
      D.30947 = (int) D.30946;
      D.30948 = *__s2;
      D.30949 = (int) D.30948;
      __result = D.30947 - D.30949;
      {
        D.30950 = __s2_len != 0;
        D.30951 = __result == 0;
        D.30952 = D.30950 & D.30951;
        if (D.30952 != 0) goto <D.30953>; else goto <D.30954>;
        <D.30953>:
        D.30955 = &MEM[(void *)"Enum" + 1B];
        D.30956 = *D.30955;
        D.30957 = (int) D.30956;
        D.30958 = __s2 + 1;
        D.30959 = *D.30958;
        D.30960 = (int) D.30959;
        __result = D.30957 - D.30960;
        D.30961 = __s2_len > 1;
        D.30951 = __result == 0;
        D.30962 = D.30961 & D.30951;
        if (D.30962 != 0) goto <D.30963>; else goto <D.30964>;
        <D.30963>:
        D.30965 = &MEM[(void *)"Enum" + 2B];
        D.30966 = *D.30965;
        D.30967 = (int) D.30966;
        D.30968 = __s2 + 2;
        D.30969 = *D.30968;
        D.30970 = (int) D.30969;
        __result = D.30967 - D.30970;
        D.30971 = __s2_len > 2;
        D.30951 = __result == 0;
        D.30972 = D.30971 & D.30951;
        if (D.30972 != 0) goto <D.30973>; else goto <D.30974>;
        <D.30973>:
        D.30975 = &MEM[(void *)"Enum" + 3B];
        D.30976 = *D.30975;
        D.30977 = (int) D.30976;
        D.30978 = __s2 + 3;
        D.30979 = *D.30978;
        D.30980 = (int) D.30979;
        __result = D.30977 - D.30980;
        <D.30974>:
        <D.30964>:
        <D.30954>:
      }
      D.22827 = __result;
    }
    iftmp.298 = -D.22827;
    goto <D.30981>;
    <D.30944>:
    D.30861 = class->parent;
    D.30908 = D.30861->name;
    iftmp.298 = __builtin_strcmp (D.30908, "Enum");
    <D.30981>:
    D.22828 = iftmp.298;
  }
  if (D.22828 == 0) goto <D.30982>; else goto <D.30983>;
  <D.30982>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.30985>; else goto <D.30986>;
    <D.30985>:
    {
      const unsigned char * __s2;
      int __result;

      D.30861 = class->parent;
      __s2 = D.30861->name_space;
      D.30567 = "System";
      D.30568 = MEM[(const unsigned char *)D.30567];
      D.30569 = (int) D.30568;
      D.30987 = *__s2;
      D.30988 = (int) D.30987;
      __result = D.30569 - D.30988;
      {
        D.30989 = __s2_len != 0;
        D.30990 = __result == 0;
        D.30991 = D.30989 & D.30990;
        if (D.30991 != 0) goto <D.30992>; else goto <D.30993>;
        <D.30992>:
        D.30577 = &MEM[(void *)"System" + 1B];
        D.30578 = *D.30577;
        D.30579 = (int) D.30578;
        D.30994 = __s2 + 1;
        D.30995 = *D.30994;
        D.30996 = (int) D.30995;
        __result = D.30579 - D.30996;
        D.30997 = __s2_len > 1;
        D.30990 = __result == 0;
        D.30998 = D.30997 & D.30990;
        if (D.30998 != 0) goto <D.30999>; else goto <D.31000>;
        <D.30999>:
        D.30587 = &MEM[(void *)"System" + 2B];
        D.30588 = *D.30587;
        D.30589 = (int) D.30588;
        D.31001 = __s2 + 2;
        D.31002 = *D.31001;
        D.31003 = (int) D.31002;
        __result = D.30589 - D.31003;
        D.31004 = __s2_len > 2;
        D.30990 = __result == 0;
        D.31005 = D.31004 & D.30990;
        if (D.31005 != 0) goto <D.31006>; else goto <D.31007>;
        <D.31006>:
        D.30597 = &MEM[(void *)"System" + 3B];
        D.30598 = *D.30597;
        D.30599 = (int) D.30598;
        D.31008 = __s2 + 3;
        D.31009 = *D.31008;
        D.31010 = (int) D.31009;
        __result = D.30599 - D.31010;
        <D.31007>:
        <D.31000>:
        <D.30993>:
      }
      D.22836 = __result;
    }
    iftmp.299 = -D.22836;
    goto <D.31011>;
    <D.30986>:
    D.30861 = class->parent;
    D.30938 = D.30861->name_space;
    iftmp.299 = __builtin_strcmp (D.30938, "System");
    <D.31011>:
    D.22837 = iftmp.299;
  }
  if (D.22837 == 0) goto <D.31012>; else goto <D.31013>;
  <D.31012>:
  class->enumtype = 1;
  D.31014 = class->enumtype;
  class->valuetype = D.31014;
  <D.31013>:
  <D.30983>:
  <D.30941>:
  goto <D.30695>;
  <D.30694>:
  D.30696 = class->flags;
  D.30702 = D.30696 & 4096;
  if (D.30702 != 0) goto <D.31015>; else goto <D.31016>;
  <D.31015>:
  init_com_from_comimport (class);
  <D.31016>:
  class->parent = 0B;
  <D.30695>:
}


init_com_from_comimport (struct MonoClass * class)
{
  <unnamed type> D.31018;
  struct MonoImage * D.31021;
  int D.31022;

  D.31018 = mono_security_get_mode ();
  if (D.31018 == 1) goto <D.31019>; else goto <D.31020>;
  <D.31019>:
  D.31021 = class->image;
  D.31022 = mono_security_core_clr_determine_platform_image (D.31021);
  if (D.31022 == 0) goto <D.31023>; else goto <D.31024>;
  <D.31023>:
  mono_class_set_failure (class, 7, 0B);
  return;
  <D.31024>:
  <D.31020>:
}


mono_class_setup_supertypes (struct MonoClass * class)
{
  struct MonoClass * D.31028;
  struct MonoClass * * D.31031;
  short unsigned int D.31036;
  short unsigned int D.31037;
  int iftmp.300;
  short unsigned int D.31040;
  unsigned int ms.301;
  unsigned int D.31045;
  int D.31046;
  sizetype D.31049;
  sizetype D.31050;
  sizetype D.31051;
  struct MonoClass * * D.31052;
  unsigned int D.31053;
  unsigned int D.31054;
  int ms;
  struct MonoClass * * supertypes;

  {
    void * __tmp;

    __tmp = class->supertypes;
    mono_memory_barrier ();
    supertypes = __tmp;
  }
  if (supertypes != 0B) goto <D.31026>; else goto <D.31027>;
  <D.31026>:
  return;
  <D.31027>:
  D.31028 = class->parent;
  if (D.31028 != 0B) goto <D.31029>; else goto <D.31030>;
  <D.31029>:
  D.31028 = class->parent;
  D.31031 = D.31028->supertypes;
  if (D.31031 == 0B) goto <D.31032>; else goto <D.31033>;
  <D.31032>:
  D.31028 = class->parent;
  mono_class_setup_supertypes (D.31028);
  <D.31033>:
  <D.31030>:
  D.31028 = class->parent;
  if (D.31028 != 0B) goto <D.31034>; else goto <D.31035>;
  <D.31034>:
  D.31028 = class->parent;
  D.31036 = D.31028->idepth;
  D.31037 = D.31036 + 1;
  class->idepth = D.31037;
  goto <D.31038>;
  <D.31035>:
  class->idepth = 1;
  <D.31038>:
  D.31040 = class->idepth;
  if (D.31040 > 5) goto <D.31041>; else goto <D.31042>;
  <D.31041>:
  D.31040 = class->idepth;
  iftmp.300 = (int) D.31040;
  goto <D.31043>;
  <D.31042>:
  iftmp.300 = 6;
  <D.31043>:
  ms = iftmp.300;
  ms.301 = (unsigned int) ms;
  D.31045 = ms.301 * 4;
  D.31046 = (int) D.31045;
  supertypes = mono_class_alloc0 (class, D.31046);
  D.31028 = class->parent;
  if (D.31028 != 0B) goto <D.31047>; else goto <D.31048>;
  <D.31047>:
  D.31040 = class->idepth;
  D.31049 = (sizetype) D.31040;
  D.31050 = D.31049 + 1073741823;
  D.31051 = D.31050 * 4;
  D.31052 = supertypes + D.31051;
  *D.31052 = class;
  D.31028 = class->parent;
  D.31031 = D.31028->supertypes;
  D.31028 = class->parent;
  D.31036 = D.31028->idepth;
  D.31053 = (unsigned int) D.31036;
  D.31054 = D.31053 * 4;
  memcpy (supertypes, D.31031, D.31054);
  goto <D.31055>;
  <D.31048>:
  *supertypes = class;
  <D.31055>:
  mono_memory_barrier ();
  class->supertypes = supertypes;
}


mono_class_is_nullable (struct MonoClass * klass)
{
  gboolean D.31057;
  int iftmp.302;
  struct MonoGenericClass * D.31061;
  struct MonoClass * D.31063;
  struct MonoClass * D.31064;

  D.31061 = klass->generic_class;
  if (D.31061 != 0B) goto <D.31062>; else goto <D.31059>;
  <D.31062>:
  D.31061 = klass->generic_class;
  D.31063 = D.31061->container_class;
  D.31064 = mono_defaults.generic_nullable_class;
  if (D.31063 == D.31064) goto <D.31065>; else goto <D.31059>;
  <D.31065>:
  iftmp.302 = 1;
  goto <D.31060>;
  <D.31059>:
  iftmp.302 = 0;
  <D.31060>:
  D.31057 = iftmp.302;
  return D.31057;
}


mono_class_get_nullable_param (struct MonoClass * klass)
{
  int D.31067;
  _Bool D.31068;
  long int D.31069;
  long int D.31070;
  struct MonoClass * D.31073;
  struct MonoGenericClass * D.31074;
  struct MonoGenericInst * D.31075;
  struct MonoType * D.31076;

  D.31067 = mono_class_is_nullable (klass);
  D.31068 = D.31067 == 0;
  D.31069 = (long int) D.31068;
  D.31070 = __builtin_expect (D.31069, 0);
  if (D.31070 != 0) goto <D.31071>; else goto <D.31072>;
  <D.31071>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5807, "mono_class_is_nullable (klass)");
  <D.31072>:
  D.31074 = klass->generic_class;
  D.31075 = D.31074->context.class_inst;
  D.31076 = D.31075->type_argv[0];
  D.31073 = mono_class_from_mono_type (D.31076);
  return D.31073;
}


mono_generic_class_get_class (struct MonoGenericClass * gclass)
{
  struct MonoClass * D.31078;
  struct MonoClass * D.31081;
  struct MonoImageSet * D.31084;
  int record_gclass_instantiation.303;
  struct GSList * gclass_recorded_list.304;
  struct GSList * gclass_recorded_list.305;
  struct MonoClass * D.31090;
  const char * D.31093;
  const char * D.31094;
  struct MonoImage * D.31095;
  unsigned int D.31096;
  unsigned int D.31097;
  unsigned int D.31098;
  unsigned char D.31099;
  struct MonoGenericClass * D.31100;
  <unnamed-unsigned:1> D.31101;
  <unnamed-unsigned:1> D.31102;
  struct MonoClass * D.31103;
  int D.31104;
  struct MonoClass * D.31107;
  unsigned char D.31108;
  unsigned char D.31109;
  unsigned char D.31112;
  unsigned char D.31113;
  int D.31116;
  int D.31117;
  unsigned int inflated_classes.306;
  unsigned int inflated_classes.307;
  unsigned int inflated_classes_size.308;
  unsigned int inflated_classes_size.309;
  struct MonoClass * klass;
  struct MonoClass * gklass;

  D.31078 = gclass->cached_class;
  if (D.31078 != 0B) goto <D.31079>; else goto <D.31080>;
  <D.31079>:
  D.31081 = gclass->cached_class;
  return D.31081;
  <D.31080>:
  mono_loader_lock ();
  D.31078 = gclass->cached_class;
  if (D.31078 != 0B) goto <D.31082>; else goto <D.31083>;
  <D.31082>:
  mono_loader_unlock ();
  D.31081 = gclass->cached_class;
  return D.31081;
  <D.31083>:
  D.31084 = gclass->owner;
  klass = mono_image_set_alloc0 (D.31084, 164);
  gklass = gclass->container_class;
  record_gclass_instantiation.303 = record_gclass_instantiation;
  if (record_gclass_instantiation.303 > 0) goto <D.31086>; else goto <D.31087>;
  <D.31086>:
  gclass_recorded_list.304 = gclass_recorded_list;
  gclass_recorded_list.305 = monoeg_g_slist_append (gclass_recorded_list.304, klass);
  gclass_recorded_list = gclass_recorded_list.305;
  <D.31087>:
  D.31090 = gklass->nested_in;
  if (D.31090 != 0B) goto <D.31091>; else goto <D.31092>;
  <D.31091>:
  D.31090 = gklass->nested_in;
  klass->nested_in = D.31090;
  <D.31092>:
  D.31093 = gklass->name;
  klass->name = D.31093;
  D.31094 = gklass->name_space;
  klass->name_space = D.31094;
  mono_profiler_class_event (klass, 0);
  D.31095 = gklass->image;
  klass->image = D.31095;
  D.31096 = gklass->flags;
  klass->flags = D.31096;
  D.31097 = gklass->type_token;
  klass->type_token = D.31097;
  D.31098 = gklass->field.count;
  klass->field.count = D.31098;
  klass->is_inflated = 1;
  klass->generic_class = gclass;
  klass->byval_arg.type = 21;
  D.31099 = klass->byval_arg.type;
  klass->this_arg.type = D.31099;
  klass->byval_arg.data.generic_class = gclass;
  D.31100 = klass->byval_arg.data.generic_class;
  klass->this_arg.data.generic_class = D.31100;
  klass->this_arg.byref = 1;
  D.31101 = gklass->enumtype;
  klass->enumtype = D.31101;
  D.31102 = gklass->valuetype;
  klass->valuetype = D.31102;
  klass->element_class = klass;
  D.31103 = klass->element_class;
  klass->cast_class = D.31103;
  D.31104 = mono_class_is_nullable (klass);
  if (D.31104 != 0) goto <D.31105>; else goto <D.31106>;
  <D.31105>:
  D.31107 = mono_class_get_nullable_param (klass);
  klass->element_class = D.31107;
  D.31103 = klass->element_class;
  klass->cast_class = D.31103;
  <D.31106>:
  mono_generic_class_setup_parent (klass, gklass);
  D.31108 = BIT_FIELD_REF <*gclass, 8, 96>;
  D.31109 = D.31108 & 1;
  if (D.31109 != 0) goto <D.31110>; else goto <D.31111>;
  <D.31110>:
  klass->inited = 1;
  mono_class_setup_supertypes (klass);
  D.31112 = BIT_FIELD_REF <*klass, 8, 160>;
  D.31113 = D.31112 & 16;
  if (D.31113 != 0) goto <D.31114>; else goto <D.31115>;
  <D.31114>:
  D.31116 = gklass->instance_size;
  klass->instance_size = D.31116;
  D.31117 = gklass->sizes.class_size;
  klass->sizes.class_size = D.31117;
  mono_memory_barrier ();
  klass->size_inited = 1;
  <D.31115>:
  <D.31111>:
  mono_memory_barrier ();
  gclass->cached_class = klass;
  mono_profiler_class_loaded (klass, 0);
  inflated_classes.306 = inflated_classes;
  inflated_classes.307 = inflated_classes.306 + 1;
  inflated_classes = inflated_classes.307;
  inflated_classes_size.308 = inflated_classes_size;
  inflated_classes_size.309 = inflated_classes_size.308 + 164;
  inflated_classes_size = inflated_classes_size.309;
  mono_loader_unlock ();
  D.31081 = klass;
  return D.31081;
}


mono_class_from_generic_parameter (struct MonoGenericParam * param, struct MonoImage * image, gboolean is_mvar)
{
  struct MonoGenericParamInfo * iftmp.310;
  struct MonoGenericContainer * D.31126;
  struct MonoClass * D.31130;
  struct MonoClass * D.31133;
  _Bool D.31137;
  _Bool D.31138;
  _Bool D.31139;
  struct MonoImage * iftmp.311;
  struct MonoClass * D.31148;
  struct MonoImage * iftmp.312;
  struct MonoGenericContainer * container;
  struct MonoGenericParamInfo * pinfo;
  struct MonoClass * klass;

  container = param->owner;
  mono_loader_lock ();
  if (container != 0B) goto <D.31123>; else goto <D.31124>;
  <D.31123>:
  D.31126 = param->owner;
  if (D.31126 != 0B) goto <D.31127>; else goto <D.31128>;
  <D.31127>:
  iftmp.310 = &MEM[(struct MonoGenericParamFull *)param].info;
  goto <D.31129>;
  <D.31128>:
  iftmp.310 = 0B;
  <D.31129>:
  pinfo = iftmp.310;
  D.31130 = pinfo->pklass;
  if (D.31130 != 0B) goto <D.31131>; else goto <D.31132>;
  <D.31131>:
  mono_loader_unlock ();
  D.31133 = pinfo->pklass;
  return D.31133;
  <D.31132>:
  goto <D.31134>;
  <D.31124>:
  pinfo = 0B;
  image = 0B;
  klass = get_anon_gparam_class (param, is_mvar);
  if (klass != 0B) goto <D.31135>; else goto <D.31136>;
  <D.31135>:
  mono_loader_unlock ();
  D.31133 = klass;
  return D.31133;
  <D.31136>:
  <D.31134>:
  D.31137 = image == 0B;
  D.31138 = container != 0B;
  D.31139 = D.31137 & D.31138;
  if (D.31139 != 0) goto <D.31140>; else goto <D.31141>;
  <D.31140>:
  if (is_mvar != 0) goto <D.31142>; else goto <D.31143>;
  <D.31142>:
  {
    struct MonoMethod * method;

    method = container->owner.method;
    if (method != 0B) goto <D.31147>; else goto <D.31145>;
    <D.31147>:
    D.31148 = method->klass;
    if (D.31148 != 0B) goto <D.31149>; else goto <D.31145>;
    <D.31149>:
    D.31148 = method->klass;
    iftmp.311 = D.31148->image;
    goto <D.31146>;
    <D.31145>:
    iftmp.311 = 0B;
    <D.31146>:
    image = iftmp.311;
  }
  goto <D.31150>;
  <D.31143>:
  {
    struct MonoClass * klass;

    klass = container->owner.klass;
    if (klass != 0B) goto <D.31152>; else goto <D.31153>;
    <D.31152>:
    iftmp.312 = klass->image;
    goto <D.31154>;
    <D.31153>:
    iftmp.312 = 0B;
    <D.31154>:
    image = iftmp.312;
  }
  <D.31150>:
  <D.31141>:
  klass = make_generic_param_class (param, image, is_mvar, pinfo);
  mono_memory_barrier ();
  if (container != 0B) goto <D.31155>; else goto <D.31156>;
  <D.31155>:
  pinfo->pklass = klass;
  goto <D.31157>;
  <D.31156>:
  set_anon_gparam_class (param, is_mvar, klass);
  <D.31157>:
  mono_loader_unlock ();
  mono_profiler_class_loaded (klass, 0);
  D.31133 = klass;
  return D.31133;
}


get_anon_gparam_class (struct MonoGenericParam * param, gboolean is_mvar)
{
  short unsigned int D.31159;
  unsigned int D.31160;
  short unsigned int D.31161;
  unsigned int D.31162;
  unsigned int D.31163;
  unsigned int D.31164;
  _Bool D.31165;
  long int D.31166;
  long int D.31167;
  struct MonoClass * D.31174;
  struct MonoClass * iftmp.313;
  struct MonoClass * * D.31176;
  unsigned int n.314;
  unsigned int D.31180;
  struct MonoClass * * D.31181;
  struct MonoClass * iftmp.315;
  struct MonoClass * * D.31184;
  struct MonoClass * * D.31187;
  struct GHashTable * iftmp.316;
  struct MonoClass * iftmp.317;
  const void * n.318;
  int n;
  struct MonoImage * image;
  struct GHashTable * ht;

  D.31159 = param->num;
  D.31160 = (unsigned int) D.31159;
  D.31161 = param->serial;
  D.31162 = (unsigned int) D.31161;
  D.31163 = D.31162 << 16;
  D.31164 = D.31160 | D.31163;
  n = (int) D.31164;
  image = param->image;
  D.31165 = image == 0B;
  D.31166 = (long int) D.31165;
  D.31167 = __builtin_expect (D.31166, 0);
  if (D.31167 != 0) goto <D.31168>; else goto <D.31169>;
  <D.31168>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6028, "image");
  <D.31169>:
  if (n <= 15) goto <D.31170>; else goto <D.31171>;
  <D.31170>:
  if (is_mvar != 0) goto <D.31172>; else goto <D.31173>;
  <D.31172>:
  D.31176 = image->mvar_cache_fast;
  if (D.31176 != 0B) goto <D.31177>; else goto <D.31178>;
  <D.31177>:
  D.31176 = image->mvar_cache_fast;
  n.314 = (unsigned int) n;
  D.31180 = n.314 * 4;
  D.31181 = D.31176 + D.31180;
  iftmp.313 = *D.31181;
  goto <D.31182>;
  <D.31178>:
  iftmp.313 = 0B;
  <D.31182>:
  D.31174 = iftmp.313;
  return D.31174;
  <D.31173>:
  D.31184 = image->var_cache_fast;
  if (D.31184 != 0B) goto <D.31185>; else goto <D.31186>;
  <D.31185>:
  D.31184 = image->var_cache_fast;
  n.314 = (unsigned int) n;
  D.31180 = n.314 * 4;
  D.31187 = D.31184 + D.31180;
  iftmp.315 = *D.31187;
  goto <D.31188>;
  <D.31186>:
  iftmp.315 = 0B;
  <D.31188>:
  D.31174 = iftmp.315;
  return D.31174;
  <D.31171>:
  if (is_mvar != 0) goto <D.31190>; else goto <D.31191>;
  <D.31190>:
  iftmp.316 = image->mvar_cache_slow;
  goto <D.31192>;
  <D.31191>:
  iftmp.316 = image->var_cache_slow;
  <D.31192>:
  ht = iftmp.316;
  if (ht != 0B) goto <D.31194>; else goto <D.31195>;
  <D.31194>:
  n.318 = (const void *) n;
  iftmp.317 = monoeg_g_hash_table_lookup (ht, n.318);
  goto <D.31197>;
  <D.31195>:
  iftmp.317 = 0B;
  <D.31197>:
  D.31174 = iftmp.317;
  return D.31174;
}


make_generic_param_class (struct MonoGenericParam * param, struct MonoImage * image, gboolean is_mvar, struct MonoGenericParamInfo * pinfo)
{
  unsigned int classes_size.319;
  unsigned int classes_size.320;
  const char * D.31205;
  short unsigned int D.31207;
  void * D.31208;
  const char * D.31209;
  const char * iftmp.321;
  struct MonoClass * D.31218;
  const char * iftmp.322;
  struct MonoClass * D.31229;
  struct MonoClass * * D.31233;
  struct MonoClass * D.31234;
  unsigned int D.31235;
  unsigned int D.31236;
  unsigned char D.31238;
  short unsigned int D.31244;
  int D.31245;
  int D.31246;
  struct MonoImage * D.31248;
  struct MonoClass * D.31249;
  struct MonoClass * D.31250;
  int D.31251;
  short unsigned int D.31254;
  short unsigned int D.31255;
  short unsigned int D.31256;
  unsigned int D.31257;
  unsigned int D.31258;
  void * D.31259;
  struct MonoClass * * D.31260;
  int D.31261;
  unsigned int D.31262;
  unsigned int D.31263;
  struct MonoClass * * D.31264;
  unsigned int i.323;
  unsigned int D.31266;
  struct MonoClass * * D.31267;
  struct MonoClass * D.31268;
  struct MonoClass * D.31269;
  unsigned char iftmp.324;
  unsigned char D.31274;
  struct MonoGenericParam * D.31275;
  int iftmp.325;
  unsigned int D.31279;
  struct MonoClass * D.31283;
  unsigned char D.31284;
  gchar * D.31287;
  int D.31289;
  struct MonoClass * D.31290;
  struct MonoClass * klass;
  struct MonoClass * * ptr;
  int count;
  int pos;
  int i;
  struct MonoGenericContainer * container;

  container = param->owner;
  if (image == 0B) goto <D.31199>; else goto <D.31200>;
  <D.31199>:
  image = mono_defaults.corlib;
  <D.31200>:
  klass = mono_image_alloc0 (image, 164);
  classes_size.319 = classes_size;
  classes_size.320 = classes_size.319 + 164;
  classes_size = classes_size.320;
  if (pinfo != 0B) goto <D.31203>; else goto <D.31204>;
  <D.31203>:
  D.31205 = pinfo->name;
  klass->name = D.31205;
  goto <D.31206>;
  <D.31204>:
  {
    int n;

    D.31207 = param->num;
    n = (int) D.31207;
    D.31208 = mono_image_alloc0 (image, 16);
    klass->name = D.31208;
    D.31209 = klass->name;
    sprintf (D.31209, "%d", n);
  }
  <D.31206>:
  if (container != 0B) goto <D.31210>; else goto <D.31211>;
  <D.31210>:
  if (is_mvar != 0) goto <D.31212>; else goto <D.31213>;
  <D.31212>:
  {
    struct MonoMethod * omethod;

    omethod = container->owner.method;
    if (omethod != 0B) goto <D.31217>; else goto <D.31215>;
    <D.31217>:
    D.31218 = omethod->klass;
    if (D.31218 != 0B) goto <D.31219>; else goto <D.31215>;
    <D.31219>:
    D.31218 = omethod->klass;
    iftmp.321 = D.31218->name_space;
    goto <D.31216>;
    <D.31215>:
    iftmp.321 = "";
    <D.31216>:
    klass->name_space = iftmp.321;
  }
  goto <D.31220>;
  <D.31213>:
  {
    struct MonoClass * oklass;

    oklass = container->owner.klass;
    if (oklass != 0B) goto <D.31222>; else goto <D.31223>;
    <D.31222>:
    iftmp.322 = oklass->name_space;
    goto <D.31224>;
    <D.31223>:
    iftmp.322 = "";
    <D.31224>:
    klass->name_space = iftmp.322;
  }
  <D.31220>:
  goto <D.31225>;
  <D.31211>:
  klass->name_space = "";
  <D.31225>:
  mono_profiler_class_event (klass, 0);
  count = 0;
  if (pinfo != 0B) goto <D.31226>; else goto <D.31227>;
  <D.31226>:
  ptr = pinfo->constraints;
  goto <D.23054>;
  <D.23053>:
  ptr = ptr + 4;
  count = count + 1;
  <D.23054>:
  if (ptr != 0B) goto <D.31228>; else goto <D.23055>;
  <D.31228>:
  D.31229 = *ptr;
  if (D.31229 != 0B) goto <D.23053>; else goto <D.23055>;
  <D.23055>:
  <D.31227>:
  pos = 0;
  if (count > 0) goto <D.31232>; else goto <D.31230>;
  <D.31232>:
  D.31233 = pinfo->constraints;
  D.31234 = *D.31233;
  D.31235 = D.31234->flags;
  D.31236 = D.31235 & 32;
  if (D.31236 == 0) goto <D.31237>; else goto <D.31230>;
  <D.31237>:
  D.31233 = pinfo->constraints;
  D.31234 = *D.31233;
  D.31238 = D.31234->byval_arg.type;
  if (D.31238 != 19) goto <D.31239>; else goto <D.31230>;
  <D.31239>:
  D.31233 = pinfo->constraints;
  D.31234 = *D.31233;
  D.31238 = D.31234->byval_arg.type;
  if (D.31238 != 30) goto <D.31240>; else goto <D.31230>;
  <D.31240>:
  D.31233 = pinfo->constraints;
  D.31234 = *D.31233;
  klass->parent = D.31234;
  pos = pos + 1;
  goto <D.31231>;
  <D.31230>:
  if (pinfo != 0B) goto <D.31243>; else goto <D.31241>;
  <D.31243>:
  D.31244 = pinfo->flags;
  D.31245 = (int) D.31244;
  D.31246 = D.31245 & 8;
  if (D.31246 != 0) goto <D.31247>; else goto <D.31241>;
  <D.31247>:
  D.31248 = mono_defaults.corlib;
  D.31249 = mono_class_from_name (D.31248, "System", "ValueType");
  klass->parent = D.31249;
  goto <D.31242>;
  <D.31241>:
  D.31250 = mono_defaults.object_class;
  klass->parent = D.31250;
  <D.31242>:
  <D.31231>:
  D.31251 = count - pos;
  if (D.31251 > 0) goto <D.31252>; else goto <D.31253>;
  <D.31252>:
  D.31254 = (short unsigned int) count;
  D.31255 = (short unsigned int) pos;
  D.31256 = D.31254 - D.31255;
  klass->interface_count = D.31256;
  D.31251 = count - pos;
  D.31257 = (unsigned int) D.31251;
  D.31258 = D.31257 * 4;
  D.31259 = mono_image_alloc0 (image, D.31258);
  klass->interfaces = D.31259;
  klass->interfaces_inited = 1;
  i = pos;
  goto <D.23057>;
  <D.23056>:
  D.31260 = klass->interfaces;
  D.31261 = i - pos;
  D.31262 = (unsigned int) D.31261;
  D.31263 = D.31262 * 4;
  D.31264 = D.31260 + D.31263;
  D.31233 = pinfo->constraints;
  i.323 = (unsigned int) i;
  D.31266 = i.323 * 4;
  D.31267 = D.31233 + D.31266;
  D.31268 = *D.31267;
  *D.31264 = D.31268;
  i = i + 1;
  <D.23057>:
  if (i < count) goto <D.23056>; else goto <D.23058>;
  <D.23058>:
  <D.31253>:
  klass->image = image;
  klass->inited = 1;
  klass->element_class = klass;
  D.31269 = klass->element_class;
  klass->cast_class = D.31269;
  klass->flags = 1;
  if (is_mvar != 0) goto <D.31271>; else goto <D.31272>;
  <D.31271>:
  iftmp.324 = 30;
  goto <D.31273>;
  <D.31272>:
  iftmp.324 = 19;
  <D.31273>:
  klass->byval_arg.type = iftmp.324;
  D.31274 = klass->byval_arg.type;
  klass->this_arg.type = D.31274;
  klass->byval_arg.data.generic_param = param;
  D.31275 = klass->byval_arg.data.generic_param;
  klass->this_arg.data.generic_param = D.31275;
  klass->this_arg.byref = 1;
  if (pinfo != 0B) goto <D.31277>; else goto <D.31278>;
  <D.31277>:
  D.31279 = pinfo->token;
  iftmp.325 = (int) D.31279;
  goto <D.31280>;
  <D.31278>:
  iftmp.325 = 0;
  <D.31280>:
  klass->sizes.generic_param_token = iftmp.325;
  klass->min_align = 1;
  klass->instance_size = 4;
  mono_memory_barrier ();
  klass->size_inited = 1;
  mono_class_setup_supertypes (klass);
  D.31251 = count - pos;
  if (D.31251 > 0) goto <D.31281>; else goto <D.31282>;
  <D.31281>:
  D.31283 = klass->parent;
  mono_class_setup_vtable (D.31283);
  D.31283 = klass->parent;
  D.31284 = D.31283->exception_type;
  if (D.31284 != 0) goto <D.31285>; else goto <D.31286>;
  <D.31285>:
  D.31287 = monoeg_strdup ("Failed to setup parent interfaces");
  mono_class_set_failure (klass, 7, D.31287);
  goto <D.31288>;
  <D.31286>:
  D.31283 = klass->parent;
  D.31289 = D.31283->vtable_size;
  setup_interface_offsets (klass, D.31289, 1);
  <D.31288>:
  <D.31282>:
  D.31290 = klass;
  return D.31290;
}


sprintf (char * restrict __s, const char * restrict __fmt)
{
  int D.31292;
  unsigned int D.31293;

  D.31293 = __builtin_object_size (__s, 1);
  D.31292 = __builtin___sprintf_chk (__s, 1, D.31293, __fmt, __builtin_va_arg_pack ());
  return D.31292;
}


set_anon_gparam_class (struct MonoGenericParam * param, gboolean is_mvar, struct MonoClass * klass)
{
  short unsigned int D.31295;
  unsigned int D.31296;
  short unsigned int D.31297;
  unsigned int D.31298;
  unsigned int D.31299;
  unsigned int D.31300;
  _Bool D.31301;
  long int D.31302;
  long int D.31303;
  struct MonoClass * * D.31310;
  void * D.31313;
  unsigned int n.326;
  unsigned int D.31315;
  struct MonoClass * * D.31316;
  struct MonoClass * * D.31318;
  void * D.31321;
  struct MonoClass * * D.31322;
  struct GHashTable * iftmp.327;
  struct GHashTable * iftmp.328;
  void * n.329;
  int n;
  struct MonoImage * image;
  struct GHashTable * ht;

  D.31295 = param->num;
  D.31296 = (unsigned int) D.31295;
  D.31297 = param->serial;
  D.31298 = (unsigned int) D.31297;
  D.31299 = D.31298 << 16;
  D.31300 = D.31296 | D.31299;
  n = (int) D.31300;
  image = param->image;
  D.31301 = image == 0B;
  D.31302 = (long int) D.31301;
  D.31303 = __builtin_expect (D.31302, 0);
  if (D.31303 != 0) goto <D.31304>; else goto <D.31305>;
  <D.31304>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6051, "image");
  <D.31305>:
  if (n <= 15) goto <D.31306>; else goto <D.31307>;
  <D.31306>:
  if (is_mvar != 0) goto <D.31308>; else goto <D.31309>;
  <D.31308>:
  D.31310 = image->mvar_cache_fast;
  if (D.31310 == 0B) goto <D.31311>; else goto <D.31312>;
  <D.31311>:
  D.31313 = mono_image_alloc0 (image, 64);
  image->mvar_cache_fast = D.31313;
  <D.31312>:
  D.31310 = image->mvar_cache_fast;
  n.326 = (unsigned int) n;
  D.31315 = n.326 * 4;
  D.31316 = D.31310 + D.31315;
  *D.31316 = klass;
  goto <D.31317>;
  <D.31309>:
  D.31318 = image->var_cache_fast;
  if (D.31318 == 0B) goto <D.31319>; else goto <D.31320>;
  <D.31319>:
  D.31321 = mono_image_alloc0 (image, 64);
  image->var_cache_fast = D.31321;
  <D.31320>:
  D.31318 = image->var_cache_fast;
  n.326 = (unsigned int) n;
  D.31315 = n.326 * 4;
  D.31322 = D.31318 + D.31315;
  *D.31322 = klass;
  <D.31317>:
  return;
  <D.31307>:
  if (is_mvar != 0) goto <D.31324>; else goto <D.31325>;
  <D.31324>:
  iftmp.327 = image->mvar_cache_slow;
  goto <D.31326>;
  <D.31325>:
  iftmp.327 = image->var_cache_slow;
  <D.31326>:
  ht = iftmp.327;
  if (ht == 0B) goto <D.31327>; else goto <D.31328>;
  <D.31327>:
  mono_loader_lock ();
  if (is_mvar != 0) goto <D.31330>; else goto <D.31331>;
  <D.31330>:
  iftmp.328 = image->mvar_cache_slow;
  goto <D.31332>;
  <D.31331>:
  iftmp.328 = image->var_cache_slow;
  <D.31332>:
  ht = iftmp.328;
  if (ht == 0B) goto <D.31333>; else goto <D.31334>;
  <D.31333>:
  ht = monoeg_g_hash_table_new (0B, 0B);
  mono_memory_barrier ();
  if (is_mvar != 0) goto <D.31335>; else goto <D.31336>;
  <D.31335>:
  image->mvar_cache_slow = ht;
  goto <D.31337>;
  <D.31336>:
  image->var_cache_slow = ht;
  <D.31337>:
  <D.31334>:
  mono_loader_unlock ();
  <D.31328>:
  n.329 = (void *) n;
  monoeg_g_hash_table_insert_replace (ht, n.329, klass, 0);
}


mono_ptr_class_get (struct MonoType * type)
{
  struct GHashTable * D.31340;
  struct GHashTable * D.31343;
  struct MonoClass * D.31346;
  unsigned int classes_size.330;
  unsigned int classes_size.331;
  const char * D.31349;
  const char * D.31350;
  char * D.31351;
  struct MonoImage * D.31352;
  unsigned int D.31353;
  unsigned int D.31354;
  struct MonoClass * D.31355;
  unsigned char D.31356;
  struct MonoType * D.31357;
  struct MonoType * D.31358;
  struct MonoClass * result;
  struct MonoClass * el_class;
  struct MonoImage * image;
  char * name;

  el_class = mono_class_from_mono_type (type);
  image = el_class->image;
  mono_loader_lock ();
  D.31340 = image->ptr_cache;
  if (D.31340 == 0B) goto <D.31341>; else goto <D.31342>;
  <D.31341>:
  D.31343 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->ptr_cache = D.31343;
  <D.31342>:
  D.31340 = image->ptr_cache;
  result = monoeg_g_hash_table_lookup (D.31340, el_class);
  if (result != 0B) goto <D.31344>; else goto <D.31345>;
  <D.31344>:
  mono_loader_unlock ();
  D.31346 = result;
  return D.31346;
  <D.31345>:
  result = mono_image_alloc0 (image, 164);
  classes_size.330 = classes_size;
  classes_size.331 = classes_size.330 + 164;
  classes_size = classes_size.331;
  result->parent = 0B;
  D.31349 = el_class->name_space;
  result->name_space = D.31349;
  D.31350 = el_class->name;
  name = monoeg_g_strdup_printf ("%s*", D.31350);
  D.31351 = mono_image_strdup (image, name);
  result->name = D.31351;
  monoeg_g_free (name);
  mono_profiler_class_event (result, 0);
  D.31352 = el_class->image;
  result->image = D.31352;
  result->inited = 1;
  D.31353 = el_class->flags;
  D.31354 = D.31353 & 7;
  result->flags = D.31354;
  result->instance_size = 4;
  result->element_class = el_class;
  D.31355 = result->element_class;
  result->cast_class = D.31355;
  result->blittable = 1;
  result->byval_arg.type = 15;
  D.31356 = result->byval_arg.type;
  result->this_arg.type = D.31356;
  D.31355 = result->element_class;
  D.31357 = &D.31355->byval_arg;
  result->byval_arg.data.type = D.31357;
  D.31358 = result->byval_arg.data.type;
  result->this_arg.data.type = D.31358;
  result->this_arg.byref = 1;
  mono_class_setup_supertypes (result);
  D.31340 = image->ptr_cache;
  monoeg_g_hash_table_insert_replace (D.31340, el_class, result, 0);
  mono_loader_unlock ();
  mono_profiler_class_loaded (result, 0);
  D.31346 = result;
  return D.31346;
}


mono_class_from_mono_type (struct MonoType * type)
{
  unsigned char D.31360;
  int D.31361;
  struct MonoClass * D.31362;
  struct MonoClass * iftmp.332;
  struct MonoClass * D.31364;
  struct MonoClass * iftmp.333;
  struct MonoClass * iftmp.334;
  struct MonoClass * iftmp.335;
  struct MonoClass * iftmp.336;
  struct MonoClass * iftmp.337;
  struct MonoClass * iftmp.338;
  struct MonoClass * iftmp.339;
  struct MonoClass * iftmp.340;
  struct MonoClass * iftmp.341;
  struct MonoClass * iftmp.342;
  struct MonoClass * iftmp.343;
  struct MonoClass * iftmp.344;
  struct MonoClass * iftmp.345;
  struct MonoClass * iftmp.346;
  struct MonoClass * iftmp.347;
  struct MonoClass * iftmp.348;
  struct MonoClass * iftmp.349;
  struct MonoArrayType * D.31436;
  struct MonoClass * D.31437;
  unsigned char D.31438;
  unsigned int D.31439;
  struct MonoType * D.31440;
  struct MonoMethodSignature * D.31441;
  struct MonoGenericClass * D.31442;
  struct MonoGenericParam * D.31443;

  D.31360 = type->type;
  D.31361 = (int) D.31360;
  switch (D.31361) <default: <D.23126>, case 1: <D.23100>, case 2: <D.23101>, case 3: <D.23102>, case 4: <D.23103>, case 5: <D.23104>, case 6: <D.23105>, case 7: <D.23106>, case 8: <D.23107>, case 9: <D.23108>, case 10: <D.23111>, case 11: <D.23112>, case 12: <D.23113>, case 13: <D.23114>, case 14: <D.23115>, case 15: <D.23118>, case 17: <D.23122>, case 18: <D.23121>, case 19: <D.23124>, case 20: <D.23117>, case 21: <D.23123>, case 22: <D.23116>, case 24: <D.23109>, case 25: <D.23110>, case 27: <D.23119>, case 28: <D.23099>, case 29: <D.23120>, case 30: <D.23125>>
  <D.23099>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31365>; else goto <D.31366>;
  <D.31365>:
  iftmp.332 = type->data.klass;
  goto <D.31367>;
  <D.31366>:
  iftmp.332 = mono_defaults.object_class;
  <D.31367>:
  D.31362 = iftmp.332;
  return D.31362;
  <D.23100>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31369>; else goto <D.31370>;
  <D.31369>:
  iftmp.333 = type->data.klass;
  goto <D.31371>;
  <D.31370>:
  iftmp.333 = mono_defaults.void_class;
  <D.31371>:
  D.31362 = iftmp.333;
  return D.31362;
  <D.23101>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31373>; else goto <D.31374>;
  <D.31373>:
  iftmp.334 = type->data.klass;
  goto <D.31375>;
  <D.31374>:
  iftmp.334 = mono_defaults.boolean_class;
  <D.31375>:
  D.31362 = iftmp.334;
  return D.31362;
  <D.23102>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31377>; else goto <D.31378>;
  <D.31377>:
  iftmp.335 = type->data.klass;
  goto <D.31379>;
  <D.31378>:
  iftmp.335 = mono_defaults.char_class;
  <D.31379>:
  D.31362 = iftmp.335;
  return D.31362;
  <D.23103>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31381>; else goto <D.31382>;
  <D.31381>:
  iftmp.336 = type->data.klass;
  goto <D.31383>;
  <D.31382>:
  iftmp.336 = mono_defaults.sbyte_class;
  <D.31383>:
  D.31362 = iftmp.336;
  return D.31362;
  <D.23104>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31385>; else goto <D.31386>;
  <D.31385>:
  iftmp.337 = type->data.klass;
  goto <D.31387>;
  <D.31386>:
  iftmp.337 = mono_defaults.byte_class;
  <D.31387>:
  D.31362 = iftmp.337;
  return D.31362;
  <D.23105>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31389>; else goto <D.31390>;
  <D.31389>:
  iftmp.338 = type->data.klass;
  goto <D.31391>;
  <D.31390>:
  iftmp.338 = mono_defaults.int16_class;
  <D.31391>:
  D.31362 = iftmp.338;
  return D.31362;
  <D.23106>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31393>; else goto <D.31394>;
  <D.31393>:
  iftmp.339 = type->data.klass;
  goto <D.31395>;
  <D.31394>:
  iftmp.339 = mono_defaults.uint16_class;
  <D.31395>:
  D.31362 = iftmp.339;
  return D.31362;
  <D.23107>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31397>; else goto <D.31398>;
  <D.31397>:
  iftmp.340 = type->data.klass;
  goto <D.31399>;
  <D.31398>:
  iftmp.340 = mono_defaults.int32_class;
  <D.31399>:
  D.31362 = iftmp.340;
  return D.31362;
  <D.23108>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31401>; else goto <D.31402>;
  <D.31401>:
  iftmp.341 = type->data.klass;
  goto <D.31403>;
  <D.31402>:
  iftmp.341 = mono_defaults.uint32_class;
  <D.31403>:
  D.31362 = iftmp.341;
  return D.31362;
  <D.23109>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31405>; else goto <D.31406>;
  <D.31405>:
  iftmp.342 = type->data.klass;
  goto <D.31407>;
  <D.31406>:
  iftmp.342 = mono_defaults.int_class;
  <D.31407>:
  D.31362 = iftmp.342;
  return D.31362;
  <D.23110>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31409>; else goto <D.31410>;
  <D.31409>:
  iftmp.343 = type->data.klass;
  goto <D.31411>;
  <D.31410>:
  iftmp.343 = mono_defaults.uint_class;
  <D.31411>:
  D.31362 = iftmp.343;
  return D.31362;
  <D.23111>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31413>; else goto <D.31414>;
  <D.31413>:
  iftmp.344 = type->data.klass;
  goto <D.31415>;
  <D.31414>:
  iftmp.344 = mono_defaults.int64_class;
  <D.31415>:
  D.31362 = iftmp.344;
  return D.31362;
  <D.23112>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31417>; else goto <D.31418>;
  <D.31417>:
  iftmp.345 = type->data.klass;
  goto <D.31419>;
  <D.31418>:
  iftmp.345 = mono_defaults.uint64_class;
  <D.31419>:
  D.31362 = iftmp.345;
  return D.31362;
  <D.23113>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31421>; else goto <D.31422>;
  <D.31421>:
  iftmp.346 = type->data.klass;
  goto <D.31423>;
  <D.31422>:
  iftmp.346 = mono_defaults.single_class;
  <D.31423>:
  D.31362 = iftmp.346;
  return D.31362;
  <D.23114>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31425>; else goto <D.31426>;
  <D.31425>:
  iftmp.347 = type->data.klass;
  goto <D.31427>;
  <D.31426>:
  iftmp.347 = mono_defaults.double_class;
  <D.31427>:
  D.31362 = iftmp.347;
  return D.31362;
  <D.23115>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31429>; else goto <D.31430>;
  <D.31429>:
  iftmp.348 = type->data.klass;
  goto <D.31431>;
  <D.31430>:
  iftmp.348 = mono_defaults.string_class;
  <D.31431>:
  D.31362 = iftmp.348;
  return D.31362;
  <D.23116>:
  D.31364 = type->data.klass;
  if (D.31364 != 0B) goto <D.31433>; else goto <D.31434>;
  <D.31433>:
  iftmp.349 = type->data.klass;
  goto <D.31435>;
  <D.31434>:
  iftmp.349 = mono_defaults.typed_reference_class;
  <D.31435>:
  D.31362 = iftmp.349;
  return D.31362;
  <D.23117>:
  D.31436 = type->data.array;
  D.31437 = D.31436->eklass;
  D.31436 = type->data.array;
  D.31438 = D.31436->rank;
  D.31439 = (unsigned int) D.31438;
  D.31362 = mono_bounded_array_class_get (D.31437, D.31439, 1);
  return D.31362;
  <D.23118>:
  D.31440 = type->data.type;
  D.31362 = mono_ptr_class_get (D.31440);
  return D.31362;
  <D.23119>:
  D.31441 = type->data.method;
  D.31362 = mono_fnptr_class_get (D.31441);
  return D.31362;
  <D.23120>:
  D.31364 = type->data.klass;
  D.31362 = mono_array_class_get (D.31364, 1);
  return D.31362;
  <D.23121>:
  <D.23122>:
  D.31362 = type->data.klass;
  return D.31362;
  <D.23123>:
  D.31442 = type->data.generic_class;
  D.31362 = mono_generic_class_get_class (D.31442);
  return D.31362;
  <D.23124>:
  D.31443 = type->data.generic_param;
  D.31362 = mono_class_from_generic_parameter (D.31443, 0B, 0);
  return D.31362;
  <D.23125>:
  D.31443 = type->data.generic_param;
  D.31362 = mono_class_from_generic_parameter (D.31443, 0B, 1);
  return D.31362;
  <D.23126>:
  D.31360 = type->type;
  D.31361 = (int) D.31360;
  monoeg_g_log (0B, 16, "mono_class_from_mono_type: implement me 0x%02x\n", D.31361);
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6305);
  D.31362 = 0B;
  return D.31362;
}


mono_fnptr_class_get (struct MonoMethodSignature * sig)
{
  struct GHashTable * ptr_hash.350;
  struct GHashTable * ptr_hash.351;
  struct MonoClass * D.31451;
  struct MonoImage * D.31452;
  struct MonoClass * D.31453;
  unsigned char D.31454;
  struct MonoMethodSignature * D.31455;
  struct MonoClass * result;
  static struct GHashTable * ptr_hash = 0B;

  mono_loader_lock ();
  ptr_hash.350 = ptr_hash;
  if (ptr_hash.350 == 0B) goto <D.31446>; else goto <D.31447>;
  <D.31446>:
  ptr_hash.351 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  ptr_hash = ptr_hash.351;
  <D.31447>:
  ptr_hash.350 = ptr_hash;
  result = monoeg_g_hash_table_lookup (ptr_hash.350, sig);
  if (result != 0B) goto <D.31449>; else goto <D.31450>;
  <D.31449>:
  mono_loader_unlock ();
  D.31451 = result;
  return D.31451;
  <D.31450>:
  result = monoeg_malloc0 (164);
  result->parent = 0B;
  result->name_space = "System";
  result->name = "MonoFNPtrFakeClass";
  mono_profiler_class_event (result, 0);
  D.31452 = mono_defaults.corlib;
  result->image = D.31452;
  result->inited = 1;
  result->flags = 0;
  result->instance_size = 4;
  result->element_class = result;
  D.31453 = result->element_class;
  result->cast_class = D.31453;
  result->blittable = 1;
  result->byval_arg.type = 27;
  D.31454 = result->byval_arg.type;
  result->this_arg.type = D.31454;
  result->byval_arg.data.method = sig;
  D.31455 = result->byval_arg.data.method;
  result->this_arg.data.method = D.31455;
  result->this_arg.byref = 1;
  result->blittable = 1;
  mono_class_setup_supertypes (result);
  ptr_hash.350 = ptr_hash;
  monoeg_g_hash_table_insert_replace (ptr_hash.350, sig, result, 0);
  mono_loader_unlock ();
  mono_profiler_class_loaded (result, 0);
  D.31451 = result;
  return D.31451;
}


mono_bounded_array_class_get (struct MonoClass * eclass, guint32 rank, gboolean bounded)
{
  _Bool D.31457;
  long int D.31458;
  long int D.31459;
  _Bool D.31464;
  _Bool D.31465;
  _Bool D.31466;
  union mono_mutex_t * D.31469;
  _Bool D.31472;
  long int D.31473;
  long int D.31474;
  struct GHashTable * D.31477;
  struct GHashTable * D.31480;
  _Bool D.31483;
  long int D.31484;
  long int D.31485;
  struct MonoClass * D.31490;
  struct GHashTable * D.31492;
  struct GHashTable * D.31495;
  unsigned char D.31498;
  unsigned int D.31499;
  unsigned char D.31502;
  int D.31503;
  int iftmp.352;
  _Bool D.31505;
  _Bool D.31506;
  _Bool D.31507;
  struct MonoAssembly * D.31515;
  unsigned char D.31517;
  const char * D.31519;
  int D.23173;
  int iftmp.353;
  int D.23172;
  const char[9] * D.31524;
  unsigned char D.31525;
  int D.31526;
  unsigned char D.31527;
  int D.31528;
  _Bool D.31529;
  _Bool D.31530;
  _Bool D.31531;
  const unsigned char * D.31534;
  unsigned char D.31535;
  int D.31536;
  const unsigned char * D.31537;
  unsigned char D.31538;
  int D.31539;
  _Bool D.31540;
  _Bool D.31541;
  const unsigned char * D.31544;
  unsigned char D.31545;
  int D.31546;
  const unsigned char * D.31547;
  unsigned char D.31548;
  int D.31549;
  _Bool D.31550;
  _Bool D.31551;
  const unsigned char * D.31554;
  unsigned char D.31555;
  int D.31556;
  const unsigned char * D.31557;
  unsigned char D.31558;
  int D.31559;
  unsigned char D.31562;
  unsigned char D.31563;
  const char * D.31566;
  const char * D.31567;
  unsigned int D.31568;
  unsigned int nsize.354;
  unsigned int D.31570;
  unsigned int D.31571;
  unsigned int nsize.355;
  sizetype nsize.356;
  char * D.31574;
  sizetype D.31577;
  char * D.31578;
  unsigned int D.31579;
  char * D.31582;
  unsigned int bounded.357;
  unsigned int D.31584;
  char * D.31585;
  sizetype D.31586;
  char * D.31587;
  char * D.31588;
  unsigned int classes_size.358;
  unsigned int classes_size.359;
  struct MonoClass * D.31591;
  int D.31592;
  unsigned char D.31593;
  _Bool D.31594;
  _Bool D.31595;
  _Bool D.31596;
  unsigned char D.31602;
  unsigned char D.31603;
  struct MonoType * D.31605;
  unsigned int D.31609;
  unsigned char D.31611;
  int iftmp.360;
  _Bool D.31617;
  long int D.31618;
  long int D.31619;
  int D.31622;
  struct MonoGenericClass * D.31623;
  unsigned char D.31626;
  unsigned char D.31629;
  int iftmp.361;
  struct MonoType * D.31636;
  int D.31637;
  unsigned char D.31639;
  unsigned char D.31640;
  unsigned char D.31641;
  <unnamed-unsigned:1> D.31642;
  unsigned char D.31643;
  struct MonoClass * D.31646;
  struct MonoClass * D.31648;
  unsigned char D.31649;
  int D.31650;
  struct MonoClass * D.31651;
  struct MonoClass * D.31652;
  struct MonoClass * D.31653;
  struct MonoClass * D.31654;
  unsigned char D.31658;
  struct MonoGenericContainer * D.31662;
  _Bool D.31667;
  long int D.31668;
  long int D.31669;
  _Bool D.31677;
  long int D.31678;
  long int D.31679;
  struct MonoImage * image;
  struct MonoClass * class;
  struct MonoClass * parent;
  struct GSList * list;
  struct GSList * rootlist;
  int nsize;
  char * name;
  gboolean corlib_type;

  parent = 0B;
  rootlist = 0B;
  corlib_type = 0;
  D.31457 = rank > 255;
  D.31458 = (long int) D.31457;
  D.31459 = __builtin_expect (D.31458, 0);
  if (D.31459 != 0) goto <D.31460>; else goto <D.31461>;
  <D.31460>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6386, "rank <= 255");
  <D.31461>:
  if (rank > 1) goto <D.31462>; else goto <D.31463>;
  <D.31462>:
  bounded = 0;
  <D.31463>:
  image = eclass->image;
  D.31464 = rank == 1;
  D.31465 = bounded == 0;
  D.31466 = D.31464 & D.31465;
  if (D.31466 != 0) goto <D.31467>; else goto <D.31468>;
  <D.31467>:
  {
    int ret;

    D.31469 = &image->szarray_cache_lock.mutex;
    ret = pthread_mutex_lock (D.31469);
    if (ret != 0) goto <D.31470>; else goto <D.31471>;
    <D.31470>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.31471>:
    D.31472 = ret != 0;
    D.31473 = (long int) D.31472;
    D.31474 = __builtin_expect (D.31473, 0);
    if (D.31474 != 0) goto <D.31475>; else goto <D.31476>;
    <D.31475>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6400, "ret == 0");
    <D.31476>:
  }
  D.31477 = image->szarray_cache;
  if (D.31477 == 0B) goto <D.31478>; else goto <D.31479>;
  <D.31478>:
  D.31480 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->szarray_cache = D.31480;
  <D.31479>:
  D.31477 = image->szarray_cache;
  class = monoeg_g_hash_table_lookup (D.31477, eclass);
  {
    int ret;

    D.31469 = &image->szarray_cache_lock.mutex;
    ret = pthread_mutex_unlock (D.31469);
    if (ret != 0) goto <D.31481>; else goto <D.31482>;
    <D.31481>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.31482>:
    D.31483 = ret != 0;
    D.31484 = (long int) D.31483;
    D.31485 = __builtin_expect (D.31484, 0);
    if (D.31485 != 0) goto <D.31486>; else goto <D.31487>;
    <D.31486>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6404, "ret == 0");
    <D.31487>:
  }
  if (class != 0B) goto <D.31488>; else goto <D.31489>;
  <D.31488>:
  D.31490 = class;
  return D.31490;
  <D.31489>:
  mono_loader_lock ();
  goto <D.31491>;
  <D.31468>:
  mono_loader_lock ();
  D.31492 = image->array_cache;
  if (D.31492 == 0B) goto <D.31493>; else goto <D.31494>;
  <D.31493>:
  D.31495 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->array_cache = D.31495;
  <D.31494>:
  D.31492 = image->array_cache;
  list = monoeg_g_hash_table_lookup (D.31492, eclass);
  rootlist = list;
  if (rootlist != 0B) goto <D.31496>; else goto <D.31497>;
  <D.31496>:
  goto <D.23163>;
  <D.23162>:
  class = list->data;
  D.31498 = class->rank;
  D.31499 = (unsigned int) D.31498;
  if (D.31499 == rank) goto <D.31500>; else goto <D.31501>;
  <D.31500>:
  D.31502 = class->byval_arg.type;
  D.31503 = (int) D.31502;
  D.31505 = rank > 1;
  D.31506 = bounded != 0;
  D.31507 = D.31505 | D.31506;
  if (D.31507 != 0) goto <D.31508>; else goto <D.31509>;
  <D.31508>:
  iftmp.352 = 20;
  goto <D.31510>;
  <D.31509>:
  iftmp.352 = 29;
  <D.31510>:
  if (D.31503 == iftmp.352) goto <D.31511>; else goto <D.31512>;
  <D.31511>:
  mono_loader_unlock ();
  D.31490 = class;
  return D.31490;
  <D.31512>:
  <D.31501>:
  list = list->next;
  <D.23163>:
  if (list != 0B) goto <D.23162>; else goto <D.23164>;
  <D.23164>:
  <D.31497>:
  <D.31491>:
  D.31515 = image->assembly;
  if (D.31515 != 0B) goto <D.31516>; else goto <D.31513>;
  <D.31516>:
  D.31515 = image->assembly;
  D.31517 = D.31515->dynamic;
  if (D.31517 != 0) goto <D.31518>; else goto <D.31513>;
  <D.31518>:
  D.31519 = image->assembly_name;
  if (D.31519 != 0B) goto <D.31520>; else goto <D.31513>;
  <D.31520>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.31522>; else goto <D.31523>;
    <D.31522>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = image->assembly_name;
      D.31524 = "mscorlib";
      D.31525 = MEM[(const unsigned char *)D.31524];
      D.31526 = (int) D.31525;
      D.31527 = *__s2;
      D.31528 = (int) D.31527;
      __result = D.31526 - D.31528;
      {
        D.31529 = __s2_len != 0;
        D.31530 = __result == 0;
        D.31531 = D.31529 & D.31530;
        if (D.31531 != 0) goto <D.31532>; else goto <D.31533>;
        <D.31532>:
        D.31534 = &MEM[(void *)"mscorlib" + 1B];
        D.31535 = *D.31534;
        D.31536 = (int) D.31535;
        D.31537 = __s2 + 1;
        D.31538 = *D.31537;
        D.31539 = (int) D.31538;
        __result = D.31536 - D.31539;
        D.31540 = __s2_len > 1;
        D.31530 = __result == 0;
        D.31541 = D.31540 & D.31530;
        if (D.31541 != 0) goto <D.31542>; else goto <D.31543>;
        <D.31542>:
        D.31544 = &MEM[(void *)"mscorlib" + 2B];
        D.31545 = *D.31544;
        D.31546 = (int) D.31545;
        D.31547 = __s2 + 2;
        D.31548 = *D.31547;
        D.31549 = (int) D.31548;
        __result = D.31546 - D.31549;
        D.31550 = __s2_len > 2;
        D.31530 = __result == 0;
        D.31551 = D.31550 & D.31530;
        if (D.31551 != 0) goto <D.31552>; else goto <D.31553>;
        <D.31552>:
        D.31554 = &MEM[(void *)"mscorlib" + 3B];
        D.31555 = *D.31554;
        D.31556 = (int) D.31555;
        D.31557 = __s2 + 3;
        D.31558 = *D.31557;
        D.31559 = (int) D.31558;
        __result = D.31556 - D.31559;
        <D.31553>:
        <D.31543>:
        <D.31533>:
      }
      D.23172 = __result;
    }
    iftmp.353 = -D.23172;
    goto <D.31560>;
    <D.31523>:
    D.31519 = image->assembly_name;
    iftmp.353 = __builtin_strcmp (D.31519, "mscorlib");
    <D.31560>:
    D.23173 = iftmp.353;
  }
  if (D.23173 == 0) goto <D.31561>; else goto <D.31513>;
  <D.31561>:
  parent = mono_class_from_name (image, "System", "Array");
  corlib_type = 1;
  goto <D.31514>;
  <D.31513>:
  parent = mono_defaults.array_class;
  D.31562 = BIT_FIELD_REF <*parent, 8, 160>;
  D.31563 = D.31562 & 1;
  if (D.31563 == 0) goto <D.31564>; else goto <D.31565>;
  <D.31564>:
  mono_class_init (parent);
  <D.31565>:
  <D.31514>:
  class = mono_image_alloc0 (image, 164);
  class->image = image;
  D.31566 = eclass->name_space;
  class->name_space = D.31566;
  D.31567 = eclass->name;
  D.31568 = strlen (D.31567);
  nsize = (int) D.31568;
  nsize.354 = (unsigned int) nsize;
  D.31570 = nsize.354 + rank;
  D.31571 = D.31570 + 3;
  name = monoeg_malloc (D.31571);
  D.31567 = eclass->name;
  nsize.355 = (unsigned int) nsize;
  memcpy (name, D.31567, nsize.355);
  nsize.356 = (sizetype) nsize;
  D.31574 = name + nsize.356;
  *D.31574 = 91;
  if (rank > 1) goto <D.31575>; else goto <D.31576>;
  <D.31575>:
  nsize.356 = (sizetype) nsize;
  D.31577 = nsize.356 + 1;
  D.31578 = name + D.31577;
  D.31579 = rank + 4294967295;
  memset (D.31578, 44, D.31579);
  <D.31576>:
  if (bounded != 0) goto <D.31580>; else goto <D.31581>;
  <D.31580>:
  nsize.354 = (unsigned int) nsize;
  D.31570 = nsize.354 + rank;
  D.31582 = name + D.31570;
  *D.31582 = 42;
  <D.31581>:
  nsize.354 = (unsigned int) nsize;
  D.31570 = nsize.354 + rank;
  bounded.357 = (unsigned int) bounded;
  D.31584 = D.31570 + bounded.357;
  D.31585 = name + D.31584;
  *D.31585 = 93;
  nsize.354 = (unsigned int) nsize;
  D.31570 = nsize.354 + rank;
  bounded.357 = (unsigned int) bounded;
  D.31584 = D.31570 + bounded.357;
  D.31586 = D.31584 + 1;
  D.31587 = name + D.31586;
  *D.31587 = 0;
  D.31588 = mono_image_strdup (image, name);
  class->name = D.31588;
  monoeg_g_free (name);
  mono_profiler_class_event (class, 0);
  classes_size.358 = classes_size;
  classes_size.359 = classes_size.358 + 164;
  classes_size = classes_size.359;
  class->type_token = 0;
  class->flags = 8449;
  class->parent = parent;
  D.31591 = class->parent;
  D.31592 = mono_class_instance_size (D.31591);
  class->instance_size = D.31592;
  D.31593 = eclass->byval_arg.type;
  D.31594 = D.31593 == 22;
  D.31595 = D.31593 == 1;
  D.31596 = D.31594 | D.31595;
  if (D.31596 != 0) goto <D.31597>; else goto <D.31598>;
  <D.31597>:
  mono_class_set_failure (class, 7, 0B);
  goto <D.31599>;
  <D.31598>:
  D.31602 = BIT_FIELD_REF <*eclass, 8, 160>;
  D.31603 = D.31602 & 16;
  if (D.31603 != 0) goto <D.31604>; else goto <D.31600>;
  <D.31604>:
  D.31605 = mono_class_enum_basetype (eclass);
  if (D.31605 == 0B) goto <D.31606>; else goto <D.31600>;
  <D.31606>:
  D.31609 = eclass->ref_info_handle;
  if (D.31609 == 0) goto <D.31607>; else goto <D.31610>;
  <D.31610>:
  D.31602 = BIT_FIELD_REF <*eclass, 8, 160>;
  D.31611 = D.31602 & 128;
  if (D.31611 != 0) goto <D.31607>; else goto <D.31608>;
  <D.31607>:
  monoeg_g_log (0B, 16, "Only incomplete TypeBuilder objects are allowed to be an enum without base_type");
  D.31609 = eclass->ref_info_handle;
  if (D.31609 == 0) goto <D.31613>; else goto <D.31616>;
  <D.31616>:
  D.31602 = BIT_FIELD_REF <*eclass, 8, 160>;
  D.31611 = D.31602 & 128;
  if (D.31611 != 0) goto <D.31613>; else goto <D.31614>;
  <D.31613>:
  iftmp.360 = 1;
  goto <D.31615>;
  <D.31614>:
  iftmp.360 = 0;
  <D.31615>:
  D.31617 = iftmp.360 != 0;
  D.31618 = (long int) D.31617;
  D.31619 = __builtin_expect (D.31618, 0);
  if (D.31619 != 0) goto <D.31620>; else goto <D.31621>;
  <D.31620>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6469, "eclass->ref_info_handle && !eclass->wastypebuilder");
  <D.31621>:
  <D.31608>:
  class->sizes.element_size = -1;
  goto <D.31601>;
  <D.31600>:
  D.31622 = mono_class_array_element_size (eclass);
  class->sizes.element_size = D.31622;
  <D.31601>:
  <D.31599>:
  mono_class_setup_supertypes (class);
  D.31623 = eclass->generic_class;
  if (D.31623 != 0B) goto <D.31624>; else goto <D.31625>;
  <D.31624>:
  mono_class_init (eclass);
  <D.31625>:
  D.31602 = BIT_FIELD_REF <*eclass, 8, 160>;
  D.31626 = D.31602 & 4;
  if (D.31626 == 0) goto <D.31627>; else goto <D.31628>;
  <D.31627>:
  mono_class_setup_fields (eclass);
  <D.31628>:
  D.31629 = eclass->exception_type;
  if (D.31629 != 0) goto <D.31630>; else goto <D.31631>;
  <D.31630>:
  mono_class_set_failure (class, 7, 0B);
  <D.31631>:
  D.31636 = &eclass->byval_arg;
  D.31637 = mono_type_is_reference (D.31636);
  if (D.31637 != 0) goto <D.31633>; else goto <D.31638>;
  <D.31638>:
  D.31639 = BIT_FIELD_REF <*eclass, 8, 184>;
  D.31640 = D.31639 & 8;
  if (D.31640 != 0) goto <D.31633>; else goto <D.31634>;
  <D.31633>:
  iftmp.361 = 1;
  goto <D.31635>;
  <D.31634>:
  iftmp.361 = 0;
  <D.31635>:
  D.31641 = (unsigned char) iftmp.361;
  D.31642 = (<unnamed-unsigned:1>) D.31641;
  class->has_references = D.31642;
  D.31643 = (unsigned char) rank;
  class->rank = D.31643;
  D.31602 = BIT_FIELD_REF <*eclass, 8, 160>;
  D.31603 = D.31602 & 16;
  if (D.31603 != 0) goto <D.31644>; else goto <D.31645>;
  <D.31644>:
  D.31646 = eclass->element_class;
  class->cast_class = D.31646;
  goto <D.31647>;
  <D.31645>:
  class->cast_class = eclass;
  <D.31647>:
  D.31648 = class->cast_class;
  D.31649 = D.31648->byval_arg.type;
  D.31650 = (int) D.31649;
  switch (D.31650) <default: <D.31655>, case 4: <D.23174>, case 7: <D.23176>, case 9: <D.23177>, case 11: <D.23180>, case 24: <D.23178>, case 25: <D.23179>>
  <D.23174>:
  D.31651 = mono_defaults.byte_class;
  class->cast_class = D.31651;
  goto <D.23175>;
  <D.23176>:
  D.31652 = mono_defaults.int16_class;
  class->cast_class = D.31652;
  goto <D.23175>;
  <D.23177>:
  <D.23178>:
  <D.23179>:
  D.31653 = mono_defaults.int32_class;
  class->cast_class = D.31653;
  goto <D.23175>;
  <D.23180>:
  D.31654 = mono_defaults.int64_class;
  class->cast_class = D.31654;
  goto <D.23175>;
  <D.31655>:
  <D.23175>:
  class->element_class = eclass;
  D.31505 = rank > 1;
  D.31506 = bounded != 0;
  D.31507 = D.31505 | D.31506;
  if (D.31507 != 0) goto <D.31656>; else goto <D.31657>;
  <D.31656>:
  {
    struct MonoArrayType * at;

    at = mono_image_alloc0 (image, 16);
    class->byval_arg.type = 20;
    class->byval_arg.data.array = at;
    at->eklass = eclass;
    D.31658 = (unsigned char) rank;
    at->rank = D.31658;
  }
  goto <D.31659>;
  <D.31657>:
  class->byval_arg.type = 29;
  class->byval_arg.data.klass = eclass;
  <D.31659>:
  class->this_arg = class->byval_arg;
  class->this_arg.byref = 1;
  if (corlib_type != 0) goto <D.31660>; else goto <D.31661>;
  <D.31660>:
  class->inited = 1;
  <D.31661>:
  D.31662 = eclass->generic_container;
  class->generic_container = D.31662;
  D.31464 = rank == 1;
  D.31465 = bounded == 0;
  D.31466 = D.31464 & D.31465;
  if (D.31466 != 0) goto <D.31663>; else goto <D.31664>;
  <D.31663>:
  {
    struct MonoClass * prev_class;

    {
      int ret;

      D.31469 = &image->szarray_cache_lock.mutex;
      ret = pthread_mutex_lock (D.31469);
      if (ret != 0) goto <D.31665>; else goto <D.31666>;
      <D.31665>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
      <D.31666>:
      D.31667 = ret != 0;
      D.31668 = (long int) D.31667;
      D.31669 = __builtin_expect (D.31668, 0);
      if (D.31669 != 0) goto <D.31670>; else goto <D.31671>;
      <D.31670>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6541, "ret == 0");
      <D.31671>:
    }
    D.31477 = image->szarray_cache;
    prev_class = monoeg_g_hash_table_lookup (D.31477, eclass);
    if (prev_class != 0B) goto <D.31672>; else goto <D.31673>;
    <D.31672>:
    class = prev_class;
    goto <D.31674>;
    <D.31673>:
    D.31477 = image->szarray_cache;
    monoeg_g_hash_table_insert_replace (D.31477, eclass, class, 0);
    <D.31674>:
    {
      int ret;

      D.31469 = &image->szarray_cache_lock.mutex;
      ret = pthread_mutex_unlock (D.31469);
      if (ret != 0) goto <D.31675>; else goto <D.31676>;
      <D.31675>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
      <D.31676>:
      D.31677 = ret != 0;
      D.31678 = (long int) D.31677;
      D.31679 = __builtin_expect (D.31678, 0);
      if (D.31679 != 0) goto <D.31680>; else goto <D.31681>;
      <D.31680>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6548, "ret == 0");
      <D.31681>:
    }
  }
  goto <D.31682>;
  <D.31664>:
  list = monoeg_g_slist_append (rootlist, class);
  D.31492 = image->array_cache;
  monoeg_g_hash_table_insert_replace (D.31492, eclass, list, 0);
  <D.31682>:
  mono_loader_unlock ();
  mono_profiler_class_loaded (class, 0);
  D.31490 = class;
  return D.31490;
}


mono_array_class_get (struct MonoClass * eclass, guint32 rank)
{
  struct MonoClass * D.31684;

  D.31684 = mono_bounded_array_class_get (eclass, rank, 0);
  return D.31684;
}


mono_class_instance_size (struct MonoClass * klass)
{
  unsigned char D.31686;
  unsigned char D.31687;
  int32_t D.31690;

  D.31686 = BIT_FIELD_REF <*klass, 8, 160>;
  D.31687 = D.31686 & 4;
  if (D.31687 == 0) goto <D.31688>; else goto <D.31689>;
  <D.31688>:
  mono_class_init (klass);
  <D.31689>:
  D.31690 = klass->instance_size;
  return D.31690;
}


mono_class_min_align (struct MonoClass * klass)
{
  unsigned char D.31692;
  unsigned char D.31693;
  int32_t D.31696;
  unsigned char D.31697;

  D.31692 = BIT_FIELD_REF <*klass, 8, 160>;
  D.31693 = D.31692 & 4;
  if (D.31693 == 0) goto <D.31694>; else goto <D.31695>;
  <D.31694>:
  mono_class_init (klass);
  <D.31695>:
  D.31697 = klass->min_align;
  D.31696 = (int32_t) D.31697;
  return D.31696;
}


mono_class_value_size (struct MonoClass * klass, guint32 * align)
{
  int D.31699;
  unsigned int D.31700;
  unsigned int D.31701;
  unsigned char D.31704;
  unsigned int D.31705;
  int32_t D.31706;
  gint32 size;

  D.31699 = mono_class_instance_size (klass);
  D.31700 = (unsigned int) D.31699;
  D.31701 = D.31700 + 4294967288;
  size = (gint32) D.31701;
  if (align != 0B) goto <D.31702>; else goto <D.31703>;
  <D.31702>:
  D.31704 = klass->min_align;
  D.31705 = (unsigned int) D.31704;
  *align = D.31705;
  <D.31703>:
  D.31706 = size;
  return D.31706;
}


mono_class_data_size (struct MonoClass * klass)
{
  unsigned char D.31708;
  unsigned char D.31709;
  unsigned char D.31712;
  unsigned char D.31713;
  unsigned char D.31716;
  int32_t D.31719;

  D.31708 = BIT_FIELD_REF <*klass, 8, 160>;
  D.31709 = D.31708 & 1;
  if (D.31709 == 0) goto <D.31710>; else goto <D.31711>;
  <D.31710>:
  mono_class_init (klass);
  <D.31711>:
  D.31712 = BIT_FIELD_REF <*klass, 8, 192>;
  D.31713 = D.31712 & 32;
  if (D.31713 == 0) goto <D.31714>; else goto <D.31715>;
  <D.31714>:
  mono_class_setup_fields_locking (klass);
  <D.31715>:
  D.31716 = klass->rank;
  if (D.31716 != 0) goto <D.31717>; else goto <D.31718>;
  <D.31717>:
  D.31719 = 0;
  return D.31719;
  <D.31718>:
  D.31719 = klass->sizes.class_size;
  return D.31719;
}


mono_class_get_field (struct MonoClass * class, guint32 field_token)
{
  int field_token.362;
  unsigned int D.31722;
  _Bool D.31723;
  long int D.31724;
  long int D.31725;
  struct MonoClassField * D.31728;
  int D.31729;
  int idx;

  field_token.362 = (int) field_token;
  idx = field_token.362 & 16777215;
  D.31722 = field_token & 4278190080;
  D.31723 = D.31722 != 67108864;
  D.31724 = (long int) D.31723;
  D.31725 = __builtin_expect (D.31724, 0);
  if (D.31725 != 0) goto <D.31726>; else goto <D.31727>;
  <D.31726>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6707, "mono_metadata_token_code (field_token) == MONO_TOKEN_FIELD_DEF");
  <D.31727>:
  D.31729 = idx + -1;
  D.31728 = mono_class_get_field_idx (class, D.31729);
  return D.31728;
}


mono_class_get_field_idx (struct MonoClass * class, int idx)
{
  unsigned char D.31731;
  struct MonoClassField * D.31734;
  struct MonoImage * D.31735;
  unsigned char D.31736;
  unsigned char D.31737;
  struct MonoTableInfo * D.31740;
  unsigned int D.31741;
  struct MonoClassField * D.31742;
  unsigned int i.363;
  unsigned int D.31744;
  struct MonoClassField * D.31745;
  const char * D.31746;
  unsigned int i.364;
  unsigned int D.31750;
  unsigned int idx.365;
  unsigned int D.31754;
  unsigned int D.31757;
  unsigned int D.31760;
  unsigned int D.31761;

  mono_class_setup_fields_locking (class);
  D.31731 = class->exception_type;
  if (D.31731 != 0) goto <D.31732>; else goto <D.31733>;
  <D.31732>:
  D.31734 = 0B;
  return D.31734;
  <D.31733>:
  goto <D.23213>;
  <D.23212>:
  D.31735 = class->image;
  D.31736 = BIT_FIELD_REF <*D.31735, 8, 128>;
  D.31737 = D.31736 & 32;
  if (D.31737 != 0) goto <D.31738>; else goto <D.31739>;
  <D.31738>:
  {
    const char * name;
    int i;

    D.31735 = class->image;
    D.31735 = class->image;
    D.31740 = &D.31735->tables[4];
    D.31741 = mono_metadata_decode_row_col (D.31740, idx, 1);
    name = mono_metadata_string_heap (D.31735, D.31741);
    i = 0;
    goto <D.23210>;
    <D.23209>:
    D.31742 = class->fields;
    i.363 = (unsigned int) i;
    D.31744 = i.363 * 16;
    D.31745 = D.31742 + D.31744;
    D.31746 = mono_field_get_name (D.31745);
    if (D.31746 == name) goto <D.31747>; else goto <D.31748>;
    <D.31747>:
    D.31742 = class->fields;
    i.363 = (unsigned int) i;
    D.31744 = i.363 * 16;
    D.31734 = D.31742 + D.31744;
    return D.31734;
    <D.31748>:
    i = i + 1;
    <D.23210>:
    i.364 = (unsigned int) i;
    D.31750 = class->field.count;
    if (i.364 < D.31750) goto <D.23209>; else goto <D.23211>;
    <D.23211>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6680);
  }
  <D.31739>:
  D.31750 = class->field.count;
  if (D.31750 != 0) goto <D.31751>; else goto <D.31752>;
  <D.31751>:
  idx.365 = (unsigned int) idx;
  D.31754 = class->field.first;
  if (idx.365 >= D.31754) goto <D.31755>; else goto <D.31756>;
  <D.31755>:
  idx.365 = (unsigned int) idx;
  D.31754 = class->field.first;
  D.31750 = class->field.count;
  D.31757 = D.31754 + D.31750;
  if (idx.365 < D.31757) goto <D.31758>; else goto <D.31759>;
  <D.31758>:
  D.31742 = class->fields;
  idx.365 = (unsigned int) idx;
  D.31754 = class->field.first;
  D.31760 = idx.365 - D.31754;
  D.31761 = D.31760 * 16;
  D.31734 = D.31742 + D.31761;
  return D.31734;
  <D.31759>:
  <D.31756>:
  <D.31752>:
  class = class->parent;
  <D.23213>:
  if (class != 0B) goto <D.23212>; else goto <D.23214>;
  <D.23214>:
  D.31734 = 0B;
  return D.31734;
}


mono_class_get_field_from_name (struct MonoClass * klass, const char * name)
{
  struct MonoClassField * D.31763;

  D.31763 = mono_class_get_field_from_name_full (klass, name, 0B);
  return D.31763;
}


mono_class_get_field_from_name_full (struct MonoClass * klass, const char * name, struct MonoType * type)
{
  unsigned char D.31765;
  struct MonoClassField * D.31768;
  struct MonoClassField * D.31769;
  unsigned int i.366;
  unsigned int D.31771;
  int D.23239;
  const char * D.31772;
  struct MonoClassField * D.31777;
  int D.31778;
  unsigned int i.367;
  unsigned int D.31782;
  int i;

  mono_class_setup_fields_locking (klass);
  D.31765 = klass->exception_type;
  if (D.31765 != 0) goto <D.31766>; else goto <D.31767>;
  <D.31766>:
  D.31768 = 0B;
  return D.31768;
  <D.31767>:
  goto <D.23246>;
  <D.23245>:
  i = 0;
  goto <D.23243>;
  <D.23242>:
  {
    struct MonoClassField * field;

    D.31769 = klass->fields;
    i.366 = (unsigned int) i;
    D.31771 = i.366 * 16;
    field = D.31769 + D.31771;
    {
      size_t __s1_len;
      size_t __s2_len;

      D.31772 = mono_field_get_name (field);
      D.23239 = __builtin_strcmp (name, D.31772);
    }
    if (D.23239 != 0) goto <D.31773>; else goto <D.31774>;
    <D.31773>:
    // predicted unlikely by continue predictor.
    goto <D.23240>;
    <D.31774>:
    if (type != 0B) goto <D.31775>; else goto <D.31776>;
    <D.31775>:
    {
      struct MonoType * field_type;

      D.31777 = mono_metadata_get_corresponding_field_from_generic_type_definition (field);
      field_type = D.31777->type;
      D.31778 = mono_metadata_type_equal_full (type, field_type, 1);
      if (D.31778 == 0) goto <D.31779>; else goto <D.31780>;
      <D.31779>:
      // predicted unlikely by continue predictor.
      goto <D.23240>;
      <D.31780>:
    }
    <D.31776>:
    D.31768 = field;
    return D.31768;
  }
  <D.23240>:
  i = i + 1;
  <D.23243>:
  i.367 = (unsigned int) i;
  D.31782 = klass->field.count;
  if (i.367 < D.31782) goto <D.23242>; else goto <D.23244>;
  <D.23244>:
  klass = klass->parent;
  <D.23246>:
  if (klass != 0B) goto <D.23245>; else goto <D.23247>;
  <D.23247>:
  D.31768 = 0B;
  return D.31768;
}


mono_class_get_field_token (struct MonoClassField * field)
{
  struct MonoClassField * D.31784;
  uint32_t D.31787;
  unsigned int i.368;
  unsigned int D.31789;
  struct MonoClassField * D.31790;
  unsigned int D.31793;
  unsigned int i.369;
  unsigned int D.31795;
  unsigned int D.31796;
  struct MonoImage * D.31797;
  unsigned char D.31798;
  unsigned char D.31799;
  unsigned int idx.370;
  unsigned int D.31803;
  int D.31804;
  unsigned int D.31805;
  struct MonoClass * klass;
  int i;

  klass = field->parent;
  mono_class_setup_fields_locking (klass);
  goto <D.23258>;
  <D.23257>:
  D.31784 = klass->fields;
  if (D.31784 == 0B) goto <D.31785>; else goto <D.31786>;
  <D.31785>:
  D.31787 = 0;
  return D.31787;
  <D.31786>:
  i = 0;
  goto <D.23255>;
  <D.23254>:
  D.31784 = klass->fields;
  i.368 = (unsigned int) i;
  D.31789 = i.368 * 16;
  D.31790 = D.31784 + D.31789;
  if (D.31790 == field) goto <D.31791>; else goto <D.31792>;
  <D.31791>:
  {
    int idx;

    D.31793 = klass->field.first;
    i.369 = (unsigned int) i;
    D.31795 = D.31793 + i.369;
    D.31796 = D.31795 + 1;
    idx = (int) D.31796;
    D.31797 = klass->image;
    D.31798 = BIT_FIELD_REF <*D.31797, 8, 128>;
    D.31799 = D.31798 & 32;
    if (D.31799 != 0) goto <D.31800>; else goto <D.31801>;
    <D.31800>:
    D.31797 = klass->image;
    idx.370 = (unsigned int) idx;
    D.31803 = mono_metadata_translate_token_index (D.31797, 4, idx.370);
    idx = (int) D.31803;
    <D.31801>:
    D.31804 = idx | 67108864;
    D.31787 = (uint32_t) D.31804;
    return D.31787;
  }
  <D.31792>:
  i = i + 1;
  <D.23255>:
  i.369 = (unsigned int) i;
  D.31805 = klass->field.count;
  if (i.369 < D.31805) goto <D.23254>; else goto <D.23256>;
  <D.23256>:
  klass = klass->parent;
  <D.23258>:
  if (klass != 0B) goto <D.23257>; else goto <D.23259>;
  <D.23259>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6800);
  D.31787 = 0;
  return D.31787;
}


mono_class_get_field_default_value (struct MonoClassField * field, MonoTypeEnum * def_type)
{
  struct MonoType * D.31807;
  short unsigned int D.31808;
  signed short D.31809;
  _Bool D.31810;
  long int D.31811;
  long int D.31812;
  struct MonoClassExt * D.31817;
  struct MonoFieldDefaultValue * D.31819;
  unsigned int D.31822;
  unsigned int D.31823;
  int D.31824;
  void * D.31825;
  unsigned int field_index.371;
  unsigned int D.31827;
  struct MonoFieldDefaultValue * D.31828;
  const char * D.31829;
  struct MonoClass * D.31832;
  struct MonoImage * D.31833;
  unsigned int D.31834;
  const char * D.31837;
  int D.31838;
  int D.31839;
  _Bool D.31840;
  long int D.31841;
  long int D.31842;
  struct MonoTableInfo * D.31845;
  unsigned int D.31846;
  int D.31847;
  unsigned int D.31848;
  unsigned int D.31849;
  const char * D.31850;
  <unnamed type> D.31851;
  guint32 cindex;
  guint32 constant_cols[4];
  int field_index;
  struct MonoClass * klass;

  try
    {
      klass = field->parent;
      D.31807 = field->type;
      D.31808 = D.31807->attrs;
      D.31809 = (signed short) D.31808;
      D.31810 = D.31809 >= 0;
      D.31811 = (long int) D.31810;
      D.31812 = __builtin_expect (D.31811, 0);
      if (D.31812 != 0) goto <D.31813>; else goto <D.31814>;
      <D.31813>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6827, "field->type->attrs & FIELD_ATTRIBUTE_HAS_DEFAULT");
      <D.31814>:
      D.31817 = klass->ext;
      if (D.31817 == 0B) goto <D.31815>; else goto <D.31818>;
      <D.31818>:
      D.31817 = klass->ext;
      D.31819 = D.31817->field_def_values;
      if (D.31819 == 0B) goto <D.31815>; else goto <D.31816>;
      <D.31815>:
      mono_loader_lock ();
      mono_class_alloc_ext (klass);
      D.31817 = klass->ext;
      D.31819 = D.31817->field_def_values;
      if (D.31819 == 0B) goto <D.31820>; else goto <D.31821>;
      <D.31820>:
      D.31817 = klass->ext;
      D.31822 = klass->field.count;
      D.31823 = D.31822 * 8;
      D.31824 = (int) D.31823;
      D.31825 = mono_class_alloc0 (klass, D.31824);
      D.31817->field_def_values = D.31825;
      <D.31821>:
      mono_loader_unlock ();
      <D.31816>:
      field_index = mono_field_get_index (field);
      D.31817 = klass->ext;
      D.31819 = D.31817->field_def_values;
      field_index.371 = (unsigned int) field_index;
      D.31827 = field_index.371 * 8;
      D.31828 = D.31819 + D.31827;
      D.31829 = D.31828->data;
      if (D.31829 == 0B) goto <D.31830>; else goto <D.31831>;
      <D.31830>:
      D.31832 = field->parent;
      D.31833 = D.31832->image;
      D.31834 = mono_class_get_field_token (field);
      cindex = mono_metadata_get_constant_index (D.31833, D.31834, 0);
      if (cindex == 0) goto <D.31835>; else goto <D.31836>;
      <D.31835>:
      D.31837 = 0B;
      return D.31837;
      <D.31836>:
      D.31807 = field->type;
      D.31808 = D.31807->attrs;
      D.31838 = (int) D.31808;
      D.31839 = D.31838 & 256;
      D.31840 = D.31839 != 0;
      D.31841 = (long int) D.31840;
      D.31842 = __builtin_expect (D.31841, 0);
      if (D.31842 != 0) goto <D.31843>; else goto <D.31844>;
      <D.31843>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6844, "!(field->type->attrs & FIELD_ATTRIBUTE_HAS_FIELD_RVA)");
      <D.31844>:
      D.31832 = field->parent;
      D.31833 = D.31832->image;
      D.31845 = &D.31833->tables[11];
      D.31846 = cindex + 4294967295;
      D.31847 = (int) D.31846;
      mono_metadata_decode_row (D.31845, D.31847, &constant_cols, 4);
      D.31817 = klass->ext;
      D.31819 = D.31817->field_def_values;
      field_index.371 = (unsigned int) field_index;
      D.31827 = field_index.371 * 8;
      D.31828 = D.31819 + D.31827;
      D.31848 = constant_cols[0];
      D.31828->def_type = D.31848;
      D.31817 = klass->ext;
      D.31819 = D.31817->field_def_values;
      field_index.371 = (unsigned int) field_index;
      D.31827 = field_index.371 * 8;
      D.31828 = D.31819 + D.31827;
      D.31832 = field->parent;
      D.31833 = D.31832->image;
      D.31849 = constant_cols[3];
      D.31850 = mono_metadata_blob_heap (D.31833, D.31849);
      D.31828->data = D.31850;
      <D.31831>:
      D.31817 = klass->ext;
      D.31819 = D.31817->field_def_values;
      field_index.371 = (unsigned int) field_index;
      D.31827 = field_index.371 * 8;
      D.31828 = D.31819 + D.31827;
      D.31851 = D.31828->def_type;
      *def_type = D.31851;
      D.31817 = klass->ext;
      D.31819 = D.31817->field_def_values;
      field_index.371 = (unsigned int) field_index;
      D.31827 = field_index.371 * 8;
      D.31828 = D.31819 + D.31827;
      D.31837 = D.31828->data;
      return D.31837;
    }
  finally
    {
      constant_cols = {CLOBBER};
    }
}


mono_field_get_index (struct MonoClassField * field)
{
  int field.372;
  struct MonoClass * D.31855;
  struct MonoClassField * D.31856;
  int D.31857;
  int D.31858;
  int iftmp.373;
  unsigned int index.374;
  unsigned int D.31865;
  _Bool D.31866;
  long int D.31867;
  long int D.31868;
  int D.31871;
  int index;

  field.372 = (int) field;
  D.31855 = field->parent;
  D.31856 = D.31855->fields;
  D.31857 = (int) D.31856;
  D.31858 = field.372 - D.31857;
  index = D.31858 /[ex] 16;
  if (index < 0) goto <D.31860>; else goto <D.31863>;
  <D.31863>:
  index.374 = (unsigned int) index;
  D.31855 = field->parent;
  D.31865 = D.31855->field.count;
  if (index.374 >= D.31865) goto <D.31860>; else goto <D.31861>;
  <D.31860>:
  iftmp.373 = 1;
  goto <D.31862>;
  <D.31861>:
  iftmp.373 = 0;
  <D.31862>:
  D.31866 = iftmp.373 != 0;
  D.31867 = (long int) D.31866;
  D.31868 = __builtin_expect (D.31867, 0);
  if (D.31868 != 0) goto <D.31869>; else goto <D.31870>;
  <D.31869>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6809, "index >= 0 && index < field->parent->field.count");
  <D.31870>:
  D.31871 = index;
  return D.31871;
}


mono_class_get_property_default_value (struct MonoProperty * property, MonoTypeEnum * def_type)
{
  unsigned int D.31873;
  unsigned int D.31874;
  _Bool D.31875;
  long int D.31876;
  long int D.31877;
  struct MonoImage * D.31880;
  unsigned char D.31881;
  unsigned char D.31882;
  struct MonoClassExt * D.31885;
  struct MonoFieldDefaultValue * D.31886;
  unsigned int prop_index.375;
  unsigned int D.31890;
  struct MonoFieldDefaultValue * D.31891;
  const char * D.31892;
  <unnamed type> D.31895;
  const char * D.31896;
  unsigned int D.31897;
  struct MonoTableInfo * D.31900;
  unsigned int D.31901;
  int D.31902;
  unsigned int D.31903;
  unsigned int D.31904;
  guint32 cindex;
  guint32 constant_cols[4];
  struct MonoClass * klass;

  try
    {
      klass = property->parent;
      D.31873 = property->attrs;
      D.31874 = D.31873 & 4096;
      D.31875 = D.31874 == 0;
      D.31876 = (long int) D.31875;
      D.31877 = __builtin_expect (D.31876, 0);
      if (D.31877 != 0) goto <D.31878>; else goto <D.31879>;
      <D.31878>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6877, "property->attrs & PROPERTY_ATTRIBUTE_HAS_DEFAULT");
      <D.31879>:
      D.31880 = klass->image;
      D.31881 = BIT_FIELD_REF <*D.31880, 8, 128>;
      D.31882 = D.31881 & 8;
      if (D.31882 != 0) goto <D.31883>; else goto <D.31884>;
      <D.31883>:
      {
        int prop_index;

        prop_index = mono_property_get_index (property);
        D.31885 = klass->ext;
        D.31886 = D.31885->prop_def_values;
        if (D.31886 != 0B) goto <D.31887>; else goto <D.31888>;
        <D.31887>:
        D.31885 = klass->ext;
        D.31886 = D.31885->prop_def_values;
        prop_index.375 = (unsigned int) prop_index;
        D.31890 = prop_index.375 * 8;
        D.31891 = D.31886 + D.31890;
        D.31892 = D.31891->data;
        if (D.31892 != 0B) goto <D.31893>; else goto <D.31894>;
        <D.31893>:
        D.31885 = klass->ext;
        D.31886 = D.31885->prop_def_values;
        prop_index.375 = (unsigned int) prop_index;
        D.31890 = prop_index.375 * 8;
        D.31891 = D.31886 + D.31890;
        D.31895 = D.31891->def_type;
        *def_type = D.31895;
        D.31885 = klass->ext;
        D.31886 = D.31885->prop_def_values;
        prop_index.375 = (unsigned int) prop_index;
        D.31890 = prop_index.375 * 8;
        D.31891 = D.31886 + D.31890;
        D.31896 = D.31891->data;
        return D.31896;
        <D.31894>:
        <D.31888>:
        D.31896 = 0B;
        return D.31896;
      }
      <D.31884>:
      D.31880 = klass->image;
      D.31897 = mono_class_get_property_token (property);
      cindex = mono_metadata_get_constant_index (D.31880, D.31897, 0);
      if (cindex == 0) goto <D.31898>; else goto <D.31899>;
      <D.31898>:
      D.31896 = 0B;
      return D.31896;
      <D.31899>:
      D.31880 = klass->image;
      D.31900 = &D.31880->tables[11];
      D.31901 = cindex + 4294967295;
      D.31902 = (int) D.31901;
      mono_metadata_decode_row (D.31900, D.31902, &constant_cols, 4);
      D.31903 = constant_cols[0];
      *def_type = D.31903;
      D.31880 = klass->image;
      D.31904 = constant_cols[3];
      D.31896 = mono_metadata_blob_heap (D.31880, D.31904);
      return D.31896;
    }
  finally
    {
      constant_cols = {CLOBBER};
    }
}


mono_property_get_index (struct MonoProperty * prop)
{
  int prop.376;
  struct MonoClass * D.31908;
  struct MonoClassExt * D.31909;
  struct MonoProperty * D.31910;
  int D.31911;
  int D.31912;
  int iftmp.377;
  unsigned int index.378;
  unsigned int D.31919;
  _Bool D.31920;
  long int D.31921;
  long int D.31922;
  int D.31925;
  int index;

  prop.376 = (int) prop;
  D.31908 = prop->parent;
  D.31909 = D.31908->ext;
  D.31910 = D.31909->properties;
  D.31911 = (int) D.31910;
  D.31912 = prop.376 - D.31911;
  index = D.31912 /[ex] 20;
  if (index < 0) goto <D.31914>; else goto <D.31917>;
  <D.31917>:
  index.378 = (unsigned int) index;
  D.31908 = prop->parent;
  D.31909 = D.31908->ext;
  D.31919 = D.31909->property.count;
  if (index.378 >= D.31919) goto <D.31914>; else goto <D.31915>;
  <D.31914>:
  iftmp.377 = 1;
  goto <D.31916>;
  <D.31915>:
  iftmp.377 = 0;
  <D.31916>:
  D.31920 = iftmp.377 != 0;
  D.31921 = (long int) D.31920;
  D.31922 = __builtin_expect (D.31921, 0);
  if (D.31922 != 0) goto <D.31923>; else goto <D.31924>;
  <D.31923>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6860, "index >= 0 && index < prop->parent->ext->property.count");
  <D.31924>:
  D.31925 = index;
  return D.31925;
}


mono_class_get_event_token (struct MonoEvent * event)
{
  struct MonoClassExt * D.31927;
  struct MonoEvent * D.31930;
  unsigned int i.379;
  unsigned int D.31932;
  struct MonoEvent * D.31933;
  uint32_t D.31936;
  unsigned int D.31937;
  unsigned int i.380;
  unsigned int D.31939;
  unsigned int D.31940;
  unsigned int D.31941;
  struct MonoClass * klass;
  int i;

  klass = event->parent;
  goto <D.23293>;
  <D.23292>:
  D.31927 = klass->ext;
  if (D.31927 != 0B) goto <D.31928>; else goto <D.31929>;
  <D.31928>:
  i = 0;
  goto <D.23290>;
  <D.23289>:
  D.31927 = klass->ext;
  D.31930 = D.31927->events;
  i.379 = (unsigned int) i;
  D.31932 = i.379 * 28;
  D.31933 = D.31930 + D.31932;
  if (D.31933 == event) goto <D.31934>; else goto <D.31935>;
  <D.31934>:
  D.31927 = klass->ext;
  D.31937 = D.31927->event.first;
  i.380 = (unsigned int) i;
  D.31939 = D.31937 + i.380;
  D.31940 = D.31939 + 1;
  D.31936 = D.31940 | 335544320;
  return D.31936;
  <D.31935>:
  i = i + 1;
  <D.23290>:
  i.380 = (unsigned int) i;
  D.31927 = klass->ext;
  D.31941 = D.31927->event.count;
  if (i.380 < D.31941) goto <D.23289>; else goto <D.23291>;
  <D.23291>:
  <D.31929>:
  klass = klass->parent;
  <D.23293>:
  if (klass != 0B) goto <D.23292>; else goto <D.23294>;
  <D.23294>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6917);
  D.31936 = 0;
  return D.31936;
}


mono_class_get_property_from_name (struct MonoClass * klass, const char * name)
{
  int D.23309;
  const char * D.31943;
  struct MonoProperty * D.31946;

  goto <D.23314>;
  <D.23313>:
  {
    struct MonoProperty * p;
    void * iter;

    try
      {
        iter = 0B;
        goto <D.23311>;
        <D.23310>:
        {
          size_t __s1_len;
          size_t __s2_len;

          D.31943 = p->name;
          D.23309 = __builtin_strcmp (name, D.31943);
        }
        if (D.23309 == 0) goto <D.31944>; else goto <D.31945>;
        <D.31944>:
        D.31946 = p;
        return D.31946;
        <D.31945>:
        <D.23311>:
        p = mono_class_get_properties (klass, &iter);
        if (p != 0B) goto <D.23310>; else goto <D.23312>;
        <D.23312>:
        klass = klass->parent;
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  <D.23314>:
  if (klass != 0B) goto <D.23313>; else goto <D.23315>;
  <D.23315>:
  D.31946 = 0B;
  return D.31946;
}


mono_class_get_property_token (struct MonoProperty * prop)
{
  struct MonoClassExt * D.31950;
  struct MonoProperty * D.31951;
  unsigned int i.381;
  unsigned int D.31953;
  struct MonoProperty * D.31954;
  uint32_t D.31957;
  unsigned int D.31958;
  unsigned int i.382;
  unsigned int D.31960;
  unsigned int D.31961;
  struct MonoClass * klass;

  klass = prop->parent;
  goto <D.23327>;
  <D.23326>:
  {
    struct MonoProperty * p;
    int i;
    void * iter;

    try
      {
        i = 0;
        iter = 0B;
        goto <D.23324>;
        <D.23323>:
        D.31950 = klass->ext;
        D.31951 = D.31950->properties;
        i.381 = (unsigned int) i;
        D.31953 = i.381 * 20;
        D.31954 = D.31951 + D.31953;
        if (D.31954 == prop) goto <D.31955>; else goto <D.31956>;
        <D.31955>:
        D.31950 = klass->ext;
        D.31958 = D.31950->property.first;
        i.382 = (unsigned int) i;
        D.31960 = D.31958 + i.382;
        D.31961 = D.31960 + 1;
        D.31957 = D.31961 | 385875968;
        return D.31957;
        <D.31956>:
        i = i + 1;
        <D.23324>:
        p = mono_class_get_properties (klass, &iter);
        if (p != 0B) goto <D.23323>; else goto <D.23325>;
        <D.23325>:
        klass = klass->parent;
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  <D.23327>:
  if (klass != 0B) goto <D.23326>; else goto <D.23328>;
  <D.23328>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6953);
  D.31957 = 0;
  return D.31957;
}


mono_class_name_from_token (struct MonoImage * image, guint32 type_token)
{
  unsigned char D.31965;
  unsigned char D.31966;
  char * D.31969;
  unsigned int D.31970;
  <unnamed-unsigned:24> D.31971;
  unsigned int D.31972;
  unsigned int D.31975;
  int D.31976;
  unsigned int D.31977;
  unsigned int D.31978;
  char D.31979;
  <unnamed-unsigned:24> D.31982;
  unsigned int D.31983;
  unsigned int D.31986;
  int D.31987;
  const char * D.31990;
  int D.31991;
  unsigned int D.31992;
  unsigned int D.31993;
  const char * name;
  const char * nspace;

  D.31965 = BIT_FIELD_REF <*image, 8, 128>;
  D.31966 = D.31965 & 8;
  if (D.31966 != 0) goto <D.31967>; else goto <D.31968>;
  <D.31967>:
  D.31969 = monoeg_g_strdup_printf ("DynamicType 0x%08x", type_token);
  return D.31969;
  <D.31968>:
  D.31970 = type_token & 4278190080;
  switch (D.31970) <default: <D.23346>, case 16777216: <D.23339>, case 33554432: <D.23335>, case 452984832: <D.23345>>
  <D.23335>:
  {
    guint32 cols[6];
    struct MonoTableInfo * tt;
    guint tidx;

    try
      {
        tt = &image->tables[2];
        tidx = type_token & 16777215;
        D.31971 = tt->rows;
        D.31972 = (unsigned int) D.31971;
        if (D.31972 < tidx) goto <D.31973>; else goto <D.31974>;
        <D.31973>:
        D.31969 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.31969;
        <D.31974>:
        D.31975 = tidx + 4294967295;
        D.31976 = (int) D.31975;
        mono_metadata_decode_row (tt, D.31976, &cols, 6);
        D.31977 = cols[1];
        name = mono_metadata_string_heap (image, D.31977);
        D.31978 = cols[2];
        nspace = mono_metadata_string_heap (image, D.31978);
        D.31979 = *nspace;
        if (D.31979 == 0) goto <D.31980>; else goto <D.31981>;
        <D.31980>:
        D.31969 = monoeg_g_strdup_printf ("%s", name);
        return D.31969;
        <D.31981>:
        D.31969 = monoeg_g_strdup_printf ("%s.%s", nspace, name);
        return D.31969;
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  <D.23339>:
  {
    struct MonoError error;
    guint32 cols[3];
    struct MonoTableInfo * t;
    guint tidx;

    try
      {
        t = &image->tables[1];
        tidx = type_token & 16777215;
        D.31982 = t->rows;
        D.31983 = (unsigned int) D.31982;
        if (D.31983 < tidx) goto <D.31984>; else goto <D.31985>;
        <D.31984>:
        D.31969 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.31969;
        <D.31985>:
        D.31986 = tidx + 4294967295;
        D.31987 = mono_verifier_verify_typeref_row (image, D.31986, &error);
        if (D.31987 == 0) goto <D.31988>; else goto <D.31989>;
        <D.31988>:
        {
          char * msg;

          D.31990 = mono_error_get_message (&error);
          msg = monoeg_g_strdup_printf ("Invalid type token 0x%08x due to \'%s\'", type_token, D.31990);
          mono_error_cleanup (&error);
          D.31969 = msg;
          return D.31969;
        }
        <D.31989>:
        D.31986 = tidx + 4294967295;
        D.31991 = (int) D.31986;
        mono_metadata_decode_row (t, D.31991, &cols, 3);
        D.31992 = cols[1];
        name = mono_metadata_string_heap (image, D.31992);
        D.31993 = cols[2];
        nspace = mono_metadata_string_heap (image, D.31993);
        D.31979 = *nspace;
        if (D.31979 == 0) goto <D.31994>; else goto <D.31995>;
        <D.31994>:
        D.31969 = monoeg_g_strdup_printf ("%s", name);
        return D.31969;
        <D.31995>:
        D.31969 = monoeg_g_strdup_printf ("%s.%s", nspace, name);
        return D.31969;
      }
    finally
      {
        error = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.23345>:
  D.31969 = monoeg_g_strdup_printf ("Typespec 0x%08x", type_token);
  return D.31969;
  <D.23346>:
  D.31969 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
  return D.31969;
}


mono_class_get_full (struct MonoImage * image, guint32 type_token, struct MonoGenericContext * context)
{
  unsigned char D.31999;
  unsigned char D.32000;
  unsigned int D.32003;
  unsigned int table.383;
  unsigned int D.32005;
  _Bool D.32006;
  _Bool D.32007;
  _Bool D.32008;
  gchar * D.32011;
  struct MonoClass * D.32012;
  unsigned int D.32013;
  int D.32014;
  int D.32017;
  struct MonoError error;
  struct MonoClass * class;

  try
    {
      class = 0B;
      D.31999 = BIT_FIELD_REF <*image, 8, 128>;
      D.32000 = D.31999 & 8;
      if (D.32000 != 0) goto <D.32001>; else goto <D.32002>;
      <D.32001>:
      {
        int table;

        D.32003 = type_token >> 24;
        table = (int) D.32003;
        table.383 = (unsigned int) table;
        D.32005 = table.383 + 4294967295;
        D.32006 = D.32005 > 1;
        D.32007 = table != 27;
        D.32008 = D.32006 & D.32007;
        if (D.32008 != 0) goto <D.32009>; else goto <D.32010>;
        <D.32009>:
        D.32011 = monoeg_strdup ("Bad type token.");
        mono_loader_set_error_bad_image (D.32011);
        D.32012 = 0B;
        return D.32012;
        <D.32010>:
        D.32012 = mono_lookup_dynamic_token (image, type_token, context);
        return D.32012;
      }
      <D.32002>:
      D.32013 = type_token & 4278190080;
      switch (D.32013) <default: <D.23379>, case 16777216: <D.23377>, case 33554432: <D.23375>, case 452984832: <D.23378>>
      <D.23375>:
      class = mono_class_create_from_typedef (image, type_token, &error);
      D.32014 = mono_error_ok (&error);
      if (D.32014 == 0) goto <D.32015>; else goto <D.32016>;
      <D.32015>:
      mono_loader_set_error_from_mono_error (&error);
      mono_error_cleanup (&error);
      D.32012 = 0B;
      return D.32012;
      <D.32016>:
      goto <D.23376>;
      <D.23377>:
      class = mono_class_from_typeref (image, type_token);
      goto <D.23376>;
      <D.23378>:
      class = mono_class_create_from_typespec (image, type_token, context, &error);
      D.32017 = mono_error_ok (&error);
      if (D.32017 == 0) goto <D.32018>; else goto <D.32019>;
      <D.32018>:
      mono_error_cleanup (&error);
      <D.32019>:
      goto <D.23376>;
      <D.23379>:
      D.32013 = type_token & 4278190080;
      monoeg_g_log (0B, 16, "unknown token type %x", D.32013);
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7118);
      <D.23376>:
      if (class == 0B) goto <D.32020>; else goto <D.32021>;
      <D.32020>:
      {
        char * name;
        char * assembly;

        name = mono_class_name_from_token (image, type_token);
        assembly = mono_assembly_name_from_token (image, type_token);
        mono_loader_set_error_type_load (name, assembly);
        monoeg_g_free (name);
        monoeg_g_free (assembly);
      }
      <D.32021>:
      D.32012 = class;
      return D.32012;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_create_from_typespec (struct MonoImage * image, guint32 type_spec, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.32024;
  struct MonoClass * D.32027;
  int inflated.384;
  struct MonoClass * ret;
  gboolean inflated;
  struct MonoType * t;

  try
    {
      inflated = 0;
      t = mono_type_retrieve_from_typespec (image, type_spec, context, &inflated, error);
      D.32024 = mono_error_ok (error);
      if (D.32024 == 0) goto <D.32025>; else goto <D.32026>;
      <D.32025>:
      D.32027 = 0B;
      return D.32027;
      <D.32026>:
      ret = mono_class_from_mono_type (t);
      inflated.384 = inflated;
      if (inflated.384 != 0) goto <D.32029>; else goto <D.32030>;
      <D.32029>:
      mono_metadata_free_type (t);
      <D.32030>:
      D.32027 = ret;
      return D.32027;
    }
  finally
    {
      inflated = {CLOBBER};
    }
}


mono_type_retrieve_from_typespec (struct MonoImage * image, guint32 type_spec, struct MonoGenericContext * context, gboolean * did_inflate, struct MonoError * error)
{
  struct MonoType * D.32035;
  struct MonoGenericInst * D.32040;
  struct MonoGenericInst * D.32042;
  int D.32043;
  struct MonoType * t;

  t = mono_type_create_from_typespec (image, type_spec);
  mono_error_init (error);
  *did_inflate = 0;
  if (t == 0B) goto <D.32033>; else goto <D.32034>;
  <D.32033>:
  {
    char * name;
    char * assembly;

    name = mono_class_name_from_token (image, type_spec);
    assembly = mono_assembly_name_from_token (image, type_spec);
    mono_error_set_type_load_name (error, name, assembly, "Could not resolve typespec token %08x", type_spec);
    D.32035 = 0B;
    return D.32035;
  }
  <D.32034>:
  if (context != 0B) goto <D.32038>; else goto <D.32039>;
  <D.32038>:
  D.32040 = context->class_inst;
  if (D.32040 != 0B) goto <D.32036>; else goto <D.32041>;
  <D.32041>:
  D.32042 = context->method_inst;
  if (D.32042 != 0B) goto <D.32036>; else goto <D.32037>;
  <D.32036>:
  {
    struct MonoType * inflated;

    inflated = inflate_generic_type (0B, t, context, error);
    D.32043 = mono_error_ok (error);
    if (D.32043 == 0) goto <D.32044>; else goto <D.32045>;
    <D.32044>:
    D.32035 = 0B;
    return D.32035;
    <D.32045>:
    if (inflated != 0B) goto <D.32046>; else goto <D.32047>;
    <D.32046>:
    t = inflated;
    *did_inflate = 1;
    <D.32047>:
  }
  <D.32037>:
  <D.32039>:
  D.32035 = t;
  return D.32035;
}


mono_assembly_name_from_token (struct MonoImage * image, guint32 type_token)
{
  unsigned char D.32049;
  unsigned char D.32050;
  char * D.32053;
  char * D.32054;
  unsigned int D.32055;
  struct MonoAssembly * D.32056;
  struct MonoAssemblyName * D.32059;
  const char * D.32060;
  const char * iftmp.385;
  <unnamed-unsigned:24> D.32067;
  unsigned int D.32068;
  unsigned int D.32071;
  int D.32072;
  const char * D.32075;
  int D.32076;
  unsigned int D.32077;
  unsigned int D.32078;

  D.32049 = BIT_FIELD_REF <*image, 8, 128>;
  D.32050 = D.32049 & 8;
  if (D.32050 != 0) goto <D.32051>; else goto <D.32052>;
  <D.32051>:
  D.32054 = image->name;
  D.32053 = monoeg_g_strdup_printf ("DynamicAssembly %s", D.32054);
  return D.32053;
  <D.32052>:
  D.32055 = type_token & 4278190080;
  switch (D.32055) <default: <D.23366>, case 16777216: <D.23352>, case 33554432: <D.23351>, case 452984832: <D.23365>>
  <D.23351>:
  D.32056 = image->assembly;
  if (D.32056 != 0B) goto <D.32057>; else goto <D.32058>;
  <D.32057>:
  D.32056 = image->assembly;
  D.32059 = &D.32056->aname;
  D.32053 = mono_stringify_assembly_name (D.32059);
  return D.32053;
  <D.32058>:
  D.32060 = image->assembly_name;
  if (D.32060 != 0B) goto <D.32061>; else goto <D.32062>;
  <D.32061>:
  D.32060 = image->assembly_name;
  D.32053 = monoeg_strdup (D.32060);
  return D.32053;
  <D.32062>:
  D.32054 = image->name;
  if (D.32054 != 0B) goto <D.32064>; else goto <D.32065>;
  <D.32064>:
  iftmp.385 = image->name;
  goto <D.32066>;
  <D.32065>:
  iftmp.385 = "[Could not resolve assembly name";
  <D.32066>:
  D.32053 = monoeg_g_strdup_printf ("%s", iftmp.385);
  return D.32053;
  <D.23352>:
  {
    struct MonoError error;
    struct MonoAssemblyName aname;
    guint32 cols[3];
    struct MonoTableInfo * t;
    guint32 idx;

    try
      {
        t = &image->tables[1];
        idx = type_token & 16777215;
        D.32067 = t->rows;
        D.32068 = (unsigned int) D.32067;
        if (D.32068 < idx) goto <D.32069>; else goto <D.32070>;
        <D.32069>:
        D.32053 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.32053;
        <D.32070>:
        D.32071 = idx + 4294967295;
        D.32072 = mono_verifier_verify_typeref_row (image, D.32071, &error);
        if (D.32072 == 0) goto <D.32073>; else goto <D.32074>;
        <D.32073>:
        {
          char * msg;

          D.32075 = mono_error_get_message (&error);
          msg = monoeg_g_strdup_printf ("Invalid type token 0x%08x due to \'%s\'", type_token, D.32075);
          mono_error_cleanup (&error);
          D.32053 = msg;
          return D.32053;
        }
        <D.32074>:
        D.32071 = idx + 4294967295;
        D.32076 = (int) D.32071;
        mono_metadata_decode_row (t, D.32076, &cols, 3);
        D.32077 = cols[0];
        idx = D.32077 >> 2;
        D.32077 = cols[0];
        D.32078 = D.32077 & 3;
        switch (D.32078) <default: <D.23363>, case 0: <D.23359>, case 1: <D.23360>, case 2: <D.23362>, case 3: <D.23361>>
        <D.23359>:
        D.32053 = monoeg_strdup ("");
        return D.32053;
        <D.23360>:
        D.32053 = monoeg_strdup ("");
        return D.32053;
        <D.23361>:
        D.32053 = monoeg_strdup ("");
        return D.32053;
        <D.23362>:
        D.32071 = idx + 4294967295;
        D.32076 = (int) D.32071;
        mono_assembly_get_assemblyref (image, D.32076, &aname);
        D.32053 = mono_stringify_assembly_name (&aname);
        return D.32053;
        <D.23363>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7058);
        goto <D.23364>;
      }
    finally
      {
        error = {CLOBBER};
        aname = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.23365>:
  D.32053 = monoeg_strdup ("");
  return D.32053;
  <D.23366>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7066);
  <D.23364>:
  D.32053 = 0B;
  return D.32053;
}


mono_type_get_full (struct MonoImage * image, guint32 type_token, struct MonoGenericContext * context)
{
  unsigned char D.32082;
  unsigned char D.32083;
  struct MonoType * D.32086;
  void * D.32087;
  unsigned int D.32088;
  struct MonoType * iftmp.386;
  int D.32095;
  const char * D.32098;
  int inflated.387;
  struct MonoClass * D.32102;
  unsigned char D.32103;
  unsigned char D.32104;
  struct MonoError error;
  struct MonoType * type;
  gboolean inflated;

  try
    {
      type = 0B;
      inflated = 0;
      D.32082 = BIT_FIELD_REF <*image, 8, 128>;
      D.32083 = D.32082 & 8;
      if (D.32083 != 0) goto <D.32084>; else goto <D.32085>;
      <D.32084>:
      D.32087 = mono_lookup_dynamic_token (image, type_token, context);
      D.32086 = mono_class_get_type (D.32087);
      return D.32086;
      <D.32085>:
      D.32088 = type_token & 4278190080;
      if (D.32088 != 452984832) goto <D.32089>; else goto <D.32090>;
      <D.32089>:
      {
        struct MonoClass * class;

        class = mono_class_get_full (image, type_token, context);
        if (class != 0B) goto <D.32092>; else goto <D.32093>;
        <D.32092>:
        iftmp.386 = mono_class_get_type (class);
        goto <D.32094>;
        <D.32093>:
        iftmp.386 = 0B;
        <D.32094>:
        D.32086 = iftmp.386;
        return D.32086;
      }
      <D.32090>:
      type = mono_type_retrieve_from_typespec (image, type_token, context, &inflated, &error);
      D.32095 = mono_error_ok (&error);
      if (D.32095 == 0) goto <D.32096>; else goto <D.32097>;
      <D.32096>:
      {
        char * name;
        char * assembly;

        name = mono_class_name_from_token (image, type_token);
        assembly = mono_assembly_name_from_token (image, type_token);
        D.32098 = mono_error_get_message (&error);
        monoeg_g_log (0B, 16, "Error loading type %s from %s due to %s", name, assembly, D.32098);
        mono_error_cleanup (&error);
        mono_loader_set_error_type_load (name, assembly);
        D.32086 = 0B;
        return D.32086;
      }
      <D.32097>:
      inflated.387 = inflated;
      if (inflated.387 != 0) goto <D.32100>; else goto <D.32101>;
      <D.32100>:
      {
        struct MonoType * tmp;

        tmp = type;
        D.32102 = mono_class_from_mono_type (type);
        type = mono_class_get_type (D.32102);
        D.32103 = type->type;
        D.32104 = tmp->type;
        if (D.32103 != D.32104) goto <D.32105>; else goto <D.32106>;
        <D.32105>:
        type = tmp;
        goto <D.32107>;
        <D.32106>:
        mono_metadata_free_type (tmp);
        <D.32107>:
      }
      <D.32101>:
      D.32086 = type;
      return D.32086;
    }
  finally
    {
      error = {CLOBBER};
      inflated = {CLOBBER};
    }
}


mono_class_get (struct MonoImage * image, guint32 type_token)
{
  struct MonoClass * D.32110;

  D.32110 = mono_class_get_full (image, type_token, 0B);
  return D.32110;
}


mono_image_init_name_cache (struct MonoImage * image)
{
  struct GHashTable * D.32112;
  struct GHashTable * D.32115;
  unsigned char D.32116;
  unsigned char D.32117;
  unsigned int D.32120;
  int D.32121;
  unsigned int D.32122;
  unsigned int D.32123;
  unsigned int D.32126;
  unsigned int D.32127;
  const void * nspace_index.388;
  void * nspace_index.389;
  void * i.390;
  <unnamed-unsigned:24> D.32133;
  unsigned int D.32134;
  unsigned int D.32135;
  unsigned int D.32136;
  int D.32139;
  int D.32140;
  void * D.32141;
  <unnamed-unsigned:24> D.32142;
  int D.32143;
  struct MonoTableInfo * t;
  guint32 cols[6];
  const char * name;
  const char * nspace;
  guint32 i;
  guint32 visib;
  guint32 nspace_index;
  struct GHashTable * name_cache2;
  struct GHashTable * nspace_table;

  try
    {
      t = &image->tables[2];
      mono_image_lock (image);
      D.32112 = image->name_cache;
      if (D.32112 != 0B) goto <D.32113>; else goto <D.32114>;
      <D.32113>:
      mono_image_unlock (image);
      return;
      <D.32114>:
      D.32115 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
      image->name_cache = D.32115;
      D.32116 = BIT_FIELD_REF <*image, 8, 128>;
      D.32117 = D.32116 & 8;
      if (D.32117 != 0) goto <D.32118>; else goto <D.32119>;
      <D.32118>:
      mono_image_unlock (image);
      return;
      <D.32119>:
      name_cache2 = monoeg_g_hash_table_new (0B, 0B);
      i = 1;
      goto <D.23412>;
      <D.23411>:
      D.32120 = i + 4294967295;
      D.32121 = (int) D.32120;
      mono_metadata_decode_row (t, D.32121, &cols, 6);
      D.32122 = cols[0];
      visib = D.32122 & 7;
      D.32123 = visib + 4294967294;
      if (D.32123 <= 5) goto <D.32124>; else goto <D.32125>;
      <D.32124>:
      // predicted unlikely by continue predictor.
      goto <D.23410>;
      <D.32125>:
      D.32126 = cols[1];
      name = mono_metadata_string_heap (image, D.32126);
      D.32127 = cols[2];
      nspace = mono_metadata_string_heap (image, D.32127);
      nspace_index = cols[2];
      nspace_index.388 = (const void *) nspace_index;
      nspace_table = monoeg_g_hash_table_lookup (name_cache2, nspace_index.388);
      if (nspace_table == 0B) goto <D.32129>; else goto <D.32130>;
      <D.32129>:
      nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
      D.32112 = image->name_cache;
      monoeg_g_hash_table_insert_replace (D.32112, nspace, nspace_table, 0);
      nspace_index.389 = (void *) nspace_index;
      monoeg_g_hash_table_insert_replace (name_cache2, nspace_index.389, nspace_table, 0);
      <D.32130>:
      i.390 = (void *) i;
      monoeg_g_hash_table_insert_replace (nspace_table, name, i.390, 0);
      <D.23410>:
      i = i + 1;
      <D.23412>:
      D.32133 = t->rows;
      D.32134 = (unsigned int) D.32133;
      if (D.32134 >= i) goto <D.23411>; else goto <D.23413>;
      <D.23413>:
      {
        struct MonoTableInfo * t;
        guint32 cols[5];
        int i;

        try
          {
            t = &image->tables[39];
            i = 0;
            goto <D.23418>;
            <D.23417>:
            mono_metadata_decode_row (t, i, &cols, 5);
            D.32135 = cols[2];
            name = mono_metadata_string_heap (image, D.32135);
            D.32136 = cols[3];
            nspace = mono_metadata_string_heap (image, D.32136);
            nspace_index = cols[3];
            nspace_index.388 = (const void *) nspace_index;
            nspace_table = monoeg_g_hash_table_lookup (name_cache2, nspace_index.388);
            if (nspace_table == 0B) goto <D.32137>; else goto <D.32138>;
            <D.32137>:
            nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
            D.32112 = image->name_cache;
            monoeg_g_hash_table_insert_replace (D.32112, nspace, nspace_table, 0);
            nspace_index.389 = (void *) nspace_index;
            monoeg_g_hash_table_insert_replace (name_cache2, nspace_index.389, nspace_table, 0);
            <D.32138>:
            D.32139 = i + 1;
            D.32140 = D.32139 | 654311424;
            D.32141 = (void *) D.32140;
            monoeg_g_hash_table_insert_replace (nspace_table, name, D.32141, 0);
            i = i + 1;
            <D.23418>:
            D.32142 = t->rows;
            D.32143 = (int) D.32142;
            if (D.32143 > i) goto <D.23417>; else goto <D.23419>;
            <D.23419>:
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      monoeg_g_hash_table_destroy (name_cache2);
      mono_image_unlock (image);
    }
  finally
    {
      cols = {CLOBBER};
    }
}


mono_image_add_to_name_cache (struct MonoImage * image, const char * nspace, const char * name, guint32 index)
{
  struct GHashTable * D.32147;
  void * D.32152;
  char * D.32155;
  void * index.391;
  struct GHashTable * nspace_table;
  struct GHashTable * name_cache;
  guint32 old_index;

  mono_image_lock (image);
  D.32147 = image->name_cache;
  if (D.32147 == 0B) goto <D.32148>; else goto <D.32149>;
  <D.32148>:
  mono_image_init_name_cache (image);
  <D.32149>:
  name_cache = image->name_cache;
  nspace_table = monoeg_g_hash_table_lookup (name_cache, nspace);
  if (nspace_table == 0B) goto <D.32150>; else goto <D.32151>;
  <D.32150>:
  nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  monoeg_g_hash_table_insert_replace (name_cache, nspace, nspace_table, 0);
  <D.32151>:
  D.32152 = monoeg_g_hash_table_lookup (nspace_table, name);
  old_index = (guint32) D.32152;
  if (old_index != 0) goto <D.32153>; else goto <D.32154>;
  <D.32153>:
  D.32155 = image->name;
  monoeg_g_log (0B, 4, "overrwritting old token %x on image %s for type %s::%s", old_index, D.32155, nspace, name);
  <D.23429>:
  goto <D.23429>;
  <D.32154>:
  index.391 = (void *) index;
  monoeg_g_hash_table_insert_replace (nspace_table, name, index.391, 0);
  mono_image_unlock (image);
}


mono_class_from_name_case (struct MonoImage * image, const char * name_space, const char * name)
{
  unsigned char D.32157;
  unsigned char D.32158;
  struct GHashTable * D.32161;
  void * D.32164;
  struct MonoClass * D.32171;
  unsigned int D.32172;
  unsigned int D.32173;
  int D.32174;
  unsigned int D.32175;
  unsigned int D.32176;
  unsigned int D.32179;
  unsigned int D.32180;
  int D.32181;
  int D.32184;
  unsigned int D.32187;
  <unnamed-unsigned:24> D.32188;
  unsigned int D.32189;
  struct MonoTableInfo * t;
  guint32 cols[6];
  const char * n;
  const char * nspace;
  guint32 i;
  guint32 visib;

  try
    {
      t = &image->tables[2];
      D.32157 = BIT_FIELD_REF <*image, 8, 128>;
      D.32158 = D.32157 & 8;
      if (D.32158 != 0) goto <D.32159>; else goto <D.32160>;
      <D.32159>:
      {
        guint32 token;
        struct FindUserData user_data;

        try
          {
            token = 0;
            mono_image_lock (image);
            D.32161 = image->name_cache;
            if (D.32161 == 0B) goto <D.32162>; else goto <D.32163>;
            <D.32162>:
            mono_image_init_name_cache (image);
            <D.32163>:
            user_data.key = name_space;
            user_data.value = 0B;
            D.32161 = image->name_cache;
            monoeg_g_hash_table_foreach (D.32161, find_nocase, &user_data);
            D.32164 = user_data.value;
            if (D.32164 != 0B) goto <D.32165>; else goto <D.32166>;
            <D.32165>:
            {
              struct GHashTable * nspace_table;

              nspace_table = user_data.value;
              user_data.key = name;
              user_data.value = 0B;
              monoeg_g_hash_table_foreach (nspace_table, find_nocase, &user_data);
              D.32164 = user_data.value;
              if (D.32164 != 0B) goto <D.32167>; else goto <D.32168>;
              <D.32167>:
              D.32164 = user_data.value;
              token = (guint32) D.32164;
              <D.32168>:
            }
            <D.32166>:
            mono_image_unlock (image);
            if (token != 0) goto <D.32169>; else goto <D.32170>;
            <D.32169>:
            D.32172 = token | 33554432;
            D.32171 = mono_class_get (image, D.32172);
            return D.32171;
            <D.32170>:
            D.32171 = 0B;
            return D.32171;
          }
        finally
          {
            user_data = {CLOBBER};
          }
      }
      <D.32160>:
      i = 1;
      goto <D.23457>;
      <D.23456>:
      D.32173 = i + 4294967295;
      D.32174 = (int) D.32173;
      mono_metadata_decode_row (t, D.32174, &cols, 6);
      D.32175 = cols[0];
      visib = D.32175 & 7;
      D.32176 = visib + 4294967294;
      if (D.32176 <= 5) goto <D.32177>; else goto <D.32178>;
      <D.32177>:
      // predicted unlikely by continue predictor.
      goto <D.23455>;
      <D.32178>:
      D.32179 = cols[1];
      n = mono_metadata_string_heap (image, D.32179);
      D.32180 = cols[2];
      nspace = mono_metadata_string_heap (image, D.32180);
      D.32181 = monoeg_ascii_strcasecmp (n, name);
      if (D.32181 == 0) goto <D.32182>; else goto <D.32183>;
      <D.32182>:
      D.32184 = monoeg_ascii_strcasecmp (nspace, name_space);
      if (D.32184 == 0) goto <D.32185>; else goto <D.32186>;
      <D.32185>:
      D.32187 = i | 33554432;
      D.32171 = mono_class_get (image, D.32187);
      return D.32171;
      <D.32186>:
      <D.32183>:
      <D.23455>:
      i = i + 1;
      <D.23457>:
      D.32188 = t->rows;
      D.32189 = (unsigned int) D.32188;
      if (D.32189 >= i) goto <D.23456>; else goto <D.23458>;
      <D.23458>:
      D.32171 = 0B;
      return D.32171;
    }
  finally
    {
      cols = {CLOBBER};
    }
}


find_nocase (void * key, void * value, void * user_data)
{
  void * D.32193;
  const void * D.32196;
  int D.32197;
  char * name;
  struct FindUserData * data;

  name = key;
  data = user_data;
  D.32193 = data->value;
  if (D.32193 == 0B) goto <D.32194>; else goto <D.32195>;
  <D.32194>:
  D.32196 = data->key;
  D.32197 = monoeg_ascii_strcasecmp (name, D.32196);
  if (D.32197 == 0) goto <D.32198>; else goto <D.32199>;
  <D.32198>:
  data->value = value;
  <D.32199>:
  <D.32195>:
}


mono_class_from_name (struct MonoImage * image, const char * name_space, const char * name)
{
  int nested.392;
  int name.393;
  unsigned int D.32204;
  struct MonoClass * D.32207;
  int D.32208;
  unsigned int D.32209;
  sizetype pos.394;
  sizetype D.32211;
  gboolean (*<T28c1>) (struct MonoImage *, const char *, const char *, struct MonoClass * *) get_class_from_name.395;
  unsigned int D.32215;
  unsigned int D.32216;
  struct MonoClass * class.396;
  struct MonoClass * class.397;
  struct MonoClass * iftmp.398;
  struct GHashTable * D.32231;
  void * D.32236;
  unsigned char D.32239;
  unsigned char D.32240;
  struct MonoImage * * D.32243;
  unsigned int i.399;
  unsigned int D.32247;
  struct MonoImage * * D.32248;
  struct MonoClass * class.400;
  unsigned int i.401;
  unsigned int D.32253;
  struct MonoClass * class.402;
  unsigned int D.32261;
  unsigned int D.32264;
  int D.32265;
  unsigned int D.32266;
  struct MonoAssembly * D.32269;
  unsigned int D.32270;
  struct MonoClass * class.403;
  unsigned int D.32278;
  int D.32279;
  struct MonoAssembly * * D.32280;
  sizetype D.32281;
  sizetype D.32282;
  struct MonoAssembly * * D.32283;
  struct MonoAssembly * D.32284;
  _Bool D.32285;
  long int D.32286;
  long int D.32287;
  struct MonoImage * D.32292;
  struct MonoClass * class.404;
  struct GHashTable * nspace_table;
  struct MonoImage * loaded_image;
  guint32 token;
  int i;
  struct MonoClass * class;
  char * nested;
  char buf[1024];

  try
    {
      token = 0;
      nested = __builtin_strchr (name, 47);
      if (nested != 0B) goto <D.32200>; else goto <D.32201>;
      <D.32200>:
      {
        int pos;
        int len;

        nested.392 = (int) nested;
        name.393 = (int) name;
        pos = nested.392 - name.393;
        D.32204 = strlen (name);
        len = (int) D.32204;
        if (len > 1023) goto <D.32205>; else goto <D.32206>;
        <D.32205>:
        D.32207 = 0B;
        return D.32207;
        <D.32206>:
        D.32208 = len + 1;
        D.32209 = (unsigned int) D.32208;
        memcpy (&buf, name, D.32209);
        buf[pos] = 0;
        pos.394 = (sizetype) pos;
        D.32211 = pos.394 + 1;
        nested = &buf + D.32211;
        name = &buf;
      }
      <D.32201>:
      get_class_from_name.395 = get_class_from_name;
      if (get_class_from_name.395 != 0B) goto <D.32213>; else goto <D.32214>;
      <D.32213>:
      D.32215 = BIT_FIELD_REF <*image, 32, 4576>;
      D.32216 = D.32215 & 16777215;
      if (D.32216 == 0) goto <D.32217>; else goto <D.32218>;
      <D.32217>:
      {
        gboolean res;

        get_class_from_name.395 = get_class_from_name;
        res = get_class_from_name.395 (image, name_space, name, &class);
        if (res != 0) goto <D.32219>; else goto <D.32220>;
        <D.32219>:
        class.396 = class;
        if (class.396 == 0B) goto <D.32222>; else goto <D.32223>;
        <D.32222>:
        class.397 = search_modules (image, name_space, name);
        class = class.397;
        <D.32223>:
        if (nested != 0B) goto <D.32225>; else goto <D.32226>;
        <D.32225>:
        class.396 = class;
        if (class.396 != 0B) goto <D.32228>; else goto <D.32229>;
        <D.32228>:
        class.396 = class;
        iftmp.398 = return_nested_in (class.396, nested);
        goto <D.32230>;
        <D.32229>:
        iftmp.398 = 0B;
        <D.32230>:
        D.32207 = iftmp.398;
        return D.32207;
        <D.32226>:
        D.32207 = class;
        return D.32207;
        <D.32220>:
      }
      <D.32218>:
      <D.32214>:
      mono_image_lock (image);
      D.32231 = image->name_cache;
      if (D.32231 == 0B) goto <D.32232>; else goto <D.32233>;
      <D.32232>:
      mono_image_init_name_cache (image);
      <D.32233>:
      D.32231 = image->name_cache;
      nspace_table = monoeg_g_hash_table_lookup (D.32231, name_space);
      if (nspace_table != 0B) goto <D.32234>; else goto <D.32235>;
      <D.32234>:
      D.32236 = monoeg_g_hash_table_lookup (nspace_table, name);
      token = (guint32) D.32236;
      <D.32235>:
      mono_image_unlock (image);
      if (token == 0) goto <D.32237>; else goto <D.32238>;
      <D.32237>:
      D.32239 = BIT_FIELD_REF <*image, 8, 128>;
      D.32240 = D.32239 & 8;
      if (D.32240 != 0) goto <D.32241>; else goto <D.32242>;
      <D.32241>:
      D.32243 = image->modules;
      if (D.32243 != 0B) goto <D.32244>; else goto <D.32245>;
      <D.32244>:
      i = 0;
      goto <D.23509>;
      <D.23508>:
      {
        struct MonoImage * module;

        D.32243 = image->modules;
        i.399 = (unsigned int) i;
        D.32247 = i.399 * 4;
        D.32248 = D.32243 + D.32247;
        module = *D.32248;
        class.400 = mono_class_from_name (module, name_space, name);
        class = class.400;
        class.396 = class;
        if (class.396 != 0B) goto <D.32250>; else goto <D.32251>;
        <D.32250>:
        D.32207 = class;
        return D.32207;
        <D.32251>:
      }
      i = i + 1;
      <D.23509>:
      i.401 = (unsigned int) i;
      D.32253 = image->module_count;
      if (i.401 < D.32253) goto <D.23508>; else goto <D.23510>;
      <D.23510>:
      <D.32245>:
      <D.32242>:
      <D.32238>:
      if (token == 0) goto <D.32254>; else goto <D.32255>;
      <D.32254>:
      class.402 = search_modules (image, name_space, name);
      class = class.402;
      class.396 = class;
      if (class.396 != 0B) goto <D.32257>; else goto <D.32258>;
      <D.32257>:
      D.32207 = class;
      return D.32207;
      <D.32258>:
      <D.32255>:
      if (token == 0) goto <D.32259>; else goto <D.32260>;
      <D.32259>:
      D.32207 = 0B;
      return D.32207;
      <D.32260>:
      D.32261 = token >> 24;
      if (D.32261 == 39) goto <D.32262>; else goto <D.32263>;
      <D.32262>:
      {
        struct MonoTableInfo * t;
        guint32 cols[5];
        guint32 idx;
        guint32 impl;

        try
          {
            t = &image->tables[39];
            idx = token & 16777215;
            D.32264 = idx + 4294967295;
            D.32265 = (int) D.32264;
            mono_metadata_decode_row (t, D.32265, &cols, 5);
            impl = cols[4];
            D.32266 = impl & 3;
            if (D.32266 == 0) goto <D.32267>; else goto <D.32268>;
            <D.32267>:
            D.32269 = image->assembly;
            D.32270 = impl >> 2;
            loaded_image = mono_assembly_load_module (D.32269, D.32270);
            if (loaded_image == 0B) goto <D.32271>; else goto <D.32272>;
            <D.32271>:
            D.32207 = 0B;
            return D.32207;
            <D.32272>:
            class.403 = mono_class_from_name (loaded_image, name_space, name);
            class = class.403;
            if (nested != 0B) goto <D.32274>; else goto <D.32275>;
            <D.32274>:
            class.396 = class;
            D.32207 = return_nested_in (class.396, nested);
            return D.32207;
            <D.32275>:
            D.32207 = class;
            return D.32207;
            <D.32268>:
            D.32266 = impl & 3;
            if (D.32266 == 1) goto <D.32276>; else goto <D.32277>;
            <D.32276>:
            {
              guint32 assembly_idx;

              assembly_idx = impl >> 2;
              D.32278 = assembly_idx + 4294967295;
              D.32279 = (int) D.32278;
              mono_assembly_load_reference (image, D.32279);
              D.32280 = image->references;
              D.32281 = assembly_idx + 1073741823;
              D.32282 = D.32281 * 4;
              D.32283 = D.32280 + D.32282;
              D.32284 = *D.32283;
              D.32285 = D.32284 == 0B;
              D.32286 = (long int) D.32285;
              D.32287 = __builtin_expect (D.32286, 0);
              if (D.32287 != 0) goto <D.32288>; else goto <D.32289>;
              <D.32288>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 7552, "image->references [assembly_idx - 1]");
              <D.32289>:
              D.32280 = image->references;
              D.32281 = assembly_idx + 1073741823;
              D.32282 = D.32281 * 4;
              D.32283 = D.32280 + D.32282;
              D.32284 = *D.32283;
              if (D.32284 == 4294967295B) goto <D.32290>; else goto <D.32291>;
              <D.32290>:
              D.32207 = 0B;
              return D.32207;
              <D.32291>:
              D.32280 = image->references;
              D.32281 = assembly_idx + 1073741823;
              D.32282 = D.32281 * 4;
              D.32283 = D.32280 + D.32282;
              D.32284 = *D.32283;
              D.32292 = D.32284->image;
              D.32207 = mono_class_from_name (D.32292, name_space, name);
              return D.32207;
            }
            <D.32277>:
            monoeg_g_log (0B, 4, "not yet implemented");
            <D.23516>:
            goto <D.23516>;
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      <D.32263>:
      token = token | 33554432;
      class.404 = mono_class_get (image, token);
      class = class.404;
      if (nested != 0B) goto <D.32294>; else goto <D.32295>;
      <D.32294>:
      class.396 = class;
      D.32207 = return_nested_in (class.396, nested);
      return D.32207;
      <D.32295>:
      D.32207 = class;
      return D.32207;
    }
  finally
    {
      class = {CLOBBER};
      buf = {CLOBBER};
    }
}


search_modules (struct MonoImage * image, const char * name_space, const char * name)
{
  unsigned int D.32299;
  int D.32302;
  struct MonoClass * D.32307;
  <unnamed-unsigned:24> D.32308;
  int D.32309;
  struct MonoTableInfo * file_table;
  struct MonoImage * file_image;
  struct MonoClass * class;
  int i;

  file_table = &image->tables[38];
  i = 0;
  goto <D.23490>;
  <D.23489>:
  {
    guint32 cols[3];

    try
      {
        mono_metadata_decode_row (file_table, i, &cols, 3);
        D.32299 = cols[0];
        if (D.32299 == 1) goto <D.32300>; else goto <D.32301>;
        <D.32300>:
        // predicted unlikely by continue predictor.
        goto <D.23488>;
        <D.32301>:
        D.32302 = i + 1;
        file_image = mono_image_load_file_for_image (image, D.32302);
        if (file_image != 0B) goto <D.32303>; else goto <D.32304>;
        <D.32303>:
        class = mono_class_from_name (file_image, name_space, name);
        if (class != 0B) goto <D.32305>; else goto <D.32306>;
        <D.32305>:
        D.32307 = class;
        return D.32307;
        <D.32306>:
        <D.32304>:
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  <D.23488>:
  i = i + 1;
  <D.23490>:
  D.32308 = file_table->rows;
  D.32309 = (int) D.32308;
  if (D.32309 > i) goto <D.23489>; else goto <D.23491>;
  <D.23491>:
  D.32307 = 0B;
  return D.32307;
}


return_nested_in (struct MonoClass * class, char * nested)
{
  int D.23474;
  const char * D.32316;
  struct MonoClass * D.32321;
  struct MonoClass * found;
  char * s;
  void * iter;

  try
    {
      s = __builtin_strchr (nested, 47);
      iter = 0B;
      if (s != 0B) goto <D.32314>; else goto <D.32315>;
      <D.32314>:
      *s = 0;
      s = s + 1;
      <D.32315>:
      goto <D.23476>;
      <D.23475>:
      {
        size_t __s1_len;
        size_t __s2_len;

        D.32316 = found->name;
        D.23474 = __builtin_strcmp (D.32316, nested);
      }
      if (D.23474 == 0) goto <D.32317>; else goto <D.32318>;
      <D.32317>:
      if (s != 0B) goto <D.32319>; else goto <D.32320>;
      <D.32319>:
      D.32321 = return_nested_in (found, s);
      return D.32321;
      <D.32320>:
      D.32321 = found;
      return D.32321;
      <D.32318>:
      <D.23476>:
      found = mono_class_get_nested_types (class, &iter);
      if (found != 0B) goto <D.23475>; else goto <D.23477>;
      <D.23477>:
      D.32321 = 0B;
      return D.32321;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


mono_class_is_subclass_of (struct MonoClass * klass, struct MonoClass * klassc, gboolean check_interfaces)
{
  unsigned int D.32328;
  unsigned int D.32329;
  unsigned char D.32331;
  unsigned int D.32333;
  unsigned int D.32334;
  unsigned char D.32336;
  short unsigned int D.32339;
  short unsigned int D.32340;
  guint8 * D.32343;
  short unsigned int D.32344;
  sizetype D.32345;
  guint8 * D.32346;
  unsigned char D.32347;
  int D.32348;
  int D.32349;
  int D.32350;
  int D.32351;
  int D.32352;
  mono_bool D.32355;
  struct MonoClass * * D.32365;
  unsigned int i.405;
  unsigned int D.32367;
  struct MonoClass * * D.32368;
  short unsigned int D.32371;
  int D.32372;
  int D.32379;
  struct MonoClass * D.32382;

  if (check_interfaces != 0) goto <D.32327>; else goto <D.32324>;
  <D.32327>:
  D.32328 = klassc->flags;
  D.32329 = D.32328 & 32;
  if (D.32329 != 0) goto <D.32325>; else goto <D.32330>;
  <D.32330>:
  D.32331 = klassc->byval_arg.type;
  if (D.32331 == 19) goto <D.32325>; else goto <D.32332>;
  <D.32332>:
  D.32331 = klassc->byval_arg.type;
  if (D.32331 == 30) goto <D.32325>; else goto <D.32324>;
  <D.32325>:
  D.32333 = klass->flags;
  D.32334 = D.32333 & 32;
  if (D.32334 == 0) goto <D.32335>; else goto <D.32324>;
  <D.32335>:
  D.32336 = klass->byval_arg.type;
  if (D.32336 != 19) goto <D.32337>; else goto <D.32324>;
  <D.32337>:
  D.32336 = klass->byval_arg.type;
  if (D.32336 != 30) goto <D.32338>; else goto <D.32324>;
  <D.32338>:
  D.32339 = klassc->interface_id;
  D.32340 = klass->max_interface_id;
  if (D.32339 <= D.32340) goto <D.32341>; else goto <D.32342>;
  <D.32341>:
  D.32343 = klass->interface_bitmap;
  D.32339 = klassc->interface_id;
  D.32344 = D.32339 >> 3;
  D.32345 = (sizetype) D.32344;
  D.32346 = D.32343 + D.32345;
  D.32347 = *D.32346;
  D.32348 = (int) D.32347;
  D.32339 = klassc->interface_id;
  D.32349 = (int) D.32339;
  D.32350 = D.32349 & 7;
  D.32351 = D.32348 >> D.32350;
  D.32352 = D.32351 & 1;
  if (D.32352 != 0) goto <D.32353>; else goto <D.32354>;
  <D.32353>:
  D.32355 = 1;
  return D.32355;
  <D.32354>:
  <D.32342>:
  goto <D.32326>;
  <D.32324>:
  if (check_interfaces != 0) goto <D.32360>; else goto <D.32356>;
  <D.32360>:
  D.32328 = klassc->flags;
  D.32329 = D.32328 & 32;
  if (D.32329 != 0) goto <D.32357>; else goto <D.32361>;
  <D.32361>:
  D.32331 = klassc->byval_arg.type;
  if (D.32331 == 19) goto <D.32357>; else goto <D.32362>;
  <D.32362>:
  D.32331 = klassc->byval_arg.type;
  if (D.32331 == 30) goto <D.32357>; else goto <D.32356>;
  <D.32357>:
  D.32333 = klass->flags;
  D.32334 = D.32333 & 32;
  if (D.32334 != 0) goto <D.32358>; else goto <D.32363>;
  <D.32363>:
  D.32336 = klass->byval_arg.type;
  if (D.32336 == 19) goto <D.32358>; else goto <D.32364>;
  <D.32364>:
  D.32336 = klass->byval_arg.type;
  if (D.32336 == 30) goto <D.32358>; else goto <D.32356>;
  <D.32358>:
  {
    int i;

    i = 0;
    goto <D.23525>;
    <D.23524>:
    {
      struct MonoClass * ic;

      D.32365 = klass->interfaces;
      i.405 = (unsigned int) i;
      D.32367 = i.405 * 4;
      D.32368 = D.32365 + D.32367;
      ic = *D.32368;
      if (ic == klassc) goto <D.32369>; else goto <D.32370>;
      <D.32369>:
      D.32355 = 1;
      return D.32355;
      <D.32370>:
    }
    i = i + 1;
    <D.23525>:
    D.32371 = klass->interface_count;
    D.32372 = (int) D.32371;
    if (D.32372 > i) goto <D.23524>; else goto <D.23526>;
    <D.23526>:
  }
  goto <D.32359>;
  <D.32356>:
  D.32333 = klass->flags;
  D.32334 = D.32333 & 32;
  if (D.32334 == 0) goto <D.32373>; else goto <D.32374>;
  <D.32373>:
  D.32336 = klass->byval_arg.type;
  if (D.32336 != 19) goto <D.32375>; else goto <D.32376>;
  <D.32375>:
  D.32336 = klass->byval_arg.type;
  if (D.32336 != 30) goto <D.32377>; else goto <D.32378>;
  <D.32377>:
  D.32379 = mono_class_has_parent (klass, klassc);
  if (D.32379 != 0) goto <D.32380>; else goto <D.32381>;
  <D.32380>:
  D.32355 = 1;
  return D.32355;
  <D.32381>:
  <D.32378>:
  <D.32376>:
  <D.32374>:
  <D.32359>:
  <D.32326>:
  D.32382 = mono_defaults.object_class;
  if (D.32382 == klassc) goto <D.32383>; else goto <D.32384>;
  <D.32383>:
  D.32355 = 1;
  return D.32355;
  <D.32384>:
  D.32355 = 0;
  return D.32355;
}


mono_class_has_parent (struct MonoClass * klass, struct MonoClass * parent)
{
  struct MonoClass * * D.32386;
  _Bool D.32387;
  long int D.32388;
  long int D.32389;
  struct MonoClass * * D.32392;
  _Bool D.32393;
  long int D.32394;
  long int D.32395;
  gboolean D.32398;

  D.32386 = klass->supertypes;
  D.32387 = D.32386 == 0B;
  D.32388 = (long int) D.32387;
  D.32389 = __builtin_expect (D.32388, 0);
  if (D.32389 != 0) goto <D.32390>; else goto <D.32391>;
  <D.32390>:
  mono_class_setup_supertypes (klass);
  <D.32391>:
  D.32392 = parent->supertypes;
  D.32393 = D.32392 == 0B;
  D.32394 = (long int) D.32393;
  D.32395 = __builtin_expect (D.32394, 0);
  if (D.32395 != 0) goto <D.32396>; else goto <D.32397>;
  <D.32396>:
  mono_class_setup_supertypes (parent);
  <D.32397>:
  D.32398 = mono_class_has_parent_fast (klass, parent);
  return D.32398;
}


mono_class_has_parent_fast (struct MonoClass * klass, struct MonoClass * parent)
{
  gboolean D.32400;
  int iftmp.406;
  short unsigned int D.32404;
  short unsigned int D.32405;
  struct MonoClass * * D.32407;
  sizetype D.32408;
  sizetype D.32409;
  sizetype D.32410;
  struct MonoClass * * D.32411;
  struct MonoClass * D.32412;

  D.32404 = klass->idepth;
  D.32405 = parent->idepth;
  if (D.32404 >= D.32405) goto <D.32406>; else goto <D.32402>;
  <D.32406>:
  D.32407 = klass->supertypes;
  D.32405 = parent->idepth;
  D.32408 = (sizetype) D.32405;
  D.32409 = D.32408 + 1073741823;
  D.32410 = D.32409 * 4;
  D.32411 = D.32407 + D.32410;
  D.32412 = *D.32411;
  if (D.32412 == parent) goto <D.32413>; else goto <D.32402>;
  <D.32413>:
  iftmp.406 = 1;
  goto <D.32403>;
  <D.32402>:
  iftmp.406 = 0;
  <D.32403>:
  D.32400 = iftmp.406;
  return D.32400;
}


mono_class_has_variant_generic_params (struct MonoClass * klass)
{
  struct MonoGenericClass * D.32415;
  gboolean D.32418;
  struct MonoClass * D.32419;
  struct MonoGenericParamFull * D.32420;
  unsigned int i.407;
  unsigned int D.32422;
  struct MonoGenericParamFull * D.32423;
  short unsigned int D.32424;
  int D.32425;
  int D.32426;
  <unnamed-signed:31> D.32429;
  int D.32430;
  int i;
  struct MonoGenericContainer * container;

  D.32415 = klass->generic_class;
  if (D.32415 == 0B) goto <D.32416>; else goto <D.32417>;
  <D.32416>:
  D.32418 = 0;
  return D.32418;
  <D.32417>:
  D.32415 = klass->generic_class;
  D.32419 = D.32415->container_class;
  container = D.32419->generic_container;
  i = 0;
  goto <D.23536>;
  <D.23535>:
  D.32420 = container->type_params;
  i.407 = (unsigned int) i;
  D.32422 = i.407 * 32;
  D.32423 = D.32420 + D.32422;
  D.32424 = D.32423->info.flags;
  D.32425 = (int) D.32424;
  D.32426 = D.32425 & 3;
  if (D.32426 != 0) goto <D.32427>; else goto <D.32428>;
  <D.32427>:
  D.32418 = 1;
  return D.32418;
  <D.32428>:
  i = i + 1;
  <D.23536>:
  D.32429 = container->type_argc;
  D.32430 = (int) D.32429;
  if (D.32430 > i) goto <D.23535>; else goto <D.23537>;
  <D.23537>:
  D.32418 = 0;
  return D.32418;
}


mono_class_is_variant_compatible (struct MonoClass * klass, struct MonoClass * oklass, gboolean check_for_reference_conv)
{
  gboolean D.32434;
  struct MonoClass * D.32437;
  struct MonoGenericClass * D.32439;
  struct MonoGenericInst * D.32440;
  struct MonoGenericClass * D.32441;
  struct MonoGenericInst * D.32442;
  unsigned int j.408;
  unsigned int D.32444;
  struct MonoType * * D.32445;
  struct MonoType * D.32446;
  struct MonoType * * D.32447;
  struct MonoType * D.32448;
  unsigned char D.32451;
  unsigned char D.32452;
  unsigned char D.32453;
  unsigned char D.32454;
  unsigned char D.32456;
  struct MonoGenericParamFull * D.32460;
  unsigned int D.32461;
  struct MonoGenericParamFull * D.32462;
  short unsigned int D.32463;
  int D.32464;
  int D.32465;
  int D.32468;
  int D.32472;
  int D.32475;
  <unnamed-signed:31> D.32479;
  int D.32480;
  int j;
  struct MonoType * * klass_argv;
  struct MonoType * * oklass_argv;
  struct MonoClass * klass_gtd;
  struct MonoGenericContainer * container;

  klass_gtd = mono_class_get_generic_type_definition (klass);
  container = klass_gtd->generic_container;
  if (klass == oklass) goto <D.32432>; else goto <D.32433>;
  <D.32432>:
  D.32434 = 1;
  return D.32434;
  <D.32433>:
  D.32437 = mono_class_get_generic_type_definition (oklass);
  if (D.32437 != klass_gtd) goto <D.32435>; else goto <D.32438>;
  <D.32438>:
  if (oklass == klass_gtd) goto <D.32435>; else goto <D.32436>;
  <D.32435>:
  D.32434 = 0;
  return D.32434;
  <D.32436>:
  D.32439 = klass->generic_class;
  D.32440 = D.32439->context.class_inst;
  klass_argv = &D.32440->type_argv[0];
  D.32441 = oklass->generic_class;
  D.32442 = D.32441->context.class_inst;
  oklass_argv = &D.32442->type_argv[0];
  j = 0;
  goto <D.23558>;
  <D.23557>:
  {
    struct MonoClass * param1_class;
    struct MonoClass * param2_class;

    j.408 = (unsigned int) j;
    D.32444 = j.408 * 4;
    D.32445 = klass_argv + D.32444;
    D.32446 = *D.32445;
    param1_class = mono_class_from_mono_type (D.32446);
    j.408 = (unsigned int) j;
    D.32444 = j.408 * 4;
    D.32447 = oklass_argv + D.32444;
    D.32448 = *D.32447;
    param2_class = mono_class_from_mono_type (D.32448);
    D.32451 = BIT_FIELD_REF <*param1_class, 8, 160>;
    D.32452 = BIT_FIELD_REF <*param2_class, 8, 160>;
    D.32453 = D.32451 ^ D.32452;
    D.32454 = D.32453 & 8;
    if (D.32454 != 0) goto <D.32449>; else goto <D.32455>;
    <D.32455>:
    D.32451 = BIT_FIELD_REF <*param1_class, 8, 160>;
    D.32456 = D.32451 & 8;
    if (D.32456 != 0) goto <D.32457>; else goto <D.32450>;
    <D.32457>:
    if (param1_class != param2_class) goto <D.32449>; else goto <D.32450>;
    <D.32449>:
    D.32434 = 0;
    return D.32434;
    <D.32450>:
    if (param1_class != param2_class) goto <D.32458>; else goto <D.32459>;
    <D.32458>:
    D.32460 = container->type_params;
    j.408 = (unsigned int) j;
    D.32461 = j.408 * 32;
    D.32462 = D.32460 + D.32461;
    D.32463 = D.32462->info.flags;
    D.32464 = (int) D.32463;
    D.32465 = D.32464 & 1;
    if (D.32465 != 0) goto <D.32466>; else goto <D.32467>;
    <D.32466>:
    D.32468 = mono_gparam_is_reference_conversible (param1_class, param2_class, check_for_reference_conv);
    if (D.32468 == 0) goto <D.32469>; else goto <D.32470>;
    <D.32469>:
    D.32434 = 0;
    return D.32434;
    <D.32470>:
    goto <D.32471>;
    <D.32467>:
    D.32460 = container->type_params;
    j.408 = (unsigned int) j;
    D.32461 = j.408 * 32;
    D.32462 = D.32460 + D.32461;
    D.32463 = D.32462->info.flags;
    D.32464 = (int) D.32463;
    D.32472 = D.32464 & 2;
    if (D.32472 != 0) goto <D.32473>; else goto <D.32474>;
    <D.32473>:
    D.32475 = mono_gparam_is_reference_conversible (param2_class, param1_class, check_for_reference_conv);
    if (D.32475 == 0) goto <D.32476>; else goto <D.32477>;
    <D.32476>:
    D.32434 = 0;
    return D.32434;
    <D.32477>:
    goto <D.32478>;
    <D.32474>:
    D.32434 = 0;
    return D.32434;
    <D.32478>:
    <D.32471>:
    <D.32459>:
  }
  j = j + 1;
  <D.23558>:
  D.32479 = container->type_argc;
  D.32480 = (int) D.32479;
  if (D.32480 > j) goto <D.23557>; else goto <D.23559>;
  <D.23559>:
  D.32434 = 1;
  return D.32434;
}


mono_gparam_is_reference_conversible (struct MonoClass * target, struct MonoClass * candidate, gboolean check_for_reference_conv)
{
  gboolean D.32484;
  struct MonoType * D.32487;
  int D.32488;
  struct MonoType * D.32491;
  int D.32492;
  struct MonoGenericParamInfo * iftmp.409;
  struct MonoGenericContainer * D.32496;
  short unsigned int D.32503;
  int D.32504;
  int D.32505;
  int D.32506;

  if (target == candidate) goto <D.32482>; else goto <D.32483>;
  <D.32482>:
  D.32484 = 1;
  return D.32484;
  <D.32483>:
  if (check_for_reference_conv != 0) goto <D.32485>; else goto <D.32486>;
  <D.32485>:
  D.32487 = &target->byval_arg;
  D.32488 = mono_type_is_generic_argument (D.32487);
  if (D.32488 != 0) goto <D.32489>; else goto <D.32490>;
  <D.32489>:
  D.32491 = &candidate->byval_arg;
  D.32492 = mono_type_is_generic_argument (D.32491);
  if (D.32492 != 0) goto <D.32493>; else goto <D.32494>;
  <D.32493>:
  {
    struct MonoGenericParam * gparam;
    struct MonoGenericParamInfo * pinfo;

    gparam = candidate->byval_arg.data.generic_param;
    D.32496 = gparam->owner;
    if (D.32496 != 0B) goto <D.32497>; else goto <D.32498>;
    <D.32497>:
    iftmp.409 = &MEM[(struct MonoGenericParamFull *)gparam].info;
    goto <D.32499>;
    <D.32498>:
    iftmp.409 = 0B;
    <D.32499>:
    pinfo = iftmp.409;
    if (pinfo == 0B) goto <D.32500>; else goto <D.32502>;
    <D.32502>:
    D.32503 = pinfo->flags;
    D.32504 = (int) D.32503;
    D.32505 = D.32504 & 4;
    if (D.32505 == 0) goto <D.32500>; else goto <D.32501>;
    <D.32500>:
    D.32484 = 0;
    return D.32484;
    <D.32501>:
  }
  <D.32494>:
  <D.32490>:
  <D.32486>:
  D.32506 = mono_class_is_assignable_from (target, candidate);
  if (D.32506 == 0) goto <D.32507>; else goto <D.32508>;
  <D.32507>:
  D.32484 = 0;
  return D.32484;
  <D.32508>:
  D.32484 = 1;
  return D.32484;
}


mono_type_is_generic_argument (struct MonoType * type)
{
  gboolean D.32510;
  unsigned char D.32511;
  _Bool D.32512;
  _Bool D.32513;
  _Bool D.32514;

  D.32511 = type->type;
  D.32512 = D.32511 == 19;
  D.32513 = D.32511 == 30;
  D.32514 = D.32512 | D.32513;
  D.32510 = (gboolean) D.32514;
  return D.32510;
}


mono_class_is_assignable_from (struct MonoClass * klass, struct MonoClass * oklass)
{
  unsigned char D.32516;
  unsigned char D.32517;
  unsigned char D.32520;
  unsigned char D.32521;
  unsigned char D.32526;
  unsigned char D.32528;
  mono_bool D.32529;
  struct MonoType * D.32530;
  int D.32531;
  struct MonoType * D.32534;
  int D.32535;
  unsigned int D.32540;
  unsigned int D.32541;
  unsigned char D.32543;
  unsigned char D.32545;
  _Bool D.32546;
  _Bool D.32547;
  _Bool D.32548;
  struct MonoGenericContainer * D.32551;
  struct MonoGenericParamFull * D.32552;
  short unsigned int D.32553;
  unsigned int D.32554;
  unsigned int D.32555;
  struct MonoGenericParamFull * D.32556;
  unsigned int i.410;
  unsigned int D.32560;
  struct MonoClass * * D.32561;
  struct MonoClass * D.32562;
  int D.32563;
  unsigned int D.32566;
  guint8 * D.32569;
  short unsigned int D.32574;
  short unsigned int D.32575;
  short unsigned int D.32578;
  sizetype D.32579;
  guint8 * D.32580;
  unsigned char D.32581;
  int D.32582;
  int D.32583;
  int D.32584;
  int D.32585;
  int D.32586;
  int D.32589;
  int D.32592;
  struct MonoClass * * D.32595;
  unsigned int i.411;
  unsigned int D.32597;
  struct MonoClass * * D.32598;
  int D.32599;
  short unsigned int D.32602;
  int D.32603;
  unsigned char D.32604;
  unsigned char D.32605;
  int D.32608;
  int D.32611;
  unsigned char D.32615;
  unsigned char D.32618;
  unsigned char D.32621;
  unsigned char D.32624;
  unsigned char D.32625;
  struct MonoClass * D.32630;
  struct MonoClass * D.32632;
  struct MonoClass * D.32634;
  struct MonoClass * D.32635;
  struct MonoClass * D.32636;
  int D.32637;
  int D.32640;

  D.32516 = BIT_FIELD_REF <*klass, 8, 160>;
  D.32517 = D.32516 & 1;
  if (D.32517 == 0) goto <D.32518>; else goto <D.32519>;
  <D.32518>:
  mono_class_init (klass);
  <D.32519>:
  D.32520 = BIT_FIELD_REF <*oklass, 8, 160>;
  D.32521 = D.32520 & 1;
  if (D.32521 == 0) goto <D.32522>; else goto <D.32523>;
  <D.32522>:
  mono_class_init (oklass);
  <D.32523>:
  D.32526 = klass->exception_type;
  if (D.32526 != 0) goto <D.32524>; else goto <D.32527>;
  <D.32527>:
  D.32528 = oklass->exception_type;
  if (D.32528 != 0) goto <D.32524>; else goto <D.32525>;
  <D.32524>:
  D.32529 = 0;
  return D.32529;
  <D.32525>:
  D.32530 = &klass->byval_arg;
  D.32531 = mono_type_is_generic_argument (D.32530);
  if (D.32531 != 0) goto <D.32532>; else goto <D.32533>;
  <D.32532>:
  D.32534 = &oklass->byval_arg;
  D.32535 = mono_type_is_generic_argument (D.32534);
  if (D.32535 == 0) goto <D.32536>; else goto <D.32537>;
  <D.32536>:
  D.32529 = 0;
  return D.32529;
  <D.32537>:
  D.32529 = mono_gparam_is_assignable_from (klass, oklass);
  return D.32529;
  <D.32533>:
  D.32540 = klass->flags;
  D.32541 = D.32540 & 32;
  if (D.32541 != 0) goto <D.32538>; else goto <D.32542>;
  <D.32542>:
  D.32543 = klass->byval_arg.type;
  if (D.32543 == 19) goto <D.32538>; else goto <D.32544>;
  <D.32544>:
  D.32543 = klass->byval_arg.type;
  if (D.32543 == 30) goto <D.32538>; else goto <D.32539>;
  <D.32538>:
  D.32545 = oklass->byval_arg.type;
  D.32546 = D.32545 == 19;
  D.32547 = D.32545 == 30;
  D.32548 = D.32546 | D.32547;
  if (D.32548 != 0) goto <D.32549>; else goto <D.32550>;
  <D.32549>:
  {
    struct MonoGenericParam * gparam;
    struct MonoClass * * constraints;
    int i;

    gparam = oklass->byval_arg.data.generic_param;
    D.32551 = gparam->owner;
    D.32552 = D.32551->type_params;
    D.32553 = gparam->num;
    D.32554 = (unsigned int) D.32553;
    D.32555 = D.32554 * 32;
    D.32556 = D.32552 + D.32555;
    constraints = D.32556->info.constraints;
    if (constraints != 0B) goto <D.32557>; else goto <D.32558>;
    <D.32557>:
    i = 0;
    goto <D.23599>;
    <D.23598>:
    i.410 = (unsigned int) i;
    D.32560 = i.410 * 4;
    D.32561 = constraints + D.32560;
    D.32562 = *D.32561;
    D.32563 = mono_class_is_assignable_from (klass, D.32562);
    if (D.32563 != 0) goto <D.32564>; else goto <D.32565>;
    <D.32564>:
    D.32529 = 1;
    return D.32529;
    <D.32565>:
    i = i + 1;
    <D.23599>:
    i.410 = (unsigned int) i;
    D.32560 = i.410 * 4;
    D.32561 = constraints + D.32560;
    D.32562 = *D.32561;
    if (D.32562 != 0B) goto <D.23598>; else goto <D.23600>;
    <D.23600>:
    <D.32558>:
    D.32529 = 0;
    return D.32529;
  }
  <D.32550>:
  D.32566 = oklass->ref_info_handle;
  if (D.32566 != 0) goto <D.32567>; else goto <D.32568>;
  <D.32567>:
  D.32569 = oklass->interface_bitmap;
  if (D.32569 == 0B) goto <D.32570>; else goto <D.32571>;
  <D.32570>:
  D.32529 = mono_reflection_call_is_assignable_to (oklass, klass);
  return D.32529;
  <D.32571>:
  <D.32568>:
  D.32569 = oklass->interface_bitmap;
  if (D.32569 == 0B) goto <D.32572>; else goto <D.32573>;
  <D.32572>:
  D.32529 = 0;
  return D.32529;
  <D.32573>:
  D.32574 = klass->interface_id;
  D.32575 = oklass->max_interface_id;
  if (D.32574 <= D.32575) goto <D.32576>; else goto <D.32577>;
  <D.32576>:
  D.32569 = oklass->interface_bitmap;
  D.32574 = klass->interface_id;
  D.32578 = D.32574 >> 3;
  D.32579 = (sizetype) D.32578;
  D.32580 = D.32569 + D.32579;
  D.32581 = *D.32580;
  D.32582 = (int) D.32581;
  D.32574 = klass->interface_id;
  D.32583 = (int) D.32574;
  D.32584 = D.32583 & 7;
  D.32585 = D.32582 >> D.32584;
  D.32586 = D.32585 & 1;
  if (D.32586 != 0) goto <D.32587>; else goto <D.32588>;
  <D.32587>:
  D.32529 = 1;
  return D.32529;
  <D.32588>:
  <D.32577>:
  D.32589 = mono_class_has_variant_generic_params (klass);
  if (D.32589 != 0) goto <D.32590>; else goto <D.32591>;
  <D.32590>:
  {
    struct MonoError error;
    int i;

    try
      {
        mono_class_setup_interfaces (oklass, &error);
        D.32592 = mono_error_ok (&error);
        if (D.32592 == 0) goto <D.32593>; else goto <D.32594>;
        <D.32593>:
        mono_error_cleanup (&error);
        D.32529 = 0;
        return D.32529;
        <D.32594>:
        i = 0;
        goto <D.23605>;
        <D.23604>:
        {
          struct MonoClass * iface;

          D.32595 = oklass->interfaces_packed;
          i.411 = (unsigned int) i;
          D.32597 = i.411 * 4;
          D.32598 = D.32595 + D.32597;
          iface = *D.32598;
          D.32599 = mono_class_is_variant_compatible (klass, iface, 0);
          if (D.32599 != 0) goto <D.32600>; else goto <D.32601>;
          <D.32600>:
          D.32529 = 1;
          return D.32529;
          <D.32601>:
        }
        i = i + 1;
        <D.23605>:
        D.32602 = oklass->interface_offsets_count;
        D.32603 = (int) D.32602;
        if (D.32603 > i) goto <D.23604>; else goto <D.23606>;
        <D.23606>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.32591>:
  D.32529 = 0;
  return D.32529;
  <D.32539>:
  D.32604 = BIT_FIELD_REF <*klass, 8, 184>;
  D.32605 = D.32604 & 1;
  if (D.32605 != 0) goto <D.32606>; else goto <D.32607>;
  <D.32606>:
  D.32608 = mono_class_has_variant_generic_params (klass);
  if (D.32608 != 0) goto <D.32609>; else goto <D.32610>;
  <D.32609>:
  D.32611 = mono_class_is_variant_compatible (klass, oklass, 0);
  if (D.32611 != 0) goto <D.32612>; else goto <D.32613>;
  <D.32612>:
  D.32529 = 1;
  return D.32529;
  <D.32613>:
  <D.32610>:
  goto <D.32614>;
  <D.32607>:
  D.32615 = klass->rank;
  if (D.32615 != 0) goto <D.32616>; else goto <D.32617>;
  <D.32616>:
  {
    struct MonoClass * eclass;
    struct MonoClass * eoclass;

    D.32618 = oklass->rank;
    D.32615 = klass->rank;
    if (D.32618 != D.32615) goto <D.32619>; else goto <D.32620>;
    <D.32619>:
    D.32529 = 0;
    return D.32529;
    <D.32620>:
    D.32621 = oklass->byval_arg.type;
    D.32543 = klass->byval_arg.type;
    if (D.32621 != D.32543) goto <D.32622>; else goto <D.32623>;
    <D.32622>:
    D.32529 = 0;
    return D.32529;
    <D.32623>:
    eclass = klass->cast_class;
    eoclass = oklass->cast_class;
    D.32624 = BIT_FIELD_REF <*eoclass, 8, 160>;
    D.32625 = D.32624 & 8;
    if (D.32625 != 0) goto <D.32626>; else goto <D.32627>;
    <D.32626>:
    D.32630 = mono_defaults.enum_class;
    if (D.32630 == eclass) goto <D.32628>; else goto <D.32631>;
    <D.32631>:
    D.32630 = mono_defaults.enum_class;
    D.32632 = D.32630->parent;
    if (D.32632 == eclass) goto <D.32628>; else goto <D.32633>;
    <D.32633>:
    D.32634 = mono_defaults.object_class;
    if (D.32634 == eclass) goto <D.32628>; else goto <D.32629>;
    <D.32628>:
    D.32529 = 0;
    return D.32529;
    <D.32629>:
    <D.32627>:
    D.32635 = klass->cast_class;
    D.32636 = oklass->cast_class;
    D.32529 = mono_class_is_assignable_from (D.32635, D.32636);
    return D.32529;
  }
  <D.32617>:
  D.32637 = mono_class_is_nullable (klass);
  if (D.32637 != 0) goto <D.32638>; else goto <D.32639>;
  <D.32638>:
  D.32640 = mono_class_is_nullable (oklass);
  if (D.32640 != 0) goto <D.32641>; else goto <D.32642>;
  <D.32641>:
  D.32635 = klass->cast_class;
  D.32636 = oklass->cast_class;
  D.32529 = mono_class_is_assignable_from (D.32635, D.32636);
  return D.32529;
  <D.32642>:
  D.32635 = klass->cast_class;
  D.32529 = mono_class_is_assignable_from (D.32635, oklass);
  return D.32529;
  <D.32639>:
  D.32634 = mono_defaults.object_class;
  if (D.32634 == klass) goto <D.32643>; else goto <D.32644>;
  <D.32643>:
  D.32529 = 1;
  return D.32529;
  <D.32644>:
  <D.32614>:
  D.32529 = mono_class_has_parent (oklass, klass);
  return D.32529;
}


mono_gparam_is_assignable_from (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.32650;
  unsigned char D.32651;
  unsigned char D.32652;
  struct MonoGenericParamInfo * iftmp.412;
  struct MonoGenericContainer * D.32656;
  struct MonoGenericParamInfo * iftmp.413;
  struct MonoGenericContainer * D.32661;
  short unsigned int D.32665;
  int D.32666;
  short unsigned int D.32667;
  int D.32668;
  struct MonoClass * * D.32669;
  struct MonoType * D.32674;
  int D.32675;
  unsigned int D.32677;
  unsigned int D.32678;
  unsigned char D.32680;
  int D.32683;
  struct MonoClass * D.32692;
  int D.32693;
  _Bool D.32694;
  int D.32695;
  int D.32696;
  _Bool D.32697;
  int D.32698;
  int D.32699;
  int D.32704;
  int D.32709;
  int D.32712;
  int D.32713;
  struct MonoClass * * D.32716;
  struct MonoType * D.32719;
  struct MonoType * D.32720;
  int D.32721;
  int D.32726;
  struct MonoType * D.32728;
  int D.32729;
  int D.32732;
  struct MonoClass * D.32736;
  int D.32739;
  struct MonoGenericParam * gparam;
  struct MonoGenericParam * ogparam;
  struct MonoGenericParamInfo * tinfo;
  struct MonoGenericParamInfo * cinfo;
  struct MonoClass * * candidate_class;
  gboolean class_constraint_satisfied;
  gboolean valuetype_constraint_satisfied;
  int tmask;
  int cmask;

  if (target == candidate) goto <D.32648>; else goto <D.32649>;
  <D.32648>:
  D.32650 = 1;
  return D.32650;
  <D.32649>:
  D.32651 = target->byval_arg.type;
  D.32652 = candidate->byval_arg.type;
  if (D.32651 != D.32652) goto <D.32653>; else goto <D.32654>;
  <D.32653>:
  D.32650 = 0;
  return D.32650;
  <D.32654>:
  gparam = target->byval_arg.data.generic_param;
  ogparam = candidate->byval_arg.data.generic_param;
  D.32656 = gparam->owner;
  if (D.32656 != 0B) goto <D.32657>; else goto <D.32658>;
  <D.32657>:
  iftmp.412 = &MEM[(struct MonoGenericParamFull *)gparam].info;
  goto <D.32659>;
  <D.32658>:
  iftmp.412 = 0B;
  <D.32659>:
  tinfo = iftmp.412;
  D.32661 = ogparam->owner;
  if (D.32661 != 0B) goto <D.32662>; else goto <D.32663>;
  <D.32662>:
  iftmp.413 = &MEM[(struct MonoGenericParamFull *)ogparam].info;
  goto <D.32664>;
  <D.32663>:
  iftmp.413 = 0B;
  <D.32664>:
  cinfo = iftmp.413;
  class_constraint_satisfied = 0;
  valuetype_constraint_satisfied = 0;
  D.32665 = tinfo->flags;
  D.32666 = (int) D.32665;
  tmask = D.32666 & 28;
  D.32667 = cinfo->flags;
  D.32668 = (int) D.32667;
  cmask = D.32668 & 28;
  D.32669 = cinfo->constraints;
  if (D.32669 != 0B) goto <D.32670>; else goto <D.32671>;
  <D.32670>:
  candidate_class = cinfo->constraints;
  goto <D.23575>;
  <D.23574>:
  {
    struct MonoClass * cc;

    cc = *candidate_class;
    D.32674 = &cc->byval_arg;
    D.32675 = mono_type_is_reference (D.32674);
    if (D.32675 != 0) goto <D.32676>; else goto <D.32672>;
    <D.32676>:
    D.32677 = cc->flags;
    D.32678 = D.32677 & 32;
    if (D.32678 == 0) goto <D.32679>; else goto <D.32672>;
    <D.32679>:
    D.32680 = cc->byval_arg.type;
    if (D.32680 != 19) goto <D.32681>; else goto <D.32672>;
    <D.32681>:
    D.32680 = cc->byval_arg.type;
    if (D.32680 != 30) goto <D.32682>; else goto <D.32672>;
    <D.32682>:
    class_constraint_satisfied = 1;
    goto <D.32673>;
    <D.32672>:
    D.32674 = &cc->byval_arg;
    D.32683 = mono_type_is_reference (D.32674);
    if (D.32683 == 0) goto <D.32684>; else goto <D.32685>;
    <D.32684>:
    D.32677 = cc->flags;
    D.32678 = D.32677 & 32;
    if (D.32678 == 0) goto <D.32686>; else goto <D.32687>;
    <D.32686>:
    D.32680 = cc->byval_arg.type;
    if (D.32680 != 19) goto <D.32688>; else goto <D.32689>;
    <D.32688>:
    D.32680 = cc->byval_arg.type;
    if (D.32680 != 30) goto <D.32690>; else goto <D.32691>;
    <D.32690>:
    valuetype_constraint_satisfied = 1;
    <D.32691>:
    <D.32689>:
    <D.32687>:
    <D.32685>:
    <D.32673>:
  }
  candidate_class = candidate_class + 4;
  <D.23575>:
  D.32692 = *candidate_class;
  if (D.32692 != 0B) goto <D.23574>; else goto <D.23576>;
  <D.23576>:
  <D.32671>:
  D.32693 = cmask & 4;
  D.32694 = D.32693 != 0;
  D.32695 = (int) D.32694;
  class_constraint_satisfied = D.32695 | class_constraint_satisfied;
  D.32696 = cmask & 8;
  D.32697 = D.32696 != 0;
  D.32698 = (int) D.32697;
  valuetype_constraint_satisfied = D.32698 | valuetype_constraint_satisfied;
  D.32699 = tmask & 4;
  if (D.32699 != 0) goto <D.32700>; else goto <D.32701>;
  <D.32700>:
  if (class_constraint_satisfied == 0) goto <D.32702>; else goto <D.32703>;
  <D.32702>:
  D.32650 = 0;
  return D.32650;
  <D.32703>:
  <D.32701>:
  D.32704 = tmask & 8;
  if (D.32704 != 0) goto <D.32705>; else goto <D.32706>;
  <D.32705>:
  if (valuetype_constraint_satisfied == 0) goto <D.32707>; else goto <D.32708>;
  <D.32707>:
  D.32650 = 0;
  return D.32650;
  <D.32708>:
  <D.32706>:
  D.32709 = tmask & 16;
  if (D.32709 != 0) goto <D.32710>; else goto <D.32711>;
  <D.32710>:
  D.32712 = cmask & 16;
  D.32713 = D.32712 | valuetype_constraint_satisfied;
  if (D.32713 == 0) goto <D.32714>; else goto <D.32715>;
  <D.32714>:
  D.32650 = 0;
  return D.32650;
  <D.32715>:
  <D.32711>:
  D.32716 = tinfo->constraints;
  if (D.32716 != 0B) goto <D.32717>; else goto <D.32718>;
  <D.32717>:
  {
    struct MonoClass * * target_class;

    target_class = tinfo->constraints;
    goto <D.23585>;
    <D.23584>:
    {
      struct MonoClass * tc;

      tc = *target_class;
      D.32719 = &tc->byval_arg;
      D.32720 = &candidate->byval_arg;
      D.32721 = mono_metadata_type_equal (D.32719, D.32720);
      if (D.32721 != 0) goto <D.32722>; else goto <D.32723>;
      <D.32722>:
      // predicted unlikely by continue predictor.
      goto <D.23579>;
      <D.32723>:
      D.32669 = cinfo->constraints;
      if (D.32669 == 0B) goto <D.32724>; else goto <D.32725>;
      <D.32724>:
      D.32650 = 0;
      return D.32650;
      <D.32725>:
      candidate_class = cinfo->constraints;
      goto <D.23583>;
      <D.23582>:
      {
        struct MonoClass * cc;

        cc = *candidate_class;
        D.32726 = mono_class_is_assignable_from (tc, cc);
        if (D.32726 != 0) goto <D.23581>; else goto <D.32727>;
        <D.32727>:
        D.32728 = &cc->byval_arg;
        D.32729 = mono_type_is_generic_argument (D.32728);
        if (D.32729 != 0) goto <D.32730>; else goto <D.32731>;
        <D.32730>:
        D.32732 = mono_gparam_is_assignable_from (target, cc);
        if (D.32732 != 0) goto <D.23581>; else goto <D.32733>;
        <D.32733>:
        <D.32731>:
      }
      candidate_class = candidate_class + 4;
      <D.23583>:
      D.32692 = *candidate_class;
      if (D.32692 != 0B) goto <D.23582>; else goto <D.23581>;
      <D.23581>:
      D.32692 = *candidate_class;
      if (D.32692 == 0B) goto <D.32734>; else goto <D.32735>;
      <D.32734>:
      D.32650 = 0;
      return D.32650;
      <D.32735>:
    }
    <D.23579>:
    target_class = target_class + 4;
    <D.23585>:
    D.32736 = *target_class;
    if (D.32736 != 0B) goto <D.23584>; else goto <D.23586>;
    <D.23586>:
  }
  <D.32718>:
  D.32669 = cinfo->constraints;
  if (D.32669 != 0B) goto <D.32737>; else goto <D.32738>;
  <D.32737>:
  candidate_class = cinfo->constraints;
  goto <D.23589>;
  <D.23588>:
  {
    struct MonoClass * cc;

    cc = *candidate_class;
    D.32739 = mono_class_is_assignable_from (target, cc);
    if (D.32739 != 0) goto <D.32740>; else goto <D.32741>;
    <D.32740>:
    D.32650 = 1;
    return D.32650;
    <D.32741>:
  }
  candidate_class = candidate_class + 4;
  <D.23589>:
  D.32692 = *candidate_class;
  if (D.32692 != 0B) goto <D.23588>; else goto <D.23590>;
  <D.23590>:
  <D.32738>:
  D.32650 = 0;
  return D.32650;
}


mono_class_is_assignable_from_slow (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.32745;
  struct MonoClass * D.32746;
  int D.32749;
  unsigned int D.32754;
  unsigned int D.32755;
  unsigned char D.32757;
  unsigned char D.32759;
  unsigned char D.32760;
  int D.32763;
  unsigned char D.32766;
  unsigned char D.32769;
  unsigned char D.32772;
  unsigned char D.32775;
  unsigned char D.32776;
  struct MonoClass * D.32781;
  struct MonoClass * D.32783;
  struct MonoClass * D.32785;
  struct MonoClass * D.32786;

  if (candidate == target) goto <D.32743>; else goto <D.32744>;
  <D.32743>:
  D.32745 = 1;
  return D.32745;
  <D.32744>:
  D.32746 = mono_defaults.object_class;
  if (D.32746 == target) goto <D.32747>; else goto <D.32748>;
  <D.32747>:
  D.32745 = 1;
  return D.32745;
  <D.32748>:
  D.32749 = mono_class_has_parent (candidate, target);
  if (D.32749 != 0) goto <D.32750>; else goto <D.32751>;
  <D.32750>:
  D.32745 = 1;
  return D.32745;
  <D.32751>:
  D.32754 = target->flags;
  D.32755 = D.32754 & 32;
  if (D.32755 != 0) goto <D.32752>; else goto <D.32756>;
  <D.32756>:
  D.32757 = target->byval_arg.type;
  if (D.32757 == 19) goto <D.32752>; else goto <D.32758>;
  <D.32758>:
  D.32757 = target->byval_arg.type;
  if (D.32757 == 30) goto <D.32752>; else goto <D.32753>;
  <D.32752>:
  D.32745 = mono_class_implement_interface_slow (target, candidate);
  return D.32745;
  <D.32753>:
  D.32759 = BIT_FIELD_REF <*target, 8, 184>;
  D.32760 = D.32759 & 1;
  if (D.32760 != 0) goto <D.32761>; else goto <D.32762>;
  <D.32761>:
  D.32763 = mono_class_has_variant_generic_params (target);
  if (D.32763 != 0) goto <D.32764>; else goto <D.32765>;
  <D.32764>:
  D.32745 = mono_class_is_variant_compatible (target, candidate, 0);
  return D.32745;
  <D.32765>:
  <D.32762>:
  D.32766 = target->rank;
  if (D.32766 != 0) goto <D.32767>; else goto <D.32768>;
  <D.32767>:
  {
    struct MonoClass * eclass;
    struct MonoClass * eoclass;

    D.32766 = target->rank;
    D.32769 = candidate->rank;
    if (D.32766 != D.32769) goto <D.32770>; else goto <D.32771>;
    <D.32770>:
    D.32745 = 0;
    return D.32745;
    <D.32771>:
    D.32757 = target->byval_arg.type;
    D.32772 = candidate->byval_arg.type;
    if (D.32757 != D.32772) goto <D.32773>; else goto <D.32774>;
    <D.32773>:
    D.32745 = 0;
    return D.32745;
    <D.32774>:
    eclass = target->cast_class;
    eoclass = candidate->cast_class;
    D.32775 = BIT_FIELD_REF <*eoclass, 8, 160>;
    D.32776 = D.32775 & 8;
    if (D.32776 != 0) goto <D.32777>; else goto <D.32778>;
    <D.32777>:
    D.32781 = mono_defaults.enum_class;
    if (D.32781 == eclass) goto <D.32779>; else goto <D.32782>;
    <D.32782>:
    D.32781 = mono_defaults.enum_class;
    D.32783 = D.32781->parent;
    if (D.32783 == eclass) goto <D.32779>; else goto <D.32784>;
    <D.32784>:
    D.32746 = mono_defaults.object_class;
    if (D.32746 == eclass) goto <D.32779>; else goto <D.32780>;
    <D.32779>:
    D.32745 = 0;
    return D.32745;
    <D.32780>:
    <D.32778>:
    D.32785 = target->cast_class;
    D.32786 = candidate->cast_class;
    D.32745 = mono_class_is_assignable_from_slow (D.32785, D.32786);
    return D.32745;
  }
  <D.32768>:
  D.32745 = 0;
  return D.32745;
}


mono_class_implement_interface_slow (struct MonoClass * target, struct MonoClass * candidate)
{
  unsigned int D.32792;
  unsigned int D.32793;
  unsigned char D.32795;
  int D.32797;
  gboolean D.32800;
  struct MonoImage * D.32804;
  unsigned char D.32805;
  unsigned char D.32806;
  unsigned char D.32808;
  unsigned char D.32809;
  struct MonoArray * D.32813;
  unsigned int D.32816;
  unsigned int D.32817;
  unsigned int j.414;
  char * D.32819;
  struct MonoType * D.32820;
  int D.32827;
  int D.32830;
  int D.32833;
  struct MonoClass * * D.32836;
  unsigned int i.415;
  unsigned int D.32838;
  struct MonoClass * * D.32839;
  struct MonoClass * D.32840;
  int D.32845;
  int D.32848;
  short unsigned int D.32851;
  int D.32852;
  struct MonoError error;
  int i;
  gboolean is_variant;

  try
    {
      is_variant = mono_class_has_variant_generic_params (target);
      if (is_variant != 0) goto <D.32790>; else goto <D.32791>;
      <D.32790>:
      D.32792 = candidate->flags;
      D.32793 = D.32792 & 32;
      if (D.32793 != 0) goto <D.32788>; else goto <D.32794>;
      <D.32794>:
      D.32795 = candidate->byval_arg.type;
      if (D.32795 == 19) goto <D.32788>; else goto <D.32796>;
      <D.32796>:
      D.32795 = candidate->byval_arg.type;
      if (D.32795 == 30) goto <D.32788>; else goto <D.32789>;
      <D.32788>:
      D.32797 = mono_class_is_variant_compatible_slow (target, candidate);
      if (D.32797 != 0) goto <D.32798>; else goto <D.32799>;
      <D.32798>:
      D.32800 = 1;
      return D.32800;
      <D.32799>:
      <D.32789>:
      <D.32791>:
      <D.23641>:
      if (candidate == target) goto <D.32801>; else goto <D.32802>;
      <D.32801>:
      D.32800 = 1;
      return D.32800;
      <D.32802>:
      D.32804 = candidate->image;
      D.32805 = BIT_FIELD_REF <*D.32804, 8, 128>;
      D.32806 = D.32805 & 8;
      if (D.32806 != 0) goto <D.32807>; else goto <D.32803>;
      <D.32807>:
      D.32808 = BIT_FIELD_REF <*candidate, 8, 160>;
      D.32809 = D.32808 & 128;
      if (D.32809 == 0) goto <D.32810>; else goto <D.32803>;
      <D.32810>:
      {
        struct MonoReflectionTypeBuilder * tb;
        int j;

        tb = mono_class_get_ref_info (candidate);
        if (tb != 0B) goto <D.32811>; else goto <D.32812>;
        <D.32811>:
        D.32813 = tb->interfaces;
        if (D.32813 != 0B) goto <D.32814>; else goto <D.32815>;
        <D.32814>:
        D.32813 = tb->interfaces;
        D.32816 = mono_array_length (D.32813);
        D.32817 = D.32816 + 4294967295;
        j = (int) D.32817;
        goto <D.23636>;
        <D.23635>:
        {
          struct MonoReflectionType * iface;
          struct MonoClass * iface_class;

          D.32813 = tb->interfaces;
          j.414 = (unsigned int) j;
          D.32819 = mono_array_addr_with_size (D.32813, 4, j.414);
          iface = MEM[(struct MonoReflectionType * *)D.32819];
          D.32820 = iface->type;
          if (D.32820 == 0B) goto <D.32821>; else goto <D.32822>;
          <D.32821>:
          // predicted unlikely by continue predictor.
          goto <D.23634>;
          <D.32822>:
          D.32820 = iface->type;
          iface_class = mono_class_from_mono_type (D.32820);
          if (iface_class == target) goto <D.32823>; else goto <D.32824>;
          <D.32823>:
          D.32800 = 1;
          return D.32800;
          <D.32824>:
          if (is_variant != 0) goto <D.32825>; else goto <D.32826>;
          <D.32825>:
          D.32827 = mono_class_is_variant_compatible_slow (target, iface_class);
          if (D.32827 != 0) goto <D.32828>; else goto <D.32829>;
          <D.32828>:
          D.32800 = 1;
          return D.32800;
          <D.32829>:
          <D.32826>:
          D.32830 = mono_class_implement_interface_slow (target, iface_class);
          if (D.32830 != 0) goto <D.32831>; else goto <D.32832>;
          <D.32831>:
          D.32800 = 1;
          return D.32800;
          <D.32832>:
        }
        <D.23634>:
        j = j + -1;
        <D.23636>:
        if (j >= 0) goto <D.23635>; else goto <D.23637>;
        <D.23637>:
        <D.32815>:
        <D.32812>:
      }
      goto <D.23640>;
      <D.32803>:
      mono_class_setup_interfaces (candidate, &error);
      D.32833 = mono_error_ok (&error);
      if (D.32833 == 0) goto <D.32834>; else goto <D.32835>;
      <D.32834>:
      mono_error_cleanup (&error);
      D.32800 = 0;
      return D.32800;
      <D.32835>:
      i = 0;
      goto <D.23639>;
      <D.23638>:
      D.32836 = candidate->interfaces;
      i.415 = (unsigned int) i;
      D.32838 = i.415 * 4;
      D.32839 = D.32836 + D.32838;
      D.32840 = *D.32839;
      if (D.32840 == target) goto <D.32841>; else goto <D.32842>;
      <D.32841>:
      D.32800 = 1;
      return D.32800;
      <D.32842>:
      if (is_variant != 0) goto <D.32843>; else goto <D.32844>;
      <D.32843>:
      D.32836 = candidate->interfaces;
      i.415 = (unsigned int) i;
      D.32838 = i.415 * 4;
      D.32839 = D.32836 + D.32838;
      D.32840 = *D.32839;
      D.32845 = mono_class_is_variant_compatible_slow (target, D.32840);
      if (D.32845 != 0) goto <D.32846>; else goto <D.32847>;
      <D.32846>:
      D.32800 = 1;
      return D.32800;
      <D.32847>:
      <D.32844>:
      D.32836 = candidate->interfaces;
      i.415 = (unsigned int) i;
      D.32838 = i.415 * 4;
      D.32839 = D.32836 + D.32838;
      D.32840 = *D.32839;
      D.32848 = mono_class_implement_interface_slow (target, D.32840);
      if (D.32848 != 0) goto <D.32849>; else goto <D.32850>;
      <D.32849>:
      D.32800 = 1;
      return D.32800;
      <D.32850>:
      i = i + 1;
      <D.23639>:
      D.32851 = candidate->interface_count;
      D.32852 = (int) D.32851;
      if (D.32852 > i) goto <D.23638>; else goto <D.23640>;
      <D.23640>:
      candidate = candidate->parent;
      if (candidate != 0B) goto <D.23641>; else goto <D.23642>;
      <D.23642>:
      D.32800 = 0;
      return D.32800;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_is_variant_compatible_slow (struct MonoClass * klass, struct MonoClass * oklass)
{
  struct MonoClass * D.32857;
  gboolean D.32859;
  struct MonoGenericClass * D.32860;
  struct MonoGenericInst * D.32861;
  struct MonoGenericClass * D.32862;
  struct MonoGenericInst * D.32863;
  unsigned int j.416;
  unsigned int D.32865;
  struct MonoType * * D.32866;
  struct MonoType * D.32867;
  struct MonoType * * D.32868;
  struct MonoType * D.32869;
  unsigned char D.32870;
  unsigned char D.32871;
  unsigned char D.32872;
  unsigned char D.32873;
  struct MonoGenericParamFull * D.32878;
  unsigned int D.32879;
  struct MonoGenericParamFull * D.32880;
  short unsigned int D.32881;
  int D.32882;
  int D.32883;
  int D.32886;
  int D.32890;
  int D.32893;
  <unnamed-signed:31> D.32897;
  int D.32898;
  int j;
  struct MonoType * * klass_argv;
  struct MonoType * * oklass_argv;
  struct MonoClass * klass_gtd;
  struct MonoGenericContainer * container;

  klass_gtd = mono_class_get_generic_type_definition (klass);
  container = klass_gtd->generic_container;
  D.32857 = mono_class_get_generic_type_definition (oklass);
  if (D.32857 != klass_gtd) goto <D.32855>; else goto <D.32858>;
  <D.32858>:
  if (oklass == klass_gtd) goto <D.32855>; else goto <D.32856>;
  <D.32855>:
  D.32859 = 0;
  return D.32859;
  <D.32856>:
  D.32860 = klass->generic_class;
  D.32861 = D.32860->context.class_inst;
  klass_argv = &D.32861->type_argv[0];
  D.32862 = oklass->generic_class;
  D.32863 = D.32862->context.class_inst;
  oklass_argv = &D.32863->type_argv[0];
  j = 0;
  goto <D.23621>;
  <D.23620>:
  {
    struct MonoClass * param1_class;
    struct MonoClass * param2_class;

    j.416 = (unsigned int) j;
    D.32865 = j.416 * 4;
    D.32866 = klass_argv + D.32865;
    D.32867 = *D.32866;
    param1_class = mono_class_from_mono_type (D.32867);
    j.416 = (unsigned int) j;
    D.32865 = j.416 * 4;
    D.32868 = oklass_argv + D.32865;
    D.32869 = *D.32868;
    param2_class = mono_class_from_mono_type (D.32869);
    D.32870 = BIT_FIELD_REF <*param1_class, 8, 160>;
    D.32871 = BIT_FIELD_REF <*param2_class, 8, 160>;
    D.32872 = D.32870 ^ D.32871;
    D.32873 = D.32872 & 8;
    if (D.32873 != 0) goto <D.32874>; else goto <D.32875>;
    <D.32874>:
    D.32859 = 0;
    return D.32859;
    <D.32875>:
    if (param1_class != param2_class) goto <D.32876>; else goto <D.32877>;
    <D.32876>:
    D.32878 = container->type_params;
    j.416 = (unsigned int) j;
    D.32879 = j.416 * 32;
    D.32880 = D.32878 + D.32879;
    D.32881 = D.32880->info.flags;
    D.32882 = (int) D.32881;
    D.32883 = D.32882 & 1;
    if (D.32883 != 0) goto <D.32884>; else goto <D.32885>;
    <D.32884>:
    D.32886 = mono_class_is_assignable_from_slow (param1_class, param2_class);
    if (D.32886 == 0) goto <D.32887>; else goto <D.32888>;
    <D.32887>:
    D.32859 = 0;
    return D.32859;
    <D.32888>:
    goto <D.32889>;
    <D.32885>:
    D.32878 = container->type_params;
    j.416 = (unsigned int) j;
    D.32879 = j.416 * 32;
    D.32880 = D.32878 + D.32879;
    D.32881 = D.32880->info.flags;
    D.32882 = (int) D.32881;
    D.32890 = D.32882 & 2;
    if (D.32890 != 0) goto <D.32891>; else goto <D.32892>;
    <D.32891>:
    D.32893 = mono_class_is_assignable_from_slow (param2_class, param1_class);
    if (D.32893 == 0) goto <D.32894>; else goto <D.32895>;
    <D.32894>:
    D.32859 = 0;
    return D.32859;
    <D.32895>:
    goto <D.32896>;
    <D.32892>:
    D.32859 = 0;
    return D.32859;
    <D.32896>:
    <D.32889>:
    <D.32877>:
  }
  j = j + 1;
  <D.23621>:
  D.32897 = container->type_argc;
  D.32898 = (int) D.32897;
  if (D.32898 > j) goto <D.23620>; else goto <D.23622>;
  <D.23622>:
  D.32859 = 1;
  return D.32859;
}


mono_class_get_cctor (struct MonoClass * klass)
{
  struct MonoImage * D.32900;
  unsigned char D.32901;
  unsigned char D.32902;
  struct MonoMethod * D.32905;
  unsigned char D.32906;
  unsigned char D.32907;
  int D.32910;
  unsigned int D.32913;
  struct MonoGenericClass * D.32914;
  struct MonoMethod * * D.32917;
  struct MonoClass * D.32920;
  struct MonoMethod * D.32921;
  struct MonoCachedClassInfo cached_info;

  try
    {
      D.32900 = klass->image;
      D.32901 = BIT_FIELD_REF <*D.32900, 8, 128>;
      D.32902 = D.32901 & 8;
      if (D.32902 != 0) goto <D.32903>; else goto <D.32904>;
      <D.32903>:
      D.32905 = mono_class_get_method_from_name_flags (klass, ".cctor", -1, 2048);
      return D.32905;
      <D.32904>:
      D.32906 = BIT_FIELD_REF <*klass, 8, 184>;
      D.32907 = D.32906 & 4;
      if (D.32907 == 0) goto <D.32908>; else goto <D.32909>;
      <D.32908>:
      D.32905 = 0B;
      return D.32905;
      <D.32909>:
      D.32910 = mono_class_get_cached_class_info (klass, &cached_info);
      if (D.32910 != 0) goto <D.32911>; else goto <D.32912>;
      <D.32911>:
      D.32900 = klass->image;
      D.32913 = cached_info.cctor_token;
      D.32905 = mono_get_method (D.32900, D.32913, klass);
      return D.32905;
      <D.32912>:
      D.32914 = klass->generic_class;
      if (D.32914 != 0B) goto <D.32915>; else goto <D.32916>;
      <D.32915>:
      D.32917 = klass->methods;
      if (D.32917 == 0B) goto <D.32918>; else goto <D.32919>;
      <D.32918>:
      D.32914 = klass->generic_class;
      D.32920 = D.32914->container_class;
      D.32921 = mono_class_get_cctor (D.32920);
      D.32905 = mono_class_get_inflated_method (klass, D.32921);
      return D.32905;
      <D.32919>:
      <D.32916>:
      D.32905 = mono_class_get_method_from_name_flags (klass, ".cctor", -1, 2048);
      return D.32905;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_class_get_finalizer (struct MonoClass * klass)
{
  unsigned char D.32924;
  unsigned char D.32925;
  int D.32928;
  struct MonoMethod * D.32931;
  int D.32932;
  struct MonoImage * D.32935;
  unsigned int D.32936;
  struct MonoMethod * * D.32937;
  int finalize_slot.417;
  unsigned int finalize_slot.418;
  unsigned int D.32940;
  struct MonoMethod * * D.32941;
  struct MonoCachedClassInfo cached_info;

  try
    {
      D.32924 = BIT_FIELD_REF <*klass, 8, 160>;
      D.32925 = D.32924 & 1;
      if (D.32925 == 0) goto <D.32926>; else goto <D.32927>;
      <D.32926>:
      mono_class_init (klass);
      <D.32927>:
      D.32928 = mono_class_has_finalizer (klass);
      if (D.32928 == 0) goto <D.32929>; else goto <D.32930>;
      <D.32929>:
      D.32931 = 0B;
      return D.32931;
      <D.32930>:
      D.32932 = mono_class_get_cached_class_info (klass, &cached_info);
      if (D.32932 != 0) goto <D.32933>; else goto <D.32934>;
      <D.32933>:
      D.32935 = cached_info.finalize_image;
      D.32936 = cached_info.finalize_token;
      D.32931 = mono_get_method (D.32935, D.32936, 0B);
      return D.32931;
      <D.32934>:
      mono_class_setup_vtable (klass);
      D.32937 = klass->vtable;
      finalize_slot.417 = finalize_slot;
      finalize_slot.418 = (unsigned int) finalize_slot.417;
      D.32940 = finalize_slot.418 * 4;
      D.32941 = D.32937 + D.32940;
      D.32931 = *D.32941;
      return D.32931;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_class_needs_cctor_run (struct MonoClass * klass, struct MonoMethod * caller)
{
  gboolean D.32946;
  _Bool D.32947;
  struct MonoMethod * method;

  method = mono_class_get_cctor (klass);
  if (method != 0B) goto <D.32944>; else goto <D.32945>;
  <D.32944>:
  D.32947 = method != caller;
  D.32946 = (gboolean) D.32947;
  return D.32946;
  <D.32945>:
  D.32946 = 0;
  return D.32946;
}


mono_class_array_element_size (struct MonoClass * klass)
{
  unsigned char D.32949;
  int D.32950;
  int32_t D.32951;
  struct MonoClass * D.32952;
  unsigned char D.32953;
  unsigned char D.32954;
  int D.32957;
  unsigned int D.32958;
  unsigned int D.32959;
  struct MonoGenericClass * D.32960;
  struct MonoClass * D.32961;
  struct MonoType * type;
  void handle_enum = <<< error >>>;

  type = &klass->byval_arg;
  handle_enum:
  D.32949 = type->type;
  D.32950 = (int) D.32949;
  switch (D.32950) <default: <D.23692>, case 1: <D.23691>, case 2: <D.23669>, case 3: <D.23672>, case 4: <D.23667>, case 5: <D.23668>, case 6: <D.23670>, case 7: <D.23671>, case 8: <D.23673>, case 9: <D.23674>, case 10: <D.23686>, case 11: <D.23687>, case 12: <D.23675>, case 13: <D.23688>, case 14: <D.23680>, case 15: <D.23678>, case 17: <D.23689>, case 18: <D.23679>, case 19: <D.23684>, case 20: <D.23683>, case 21: <D.23690>, case 24: <D.23676>, case 25: <D.23677>, case 28: <D.23681>, case 29: <D.23682>, case 30: <D.23685>>
  <D.23667>:
  <D.23668>:
  <D.23669>:
  D.32951 = 1;
  return D.32951;
  <D.23670>:
  <D.23671>:
  <D.23672>:
  D.32951 = 2;
  return D.32951;
  <D.23673>:
  <D.23674>:
  <D.23675>:
  D.32951 = 4;
  return D.32951;
  <D.23676>:
  <D.23677>:
  <D.23678>:
  <D.23679>:
  <D.23680>:
  <D.23681>:
  <D.23682>:
  <D.23683>:
  <D.23684>:
  <D.23685>:
  D.32951 = 4;
  return D.32951;
  <D.23686>:
  <D.23687>:
  <D.23688>:
  D.32951 = 8;
  return D.32951;
  <D.23689>:
  D.32952 = type->data.klass;
  D.32953 = BIT_FIELD_REF <*D.32952, 8, 160>;
  D.32954 = D.32953 & 16;
  if (D.32954 != 0) goto <D.32955>; else goto <D.32956>;
  <D.32955>:
  D.32952 = type->data.klass;
  type = mono_class_enum_basetype (D.32952);
  klass = klass->element_class;
  goto handle_enum;
  <D.32956>:
  D.32957 = mono_class_instance_size (klass);
  D.32958 = (unsigned int) D.32957;
  D.32959 = D.32958 + 4294967288;
  D.32951 = (int32_t) D.32959;
  return D.32951;
  <D.23690>:
  D.32960 = type->data.generic_class;
  D.32961 = D.32960->container_class;
  type = &D.32961->byval_arg;
  goto handle_enum;
  <D.23691>:
  D.32951 = 0;
  return D.32951;
  <D.23692>:
  D.32949 = type->type;
  D.32950 = (int) D.32949;
  monoeg_g_log (0B, 4, "unknown type 0x%02x in mono_class_array_element_size", D.32950);
  <D.23693>:
  goto <D.23693>;
  D.32951 = -1;
  return D.32951;
}


mono_array_element_size (struct MonoClass * ac)
{
  unsigned char D.32963;
  _Bool D.32964;
  long int D.32965;
  long int D.32966;
  int32_t D.32969;

  D.32963 = ac->rank;
  D.32964 = D.32963 == 0;
  D.32965 = (long int) D.32964;
  D.32966 = __builtin_expect (D.32965, 0);
  if (D.32966 != 0) goto <D.32967>; else goto <D.32968>;
  <D.32967>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 8238, "ac->rank");
  <D.32968>:
  D.32969 = ac->sizes.element_size;
  return D.32969;
}


mono_ldtoken (struct MonoImage * image, guint32 token, struct MonoClass * * handle_class, struct MonoGenericContext * context)
{
  unsigned char D.32971;
  unsigned char D.32972;
  struct MonoClass * tmp_handle_class.419;
  _Bool D.32976;
  long int D.32977;
  long int D.32978;
  struct MonoClass * D.32983;
  void * D.32986;
  unsigned int D.32987;
  struct MonoClass * D.32992;
  unsigned int D.32993;
  struct MonoClass * D.32998;
  unsigned int D.32999;
  struct MonoClass * D.33004;
  struct MonoTableInfo * D.33005;
  unsigned int D.33006;
  int D.33007;
  unsigned int D.33008;
  const char * sig.420;
  const char * sig.421;
  char D.33011;

  D.32971 = BIT_FIELD_REF <*image, 8, 128>;
  D.32972 = D.32971 & 8;
  if (D.32972 != 0) goto <D.32973>; else goto <D.32974>;
  <D.32973>:
  {
    struct MonoClass * tmp_handle_class;
    void * obj;

    try
      {
        obj = mono_lookup_dynamic_token_class (image, token, 1, &tmp_handle_class, context);
        tmp_handle_class.419 = tmp_handle_class;
        D.32976 = tmp_handle_class.419 == 0B;
        D.32977 = (long int) D.32976;
        D.32978 = __builtin_expect (D.32977, 0);
        if (D.32978 != 0) goto <D.32979>; else goto <D.32980>;
        <D.32979>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 8250, "tmp_handle_class");
        <D.32980>:
        if (handle_class != 0B) goto <D.32981>; else goto <D.32982>;
        <D.32981>:
        tmp_handle_class.419 = tmp_handle_class;
        *handle_class = tmp_handle_class.419;
        <D.32982>:
        D.32983 = mono_defaults.typehandle_class;
        tmp_handle_class.419 = tmp_handle_class;
        if (D.32983 == tmp_handle_class.419) goto <D.32984>; else goto <D.32985>;
        <D.32984>:
        D.32986 = &MEM[(struct MonoClass *)obj].byval_arg;
        return D.32986;
        <D.32985>:
        D.32986 = obj;
        return D.32986;
      }
    finally
      {
        tmp_handle_class = {CLOBBER};
      }
  }
  <D.32974>:
  D.32987 = token & 4278190080;
  switch (D.32987) <default: <D.23721>, case 16777216: <D.23706>, case 33554432: <D.23705>, case 67108864: <D.23709>, case 100663296: <D.23712>, case 167772160: <D.23715>, case 452984832: <D.23707>, case 721420288: <D.23713>>
  <D.23705>:
  <D.23706>:
  <D.23707>:
  {
    struct MonoType * type;

    if (handle_class != 0B) goto <D.32988>; else goto <D.32989>;
    <D.32988>:
    D.32983 = mono_defaults.typehandle_class;
    *handle_class = D.32983;
    <D.32989>:
    type = mono_type_get_full (image, token, context);
    if (type == 0B) goto <D.32990>; else goto <D.32991>;
    <D.32990>:
    D.32986 = 0B;
    return D.32986;
    <D.32991>:
    D.32992 = mono_class_from_mono_type (type);
    mono_class_init (D.32992);
    D.32986 = type;
    return D.32986;
  }
  <D.23709>:
  {
    struct MonoClass * class;
    guint32 type;

    D.32993 = token & 16777215;
    type = mono_metadata_typedef_from_field (image, D.32993);
    if (type == 0) goto <D.32994>; else goto <D.32995>;
    <D.32994>:
    D.32986 = 0B;
    return D.32986;
    <D.32995>:
    if (handle_class != 0B) goto <D.32996>; else goto <D.32997>;
    <D.32996>:
    D.32998 = mono_defaults.fieldhandle_class;
    *handle_class = D.32998;
    <D.32997>:
    D.32999 = type | 33554432;
    class = mono_class_get_full (image, D.32999, context);
    if (class == 0B) goto <D.33000>; else goto <D.33001>;
    <D.33000>:
    D.32986 = 0B;
    return D.32986;
    <D.33001>:
    mono_class_init (class);
    D.32986 = mono_class_get_field (class, token);
    return D.32986;
  }
  <D.23712>:
  <D.23713>:
  {
    struct MonoMethod * meth;

    meth = mono_get_method_full (image, token, 0B, context);
    if (handle_class != 0B) goto <D.33002>; else goto <D.33003>;
    <D.33002>:
    D.33004 = mono_defaults.methodhandle_class;
    *handle_class = D.33004;
    <D.33003>:
    D.32986 = meth;
    return D.32986;
  }
  <D.23715>:
  {
    guint32 cols[3];
    const char * sig;

    try
      {
        D.33005 = &image->tables[10];
        D.32993 = token & 16777215;
        D.33006 = D.32993 + 4294967295;
        D.33007 = (int) D.33006;
        mono_metadata_decode_row (D.33005, D.33007, &cols, 3);
        D.33008 = cols[2];
        sig.420 = mono_metadata_blob_heap (image, D.33008);
        sig = sig.420;
        sig.421 = sig;
        mono_metadata_decode_blob_size (sig.421, &sig);
        sig.421 = sig;
        D.33011 = *sig.421;
        if (D.33011 == 6) goto <D.33012>; else goto <D.33013>;
        <D.33012>:
        {
          struct MonoClass * klass;
          struct MonoClassField * field;

          try
            {
              field = mono_field_from_token (image, token, &klass, context);
              if (handle_class != 0B) goto <D.33014>; else goto <D.33015>;
              <D.33014>:
              D.32998 = mono_defaults.fieldhandle_class;
              *handle_class = D.32998;
              <D.33015>:
              D.32986 = field;
              return D.32986;
            }
          finally
            {
              klass = {CLOBBER};
            }
        }
        <D.33013>:
        {
          struct MonoMethod * meth;

          meth = mono_get_method_full (image, token, 0B, context);
          if (handle_class != 0B) goto <D.33016>; else goto <D.33017>;
          <D.33016>:
          D.33004 = mono_defaults.methodhandle_class;
          *handle_class = D.33004;
          <D.33017>:
          D.32986 = meth;
          return D.32986;
        }
      }
    finally
      {
        cols = {CLOBBER};
        sig = {CLOBBER};
      }
  }
  <D.23721>:
  monoeg_g_log (0B, 16, "Unknown token 0x%08x in ldtoken", token);
  goto <D.23722>;
  <D.23722>:
  D.32986 = 0B;
  return D.32986;
}


mono_install_lookup_dynamic_token (void * (*MonoLookupDynamicToken) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) func)
{
  lookup_dynamic = func;
}


mono_lookup_dynamic_token (struct MonoImage * image, guint32 token, struct MonoGenericContext * context)
{
  void * D.33022;
  void * (*<T28b5>) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) lookup_dynamic.422;
  struct MonoClass * handle_class;

  try
    {
      lookup_dynamic.422 = lookup_dynamic;
      D.33022 = lookup_dynamic.422 (image, token, 1, &handle_class, context);
      return D.33022;
    }
  finally
    {
      handle_class = {CLOBBER};
    }
}


mono_lookup_dynamic_token_class (struct MonoImage * image, guint32 token, gboolean valid_token, struct MonoClass * * handle_class, struct MonoGenericContext * context)
{
  void * D.33026;
  void * (*<T28b5>) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) lookup_dynamic.423;

  lookup_dynamic.423 = lookup_dynamic;
  D.33026 = lookup_dynamic.423 (image, token, valid_token, handle_class, context);
  return D.33026;
}


mono_install_get_cached_class_info (gboolean (*MonoGetCachedClassInfo) (struct MonoClass *, struct MonoCachedClassInfo *) func)
{
  get_cached_class_info = func;
}


mono_install_get_class_from_name (gboolean (*MonoGetClassFromName) (struct MonoImage *, const char *, const char *, struct MonoClass * *) func)
{
  get_class_from_name = func;
}


mono_class_get_image (struct MonoClass * klass)
{
  struct MonoImage * D.33029;

  D.33029 = klass->image;
  return D.33029;
}


mono_class_get_element_class (struct MonoClass * klass)
{
  struct MonoClass * D.33031;

  D.33031 = klass->element_class;
  return D.33031;
}


mono_class_is_valuetype (struct MonoClass * klass)
{
  mono_bool D.33033;
  <unnamed-unsigned:1> D.33034;

  D.33034 = klass->valuetype;
  D.33033 = (mono_bool) D.33034;
  return D.33033;
}


mono_class_is_enum (struct MonoClass * klass)
{
  mono_bool D.33036;
  <unnamed-unsigned:1> D.33037;

  D.33037 = klass->enumtype;
  D.33036 = (mono_bool) D.33037;
  return D.33036;
}


mono_class_enum_basetype (struct MonoClass * klass)
{
  struct MonoClass * D.33039;
  struct MonoType * D.33042;

  D.33039 = klass->element_class;
  if (D.33039 == klass) goto <D.33040>; else goto <D.33041>;
  <D.33040>:
  D.33042 = 0B;
  return D.33042;
  <D.33041>:
  D.33039 = klass->element_class;
  D.33042 = &D.33039->byval_arg;
  return D.33042;
}


mono_class_get_parent (struct MonoClass * klass)
{
  struct MonoClass * D.33044;

  D.33044 = klass->parent;
  return D.33044;
}


mono_class_get_nesting_type (struct MonoClass * klass)
{
  struct MonoClass * D.33046;

  D.33046 = klass->nested_in;
  return D.33046;
}


mono_class_get_rank (struct MonoClass * klass)
{
  int D.33048;
  unsigned char D.33049;

  D.33049 = klass->rank;
  D.33048 = (int) D.33049;
  return D.33048;
}


mono_class_get_flags (struct MonoClass * klass)
{
  uint32_t D.33051;

  D.33051 = klass->flags;
  return D.33051;
}


mono_class_get_name (struct MonoClass * klass)
{
  const char * D.33053;

  D.33053 = klass->name;
  return D.33053;
}


mono_class_get_namespace (struct MonoClass * klass)
{
  const char * D.33055;

  D.33055 = klass->name_space;
  return D.33055;
}


mono_class_get_type (struct MonoClass * klass)
{
  struct MonoType * D.33057;

  D.33057 = &klass->byval_arg;
  return D.33057;
}


mono_class_get_type_token (struct MonoClass * klass)
{
  uint32_t D.33059;

  D.33059 = klass->type_token;
  return D.33059;
}


mono_class_get_byref_type (struct MonoClass * klass)
{
  struct MonoType * D.33061;

  D.33061 = &klass->this_arg;
  return D.33061;
}


mono_class_num_fields (struct MonoClass * klass)
{
  int D.33063;
  unsigned int D.33064;

  D.33064 = klass->field.count;
  D.33063 = (int) D.33064;
  return D.33063;
}


mono_class_num_methods (struct MonoClass * klass)
{
  int D.33066;
  unsigned int D.33067;

  D.33067 = klass->method.count;
  D.33066 = (int) D.33067;
  return D.33066;
}


mono_class_num_properties (struct MonoClass * klass)
{
  int D.33069;
  struct MonoClassExt * D.33070;
  unsigned int D.33071;

  mono_class_setup_properties (klass);
  D.33070 = klass->ext;
  D.33071 = D.33070->property.count;
  D.33069 = (int) D.33071;
  return D.33069;
}


mono_class_setup_properties (struct MonoClass * class)
{
  struct MonoImage * D.33073;
  struct MonoClassExt * D.33074;
  struct MonoProperty * D.33077;
  struct MonoGenericClass * D.33084;
  unsigned char D.33087;
  gchar * D.33090;
  struct MonoClassExt * D.33091;
  unsigned int D.33092;
  unsigned int D.33093;
  unsigned int D.33094;
  int D.33095;
  unsigned int D.33096;
  struct MonoProperty * D.33097;
  struct MonoProperty * D.33098;
  struct MonoMethod * D.33099;
  struct MonoGenericContext * D.33102;
  struct MonoMethod * D.33103;
  struct MonoMethod * D.33104;
  struct MonoGenericContext * D.33107;
  struct MonoMethod * D.33108;
  unsigned int D.33110;
  unsigned int D.33111;
  unsigned int D.33112;
  unsigned int D.33113;
  unsigned int last.424;
  unsigned int first.425;
  unsigned int D.33116;
  unsigned char D.33119;
  unsigned int count.426;
  unsigned int count.427;
  unsigned int D.33124;
  int D.33125;
  int i.428;
  unsigned int first.429;
  unsigned int D.33128;
  unsigned int D.33129;
  struct MonoProperty * D.33130;
  unsigned int D.33131;
  unsigned int D.33132;
  const char * D.33133;
  int j.430;
  unsigned char D.33135;
  unsigned char D.33136;
  unsigned int D.33139;
  struct MonoMethod * * D.33141;
  unsigned int D.33142;
  unsigned int D.33143;
  unsigned int D.33144;
  unsigned int D.33145;
  struct MonoMethod * * D.33146;
  unsigned int endm.431;
  guint startm;
  guint endm;
  guint i;
  guint j;
  guint32 cols[3];
  struct MonoTableInfo * msemt;
  struct MonoProperty * properties;
  guint32 last;

  try
    {
      D.33073 = class->image;
      msemt = &D.33073->tables[24];
      D.33074 = class->ext;
      if (D.33074 != 0B) goto <D.33075>; else goto <D.33076>;
      <D.33075>:
      D.33074 = class->ext;
      D.33077 = D.33074->properties;
      if (D.33077 != 0B) goto <D.33078>; else goto <D.33079>;
      <D.33078>:
      return;
      <D.33079>:
      <D.33076>:
      mono_loader_lock ();
      D.33074 = class->ext;
      if (D.33074 != 0B) goto <D.33080>; else goto <D.33081>;
      <D.33080>:
      D.33074 = class->ext;
      D.33077 = D.33074->properties;
      if (D.33077 != 0B) goto <D.33082>; else goto <D.33083>;
      <D.33082>:
      mono_loader_unlock ();
      return;
      <D.33083>:
      <D.33081>:
      mono_class_alloc_ext (class);
      D.33084 = class->generic_class;
      if (D.33084 != 0B) goto <D.33085>; else goto <D.33086>;
      <D.33085>:
      {
        struct MonoClass * gklass;

        D.33084 = class->generic_class;
        gklass = D.33084->container_class;
        mono_class_init (gklass);
        mono_class_setup_properties (gklass);
        D.33087 = gklass->exception_type;
        if (D.33087 != 0) goto <D.33088>; else goto <D.33089>;
        <D.33088>:
        D.33090 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.33090);
        mono_loader_unlock ();
        return;
        <D.33089>:
        D.33074 = class->ext;
        D.33091 = gklass->ext;
        D.33074->property = D.33091->property;
        D.33074 = class->ext;
        D.33092 = D.33074->property.count;
        D.33093 = D.33092 + 1;
        D.33094 = D.33093 * 20;
        D.33095 = (int) D.33094;
        properties = mono_class_alloc0 (class, D.33095);
        i = 0;
        goto <D.21582>;
        <D.21581>:
        {
          struct MonoProperty * prop;

          D.33096 = i * 20;
          prop = properties + D.33096;
          D.33091 = gklass->ext;
          D.33097 = D.33091->properties;
          D.33096 = i * 20;
          D.33098 = D.33097 + D.33096;
          *prop = *D.33098;
          D.33099 = prop->get;
          if (D.33099 != 0B) goto <D.33100>; else goto <D.33101>;
          <D.33100>:
          D.33099 = prop->get;
          D.33102 = mono_class_get_context (class);
          D.33103 = mono_class_inflate_generic_method_full (D.33099, class, D.33102);
          prop->get = D.33103;
          <D.33101>:
          D.33104 = prop->set;
          if (D.33104 != 0B) goto <D.33105>; else goto <D.33106>;
          <D.33105>:
          D.33104 = prop->set;
          D.33107 = mono_class_get_context (class);
          D.33108 = mono_class_inflate_generic_method_full (D.33104, class, D.33107);
          prop->set = D.33108;
          <D.33106>:
          prop->parent = class;
        }
        i = i + 1;
        <D.21582>:
        D.33074 = class->ext;
        D.33092 = D.33074->property.count;
        if (D.33092 > i) goto <D.21581>; else goto <D.21583>;
        <D.21583>:
      }
      goto <D.33109>;
      <D.33086>:
      {
        int first;
        int count;

        D.33073 = class->image;
        D.33110 = class->type_token;
        D.33111 = D.33110 & 16777215;
        D.33112 = D.33111 + 4294967295;
        D.33113 = mono_metadata_properties_from_typedef (D.33073, D.33112, &last);
        first = (int) D.33113;
        last.424 = last;
        first.425 = (unsigned int) first;
        D.33116 = last.424 - first.425;
        count = (int) D.33116;
        if (count != 0) goto <D.33117>; else goto <D.33118>;
        <D.33117>:
        mono_class_setup_methods (class);
        D.33119 = class->exception_type;
        if (D.33119 != 0) goto <D.33120>; else goto <D.33121>;
        <D.33120>:
        mono_loader_unlock ();
        return;
        <D.33121>:
        <D.33118>:
        D.33074 = class->ext;
        first.425 = (unsigned int) first;
        D.33074->property.first = first.425;
        D.33074 = class->ext;
        count.426 = (unsigned int) count;
        D.33074->property.count = count.426;
        count.427 = (unsigned int) count;
        D.33124 = count.427 * 20;
        D.33125 = (int) D.33124;
        properties = mono_class_alloc0 (class, D.33125);
        i = (guint) first;
        goto <D.21595>;
        <D.21594>:
        D.33073 = class->image;
        i.428 = (int) i;
        mono_metadata_decode_table_row (D.33073, 23, i.428, &cols, 3);
        first.429 = (unsigned int) first;
        D.33128 = i - first.429;
        D.33129 = D.33128 * 20;
        D.33130 = properties + D.33129;
        D.33130->parent = class;
        first.429 = (unsigned int) first;
        D.33128 = i - first.429;
        D.33129 = D.33128 * 20;
        D.33130 = properties + D.33129;
        D.33131 = cols[0];
        D.33130->attrs = D.33131;
        first.429 = (unsigned int) first;
        D.33128 = i - first.429;
        D.33129 = D.33128 * 20;
        D.33130 = properties + D.33129;
        D.33073 = class->image;
        D.33132 = cols[1];
        D.33133 = mono_metadata_string_heap (D.33073, D.33132);
        D.33130->name = D.33133;
        D.33073 = class->image;
        startm = mono_metadata_methods_from_property (D.33073, i, &endm);
        j = startm;
        goto <D.21592>;
        <D.21591>:
        {
          struct MonoMethod * method;

          j.430 = (int) j;
          mono_metadata_decode_row (msemt, j.430, &cols, 3);
          D.33073 = class->image;
          D.33135 = BIT_FIELD_REF <*D.33073, 8, 128>;
          D.33136 = D.33135 & 32;
          if (D.33136 != 0) goto <D.33137>; else goto <D.33138>;
          <D.33137>:
          D.33073 = class->image;
          D.33132 = cols[1];
          D.33139 = D.33132 | 100663296;
          method = mono_get_method (D.33073, D.33139, class);
          goto <D.33140>;
          <D.33138>:
          D.33141 = class->methods;
          D.33132 = cols[1];
          D.33142 = class->method.first;
          D.33143 = D.33132 - D.33142;
          D.33144 = D.33143 + 1073741823;
          D.33145 = D.33144 * 4;
          D.33146 = D.33141 + D.33145;
          method = *D.33146;
          <D.33140>:
          D.33131 = cols[0];
          switch (D.33131) <default: <D.21590>, case 1: <D.21587>, case 2: <D.21589>>
          <D.21587>:
          first.429 = (unsigned int) first;
          D.33128 = i - first.429;
          D.33129 = D.33128 * 20;
          D.33130 = properties + D.33129;
          D.33130->set = method;
          goto <D.21588>;
          <D.21589>:
          first.429 = (unsigned int) first;
          D.33128 = i - first.429;
          D.33129 = D.33128 * 20;
          D.33130 = properties + D.33129;
          D.33130->get = method;
          goto <D.21588>;
          <D.21590>:
          goto <D.21588>;
          <D.21588>:
        }
        j = j + 1;
        <D.21592>:
        endm.431 = endm;
        if (j < endm.431) goto <D.21591>; else goto <D.21593>;
        <D.21593>:
        i = i + 1;
        <D.21595>:
        last.424 = last;
        if (i < last.424) goto <D.21594>; else goto <D.21596>;
        <D.21596>:
      }
      <D.33109>:
      mono_memory_barrier ();
      D.33074 = class->ext;
      D.33074->properties = properties;
      mono_loader_unlock ();
    }
  finally
    {
      endm = {CLOBBER};
      cols = {CLOBBER};
      last = {CLOBBER};
    }
}


mono_class_num_events (struct MonoClass * klass)
{
  int D.33152;
  struct MonoClassExt * D.33153;
  unsigned int D.33154;

  mono_class_setup_events (klass);
  D.33153 = klass->ext;
  D.33154 = D.33153->event.count;
  D.33152 = (int) D.33154;
  return D.33152;
}


mono_class_setup_events (struct MonoClass * class)
{
  struct MonoImage * D.33156;
  struct MonoClassExt * D.33157;
  struct MonoEvent * D.33160;
  struct MonoGenericClass * D.33167;
  unsigned char D.33170;
  gchar * D.33173;
  struct MonoClassExt * D.33174;
  unsigned int D.33175;
  unsigned int D.33176;
  int D.33177;
  void * D.33178;
  unsigned int D.33181;
  struct MonoEvent * D.33182;
  const char * D.33183;
  struct MonoMethod * iftmp.432;
  struct MonoMethod * D.33185;
  struct MonoMethod * iftmp.433;
  struct MonoMethod * D.33190;
  struct MonoMethod * iftmp.434;
  struct MonoMethod * D.33195;
  struct MonoMethod * * iftmp.435;
  struct MonoMethod * * D.33200;
  unsigned int D.33204;
  unsigned int D.33205;
  unsigned int D.33206;
  unsigned int D.33207;
  unsigned int D.33208;
  unsigned int last.436;
  unsigned int first.437;
  unsigned int D.33211;
  unsigned char D.33214;
  gchar * D.33217;
  unsigned int count.438;
  unsigned int first.439;
  unsigned int D.33220;
  unsigned int D.33221;
  int i.440;
  unsigned int D.33223;
  unsigned int D.33224;
  const char * D.33225;
  int j.441;
  unsigned char D.33227;
  unsigned char D.33228;
  unsigned int D.33231;
  struct MonoMethod * * D.33233;
  unsigned int D.33234;
  unsigned int D.33235;
  unsigned int D.33236;
  unsigned int D.33237;
  struct MonoMethod * * D.33238;
  struct MonoMethod * * D.33239;
  void * D.33242;
  unsigned int n.442;
  unsigned int D.33245;
  struct MonoMethod * * D.33246;
  struct MonoMethod * D.33247;
  int D.33248;
  unsigned int D.33249;
  unsigned int D.33250;
  void * D.33251;
  sizetype n.443;
  sizetype D.33253;
  sizetype D.33254;
  struct MonoMethod * * D.33255;
  unsigned int endm.444;
  int first;
  int count;
  guint startm;
  guint endm;
  guint i;
  guint j;
  guint32 cols[3];
  struct MonoTableInfo * msemt;
  guint32 last;
  struct MonoEvent * events;

  try
    {
      D.33156 = class->image;
      msemt = &D.33156->tables[24];
      D.33157 = class->ext;
      if (D.33157 != 0B) goto <D.33158>; else goto <D.33159>;
      <D.33158>:
      D.33157 = class->ext;
      D.33160 = D.33157->events;
      if (D.33160 != 0B) goto <D.33161>; else goto <D.33162>;
      <D.33161>:
      return;
      <D.33162>:
      <D.33159>:
      mono_loader_lock ();
      D.33157 = class->ext;
      if (D.33157 != 0B) goto <D.33163>; else goto <D.33164>;
      <D.33163>:
      D.33157 = class->ext;
      D.33160 = D.33157->events;
      if (D.33160 != 0B) goto <D.33165>; else goto <D.33166>;
      <D.33165>:
      mono_loader_unlock ();
      return;
      <D.33166>:
      <D.33164>:
      mono_class_alloc_ext (class);
      D.33167 = class->generic_class;
      if (D.33167 != 0B) goto <D.33168>; else goto <D.33169>;
      <D.33168>:
      {
        struct MonoClass * gklass;
        struct MonoGenericContext * context;

        D.33167 = class->generic_class;
        gklass = D.33167->container_class;
        mono_class_setup_events (gklass);
        D.33170 = gklass->exception_type;
        if (D.33170 != 0) goto <D.33171>; else goto <D.33172>;
        <D.33171>:
        D.33173 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.33173);
        mono_loader_unlock ();
        return;
        <D.33172>:
        D.33157 = class->ext;
        D.33174 = gklass->ext;
        D.33157->event = D.33174->event;
        D.33157 = class->ext;
        D.33157 = class->ext;
        D.33175 = D.33157->event.count;
        D.33176 = D.33175 * 28;
        D.33177 = (int) D.33176;
        D.33178 = mono_class_alloc0 (class, D.33177);
        D.33157->events = D.33178;
        D.33157 = class->ext;
        D.33175 = D.33157->event.count;
        if (D.33175 != 0) goto <D.33179>; else goto <D.33180>;
        <D.33179>:
        context = mono_class_get_context (class);
        <D.33180>:
        i = 0;
        goto <D.21629>;
        <D.21628>:
        {
          struct MonoEvent * event;
          struct MonoEvent * gevent;

          D.33157 = class->ext;
          D.33160 = D.33157->events;
          D.33181 = i * 28;
          event = D.33160 + D.33181;
          D.33174 = gklass->ext;
          D.33182 = D.33174->events;
          D.33181 = i * 28;
          gevent = D.33182 + D.33181;
          event->parent = class;
          D.33183 = gevent->name;
          event->name = D.33183;
          D.33185 = gevent->add;
          if (D.33185 != 0B) goto <D.33186>; else goto <D.33187>;
          <D.33186>:
          D.33185 = gevent->add;
          iftmp.432 = mono_class_inflate_generic_method_full (D.33185, class, context);
          goto <D.33188>;
          <D.33187>:
          iftmp.432 = 0B;
          <D.33188>:
          event->add = iftmp.432;
          D.33190 = gevent->remove;
          if (D.33190 != 0B) goto <D.33191>; else goto <D.33192>;
          <D.33191>:
          D.33190 = gevent->remove;
          iftmp.433 = mono_class_inflate_generic_method_full (D.33190, class, context);
          goto <D.33193>;
          <D.33192>:
          iftmp.433 = 0B;
          <D.33193>:
          event->remove = iftmp.433;
          D.33195 = gevent->raise;
          if (D.33195 != 0B) goto <D.33196>; else goto <D.33197>;
          <D.33196>:
          D.33195 = gevent->raise;
          iftmp.434 = mono_class_inflate_generic_method_full (D.33195, class, context);
          goto <D.33198>;
          <D.33197>:
          iftmp.434 = 0B;
          <D.33198>:
          event->raise = iftmp.434;
          D.33200 = gevent->other;
          if (D.33200 != 0B) goto <D.33201>; else goto <D.33202>;
          <D.33201>:
          D.33200 = gevent->other;
          iftmp.435 = inflate_method_listz (D.33200, class, context);
          goto <D.33203>;
          <D.33202>:
          iftmp.435 = 0B;
          <D.33203>:
          event->other = iftmp.435;
          D.33204 = gevent->attrs;
          event->attrs = D.33204;
        }
        i = i + 1;
        <D.21629>:
        D.33157 = class->ext;
        D.33175 = D.33157->event.count;
        if (D.33175 > i) goto <D.21628>; else goto <D.21630>;
        <D.21630>:
        mono_loader_unlock ();
        return;
      }
      <D.33169>:
      D.33156 = class->image;
      D.33205 = class->type_token;
      D.33206 = D.33205 & 16777215;
      D.33207 = D.33206 + 4294967295;
      D.33208 = mono_metadata_events_from_typedef (D.33156, D.33207, &last);
      first = (int) D.33208;
      last.436 = last;
      first.437 = (unsigned int) first;
      D.33211 = last.436 - first.437;
      count = (int) D.33211;
      if (count != 0) goto <D.33212>; else goto <D.33213>;
      <D.33212>:
      mono_class_setup_methods (class);
      D.33214 = class->exception_type;
      if (D.33214 != 0) goto <D.33215>; else goto <D.33216>;
      <D.33215>:
      D.33217 = monoeg_strdup ("Generic type definition failed to load");
      mono_class_set_failure (class, 7, D.33217);
      mono_loader_unlock ();
      return;
      <D.33216>:
      <D.33213>:
      D.33157 = class->ext;
      first.437 = (unsigned int) first;
      D.33157->event.first = first.437;
      D.33157 = class->ext;
      count.438 = (unsigned int) count;
      D.33157->event.count = count.438;
      D.33157 = class->ext;
      D.33175 = D.33157->event.count;
      D.33176 = D.33175 * 28;
      D.33177 = (int) D.33176;
      events = mono_class_alloc0 (class, D.33177);
      i = (guint) first;
      goto <D.21647>;
      <D.21646>:
      {
        struct MonoEvent * event;

        first.439 = (unsigned int) first;
        D.33220 = i - first.439;
        D.33221 = D.33220 * 28;
        event = events + D.33221;
        D.33156 = class->image;
        i.440 = (int) i;
        mono_metadata_decode_table_row (D.33156, 20, i.440, &cols, 3);
        event->parent = class;
        D.33223 = cols[0];
        event->attrs = D.33223;
        D.33156 = class->image;
        D.33224 = cols[1];
        D.33225 = mono_metadata_string_heap (D.33156, D.33224);
        event->name = D.33225;
        D.33156 = class->image;
        startm = mono_metadata_methods_from_event (D.33156, i, &endm);
        j = startm;
        goto <D.21644>;
        <D.21643>:
        {
          struct MonoMethod * method;

          j.441 = (int) j;
          mono_metadata_decode_row (msemt, j.441, &cols, 3);
          D.33156 = class->image;
          D.33227 = BIT_FIELD_REF <*D.33156, 8, 128>;
          D.33228 = D.33227 & 32;
          if (D.33228 != 0) goto <D.33229>; else goto <D.33230>;
          <D.33229>:
          D.33156 = class->image;
          D.33224 = cols[1];
          D.33231 = D.33224 | 100663296;
          method = mono_get_method (D.33156, D.33231, class);
          goto <D.33232>;
          <D.33230>:
          D.33233 = class->methods;
          D.33224 = cols[1];
          D.33234 = class->method.first;
          D.33235 = D.33224 - D.33234;
          D.33236 = D.33235 + 1073741823;
          D.33237 = D.33236 * 4;
          D.33238 = D.33233 + D.33237;
          method = *D.33238;
          <D.33232>:
          D.33223 = cols[0];
          switch (D.33223) <default: <D.21642>, case 4: <D.21637>, case 8: <D.21633>, case 16: <D.21635>, case 32: <D.21636>>
          <D.21633>:
          event->add = method;
          goto <D.21634>;
          <D.21635>:
          event->remove = method;
          goto <D.21634>;
          <D.21636>:
          event->raise = method;
          goto <D.21634>;
          <D.21637>:
          {
            int n;

            n = 0;
            D.33239 = event->other;
            if (D.33239 == 0B) goto <D.33240>; else goto <D.33241>;
            <D.33240>:
            D.33242 = monoeg_malloc0 (8);
            event->other = D.33242;
            goto <D.33243>;
            <D.33241>:
            goto <D.21640>;
            <D.21639>:
            n = n + 1;
            <D.21640>:
            D.33239 = event->other;
            n.442 = (unsigned int) n;
            D.33245 = n.442 * 4;
            D.33246 = D.33239 + D.33245;
            D.33247 = *D.33246;
            if (D.33247 != 0B) goto <D.21639>; else goto <D.21641>;
            <D.21641>:
            D.33239 = event->other;
            D.33248 = n + 2;
            D.33249 = (unsigned int) D.33248;
            D.33250 = D.33249 * 4;
            D.33251 = monoeg_realloc (D.33239, D.33250);
            event->other = D.33251;
            <D.33243>:
            D.33239 = event->other;
            n.442 = (unsigned int) n;
            D.33245 = n.442 * 4;
            D.33246 = D.33239 + D.33245;
            *D.33246 = method;
            D.33239 = event->other;
            n.443 = (sizetype) n;
            D.33253 = n.443 + 1;
            D.33254 = D.33253 * 4;
            D.33255 = D.33239 + D.33254;
            *D.33255 = 0B;
            goto <D.21634>;
          }
          <D.21642>:
          goto <D.21634>;
          <D.21634>:
        }
        j = j + 1;
        <D.21644>:
        endm.444 = endm;
        if (j < endm.444) goto <D.21643>; else goto <D.21645>;
        <D.21645>:
      }
      i = i + 1;
      <D.21647>:
      last.436 = last;
      if (i < last.436) goto <D.21646>; else goto <D.21648>;
      <D.21648>:
      mono_memory_barrier ();
      D.33157 = class->ext;
      D.33157->events = events;
      mono_loader_unlock ();
    }
  finally
    {
      endm = {CLOBBER};
      cols = {CLOBBER};
      last = {CLOBBER};
    }
}


inflate_method_listz (struct MonoMethod * * methods, struct MonoClass * class, struct MonoGenericContext * context)
{
  struct MonoMethod * D.33261;
  int D.33262;
  unsigned int D.33263;
  unsigned int D.33264;
  unsigned int count.445;
  unsigned int D.33266;
  struct MonoMethod * * D.33267;
  struct MonoMethod * D.33268;
  struct MonoMethod * * D.33269;
  struct MonoMethod * * om;
  struct MonoMethod * * retval;
  int count;

  om = methods;
  count = 0;
  goto <D.21606>;
  <D.21605>:
  om = om + 4;
  count = count + 1;
  <D.21606>:
  D.33261 = *om;
  if (D.33261 != 0B) goto <D.21605>; else goto <D.21607>;
  <D.21607>:
  D.33262 = count + 1;
  D.33263 = (unsigned int) D.33262;
  D.33264 = D.33263 * 4;
  retval = monoeg_malloc0 (D.33264);
  count = 0;
  om = methods;
  count = 0;
  goto <D.21609>;
  <D.21608>:
  count.445 = (unsigned int) count;
  D.33266 = count.445 * 4;
  D.33267 = retval + D.33266;
  D.33261 = *om;
  D.33268 = mono_class_inflate_generic_method_full (D.33261, class, context);
  *D.33267 = D.33268;
  om = om + 4;
  count = count + 1;
  <D.21609>:
  D.33261 = *om;
  if (D.33261 != 0B) goto <D.21608>; else goto <D.21610>;
  <D.21610>:
  D.33269 = retval;
  return D.33269;
}


mono_class_get_fields (struct MonoClass * klass, void * * iter)
{
  struct MonoClassField * D.33273;
  void * D.33274;
  unsigned char D.33277;
  unsigned int D.33280;
  struct MonoClassField * D.33283;
  unsigned int D.33284;
  struct MonoClassField * D.33285;
  struct MonoClassField * field;

  if (iter == 0B) goto <D.33271>; else goto <D.33272>;
  <D.33271>:
  D.33273 = 0B;
  return D.33273;
  <D.33272>:
  D.33274 = *iter;
  if (D.33274 == 0B) goto <D.33275>; else goto <D.33276>;
  <D.33275>:
  mono_class_setup_fields_locking (klass);
  D.33277 = klass->exception_type;
  if (D.33277 != 0) goto <D.33278>; else goto <D.33279>;
  <D.33278>:
  D.33273 = 0B;
  return D.33273;
  <D.33279>:
  D.33280 = klass->field.count;
  if (D.33280 != 0) goto <D.33281>; else goto <D.33282>;
  <D.33281>:
  D.33283 = klass->fields;
  *iter = D.33283;
  D.33273 = *iter;
  return D.33273;
  <D.33282>:
  D.33273 = 0B;
  return D.33273;
  <D.33276>:
  field = *iter;
  field = field + 16;
  D.33283 = klass->fields;
  D.33280 = klass->field.count;
  D.33284 = D.33280 * 16;
  D.33285 = D.33283 + D.33284;
  if (D.33285 > field) goto <D.33286>; else goto <D.33287>;
  <D.33286>:
  *iter = field;
  D.33273 = *iter;
  return D.33273;
  <D.33287>:
  D.33273 = 0B;
  return D.33273;
}


mono_class_get_methods (struct MonoClass * klass, void * * iter)
{
  struct MonoMethod * D.33291;
  void * D.33292;
  struct MonoMethod * * D.33295;
  unsigned int D.33298;
  unsigned int D.33301;
  struct MonoMethod * * D.33302;
  struct MonoMethod * * method;

  if (iter == 0B) goto <D.33289>; else goto <D.33290>;
  <D.33289>:
  D.33291 = 0B;
  return D.33291;
  <D.33290>:
  D.33292 = *iter;
  if (D.33292 == 0B) goto <D.33293>; else goto <D.33294>;
  <D.33293>:
  mono_class_setup_methods (klass);
  D.33295 = klass->methods;
  if (D.33295 == 0B) goto <D.33296>; else goto <D.33297>;
  <D.33296>:
  D.33291 = 0B;
  return D.33291;
  <D.33297>:
  D.33298 = klass->method.count;
  if (D.33298 != 0) goto <D.33299>; else goto <D.33300>;
  <D.33299>:
  D.33295 = klass->methods;
  *iter = D.33295;
  D.33295 = klass->methods;
  D.33291 = *D.33295;
  return D.33291;
  <D.33300>:
  D.33291 = 0B;
  return D.33291;
  <D.33294>:
  method = *iter;
  method = method + 4;
  D.33295 = klass->methods;
  D.33298 = klass->method.count;
  D.33301 = D.33298 * 4;
  D.33302 = D.33295 + D.33301;
  if (D.33302 > method) goto <D.33303>; else goto <D.33304>;
  <D.33303>:
  *iter = method;
  D.33291 = *method;
  return D.33291;
  <D.33304>:
  D.33291 = 0B;
  return D.33291;
}


mono_class_get_properties (struct MonoClass * klass, void * * iter)
{
  struct MonoProperty * D.33308;
  void * D.33309;
  struct MonoClassExt * D.33312;
  unsigned int D.33313;
  struct MonoProperty * D.33316;
  unsigned int D.33317;
  struct MonoProperty * D.33318;
  struct MonoProperty * property;

  if (iter == 0B) goto <D.33306>; else goto <D.33307>;
  <D.33306>:
  D.33308 = 0B;
  return D.33308;
  <D.33307>:
  D.33309 = *iter;
  if (D.33309 == 0B) goto <D.33310>; else goto <D.33311>;
  <D.33310>:
  mono_class_setup_properties (klass);
  D.33312 = klass->ext;
  D.33313 = D.33312->property.count;
  if (D.33313 != 0) goto <D.33314>; else goto <D.33315>;
  <D.33314>:
  D.33312 = klass->ext;
  D.33316 = D.33312->properties;
  *iter = D.33316;
  D.33308 = *iter;
  return D.33308;
  <D.33315>:
  D.33308 = 0B;
  return D.33308;
  <D.33311>:
  property = *iter;
  property = property + 20;
  D.33312 = klass->ext;
  D.33316 = D.33312->properties;
  D.33312 = klass->ext;
  D.33313 = D.33312->property.count;
  D.33317 = D.33313 * 20;
  D.33318 = D.33316 + D.33317;
  if (D.33318 > property) goto <D.33319>; else goto <D.33320>;
  <D.33319>:
  *iter = property;
  D.33308 = *iter;
  return D.33308;
  <D.33320>:
  D.33308 = 0B;
  return D.33308;
}


mono_class_get_events (struct MonoClass * klass, void * * iter)
{
  struct MonoEvent * D.33324;
  void * D.33325;
  struct MonoClassExt * D.33328;
  unsigned int D.33329;
  struct MonoEvent * D.33332;
  unsigned int D.33333;
  struct MonoEvent * D.33334;
  struct MonoEvent * event;

  if (iter == 0B) goto <D.33322>; else goto <D.33323>;
  <D.33322>:
  D.33324 = 0B;
  return D.33324;
  <D.33323>:
  D.33325 = *iter;
  if (D.33325 == 0B) goto <D.33326>; else goto <D.33327>;
  <D.33326>:
  mono_class_setup_events (klass);
  D.33328 = klass->ext;
  D.33329 = D.33328->event.count;
  if (D.33329 != 0) goto <D.33330>; else goto <D.33331>;
  <D.33330>:
  D.33328 = klass->ext;
  D.33332 = D.33328->events;
  *iter = D.33332;
  D.33324 = *iter;
  return D.33324;
  <D.33331>:
  D.33324 = 0B;
  return D.33324;
  <D.33327>:
  event = *iter;
  event = event + 28;
  D.33328 = klass->ext;
  D.33332 = D.33328->events;
  D.33328 = klass->ext;
  D.33329 = D.33328->event.count;
  D.33333 = D.33329 * 28;
  D.33334 = D.33332 + D.33333;
  if (D.33334 > event) goto <D.33335>; else goto <D.33336>;
  <D.33335>:
  *iter = event;
  D.33324 = *iter;
  return D.33324;
  <D.33336>:
  D.33324 = 0B;
  return D.33324;
}


mono_class_get_interfaces (struct MonoClass * klass, void * * iter)
{
  struct MonoClass * D.33340;
  void * D.33341;
  unsigned char D.33344;
  unsigned char D.33345;
  unsigned char D.33348;
  unsigned char D.33349;
  int D.33352;
  short unsigned int D.33355;
  struct MonoClass * * D.33358;
  unsigned int D.33359;
  unsigned int D.33360;
  struct MonoClass * * D.33361;
  struct MonoError error;
  struct MonoClass * * iface;

  try
    {
      if (iter == 0B) goto <D.33338>; else goto <D.33339>;
      <D.33338>:
      D.33340 = 0B;
      return D.33340;
      <D.33339>:
      D.33341 = *iter;
      if (D.33341 == 0B) goto <D.33342>; else goto <D.33343>;
      <D.33342>:
      D.33344 = BIT_FIELD_REF <*klass, 8, 160>;
      D.33345 = D.33344 & 1;
      if (D.33345 == 0) goto <D.33346>; else goto <D.33347>;
      <D.33346>:
      mono_class_init (klass);
      <D.33347>:
      D.33348 = BIT_FIELD_REF <*klass, 8, 192>;
      D.33349 = D.33348 & 1;
      if (D.33349 == 0) goto <D.33350>; else goto <D.33351>;
      <D.33350>:
      mono_class_setup_interfaces (klass, &error);
      D.33352 = mono_error_ok (&error);
      if (D.33352 == 0) goto <D.33353>; else goto <D.33354>;
      <D.33353>:
      mono_error_cleanup (&error);
      D.33340 = 0B;
      return D.33340;
      <D.33354>:
      <D.33351>:
      D.33355 = klass->interface_count;
      if (D.33355 != 0) goto <D.33356>; else goto <D.33357>;
      <D.33356>:
      D.33358 = klass->interfaces;
      *iter = D.33358;
      D.33358 = klass->interfaces;
      D.33340 = *D.33358;
      return D.33340;
      <D.33357>:
      D.33340 = 0B;
      return D.33340;
      <D.33343>:
      iface = *iter;
      iface = iface + 4;
      D.33358 = klass->interfaces;
      D.33355 = klass->interface_count;
      D.33359 = (unsigned int) D.33355;
      D.33360 = D.33359 * 4;
      D.33361 = D.33358 + D.33360;
      if (D.33361 > iface) goto <D.33362>; else goto <D.33363>;
      <D.33362>:
      *iter = iface;
      D.33340 = *iface;
      return D.33340;
      <D.33363>:
      D.33340 = 0B;
      return D.33340;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_get_nested_types (struct MonoClass * klass, void * * iter)
{
  struct MonoClass * D.33368;
  unsigned char D.33369;
  unsigned char D.33370;
  unsigned int D.33373;
  struct MonoImage * D.33378;
  unsigned int D.33379;
  struct MonoTableInfo * D.33380;
  int D.33381;
  unsigned int D.33382;
  unsigned int D.33383;
  int D.33384;
  int D.33387;
  unsigned int D.33388;
  unsigned int D.33389;
  struct MonoClassExt * D.33390;
  struct GList * D.33391;
  struct GList * D.33392;
  unsigned int D.33393;
  void * D.33394;
  struct MonoError error;
  struct GList * item;
  int i;

  try
    {
      if (iter == 0B) goto <D.33366>; else goto <D.33367>;
      <D.33366>:
      D.33368 = 0B;
      return D.33368;
      <D.33367>:
      D.33369 = BIT_FIELD_REF <*klass, 8, 184>;
      D.33370 = D.33369 & 128;
      if (D.33370 == 0) goto <D.33371>; else goto <D.33372>;
      <D.33371>:
      D.33373 = klass->type_token;
      if (D.33373 == 0) goto <D.33374>; else goto <D.33375>;
      <D.33374>:
      klass->nested_classes_inited = 1;
      <D.33375>:
      mono_loader_lock ();
      D.33369 = BIT_FIELD_REF <*klass, 8, 184>;
      D.33370 = D.33369 & 128;
      if (D.33370 == 0) goto <D.33376>; else goto <D.33377>;
      <D.33376>:
      D.33378 = klass->image;
      D.33373 = klass->type_token;
      D.33379 = mono_metadata_nesting_typedef (D.33378, D.33373, 1);
      i = (int) D.33379;
      goto <D.23855>;
      <D.23856>:
      {
        struct MonoClass * nclass;
        guint32 cols[2];

        try
          {
            D.33378 = klass->image;
            D.33380 = &D.33378->tables[41];
            D.33381 = i + -1;
            mono_metadata_decode_row (D.33380, D.33381, &cols, 2);
            D.33378 = klass->image;
            D.33382 = cols[0];
            D.33383 = D.33382 | 33554432;
            nclass = mono_class_create_from_typedef (D.33378, D.33383, &error);
            D.33384 = mono_error_ok (&error);
            if (D.33384 == 0) goto <D.33385>; else goto <D.33386>;
            <D.33385>:
            mono_error_cleanup (&error);
            D.33378 = klass->image;
            D.33373 = klass->type_token;
            D.33387 = i + 1;
            D.33388 = (unsigned int) D.33387;
            D.33389 = mono_metadata_nesting_typedef (D.33378, D.33373, D.33388);
            i = (int) D.33389;
            // predicted unlikely by continue predictor.
            goto <D.23855>;
            <D.33386>:
            mono_class_alloc_ext (klass);
            D.33390 = klass->ext;
            D.33378 = klass->image;
            D.33390 = klass->ext;
            D.33391 = D.33390->nested_classes;
            D.33392 = g_list_prepend_image (D.33378, D.33391, nclass);
            D.33390->nested_classes = D.33392;
            D.33378 = klass->image;
            D.33373 = klass->type_token;
            D.33387 = i + 1;
            D.33388 = (unsigned int) D.33387;
            D.33393 = mono_metadata_nesting_typedef (D.33378, D.33373, D.33388);
            i = (int) D.33393;
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      <D.23855>:
      if (i != 0) goto <D.23856>; else goto <D.23857>;
      <D.23857>:
      <D.33377>:
      mono_memory_barrier ();
      klass->nested_classes_inited = 1;
      mono_loader_unlock ();
      <D.33372>:
      D.33394 = *iter;
      if (D.33394 == 0B) goto <D.33395>; else goto <D.33396>;
      <D.33395>:
      D.33390 = klass->ext;
      if (D.33390 != 0B) goto <D.33398>; else goto <D.33397>;
      <D.33398>:
      D.33390 = klass->ext;
      D.33391 = D.33390->nested_classes;
      if (D.33391 != 0B) goto <D.33399>; else goto <D.33397>;
      <D.33399>:
      D.33390 = klass->ext;
      D.33391 = D.33390->nested_classes;
      *iter = D.33391;
      D.33390 = klass->ext;
      D.33391 = D.33390->nested_classes;
      D.33368 = D.33391->data;
      return D.33368;
      <D.33397>:
      D.33368 = 0B;
      return D.33368;
      <D.33396>:
      item = *iter;
      item = item->next;
      if (item != 0B) goto <D.33400>; else goto <D.33401>;
      <D.33400>:
      *iter = item;
      D.33368 = item->data;
      return D.33368;
      <D.33401>:
      D.33368 = 0B;
      return D.33368;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_is_delegate (struct MonoClass * klass)
{
  mono_bool D.33406;
  <unnamed-unsigned:1> D.33407;

  D.33407 = klass->delegate;
  D.33406 = (mono_bool) D.33407;
  return D.33406;
}


mono_class_implements_interface (struct MonoClass * klass, struct MonoClass * iface)
{
  mono_bool D.33409;

  D.33409 = mono_class_is_assignable_from (iface, klass);
  return D.33409;
}


mono_field_get_name (struct MonoClassField * field)
{
  const char * D.33411;

  D.33411 = field->name;
  return D.33411;
}


mono_field_get_type (struct MonoClassField * field)
{
  int D.33413;
  const char * D.33416;
  struct MonoType * D.33417;
  struct MonoError error;
  struct MonoType * type;

  try
    {
      type = mono_field_get_type_checked (field, &error);
      D.33413 = mono_error_ok (&error);
      if (D.33413 == 0) goto <D.33414>; else goto <D.33415>;
      <D.33414>:
      D.33416 = mono_error_get_message (&error);
      mono_trace (16, 2, "Could not load field\'s type due to %s", D.33416);
      mono_error_cleanup (&error);
      <D.33415>:
      D.33417 = type;
      return D.33417;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_field_get_type_checked (struct MonoClassField * field, struct MonoError * error)
{
  struct MonoType * D.33420;
  struct MonoType * D.33423;

  mono_error_init (error);
  D.33420 = field->type;
  if (D.33420 == 0B) goto <D.33421>; else goto <D.33422>;
  <D.33421>:
  mono_field_resolve_type (field, error);
  <D.33422>:
  D.33423 = field->type;
  return D.33423;
}


mono_field_get_parent (struct MonoClassField * field)
{
  struct MonoClass * D.33425;

  D.33425 = field->parent;
  return D.33425;
}


mono_field_get_flags (struct MonoClassField * field)
{
  struct MonoType * D.33427;
  uint32_t D.33430;
  short unsigned int D.33431;

  D.33427 = field->type;
  if (D.33427 == 0B) goto <D.33428>; else goto <D.33429>;
  <D.33428>:
  D.33430 = mono_field_resolve_flags (field);
  return D.33430;
  <D.33429>:
  D.33427 = field->type;
  D.33431 = D.33427->attrs;
  D.33430 = (uint32_t) D.33431;
  return D.33430;
}


mono_field_resolve_flags (struct MonoClassField * field)
{
  struct MonoClass * iftmp.446;
  struct MonoGenericClass * D.33434;
  int field.447;
  struct MonoClassField * D.33439;
  int D.33440;
  int D.33441;
  struct MonoClassField * D.33444;
  unsigned int field_idx.448;
  unsigned int D.33446;
  guint32 D.33447;
  unsigned int D.33448;
  unsigned int field_idx.449;
  unsigned int D.33450;
  unsigned char D.33451;
  unsigned char D.33452;
  _Bool D.33453;
  long int D.33454;
  long int D.33455;
  struct MonoClass * class;
  struct MonoImage * image;
  struct MonoClass * gtd;
  int field_idx;

  class = field->parent;
  image = class->image;
  D.33434 = class->generic_class;
  if (D.33434 != 0B) goto <D.33435>; else goto <D.33436>;
  <D.33435>:
  iftmp.446 = mono_class_get_generic_type_definition (class);
  goto <D.33437>;
  <D.33436>:
  iftmp.446 = 0B;
  <D.33437>:
  gtd = iftmp.446;
  field.447 = (int) field;
  D.33439 = class->fields;
  D.33440 = (int) D.33439;
  D.33441 = field.447 - D.33440;
  field_idx = D.33441 /[ex] 16;
  if (gtd != 0B) goto <D.33442>; else goto <D.33443>;
  <D.33442>:
  {
    struct MonoClassField * gfield;

    D.33444 = gtd->fields;
    field_idx.448 = (unsigned int) field_idx;
    D.33446 = field_idx.448 * 16;
    gfield = D.33444 + D.33446;
    D.33447 = mono_field_get_flags (gfield);
    return D.33447;
  }
  <D.33443>:
  {
    int idx;

    D.33448 = class->field.first;
    field_idx.449 = (unsigned int) field_idx;
    D.33450 = D.33448 + field_idx.449;
    idx = (int) D.33450;
    D.33451 = BIT_FIELD_REF <*image, 8, 128>;
    D.33452 = D.33451 & 8;
    D.33453 = D.33452 != 0;
    D.33454 = (long int) D.33453;
    D.33455 = __builtin_expect (D.33454, 0);
    if (D.33455 != 0) goto <D.33456>; else goto <D.33457>;
    <D.33456>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10164, "!image->dynamic");
    <D.33457>:
    D.33447 = mono_metadata_decode_table_row_col (image, 4, idx, 0);
    return D.33447;
  }
}


mono_field_get_offset (struct MonoClassField * field)
{
  uint32_t D.33459;
  int D.33460;

  D.33460 = field->offset;
  D.33459 = (uint32_t) D.33460;
  return D.33459;
}


mono_field_get_data (struct MonoClassField * field)
{
  struct MonoType * D.33462;
  short unsigned int D.33463;
  signed short D.33464;
  const char * D.33467;
  int D.33468;
  int D.33469;

  D.33462 = field->type;
  D.33463 = D.33462->attrs;
  D.33464 = (signed short) D.33463;
  if (D.33464 < 0) goto <D.33465>; else goto <D.33466>;
  <D.33465>:
  {
    MonoTypeEnum def_type;

    try
      {
        D.33467 = mono_class_get_field_default_value (field, &def_type);
        return D.33467;
      }
    finally
      {
        def_type = {CLOBBER};
      }
  }
  <D.33466>:
  D.33462 = field->type;
  D.33463 = D.33462->attrs;
  D.33468 = (int) D.33463;
  D.33469 = D.33468 & 256;
  if (D.33469 != 0) goto <D.33470>; else goto <D.33471>;
  <D.33470>:
  D.33467 = mono_field_get_rva (field);
  return D.33467;
  <D.33471>:
  D.33467 = 0B;
  return D.33467;
}


mono_field_get_rva (struct MonoClassField * field)
{
  struct MonoType * D.33474;
  short unsigned int D.33475;
  int D.33476;
  int D.33477;
  _Bool D.33478;
  long int D.33479;
  long int D.33480;
  struct MonoClassExt * D.33485;
  struct MonoFieldDefaultValue * D.33487;
  unsigned int D.33490;
  unsigned int D.33491;
  int D.33492;
  void * D.33493;
  unsigned int field_index.450;
  unsigned int D.33495;
  struct MonoFieldDefaultValue * D.33496;
  const char * D.33497;
  struct MonoImage * D.33500;
  unsigned char D.33501;
  unsigned char D.33502;
  struct MonoClass * D.33505;
  struct MonoImage * D.33506;
  unsigned int D.33507;
  unsigned int field_index.451;
  unsigned int D.33509;
  unsigned int rva.452;
  const char * D.33513;
  const char * D.33514;
  char * D.33515;
  const char * D.33516;
  guint32 rva;
  int field_index;
  struct MonoClass * klass;

  try
    {
      klass = field->parent;
      D.33474 = field->type;
      D.33475 = D.33474->attrs;
      D.33476 = (int) D.33475;
      D.33477 = D.33476 & 256;
      D.33478 = D.33477 == 0;
      D.33479 = (long int) D.33478;
      D.33480 = __builtin_expect (D.33479, 0);
      if (D.33480 != 0) goto <D.33481>; else goto <D.33482>;
      <D.33481>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 9062, "field->type->attrs & FIELD_ATTRIBUTE_HAS_FIELD_RVA");
      <D.33482>:
      D.33485 = klass->ext;
      if (D.33485 == 0B) goto <D.33483>; else goto <D.33486>;
      <D.33486>:
      D.33485 = klass->ext;
      D.33487 = D.33485->field_def_values;
      if (D.33487 == 0B) goto <D.33483>; else goto <D.33484>;
      <D.33483>:
      mono_loader_lock ();
      mono_class_alloc_ext (klass);
      D.33485 = klass->ext;
      D.33487 = D.33485->field_def_values;
      if (D.33487 == 0B) goto <D.33488>; else goto <D.33489>;
      <D.33488>:
      D.33485 = klass->ext;
      D.33490 = klass->field.count;
      D.33491 = D.33490 * 8;
      D.33492 = (int) D.33491;
      D.33493 = mono_class_alloc0 (klass, D.33492);
      D.33485->field_def_values = D.33493;
      <D.33489>:
      mono_loader_unlock ();
      <D.33484>:
      field_index = mono_field_get_index (field);
      D.33485 = klass->ext;
      D.33487 = D.33485->field_def_values;
      field_index.450 = (unsigned int) field_index;
      D.33495 = field_index.450 * 8;
      D.33496 = D.33487 + D.33495;
      D.33497 = D.33496->data;
      if (D.33497 == 0B) goto <D.33498>; else goto <D.33499>;
      <D.33498>:
      D.33500 = klass->image;
      D.33501 = BIT_FIELD_REF <*D.33500, 8, 128>;
      D.33502 = D.33501 & 8;
      if (D.33502 == 0) goto <D.33503>; else goto <D.33504>;
      <D.33503>:
      D.33505 = field->parent;
      D.33506 = D.33505->image;
      D.33507 = klass->field.first;
      field_index.451 = (unsigned int) field_index;
      D.33509 = D.33507 + field_index.451;
      mono_metadata_field_info (D.33506, D.33509, 0B, &rva, 0B);
      rva.452 = rva;
      if (rva.452 == 0) goto <D.33511>; else goto <D.33512>;
      <D.33511>:
      D.33513 = mono_field_get_name (field);
      D.33505 = field->parent;
      D.33514 = D.33505->name;
      monoeg_g_log (0B, 16, "field %s in %s should have RVA data, but hasn\'t", D.33513, D.33514);
      <D.33512>:
      D.33485 = klass->ext;
      D.33487 = D.33485->field_def_values;
      field_index.450 = (unsigned int) field_index;
      D.33495 = field_index.450 * 8;
      D.33496 = D.33487 + D.33495;
      D.33505 = field->parent;
      D.33506 = D.33505->image;
      rva.452 = rva;
      D.33515 = mono_image_rva_map (D.33506, rva.452);
      D.33496->data = D.33515;
      <D.33504>:
      <D.33499>:
      D.33485 = klass->ext;
      D.33487 = D.33485->field_def_values;
      field_index.450 = (unsigned int) field_index;
      D.33495 = field_index.450 * 8;
      D.33496 = D.33487 + D.33495;
      D.33516 = D.33496->data;
      return D.33516;
    }
  finally
    {
      rva = {CLOBBER};
    }
}


mono_property_get_name (struct MonoProperty * prop)
{
  const char * D.33519;

  D.33519 = prop->name;
  return D.33519;
}


mono_property_get_set_method (struct MonoProperty * prop)
{
  struct MonoMethod * D.33521;

  D.33521 = prop->set;
  return D.33521;
}


mono_property_get_get_method (struct MonoProperty * prop)
{
  struct MonoMethod * D.33523;

  D.33523 = prop->get;
  return D.33523;
}


mono_property_get_parent (struct MonoProperty * prop)
{
  struct MonoClass * D.33525;

  D.33525 = prop->parent;
  return D.33525;
}


mono_property_get_flags (struct MonoProperty * prop)
{
  uint32_t D.33527;

  D.33527 = prop->attrs;
  return D.33527;
}


mono_event_get_name (struct MonoEvent * event)
{
  const char * D.33529;

  D.33529 = event->name;
  return D.33529;
}


mono_event_get_add_method (struct MonoEvent * event)
{
  struct MonoMethod * D.33531;

  D.33531 = event->add;
  return D.33531;
}


mono_event_get_remove_method (struct MonoEvent * event)
{
  struct MonoMethod * D.33533;

  D.33533 = event->remove;
  return D.33533;
}


mono_event_get_raise_method (struct MonoEvent * event)
{
  struct MonoMethod * D.33535;

  D.33535 = event->raise;
  return D.33535;
}


mono_event_get_parent (struct MonoEvent * event)
{
  struct MonoClass * D.33537;

  D.33537 = event->parent;
  return D.33537;
}


mono_event_get_flags (struct MonoEvent * event)
{
  uint32_t D.33539;

  D.33539 = event->attrs;
  return D.33539;
}


mono_class_get_method_from_name (struct MonoClass * klass, const char * name, int param_count)
{
  struct MonoMethod * D.33541;

  D.33541 = mono_class_get_method_from_name_flags (klass, name, param_count, 0);
  return D.33541;
}


mono_class_get_method_from_name_flags (struct MonoClass * klass, const char * name, int param_count, int flags)
{
  struct MonoGenericClass * D.33543;
  struct MonoMethod * * D.33546;
  struct MonoClass * D.33549;
  struct MonoGenericContext * D.33552;
  struct MonoMethod * D.33553;
  unsigned int D.33558;
  struct MonoImage * D.33560;
  unsigned char D.33561;
  unsigned char D.33562;
  unsigned int i.453;
  unsigned int D.33567;
  struct MonoMethod * * D.33568;
  const char * D.33571;
  char D.33572;
  char D.33573;
  int D.23974;
  struct MonoMethodSignature * D.33579;
  short unsigned int D.33580;
  int D.33581;
  short unsigned int D.33582;
  int D.33583;
  int D.33584;
  unsigned int i.454;
  unsigned int D.33588;
  struct MonoMethod * res;
  int i;

  res = 0B;
  mono_class_init (klass);
  D.33543 = klass->generic_class;
  if (D.33543 != 0B) goto <D.33544>; else goto <D.33545>;
  <D.33544>:
  D.33546 = klass->methods;
  if (D.33546 == 0B) goto <D.33547>; else goto <D.33548>;
  <D.33547>:
  D.33543 = klass->generic_class;
  D.33549 = D.33543->container_class;
  res = mono_class_get_method_from_name_flags (D.33549, name, param_count, flags);
  if (res != 0B) goto <D.33550>; else goto <D.33551>;
  <D.33550>:
  D.33552 = mono_class_get_context (klass);
  res = mono_class_inflate_generic_method_full (res, klass, D.33552);
  <D.33551>:
  D.33553 = res;
  return D.33553;
  <D.33548>:
  <D.33545>:
  D.33546 = klass->methods;
  if (D.33546 != 0B) goto <D.33554>; else goto <D.33557>;
  <D.33557>:
  D.33558 = klass->type_token;
  if (D.33558 == 0) goto <D.33554>; else goto <D.33559>;
  <D.33559>:
  D.33560 = klass->image;
  D.33561 = BIT_FIELD_REF <*D.33560, 8, 128>;
  D.33562 = D.33561 & 8;
  if (D.33562 != 0) goto <D.33554>; else goto <D.33563>;
  <D.33563>:
  D.33543 = klass->generic_class;
  if (D.33543 != 0B) goto <D.33554>; else goto <D.33555>;
  <D.33554>:
  mono_class_setup_methods (klass);
  D.33546 = klass->methods;
  if (D.33546 == 0B) goto <D.33564>; else goto <D.33565>;
  <D.33564>:
  D.33553 = 0B;
  return D.33553;
  <D.33565>:
  i = 0;
  goto <D.23977>;
  <D.23976>:
  {
    struct MonoMethod * method;

    D.33546 = klass->methods;
    i.453 = (unsigned int) i;
    D.33567 = i.453 * 4;
    D.33568 = D.33546 + D.33567;
    method = *D.33568;
    D.33571 = method->name;
    D.33572 = *D.33571;
    D.33573 = *name;
    if (D.33572 == D.33573) goto <D.33574>; else goto <D.33575>;
    <D.33574>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.33571 = method->name;
      D.23974 = __builtin_strcmp (name, D.33571);
    }
    if (D.23974 == 0) goto <D.33576>; else goto <D.33577>;
    <D.33576>:
    if (param_count == -1) goto <D.33569>; else goto <D.33578>;
    <D.33578>:
    D.33579 = mono_method_signature (method);
    D.33580 = D.33579->param_count;
    D.33581 = (int) D.33580;
    if (D.33581 == param_count) goto <D.33569>; else goto <D.33570>;
    <D.33569>:
    D.33582 = method->flags;
    D.33583 = (int) D.33582;
    D.33584 = D.33583 & flags;
    if (D.33584 == flags) goto <D.33585>; else goto <D.33586>;
    <D.33585>:
    res = method;
    goto <D.23975>;
    <D.33586>:
    <D.33570>:
    <D.33577>:
    <D.33575>:
  }
  i = i + 1;
  <D.23977>:
  i.454 = (unsigned int) i;
  D.33588 = klass->method.count;
  if (i.454 < D.33588) goto <D.23976>; else goto <D.23975>;
  <D.23975>:
  goto <D.33556>;
  <D.33555>:
  res = find_method_in_metadata (klass, name, param_count, flags);
  <D.33556>:
  D.33553 = res;
  return D.33553;
}


mono_class_set_failure (struct MonoClass * klass, guint32 ex_type, void * ex_data)
{
  unsigned char D.33590;
  gboolean D.33593;
  unsigned char D.33594;
  struct MonoImage * D.33597;

  D.33590 = klass->exception_type;
  if (D.33590 != 0) goto <D.33591>; else goto <D.33592>;
  <D.33591>:
  D.33593 = 0;
  return D.33593;
  <D.33592>:
  mono_loader_lock ();
  D.33594 = (unsigned char) ex_type;
  klass->exception_type = D.33594;
  if (ex_data != 0B) goto <D.33595>; else goto <D.33596>;
  <D.33595>:
  D.33597 = klass->image;
  mono_image_property_insert (D.33597, klass, 0, ex_data);
  <D.33596>:
  mono_loader_unlock ();
  D.33593 = 1;
  return D.33593;
}


mono_class_get_exception_data (struct MonoClass * klass)
{
  void * D.33599;
  struct MonoImage * D.33600;

  D.33600 = klass->image;
  D.33599 = mono_image_property_lookup (D.33600, klass, 0);
  return D.33599;
}


mono_classes_init ()
{
  mono_counters_register ("Inflated methods size", 2048, &inflated_methods_size);
  mono_counters_register ("Inflated classes", 2048, &inflated_classes);
  mono_counters_register ("Inflated classes size", 2048, &inflated_classes_size);
  mono_counters_register ("MonoClass size", 1024, &classes_size);
  mono_counters_register ("MonoClassExt size", 1024, &class_ext_size);
}


mono_classes_cleanup ()
{
  struct MonoBitSet * global_interface_bitset.455;

  global_interface_bitset.455 = global_interface_bitset;
  if (global_interface_bitset.455 != 0B) goto <D.33603>; else goto <D.33604>;
  <D.33603>:
  global_interface_bitset.455 = global_interface_bitset;
  mono_bitset_free (global_interface_bitset.455);
  <D.33604>:
  global_interface_bitset = 0B;
}


mono_class_get_exception_for_failure (struct MonoClass * klass)
{
  unsigned char D.33605;
  int D.33606;
  guint32 iftmp.456;
  struct MonoImage * D.33611;
  struct MonoAssembly * D.33612;
  struct MonoReflectionAssembly * D.33613;
  struct MonoType * D.33614;
  struct MonoReflectionType * D.33615;
  void * iftmp.457;
  struct MonoMethod * D.33620;
  struct MonoException * D.33621;
  char * iftmp.458;
  struct MonoAssembly * D.33623;
  struct MonoAssemblyName * D.33626;
  struct MonoDomain * D.33628;
  unsigned int D.33629;
  sizetype D.33630;
  unsigned int D.33631;
  sizetype D.33632;
  unsigned int D.33633;
  sizetype D.33634;
  struct MonoDomain * D.33635;
  struct MonoString * D.33636;
  void * exception_data;

  exception_data = mono_class_get_exception_data (klass);
  D.33605 = klass->exception_type;
  D.33606 = (int) D.33605;
  switch (D.33606) <default: <D.24020>, case 2: <D.23996>, case 5: <D.24008>, case 6: <D.24011>, case 7: <D.24003>, case 8: <D.24014>, case 12: <D.24019>>
  <D.23996>:
  {
    struct MonoDomain * domain;
    struct MonoSecurityManager * secman;
    struct MonoMethod * method;
    guint32 error;
    struct MonoObject * exc;
    void * args[4];

    try
      {
        domain = mono_domain_get ();
        secman = mono_security_manager_get_methods ();
        method = exception_data;
        if (method != 0B) goto <D.33608>; else goto <D.33609>;
        <D.33608>:
        iftmp.456 = 2;
        goto <D.33610>;
        <D.33609>:
        iftmp.456 = 1;
        <D.33610>:
        error = iftmp.456;
        exc = 0B;
        args[0] = &error;
        D.33611 = klass->image;
        D.33612 = mono_image_get_assembly (D.33611);
        D.33613 = mono_assembly_get_object (domain, D.33612);
        args[1] = D.33613;
        D.33614 = &klass->byval_arg;
        D.33615 = mono_type_get_object (domain, D.33614);
        args[2] = D.33615;
        if (method != 0B) goto <D.33617>; else goto <D.33618>;
        <D.33617>:
        iftmp.457 = mono_method_get_object (domain, method, 0B);
        goto <D.33619>;
        <D.33618>:
        iftmp.457 = 0B;
        <D.33619>:
        args[3] = iftmp.457;
        D.33620 = secman->inheritsecurityexception;
        mono_runtime_invoke (D.33620, 0B, &args, &exc);
        D.33621 = exc;
        return D.33621;
      }
    finally
      {
        error = {CLOBBER};
        exc = {CLOBBER};
        args = {CLOBBER};
      }
  }
  <D.24003>:
  {
    struct MonoString * name;
    struct MonoException * ex;
    char * str;
    char * astr;

    str = mono_type_get_full_name (klass);
    D.33611 = klass->image;
    D.33623 = D.33611->assembly;
    if (D.33623 != 0B) goto <D.33624>; else goto <D.33625>;
    <D.33624>:
    D.33611 = klass->image;
    D.33623 = D.33611->assembly;
    D.33626 = &D.33623->aname;
    iftmp.458 = mono_stringify_assembly_name (D.33626);
    goto <D.33627>;
    <D.33625>:
    iftmp.458 = 0B;
    <D.33627>:
    astr = iftmp.458;
    D.33628 = mono_domain_get ();
    name = mono_string_new (D.33628, str);
    monoeg_g_free (str);
    ex = mono_get_exception_type_load (name, astr);
    monoeg_g_free (astr);
    D.33621 = ex;
    return D.33621;
  }
  <D.24008>:
  {
    char * class_name;
    char * assembly_name;

    class_name = exception_data;
    D.33629 = strlen (class_name);
    D.33630 = D.33629 + 1;
    assembly_name = class_name + D.33630;
    D.33621 = mono_get_exception_missing_method (class_name, assembly_name);
    return D.33621;
  }
  <D.24011>:
  {
    char * class_name;
    char * member_name;

    class_name = exception_data;
    D.33631 = strlen (class_name);
    D.33632 = D.33631 + 1;
    member_name = class_name + D.33632;
    D.33621 = mono_get_exception_missing_field (class_name, member_name);
    return D.33621;
  }
  <D.24014>:
  {
    char * msg_format;
    char * assembly_name;
    char * msg;
    struct MonoException * ex;

    msg_format = exception_data;
    D.33633 = strlen (msg_format);
    D.33634 = D.33633 + 1;
    assembly_name = msg_format + D.33634;
    msg = monoeg_g_strdup_printf (msg_format, assembly_name);
    D.33635 = mono_domain_get ();
    D.33636 = mono_string_new (D.33635, assembly_name);
    ex = mono_get_exception_file_not_found2 (msg, D.33636);
    monoeg_g_free (msg);
    D.33621 = ex;
    return D.33621;
  }
  <D.24019>:
  D.33621 = mono_get_exception_bad_image_format (exception_data);
  return D.33621;
  <D.24020>:
  {
    struct MonoLoaderError * error;
    struct MonoException * ex;

    error = mono_loader_get_last_error ();
    if (error != 0B) goto <D.33637>; else goto <D.33638>;
    <D.33637>:
    ex = mono_loader_error_prepare_exception (error);
    D.33621 = ex;
    return D.33621;
    <D.33638>:
    D.33621 = 0B;
    return D.33621;
  }
}


mono_class_get_generic_type_definition (struct MonoClass * klass)
{
  struct MonoClass * D.33641;
  struct MonoClass * iftmp.459;
  struct MonoGenericClass * D.33643;

  D.33643 = klass->generic_class;
  if (D.33643 != 0B) goto <D.33644>; else goto <D.33645>;
  <D.33644>:
  D.33643 = klass->generic_class;
  iftmp.459 = D.33643->container_class;
  goto <D.33646>;
  <D.33645>:
  iftmp.459 = klass;
  <D.33646>:
  D.33641 = iftmp.459;
  return D.33641;
}


mono_class_has_parent_and_ignore_generics (struct MonoClass * klass, struct MonoClass * parent)
{
  struct MonoClass * * D.33648;
  unsigned int i.460;
  unsigned int D.33650;
  struct MonoClass * * D.33651;
  struct MonoClass * D.33652;
  struct MonoClass * D.33653;
  gboolean D.33656;
  short unsigned int D.33657;
  int D.33658;
  int i;

  klass = mono_class_get_generic_type_definition (klass);
  parent = mono_class_get_generic_type_definition (parent);
  mono_class_setup_supertypes (klass);
  i = 0;
  goto <D.24038>;
  <D.24037>:
  D.33648 = klass->supertypes;
  i.460 = (unsigned int) i;
  D.33650 = i.460 * 4;
  D.33651 = D.33648 + D.33650;
  D.33652 = *D.33651;
  D.33653 = mono_class_get_generic_type_definition (D.33652);
  if (D.33653 == parent) goto <D.33654>; else goto <D.33655>;
  <D.33654>:
  D.33656 = 1;
  return D.33656;
  <D.33655>:
  i = i + 1;
  <D.24038>:
  D.33657 = klass->idepth;
  D.33658 = (int) D.33657;
  if (D.33658 > i) goto <D.24037>; else goto <D.24039>;
  <D.24039>:
  D.33656 = 0;
  return D.33656;
}


mono_method_can_access_field (struct MonoMethod * method, struct MonoClassField * field)
{
  struct MonoClass * D.33660;
  struct MonoClass * D.33661;
  struct MonoType * D.33662;
  short unsigned int D.33663;
  int D.33664;
  int D.33665;
  struct MonoType * D.33668;
  short unsigned int D.33669;
  int D.33670;
  int D.33671;
  mono_bool D.33674;
  int can;

  D.33660 = method->klass;
  D.33661 = field->parent;
  D.33662 = mono_field_get_type (field);
  D.33663 = D.33662->attrs;
  D.33664 = (int) D.33663;
  D.33665 = D.33664 & 7;
  can = can_access_member (D.33660, D.33661, 0B, D.33665);
  if (can == 0) goto <D.33666>; else goto <D.33667>;
  <D.33666>:
  {
    struct MonoClass * nested;

    D.33660 = method->klass;
    nested = D.33660->nested_in;
    goto <D.24121>;
    <D.24120>:
    D.33661 = field->parent;
    D.33668 = mono_field_get_type (field);
    D.33669 = D.33668->attrs;
    D.33670 = (int) D.33669;
    D.33671 = D.33670 & 7;
    can = can_access_member (nested, D.33661, 0B, D.33671);
    if (can != 0) goto <D.33672>; else goto <D.33673>;
    <D.33672>:
    D.33674 = 1;
    return D.33674;
    <D.33673>:
    nested = nested->nested_in;
    <D.24121>:
    if (nested != 0B) goto <D.24120>; else goto <D.24122>;
    <D.24122>:
  }
  <D.33667>:
  D.33674 = can;
  return D.33674;
}


can_access_member (struct MonoClass * access_klass, struct MonoClass * member_klass, struct MonoClass * context_klass, int access_level)
{
  struct MonoImage * D.33676;
  struct MonoAssembly * D.33677;
  unsigned char D.33680;
  gboolean D.33683;
  struct MonoGenericClass * D.33687;
  struct MonoClass * D.33689;
  struct MonoGenericContainer * D.33690;
  int D.33696;
  struct MonoImage * D.33699;
  _Bool D.33700;
  _Bool D.33701;
  int D.33702;
  struct MonoAssembly * D.33705;
  int D.33706;
  int D.33709;
  int D.33712;
  struct MonoClass * member_generic_def;

  D.33676 = access_klass->image;
  D.33677 = D.33676->assembly;
  if (D.33677 != 0B) goto <D.33678>; else goto <D.33679>;
  <D.33678>:
  D.33676 = access_klass->image;
  D.33677 = D.33676->assembly;
  D.33680 = D.33677->corlib_internal;
  if (D.33680 != 0) goto <D.33681>; else goto <D.33682>;
  <D.33681>:
  D.33683 = 1;
  return D.33683;
  <D.33682>:
  <D.33679>:
  D.33687 = access_klass->generic_class;
  if (D.33687 != 0B) goto <D.33688>; else goto <D.33684>;
  <D.33688>:
  D.33687 = access_klass->generic_class;
  D.33689 = D.33687->container_class;
  if (D.33689 != 0B) goto <D.33685>; else goto <D.33684>;
  <D.33684>:
  D.33690 = access_klass->generic_container;
  if (D.33690 != 0B) goto <D.33685>; else goto <D.33686>;
  <D.33685>:
  member_generic_def = get_generic_definition_class (member_klass);
  if (member_generic_def != 0B) goto <D.33691>; else goto <D.33692>;
  <D.33691>:
  {
    struct MonoClass * access_container;

    D.33690 = access_klass->generic_container;
    if (D.33690 != 0B) goto <D.33693>; else goto <D.33694>;
    <D.33693>:
    access_container = access_klass;
    goto <D.33695>;
    <D.33694>:
    D.33687 = access_klass->generic_class;
    access_container = D.33687->container_class;
    <D.33695>:
    D.33696 = can_access_member (access_container, member_generic_def, context_klass, access_level);
    if (D.33696 != 0) goto <D.33697>; else goto <D.33698>;
    <D.33697>:
    D.33683 = 1;
    return D.33683;
    <D.33698>:
  }
  <D.33692>:
  <D.33686>:
  switch (access_level) <default: <D.33715>, case 0: <D.24107>, case 1: <D.24108>, case 2: <D.24109>, case 3: <D.24110>, case 4: <D.24111>, case 5: <D.24112>, case 6: <D.24113>>
  <D.24107>:
  D.33676 = access_klass->image;
  D.33699 = member_klass->image;
  D.33700 = D.33676 == D.33699;
  D.33683 = (gboolean) D.33700;
  return D.33683;
  <D.24108>:
  D.33701 = access_klass == member_klass;
  D.33683 = (gboolean) D.33701;
  return D.33683;
  <D.24109>:
  D.33702 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.33702 != 0) goto <D.33703>; else goto <D.33704>;
  <D.33703>:
  D.33676 = access_klass->image;
  D.33677 = D.33676->assembly;
  D.33699 = member_klass->image;
  D.33705 = D.33699->assembly;
  D.33706 = can_access_internals (D.33677, D.33705);
  if (D.33706 != 0) goto <D.33707>; else goto <D.33708>;
  <D.33707>:
  D.33683 = 1;
  return D.33683;
  <D.33708>:
  <D.33704>:
  D.33683 = 0;
  return D.33683;
  <D.24110>:
  D.33676 = access_klass->image;
  D.33677 = D.33676->assembly;
  D.33699 = member_klass->image;
  D.33705 = D.33699->assembly;
  D.33683 = can_access_internals (D.33677, D.33705);
  return D.33683;
  <D.24111>:
  D.33709 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.33709 != 0) goto <D.33710>; else goto <D.33711>;
  <D.33710>:
  D.33683 = 1;
  return D.33683;
  <D.33711>:
  D.33683 = 0;
  return D.33683;
  <D.24112>:
  D.33712 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.33712 != 0) goto <D.33713>; else goto <D.33714>;
  <D.33713>:
  D.33683 = 1;
  return D.33683;
  <D.33714>:
  D.33676 = access_klass->image;
  D.33677 = D.33676->assembly;
  D.33699 = member_klass->image;
  D.33705 = D.33699->assembly;
  D.33683 = can_access_internals (D.33677, D.33705);
  return D.33683;
  <D.24113>:
  D.33683 = 1;
  return D.33683;
  <D.33715>:
  D.33683 = 0;
  return D.33683;
}


get_generic_definition_class (struct MonoClass * klass)
{
  struct MonoGenericClass * D.33717;
  struct MonoClass * D.33720;
  struct MonoClass * D.33723;

  goto <D.24068>;
  <D.24067>:
  D.33717 = klass->generic_class;
  if (D.33717 != 0B) goto <D.33718>; else goto <D.33719>;
  <D.33718>:
  D.33717 = klass->generic_class;
  D.33720 = D.33717->container_class;
  if (D.33720 != 0B) goto <D.33721>; else goto <D.33722>;
  <D.33721>:
  D.33717 = klass->generic_class;
  D.33723 = D.33717->container_class;
  return D.33723;
  <D.33722>:
  <D.33719>:
  klass = klass->parent;
  <D.24068>:
  if (klass != 0B) goto <D.24067>; else goto <D.24069>;
  <D.24069>:
  D.33723 = 0B;
  return D.33723;
}


is_valid_family_access (struct MonoClass * access_klass, struct MonoClass * member_klass, struct MonoClass * context_klass)
{
  int D.33725;
  gboolean D.33728;
  int D.33733;

  D.33725 = mono_class_has_parent_and_ignore_generics (access_klass, member_klass);
  if (D.33725 == 0) goto <D.33726>; else goto <D.33727>;
  <D.33726>:
  D.33728 = 0;
  return D.33728;
  <D.33727>:
  if (context_klass == 0B) goto <D.33729>; else goto <D.33730>;
  <D.33729>:
  D.33728 = 1;
  return D.33728;
  <D.33730>:
  if (access_klass != member_klass) goto <D.33731>; else goto <D.33732>;
  <D.33731>:
  D.33733 = mono_class_has_parent_and_ignore_generics (context_klass, access_klass);
  if (D.33733 == 0) goto <D.33734>; else goto <D.33735>;
  <D.33734>:
  D.33728 = 0;
  return D.33728;
  <D.33735>:
  <D.33732>:
  D.33728 = 1;
  return D.33728;
}


can_access_internals (struct MonoAssembly * accessing, struct MonoAssembly * accessed)
{
  gboolean D.33739;
  _Bool D.33740;
  _Bool D.33741;
  _Bool D.33742;
  <unnamed type> D.33745;
  struct MonoImage * D.33748;
  struct MonoImage * D.33749;
  int D.33750;
  const char * D.33753;
  int D.24060;
  const char * D.33756;
  unsigned char D.33759;
  unsigned char D.33762;
  mono_byte[17] * D.33765;
  mono_byte[17] * D.33766;
  int D.33767;
  struct GSList * tmp;

  if (accessing == accessed) goto <D.33737>; else goto <D.33738>;
  <D.33737>:
  D.33739 = 1;
  return D.33739;
  <D.33738>:
  D.33740 = accessed == 0B;
  D.33741 = accessing == 0B;
  D.33742 = D.33740 | D.33741;
  if (D.33742 != 0) goto <D.33743>; else goto <D.33744>;
  <D.33743>:
  D.33739 = 0;
  return D.33739;
  <D.33744>:
  D.33745 = mono_security_get_mode ();
  if (D.33745 == 1) goto <D.33746>; else goto <D.33747>;
  <D.33746>:
  D.33748 = accessing->image;
  D.33749 = accessed->image;
  D.33750 = mono_security_core_clr_can_access_internals (D.33748, D.33749);
  if (D.33750 == 0) goto <D.33751>; else goto <D.33752>;
  <D.33751>:
  D.33739 = 0;
  return D.33739;
  <D.33752>:
  <D.33747>:
  mono_assembly_load_friends (accessed);
  tmp = accessed->friend_assembly_names;
  goto <D.24062>;
  <D.24061>:
  {
    struct MonoAssemblyName * friend;

    friend = tmp->data;
    D.33753 = friend->name;
    if (D.33753 == 0B) goto <D.33754>; else goto <D.33755>;
    <D.33754>:
    // predicted unlikely by continue predictor.
    goto <D.24051>;
    <D.33755>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.33756 = accessing->aname.name;
      D.33753 = friend->name;
      D.24060 = __builtin_strcmp (D.33756, D.33753);
    }
    if (D.24060 != 0) goto <D.33757>; else goto <D.33758>;
    <D.33757>:
    // predicted unlikely by continue predictor.
    goto <D.24051>;
    <D.33758>:
    D.33759 = friend->public_key_token[0];
    if (D.33759 != 0) goto <D.33760>; else goto <D.33761>;
    <D.33760>:
    D.33762 = accessing->aname.public_key_token[0];
    if (D.33762 == 0) goto <D.33763>; else goto <D.33764>;
    <D.33763>:
    // predicted unlikely by continue predictor.
    goto <D.24051>;
    <D.33764>:
    D.33765 = &friend->public_key_token;
    D.33766 = &accessing->aname.public_key_token;
    D.33767 = mono_public_tokens_are_equal (D.33765, D.33766);
    if (D.33767 == 0) goto <D.33768>; else goto <D.33769>;
    <D.33768>:
    // predicted unlikely by continue predictor.
    goto <D.24051>;
    <D.33769>:
    <D.33761>:
    D.33739 = 1;
    return D.33739;
  }
  <D.24051>:
  tmp = tmp->next;
  <D.24062>:
  if (tmp != 0B) goto <D.24061>; else goto <D.24063>;
  <D.24063>:
  D.33739 = 0;
  return D.33739;
}


mono_method_can_access_method (struct MonoMethod * method, struct MonoMethod * called)
{
  struct MonoClass * D.33771;
  struct MonoClass * D.33772;
  short unsigned int D.33773;
  int D.33774;
  int D.33775;
  mono_bool D.33780;
  unsigned int D.33781;
  unsigned int D.33782;
  int can;

  D.33771 = method->klass;
  D.33772 = called->klass;
  D.33773 = called->flags;
  D.33774 = (int) D.33773;
  D.33775 = D.33774 & 7;
  can = can_access_member (D.33771, D.33772, 0B, D.33775);
  if (can == 0) goto <D.33776>; else goto <D.33777>;
  <D.33776>:
  {
    struct MonoClass * nested;

    D.33771 = method->klass;
    nested = D.33771->nested_in;
    goto <D.24130>;
    <D.24129>:
    D.33772 = called->klass;
    D.33773 = called->flags;
    D.33774 = (int) D.33773;
    D.33775 = D.33774 & 7;
    can = can_access_member (nested, D.33772, 0B, D.33775);
    if (can != 0) goto <D.33778>; else goto <D.33779>;
    <D.33778>:
    D.33780 = 1;
    return D.33780;
    <D.33779>:
    nested = nested->nested_in;
    <D.24130>:
    if (nested != 0B) goto <D.24129>; else goto <D.24131>;
    <D.24131>:
  }
  <D.33777>:
  D.33773 = called->flags;
  D.33781 = (unsigned int) D.33773;
  D.33782 = D.33781 & 96;
  if (D.33782 == 96) goto <D.33783>; else goto <D.33784>;
  <D.33783>:
  D.33780 = 1;
  return D.33780;
  <D.33784>:
  D.33780 = can;
  return D.33780;
}


mono_method_can_access_method_full (struct MonoMethod * method, struct MonoMethod * called, struct MonoClass * context_klass)
{
  short unsigned int D.33786;
  int D.33787;
  int D.33788;
  gboolean D.33794;
  unsigned char D.33800;
  unsigned char D.33801;
  struct MonoGenericInst * D.33804;
  int D.33807;
  struct MonoClass * access_class;
  struct MonoClass * member_class;
  int can;

  access_class = method->klass;
  member_class = called->klass;
  D.33786 = called->flags;
  D.33787 = (int) D.33786;
  D.33788 = D.33787 & 7;
  can = can_access_member (access_class, member_class, context_klass, D.33788);
  if (can == 0) goto <D.33789>; else goto <D.33790>;
  <D.33789>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.24143>;
    <D.24142>:
    D.33786 = called->flags;
    D.33787 = (int) D.33786;
    D.33788 = D.33787 & 7;
    can = can_access_member (nested, member_class, context_klass, D.33788);
    if (can != 0) goto <D.24141>; else goto <D.33791>;
    <D.33791>:
    nested = nested->nested_in;
    <D.24143>:
    if (nested != 0B) goto <D.24142>; else goto <D.24141>;
    <D.24141>:
  }
  <D.33790>:
  if (can == 0) goto <D.33792>; else goto <D.33793>;
  <D.33792>:
  D.33794 = 0;
  return D.33794;
  <D.33793>:
  can = can_access_type (access_class, member_class);
  if (can == 0) goto <D.33795>; else goto <D.33796>;
  <D.33795>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.24147>;
    <D.24146>:
    can = can_access_type (nested, member_class);
    if (can != 0) goto <D.24145>; else goto <D.33797>;
    <D.33797>:
    nested = nested->nested_in;
    <D.24147>:
    if (nested != 0B) goto <D.24146>; else goto <D.24145>;
    <D.24145>:
  }
  <D.33796>:
  if (can == 0) goto <D.33798>; else goto <D.33799>;
  <D.33798>:
  D.33794 = 0;
  return D.33794;
  <D.33799>:
  D.33800 = BIT_FIELD_REF <*called, 8, 168>;
  D.33801 = D.33800 & 16;
  if (D.33801 != 0) goto <D.33802>; else goto <D.33803>;
  <D.33802>:
  {
    struct MonoMethodInflated * infl;

    infl = called;
    D.33804 = infl->context.method_inst;
    if (D.33804 != 0B) goto <D.33805>; else goto <D.33806>;
    <D.33805>:
    D.33804 = infl->context.method_inst;
    D.33807 = can_access_instantiation (access_class, D.33804);
    if (D.33807 == 0) goto <D.33808>; else goto <D.33809>;
    <D.33808>:
    D.33794 = 0;
    return D.33794;
    <D.33809>:
    <D.33806>:
  }
  <D.33803>:
  D.33794 = 1;
  return D.33794;
}


can_access_type (struct MonoClass * access_klass, struct MonoClass * member_klass)
{
  struct MonoImage * D.33811;
  struct MonoAssembly * D.33812;
  unsigned char D.33815;
  gboolean D.33818;
  struct MonoClass * D.33819;
  unsigned char D.33822;
  unsigned char D.33823;
  struct MonoClass * D.33826;
  unsigned char D.33829;
  unsigned char D.33830;
  unsigned int D.33833;
  int D.33834;
  unsigned char D.33835;
  _Bool D.33836;
  _Bool D.33837;
  _Bool D.33838;
  struct MonoGenericClass * D.33841;
  struct MonoGenericInst * D.33844;
  int D.33845;
  int D.33850;
  struct MonoClass * D.33852;
  int D.33854;
  struct MonoClass * D.33855;
  int D.33858;
  unsigned int access_level.461;
  unsigned int D.33862;
  struct MonoImage * D.33867;
  struct MonoAssembly * D.33868;
  int iftmp.462;
  struct MonoImage * D.33872;
  struct MonoAssembly * D.33873;
  int D.33874;
  int D.33876;
  int iftmp.463;
  int D.33882;
  int D.33884;
  int access_level;

  D.33811 = access_klass->image;
  D.33812 = D.33811->assembly;
  if (D.33812 != 0B) goto <D.33813>; else goto <D.33814>;
  <D.33813>:
  D.33811 = access_klass->image;
  D.33812 = D.33811->assembly;
  D.33815 = D.33812->corlib_internal;
  if (D.33815 != 0) goto <D.33816>; else goto <D.33817>;
  <D.33816>:
  D.33818 = 1;
  return D.33818;
  <D.33817>:
  <D.33814>:
  D.33819 = access_klass->element_class;
  if (D.33819 != 0B) goto <D.33820>; else goto <D.33821>;
  <D.33820>:
  D.33822 = BIT_FIELD_REF <*access_klass, 8, 160>;
  D.33823 = D.33822 & 16;
  if (D.33823 == 0) goto <D.33824>; else goto <D.33825>;
  <D.33824>:
  access_klass = access_klass->element_class;
  <D.33825>:
  <D.33821>:
  D.33826 = member_klass->element_class;
  if (D.33826 != 0B) goto <D.33827>; else goto <D.33828>;
  <D.33827>:
  D.33829 = BIT_FIELD_REF <*member_klass, 8, 160>;
  D.33830 = D.33829 & 16;
  if (D.33830 == 0) goto <D.33831>; else goto <D.33832>;
  <D.33831>:
  member_klass = member_klass->element_class;
  <D.33832>:
  <D.33828>:
  D.33833 = member_klass->flags;
  D.33834 = (int) D.33833;
  access_level = D.33834 & 7;
  D.33835 = member_klass->byval_arg.type;
  D.33836 = D.33835 == 19;
  D.33837 = D.33835 == 30;
  D.33838 = D.33836 | D.33837;
  if (D.33838 != 0) goto <D.33839>; else goto <D.33840>;
  <D.33839>:
  D.33818 = 1;
  return D.33818;
  <D.33840>:
  D.33841 = member_klass->generic_class;
  if (D.33841 != 0B) goto <D.33842>; else goto <D.33843>;
  <D.33842>:
  D.33841 = member_klass->generic_class;
  D.33844 = D.33841->context.class_inst;
  D.33845 = can_access_instantiation (access_klass, D.33844);
  if (D.33845 == 0) goto <D.33846>; else goto <D.33847>;
  <D.33846>:
  D.33818 = 0;
  return D.33818;
  <D.33847>:
  <D.33843>:
  D.33850 = is_nesting_type (access_klass, member_klass);
  if (D.33850 != 0) goto <D.33848>; else goto <D.33851>;
  <D.33851>:
  D.33852 = access_klass->nested_in;
  if (D.33852 != 0B) goto <D.33853>; else goto <D.33849>;
  <D.33853>:
  D.33852 = access_klass->nested_in;
  D.33854 = is_nesting_type (D.33852, member_klass);
  if (D.33854 != 0) goto <D.33848>; else goto <D.33849>;
  <D.33848>:
  D.33818 = 1;
  return D.33818;
  <D.33849>:
  D.33855 = member_klass->nested_in;
  if (D.33855 != 0B) goto <D.33856>; else goto <D.33857>;
  <D.33856>:
  D.33855 = member_klass->nested_in;
  D.33858 = can_access_type (access_klass, D.33855);
  if (D.33858 == 0) goto <D.33859>; else goto <D.33860>;
  <D.33859>:
  D.33818 = 0;
  return D.33818;
  <D.33860>:
  <D.33857>:
  access_level.461 = (unsigned int) access_level;
  D.33862 = access_level.461 + 4294967293;
  if (D.33862 <= 4) goto <D.33863>; else goto <D.33864>;
  <D.33863>:
  D.33855 = member_klass->nested_in;
  if (D.33855 == 0B) goto <D.33865>; else goto <D.33866>;
  <D.33865>:
  D.33818 = 0;
  return D.33818;
  <D.33866>:
  <D.33864>:
  switch (access_level) <default: <D.33885>, case 0: <D.24091>, case 1: <D.24092>, case 2: <D.24093>, case 3: <D.24094>, case 4: <D.24095>, case 5: <D.24096>, case 6: <D.24097>, case 7: <D.24098>>
  <D.24091>:
  D.33811 = access_klass->image;
  D.33812 = D.33811->assembly;
  D.33867 = member_klass->image;
  D.33868 = D.33867->assembly;
  D.33818 = can_access_internals (D.33812, D.33868);
  return D.33818;
  <D.24092>:
  D.33818 = 1;
  return D.33818;
  <D.24093>:
  D.33818 = 1;
  return D.33818;
  <D.24094>:
  D.33818 = is_nesting_type (member_klass, access_klass);
  return D.33818;
  <D.24095>:
  D.33855 = member_klass->nested_in;
  D.33818 = mono_class_has_parent_and_ignore_generics (access_klass, D.33855);
  return D.33818;
  <D.24096>:
  D.33811 = access_klass->image;
  D.33812 = D.33811->assembly;
  D.33867 = member_klass->image;
  D.33868 = D.33867->assembly;
  D.33818 = can_access_internals (D.33812, D.33868);
  return D.33818;
  <D.24097>:
  D.33811 = access_klass->image;
  D.33812 = D.33811->assembly;
  D.33855 = member_klass->nested_in;
  D.33872 = D.33855->image;
  D.33873 = D.33872->assembly;
  D.33874 = can_access_internals (D.33812, D.33873);
  if (D.33874 != 0) goto <D.33875>; else goto <D.33870>;
  <D.33875>:
  D.33855 = member_klass->nested_in;
  D.33876 = mono_class_has_parent_and_ignore_generics (access_klass, D.33855);
  if (D.33876 != 0) goto <D.33877>; else goto <D.33870>;
  <D.33877>:
  iftmp.462 = 1;
  goto <D.33871>;
  <D.33870>:
  iftmp.462 = 0;
  <D.33871>:
  D.33818 = iftmp.462;
  return D.33818;
  <D.24098>:
  D.33811 = access_klass->image;
  D.33812 = D.33811->assembly;
  D.33855 = member_klass->nested_in;
  D.33872 = D.33855->image;
  D.33873 = D.33872->assembly;
  D.33882 = can_access_internals (D.33812, D.33873);
  if (D.33882 != 0) goto <D.33879>; else goto <D.33883>;
  <D.33883>:
  D.33855 = member_klass->nested_in;
  D.33884 = mono_class_has_parent_and_ignore_generics (access_klass, D.33855);
  if (D.33884 != 0) goto <D.33879>; else goto <D.33880>;
  <D.33879>:
  iftmp.463 = 1;
  goto <D.33881>;
  <D.33880>:
  iftmp.463 = 0;
  <D.33881>:
  D.33818 = iftmp.463;
  return D.33818;
  <D.33885>:
  D.33818 = 0;
  return D.33818;
}


is_nesting_type (struct MonoClass * outer_klass, struct MonoClass * inner_klass)
{
  gboolean D.33889;

  outer_klass = mono_class_get_generic_type_definition (outer_klass);
  inner_klass = mono_class_get_generic_type_definition (inner_klass);
  <D.24027>:
  if (outer_klass == inner_klass) goto <D.33887>; else goto <D.33888>;
  <D.33887>:
  D.33889 = 1;
  return D.33889;
  <D.33888>:
  inner_klass = inner_klass->nested_in;
  if (inner_klass != 0B) goto <D.24027>; else goto <D.24028>;
  <D.24028>:
  D.33889 = 0;
  return D.33889;
}


can_access_instantiation (struct MonoClass * access_klass, struct MonoGenericInst * ginst)
{
  unsigned char D.33891;
  int D.33892;
  struct MonoClass * D.33893;
  int D.33894;
  gboolean D.33897;
  struct MonoArrayType * D.33898;
  struct MonoClass * D.33899;
  int D.33900;
  struct MonoType * D.33903;
  struct MonoClass * D.33904;
  int D.33905;
  struct MonoClass * D.33908;
  int D.33909;
  <unnamed-unsigned:22> D.33913;
  int D.33914;
  int i;

  i = 0;
  goto <D.24084>;
  <D.24083>:
  {
    struct MonoType * type;

    type = ginst->type_argv[i];
    D.33891 = type->type;
    D.33892 = (int) D.33891;
    switch (D.33892) <default: <D.33912>, case 15: <D.24079>, case 17: <D.24081>, case 18: <D.24080>, case 20: <D.24078>, case 21: <D.24082>, case 29: <D.24076>>
    <D.24076>:
    D.33893 = type->data.klass;
    D.33894 = can_access_type (access_klass, D.33893);
    if (D.33894 == 0) goto <D.33895>; else goto <D.33896>;
    <D.33895>:
    D.33897 = 0;
    return D.33897;
    <D.33896>:
    goto <D.24077>;
    <D.24078>:
    D.33898 = type->data.array;
    D.33899 = D.33898->eklass;
    D.33900 = can_access_type (access_klass, D.33899);
    if (D.33900 == 0) goto <D.33901>; else goto <D.33902>;
    <D.33901>:
    D.33897 = 0;
    return D.33897;
    <D.33902>:
    goto <D.24077>;
    <D.24079>:
    D.33903 = type->data.type;
    D.33904 = mono_class_from_mono_type (D.33903);
    D.33905 = can_access_type (access_klass, D.33904);
    if (D.33905 == 0) goto <D.33906>; else goto <D.33907>;
    <D.33906>:
    D.33897 = 0;
    return D.33897;
    <D.33907>:
    goto <D.24077>;
    <D.24080>:
    <D.24081>:
    <D.24082>:
    D.33908 = mono_class_from_mono_type (type);
    D.33909 = can_access_type (access_klass, D.33908);
    if (D.33909 == 0) goto <D.33910>; else goto <D.33911>;
    <D.33910>:
    D.33897 = 0;
    return D.33897;
    <D.33911>:
    <D.33912>:
    <D.24077>:
  }
  i = i + 1;
  <D.24084>:
  D.33913 = ginst->type_argc;
  D.33914 = (int) D.33913;
  if (D.33914 > i) goto <D.24083>; else goto <D.24085>;
  <D.24085>:
  D.33897 = 1;
  return D.33897;
}


mono_method_can_access_field_full (struct MonoMethod * method, struct MonoClassField * field, struct MonoClass * context_klass)
{
  struct MonoType * D.33916;
  short unsigned int D.33917;
  int D.33918;
  int D.33919;
  gboolean D.33925;
  struct MonoClass * access_class;
  struct MonoClass * member_class;
  int can;

  access_class = method->klass;
  member_class = field->parent;
  D.33916 = field->type;
  D.33917 = D.33916->attrs;
  D.33918 = (int) D.33917;
  D.33919 = D.33918 & 7;
  can = can_access_member (access_class, member_class, context_klass, D.33919);
  if (can == 0) goto <D.33920>; else goto <D.33921>;
  <D.33920>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.24160>;
    <D.24159>:
    D.33916 = field->type;
    D.33917 = D.33916->attrs;
    D.33918 = (int) D.33917;
    D.33919 = D.33918 & 7;
    can = can_access_member (nested, member_class, context_klass, D.33919);
    if (can != 0) goto <D.24158>; else goto <D.33922>;
    <D.33922>:
    nested = nested->nested_in;
    <D.24160>:
    if (nested != 0B) goto <D.24159>; else goto <D.24158>;
    <D.24158>:
  }
  <D.33921>:
  if (can == 0) goto <D.33923>; else goto <D.33924>;
  <D.33923>:
  D.33925 = 0;
  return D.33925;
  <D.33924>:
  can = can_access_type (access_class, member_class);
  if (can == 0) goto <D.33926>; else goto <D.33927>;
  <D.33926>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.24164>;
    <D.24163>:
    can = can_access_type (nested, member_class);
    if (can != 0) goto <D.24162>; else goto <D.33928>;
    <D.33928>:
    nested = nested->nested_in;
    <D.24164>:
    if (nested != 0B) goto <D.24163>; else goto <D.24162>;
    <D.24162>:
  }
  <D.33927>:
  if (can == 0) goto <D.33929>; else goto <D.33930>;
  <D.33929>:
  D.33925 = 0;
  return D.33925;
  <D.33930>:
  D.33925 = 1;
  return D.33925;
}


mono_class_can_access_class (struct MonoClass * source_class, struct MonoClass * target_class)
{
  gboolean D.33932;

  D.33932 = can_access_type (source_class, target_class);
  return D.33932;
}


mono_type_is_valid_enum_basetype (struct MonoType * type)
{
  unsigned char D.33934;
  int D.33935;
  gboolean D.33936;

  D.33934 = type->type;
  D.33935 = (int) D.33934;
  switch (D.33935) <default: <D.33937>, case 2: <D.24174>, case 3: <D.24177>, case 4: <D.24172>, case 5: <D.24173>, case 6: <D.24175>, case 7: <D.24176>, case 8: <D.24178>, case 9: <D.24179>, case 10: <D.24180>, case 11: <D.24181>, case 24: <D.24182>, case 25: <D.24183>>
  <D.24172>:
  <D.24173>:
  <D.24174>:
  <D.24175>:
  <D.24176>:
  <D.24177>:
  <D.24178>:
  <D.24179>:
  <D.24180>:
  <D.24181>:
  <D.24182>:
  <D.24183>:
  D.33936 = 1;
  return D.33936;
  <D.33937>:
  D.33936 = 0;
  return D.33936;
}


mono_class_is_valid_enum (struct MonoClass * klass)
{
  unsigned char D.33939;
  unsigned char D.33940;
  _Bool D.33941;
  long int D.33942;
  long int D.33943;
  struct MonoClass * D.33948;
  int D.24198;
  int iftmp.464;
  int D.24197;
  const char[5] * D.33953;
  unsigned char D.33954;
  int D.33955;
  unsigned char D.33956;
  int D.33957;
  _Bool D.33958;
  _Bool D.33959;
  _Bool D.33960;
  const unsigned char * D.33963;
  unsigned char D.33964;
  int D.33965;
  const unsigned char * D.33966;
  unsigned char D.33967;
  int D.33968;
  _Bool D.33969;
  _Bool D.33970;
  const unsigned char * D.33973;
  unsigned char D.33974;
  int D.33975;
  const unsigned char * D.33976;
  unsigned char D.33977;
  int D.33978;
  _Bool D.33979;
  _Bool D.33980;
  const unsigned char * D.33983;
  unsigned char D.33984;
  int D.33985;
  const unsigned char * D.33986;
  unsigned char D.33987;
  int D.33988;
  const char * D.33990;
  int D.24207;
  int iftmp.465;
  int D.24206;
  const char[7] * D.33995;
  unsigned char D.33996;
  int D.33997;
  unsigned char D.33998;
  int D.33999;
  _Bool D.34000;
  _Bool D.34001;
  _Bool D.34002;
  const unsigned char * D.34005;
  unsigned char D.34006;
  int D.34007;
  const unsigned char * D.34008;
  unsigned char D.34009;
  int D.34010;
  _Bool D.34011;
  _Bool D.34012;
  const unsigned char * D.34015;
  unsigned char D.34016;
  int D.34017;
  const unsigned char * D.34018;
  unsigned char D.34019;
  int D.34020;
  _Bool D.34021;
  _Bool D.34022;
  const unsigned char * D.34025;
  unsigned char D.34026;
  int D.34027;
  const unsigned char * D.34028;
  unsigned char D.34029;
  int D.34030;
  const char * D.34032;
  gboolean D.34033;
  unsigned int D.34034;
  unsigned int D.34035;
  struct MonoType * D.34038;
  short unsigned int D.34039;
  int D.34040;
  int D.34041;
  int D.34046;
  unsigned int D.34051;
  struct MonoClassField * field;
  void * iter;
  gboolean found_base_field;

  try
    {
      iter = 0B;
      found_base_field = 0;
      D.33939 = BIT_FIELD_REF <*klass, 8, 160>;
      D.33940 = D.33939 & 16;
      D.33941 = D.33940 == 0;
      D.33942 = (long int) D.33941;
      D.33943 = __builtin_expect (D.33942, 0);
      if (D.33943 != 0) goto <D.33944>; else goto <D.33945>;
      <D.33944>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 9963, "klass->enumtype");
      <D.33945>:
      D.33948 = klass->parent;
      if (D.33948 == 0B) goto <D.33946>; else goto <D.33949>;
      <D.33949>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 4;
        if (__s2_len <= 3) goto <D.33951>; else goto <D.33952>;
        <D.33951>:
        {
          const unsigned char * __s2;
          int __result;

          D.33948 = klass->parent;
          __s2 = D.33948->name;
          D.33953 = "Enum";
          D.33954 = MEM[(const unsigned char *)D.33953];
          D.33955 = (int) D.33954;
          D.33956 = *__s2;
          D.33957 = (int) D.33956;
          __result = D.33955 - D.33957;
          {
            D.33958 = __s2_len != 0;
            D.33959 = __result == 0;
            D.33960 = D.33958 & D.33959;
            if (D.33960 != 0) goto <D.33961>; else goto <D.33962>;
            <D.33961>:
            D.33963 = &MEM[(void *)"Enum" + 1B];
            D.33964 = *D.33963;
            D.33965 = (int) D.33964;
            D.33966 = __s2 + 1;
            D.33967 = *D.33966;
            D.33968 = (int) D.33967;
            __result = D.33965 - D.33968;
            D.33969 = __s2_len > 1;
            D.33959 = __result == 0;
            D.33970 = D.33969 & D.33959;
            if (D.33970 != 0) goto <D.33971>; else goto <D.33972>;
            <D.33971>:
            D.33973 = &MEM[(void *)"Enum" + 2B];
            D.33974 = *D.33973;
            D.33975 = (int) D.33974;
            D.33976 = __s2 + 2;
            D.33977 = *D.33976;
            D.33978 = (int) D.33977;
            __result = D.33975 - D.33978;
            D.33979 = __s2_len > 2;
            D.33959 = __result == 0;
            D.33980 = D.33979 & D.33959;
            if (D.33980 != 0) goto <D.33981>; else goto <D.33982>;
            <D.33981>:
            D.33983 = &MEM[(void *)"Enum" + 3B];
            D.33984 = *D.33983;
            D.33985 = (int) D.33984;
            D.33986 = __s2 + 3;
            D.33987 = *D.33986;
            D.33988 = (int) D.33987;
            __result = D.33985 - D.33988;
            <D.33982>:
            <D.33972>:
            <D.33962>:
          }
          D.24197 = __result;
        }
        iftmp.464 = -D.24197;
        goto <D.33989>;
        <D.33952>:
        D.33948 = klass->parent;
        D.33990 = D.33948->name;
        iftmp.464 = __builtin_strcmp (D.33990, "Enum");
        <D.33989>:
        D.24198 = iftmp.464;
      }
      if (D.24198 != 0) goto <D.33946>; else goto <D.33991>;
      <D.33991>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 6;
        if (__s2_len <= 3) goto <D.33993>; else goto <D.33994>;
        <D.33993>:
        {
          const unsigned char * __s2;
          int __result;

          D.33948 = klass->parent;
          __s2 = D.33948->name_space;
          D.33995 = "System";
          D.33996 = MEM[(const unsigned char *)D.33995];
          D.33997 = (int) D.33996;
          D.33998 = *__s2;
          D.33999 = (int) D.33998;
          __result = D.33997 - D.33999;
          {
            D.34000 = __s2_len != 0;
            D.34001 = __result == 0;
            D.34002 = D.34000 & D.34001;
            if (D.34002 != 0) goto <D.34003>; else goto <D.34004>;
            <D.34003>:
            D.34005 = &MEM[(void *)"System" + 1B];
            D.34006 = *D.34005;
            D.34007 = (int) D.34006;
            D.34008 = __s2 + 1;
            D.34009 = *D.34008;
            D.34010 = (int) D.34009;
            __result = D.34007 - D.34010;
            D.34011 = __s2_len > 1;
            D.34001 = __result == 0;
            D.34012 = D.34011 & D.34001;
            if (D.34012 != 0) goto <D.34013>; else goto <D.34014>;
            <D.34013>:
            D.34015 = &MEM[(void *)"System" + 2B];
            D.34016 = *D.34015;
            D.34017 = (int) D.34016;
            D.34018 = __s2 + 2;
            D.34019 = *D.34018;
            D.34020 = (int) D.34019;
            __result = D.34017 - D.34020;
            D.34021 = __s2_len > 2;
            D.34001 = __result == 0;
            D.34022 = D.34021 & D.34001;
            if (D.34022 != 0) goto <D.34023>; else goto <D.34024>;
            <D.34023>:
            D.34025 = &MEM[(void *)"System" + 3B];
            D.34026 = *D.34025;
            D.34027 = (int) D.34026;
            D.34028 = __s2 + 3;
            D.34029 = *D.34028;
            D.34030 = (int) D.34029;
            __result = D.34027 - D.34030;
            <D.34024>:
            <D.34014>:
            <D.34004>:
          }
          D.24206 = __result;
        }
        iftmp.465 = -D.24206;
        goto <D.34031>;
        <D.33994>:
        D.33948 = klass->parent;
        D.34032 = D.33948->name_space;
        iftmp.465 = __builtin_strcmp (D.34032, "System");
        <D.34031>:
        D.24207 = iftmp.465;
      }
      if (D.24207 != 0) goto <D.33946>; else goto <D.33947>;
      <D.33946>:
      D.34033 = 0;
      return D.34033;
      <D.33947>:
      D.34034 = klass->flags;
      D.34035 = D.34034 & 24;
      if (D.34035 != 0) goto <D.34036>; else goto <D.34037>;
      <D.34036>:
      D.34033 = 0;
      return D.34033;
      <D.34037>:
      goto <D.24209>;
      <D.24208>:
      D.34038 = field->type;
      D.34039 = D.34038->attrs;
      D.34040 = (int) D.34039;
      D.34041 = D.34040 & 16;
      if (D.34041 == 0) goto <D.34042>; else goto <D.34043>;
      <D.34042>:
      if (found_base_field != 0) goto <D.34044>; else goto <D.34045>;
      <D.34044>:
      D.34033 = 0;
      return D.34033;
      <D.34045>:
      found_base_field = 1;
      D.34038 = field->type;
      D.34046 = mono_type_is_valid_enum_basetype (D.34038);
      if (D.34046 == 0) goto <D.34047>; else goto <D.34048>;
      <D.34047>:
      D.34033 = 0;
      return D.34033;
      <D.34048>:
      <D.34043>:
      <D.24209>:
      field = mono_class_get_fields (klass, &iter);
      if (field != 0B) goto <D.24208>; else goto <D.24210>;
      <D.24210>:
      if (found_base_field == 0) goto <D.34049>; else goto <D.34050>;
      <D.34049>:
      D.34033 = 0;
      return D.34033;
      <D.34050>:
      D.34051 = klass->method.count;
      if (D.34051 != 0) goto <D.34052>; else goto <D.34053>;
      <D.34052>:
      D.34033 = 0;
      return D.34033;
      <D.34053>:
      D.34033 = 1;
      return D.34033;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


mono_generic_class_is_generic_type_definition (struct MonoGenericClass * gklass)
{
  gboolean D.34056;
  struct MonoGenericInst * D.34057;
  struct MonoClass * D.34058;
  struct MonoGenericContainer * D.34059;
  struct MonoGenericInst * D.34060;
  _Bool D.34061;

  D.34057 = gklass->context.class_inst;
  D.34058 = gklass->container_class;
  D.34059 = D.34058->generic_container;
  D.34060 = D.34059->context.class_inst;
  D.34061 = D.34057 == D.34060;
  D.34056 = (gboolean) D.34061;
  return D.34056;
}


mono_class_setup_interface_id (struct MonoClass * class)
{
  unsigned int D.34065;
  unsigned int D.34066;
  unsigned char D.34068;
  short unsigned int D.34070;
  unsigned int D.34073;
  short unsigned int D.34074;

  mono_loader_lock ();
  D.34065 = class->flags;
  D.34066 = D.34065 & 32;
  if (D.34066 != 0) goto <D.34063>; else goto <D.34067>;
  <D.34067>:
  D.34068 = class->byval_arg.type;
  if (D.34068 == 19) goto <D.34063>; else goto <D.34069>;
  <D.34069>:
  D.34068 = class->byval_arg.type;
  if (D.34068 == 30) goto <D.34063>; else goto <D.34064>;
  <D.34063>:
  D.34070 = class->interface_id;
  if (D.34070 == 0) goto <D.34071>; else goto <D.34072>;
  <D.34071>:
  D.34073 = mono_get_unique_iid (class);
  D.34074 = (short unsigned int) D.34073;
  class->interface_id = D.34074;
  <D.34072>:
  <D.34064>:
  mono_loader_unlock ();
}


mono_class_alloc_ext (struct MonoClass * klass)
{
  struct MonoClassExt * D.34075;
  void * D.34078;
  unsigned int class_ext_size.466;
  unsigned int class_ext_size.467;

  D.34075 = klass->ext;
  if (D.34075 == 0B) goto <D.34076>; else goto <D.34077>;
  <D.34076>:
  D.34078 = mono_class_alloc0 (klass, 40);
  klass->ext = D.34078;
  class_ext_size.466 = class_ext_size;
  class_ext_size.467 = class_ext_size.466 + 40;
  class_ext_size = class_ext_size.467;
  <D.34077>:
}


mono_class_setup_interfaces (struct MonoClass * klass, struct MonoError * error)
{
  unsigned char D.34081;
  unsigned char D.34082;
  unsigned char D.34089;
  unsigned char D.34091;
  guint16 iftmp.468;
  struct MonoClass * D.34094;
  struct MonoImage * D.34098;
  short unsigned int D.34099;
  unsigned int D.34100;
  unsigned int D.34101;
  void * D.34102;
  struct MonoClass * D.34103;
  struct MonoType * D.34104;
  struct MonoClass * * D.34105;
  struct MonoClass * D.34106;
  struct MonoClass * D.34107;
  struct MonoClass * * D.34110;
  struct MonoClass * D.34111;
  struct MonoGenericClass * D.34112;
  short unsigned int D.34115;
  int D.34116;
  void * D.34117;
  unsigned int i.469;
  unsigned int D.34119;
  struct MonoClass * * D.34120;
  struct MonoClass * * D.34121;
  struct MonoClass * * D.34122;
  struct MonoClass * D.34123;
  struct MonoGenericContext * D.34124;
  struct MonoClass * D.34125;
  int D.34126;
  gchar * D.34129;
  int D.34130;
  int i;

  mono_error_init (error);
  D.34081 = BIT_FIELD_REF <*klass, 8, 192>;
  D.34082 = D.34081 & 1;
  if (D.34082 != 0) goto <D.34083>; else goto <D.34084>;
  <D.34083>:
  return;
  <D.34084>:
  mono_loader_lock ();
  D.34081 = BIT_FIELD_REF <*klass, 8, 192>;
  D.34082 = D.34081 & 1;
  if (D.34082 != 0) goto <D.34085>; else goto <D.34086>;
  <D.34085>:
  mono_loader_unlock ();
  return;
  <D.34086>:
  D.34089 = klass->rank;
  if (D.34089 == 1) goto <D.34090>; else goto <D.34087>;
  <D.34090>:
  D.34091 = klass->byval_arg.type;
  if (D.34091 != 20) goto <D.34092>; else goto <D.34087>;
  <D.34092>:
  {
    struct MonoType * args[1];

    try
      {
        D.34094 = mono_defaults.generic_ireadonlylist_class;
        if (D.34094 != 0B) goto <D.34095>; else goto <D.34096>;
        <D.34095>:
        iftmp.468 = 2;
        goto <D.34097>;
        <D.34096>:
        iftmp.468 = 1;
        <D.34097>:
        klass->interface_count = iftmp.468;
        D.34098 = klass->image;
        D.34099 = klass->interface_count;
        D.34100 = (unsigned int) D.34099;
        D.34101 = D.34100 * 4;
        D.34102 = mono_image_alloc0 (D.34098, D.34101);
        klass->interfaces = D.34102;
        D.34103 = klass->element_class;
        D.34104 = &D.34103->byval_arg;
        args[0] = D.34104;
        D.34105 = klass->interfaces;
        D.34106 = mono_defaults.generic_ilist_class;
        D.34107 = mono_class_bind_generic_parameters (D.34106, 1, &args, 0);
        *D.34105 = D.34107;
        D.34099 = klass->interface_count;
        if (D.34099 > 1) goto <D.34108>; else goto <D.34109>;
        <D.34108>:
        D.34105 = klass->interfaces;
        D.34110 = D.34105 + 4;
        D.34094 = mono_defaults.generic_ireadonlylist_class;
        D.34111 = mono_class_bind_generic_parameters (D.34094, 1, &args, 0);
        *D.34110 = D.34111;
        <D.34109>:
      }
    finally
      {
        args = {CLOBBER};
      }
  }
  goto <D.34088>;
  <D.34087>:
  D.34112 = klass->generic_class;
  if (D.34112 != 0B) goto <D.34113>; else goto <D.34114>;
  <D.34113>:
  {
    struct MonoClass * gklass;

    D.34112 = klass->generic_class;
    gklass = D.34112->container_class;
    D.34115 = gklass->interface_count;
    klass->interface_count = D.34115;
    D.34099 = klass->interface_count;
    D.34100 = (unsigned int) D.34099;
    D.34101 = D.34100 * 4;
    D.34116 = (int) D.34101;
    D.34117 = mono_class_alloc0 (klass, D.34116);
    klass->interfaces = D.34117;
    i = 0;
    goto <D.24228>;
    <D.24227>:
    D.34105 = klass->interfaces;
    i.469 = (unsigned int) i;
    D.34119 = i.469 * 4;
    D.34120 = D.34105 + D.34119;
    D.34121 = gklass->interfaces;
    i.469 = (unsigned int) i;
    D.34119 = i.469 * 4;
    D.34122 = D.34121 + D.34119;
    D.34123 = *D.34122;
    D.34112 = klass->generic_class;
    D.34124 = mono_generic_class_get_context (D.34112);
    D.34125 = mono_class_inflate_generic_class_checked (D.34123, D.34124, error);
    *D.34120 = D.34125;
    D.34126 = mono_error_ok (error);
    if (D.34126 == 0) goto <D.34127>; else goto <D.34128>;
    <D.34127>:
    D.34129 = monoeg_strdup ("Could not setup the interfaces");
    mono_class_set_failure (klass, 7, D.34129);
    klass->interfaces = 0B;
    return;
    <D.34128>:
    i = i + 1;
    <D.24228>:
    D.34099 = klass->interface_count;
    D.34130 = (int) D.34099;
    if (D.34130 > i) goto <D.24227>; else goto <D.24229>;
    <D.24229>:
  }
  <D.34114>:
  <D.34088>:
  mono_memory_barrier ();
  klass->interfaces_inited = 1;
  mono_loader_unlock ();
}


mono_class_get_fields_lazy (struct MonoClass * klass, void * * iter)
{
  struct MonoClassField * D.34134;
  void * D.34135;
  struct MonoClassField * D.34138;
  unsigned int D.34141;
  unsigned int D.34144;
  struct MonoClassField * D.34145;
  struct MonoClassField * field;

  if (iter == 0B) goto <D.34132>; else goto <D.34133>;
  <D.34132>:
  D.34134 = 0B;
  return D.34134;
  <D.34133>:
  D.34135 = *iter;
  if (D.34135 == 0B) goto <D.34136>; else goto <D.34137>;
  <D.34136>:
  mono_class_setup_basic_field_info_locking (klass);
  D.34138 = klass->fields;
  if (D.34138 == 0B) goto <D.34139>; else goto <D.34140>;
  <D.34139>:
  D.34134 = 0B;
  return D.34134;
  <D.34140>:
  D.34141 = klass->field.count;
  if (D.34141 != 0) goto <D.34142>; else goto <D.34143>;
  <D.34142>:
  D.34138 = klass->fields;
  *iter = D.34138;
  D.34134 = *iter;
  return D.34134;
  <D.34143>:
  D.34134 = 0B;
  return D.34134;
  <D.34137>:
  field = *iter;
  field = field + 16;
  D.34138 = klass->fields;
  D.34141 = klass->field.count;
  D.34144 = D.34141 * 16;
  D.34145 = D.34138 + D.34144;
  if (D.34145 > field) goto <D.34146>; else goto <D.34147>;
  <D.34146>:
  *iter = field;
  D.34134 = *iter;
  return D.34134;
  <D.34147>:
  D.34134 = 0B;
  return D.34134;
}


mono_class_setup_basic_field_info_locking (struct MonoClass * class)
{
  mono_loader_lock ();
  mono_class_setup_basic_field_info (class);
  mono_loader_unlock ();
}


mono_class_full_name (struct MonoClass * klass)
{
  char * D.34149;
  struct MonoType * D.34150;

  D.34150 = &klass->byval_arg;
  D.34149 = mono_type_full_name (D.34150);
  return D.34149;
}


