mono_reflection_init ()
{

}


mono_class_get_ref_info (struct MonoClass * klass)
{
  unsigned int D.26381;
  void * D.26384;

  D.26381 = klass->ref_info_handle;
  if (D.26381 == 0) goto <D.26382>; else goto <D.26383>;
  <D.26382>:
  D.26384 = 0B;
  return D.26384;
  <D.26383>:
  D.26381 = klass->ref_info_handle;
  D.26384 = mono_gchandle_get_target (D.26381);
  return D.26384;
}


mono_class_set_ref_info (struct MonoClass * klass, void * obj)
{
  unsigned int D.26386;
  unsigned int D.26387;
  _Bool D.26388;
  long int D.26389;
  long int D.26390;

  D.26386 = mono_gchandle_new (obj, 0);
  klass->ref_info_handle = D.26386;
  D.26387 = klass->ref_info_handle;
  D.26388 = D.26387 == 0;
  D.26389 = (long int) D.26388;
  D.26390 = __builtin_expect (D.26389, 0);
  if (D.26390 != 0) goto <D.26391>; else goto <D.26392>;
  <D.26391>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 641, "klass->ref_info_handle != 0");
  <D.26392>:
}


mono_class_free_ref_info (struct MonoClass * klass)
{
  unsigned int D.26393;

  D.26393 = klass->ref_info_handle;
  if (D.26393 != 0) goto <D.26394>; else goto <D.26395>;
  <D.26394>:
  D.26393 = klass->ref_info_handle;
  mono_gchandle_free (D.26393);
  klass->ref_info_handle = 0;
  <D.26395>:
}


mono_custom_attrs_free (struct MonoCustomAttrInfo * ainfo)
{
  int D.26396;

  D.26396 = ainfo->cached;
  if (D.26396 == 0) goto <D.26397>; else goto <D.26398>;
  <D.26397>:
  monoeg_g_free (ainfo);
  <D.26398>:
}


mono_image_build_metadata (struct MonoReflectionModuleBuilder * moduleb)
{
  struct MonoVTable * D.26399;
  unsigned int D.26400;
  int D.26403;
  unsigned int D.26406;
  unsigned int D.26407;
  unsigned int D.26408;
  guint32 * D.26409;
  unsigned char D.26410;
  unsigned int D.26411;
  unsigned int D.26412;
  guint32 * D.26413;
  struct MonoDynamicStream * D.26414;
  unsigned int D.26415;
  guint32 * D.26416;
  unsigned int D.26417;
  guint32 * D.26418;
  guint32 * D.26419;
  guint32 * D.26420;
  struct MonoArray * D.26421;
  unsigned int D.26424;
  unsigned int D.26425;
  unsigned int i.0;
  char * D.26427;
  struct MonoReflectionMethodBuilder * D.26428;
  unsigned int D.26429;
  struct MonoArray * D.26430;
  unsigned int D.26433;
  unsigned int D.26434;
  char * D.26435;
  struct MonoReflectionFieldBuilder * D.26436;
  unsigned int D.26437;
  int D.26438;
  int D.26439;
  void * iftmp.1;
  unsigned int D.26443;
  unsigned int D.26444;
  void * D.26445;
  struct MonoArray * D.26447;
  char * D.26450;
  void * * D.26451;
  int D.26452;
  unsigned int D.26453;
  unsigned int D.26454;
  unsigned int D.26455;
  unsigned int i.2;
  unsigned int D.26457;
  void * * D.26458;
  struct MonoString * D.26459;
  struct MonoString * D.26460;
  struct MonoArray * D.26461;
  struct MonoArray * D.26462;
  struct MonoArray * D.26465;
  struct MonoArray * D.26468;
  struct MonoGHashTable * D.26471;
  char * D.26474;
  unsigned int D.26475;
  struct MonoArray * D.26476;
  unsigned int j.3;
  char * D.26480;
  int D.26481;
  int D.26482;
  struct MonoDynamicTable * table;
  struct MonoDynamicImage * assembly;
  struct MonoReflectionAssemblyBuilder * assemblyb;
  struct MonoDomain * domain;
  struct MonoPtrArray types;
  guint32 * values;
  int i;
  int j;

  try
    {
      assemblyb = moduleb->assemblyb;
      assembly = moduleb->dynamic_image;
      D.26399 = MEM[(struct MonoObject *)assemblyb].vtable;
      domain = D.26399->domain;
      D.26400 = assembly->text_rva;
      if (D.26400 != 0) goto <D.26401>; else goto <D.26402>;
      <D.26401>:
      return;
      <D.26402>:
      assembly->text_rva = 8192;
      D.26403 = moduleb->is_main;
      if (D.26403 != 0) goto <D.26404>; else goto <D.26405>;
      <D.26404>:
      mono_image_emit_manifest (moduleb);
      <D.26405>:
      table = &assembly->tables[2];
      table->rows = 1;
      D.26406 = table->next_idx;
      D.26407 = D.26406 + 1;
      table->next_idx = D.26407;
      D.26408 = table->rows;
      alloc_table (table, D.26408);
      D.26409 = table->values;
      D.26410 = table->columns;
      D.26411 = (unsigned int) D.26410;
      D.26412 = D.26411 * 4;
      values = D.26409 + D.26412;
      *values = 0;
      D.26413 = values + 4;
      D.26414 = &assembly->sheap;
      D.26415 = string_heap_insert (D.26414, "<Module>");
      *D.26413 = D.26415;
      D.26416 = values + 8;
      D.26414 = &assembly->sheap;
      D.26417 = string_heap_insert (D.26414, "");
      *D.26416 = D.26417;
      D.26418 = values + 12;
      *D.26418 = 0;
      D.26419 = values + 16;
      *D.26419 = 1;
      D.26420 = values + 20;
      *D.26420 = 1;
      D.26421 = moduleb->global_methods;
      if (D.26421 != 0B) goto <D.26422>; else goto <D.26423>;
      <D.26422>:
      table = &assembly->tables[6];
      D.26421 = moduleb->global_methods;
      D.26424 = mono_array_length (D.26421);
      D.26408 = table->rows;
      D.26425 = D.26408 + D.26424;
      table->rows = D.26425;
      D.26408 = table->rows;
      alloc_table (table, D.26408);
      i = 0;
      goto <D.22591>;
      <D.22590>:
      D.26421 = moduleb->global_methods;
      i.0 = (unsigned int) i;
      D.26427 = mono_array_addr_with_size (D.26421, 4, i.0);
      D.26428 = MEM[(struct MonoReflectionMethodBuilder * *)D.26427];
      mono_image_get_method_info (D.26428, assembly);
      i = i + 1;
      <D.22591>:
      i.0 = (unsigned int) i;
      D.26421 = moduleb->global_methods;
      D.26429 = mono_array_length (D.26421);
      if (i.0 < D.26429) goto <D.22590>; else goto <D.22592>;
      <D.22592>:
      <D.26423>:
      D.26430 = moduleb->global_fields;
      if (D.26430 != 0B) goto <D.26431>; else goto <D.26432>;
      <D.26431>:
      table = &assembly->tables[4];
      D.26430 = moduleb->global_fields;
      D.26433 = mono_array_length (D.26430);
      D.26408 = table->rows;
      D.26434 = D.26408 + D.26433;
      table->rows = D.26434;
      D.26408 = table->rows;
      alloc_table (table, D.26408);
      i = 0;
      goto <D.22594>;
      <D.22593>:
      D.26430 = moduleb->global_fields;
      i.0 = (unsigned int) i;
      D.26435 = mono_array_addr_with_size (D.26430, 4, i.0);
      D.26436 = MEM[(struct MonoReflectionFieldBuilder * *)D.26435];
      mono_image_get_field_info (D.26436, assembly);
      i = i + 1;
      <D.22594>:
      i.0 = (unsigned int) i;
      D.26430 = moduleb->global_fields;
      D.26437 = mono_array_length (D.26430);
      if (i.0 < D.26437) goto <D.22593>; else goto <D.22595>;
      <D.22595>:
      <D.26432>:
      table = &assembly->tables[0];
      alloc_table (table, 1);
      mono_image_fill_module_table (domain, moduleb, assembly);
      types.size = 0;
      D.26438 = moduleb->num_types;
      D.26439 = MAX_EXPR <D.26438, 16>;
      types.capacity = D.26439;
      D.26438 = moduleb->num_types;
      if (D.26438 > 16) goto <D.26441>; else goto <D.26442>;
      <D.26441>:
      D.26438 = moduleb->num_types;
      D.26443 = (unsigned int) D.26438;
      D.26444 = D.26443 * 4;
      D.26438 = moduleb->num_types;
      D.26445 = mono_gc_make_root_descr_all_refs (D.26438);
      iftmp.1 = mono_gc_alloc_fixed (D.26444, D.26445);
      goto <D.26446>;
      <D.26442>:
      iftmp.1 = __builtin_alloca (64);
      <D.26446>:
      types.data = iftmp.1;
      D.26447 = moduleb->types;
      if (D.26447 != 0B) goto <D.26448>; else goto <D.26449>;
      <D.26448>:
      i = 0;
      goto <D.22598>;
      <D.22597>:
      {
        struct MonoReflectionTypeBuilder * type;

        D.26447 = moduleb->types;
        i.0 = (unsigned int) i;
        D.26450 = mono_array_addr_with_size (D.26447, 4, i.0);
        type = MEM[(struct MonoReflectionTypeBuilder * *)D.26450];
        collect_types (&types, type);
      }
      i = i + 1;
      <D.22598>:
      D.26438 = moduleb->num_types;
      if (D.26438 > i) goto <D.22597>; else goto <D.22599>;
      <D.22599>:
      <D.26449>:
      D.26451 = types.data;
      D.26452 = types.size;
      D.26453 = (unsigned int) D.26452;
      qsort (D.26451, D.26453, 4, compare_types_by_table_idx);
      table = &assembly->tables[2];
      D.26408 = table->rows;
      D.26452 = types.size;
      D.26454 = (unsigned int) D.26452;
      D.26455 = D.26408 + D.26454;
      table->rows = D.26455;
      D.26408 = table->rows;
      alloc_table (table, D.26408);
      i = 0;
      goto <D.22602>;
      <D.22601>:
      {
        struct MonoReflectionTypeBuilder * tb;

        D.26451 = types.data;
        i.2 = (unsigned int) i;
        D.26457 = i.2 * 4;
        D.26458 = D.26451 + D.26457;
        tb = *D.26458;
        D.26414 = &assembly->sheap;
        D.26459 = tb->nspace;
        string_heap_insert_mstring (D.26414, D.26459);
      }
      i = i + 1;
      <D.22602>:
      D.26452 = types.size;
      if (D.26452 > i) goto <D.22601>; else goto <D.22603>;
      <D.22603>:
      i = 0;
      goto <D.22606>;
      <D.22605>:
      {
        struct MonoReflectionTypeBuilder * tb;

        D.26451 = types.data;
        i.2 = (unsigned int) i;
        D.26457 = i.2 * 4;
        D.26458 = D.26451 + D.26457;
        tb = *D.26458;
        D.26414 = &assembly->sheap;
        D.26460 = tb->name;
        string_heap_insert_mstring (D.26414, D.26460);
      }
      i = i + 1;
      <D.22606>:
      D.26452 = types.size;
      if (D.26452 > i) goto <D.22605>; else goto <D.22607>;
      <D.22607>:
      i = 0;
      goto <D.22610>;
      <D.22609>:
      {
        struct MonoReflectionTypeBuilder * type;

        D.26451 = types.data;
        i.2 = (unsigned int) i;
        D.26457 = i.2 * 4;
        D.26458 = D.26451 + D.26457;
        type = *D.26458;
        mono_image_get_type_info (domain, type, assembly);
      }
      i = i + 1;
      <D.22610>:
      D.26452 = types.size;
      if (D.26452 > i) goto <D.22609>; else goto <D.22611>;
      <D.22611>:
      D.26461 = assemblyb->cattrs;
      mono_image_add_cattrs (assembly, 1, 14, D.26461);
      D.26462 = assemblyb->permissions_minimum;
      if (D.26462 != 0B) goto <D.26463>; else goto <D.26464>;
      <D.26463>:
      D.26462 = assemblyb->permissions_minimum;
      mono_image_add_decl_security (assembly, 536870913, D.26462);
      <D.26464>:
      D.26465 = assemblyb->permissions_optional;
      if (D.26465 != 0B) goto <D.26466>; else goto <D.26467>;
      <D.26466>:
      D.26465 = assemblyb->permissions_optional;
      mono_image_add_decl_security (assembly, 536870913, D.26465);
      <D.26467>:
      D.26468 = assemblyb->permissions_refused;
      if (D.26468 != 0B) goto <D.26469>; else goto <D.26470>;
      <D.26469>:
      D.26468 = assemblyb->permissions_refused;
      mono_image_add_decl_security (assembly, 536870913, D.26468);
      <D.26470>:
      module_add_cattrs (assembly, moduleb);
      D.26471 = assembly->token_fixups;
      mono_g_hash_table_foreach (D.26471, fixup_method, assembly);
      D.26421 = moduleb->global_methods;
      if (D.26421 != 0B) goto <D.26472>; else goto <D.26473>;
      <D.26472>:
      i = 0;
      goto <D.22614>;
      <D.22613>:
      {
        struct MonoReflectionMethodBuilder * mb;

        D.26421 = moduleb->global_methods;
        i.0 = (unsigned int) i;
        D.26474 = mono_array_addr_with_size (D.26421, 4, i.0);
        mb = MEM[(struct MonoReflectionMethodBuilder * *)D.26474];
        mono_image_add_methodimpl (assembly, mb);
      }
      i = i + 1;
      <D.22614>:
      i.0 = (unsigned int) i;
      D.26421 = moduleb->global_methods;
      D.26475 = mono_array_length (D.26421);
      if (i.0 < D.26475) goto <D.22613>; else goto <D.22615>;
      <D.22615>:
      <D.26473>:
      i = 0;
      goto <D.22622>;
      <D.22621>:
      {
        struct MonoReflectionTypeBuilder * type;

        D.26451 = types.data;
        i.2 = (unsigned int) i;
        D.26457 = i.2 * 4;
        D.26458 = D.26451 + D.26457;
        type = *D.26458;
        D.26476 = type->methods;
        if (D.26476 != 0B) goto <D.26477>; else goto <D.26478>;
        <D.26477>:
        j = 0;
        goto <D.22619>;
        <D.22618>:
        {
          struct MonoReflectionMethodBuilder * mb;

          D.26476 = type->methods;
          j.3 = (unsigned int) j;
          D.26480 = mono_array_addr_with_size (D.26476, 4, j.3);
          mb = MEM[(struct MonoReflectionMethodBuilder * *)D.26480];
          mono_image_add_methodimpl (assembly, mb);
        }
        j = j + 1;
        <D.22619>:
        D.26481 = type->num_methods;
        if (D.26481 > j) goto <D.22618>; else goto <D.22620>;
        <D.22620>:
        <D.26478>:
      }
      i = i + 1;
      <D.22622>:
      D.26452 = types.size;
      if (D.26452 > i) goto <D.22621>; else goto <D.22623>;
      <D.22623>:
      D.26482 = types.capacity;
      if (D.26482 > 16) goto <D.26483>; else goto <D.26484>;
      <D.26483>:
      D.26451 = types.data;
      mono_gc_free_fixed (D.26451);
      <D.26484>:
      fixup_cattrs (assembly);
    }
  finally
    {
      types = {CLOBBER};
    }
}


fixup_method (struct MonoReflectionILGen * ilgen, void * value, struct MonoDynamicImage * assembly)
{
  struct MonoArray * D.26488;
  char * D.26489;
  int D.26490;
  sizetype D.26491;
  sizetype D.26492;
  unsigned char * D.26493;
  unsigned char D.26494;
  int D.26495;
  int D.22260;
  int iftmp.4;
  int D.22259;
  struct MonoObject * D.26499;
  struct MonoVTable * D.26500;
  struct MonoClass * D.26501;
  const char[13] * D.26502;
  unsigned char D.26503;
  int D.26504;
  unsigned char D.26505;
  int D.26506;
  _Bool D.26507;
  _Bool D.26508;
  _Bool D.26509;
  const unsigned char * D.26512;
  unsigned char D.26513;
  int D.26514;
  const unsigned char * D.26515;
  unsigned char D.26516;
  int D.26517;
  _Bool D.26518;
  _Bool D.26519;
  const unsigned char * D.26522;
  unsigned char D.26523;
  int D.26524;
  const unsigned char * D.26525;
  unsigned char D.26526;
  int D.26527;
  _Bool D.26528;
  _Bool D.26529;
  const unsigned char * D.26532;
  unsigned char D.26533;
  int D.26534;
  const unsigned char * D.26535;
  unsigned char D.26536;
  int D.26537;
  const char * D.26539;
  int D.26542;
  int D.22269;
  int iftmp.5;
  int D.22268;
  const char[10] * D.26547;
  unsigned char D.26548;
  int D.26549;
  unsigned char D.26550;
  int D.26551;
  _Bool D.26552;
  _Bool D.26553;
  _Bool D.26554;
  const unsigned char * D.26557;
  unsigned char D.26558;
  int D.26559;
  const unsigned char * D.26560;
  unsigned char D.26561;
  int D.26562;
  _Bool D.26563;
  _Bool D.26564;
  const unsigned char * D.26567;
  unsigned char D.26568;
  int D.26569;
  const unsigned char * D.26570;
  unsigned char D.26571;
  int D.26572;
  _Bool D.26573;
  _Bool D.26574;
  const unsigned char * D.26577;
  unsigned char D.26578;
  int D.26579;
  const unsigned char * D.26580;
  unsigned char D.26581;
  int D.26582;
  struct GHashTable * D.26586;
  void * D.26587;
  int D.22281;
  int iftmp.6;
  int D.22280;
  const char[14] * D.26592;
  unsigned char D.26593;
  int D.26594;
  unsigned char D.26595;
  int D.26596;
  _Bool D.26597;
  _Bool D.26598;
  _Bool D.26599;
  const unsigned char * D.26602;
  unsigned char D.26603;
  int D.26604;
  const unsigned char * D.26605;
  unsigned char D.26606;
  int D.26607;
  _Bool D.26608;
  _Bool D.26609;
  const unsigned char * D.26612;
  unsigned char D.26613;
  int D.26614;
  const unsigned char * D.26615;
  unsigned char D.26616;
  int D.26617;
  _Bool D.26618;
  _Bool D.26619;
  const unsigned char * D.26622;
  unsigned char D.26623;
  int D.26624;
  const unsigned char * D.26625;
  unsigned char D.26626;
  int D.26627;
  int D.22290;
  int iftmp.7;
  int D.22289;
  const char[19] * D.26635;
  unsigned char D.26636;
  int D.26637;
  unsigned char D.26638;
  int D.26639;
  _Bool D.26640;
  _Bool D.26641;
  _Bool D.26642;
  const unsigned char * D.26645;
  unsigned char D.26646;
  int D.26647;
  const unsigned char * D.26648;
  unsigned char D.26649;
  int D.26650;
  _Bool D.26651;
  _Bool D.26652;
  const unsigned char * D.26655;
  unsigned char D.26656;
  int D.26657;
  const unsigned char * D.26658;
  unsigned char D.26659;
  int D.26660;
  _Bool D.26661;
  _Bool D.26662;
  const unsigned char * D.26665;
  unsigned char D.26666;
  int D.26667;
  const unsigned char * D.26668;
  unsigned char D.26669;
  int D.26670;
  int D.22299;
  int iftmp.8;
  int D.22298;
  const char[11] * D.26681;
  unsigned char D.26682;
  int D.26683;
  unsigned char D.26684;
  int D.26685;
  _Bool D.26686;
  _Bool D.26687;
  _Bool D.26688;
  const unsigned char * D.26691;
  unsigned char D.26692;
  int D.26693;
  const unsigned char * D.26694;
  unsigned char D.26695;
  int D.26696;
  _Bool D.26697;
  _Bool D.26698;
  const unsigned char * D.26701;
  unsigned char D.26702;
  int D.26703;
  const unsigned char * D.26704;
  unsigned char D.26705;
  int D.26706;
  _Bool D.26707;
  _Bool D.26708;
  const unsigned char * D.26711;
  unsigned char D.26712;
  int D.26713;
  const unsigned char * D.26714;
  unsigned char D.26715;
  int D.26716;
  int D.22308;
  int iftmp.9;
  int D.22307;
  const char[12] * D.26722;
  unsigned char D.26723;
  int D.26724;
  unsigned char D.26725;
  int D.26726;
  _Bool D.26727;
  _Bool D.26728;
  _Bool D.26729;
  const unsigned char * D.26732;
  unsigned char D.26733;
  int D.26734;
  const unsigned char * D.26735;
  unsigned char D.26736;
  int D.26737;
  _Bool D.26738;
  _Bool D.26739;
  const unsigned char * D.26742;
  unsigned char D.26743;
  int D.26744;
  const unsigned char * D.26745;
  unsigned char D.26746;
  int D.26747;
  _Bool D.26748;
  _Bool D.26749;
  const unsigned char * D.26752;
  unsigned char D.26753;
  int D.26754;
  const unsigned char * D.26755;
  unsigned char D.26756;
  int D.26757;
  struct GHashTable * D.26759;
  void * D.26760;
  int D.22319;
  int iftmp.10;
  int D.22318;
  const char[12] * D.26764;
  unsigned char D.26765;
  int D.26766;
  unsigned char D.26767;
  int D.26768;
  _Bool D.26769;
  _Bool D.26770;
  _Bool D.26771;
  const unsigned char * D.26774;
  unsigned char D.26775;
  int D.26776;
  const unsigned char * D.26777;
  unsigned char D.26778;
  int D.26779;
  _Bool D.26780;
  _Bool D.26781;
  const unsigned char * D.26784;
  unsigned char D.26785;
  int D.26786;
  const unsigned char * D.26787;
  unsigned char D.26788;
  int D.26789;
  _Bool D.26790;
  _Bool D.26791;
  const unsigned char * D.26794;
  unsigned char D.26795;
  int D.26796;
  const unsigned char * D.26797;
  unsigned char D.26798;
  int D.26799;
  int D.22329;
  int iftmp.11;
  int D.22328;
  const char[16] * D.26806;
  unsigned char D.26807;
  int D.26808;
  unsigned char D.26809;
  int D.26810;
  _Bool D.26811;
  _Bool D.26812;
  _Bool D.26813;
  const unsigned char * D.26816;
  unsigned char D.26817;
  int D.26818;
  const unsigned char * D.26819;
  unsigned char D.26820;
  int D.26821;
  _Bool D.26822;
  _Bool D.26823;
  const unsigned char * D.26826;
  unsigned char D.26827;
  int D.26828;
  const unsigned char * D.26829;
  unsigned char D.26830;
  int D.26831;
  _Bool D.26832;
  _Bool D.26833;
  const unsigned char * D.26836;
  unsigned char D.26837;
  int D.26838;
  const unsigned char * D.26839;
  unsigned char D.26840;
  int D.26841;
  int D.22338;
  int iftmp.12;
  int D.22337;
  unsigned char D.26851;
  int D.26852;
  _Bool D.26853;
  _Bool D.26854;
  _Bool D.26855;
  const unsigned char * D.26858;
  unsigned char D.26859;
  int D.26860;
  _Bool D.26861;
  _Bool D.26862;
  const unsigned char * D.26865;
  unsigned char D.26866;
  int D.26867;
  _Bool D.26868;
  _Bool D.26869;
  const unsigned char * D.26872;
  unsigned char D.26873;
  int D.26874;
  int D.22347;
  int iftmp.13;
  int D.22346;
  unsigned char D.26880;
  int D.26881;
  _Bool D.26882;
  _Bool D.26883;
  _Bool D.26884;
  const unsigned char * D.26887;
  unsigned char D.26888;
  int D.26889;
  _Bool D.26890;
  _Bool D.26891;
  const unsigned char * D.26894;
  unsigned char D.26895;
  int D.26896;
  _Bool D.26897;
  _Bool D.26898;
  const unsigned char * D.26901;
  unsigned char D.26902;
  int D.26903;
  int D.22356;
  int iftmp.14;
  int D.22355;
  const char[18] * D.26909;
  unsigned char D.26910;
  int D.26911;
  unsigned char D.26912;
  int D.26913;
  _Bool D.26914;
  _Bool D.26915;
  _Bool D.26916;
  const unsigned char * D.26919;
  unsigned char D.26920;
  int D.26921;
  const unsigned char * D.26922;
  unsigned char D.26923;
  int D.26924;
  _Bool D.26925;
  _Bool D.26926;
  const unsigned char * D.26929;
  unsigned char D.26930;
  int D.26931;
  const unsigned char * D.26932;
  unsigned char D.26933;
  int D.26934;
  _Bool D.26935;
  _Bool D.26936;
  const unsigned char * D.26939;
  unsigned char D.26940;
  int D.26941;
  const unsigned char * D.26942;
  unsigned char D.26943;
  int D.26944;
  int D.22365;
  int iftmp.15;
  int D.22364;
  const char[19] * D.26950;
  unsigned char D.26951;
  int D.26952;
  unsigned char D.26953;
  int D.26954;
  _Bool D.26955;
  _Bool D.26956;
  _Bool D.26957;
  const unsigned char * D.26960;
  unsigned char D.26961;
  int D.26962;
  const unsigned char * D.26963;
  unsigned char D.26964;
  int D.26965;
  _Bool D.26966;
  _Bool D.26967;
  const unsigned char * D.26970;
  unsigned char D.26971;
  int D.26972;
  const unsigned char * D.26973;
  unsigned char D.26974;
  int D.26975;
  _Bool D.26976;
  _Bool D.26977;
  const unsigned char * D.26980;
  unsigned char D.26981;
  int D.26982;
  const unsigned char * D.26983;
  unsigned char D.26984;
  int D.26985;
  int iftmp.16;
  struct MonoClass * D.26990;
  struct MonoGenericClass * D.26991;
  struct MonoGenericContainer * D.26993;
  _Bool D.26995;
  long int D.26996;
  long int D.26997;
  int D.22376;
  int iftmp.17;
  int D.22375;
  unsigned char D.27003;
  int D.27004;
  _Bool D.27005;
  _Bool D.27006;
  _Bool D.27007;
  const unsigned char * D.27010;
  unsigned char D.27011;
  int D.27012;
  _Bool D.27013;
  _Bool D.27014;
  const unsigned char * D.27017;
  unsigned char D.27018;
  int D.27019;
  _Bool D.27020;
  _Bool D.27021;
  const unsigned char * D.27024;
  unsigned char D.27025;
  int D.27026;
  int D.22385;
  int iftmp.18;
  int D.22384;
  unsigned char D.27033;
  int D.27034;
  _Bool D.27035;
  _Bool D.27036;
  _Bool D.27037;
  const unsigned char * D.27040;
  unsigned char D.27041;
  int D.27042;
  _Bool D.27043;
  _Bool D.27044;
  const unsigned char * D.27047;
  unsigned char D.27048;
  int D.27049;
  _Bool D.27050;
  _Bool D.27051;
  const unsigned char * D.27054;
  unsigned char D.27055;
  int D.27056;
  int D.27060;
  _Bool D.27061;
  long int D.27062;
  long int D.27063;
  int D.22395;
  int iftmp.19;
  int D.22394;
  unsigned char D.27071;
  int D.27072;
  _Bool D.27073;
  _Bool D.27074;
  _Bool D.27075;
  const unsigned char * D.27078;
  unsigned char D.27079;
  int D.27080;
  _Bool D.27081;
  _Bool D.27082;
  const unsigned char * D.27085;
  unsigned char D.27086;
  int D.27087;
  _Bool D.27088;
  _Bool D.27089;
  const unsigned char * D.27092;
  unsigned char D.27093;
  int D.27094;
  int D.22404;
  int iftmp.20;
  int D.22403;
  unsigned char D.27100;
  int D.27101;
  _Bool D.27102;
  _Bool D.27103;
  _Bool D.27104;
  const unsigned char * D.27107;
  unsigned char D.27108;
  int D.27109;
  _Bool D.27110;
  _Bool D.27111;
  const unsigned char * D.27114;
  unsigned char D.27115;
  int D.27116;
  _Bool D.27117;
  _Bool D.27118;
  const unsigned char * D.27121;
  unsigned char D.27122;
  int D.27123;
  int D.22413;
  int iftmp.21;
  int D.22412;
  const char[23] * D.27128;
  unsigned char D.27129;
  int D.27130;
  unsigned char D.27131;
  int D.27132;
  _Bool D.27133;
  _Bool D.27134;
  _Bool D.27135;
  const unsigned char * D.27138;
  unsigned char D.27139;
  int D.27140;
  const unsigned char * D.27141;
  unsigned char D.27142;
  int D.27143;
  _Bool D.27144;
  _Bool D.27145;
  const unsigned char * D.27148;
  unsigned char D.27149;
  int D.27150;
  const unsigned char * D.27151;
  unsigned char D.27152;
  int D.27153;
  _Bool D.27154;
  _Bool D.27155;
  const unsigned char * D.27158;
  unsigned char D.27159;
  int D.27160;
  const unsigned char * D.27161;
  unsigned char D.27162;
  int D.27163;
  int D.22422;
  int iftmp.22;
  int D.22421;
  const char[24] * D.27170;
  unsigned char D.27171;
  int D.27172;
  unsigned char D.27173;
  int D.27174;
  _Bool D.27175;
  _Bool D.27176;
  _Bool D.27177;
  const unsigned char * D.27180;
  unsigned char D.27181;
  int D.27182;
  const unsigned char * D.27183;
  unsigned char D.27184;
  int D.27185;
  _Bool D.27186;
  _Bool D.27187;
  const unsigned char * D.27190;
  unsigned char D.27191;
  int D.27192;
  const unsigned char * D.27193;
  unsigned char D.27194;
  int D.27195;
  _Bool D.27196;
  _Bool D.27197;
  const unsigned char * D.27200;
  unsigned char D.27201;
  int D.27202;
  const unsigned char * D.27203;
  unsigned char D.27204;
  int D.27205;
  int D.22431;
  int iftmp.23;
  int D.22430;
  const char[29] * D.27212;
  unsigned char D.27213;
  int D.27214;
  unsigned char D.27215;
  int D.27216;
  _Bool D.27217;
  _Bool D.27218;
  _Bool D.27219;
  const unsigned char * D.27222;
  unsigned char D.27223;
  int D.27224;
  const unsigned char * D.27225;
  unsigned char D.27226;
  int D.27227;
  _Bool D.27228;
  _Bool D.27229;
  const unsigned char * D.27232;
  unsigned char D.27233;
  int D.27234;
  const unsigned char * D.27235;
  unsigned char D.27236;
  int D.27237;
  _Bool D.27238;
  _Bool D.27239;
  const unsigned char * D.27242;
  unsigned char D.27243;
  int D.27244;
  const unsigned char * D.27245;
  unsigned char D.27246;
  int D.27247;
  int D.22441;
  int iftmp.24;
  int D.22440;
  unsigned char D.27254;
  int D.27255;
  _Bool D.27256;
  _Bool D.27257;
  _Bool D.27258;
  const unsigned char * D.27261;
  unsigned char D.27262;
  int D.27263;
  _Bool D.27264;
  _Bool D.27265;
  const unsigned char * D.27268;
  unsigned char D.27269;
  int D.27270;
  _Bool D.27271;
  _Bool D.27272;
  const unsigned char * D.27275;
  unsigned char D.27276;
  int D.27277;
  struct MonoMethodSignature * D.27281;
  short unsigned int D.27282;
  _Bool D.27283;
  long int D.27284;
  long int D.27285;
  int D.22451;
  int iftmp.25;
  int D.22450;
  unsigned char D.27291;
  int D.27292;
  _Bool D.27293;
  _Bool D.27294;
  _Bool D.27295;
  const unsigned char * D.27298;
  unsigned char D.27299;
  int D.27300;
  _Bool D.27301;
  _Bool D.27302;
  const unsigned char * D.27305;
  unsigned char D.27306;
  int D.27307;
  _Bool D.27308;
  _Bool D.27309;
  const unsigned char * D.27312;
  unsigned char D.27313;
  int D.27314;
  int D.22460;
  int iftmp.26;
  int D.22459;
  unsigned char D.27321;
  int D.27322;
  _Bool D.27323;
  _Bool D.27324;
  _Bool D.27325;
  const unsigned char * D.27328;
  unsigned char D.27329;
  int D.27330;
  _Bool D.27331;
  _Bool D.27332;
  const unsigned char * D.27335;
  unsigned char D.27336;
  int D.27337;
  _Bool D.27338;
  _Bool D.27339;
  const unsigned char * D.27342;
  unsigned char D.27343;
  int D.27344;
  unsigned char D.27348;
  unsigned char * D.27349;
  unsigned int D.27350;
  unsigned char D.27351;
  unsigned char * D.27352;
  unsigned int D.27353;
  unsigned char D.27354;
  int D.27355;
  unsigned int D.27356;
  guint32 code_idx;
  struct MonoReflectionILTokenInfo * iltoken;
  struct MonoReflectionFieldBuilder * field;
  struct MonoReflectionCtorBuilder * ctor;
  struct MonoReflectionMethodBuilder * method;
  struct MonoReflectionTypeBuilder * tb;
  struct MonoReflectionArrayMethod * am;
  guint32 i;
  guint32 idx;
  unsigned char * target;

  code_idx = (guint32) value;
  idx = 0;
  i = 0;
  goto <D.22464>;
  <D.22463>:
  D.26488 = ilgen->token_fixups;
  iltoken = mono_array_addr_with_size (D.26488, 8, i);
  D.26489 = assembly->code.data;
  D.26490 = iltoken->code_pos;
  D.26491 = (sizetype) D.26490;
  D.26492 = D.26491 + code_idx;
  target = D.26489 + D.26492;
  D.26493 = target + 3;
  D.26494 = *D.26493;
  D.26495 = (int) D.26494;
  switch (D.26495) <default: <D.22461>, case 2: <D.22310>, case 4: <D.22251>, case 6: <D.22272>, case 10: <D.22320>, case 43: <D.22432>>
  <D.22251>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26502 = "FieldBuilder";
      D.26503 = MEM[(const unsigned char *)D.26502];
      D.26504 = (int) D.26503;
      D.26505 = *__s2;
      D.26506 = (int) D.26505;
      __result = D.26504 - D.26506;
      {
        D.26507 = __s2_len != 0;
        D.26508 = __result == 0;
        D.26509 = D.26507 & D.26508;
        if (D.26509 != 0) goto <D.26510>; else goto <D.26511>;
        <D.26510>:
        D.26512 = &MEM[(void *)"FieldBuilder" + 1B];
        D.26513 = *D.26512;
        D.26514 = (int) D.26513;
        D.26515 = __s2 + 1;
        D.26516 = *D.26515;
        D.26517 = (int) D.26516;
        __result = D.26514 - D.26517;
        D.26518 = __s2_len > 1;
        D.26508 = __result == 0;
        D.26519 = D.26518 & D.26508;
        if (D.26519 != 0) goto <D.26520>; else goto <D.26521>;
        <D.26520>:
        D.26522 = &MEM[(void *)"FieldBuilder" + 2B];
        D.26523 = *D.26522;
        D.26524 = (int) D.26523;
        D.26525 = __s2 + 2;
        D.26526 = *D.26525;
        D.26527 = (int) D.26526;
        __result = D.26524 - D.26527;
        D.26528 = __s2_len > 2;
        D.26508 = __result == 0;
        D.26529 = D.26528 & D.26508;
        if (D.26529 != 0) goto <D.26530>; else goto <D.26531>;
        <D.26530>:
        D.26532 = &MEM[(void *)"FieldBuilder" + 3B];
        D.26533 = *D.26532;
        D.26534 = (int) D.26533;
        D.26535 = __s2 + 3;
        D.26536 = *D.26535;
        D.26537 = (int) D.26536;
        __result = D.26534 - D.26537;
        <D.26531>:
        <D.26521>:
        <D.26511>:
      }
      D.22259 = __result;
    }
    iftmp.4 = -D.22259;
    goto <D.26538>;
    <D.26498>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.4 = __builtin_strcmp (D.26539, "FieldBuilder");
    <D.26538>:
    D.22260 = iftmp.4;
  }
  if (D.22260 == 0) goto <D.26540>; else goto <D.26541>;
  <D.26540>:
  field = iltoken->member;
  D.26542 = field->table_idx;
  idx = (guint32) D.26542;
  goto <D.26543>;
  <D.26541>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26547 = "MonoField";
      D.26548 = MEM[(const unsigned char *)D.26547];
      D.26549 = (int) D.26548;
      D.26550 = *__s2;
      D.26551 = (int) D.26550;
      __result = D.26549 - D.26551;
      {
        D.26552 = __s2_len != 0;
        D.26553 = __result == 0;
        D.26554 = D.26552 & D.26553;
        if (D.26554 != 0) goto <D.26555>; else goto <D.26556>;
        <D.26555>:
        D.26557 = &MEM[(void *)"MonoField" + 1B];
        D.26558 = *D.26557;
        D.26559 = (int) D.26558;
        D.26560 = __s2 + 1;
        D.26561 = *D.26560;
        D.26562 = (int) D.26561;
        __result = D.26559 - D.26562;
        D.26563 = __s2_len > 1;
        D.26553 = __result == 0;
        D.26564 = D.26563 & D.26553;
        if (D.26564 != 0) goto <D.26565>; else goto <D.26566>;
        <D.26565>:
        D.26567 = &MEM[(void *)"MonoField" + 2B];
        D.26568 = *D.26567;
        D.26569 = (int) D.26568;
        D.26570 = __s2 + 2;
        D.26571 = *D.26570;
        D.26572 = (int) D.26571;
        __result = D.26569 - D.26572;
        D.26573 = __s2_len > 2;
        D.26553 = __result == 0;
        D.26574 = D.26573 & D.26553;
        if (D.26574 != 0) goto <D.26575>; else goto <D.26576>;
        <D.26575>:
        D.26577 = &MEM[(void *)"MonoField" + 3B];
        D.26578 = *D.26577;
        D.26579 = (int) D.26578;
        D.26580 = __s2 + 3;
        D.26581 = *D.26580;
        D.26582 = (int) D.26581;
        __result = D.26579 - D.26582;
        <D.26576>:
        <D.26566>:
        <D.26556>:
      }
      D.22268 = __result;
    }
    iftmp.5 = -D.22268;
    goto <D.26583>;
    <D.26546>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.5 = __builtin_strcmp (D.26539, "MonoField");
    <D.26583>:
    D.22269 = iftmp.5;
  }
  if (D.22269 == 0) goto <D.26584>; else goto <D.26585>;
  <D.26584>:
  {
    struct MonoClassField * f;

    D.26499 = iltoken->member;
    f = MEM[(struct MonoReflectionField *)D.26499].field;
    D.26586 = assembly->field_to_table_idx;
    D.26587 = monoeg_g_hash_table_lookup (D.26586, f);
    idx = (guint32) D.26587;
  }
  goto <D.26588>;
  <D.26585>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 4237);
  <D.26588>:
  <D.26543>:
  goto <D.22271>;
  <D.22272>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26592 = "MethodBuilder";
      D.26593 = MEM[(const unsigned char *)D.26592];
      D.26594 = (int) D.26593;
      D.26595 = *__s2;
      D.26596 = (int) D.26595;
      __result = D.26594 - D.26596;
      {
        D.26597 = __s2_len != 0;
        D.26598 = __result == 0;
        D.26599 = D.26597 & D.26598;
        if (D.26599 != 0) goto <D.26600>; else goto <D.26601>;
        <D.26600>:
        D.26602 = &MEM[(void *)"MethodBuilder" + 1B];
        D.26603 = *D.26602;
        D.26604 = (int) D.26603;
        D.26605 = __s2 + 1;
        D.26606 = *D.26605;
        D.26607 = (int) D.26606;
        __result = D.26604 - D.26607;
        D.26608 = __s2_len > 1;
        D.26598 = __result == 0;
        D.26609 = D.26608 & D.26598;
        if (D.26609 != 0) goto <D.26610>; else goto <D.26611>;
        <D.26610>:
        D.26612 = &MEM[(void *)"MethodBuilder" + 2B];
        D.26613 = *D.26612;
        D.26614 = (int) D.26613;
        D.26615 = __s2 + 2;
        D.26616 = *D.26615;
        D.26617 = (int) D.26616;
        __result = D.26614 - D.26617;
        D.26618 = __s2_len > 2;
        D.26598 = __result == 0;
        D.26619 = D.26618 & D.26598;
        if (D.26619 != 0) goto <D.26620>; else goto <D.26621>;
        <D.26620>:
        D.26622 = &MEM[(void *)"MethodBuilder" + 3B];
        D.26623 = *D.26622;
        D.26624 = (int) D.26623;
        D.26625 = __s2 + 3;
        D.26626 = *D.26625;
        D.26627 = (int) D.26626;
        __result = D.26624 - D.26627;
        <D.26621>:
        <D.26611>:
        <D.26601>:
      }
      D.22280 = __result;
    }
    iftmp.6 = -D.22280;
    goto <D.26628>;
    <D.26591>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.6 = __builtin_strcmp (D.26539, "MethodBuilder");
    <D.26628>:
    D.22281 = iftmp.6;
  }
  if (D.22281 == 0) goto <D.26629>; else goto <D.26630>;
  <D.26629>:
  method = iltoken->member;
  idx = method->table_idx;
  goto <D.26631>;
  <D.26630>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26635 = "ConstructorBuilder";
      D.26636 = MEM[(const unsigned char *)D.26635];
      D.26637 = (int) D.26636;
      D.26638 = *__s2;
      D.26639 = (int) D.26638;
      __result = D.26637 - D.26639;
      {
        D.26640 = __s2_len != 0;
        D.26641 = __result == 0;
        D.26642 = D.26640 & D.26641;
        if (D.26642 != 0) goto <D.26643>; else goto <D.26644>;
        <D.26643>:
        D.26645 = &MEM[(void *)"ConstructorBuilder" + 1B];
        D.26646 = *D.26645;
        D.26647 = (int) D.26646;
        D.26648 = __s2 + 1;
        D.26649 = *D.26648;
        D.26650 = (int) D.26649;
        __result = D.26647 - D.26650;
        D.26651 = __s2_len > 1;
        D.26641 = __result == 0;
        D.26652 = D.26651 & D.26641;
        if (D.26652 != 0) goto <D.26653>; else goto <D.26654>;
        <D.26653>:
        D.26655 = &MEM[(void *)"ConstructorBuilder" + 2B];
        D.26656 = *D.26655;
        D.26657 = (int) D.26656;
        D.26658 = __s2 + 2;
        D.26659 = *D.26658;
        D.26660 = (int) D.26659;
        __result = D.26657 - D.26660;
        D.26661 = __s2_len > 2;
        D.26641 = __result == 0;
        D.26662 = D.26661 & D.26641;
        if (D.26662 != 0) goto <D.26663>; else goto <D.26664>;
        <D.26663>:
        D.26665 = &MEM[(void *)"ConstructorBuilder" + 3B];
        D.26666 = *D.26665;
        D.26667 = (int) D.26666;
        D.26668 = __s2 + 3;
        D.26669 = *D.26668;
        D.26670 = (int) D.26669;
        __result = D.26667 - D.26670;
        <D.26664>:
        <D.26654>:
        <D.26644>:
      }
      D.22289 = __result;
    }
    iftmp.7 = -D.22289;
    goto <D.26671>;
    <D.26634>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.7 = __builtin_strcmp (D.26539, "ConstructorBuilder");
    <D.26671>:
    D.22290 = iftmp.7;
  }
  if (D.22290 == 0) goto <D.26672>; else goto <D.26673>;
  <D.26672>:
  ctor = iltoken->member;
  idx = ctor->table_idx;
  goto <D.26674>;
  <D.26673>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26681 = "MonoMethod";
      D.26682 = MEM[(const unsigned char *)D.26681];
      D.26683 = (int) D.26682;
      D.26684 = *__s2;
      D.26685 = (int) D.26684;
      __result = D.26683 - D.26685;
      {
        D.26686 = __s2_len != 0;
        D.26687 = __result == 0;
        D.26688 = D.26686 & D.26687;
        if (D.26688 != 0) goto <D.26689>; else goto <D.26690>;
        <D.26689>:
        D.26691 = &MEM[(void *)"MonoMethod" + 1B];
        D.26692 = *D.26691;
        D.26693 = (int) D.26692;
        D.26694 = __s2 + 1;
        D.26695 = *D.26694;
        D.26696 = (int) D.26695;
        __result = D.26693 - D.26696;
        D.26697 = __s2_len > 1;
        D.26687 = __result == 0;
        D.26698 = D.26697 & D.26687;
        if (D.26698 != 0) goto <D.26699>; else goto <D.26700>;
        <D.26699>:
        D.26701 = &MEM[(void *)"MonoMethod" + 2B];
        D.26702 = *D.26701;
        D.26703 = (int) D.26702;
        D.26704 = __s2 + 2;
        D.26705 = *D.26704;
        D.26706 = (int) D.26705;
        __result = D.26703 - D.26706;
        D.26707 = __s2_len > 2;
        D.26687 = __result == 0;
        D.26708 = D.26707 & D.26687;
        if (D.26708 != 0) goto <D.26709>; else goto <D.26710>;
        <D.26709>:
        D.26711 = &MEM[(void *)"MonoMethod" + 3B];
        D.26712 = *D.26711;
        D.26713 = (int) D.26712;
        D.26714 = __s2 + 3;
        D.26715 = *D.26714;
        D.26716 = (int) D.26715;
        __result = D.26713 - D.26716;
        <D.26710>:
        <D.26700>:
        <D.26690>:
      }
      D.22298 = __result;
    }
    iftmp.8 = -D.22298;
    goto <D.26717>;
    <D.26680>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.8 = __builtin_strcmp (D.26539, "MonoMethod");
    <D.26717>:
    D.22299 = iftmp.8;
  }
  if (D.22299 == 0) goto <D.26675>; else goto <D.26718>;
  <D.26718>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26722 = "MonoCMethod";
      D.26723 = MEM[(const unsigned char *)D.26722];
      D.26724 = (int) D.26723;
      D.26725 = *__s2;
      D.26726 = (int) D.26725;
      __result = D.26724 - D.26726;
      {
        D.26727 = __s2_len != 0;
        D.26728 = __result == 0;
        D.26729 = D.26727 & D.26728;
        if (D.26729 != 0) goto <D.26730>; else goto <D.26731>;
        <D.26730>:
        D.26732 = &MEM[(void *)"MonoCMethod" + 1B];
        D.26733 = *D.26732;
        D.26734 = (int) D.26733;
        D.26735 = __s2 + 1;
        D.26736 = *D.26735;
        D.26737 = (int) D.26736;
        __result = D.26734 - D.26737;
        D.26738 = __s2_len > 1;
        D.26728 = __result == 0;
        D.26739 = D.26738 & D.26728;
        if (D.26739 != 0) goto <D.26740>; else goto <D.26741>;
        <D.26740>:
        D.26742 = &MEM[(void *)"MonoCMethod" + 2B];
        D.26743 = *D.26742;
        D.26744 = (int) D.26743;
        D.26745 = __s2 + 2;
        D.26746 = *D.26745;
        D.26747 = (int) D.26746;
        __result = D.26744 - D.26747;
        D.26748 = __s2_len > 2;
        D.26728 = __result == 0;
        D.26749 = D.26748 & D.26728;
        if (D.26749 != 0) goto <D.26750>; else goto <D.26751>;
        <D.26750>:
        D.26752 = &MEM[(void *)"MonoCMethod" + 3B];
        D.26753 = *D.26752;
        D.26754 = (int) D.26753;
        D.26755 = __s2 + 3;
        D.26756 = *D.26755;
        D.26757 = (int) D.26756;
        __result = D.26754 - D.26757;
        <D.26751>:
        <D.26741>:
        <D.26731>:
      }
      D.22307 = __result;
    }
    iftmp.9 = -D.22307;
    goto <D.26758>;
    <D.26721>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.9 = __builtin_strcmp (D.26539, "MonoCMethod");
    <D.26758>:
    D.22308 = iftmp.9;
  }
  if (D.22308 == 0) goto <D.26675>; else goto <D.26676>;
  <D.26675>:
  {
    struct MonoMethod * m;

    D.26499 = iltoken->member;
    m = MEM[(struct MonoReflectionMethod *)D.26499].method;
    D.26759 = assembly->method_to_table_idx;
    D.26760 = monoeg_g_hash_table_lookup (D.26759, m);
    idx = (guint32) D.26760;
  }
  goto <D.26677>;
  <D.26676>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 4252);
  <D.26677>:
  <D.26674>:
  <D.26631>:
  goto <D.22271>;
  <D.22310>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26764 = "TypeBuilder";
      D.26765 = MEM[(const unsigned char *)D.26764];
      D.26766 = (int) D.26765;
      D.26767 = *__s2;
      D.26768 = (int) D.26767;
      __result = D.26766 - D.26768;
      {
        D.26769 = __s2_len != 0;
        D.26770 = __result == 0;
        D.26771 = D.26769 & D.26770;
        if (D.26771 != 0) goto <D.26772>; else goto <D.26773>;
        <D.26772>:
        D.26774 = &MEM[(void *)"TypeBuilder" + 1B];
        D.26775 = *D.26774;
        D.26776 = (int) D.26775;
        D.26777 = __s2 + 1;
        D.26778 = *D.26777;
        D.26779 = (int) D.26778;
        __result = D.26776 - D.26779;
        D.26780 = __s2_len > 1;
        D.26770 = __result == 0;
        D.26781 = D.26780 & D.26770;
        if (D.26781 != 0) goto <D.26782>; else goto <D.26783>;
        <D.26782>:
        D.26784 = &MEM[(void *)"TypeBuilder" + 2B];
        D.26785 = *D.26784;
        D.26786 = (int) D.26785;
        D.26787 = __s2 + 2;
        D.26788 = *D.26787;
        D.26789 = (int) D.26788;
        __result = D.26786 - D.26789;
        D.26790 = __s2_len > 2;
        D.26770 = __result == 0;
        D.26791 = D.26790 & D.26770;
        if (D.26791 != 0) goto <D.26792>; else goto <D.26793>;
        <D.26792>:
        D.26794 = &MEM[(void *)"TypeBuilder" + 3B];
        D.26795 = *D.26794;
        D.26796 = (int) D.26795;
        D.26797 = __s2 + 3;
        D.26798 = *D.26797;
        D.26799 = (int) D.26798;
        __result = D.26796 - D.26799;
        <D.26793>:
        <D.26783>:
        <D.26773>:
      }
      D.22318 = __result;
    }
    iftmp.10 = -D.22318;
    goto <D.26800>;
    <D.26763>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.10 = __builtin_strcmp (D.26539, "TypeBuilder");
    <D.26800>:
    D.22319 = iftmp.10;
  }
  if (D.22319 != 0) goto <D.26801>; else goto <D.26802>;
  <D.26801>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 4257);
  <D.26802>:
  tb = iltoken->member;
  idx = tb->table_idx;
  goto <D.22271>;
  <D.22320>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26806 = "MonoArrayMethod";
      D.26807 = MEM[(const unsigned char *)D.26806];
      D.26808 = (int) D.26807;
      D.26809 = *__s2;
      D.26810 = (int) D.26809;
      __result = D.26808 - D.26810;
      {
        D.26811 = __s2_len != 0;
        D.26812 = __result == 0;
        D.26813 = D.26811 & D.26812;
        if (D.26813 != 0) goto <D.26814>; else goto <D.26815>;
        <D.26814>:
        D.26816 = &MEM[(void *)"MonoArrayMethod" + 1B];
        D.26817 = *D.26816;
        D.26818 = (int) D.26817;
        D.26819 = __s2 + 1;
        D.26820 = *D.26819;
        D.26821 = (int) D.26820;
        __result = D.26818 - D.26821;
        D.26822 = __s2_len > 1;
        D.26812 = __result == 0;
        D.26823 = D.26822 & D.26812;
        if (D.26823 != 0) goto <D.26824>; else goto <D.26825>;
        <D.26824>:
        D.26826 = &MEM[(void *)"MonoArrayMethod" + 2B];
        D.26827 = *D.26826;
        D.26828 = (int) D.26827;
        D.26829 = __s2 + 2;
        D.26830 = *D.26829;
        D.26831 = (int) D.26830;
        __result = D.26828 - D.26831;
        D.26832 = __s2_len > 2;
        D.26812 = __result == 0;
        D.26833 = D.26832 & D.26812;
        if (D.26833 != 0) goto <D.26834>; else goto <D.26835>;
        <D.26834>:
        D.26836 = &MEM[(void *)"MonoArrayMethod" + 3B];
        D.26837 = *D.26836;
        D.26838 = (int) D.26837;
        D.26839 = __s2 + 3;
        D.26840 = *D.26839;
        D.26841 = (int) D.26840;
        __result = D.26838 - D.26841;
        <D.26835>:
        <D.26825>:
        <D.26815>:
      }
      D.22328 = __result;
    }
    iftmp.11 = -D.22328;
    goto <D.26842>;
    <D.26805>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.11 = __builtin_strcmp (D.26539, "MonoArrayMethod");
    <D.26842>:
    D.22329 = iftmp.11;
  }
  if (D.22329 == 0) goto <D.26843>; else goto <D.26844>;
  <D.26843>:
  am = iltoken->member;
  idx = am->table_idx;
  goto <D.26845>;
  <D.26844>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26681 = "MonoMethod";
      D.26682 = MEM[(const unsigned char *)D.26681];
      D.26683 = (int) D.26682;
      D.26851 = *__s2;
      D.26852 = (int) D.26851;
      __result = D.26683 - D.26852;
      {
        D.26853 = __s2_len != 0;
        D.26854 = __result == 0;
        D.26855 = D.26853 & D.26854;
        if (D.26855 != 0) goto <D.26856>; else goto <D.26857>;
        <D.26856>:
        D.26691 = &MEM[(void *)"MonoMethod" + 1B];
        D.26692 = *D.26691;
        D.26693 = (int) D.26692;
        D.26858 = __s2 + 1;
        D.26859 = *D.26858;
        D.26860 = (int) D.26859;
        __result = D.26693 - D.26860;
        D.26861 = __s2_len > 1;
        D.26854 = __result == 0;
        D.26862 = D.26861 & D.26854;
        if (D.26862 != 0) goto <D.26863>; else goto <D.26864>;
        <D.26863>:
        D.26701 = &MEM[(void *)"MonoMethod" + 2B];
        D.26702 = *D.26701;
        D.26703 = (int) D.26702;
        D.26865 = __s2 + 2;
        D.26866 = *D.26865;
        D.26867 = (int) D.26866;
        __result = D.26703 - D.26867;
        D.26868 = __s2_len > 2;
        D.26854 = __result == 0;
        D.26869 = D.26868 & D.26854;
        if (D.26869 != 0) goto <D.26870>; else goto <D.26871>;
        <D.26870>:
        D.26711 = &MEM[(void *)"MonoMethod" + 3B];
        D.26712 = *D.26711;
        D.26713 = (int) D.26712;
        D.26872 = __s2 + 3;
        D.26873 = *D.26872;
        D.26874 = (int) D.26873;
        __result = D.26713 - D.26874;
        <D.26871>:
        <D.26864>:
        <D.26857>:
      }
      D.22337 = __result;
    }
    iftmp.12 = -D.22337;
    goto <D.26875>;
    <D.26850>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.12 = __builtin_strcmp (D.26539, "MonoMethod");
    <D.26875>:
    D.22338 = iftmp.12;
  }
  if (D.22338 == 0) goto <D.26846>; else goto <D.26876>;
  <D.26876>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26722 = "MonoCMethod";
      D.26723 = MEM[(const unsigned char *)D.26722];
      D.26724 = (int) D.26723;
      D.26880 = *__s2;
      D.26881 = (int) D.26880;
      __result = D.26724 - D.26881;
      {
        D.26882 = __s2_len != 0;
        D.26883 = __result == 0;
        D.26884 = D.26882 & D.26883;
        if (D.26884 != 0) goto <D.26885>; else goto <D.26886>;
        <D.26885>:
        D.26732 = &MEM[(void *)"MonoCMethod" + 1B];
        D.26733 = *D.26732;
        D.26734 = (int) D.26733;
        D.26887 = __s2 + 1;
        D.26888 = *D.26887;
        D.26889 = (int) D.26888;
        __result = D.26734 - D.26889;
        D.26890 = __s2_len > 1;
        D.26883 = __result == 0;
        D.26891 = D.26890 & D.26883;
        if (D.26891 != 0) goto <D.26892>; else goto <D.26893>;
        <D.26892>:
        D.26742 = &MEM[(void *)"MonoCMethod" + 2B];
        D.26743 = *D.26742;
        D.26744 = (int) D.26743;
        D.26894 = __s2 + 2;
        D.26895 = *D.26894;
        D.26896 = (int) D.26895;
        __result = D.26744 - D.26896;
        D.26897 = __s2_len > 2;
        D.26883 = __result == 0;
        D.26898 = D.26897 & D.26883;
        if (D.26898 != 0) goto <D.26899>; else goto <D.26900>;
        <D.26899>:
        D.26752 = &MEM[(void *)"MonoCMethod" + 3B];
        D.26753 = *D.26752;
        D.26754 = (int) D.26753;
        D.26901 = __s2 + 3;
        D.26902 = *D.26901;
        D.26903 = (int) D.26902;
        __result = D.26754 - D.26903;
        <D.26900>:
        <D.26893>:
        <D.26886>:
      }
      D.22346 = __result;
    }
    iftmp.13 = -D.22346;
    goto <D.26904>;
    <D.26879>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.13 = __builtin_strcmp (D.26539, "MonoCMethod");
    <D.26904>:
    D.22347 = iftmp.13;
  }
  if (D.22347 == 0) goto <D.26846>; else goto <D.26905>;
  <D.26905>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26909 = "MonoGenericMethod";
      D.26910 = MEM[(const unsigned char *)D.26909];
      D.26911 = (int) D.26910;
      D.26912 = *__s2;
      D.26913 = (int) D.26912;
      __result = D.26911 - D.26913;
      {
        D.26914 = __s2_len != 0;
        D.26915 = __result == 0;
        D.26916 = D.26914 & D.26915;
        if (D.26916 != 0) goto <D.26917>; else goto <D.26918>;
        <D.26917>:
        D.26919 = &MEM[(void *)"MonoGenericMethod" + 1B];
        D.26920 = *D.26919;
        D.26921 = (int) D.26920;
        D.26922 = __s2 + 1;
        D.26923 = *D.26922;
        D.26924 = (int) D.26923;
        __result = D.26921 - D.26924;
        D.26925 = __s2_len > 1;
        D.26915 = __result == 0;
        D.26926 = D.26925 & D.26915;
        if (D.26926 != 0) goto <D.26927>; else goto <D.26928>;
        <D.26927>:
        D.26929 = &MEM[(void *)"MonoGenericMethod" + 2B];
        D.26930 = *D.26929;
        D.26931 = (int) D.26930;
        D.26932 = __s2 + 2;
        D.26933 = *D.26932;
        D.26934 = (int) D.26933;
        __result = D.26931 - D.26934;
        D.26935 = __s2_len > 2;
        D.26915 = __result == 0;
        D.26936 = D.26935 & D.26915;
        if (D.26936 != 0) goto <D.26937>; else goto <D.26938>;
        <D.26937>:
        D.26939 = &MEM[(void *)"MonoGenericMethod" + 3B];
        D.26940 = *D.26939;
        D.26941 = (int) D.26940;
        D.26942 = __s2 + 3;
        D.26943 = *D.26942;
        D.26944 = (int) D.26943;
        __result = D.26941 - D.26944;
        <D.26938>:
        <D.26928>:
        <D.26918>:
      }
      D.22355 = __result;
    }
    iftmp.14 = -D.22355;
    goto <D.26945>;
    <D.26908>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.14 = __builtin_strcmp (D.26539, "MonoGenericMethod");
    <D.26945>:
    D.22356 = iftmp.14;
  }
  if (D.22356 == 0) goto <D.26846>; else goto <D.26946>;
  <D.26946>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26950 = "MonoGenericCMethod";
      D.26951 = MEM[(const unsigned char *)D.26950];
      D.26952 = (int) D.26951;
      D.26953 = *__s2;
      D.26954 = (int) D.26953;
      __result = D.26952 - D.26954;
      {
        D.26955 = __s2_len != 0;
        D.26956 = __result == 0;
        D.26957 = D.26955 & D.26956;
        if (D.26957 != 0) goto <D.26958>; else goto <D.26959>;
        <D.26958>:
        D.26960 = &MEM[(void *)"MonoGenericCMethod" + 1B];
        D.26961 = *D.26960;
        D.26962 = (int) D.26961;
        D.26963 = __s2 + 1;
        D.26964 = *D.26963;
        D.26965 = (int) D.26964;
        __result = D.26962 - D.26965;
        D.26966 = __s2_len > 1;
        D.26956 = __result == 0;
        D.26967 = D.26966 & D.26956;
        if (D.26967 != 0) goto <D.26968>; else goto <D.26969>;
        <D.26968>:
        D.26970 = &MEM[(void *)"MonoGenericCMethod" + 2B];
        D.26971 = *D.26970;
        D.26972 = (int) D.26971;
        D.26973 = __s2 + 2;
        D.26974 = *D.26973;
        D.26975 = (int) D.26974;
        __result = D.26972 - D.26975;
        D.26976 = __s2_len > 2;
        D.26956 = __result == 0;
        D.26977 = D.26976 & D.26956;
        if (D.26977 != 0) goto <D.26978>; else goto <D.26979>;
        <D.26978>:
        D.26980 = &MEM[(void *)"MonoGenericCMethod" + 3B];
        D.26981 = *D.26980;
        D.26982 = (int) D.26981;
        D.26983 = __s2 + 3;
        D.26984 = *D.26983;
        D.26985 = (int) D.26984;
        __result = D.26982 - D.26985;
        <D.26979>:
        <D.26969>:
        <D.26959>:
      }
      D.22364 = __result;
    }
    iftmp.15 = -D.22364;
    goto <D.26986>;
    <D.26949>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.15 = __builtin_strcmp (D.26539, "MonoGenericCMethod");
    <D.26986>:
    D.22365 = iftmp.15;
  }
  if (D.22365 == 0) goto <D.26846>; else goto <D.26847>;
  <D.26846>:
  {
    struct MonoMethod * m;

    D.26499 = iltoken->member;
    m = MEM[(struct MonoReflectionMethod *)D.26499].method;
    D.26990 = m->klass;
    D.26991 = D.26990->generic_class;
    if (D.26991 == 0B) goto <D.26992>; else goto <D.26988>;
    <D.26992>:
    D.26990 = m->klass;
    D.26993 = D.26990->generic_container;
    if (D.26993 == 0B) goto <D.26994>; else goto <D.26988>;
    <D.26994>:
    iftmp.16 = 1;
    goto <D.26989>;
    <D.26988>:
    iftmp.16 = 0;
    <D.26989>:
    D.26995 = iftmp.16 != 0;
    D.26996 = (long int) D.26995;
    D.26997 = __builtin_expect (D.26996, 0);
    if (D.26997 != 0) goto <D.26998>; else goto <D.26999>;
    <D.26998>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 4270, "m->klass->generic_class || m->klass->generic_container");
    <D.26999>:
    // predicted unlikely by continue predictor.
    goto <D.22367>;
  }
  <D.26847>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26502 = "FieldBuilder";
      D.26503 = MEM[(const unsigned char *)D.26502];
      D.26504 = (int) D.26503;
      D.27003 = *__s2;
      D.27004 = (int) D.27003;
      __result = D.26504 - D.27004;
      {
        D.27005 = __s2_len != 0;
        D.27006 = __result == 0;
        D.27007 = D.27005 & D.27006;
        if (D.27007 != 0) goto <D.27008>; else goto <D.27009>;
        <D.27008>:
        D.26512 = &MEM[(void *)"FieldBuilder" + 1B];
        D.26513 = *D.26512;
        D.26514 = (int) D.26513;
        D.27010 = __s2 + 1;
        D.27011 = *D.27010;
        D.27012 = (int) D.27011;
        __result = D.26514 - D.27012;
        D.27013 = __s2_len > 1;
        D.27006 = __result == 0;
        D.27014 = D.27013 & D.27006;
        if (D.27014 != 0) goto <D.27015>; else goto <D.27016>;
        <D.27015>:
        D.26522 = &MEM[(void *)"FieldBuilder" + 2B];
        D.26523 = *D.26522;
        D.26524 = (int) D.26523;
        D.27017 = __s2 + 2;
        D.27018 = *D.27017;
        D.27019 = (int) D.27018;
        __result = D.26524 - D.27019;
        D.27020 = __s2_len > 2;
        D.27006 = __result == 0;
        D.27021 = D.27020 & D.27006;
        if (D.27021 != 0) goto <D.27022>; else goto <D.27023>;
        <D.27022>:
        D.26532 = &MEM[(void *)"FieldBuilder" + 3B];
        D.26533 = *D.26532;
        D.26534 = (int) D.26533;
        D.27024 = __s2 + 3;
        D.27025 = *D.27024;
        D.27026 = (int) D.27025;
        __result = D.26534 - D.27026;
        <D.27023>:
        <D.27016>:
        <D.27009>:
      }
      D.22375 = __result;
    }
    iftmp.17 = -D.22375;
    goto <D.27027>;
    <D.27002>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.17 = __builtin_strcmp (D.26539, "FieldBuilder");
    <D.27027>:
    D.22376 = iftmp.17;
  }
  if (D.22376 == 0) goto <D.27028>; else goto <D.27029>;
  <D.27028>:
  // predicted unlikely by continue predictor.
  goto <D.22367>;
  <D.27029>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26547 = "MonoField";
      D.26548 = MEM[(const unsigned char *)D.26547];
      D.26549 = (int) D.26548;
      D.27033 = *__s2;
      D.27034 = (int) D.27033;
      __result = D.26549 - D.27034;
      {
        D.27035 = __s2_len != 0;
        D.27036 = __result == 0;
        D.27037 = D.27035 & D.27036;
        if (D.27037 != 0) goto <D.27038>; else goto <D.27039>;
        <D.27038>:
        D.26557 = &MEM[(void *)"MonoField" + 1B];
        D.26558 = *D.26557;
        D.26559 = (int) D.26558;
        D.27040 = __s2 + 1;
        D.27041 = *D.27040;
        D.27042 = (int) D.27041;
        __result = D.26559 - D.27042;
        D.27043 = __s2_len > 1;
        D.27036 = __result == 0;
        D.27044 = D.27043 & D.27036;
        if (D.27044 != 0) goto <D.27045>; else goto <D.27046>;
        <D.27045>:
        D.26567 = &MEM[(void *)"MonoField" + 2B];
        D.26568 = *D.26567;
        D.26569 = (int) D.26568;
        D.27047 = __s2 + 2;
        D.27048 = *D.27047;
        D.27049 = (int) D.27048;
        __result = D.26569 - D.27049;
        D.27050 = __s2_len > 2;
        D.27036 = __result == 0;
        D.27051 = D.27050 & D.27036;
        if (D.27051 != 0) goto <D.27052>; else goto <D.27053>;
        <D.27052>:
        D.26577 = &MEM[(void *)"MonoField" + 3B];
        D.26578 = *D.26577;
        D.26579 = (int) D.26578;
        D.27054 = __s2 + 3;
        D.27055 = *D.27054;
        D.27056 = (int) D.27055;
        __result = D.26579 - D.27056;
        <D.27053>:
        <D.27046>:
        <D.27039>:
      }
      D.22384 = __result;
    }
    iftmp.18 = -D.22384;
    goto <D.27057>;
    <D.27032>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.18 = __builtin_strcmp (D.26539, "MonoField");
    <D.27057>:
    D.22385 = iftmp.18;
  }
  if (D.22385 == 0) goto <D.27058>; else goto <D.27059>;
  <D.27058>:
  {
    struct MonoClassField * f;

    D.26499 = iltoken->member;
    f = MEM[(struct MonoReflectionField *)D.26499].field;
    D.27060 = is_field_on_inst (f);
    D.27061 = D.27060 == 0;
    D.27062 = (long int) D.27061;
    D.27063 = __builtin_expect (D.27062, 0);
    if (D.27063 != 0) goto <D.27064>; else goto <D.27065>;
    <D.27064>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 4276, "is_field_on_inst (f)");
    <D.27065>:
    // predicted unlikely by continue predictor.
    goto <D.22367>;
  }
  <D.27059>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26592 = "MethodBuilder";
      D.26593 = MEM[(const unsigned char *)D.26592];
      D.26594 = (int) D.26593;
      D.27071 = *__s2;
      D.27072 = (int) D.27071;
      __result = D.26594 - D.27072;
      {
        D.27073 = __s2_len != 0;
        D.27074 = __result == 0;
        D.27075 = D.27073 & D.27074;
        if (D.27075 != 0) goto <D.27076>; else goto <D.27077>;
        <D.27076>:
        D.26602 = &MEM[(void *)"MethodBuilder" + 1B];
        D.26603 = *D.26602;
        D.26604 = (int) D.26603;
        D.27078 = __s2 + 1;
        D.27079 = *D.27078;
        D.27080 = (int) D.27079;
        __result = D.26604 - D.27080;
        D.27081 = __s2_len > 1;
        D.27074 = __result == 0;
        D.27082 = D.27081 & D.27074;
        if (D.27082 != 0) goto <D.27083>; else goto <D.27084>;
        <D.27083>:
        D.26612 = &MEM[(void *)"MethodBuilder" + 2B];
        D.26613 = *D.26612;
        D.26614 = (int) D.26613;
        D.27085 = __s2 + 2;
        D.27086 = *D.27085;
        D.27087 = (int) D.27086;
        __result = D.26614 - D.27087;
        D.27088 = __s2_len > 2;
        D.27074 = __result == 0;
        D.27089 = D.27088 & D.27074;
        if (D.27089 != 0) goto <D.27090>; else goto <D.27091>;
        <D.27090>:
        D.26622 = &MEM[(void *)"MethodBuilder" + 3B];
        D.26623 = *D.26622;
        D.26624 = (int) D.26623;
        D.27092 = __s2 + 3;
        D.27093 = *D.27092;
        D.27094 = (int) D.27093;
        __result = D.26624 - D.27094;
        <D.27091>:
        <D.27084>:
        <D.27077>:
      }
      D.22394 = __result;
    }
    iftmp.19 = -D.22394;
    goto <D.27095>;
    <D.27070>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.19 = __builtin_strcmp (D.26539, "MethodBuilder");
    <D.27095>:
    D.22395 = iftmp.19;
  }
  if (D.22395 == 0) goto <D.27066>; else goto <D.27096>;
  <D.27096>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26635 = "ConstructorBuilder";
      D.26636 = MEM[(const unsigned char *)D.26635];
      D.26637 = (int) D.26636;
      D.27100 = *__s2;
      D.27101 = (int) D.27100;
      __result = D.26637 - D.27101;
      {
        D.27102 = __s2_len != 0;
        D.27103 = __result == 0;
        D.27104 = D.27102 & D.27103;
        if (D.27104 != 0) goto <D.27105>; else goto <D.27106>;
        <D.27105>:
        D.26645 = &MEM[(void *)"ConstructorBuilder" + 1B];
        D.26646 = *D.26645;
        D.26647 = (int) D.26646;
        D.27107 = __s2 + 1;
        D.27108 = *D.27107;
        D.27109 = (int) D.27108;
        __result = D.26647 - D.27109;
        D.27110 = __s2_len > 1;
        D.27103 = __result == 0;
        D.27111 = D.27110 & D.27103;
        if (D.27111 != 0) goto <D.27112>; else goto <D.27113>;
        <D.27112>:
        D.26655 = &MEM[(void *)"ConstructorBuilder" + 2B];
        D.26656 = *D.26655;
        D.26657 = (int) D.26656;
        D.27114 = __s2 + 2;
        D.27115 = *D.27114;
        D.27116 = (int) D.27115;
        __result = D.26657 - D.27116;
        D.27117 = __s2_len > 2;
        D.27103 = __result == 0;
        D.27118 = D.27117 & D.27103;
        if (D.27118 != 0) goto <D.27119>; else goto <D.27120>;
        <D.27119>:
        D.26665 = &MEM[(void *)"ConstructorBuilder" + 3B];
        D.26666 = *D.26665;
        D.26667 = (int) D.26666;
        D.27121 = __s2 + 3;
        D.27122 = *D.27121;
        D.27123 = (int) D.27122;
        __result = D.26667 - D.27123;
        <D.27120>:
        <D.27113>:
        <D.27106>:
      }
      D.22403 = __result;
    }
    iftmp.20 = -D.22403;
    goto <D.27124>;
    <D.27099>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.20 = __builtin_strcmp (D.26539, "ConstructorBuilder");
    <D.27124>:
    D.22404 = iftmp.20;
  }
  if (D.22404 == 0) goto <D.27066>; else goto <D.27067>;
  <D.27066>:
  // predicted unlikely by continue predictor.
  goto <D.22367>;
  <D.27067>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.27128 = "FieldOnTypeBuilderInst";
      D.27129 = MEM[(const unsigned char *)D.27128];
      D.27130 = (int) D.27129;
      D.27131 = *__s2;
      D.27132 = (int) D.27131;
      __result = D.27130 - D.27132;
      {
        D.27133 = __s2_len != 0;
        D.27134 = __result == 0;
        D.27135 = D.27133 & D.27134;
        if (D.27135 != 0) goto <D.27136>; else goto <D.27137>;
        <D.27136>:
        D.27138 = &MEM[(void *)"FieldOnTypeBuilderInst" + 1B];
        D.27139 = *D.27138;
        D.27140 = (int) D.27139;
        D.27141 = __s2 + 1;
        D.27142 = *D.27141;
        D.27143 = (int) D.27142;
        __result = D.27140 - D.27143;
        D.27144 = __s2_len > 1;
        D.27134 = __result == 0;
        D.27145 = D.27144 & D.27134;
        if (D.27145 != 0) goto <D.27146>; else goto <D.27147>;
        <D.27146>:
        D.27148 = &MEM[(void *)"FieldOnTypeBuilderInst" + 2B];
        D.27149 = *D.27148;
        D.27150 = (int) D.27149;
        D.27151 = __s2 + 2;
        D.27152 = *D.27151;
        D.27153 = (int) D.27152;
        __result = D.27150 - D.27153;
        D.27154 = __s2_len > 2;
        D.27134 = __result == 0;
        D.27155 = D.27154 & D.27134;
        if (D.27155 != 0) goto <D.27156>; else goto <D.27157>;
        <D.27156>:
        D.27158 = &MEM[(void *)"FieldOnTypeBuilderInst" + 3B];
        D.27159 = *D.27158;
        D.27160 = (int) D.27159;
        D.27161 = __s2 + 3;
        D.27162 = *D.27161;
        D.27163 = (int) D.27162;
        __result = D.27160 - D.27163;
        <D.27157>:
        <D.27147>:
        <D.27137>:
      }
      D.22412 = __result;
    }
    iftmp.21 = -D.22412;
    goto <D.27164>;
    <D.27127>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.21 = __builtin_strcmp (D.26539, "FieldOnTypeBuilderInst");
    <D.27164>:
    D.22413 = iftmp.21;
  }
  if (D.22413 == 0) goto <D.27165>; else goto <D.27166>;
  <D.27165>:
  // predicted unlikely by continue predictor.
  goto <D.22367>;
  <D.27166>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.27170 = "MethodOnTypeBuilderInst";
      D.27171 = MEM[(const unsigned char *)D.27170];
      D.27172 = (int) D.27171;
      D.27173 = *__s2;
      D.27174 = (int) D.27173;
      __result = D.27172 - D.27174;
      {
        D.27175 = __s2_len != 0;
        D.27176 = __result == 0;
        D.27177 = D.27175 & D.27176;
        if (D.27177 != 0) goto <D.27178>; else goto <D.27179>;
        <D.27178>:
        D.27180 = &MEM[(void *)"MethodOnTypeBuilderInst" + 1B];
        D.27181 = *D.27180;
        D.27182 = (int) D.27181;
        D.27183 = __s2 + 1;
        D.27184 = *D.27183;
        D.27185 = (int) D.27184;
        __result = D.27182 - D.27185;
        D.27186 = __s2_len > 1;
        D.27176 = __result == 0;
        D.27187 = D.27186 & D.27176;
        if (D.27187 != 0) goto <D.27188>; else goto <D.27189>;
        <D.27188>:
        D.27190 = &MEM[(void *)"MethodOnTypeBuilderInst" + 2B];
        D.27191 = *D.27190;
        D.27192 = (int) D.27191;
        D.27193 = __s2 + 2;
        D.27194 = *D.27193;
        D.27195 = (int) D.27194;
        __result = D.27192 - D.27195;
        D.27196 = __s2_len > 2;
        D.27176 = __result == 0;
        D.27197 = D.27196 & D.27176;
        if (D.27197 != 0) goto <D.27198>; else goto <D.27199>;
        <D.27198>:
        D.27200 = &MEM[(void *)"MethodOnTypeBuilderInst" + 3B];
        D.27201 = *D.27200;
        D.27202 = (int) D.27201;
        D.27203 = __s2 + 3;
        D.27204 = *D.27203;
        D.27205 = (int) D.27204;
        __result = D.27202 - D.27205;
        <D.27199>:
        <D.27189>:
        <D.27179>:
      }
      D.22421 = __result;
    }
    iftmp.22 = -D.22421;
    goto <D.27206>;
    <D.27169>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.22 = __builtin_strcmp (D.26539, "MethodOnTypeBuilderInst");
    <D.27206>:
    D.22422 = iftmp.22;
  }
  if (D.22422 == 0) goto <D.27207>; else goto <D.27208>;
  <D.27207>:
  // predicted unlikely by continue predictor.
  goto <D.22367>;
  <D.27208>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.27212 = "ConstructorOnTypeBuilderInst";
      D.27213 = MEM[(const unsigned char *)D.27212];
      D.27214 = (int) D.27213;
      D.27215 = *__s2;
      D.27216 = (int) D.27215;
      __result = D.27214 - D.27216;
      {
        D.27217 = __s2_len != 0;
        D.27218 = __result == 0;
        D.27219 = D.27217 & D.27218;
        if (D.27219 != 0) goto <D.27220>; else goto <D.27221>;
        <D.27220>:
        D.27222 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 1B];
        D.27223 = *D.27222;
        D.27224 = (int) D.27223;
        D.27225 = __s2 + 1;
        D.27226 = *D.27225;
        D.27227 = (int) D.27226;
        __result = D.27224 - D.27227;
        D.27228 = __s2_len > 1;
        D.27218 = __result == 0;
        D.27229 = D.27228 & D.27218;
        if (D.27229 != 0) goto <D.27230>; else goto <D.27231>;
        <D.27230>:
        D.27232 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 2B];
        D.27233 = *D.27232;
        D.27234 = (int) D.27233;
        D.27235 = __s2 + 2;
        D.27236 = *D.27235;
        D.27237 = (int) D.27236;
        __result = D.27234 - D.27237;
        D.27238 = __s2_len > 2;
        D.27218 = __result == 0;
        D.27239 = D.27238 & D.27218;
        if (D.27239 != 0) goto <D.27240>; else goto <D.27241>;
        <D.27240>:
        D.27242 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 3B];
        D.27243 = *D.27242;
        D.27244 = (int) D.27243;
        D.27245 = __s2 + 3;
        D.27246 = *D.27245;
        D.27247 = (int) D.27246;
        __result = D.27244 - D.27247;
        <D.27241>:
        <D.27231>:
        <D.27221>:
      }
      D.22430 = __result;
    }
    iftmp.23 = -D.22430;
    goto <D.27248>;
    <D.27211>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.23 = __builtin_strcmp (D.26539, "ConstructorOnTypeBuilderInst");
    <D.27248>:
    D.22431 = iftmp.23;
  }
  if (D.22431 == 0) goto <D.27249>; else goto <D.27250>;
  <D.27249>:
  // predicted unlikely by continue predictor.
  goto <D.22367>;
  <D.27250>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 4288);
  <D.26845>:
  goto <D.22271>;
  <D.22432>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26909 = "MonoGenericMethod";
      D.26910 = MEM[(const unsigned char *)D.26909];
      D.26911 = (int) D.26910;
      D.27254 = *__s2;
      D.27255 = (int) D.27254;
      __result = D.26911 - D.27255;
      {
        D.27256 = __s2_len != 0;
        D.27257 = __result == 0;
        D.27258 = D.27256 & D.27257;
        if (D.27258 != 0) goto <D.27259>; else goto <D.27260>;
        <D.27259>:
        D.26919 = &MEM[(void *)"MonoGenericMethod" + 1B];
        D.26920 = *D.26919;
        D.26921 = (int) D.26920;
        D.27261 = __s2 + 1;
        D.27262 = *D.27261;
        D.27263 = (int) D.27262;
        __result = D.26921 - D.27263;
        D.27264 = __s2_len > 1;
        D.27257 = __result == 0;
        D.27265 = D.27264 & D.27257;
        if (D.27265 != 0) goto <D.27266>; else goto <D.27267>;
        <D.27266>:
        D.26929 = &MEM[(void *)"MonoGenericMethod" + 2B];
        D.26930 = *D.26929;
        D.26931 = (int) D.26930;
        D.27268 = __s2 + 2;
        D.27269 = *D.27268;
        D.27270 = (int) D.27269;
        __result = D.26931 - D.27270;
        D.27271 = __s2_len > 2;
        D.27257 = __result == 0;
        D.27272 = D.27271 & D.27257;
        if (D.27272 != 0) goto <D.27273>; else goto <D.27274>;
        <D.27273>:
        D.26939 = &MEM[(void *)"MonoGenericMethod" + 3B];
        D.26940 = *D.26939;
        D.26941 = (int) D.26940;
        D.27275 = __s2 + 3;
        D.27276 = *D.27275;
        D.27277 = (int) D.27276;
        __result = D.26941 - D.27277;
        <D.27274>:
        <D.27267>:
        <D.27260>:
      }
      D.22440 = __result;
    }
    iftmp.24 = -D.22440;
    goto <D.27278>;
    <D.27253>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.24 = __builtin_strcmp (D.26539, "MonoGenericMethod");
    <D.27278>:
    D.22441 = iftmp.24;
  }
  if (D.22441 == 0) goto <D.27279>; else goto <D.27280>;
  <D.27279>:
  {
    struct MonoMethod * m;

    D.26499 = iltoken->member;
    m = MEM[(struct MonoReflectionMethod *)D.26499].method;
    D.27281 = mono_method_signature (m);
    D.27282 = D.27281->generic_param_count;
    D.27283 = D.27282 == 0;
    D.27284 = (long int) D.27283;
    D.27285 = __builtin_expect (D.27284, 0);
    if (D.27285 != 0) goto <D.27286>; else goto <D.27287>;
    <D.27286>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 4294, "mono_method_signature (m)->generic_param_count");
    <D.27287>:
    // predicted unlikely by continue predictor.
    goto <D.22367>;
  }
  <D.27280>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.26592 = "MethodBuilder";
      D.26593 = MEM[(const unsigned char *)D.26592];
      D.26594 = (int) D.26593;
      D.27291 = *__s2;
      D.27292 = (int) D.27291;
      __result = D.26594 - D.27292;
      {
        D.27293 = __s2_len != 0;
        D.27294 = __result == 0;
        D.27295 = D.27293 & D.27294;
        if (D.27295 != 0) goto <D.27296>; else goto <D.27297>;
        <D.27296>:
        D.26602 = &MEM[(void *)"MethodBuilder" + 1B];
        D.26603 = *D.26602;
        D.26604 = (int) D.26603;
        D.27298 = __s2 + 1;
        D.27299 = *D.27298;
        D.27300 = (int) D.27299;
        __result = D.26604 - D.27300;
        D.27301 = __s2_len > 1;
        D.27294 = __result == 0;
        D.27302 = D.27301 & D.27294;
        if (D.27302 != 0) goto <D.27303>; else goto <D.27304>;
        <D.27303>:
        D.26612 = &MEM[(void *)"MethodBuilder" + 2B];
        D.26613 = *D.26612;
        D.26614 = (int) D.26613;
        D.27305 = __s2 + 2;
        D.27306 = *D.27305;
        D.27307 = (int) D.27306;
        __result = D.26614 - D.27307;
        D.27308 = __s2_len > 2;
        D.27294 = __result == 0;
        D.27309 = D.27308 & D.27294;
        if (D.27309 != 0) goto <D.27310>; else goto <D.27311>;
        <D.27310>:
        D.26622 = &MEM[(void *)"MethodBuilder" + 3B];
        D.26623 = *D.26622;
        D.26624 = (int) D.26623;
        D.27312 = __s2 + 3;
        D.27313 = *D.27312;
        D.27314 = (int) D.27313;
        __result = D.26624 - D.27314;
        <D.27311>:
        <D.27304>:
        <D.27297>:
      }
      D.22450 = __result;
    }
    iftmp.25 = -D.22450;
    goto <D.27315>;
    <D.27290>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.25 = __builtin_strcmp (D.26539, "MethodBuilder");
    <D.27315>:
    D.22451 = iftmp.25;
  }
  if (D.22451 == 0) goto <D.27316>; else goto <D.27317>;
  <D.27316>:
  // predicted unlikely by continue predictor.
  goto <D.22367>;
  <D.27317>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26499 = iltoken->member;
      D.26500 = D.26499->vtable;
      D.26501 = D.26500->klass;
      __s2 = D.26501->name;
      D.27170 = "MethodOnTypeBuilderInst";
      D.27171 = MEM[(const unsigned char *)D.27170];
      D.27172 = (int) D.27171;
      D.27321 = *__s2;
      D.27322 = (int) D.27321;
      __result = D.27172 - D.27322;
      {
        D.27323 = __s2_len != 0;
        D.27324 = __result == 0;
        D.27325 = D.27323 & D.27324;
        if (D.27325 != 0) goto <D.27326>; else goto <D.27327>;
        <D.27326>:
        D.27180 = &MEM[(void *)"MethodOnTypeBuilderInst" + 1B];
        D.27181 = *D.27180;
        D.27182 = (int) D.27181;
        D.27328 = __s2 + 1;
        D.27329 = *D.27328;
        D.27330 = (int) D.27329;
        __result = D.27182 - D.27330;
        D.27331 = __s2_len > 1;
        D.27324 = __result == 0;
        D.27332 = D.27331 & D.27324;
        if (D.27332 != 0) goto <D.27333>; else goto <D.27334>;
        <D.27333>:
        D.27190 = &MEM[(void *)"MethodOnTypeBuilderInst" + 2B];
        D.27191 = *D.27190;
        D.27192 = (int) D.27191;
        D.27335 = __s2 + 2;
        D.27336 = *D.27335;
        D.27337 = (int) D.27336;
        __result = D.27192 - D.27337;
        D.27338 = __s2_len > 2;
        D.27324 = __result == 0;
        D.27339 = D.27338 & D.27324;
        if (D.27339 != 0) goto <D.27340>; else goto <D.27341>;
        <D.27340>:
        D.27200 = &MEM[(void *)"MethodOnTypeBuilderInst" + 3B];
        D.27201 = *D.27200;
        D.27202 = (int) D.27201;
        D.27342 = __s2 + 3;
        D.27343 = *D.27342;
        D.27344 = (int) D.27343;
        __result = D.27202 - D.27344;
        <D.27341>:
        <D.27334>:
        <D.27327>:
      }
      D.22459 = __result;
    }
    iftmp.26 = -D.22459;
    goto <D.27345>;
    <D.27320>:
    D.26499 = iltoken->member;
    D.26500 = D.26499->vtable;
    D.26501 = D.26500->klass;
    D.26539 = D.26501->name;
    iftmp.26 = __builtin_strcmp (D.26539, "MethodOnTypeBuilderInst");
    <D.27345>:
    D.22460 = iftmp.26;
  }
  if (D.22460 == 0) goto <D.27346>; else goto <D.27347>;
  <D.27346>:
  // predicted unlikely by continue predictor.
  goto <D.22367>;
  <D.27347>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 4301);
  <D.22461>:
  D.26493 = target + 3;
  D.26494 = *D.26493;
  D.26495 = (int) D.26494;
  monoeg_g_log (0B, 4, "got unexpected table 0x%02x in fixup", D.26495);
  <D.22462>:
  goto <D.22462>;
  <D.22271>:
  D.27348 = (unsigned char) idx;
  *target = D.27348;
  D.27349 = target + 1;
  D.27350 = idx >> 8;
  D.27351 = (unsigned char) D.27350;
  *D.27349 = D.27351;
  D.27352 = target + 2;
  D.27353 = idx >> 16;
  D.27354 = (unsigned char) D.27353;
  *D.27352 = D.27354;
  <D.22367>:
  i = i + 1;
  <D.22464>:
  D.27355 = ilgen->num_token_fixups;
  D.27356 = (unsigned int) D.27355;
  if (D.27356 > i) goto <D.22463>; else goto <D.22465>;
  <D.22465>:
}


is_field_on_inst (struct MonoClassField * field)
{
  gboolean D.27357;
  int iftmp.27;
  struct MonoClass * D.27361;
  struct MonoGenericClass * D.27362;
  unsigned char D.27364;
  unsigned char D.27365;
  struct MonoClassField * D.27367;

  D.27361 = field->parent;
  D.27362 = D.27361->generic_class;
  if (D.27362 != 0B) goto <D.27363>; else goto <D.27359>;
  <D.27363>:
  D.27361 = field->parent;
  D.27362 = D.27361->generic_class;
  D.27364 = BIT_FIELD_REF <*D.27362, 8, 96>;
  D.27365 = D.27364 & 1;
  if (D.27365 != 0) goto <D.27366>; else goto <D.27359>;
  <D.27366>:
  D.27361 = field->parent;
  D.27362 = D.27361->generic_class;
  D.27367 = MEM[(struct MonoDynamicGenericClass *)D.27362].fields;
  if (D.27367 != 0B) goto <D.27368>; else goto <D.27359>;
  <D.27368>:
  iftmp.27 = 1;
  goto <D.27360>;
  <D.27359>:
  iftmp.27 = 0;
  <D.27360>:
  D.27357 = iftmp.27;
  return D.27357;
}


compare_types_by_table_idx (struct MonoReflectionTypeBuilder * * type1, struct MonoReflectionTypeBuilder * * type2)
{
  struct MonoReflectionTypeBuilder * D.27370;
  unsigned int D.27371;
  struct MonoReflectionTypeBuilder * D.27372;
  unsigned int D.27373;
  gint D.27376;

  D.27370 = *type1;
  D.27371 = D.27370->table_idx;
  D.27372 = *type2;
  D.27373 = D.27372->table_idx;
  if (D.27371 < D.27373) goto <D.27374>; else goto <D.27375>;
  <D.27374>:
  D.27376 = -1;
  return D.27376;
  <D.27375>:
  D.27370 = *type1;
  D.27371 = D.27370->table_idx;
  D.27372 = *type2;
  D.27373 = D.27372->table_idx;
  if (D.27371 > D.27373) goto <D.27377>; else goto <D.27378>;
  <D.27377>:
  D.27376 = 1;
  return D.27376;
  <D.27378>:
  D.27376 = 0;
  return D.27376;
}


mono_image_emit_manifest (struct MonoReflectionModuleBuilder * moduleb)
{
  struct MonoVTable * D.27380;
  guint32 * D.27381;
  guint32 iftmp.28;
  unsigned int D.27383;
  guint32 * D.27387;
  struct MonoDynamicStream * D.27388;
  struct MonoString * D.27389;
  unsigned int D.27390;
  struct MonoString * D.27391;
  guint32 * D.27394;
  unsigned int D.27395;
  unsigned int D.27397;
  guint32 * D.27398;
  struct MonoArray * D.27399;
  unsigned int D.27400;
  guint32 * D.27401;
  unsigned int D.27402;
  struct MonoString * D.27403;
  struct MonoArray * D.27404;
  unsigned int i.29;
  char * D.27406;
  struct MonoArray * D.27409;
  unsigned int j.30;
  char * D.27413;
  int D.27414;
  unsigned int D.27415;
  struct MonoArray * D.27416;
  char * D.27419;
  unsigned int D.27420;
  struct MonoArray * D.27421;
  char * D.27424;
  struct MonoArray * D.27427;
  unsigned int D.27430;
  unsigned int j.31;
  unsigned int D.27432;
  unsigned int D.27433;
  struct MonoDynamicTable * table;
  struct MonoDynamicImage * assembly;
  struct MonoReflectionAssemblyBuilder * assemblyb;
  struct MonoDomain * domain;
  guint32 * values;
  int i;
  guint32 module_index;

  assemblyb = moduleb->assemblyb;
  assembly = moduleb->dynamic_image;
  D.27380 = MEM[(struct MonoObject *)assemblyb].vtable;
  domain = D.27380->domain;
  table = &assembly->tables[32];
  alloc_table (table, 1);
  D.27381 = table->values;
  values = D.27381 + 36;
  D.27383 = assemblyb->algid;
  if (D.27383 != 0) goto <D.27384>; else goto <D.27385>;
  <D.27384>:
  iftmp.28 = assemblyb->algid;
  goto <D.27386>;
  <D.27385>:
  iftmp.28 = 32772;
  <D.27386>:
  *values = iftmp.28;
  D.27387 = values + 28;
  D.27388 = &assembly->sheap;
  D.27389 = assemblyb->name;
  D.27390 = string_heap_insert_mstring (D.27388, D.27389);
  *D.27387 = D.27390;
  D.27391 = assemblyb->culture;
  if (D.27391 != 0B) goto <D.27392>; else goto <D.27393>;
  <D.27392>:
  D.27394 = values + 32;
  D.27388 = &assembly->sheap;
  D.27391 = assemblyb->culture;
  D.27395 = string_heap_insert_mstring (D.27388, D.27391);
  *D.27394 = D.27395;
  goto <D.27396>;
  <D.27393>:
  D.27394 = values + 32;
  D.27388 = &assembly->sheap;
  D.27397 = string_heap_insert (D.27388, "");
  *D.27394 = D.27397;
  <D.27396>:
  D.27398 = values + 24;
  D.27399 = assemblyb->public_key;
  D.27400 = load_public_key (D.27399, assembly);
  *D.27398 = D.27400;
  D.27401 = values + 20;
  D.27402 = assemblyb->flags;
  *D.27401 = D.27402;
  D.27403 = assemblyb->version;
  set_version_from_string (D.27403, values);
  module_index = 0;
  i = 0;
  goto <D.22563>;
  <D.22562>:
  {
    int j;
    struct MonoReflectionModuleBuilder * file_module;

    D.27404 = assemblyb->modules;
    i.29 = (unsigned int) i;
    D.27406 = mono_array_addr_with_size (D.27404, 4, i.29);
    file_module = MEM[(struct MonoReflectionModuleBuilder * *)D.27406];
    if (file_module != moduleb) goto <D.27407>; else goto <D.27408>;
    <D.27407>:
    mono_image_fill_file_table (domain, file_module, assembly);
    module_index = module_index + 1;
    D.27409 = file_module->types;
    if (D.27409 != 0B) goto <D.27410>; else goto <D.27411>;
    <D.27410>:
    j = 0;
    goto <D.22560>;
    <D.22559>:
    {
      struct MonoReflectionTypeBuilder * tb;

      D.27409 = file_module->types;
      j.30 = (unsigned int) j;
      D.27413 = mono_array_addr_with_size (D.27409, 4, j.30);
      tb = MEM[(struct MonoReflectionTypeBuilder * *)D.27413];
      mono_image_fill_export_table (domain, tb, module_index, 0, assembly);
    }
    j = j + 1;
    <D.22560>:
    D.27414 = file_module->num_types;
    if (D.27414 > j) goto <D.22559>; else goto <D.22561>;
    <D.22561>:
    <D.27411>:
    <D.27408>:
  }
  i = i + 1;
  <D.22563>:
  i.29 = (unsigned int) i;
  D.27404 = assemblyb->modules;
  D.27415 = mono_array_length (D.27404);
  if (i.29 < D.27415) goto <D.22562>; else goto <D.22564>;
  <D.22564>:
  D.27416 = assemblyb->loaded_modules;
  if (D.27416 != 0B) goto <D.27417>; else goto <D.27418>;
  <D.27417>:
  i = 0;
  goto <D.22567>;
  <D.22566>:
  {
    struct MonoReflectionModule * file_module;

    D.27416 = assemblyb->loaded_modules;
    i.29 = (unsigned int) i;
    D.27419 = mono_array_addr_with_size (D.27416, 4, i.29);
    file_module = MEM[(struct MonoReflectionModule * *)D.27419];
    mono_image_fill_file_table (domain, file_module, assembly);
    module_index = module_index + 1;
    mono_image_fill_export_table_from_module (domain, file_module, module_index, assembly);
  }
  i = i + 1;
  <D.22567>:
  i.29 = (unsigned int) i;
  D.27416 = assemblyb->loaded_modules;
  D.27420 = mono_array_length (D.27416);
  if (i.29 < D.27420) goto <D.22566>; else goto <D.22568>;
  <D.22568>:
  <D.27418>:
  D.27421 = assemblyb->type_forwarders;
  if (D.27421 != 0B) goto <D.27422>; else goto <D.27423>;
  <D.27422>:
  mono_image_fill_export_table_from_type_forwarders (assemblyb, assembly);
  <D.27423>:
  module_index = 0;
  i = 0;
  goto <D.22577>;
  <D.22576>:
  {
    int j;
    struct MonoReflectionModuleBuilder * file_module;

    D.27404 = assemblyb->modules;
    i.29 = (unsigned int) i;
    D.27424 = mono_array_addr_with_size (D.27404, 4, i.29);
    file_module = MEM[(struct MonoReflectionModuleBuilder * *)D.27424];
    if (file_module != moduleb) goto <D.27425>; else goto <D.27426>;
    <D.27425>:
    module_index = module_index + 1;
    D.27427 = file_module->resources;
    if (D.27427 != 0B) goto <D.27428>; else goto <D.27429>;
    <D.27428>:
    {
      int len;

      D.27427 = file_module->resources;
      D.27430 = mono_array_length (D.27427);
      len = (int) D.27430;
      j = 0;
      goto <D.22574>;
      <D.22573>:
      {
        struct MonoReflectionResource * res;

        D.27427 = file_module->resources;
        j.31 = (unsigned int) j;
        res = mono_array_addr_with_size (D.27427, 24, j.31);
        D.27432 = module_index << 2;
        assembly_add_resource_manifest (file_module, assembly, res, D.27432);
      }
      j = j + 1;
      <D.22574>:
      if (j < len) goto <D.22573>; else goto <D.22575>;
      <D.22575>:
    }
    <D.27429>:
    <D.27426>:
  }
  i = i + 1;
  <D.22577>:
  i.29 = (unsigned int) i;
  D.27404 = assemblyb->modules;
  D.27433 = mono_array_length (D.27404);
  if (i.29 < D.27433) goto <D.22576>; else goto <D.22578>;
  <D.22578>:
}


load_public_key (struct MonoArray * pkey, struct MonoDynamicImage * assembly)
{
  guint32 D.27436;
  char * b.32;
  struct MonoDynamicStream * D.27438;
  int b.33;
  int blob_size.34;
  int D.27441;
  unsigned int D.27442;
  char * D.27443;
  void * D.27444;
  guint8 * D.27445;
  char * D.27446;
  int len.35;
  char * D.27451;
  int D.27452;
  unsigned int D.27456;
  unsigned int D.27458;
  int D.27459;
  unsigned int D.27460;
  void * D.27461;
  gsize len;
  guint32 token;
  char blob_size[6];
  char * b;

  try
    {
      token = 0;
      b = &blob_size;
      if (pkey == 0B) goto <D.27434>; else goto <D.27435>;
      <D.27434>:
      D.27436 = token;
      return D.27436;
      <D.27435>:
      len = mono_array_length (pkey);
      b.32 = b;
      mono_metadata_encode_value (len, b.32, &b);
      D.27438 = &assembly->blob;
      b.32 = b;
      b.33 = (int) b.32;
      blob_size.34 = (int) &blob_size;
      D.27441 = b.33 - blob_size.34;
      D.27442 = (unsigned int) D.27441;
      token = mono_image_add_stream_data (D.27438, &blob_size, D.27442);
      D.27438 = &assembly->blob;
      D.27443 = mono_array_addr_with_size (pkey, 1, 0);
      mono_image_add_stream_data (D.27438, D.27443, len);
      D.27444 = monoeg_malloc (len);
      assembly->public_key = D.27444;
      D.27445 = assembly->public_key;
      D.27446 = mono_array_addr_with_size (pkey, 1, 0);
      memcpy (D.27445, D.27446, len);
      len.35 = (int) len;
      assembly->public_key_len = len.35;
      if (len == 16) goto <D.27450>; else goto <D.27448>;
      <D.27450>:
      D.27451 = mono_array_addr_with_size (pkey, 1, 0);
      len.35 = (int) len;
      D.27452 = mono_is_ecma_key (D.27451, len.35);
      if (D.27452 != 0) goto <D.27453>; else goto <D.27448>;
      <D.27453>:
      assembly->strong_name_size = 128;
      goto <D.27449>;
      <D.27448>:
      if (len > 79) goto <D.27454>; else goto <D.27455>;
      <D.27454>:
      D.27456 = len + 4294967264;
      assembly->strong_name_size = D.27456;
      goto <D.27457>;
      <D.27455>:
      D.27456 = len + 4294967264;
      D.27458 = D.27456 << 3;
      D.27459 = (int) D.27458;
      len.35 = (int) len;
      monoeg_g_log (0B, 16, "Invalid public key length: %d bits (total: %d)", D.27459, len.35);
      assembly->strong_name_size = 128;
      <D.27457>:
      <D.27449>:
      D.27460 = assembly->strong_name_size;
      D.27461 = monoeg_malloc0 (D.27460);
      assembly->strong_name = D.27461;
      D.27436 = token;
      return D.27436;
    }
  finally
    {
      blob_size = {CLOBBER};
      b = {CLOBBER};
    }
}


mono_image_add_stream_data (struct MonoDynamicStream * stream, const char * data, guint32 len)
{
  unsigned int D.27464;
  unsigned int D.27465;
  int D.27466;
  char * D.27467;
  char * D.27468;
  guint32 D.27469;
  guint32 idx;

  D.27464 = stream->index;
  D.27465 = D.27464 + len;
  D.27466 = (int) D.27465;
  make_room_in_stream (stream, D.27466);
  D.27467 = stream->data;
  D.27464 = stream->index;
  D.27468 = D.27467 + D.27464;
  memcpy (D.27468, data, len);
  idx = stream->index;
  D.27464 = stream->index;
  D.27465 = D.27464 + len;
  stream->index = D.27465;
  D.27469 = idx;
  return D.27469;
}


make_room_in_stream (struct MonoDynamicStream * stream, int size)
{
  unsigned int size.36;
  unsigned int D.27472;
  unsigned int D.27478;
  char * D.27479;
  void * D.27480;

  size.36 = (unsigned int) size;
  D.27472 = stream->alloc_size;
  if (size.36 <= D.27472) goto <D.27473>; else goto <D.27474>;
  <D.27473>:
  return;
  <D.27474>:
  goto <D.20900>;
  <D.20899>:
  D.27472 = stream->alloc_size;
  if (D.27472 <= 4095) goto <D.27475>; else goto <D.27476>;
  <D.27475>:
  stream->alloc_size = 4096;
  goto <D.27477>;
  <D.27476>:
  D.27472 = stream->alloc_size;
  D.27478 = D.27472 * 2;
  stream->alloc_size = D.27478;
  <D.27477>:
  <D.20900>:
  D.27472 = stream->alloc_size;
  size.36 = (unsigned int) size;
  if (D.27472 <= size.36) goto <D.20899>; else goto <D.20901>;
  <D.20901>:
  D.27479 = stream->data;
  D.27472 = stream->alloc_size;
  D.27480 = monoeg_realloc (D.27479, D.27472);
  stream->data = D.27480;
}


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

  D.27483 = __builtin_object_size (__dest, 0);
  D.27482 = __builtin___memcpy_chk (__dest, __src, __len, D.27483);
  return D.27482;
}


set_version_from_string (struct MonoString * version, guint32 * values)
{
  guint32 * D.27485;
  guint32 * D.27486;
  guint32 * D.27487;
  guint32 * D.27488;
  unsigned int D.27491;
  unsigned int D.27492;
  guint32 * D.27493;
  long int D.27494;
  unsigned int D.27495;
  gchar * p.37;
  char D.27497;
  int D.27498;
  gchar * p.38;
  gchar * ver;
  gchar * p;
  gchar * str;
  guint32 i;

  try
    {
      D.27485 = values + 4;
      *D.27485 = 0;
      D.27486 = values + 8;
      *D.27486 = 0;
      D.27487 = values + 16;
      *D.27487 = 0;
      D.27488 = values + 12;
      *D.27488 = 0;
      if (version == 0B) goto <D.27489>; else goto <D.27490>;
      <D.27489>:
      return;
      <D.27490>:
      str = mono_string_to_utf8 (version);
      ver = str;
      i = 0;
      goto <D.22536>;
      <D.22535>:
      D.27491 = i + 1;
      D.27492 = D.27491 * 4;
      D.27493 = values + D.27492;
      D.27494 = strtol (ver, &p, 10);
      D.27495 = (unsigned int) D.27494;
      *D.27493 = D.27495;
      p.37 = p;
      D.27497 = *p.37;
      D.27498 = (int) D.27497;
      switch (D.27498) <default: <D.27500>, case 42: <D.22534>, case 46: <D.22532>>
      <D.22532>:
      p.37 = p;
      p.38 = p.37 + 1;
      p = p.38;
      goto <D.22533>;
      <D.22534>:
      p.37 = p;
      p.38 = p.37 + 1;
      p = p.38;
      goto <D.22533>;
      <D.27500>:
      <D.22533>:
      ver = p;
      i = i + 1;
      <D.22536>:
      if (i <= 3) goto <D.22535>; else goto <D.22537>;
      <D.22537>:
      monoeg_g_free (str);
    }
  finally
    {
      p = {CLOBBER};
    }
}


mono_image_fill_export_table (struct MonoDomain * domain, struct MonoReflectionTypeBuilder * tb, guint32 module_index, guint32 parent_index, struct MonoDynamicImage * assembly)
{
  struct MonoType * D.27504;
  unsigned int D.27505;
  unsigned int D.27506;
  struct MonoArray * D.27507;
  char * D.27510;
  struct MonoReflectionTypeBuilder * D.27511;
  unsigned int D.27512;
  struct MonoClass * klass;
  guint32 idx;
  guint32 i;

  D.27504 = mono_reflection_type_get_handle (tb);
  klass = mono_class_from_mono_type (D.27504);
  D.27505 = tb->table_idx;
  D.27506 = D.27505 | 33554432;
  klass->type_token = D.27506;
  idx = mono_image_fill_export_table_from_class (domain, klass, module_index, parent_index, assembly);
  D.27507 = tb->subtypes;
  if (D.27507 != 0B) goto <D.27508>; else goto <D.27509>;
  <D.27508>:
  i = 0;
  goto <D.22077>;
  <D.22076>:
  D.27507 = tb->subtypes;
  D.27510 = mono_array_addr_with_size (D.27507, 4, i);
  D.27511 = MEM[(struct MonoReflectionTypeBuilder * *)D.27510];
  mono_image_fill_export_table (domain, D.27511, module_index, idx, assembly);
  i = i + 1;
  <D.22077>:
  D.27507 = tb->subtypes;
  D.27512 = mono_array_length (D.27507);
  if (D.27512 > i) goto <D.22076>; else goto <D.22078>;
  <D.22078>:
  <D.27509>:
}


mono_image_fill_export_table_from_class (struct MonoDomain * domain, struct MonoClass * klass, guint32 module_index, guint32 parent_index, struct MonoDynamicImage * assembly)
{
  unsigned int D.27513;
  unsigned int D.27514;
  guint32 D.27517;
  unsigned int D.27518;
  unsigned int D.27519;
  guint32 * D.27520;
  unsigned int D.27521;
  unsigned int D.27522;
  guint32 * D.27523;
  unsigned int D.27524;
  struct MonoClass * D.27525;
  guint32 * D.27528;
  unsigned int D.27529;
  unsigned int D.27530;
  unsigned int D.27532;
  guint32 * D.27533;
  struct MonoDynamicStream * D.27534;
  const char * D.27535;
  unsigned int D.27536;
  guint32 * D.27537;
  const char * D.27538;
  unsigned int D.27539;
  unsigned int D.27540;
  struct MonoClassExt * D.27541;
  struct GList * D.27544;
  void * D.27547;
  unsigned int D.27548;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 visib;
  guint32 res;

  D.27513 = klass->flags;
  visib = D.27513 & 7;
  D.27514 = visib & 3;
  if (D.27514 == 0) goto <D.27515>; else goto <D.27516>;
  <D.27515>:
  D.27517 = 0;
  return D.27517;
  <D.27516>:
  table = &assembly->tables[39];
  D.27518 = table->rows;
  D.27519 = D.27518 + 1;
  table->rows = D.27519;
  D.27518 = table->rows;
  alloc_table (table, D.27518);
  D.27520 = table->values;
  D.27521 = table->next_idx;
  D.27522 = D.27521 * 20;
  values = D.27520 + D.27522;
  D.27513 = klass->flags;
  *values = D.27513;
  D.27523 = values + 4;
  D.27524 = klass->type_token;
  *D.27523 = D.27524;
  D.27525 = klass->nested_in;
  if (D.27525 != 0B) goto <D.27526>; else goto <D.27527>;
  <D.27526>:
  D.27528 = values + 16;
  D.27529 = parent_index << 2;
  D.27530 = D.27529 + 2;
  *D.27528 = D.27530;
  goto <D.27531>;
  <D.27527>:
  D.27528 = values + 16;
  D.27532 = module_index << 2;
  *D.27528 = D.27532;
  <D.27531>:
  D.27533 = values + 8;
  D.27534 = &assembly->sheap;
  D.27535 = klass->name;
  D.27536 = string_heap_insert (D.27534, D.27535);
  *D.27533 = D.27536;
  D.27537 = values + 12;
  D.27534 = &assembly->sheap;
  D.27538 = klass->name_space;
  D.27539 = string_heap_insert (D.27534, D.27538);
  *D.27537 = D.27539;
  res = table->next_idx;
  D.27521 = table->next_idx;
  D.27540 = D.27521 + 1;
  table->next_idx = D.27540;
  D.27541 = klass->ext;
  if (D.27541 != 0B) goto <D.27542>; else goto <D.27543>;
  <D.27542>:
  D.27541 = klass->ext;
  D.27544 = D.27541->nested_classes;
  if (D.27544 != 0B) goto <D.27545>; else goto <D.27546>;
  <D.27545>:
  {
    struct GList * tmp;

    D.27541 = klass->ext;
    tmp = D.27541->nested_classes;
    goto <D.22064>;
    <D.22063>:
    D.27547 = tmp->data;
    D.27521 = table->next_idx;
    D.27548 = D.27521 + 4294967295;
    mono_image_fill_export_table_from_class (domain, D.27547, module_index, D.27548, assembly);
    tmp = tmp->next;
    <D.22064>:
    if (tmp != 0B) goto <D.22063>; else goto <D.22065>;
    <D.22065>:
  }
  <D.27546>:
  <D.27543>:
  D.27517 = res;
  return D.27517;
}


mono_image_fill_file_table (struct MonoDomain * domain, struct MonoReflectionModule * module, struct MonoDynamicImage * assembly)
{
  unsigned int D.27550;
  unsigned int D.27551;
  guint32 * D.27552;
  unsigned int D.27553;
  unsigned int D.27554;
  guint32 * D.27555;
  struct MonoDynamicStream * D.27556;
  struct MonoImage * D.27557;
  const char * D.27558;
  unsigned int D.27559;
  unsigned char D.27560;
  unsigned char D.27561;
  struct MonoReflectionAssemblyBuilder * D.27564;
  struct MonoString * D.27565;
  char * D.27567;
  char * b.39;
  guint32 * D.27569;
  struct MonoDynamicStream * D.27570;
  int b.40;
  int blob_size.41;
  int D.27573;
  unsigned int D.27574;
  unsigned int D.27575;
  unsigned int D.27576;
  struct MonoDynamicTable * table;
  guint32 * values;
  char blob_size[6];
  guchar hash[20];
  char * b;
  char * dir;
  char * path;

  try
    {
      b = &blob_size;
      table = &assembly->tables[38];
      D.27550 = table->rows;
      D.27551 = D.27550 + 1;
      table->rows = D.27551;
      D.27550 = table->rows;
      alloc_table (table, D.27550);
      D.27552 = table->values;
      D.27553 = table->next_idx;
      D.27554 = D.27553 * 12;
      values = D.27552 + D.27554;
      *values = 0;
      D.27555 = values + 4;
      D.27556 = &assembly->sheap;
      D.27557 = module->image;
      D.27558 = D.27557->module_name;
      D.27559 = string_heap_insert (D.27556, D.27558);
      *D.27555 = D.27559;
      D.27557 = module->image;
      D.27560 = BIT_FIELD_REF <*D.27557, 8, 128>;
      D.27561 = D.27560 & 8;
      if (D.27561 != 0) goto <D.27562>; else goto <D.27563>;
      <D.27562>:
      D.27564 = MEM[(struct MonoReflectionModuleBuilder *)module].assemblyb;
      D.27565 = D.27564->dir;
      dir = mono_string_to_utf8 (D.27565);
      D.27557 = module->image;
      D.27558 = D.27557->module_name;
      path = monoeg_g_strdup_printf ("%s%c%s", dir, 47, D.27558);
      goto <D.27566>;
      <D.27563>:
      dir = 0B;
      D.27557 = module->image;
      D.27567 = D.27557->name;
      path = monoeg_strdup (D.27567);
      <D.27566>:
      mono_sha1_get_digest_from_file (path, &hash);
      monoeg_g_free (dir);
      monoeg_g_free (path);
      b.39 = b;
      mono_metadata_encode_value (20, b.39, &b);
      D.27569 = values + 8;
      D.27570 = &assembly->blob;
      b.39 = b;
      b.40 = (int) b.39;
      blob_size.41 = (int) &blob_size;
      D.27573 = b.40 - blob_size.41;
      D.27574 = (unsigned int) D.27573;
      D.27575 = mono_image_add_stream_data (D.27570, &blob_size, D.27574);
      *D.27569 = D.27575;
      D.27570 = &assembly->blob;
      mono_image_add_stream_data (D.27570, &hash, 20);
      D.27553 = table->next_idx;
      D.27576 = D.27553 + 1;
      table->next_idx = D.27576;
    }
  finally
    {
      blob_size = {CLOBBER};
      hash = {CLOBBER};
      b = {CLOBBER};
    }
}


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

  if (str != 0B) goto <D.27577>; else goto <D.27578>;
  <D.27577>:
  D.27579 = __strdup (str);
  return D.27579;
  <D.27578>:
  D.27579 = 0B;
  return D.27579;
}


mono_image_fill_export_table_from_module (struct MonoDomain * domain, struct MonoReflectionModule * module, guint32 module_index, struct MonoDynamicImage * assembly)
{
  unsigned int D.27581;
  unsigned int D.27582;
  unsigned int D.27583;
  unsigned int D.27584;
  <unnamed-unsigned:24> D.27587;
  unsigned int D.27588;
  struct MonoImage * image;
  struct MonoTableInfo * t;
  guint32 i;

  image = module->image;
  t = &image->tables[2];
  i = 0;
  goto <D.22090>;
  <D.22089>:
  {
    struct MonoClass * klass;

    D.27581 = i + 1;
    D.27582 = D.27581 | 33554432;
    klass = mono_class_get (image, D.27582);
    D.27583 = klass->flags;
    D.27584 = D.27583 & 1;
    if (D.27584 != 0) goto <D.27585>; else goto <D.27586>;
    <D.27585>:
    mono_image_fill_export_table_from_class (domain, klass, module_index, 0, assembly);
    <D.27586>:
  }
  i = i + 1;
  <D.22090>:
  D.27587 = t->rows;
  D.27588 = (unsigned int) D.27587;
  if (D.27588 > i) goto <D.22089>; else goto <D.22091>;
  <D.22091>:
}


mono_image_fill_export_table_from_type_forwarders (struct MonoReflectionAssemblyBuilder * assemblyb, struct MonoDynamicImage * assembly)
{
  struct MonoArray * D.27589;
  unsigned int i.42;
  char * D.27593;
  _Bool D.27596;
  long int D.27597;
  long int D.27598;
  unsigned int D.27601;
  struct MonoClass * klass;
  int i;

  D.27589 = assemblyb->type_forwarders;
  if (D.27589 == 0B) goto <D.27590>; else goto <D.27591>;
  <D.27590>:
  return;
  <D.27591>:
  i = 0;
  goto <D.22120>;
  <D.22119>:
  {
    struct MonoReflectionType * t;
    struct MonoType * type;

    D.27589 = assemblyb->type_forwarders;
    i.42 = (unsigned int) i;
    D.27593 = mono_array_addr_with_size (D.27589, 4, i.42);
    t = MEM[(struct MonoReflectionType * *)D.27593];
    if (t == 0B) goto <D.27594>; else goto <D.27595>;
    <D.27594>:
    // predicted unlikely by continue predictor.
    goto <D.22118>;
    <D.27595>:
    type = mono_reflection_type_get_handle (t);
    D.27596 = type == 0B;
    D.27597 = (long int) D.27596;
    D.27598 = __builtin_expect (D.27597, 0);
    if (D.27598 != 0) goto <D.27599>; else goto <D.27600>;
    <D.27599>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 3863, "type");
    <D.27600>:
    klass = mono_class_from_mono_type (type);
    add_exported_type (assemblyb, assembly, klass, 0);
  }
  <D.22118>:
  i = i + 1;
  <D.22120>:
  i.42 = (unsigned int) i;
  D.27589 = assemblyb->type_forwarders;
  D.27601 = mono_array_length (D.27589);
  if (i.42 < D.27601) goto <D.22119>; else goto <D.22121>;
  <D.22121>:
}


add_exported_type (struct MonoReflectionAssemblyBuilder * assemblyb, struct MonoDynamicImage * assembly, struct MonoClass * klass, guint32 parent_index)
{
  struct MonoClass * D.27603;
  unsigned int D.27606;
  struct MonoImage * D.27608;
  unsigned int D.27609;
  _Bool D.27610;
  long int D.27611;
  long int D.27612;
  unsigned int D.27615;
  unsigned int D.27616;
  unsigned int D.27617;
  guint32 * D.27618;
  unsigned int D.27619;
  guint32 iftmp.43;
  guint32 * D.27624;
  guint32 * D.27625;
  guint32 * D.27626;
  struct MonoDynamicStream * D.27627;
  const char * D.27628;
  unsigned int D.27629;
  guint32 * D.27630;
  const char * D.27631;
  unsigned int D.27632;
  unsigned int D.27633;
  unsigned int D.27634;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 scope;
  guint32 scope_idx;
  guint32 impl;
  guint32 current_idx;
  gboolean forwarder;
  void * iter;
  struct MonoClass * nested;

  try
    {
      forwarder = 1;
      iter = 0B;
      D.27603 = klass->nested_in;
      if (D.27603 != 0B) goto <D.27604>; else goto <D.27605>;
      <D.27604>:
      D.27606 = parent_index << 2;
      impl = D.27606 + 2;
      forwarder = 0;
      goto <D.27607>;
      <D.27605>:
      D.27608 = klass->image;
      scope = resolution_scope_from_image (assembly, D.27608);
      D.27609 = scope & 3;
      D.27610 = D.27609 != 2;
      D.27611 = (long int) D.27610;
      D.27612 = __builtin_expect (D.27611, 0);
      if (D.27612 != 0) goto <D.27613>; else goto <D.27614>;
      <D.27613>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 3823, "(scope & MONO_RESOLTION_SCOPE_MASK) == MONO_RESOLTION_SCOPE_ASSEMBLYREF");
      <D.27614>:
      scope_idx = scope >> 2;
      D.27615 = scope_idx << 2;
      impl = D.27615 + 1;
      <D.27607>:
      table = &assembly->tables[39];
      D.27616 = table->rows;
      D.27617 = D.27616 + 1;
      table->rows = D.27617;
      D.27616 = table->rows;
      alloc_table (table, D.27616);
      current_idx = table->next_idx;
      D.27618 = table->values;
      D.27619 = current_idx * 20;
      values = D.27618 + D.27619;
      if (forwarder != 0) goto <D.27621>; else goto <D.27622>;
      <D.27621>:
      iftmp.43 = 2097152;
      goto <D.27623>;
      <D.27622>:
      iftmp.43 = 0;
      <D.27623>:
      *values = iftmp.43;
      D.27624 = values + 4;
      *D.27624 = 0;
      D.27625 = values + 16;
      *D.27625 = impl;
      D.27626 = values + 8;
      D.27627 = &assembly->sheap;
      D.27628 = klass->name;
      D.27629 = string_heap_insert (D.27627, D.27628);
      *D.27626 = D.27629;
      D.27630 = values + 12;
      D.27627 = &assembly->sheap;
      D.27631 = klass->name_space;
      D.27632 = string_heap_insert (D.27627, D.27631);
      *D.27630 = D.27632;
      D.27633 = table->next_idx;
      D.27634 = D.27633 + 1;
      table->next_idx = D.27634;
      goto <D.22108>;
      <D.22107>:
      add_exported_type (assemblyb, assembly, nested, current_idx);
      <D.22108>:
      nested = mono_class_get_nested_types (klass, &iter);
      if (nested != 0B) goto <D.22107>; else goto <D.22109>;
      <D.22109>:
    }
  finally
    {
      iter = {CLOBBER};
    }
}


resolution_scope_from_image (struct MonoDynamicImage * assembly, struct MonoImage * image)
{
  struct GHashTable * D.27635;
  void * D.27636;
  guint32 D.27639;
  struct MonoAssembly * D.27640;
  unsigned char D.27641;
  struct MonoAssembly * D.27644;
  unsigned int D.27647;
  unsigned int token.44;
  unsigned int D.27649;
  unsigned int D.27650;
  unsigned int D.27651;
  guint32 * D.27652;
  unsigned int D.27653;
  struct MonoDynamicStream * D.27654;
  const char * D.27655;
  unsigned int D.27656;
  void * token.45;
  struct MonoTableInfo * D.27661;
  unsigned int token.46;
  unsigned int D.27663;
  unsigned int D.27664;
  guint32 * D.27665;
  const char * D.27666;
  unsigned int D.27667;
  unsigned int D.27668;
  guint32 * D.27669;
  unsigned int D.27670;
  guint32 * D.27671;
  unsigned int D.27672;
  guint32 * D.27673;
  unsigned int D.27674;
  guint32 * D.27675;
  guint32 * D.27676;
  guint32 * D.27677;
  int D.21544;
  int iftmp.47;
  int D.21540;
  const char[1] * D.27681;
  unsigned char D.27682;
  int D.27683;
  unsigned char D.27684;
  int D.27685;
  _Bool D.27686;
  _Bool D.27687;
  _Bool D.27688;
  const unsigned char * D.27691;
  unsigned char D.27692;
  int D.27693;
  const unsigned char * D.27694;
  unsigned char D.27695;
  int D.27696;
  _Bool D.27697;
  _Bool D.27698;
  const unsigned char * D.27701;
  unsigned char D.27702;
  int D.27703;
  const unsigned char * D.27704;
  unsigned char D.27705;
  int D.27706;
  _Bool D.27707;
  _Bool D.27708;
  const unsigned char * D.27711;
  unsigned char D.27712;
  int D.27713;
  const unsigned char * D.27714;
  unsigned char D.27715;
  int D.27716;
  const char * D.27718;
  unsigned char D.27719;
  int D.27720;
  unsigned int D.27723;
  unsigned int publen.48;
  guint32 * D.27727;
  struct MonoDynamicStream * D.27728;
  unsigned int D.27729;
  struct MonoDynamicTable * table;
  guint32 token;
  guint32 * values;
  guint32 cols[9];
  const char * pubkey;
  guint32 publen;

  try
    {
      D.27635 = assembly->handleref;
      D.27636 = monoeg_g_hash_table_lookup (D.27635, image);
      token = (guint32) D.27636;
      if (token != 0) goto <D.27637>; else goto <D.27638>;
      <D.27637>:
      D.27639 = token;
      return D.27639;
      <D.27638>:
      D.27640 = image->assembly;
      D.27641 = D.27640->dynamic;
      if (D.27641 != 0) goto <D.27642>; else goto <D.27643>;
      <D.27642>:
      D.27640 = image->assembly;
      D.27644 = assembly->image.assembly;
      if (D.27640 == D.27644) goto <D.27645>; else goto <D.27646>;
      <D.27645>:
      table = &assembly->tables[26];
      D.27647 = table->next_idx;
      token.44 = D.27647;
      D.27649 = token.44 + 1;
      table->next_idx = D.27649;
      token = token.44;
      D.27650 = table->rows;
      D.27651 = D.27650 + 1;
      table->rows = D.27651;
      D.27650 = table->rows;
      alloc_table (table, D.27650);
      D.27652 = table->values;
      D.27653 = token * 4;
      values = D.27652 + D.27653;
      D.27654 = &assembly->sheap;
      D.27655 = image->module_name;
      D.27656 = string_heap_insert (D.27654, D.27655);
      *values = D.27656;
      token = token << 2;
      token = token | 1;
      D.27635 = assembly->handleref;
      token.45 = (void *) token;
      monoeg_g_hash_table_insert_replace (D.27635, image, token.45, 0);
      D.27639 = token;
      return D.27639;
      <D.27646>:
      <D.27643>:
      D.27640 = image->assembly;
      D.27641 = D.27640->dynamic;
      if (D.27641 != 0) goto <D.27658>; else goto <D.27659>;
      <D.27658>:
      memset (&cols, 0, 36);
      goto <D.27660>;
      <D.27659>:
      D.27640 = image->assembly;
      image = D.27640->image;
      D.27661 = &image->tables[32];
      mono_metadata_decode_row (D.27661, 0, &cols, 9);
      <D.27660>:
      table = &assembly->tables[35];
      D.27647 = table->next_idx;
      token.46 = D.27647;
      D.27663 = token.46 + 1;
      table->next_idx = D.27663;
      token = token.46;
      D.27650 = table->rows;
      D.27651 = D.27650 + 1;
      table->rows = D.27651;
      D.27650 = table->rows;
      alloc_table (table, D.27650);
      D.27652 = table->values;
      D.27664 = token * 36;
      values = D.27652 + D.27664;
      D.27665 = values + 24;
      D.27654 = &assembly->sheap;
      D.27666 = image->assembly_name;
      D.27667 = string_heap_insert (D.27654, D.27666);
      *D.27665 = D.27667;
      D.27668 = cols[1];
      *values = D.27668;
      D.27669 = values + 4;
      D.27670 = cols[2];
      *D.27669 = D.27670;
      D.27671 = values + 8;
      D.27672 = cols[3];
      *D.27671 = D.27672;
      D.27673 = values + 12;
      D.27674 = cols[4];
      *D.27673 = D.27674;
      D.27675 = values + 16;
      *D.27675 = 0;
      D.27676 = values + 28;
      *D.27676 = 0;
      D.27677 = values + 32;
      *D.27677 = 0;
      {
        size_t __s1_len;
        size_t __s2_len;

        __s1_len = 0;
        if (__s1_len <= 3) goto <D.27679>; else goto <D.27680>;
        <D.27679>:
        {
          const unsigned char * __s2;
          int __result;

          D.27640 = image->assembly;
          __s2 = D.27640->aname.culture;
          D.27681 = "";
          D.27682 = MEM[(const unsigned char *)D.27681];
          D.27683 = (int) D.27682;
          D.27684 = *__s2;
          D.27685 = (int) D.27684;
          __result = D.27683 - D.27685;
          {
            D.27686 = __s1_len != 0;
            D.27687 = __result == 0;
            D.27688 = D.27686 & D.27687;
            if (D.27688 != 0) goto <D.27689>; else goto <D.27690>;
            <D.27689>:
            D.27691 = &MEM[(void *)"" + 1B];
            D.27692 = *D.27691;
            D.27693 = (int) D.27692;
            D.27694 = __s2 + 1;
            D.27695 = *D.27694;
            D.27696 = (int) D.27695;
            __result = D.27693 - D.27696;
            D.27697 = __s1_len > 1;
            D.27687 = __result == 0;
            D.27698 = D.27697 & D.27687;
            if (D.27698 != 0) goto <D.27699>; else goto <D.27700>;
            <D.27699>:
            D.27701 = &MEM[(void *)"" + 2B];
            D.27702 = *D.27701;
            D.27703 = (int) D.27702;
            D.27704 = __s2 + 2;
            D.27705 = *D.27704;
            D.27706 = (int) D.27705;
            __result = D.27703 - D.27706;
            D.27707 = __s1_len > 2;
            D.27687 = __result == 0;
            D.27708 = D.27707 & D.27687;
            if (D.27708 != 0) goto <D.27709>; else goto <D.27710>;
            <D.27709>:
            D.27711 = &MEM[(void *)"" + 3B];
            D.27712 = *D.27711;
            D.27713 = (int) D.27712;
            D.27714 = __s2 + 3;
            D.27715 = *D.27714;
            D.27716 = (int) D.27715;
            __result = D.27713 - D.27716;
            <D.27710>:
            <D.27700>:
            <D.27690>:
          }
          D.21540 = __result;
        }
        iftmp.47 = D.21540;
        goto <D.27717>;
        <D.27680>:
        D.27640 = image->assembly;
        D.27718 = D.27640->aname.culture;
        D.27719 = MEM[(const unsigned char * {ref-all})D.27718];
        D.27720 = (int) D.27719;
        iftmp.47 = -D.27720;
        <D.27717>:
        D.21544 = iftmp.47;
      }
      if (D.21544 != 0) goto <D.27721>; else goto <D.27722>;
      <D.27721>:
      D.27676 = values + 28;
      D.27654 = &assembly->sheap;
      D.27640 = image->assembly;
      D.27718 = D.27640->aname.culture;
      D.27723 = string_heap_insert (D.27654, D.27718);
      *D.27676 = D.27723;
      <D.27722>:
      pubkey = mono_image_get_public_key (image, &publen);
      if (pubkey != 0B) goto <D.27724>; else goto <D.27725>;
      <D.27724>:
      {
        guchar pubtoken[9];

        try
          {
            pubtoken[0] = 8;
            publen.48 = publen;
            mono_digest_get_public_token (&MEM[(void *)&pubtoken + 1B], pubkey, publen.48);
            D.27727 = values + 20;
            D.27728 = &assembly->blob;
            D.27729 = mono_image_add_stream_data (D.27728, &pubtoken, 9);
            *D.27727 = D.27729;
          }
        finally
          {
            pubtoken = {CLOBBER};
          }
      }
      goto <D.27730>;
      <D.27725>:
      D.27727 = values + 20;
      *D.27727 = 0;
      <D.27730>:
      token = token << 2;
      token = token | 2;
      D.27635 = assembly->handleref;
      token.45 = (void *) token;
      monoeg_g_hash_table_insert_replace (D.27635, image, token.45, 0);
      D.27639 = token;
      return D.27639;
    }
  finally
    {
      cols = {CLOBBER};
      publen = {CLOBBER};
    }
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.27735;
  int D.27740;
  void * D.27742;
  unsigned int D.27743;

  D.27735 = __builtin_constant_p (__len);
  if (D.27735 != 0) goto <D.27736>; else goto <D.27737>;
  <D.27736>:
  if (__len == 0) goto <D.27738>; else goto <D.27739>;
  <D.27738>:
  D.27740 = __builtin_constant_p (__ch);
  if (D.27740 == 0) goto <D.27733>; else goto <D.27741>;
  <D.27741>:
  if (__ch != 0) goto <D.27733>; else goto <D.27734>;
  <D.27733>:
  __warn_memset_zero_len ();
  D.27742 = __dest;
  return D.27742;
  <D.27734>:
  <D.27739>:
  <D.27737>:
  D.27743 = __builtin_object_size (__dest, 0);
  D.27742 = __builtin___memset_chk (__dest, __ch, __len, D.27743);
  return D.27742;
}


assembly_add_resource_manifest (struct MonoReflectionModuleBuilder * mb, struct MonoDynamicImage * assembly, struct MonoReflectionResource * rsrc, guint32 implementation)
{
  unsigned int D.27745;
  unsigned int D.27746;
  guint32 * D.27747;
  unsigned int D.27748;
  unsigned int D.27749;
  unsigned int D.27750;
  guint32 * D.27751;
  unsigned int D.27752;
  guint32 * D.27753;
  struct MonoDynamicStream * D.27754;
  struct MonoString * D.27755;
  unsigned int D.27756;
  guint32 * D.27757;
  unsigned int D.27758;
  struct MonoDynamicTable * table;
  guint32 * values;

  table = &assembly->tables[40];
  D.27745 = table->rows;
  D.27746 = D.27745 + 1;
  table->rows = D.27746;
  D.27745 = table->rows;
  alloc_table (table, D.27745);
  D.27747 = table->values;
  D.27748 = table->next_idx;
  D.27749 = D.27748 * 16;
  values = D.27747 + D.27749;
  D.27750 = rsrc->offset;
  *values = D.27750;
  D.27751 = values + 4;
  D.27752 = rsrc->attrs;
  *D.27751 = D.27752;
  D.27753 = values + 8;
  D.27754 = &assembly->sheap;
  D.27755 = rsrc->name;
  D.27756 = string_heap_insert_mstring (D.27754, D.27755);
  *D.27753 = D.27756;
  D.27757 = values + 12;
  *D.27757 = implementation;
  D.27748 = table->next_idx;
  D.27758 = D.27748 + 1;
  table->next_idx = D.27758;
}


string_heap_insert (struct MonoDynamicStream * sh, const char * str)
{
  struct GHashTable * D.27759;
  int D.27760;
  guint32 D.27763;
  void * oldval.49;
  unsigned int D.27765;
  unsigned int D.27766;
  int D.27767;
  gchar * D.27768;
  void * idx.50;
  char * D.27770;
  char * D.27771;
  unsigned int D.27772;
  unsigned int D.27773;
  guint32 idx;
  guint32 len;
  void * oldkey;
  void * oldval;

  try
    {
      D.27759 = sh->hash;
      D.27760 = monoeg_g_hash_table_lookup_extended (D.27759, str, &oldkey, &oldval);
      if (D.27760 != 0) goto <D.27761>; else goto <D.27762>;
      <D.27761>:
      oldval.49 = oldval;
      D.27763 = (guint32) oldval.49;
      return D.27763;
      <D.27762>:
      D.27765 = strlen (str);
      len = D.27765 + 1;
      idx = sh->index;
      D.27766 = idx + len;
      D.27767 = (int) D.27766;
      make_room_in_stream (sh, D.27767);
      D.27759 = sh->hash;
      D.27768 = monoeg_strdup (str);
      idx.50 = (void *) idx;
      monoeg_g_hash_table_insert_replace (D.27759, D.27768, idx.50, 0);
      D.27770 = sh->data;
      D.27771 = D.27770 + idx;
      memcpy (D.27771, str, len);
      D.27772 = sh->index;
      D.27773 = D.27772 + len;
      sh->index = D.27773;
      D.27763 = idx;
      return D.27763;
    }
  finally
    {
      oldkey = {CLOBBER};
      oldval = {CLOBBER};
    }
}


mono_image_get_method_info (struct MonoReflectionMethodBuilder * mb, struct MonoDynamicImage * assembly)
{
  guint32 * D.27776;
  unsigned int D.27777;
  struct MonoString * D.27778;
  int iftmp.51;
  unsigned int D.27782;
  unsigned int D.27785;
  unsigned int D.27786;
  unsigned int D.27788;
  unsigned int D.27789;
  unsigned int D.27790;
  guint32 * D.27791;
  unsigned int D.27792;
  unsigned int D.27793;
  unsigned int D.27794;
  unsigned int ncharset.52;
  unsigned int D.27796;
  unsigned int extra_flags.53;
  unsigned int D.27798;
  guint32 * D.27799;
  unsigned int D.27800;
  unsigned int D.27801;
  unsigned int D.27802;
  struct MonoString * D.27803;
  guint32 * D.27806;
  struct MonoDynamicStream * D.27807;
  unsigned int D.27808;
  struct MonoString * D.27810;
  unsigned int D.27811;
  guint32 * D.27812;
  unsigned int D.27813;
  unsigned int D.27814;
  unsigned int D.27817;
  guint32 * D.27818;
  struct MonoArray * D.27819;
  unsigned int D.27822;
  unsigned int D.27823;
  unsigned int i.54;
  char * D.27825;
  void * D.27826;
  unsigned int D.27827;
  struct MonoDynamicTable * table;
  guint32 * values;
  struct ReflectionMethodBuilder rmb;
  int i;

  try
    {
      reflection_methodbuilder_from_method_builder (&rmb, mb);
      mono_image_basic_method (&rmb, assembly);
      D.27776 = rmb.table_idx;
      D.27777 = *D.27776;
      mb->table_idx = D.27777;
      D.27778 = mb->dll;
      if (D.27778 != 0B) goto <D.27779>; else goto <D.27780>;
      <D.27779>:
      {
        guint32 moduleref;
        int ncharset;
        int extra_flags;

        D.27782 = mb->charset;
        if (D.27782 != 0) goto <D.27783>; else goto <D.27784>;
        <D.27783>:
        D.27782 = mb->charset;
        D.27785 = D.27782 + 2147483647;
        D.27786 = D.27785 * 2;
        iftmp.51 = (int) D.27786;
        goto <D.27787>;
        <D.27784>:
        iftmp.51 = 0;
        <D.27787>:
        ncharset = iftmp.51;
        D.27788 = mb->extra_flags;
        extra_flags = (int) D.27788;
        table = &assembly->tables[28];
        D.27789 = table->rows;
        D.27790 = D.27789 + 1;
        table->rows = D.27790;
        D.27789 = table->rows;
        alloc_table (table, D.27789);
        D.27791 = table->values;
        D.27789 = table->rows;
        D.27792 = D.27789 * 16;
        values = D.27791 + D.27792;
        D.27793 = mb->native_cc;
        D.27794 = D.27793 << 8;
        ncharset.52 = (unsigned int) ncharset;
        D.27796 = D.27794 | ncharset.52;
        extra_flags.53 = (unsigned int) extra_flags;
        D.27798 = D.27796 | extra_flags.53;
        *values = D.27798;
        D.27799 = values + 4;
        D.27800 = mb->table_idx;
        D.27801 = D.27800 << 1;
        D.27802 = D.27801 | 1;
        *D.27799 = D.27802;
        D.27803 = mb->dllentry;
        if (D.27803 != 0B) goto <D.27804>; else goto <D.27805>;
        <D.27804>:
        D.27806 = values + 8;
        D.27807 = &assembly->sheap;
        D.27803 = mb->dllentry;
        D.27808 = string_heap_insert_mstring (D.27807, D.27803);
        *D.27806 = D.27808;
        goto <D.27809>;
        <D.27805>:
        D.27806 = values + 8;
        D.27807 = &assembly->sheap;
        D.27810 = mb->name;
        D.27811 = string_heap_insert_mstring (D.27807, D.27810);
        *D.27806 = D.27811;
        <D.27809>:
        D.27807 = &assembly->sheap;
        D.27778 = mb->dll;
        moduleref = string_heap_insert_mstring (D.27807, D.27778);
        D.27812 = values + 12;
        D.27813 = find_index_in_table (assembly, 26, 0, moduleref);
        *D.27812 = D.27813;
        D.27814 = *D.27812;
        if (D.27814 == 0) goto <D.27815>; else goto <D.27816>;
        <D.27815>:
        table = &assembly->tables[26];
        D.27789 = table->rows;
        D.27790 = D.27789 + 1;
        table->rows = D.27790;
        D.27789 = table->rows;
        alloc_table (table, D.27789);
        D.27791 = table->values;
        D.27789 = table->rows;
        D.27817 = D.27789 * 4;
        D.27818 = D.27791 + D.27817;
        *D.27818 = moduleref;
        D.27812 = values + 12;
        D.27789 = table->rows;
        *D.27812 = D.27789;
        <D.27816>:
      }
      <D.27780>:
      D.27819 = mb->generic_params;
      if (D.27819 != 0B) goto <D.27820>; else goto <D.27821>;
      <D.27820>:
      table = &assembly->tables[42];
      D.27819 = mb->generic_params;
      D.27822 = mono_array_length (D.27819);
      D.27789 = table->rows;
      D.27823 = D.27789 + D.27822;
      table->rows = D.27823;
      D.27789 = table->rows;
      alloc_table (table, D.27789);
      i = 0;
      goto <D.21346>;
      <D.21345>:
      {
        guint32 owner;

        D.27800 = mb->table_idx;
        D.27801 = D.27800 << 1;
        owner = D.27801 | 1;
        D.27819 = mb->generic_params;
        i.54 = (unsigned int) i;
        D.27825 = mono_array_addr_with_size (D.27819, 4, i.54);
        D.27826 = MEM[(void * *)D.27825];
        mono_image_get_generic_param_info (D.27826, owner, assembly);
      }
      i = i + 1;
      <D.21346>:
      i.54 = (unsigned int) i;
      D.27819 = mb->generic_params;
      D.27827 = mono_array_length (D.27819);
      if (i.54 < D.27827) goto <D.21345>; else goto <D.21347>;
      <D.21347>:
      <D.27821>:
    }
  finally
    {
      rmb = {CLOBBER};
    }
}


reflection_methodbuilder_from_method_builder (struct ReflectionMethodBuilder * rmb, struct MonoReflectionMethodBuilder * mb)
{
  struct MonoReflectionILGen * D.27828;
  struct MonoObject * D.27829;
  struct MonoReflectionType * D.27830;
  struct MonoArray * D.27831;
  struct MonoArray * D.27832;
  struct MonoGenericContainer * D.27833;
  struct MonoArray * D.27834;
  unsigned int D.27835;
  unsigned int D.27836;
  unsigned int D.27837;
  struct MonoArray * D.27838;
  struct MonoObject * D.27839;
  struct MonoString * D.27840;
  guint32 * D.27841;
  unsigned char D.27842;
  struct MonoArray * D.27843;
  struct MonoArray * D.27844;
  struct MonoArray * D.27845;
  struct MonoArray * D.27846;
  struct MonoArray * D.27847;
  struct MonoMethod * D.27848;
  struct MonoString * D.27849;
  unsigned int D.27852;
  int D.27853;
  unsigned int D.27854;
  int D.27855;
  unsigned int D.27856;
  int D.27857;
  struct MonoString * D.27858;

  memset (rmb, 0, 112);
  D.27828 = mb->ilgen;
  rmb->ilgen = D.27828;
  D.27829 = mb->rtype;
  D.27830 = mono_reflection_type_resolve_user_types (D.27829);
  rmb->rtype = D.27830;
  D.27831 = mb->parameters;
  rmb->parameters = D.27831;
  D.27832 = mb->generic_params;
  rmb->generic_params = D.27832;
  D.27833 = mb->generic_container;
  rmb->generic_container = D.27833;
  rmb->opt_types = 0B;
  D.27834 = mb->pinfo;
  rmb->pinfo = D.27834;
  D.27835 = mb->attrs;
  rmb->attrs = D.27835;
  D.27836 = mb->iattrs;
  rmb->iattrs = D.27836;
  D.27837 = mb->call_conv;
  rmb->call_conv = D.27837;
  D.27838 = mb->code;
  rmb->code = D.27838;
  D.27839 = mb->type;
  rmb->type = D.27839;
  D.27840 = mb->name;
  rmb->name = D.27840;
  D.27841 = &mb->table_idx;
  rmb->table_idx = D.27841;
  D.27842 = mb->init_locals;
  rmb->init_locals = D.27842;
  rmb->skip_visibility = 0;
  D.27843 = mb->return_modreq;
  rmb->return_modreq = D.27843;
  D.27844 = mb->return_modopt;
  rmb->return_modopt = D.27844;
  D.27845 = mb->param_modreq;
  rmb->param_modreq = D.27845;
  D.27846 = mb->param_modopt;
  rmb->param_modopt = D.27846;
  D.27847 = mb->permissions;
  rmb->permissions = D.27847;
  D.27848 = mb->mhandle;
  rmb->mhandle = D.27848;
  rmb->nrefs = 0;
  rmb->refs = 0B;
  D.27849 = mb->dll;
  if (D.27849 != 0B) goto <D.27850>; else goto <D.27851>;
  <D.27850>:
  D.27852 = mb->charset;
  D.27853 = (int) D.27852;
  rmb->charset = D.27853;
  D.27854 = mb->extra_flags;
  D.27855 = (int) D.27854;
  rmb->extra_flags = D.27855;
  D.27856 = mb->native_cc;
  D.27857 = (int) D.27856;
  rmb->native_cc = D.27857;
  D.27858 = mb->dllentry;
  rmb->dllentry = D.27858;
  D.27849 = mb->dll;
  rmb->dll = D.27849;
  <D.27851>:
}


mono_reflection_type_resolve_user_types (struct MonoReflectionType * type)
{
  struct MonoType * D.27862;
  struct MonoReflectionType * D.27863;
  int D.27864;
  int D.27867;
  struct MonoException * D.27870;

  if (type == 0B) goto <D.27859>; else goto <D.27861>;
  <D.27861>:
  D.27862 = type->type;
  if (D.27862 != 0B) goto <D.27859>; else goto <D.27860>;
  <D.27859>:
  D.27863 = type;
  return D.27863;
  <D.27860>:
  D.27864 = is_usertype (type);
  if (D.27864 != 0) goto <D.27865>; else goto <D.27866>;
  <D.27865>:
  type = mono_reflection_type_get_underlying_system_type (type);
  D.27867 = is_usertype (type);
  if (D.27867 != 0) goto <D.27868>; else goto <D.27869>;
  <D.27868>:
  D.27870 = mono_get_exception_not_supported ("User defined subclasses of System.Type are not yet supported22");
  mono_raise_exception (D.27870);
  <D.27869>:
  <D.27866>:
  D.27863 = type;
  return D.27863;
}


mono_reflection_type_get_underlying_system_type (struct MonoReflectionType * t)
{
  struct MonoMethod * method_get_underlying_system_type.55;
  struct MonoClass * D.27875;
  struct MonoMethod * method_get_underlying_system_type.56;
  struct MonoReflectionType * D.27877;
  static struct MonoMethod * method_get_underlying_system_type = 0B;
  struct MonoMethod * usertype_method;

  method_get_underlying_system_type.55 = method_get_underlying_system_type;
  if (method_get_underlying_system_type.55 == 0B) goto <D.27873>; else goto <D.27874>;
  <D.27873>:
  D.27875 = mono_defaults.systemtype_class;
  method_get_underlying_system_type.56 = mono_class_get_method_from_name (D.27875, "get_UnderlyingSystemType", 0);
  method_get_underlying_system_type = method_get_underlying_system_type.56;
  <D.27874>:
  method_get_underlying_system_type.55 = method_get_underlying_system_type;
  usertype_method = mono_object_get_virtual_method (t, method_get_underlying_system_type.55);
  D.27877 = mono_runtime_invoke (usertype_method, t, 0B, 0B);
  return D.27877;
}


is_usertype (struct MonoReflectionType * ref)
{
  struct MonoVTable * D.27879;
  gboolean D.27880;
  int iftmp.57;
  struct MonoImage * D.27885;
  struct MonoImage * D.27886;
  int D.25138;
  int iftmp.58;
  int D.25134;
  const char[14] * D.27891;
  unsigned char D.27892;
  int D.27893;
  unsigned char D.27894;
  int D.27895;
  _Bool D.27896;
  _Bool D.27897;
  _Bool D.27898;
  const unsigned char * D.27901;
  unsigned char D.27902;
  int D.27903;
  const unsigned char * D.27904;
  unsigned char D.27905;
  int D.27906;
  _Bool D.27907;
  _Bool D.27908;
  const unsigned char * D.27911;
  unsigned char D.27912;
  int D.27913;
  const unsigned char * D.27914;
  unsigned char D.27915;
  int D.27916;
  _Bool D.27917;
  _Bool D.27918;
  const unsigned char * D.27921;
  unsigned char D.27922;
  int D.27923;
  const unsigned char * D.27924;
  unsigned char D.27925;
  int D.27926;
  const char * D.27928;
  struct MonoClass * class;

  D.27879 = MEM[(struct MonoObject *)ref].vtable;
  class = D.27879->klass;
  D.27885 = class->image;
  D.27886 = mono_defaults.corlib;
  if (D.27885 != D.27886) goto <D.27882>; else goto <D.27887>;
  <D.27887>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 13;
    if (__s1_len <= 3) goto <D.27889>; else goto <D.27890>;
    <D.27889>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.27891 = "TypeDelegator";
      D.27892 = MEM[(const unsigned char *)D.27891];
      D.27893 = (int) D.27892;
      D.27894 = *__s2;
      D.27895 = (int) D.27894;
      __result = D.27893 - D.27895;
      {
        D.27896 = __s1_len != 0;
        D.27897 = __result == 0;
        D.27898 = D.27896 & D.27897;
        if (D.27898 != 0) goto <D.27899>; else goto <D.27900>;
        <D.27899>:
        D.27901 = &MEM[(void *)"TypeDelegator" + 1B];
        D.27902 = *D.27901;
        D.27903 = (int) D.27902;
        D.27904 = __s2 + 1;
        D.27905 = *D.27904;
        D.27906 = (int) D.27905;
        __result = D.27903 - D.27906;
        D.27907 = __s1_len > 1;
        D.27897 = __result == 0;
        D.27908 = D.27907 & D.27897;
        if (D.27908 != 0) goto <D.27909>; else goto <D.27910>;
        <D.27909>:
        D.27911 = &MEM[(void *)"TypeDelegator" + 2B];
        D.27912 = *D.27911;
        D.27913 = (int) D.27912;
        D.27914 = __s2 + 2;
        D.27915 = *D.27914;
        D.27916 = (int) D.27915;
        __result = D.27913 - D.27916;
        D.27917 = __s1_len > 2;
        D.27897 = __result == 0;
        D.27918 = D.27917 & D.27897;
        if (D.27918 != 0) goto <D.27919>; else goto <D.27920>;
        <D.27919>:
        D.27921 = &MEM[(void *)"TypeDelegator" + 3B];
        D.27922 = *D.27921;
        D.27923 = (int) D.27922;
        D.27924 = __s2 + 3;
        D.27925 = *D.27924;
        D.27926 = (int) D.27925;
        __result = D.27923 - D.27926;
        <D.27920>:
        <D.27910>:
        <D.27900>:
      }
      D.25134 = __result;
    }
    iftmp.58 = D.25134;
    goto <D.27927>;
    <D.27890>:
    D.27928 = class->name;
    iftmp.58 = __builtin_strcmp ("TypeDelegator", D.27928);
    <D.27927>:
    D.25138 = iftmp.58;
  }
  if (D.25138 == 0) goto <D.27882>; else goto <D.27883>;
  <D.27882>:
  iftmp.57 = 1;
  goto <D.27884>;
  <D.27883>:
  iftmp.57 = 0;
  <D.27884>:
  D.27880 = iftmp.57;
  return D.27880;
}


mono_image_basic_method (struct ReflectionMethodBuilder * mb, struct MonoDynamicImage * assembly)
{
  guint32 * D.27930;
  unsigned int D.27931;
  unsigned int D.27932;
  unsigned int D.27933;
  struct GHashTable * D.27934;
  struct MonoMethod * D.27935;
  unsigned int D.27936;
  void * D.27937;
  guint32 * D.27938;
  unsigned int D.27939;
  guint32 * D.27940;
  struct MonoDynamicStream * D.27941;
  struct MonoString * D.27942;
  unsigned int D.27943;
  guint32 * D.27944;
  unsigned int D.27945;
  guint32 * D.27946;
  unsigned int D.27947;
  guint32 * D.27948;
  unsigned int D.27949;
  unsigned int D.27950;
  guint32 * D.27951;
  unsigned int D.27952;
  struct MonoArray * D.27953;
  struct MonoArray * D.27954;
  guint32 * D.27957;
  unsigned int D.27958;
  unsigned int D.27959;
  char * D.27960;
  void * D.27961;
  unsigned int D.27964;
  unsigned int D.27965;
  unsigned int D.27966;
  unsigned int D.27967;
  char * D.27968;
  unsigned int D.27971;
  struct MonoString * D.27972;
  unsigned int D.27975;
  struct MonoReflectionMarshal * D.27977;
  unsigned int D.27980;
  unsigned int D.27981;
  unsigned int D.27982;
  unsigned int D.27983;
  unsigned int D.27984;
  guint32 * D.27985;
  unsigned int D.27986;
  unsigned int D.27987;
  unsigned int D.27988;
  unsigned int D.27989;
  unsigned int D.27992;
  guint32 * D.27993;
  unsigned int D.27994;
  unsigned int D.27995;
  unsigned int D.27996;
  guint32 * D.27997;
  struct MonoObject * D.27998;
  unsigned int D.27999;
  unsigned int field_type.59;
  unsigned int D.28001;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint i;
  guint count;

  table = &assembly->tables[6];
  D.27930 = mb->table_idx;
  D.27931 = table->next_idx;
  D.27932 = D.27931;
  D.27933 = D.27932 + 1;
  table->next_idx = D.27933;
  *D.27930 = D.27932;
  D.27934 = assembly->method_to_table_idx;
  D.27935 = mb->mhandle;
  D.27930 = mb->table_idx;
  D.27936 = *D.27930;
  D.27937 = (void *) D.27936;
  monoeg_g_hash_table_insert_replace (D.27934, D.27935, D.27937, 0);
  D.27938 = table->values;
  D.27930 = mb->table_idx;
  D.27936 = *D.27930;
  D.27939 = D.27936 * 24;
  values = D.27938 + D.27939;
  D.27940 = values + 12;
  D.27941 = &assembly->sheap;
  D.27942 = mb->name;
  D.27943 = string_heap_insert_mstring (D.27941, D.27942);
  *D.27940 = D.27943;
  D.27944 = values + 8;
  D.27945 = mb->attrs;
  *D.27944 = D.27945;
  D.27946 = values + 4;
  D.27947 = mb->iattrs;
  *D.27946 = D.27947;
  D.27948 = values + 16;
  D.27949 = method_builder_encode_signature (assembly, mb);
  *D.27948 = D.27949;
  D.27950 = method_encode_code (assembly, mb);
  *values = D.27950;
  table = &assembly->tables[8];
  D.27951 = values + 20;
  D.27931 = table->next_idx;
  *D.27951 = D.27931;
  D.27930 = mb->table_idx;
  D.27936 = *D.27930;
  D.27952 = D.27936 | 100663296;
  D.27953 = mb->permissions;
  mono_image_add_decl_security (assembly, D.27952, D.27953);
  D.27954 = mb->pinfo;
  if (D.27954 != 0B) goto <D.27955>; else goto <D.27956>;
  <D.27955>:
  {
    struct MonoDynamicTable * mtable;
    guint32 * mvalues;

    mtable = &assembly->tables[13];
    D.27957 = mtable->values;
    D.27958 = mtable->next_idx;
    D.27959 = D.27958 * 8;
    mvalues = D.27957 + D.27959;
    count = 0;
    i = 0;
    goto <D.21296>;
    <D.21295>:
    D.27954 = mb->pinfo;
    D.27960 = mono_array_addr_with_size (D.27954, 4, i);
    D.27961 = MEM[(void * *)D.27960];
    if (D.27961 != 0B) goto <D.27962>; else goto <D.27963>;
    <D.27962>:
    count = count + 1;
    <D.27963>:
    i = i + 1;
    <D.21296>:
    D.27954 = mb->pinfo;
    D.27964 = mono_array_length (D.27954);
    if (D.27964 > i) goto <D.21295>; else goto <D.21297>;
    <D.21297>:
    D.27965 = table->rows;
    D.27966 = D.27965 + count;
    table->rows = D.27966;
    D.27965 = table->rows;
    alloc_table (table, D.27965);
    D.27938 = table->values;
    D.27931 = table->next_idx;
    D.27967 = D.27931 * 12;
    values = D.27938 + D.27967;
    i = 0;
    goto <D.21301>;
    <D.21300>:
    {
      struct MonoReflectionParamBuilder * pb;

      D.27954 = mb->pinfo;
      D.27968 = mono_array_addr_with_size (D.27954, 4, i);
      pb = MEM[(struct MonoReflectionParamBuilder * *)D.27968];
      if (pb != 0B) goto <D.27969>; else goto <D.27970>;
      <D.27969>:
      D.27971 = pb->attrs;
      *values = D.27971;
      D.27946 = values + 4;
      *D.27946 = i;
      D.27972 = pb->name;
      if (D.27972 != 0B) goto <D.27973>; else goto <D.27974>;
      <D.27973>:
      D.27944 = values + 8;
      D.27941 = &assembly->sheap;
      D.27972 = pb->name;
      D.27975 = string_heap_insert_mstring (D.27941, D.27972);
      *D.27944 = D.27975;
      goto <D.27976>;
      <D.27974>:
      D.27944 = values + 8;
      *D.27944 = 0;
      <D.27976>:
      values = values + 12;
      D.27977 = pb->marshal_info;
      if (D.27977 != 0B) goto <D.27978>; else goto <D.27979>;
      <D.27978>:
      D.27980 = mtable->rows;
      D.27981 = D.27980 + 1;
      mtable->rows = D.27981;
      D.27980 = mtable->rows;
      alloc_table (mtable, D.27980);
      D.27957 = mtable->values;
      D.27980 = mtable->rows;
      D.27982 = D.27980 * 8;
      mvalues = D.27957 + D.27982;
      D.27931 = table->next_idx;
      D.27983 = D.27931 << 1;
      D.27984 = D.27983 | 1;
      *mvalues = D.27984;
      D.27985 = mvalues + 4;
      D.27977 = pb->marshal_info;
      D.27986 = encode_marshal_blob (assembly, D.27977);
      *D.27985 = D.27986;
      <D.27979>:
      D.27931 = table->next_idx;
      D.27987 = D.27931;
      D.27988 = D.27987 + 1;
      table->next_idx = D.27988;
      pb->table_idx = D.27987;
      D.27971 = pb->attrs;
      D.27989 = D.27971 & 4096;
      if (D.27989 != 0) goto <D.27990>; else goto <D.27991>;
      <D.27990>:
      {
        guint32 field_type;

        try
          {
            field_type = 0;
            mtable = &assembly->tables[11];
            D.27980 = mtable->rows;
            D.27981 = D.27980 + 1;
            mtable->rows = D.27981;
            D.27980 = mtable->rows;
            alloc_table (mtable, D.27980);
            D.27957 = mtable->values;
            D.27980 = mtable->rows;
            D.27992 = D.27980 * 16;
            mvalues = D.27957 + D.27992;
            D.27993 = mvalues + 8;
            D.27994 = pb->table_idx;
            D.27995 = D.27994 << 2;
            D.27996 = D.27995 | 1;
            *D.27993 = D.27996;
            D.27997 = mvalues + 12;
            D.27998 = pb->def_value;
            D.27999 = encode_constant (assembly, D.27998, &field_type);
            *D.27997 = D.27999;
            field_type.59 = field_type;
            *mvalues = field_type.59;
            D.27985 = mvalues + 4;
            *D.27985 = 0;
          }
        finally
          {
            field_type = {CLOBBER};
          }
      }
      <D.27991>:
      <D.27970>:
    }
    i = i + 1;
    <D.21301>:
    D.27954 = mb->pinfo;
    D.28001 = mono_array_length (D.27954);
    if (D.28001 > i) goto <D.21300>; else goto <D.21302>;
    <D.21302>:
  }
  <D.27956>:
}


method_builder_encode_signature (struct MonoDynamicImage * assembly, struct ReflectionMethodBuilder * mb)
{
  uintptr_t iftmp.60;
  struct MonoArray * D.28003;
  uintptr_t iftmp.61;
  struct MonoArray * D.28008;
  uintptr_t iftmp.62;
  struct MonoArray * D.28013;
  unsigned int D.28017;
  unsigned int D.28018;
  unsigned int D.28021;
  unsigned int D.28022;
  unsigned char D.28027;
  unsigned int D.28030;
  struct MonoArray * D.28031;
  struct MonoArray * D.28032;
  struct MonoReflectionType * D.28033;
  struct MonoArray * D.28034;
  unsigned int i.63;
  unsigned int D.28038;
  char * D.28041;
  struct MonoArray * D.28042;
  unsigned int D.28045;
  char * D.28048;
  char * D.28049;
  unsigned int i.64;
  char * D.28053;
  guint32 D.28054;
  struct SigBuffer buf;
  int i;
  guint32 nparams;
  guint32 ngparams;
  guint32 notypes;
  guint32 idx;

  try
    {
      D.28003 = mb->parameters;
      if (D.28003 != 0B) goto <D.28004>; else goto <D.28005>;
      <D.28004>:
      D.28003 = mb->parameters;
      iftmp.60 = mono_array_length (D.28003);
      goto <D.28006>;
      <D.28005>:
      iftmp.60 = 0;
      <D.28006>:
      nparams = iftmp.60;
      D.28008 = mb->generic_params;
      if (D.28008 != 0B) goto <D.28009>; else goto <D.28010>;
      <D.28009>:
      D.28008 = mb->generic_params;
      iftmp.61 = mono_array_length (D.28008);
      goto <D.28011>;
      <D.28010>:
      iftmp.61 = 0;
      <D.28011>:
      ngparams = iftmp.61;
      D.28013 = mb->opt_types;
      if (D.28013 != 0B) goto <D.28014>; else goto <D.28015>;
      <D.28014>:
      D.28013 = mb->opt_types;
      iftmp.62 = mono_array_length (D.28013);
      goto <D.28016>;
      <D.28015>:
      iftmp.62 = 0;
      <D.28016>:
      notypes = iftmp.62;
      sigbuffer_init (&buf, 32);
      D.28017 = mb->call_conv;
      idx = D.28017 & 96;
      D.28017 = mb->call_conv;
      D.28018 = D.28017 & 2;
      if (D.28018 != 0) goto <D.28019>; else goto <D.28020>;
      <D.28019>:
      idx = idx | 5;
      <D.28020>:
      D.28021 = mb->attrs;
      D.28022 = D.28021 & 16;
      if (D.28022 == 0) goto <D.28023>; else goto <D.28024>;
      <D.28023>:
      idx = idx | 32;
      <D.28024>:
      if (ngparams != 0) goto <D.28025>; else goto <D.28026>;
      <D.28025>:
      idx = idx | 16;
      <D.28026>:
      D.28027 = (unsigned char) idx;
      sigbuffer_add_byte (&buf, D.28027);
      if (ngparams != 0) goto <D.28028>; else goto <D.28029>;
      <D.28028>:
      sigbuffer_add_value (&buf, ngparams);
      <D.28029>:
      D.28030 = nparams + notypes;
      sigbuffer_add_value (&buf, D.28030);
      D.28031 = mb->return_modreq;
      D.28032 = mb->return_modopt;
      encode_custom_modifiers (assembly, D.28031, D.28032, &buf);
      D.28033 = mb->rtype;
      encode_reflection_type (assembly, D.28033, &buf);
      i = 0;
      goto <D.21107>;
      <D.21106>:
      {
        struct MonoArray * modreq;
        struct MonoArray * modopt;
        struct MonoReflectionType * pt;

        modreq = 0B;
        modopt = 0B;
        D.28034 = mb->param_modreq;
        if (D.28034 != 0B) goto <D.28035>; else goto <D.28036>;
        <D.28035>:
        i.63 = (unsigned int) i;
        D.28034 = mb->param_modreq;
        D.28038 = mono_array_length (D.28034);
        if (i.63 < D.28038) goto <D.28039>; else goto <D.28040>;
        <D.28039>:
        D.28034 = mb->param_modreq;
        i.63 = (unsigned int) i;
        D.28041 = mono_array_addr_with_size (D.28034, 4, i.63);
        modreq = MEM[(struct MonoArray * *)D.28041];
        <D.28040>:
        <D.28036>:
        D.28042 = mb->param_modopt;
        if (D.28042 != 0B) goto <D.28043>; else goto <D.28044>;
        <D.28043>:
        i.63 = (unsigned int) i;
        D.28042 = mb->param_modopt;
        D.28045 = mono_array_length (D.28042);
        if (i.63 < D.28045) goto <D.28046>; else goto <D.28047>;
        <D.28046>:
        D.28042 = mb->param_modopt;
        i.63 = (unsigned int) i;
        D.28048 = mono_array_addr_with_size (D.28042, 4, i.63);
        modopt = MEM[(struct MonoArray * *)D.28048];
        <D.28047>:
        <D.28044>:
        encode_custom_modifiers (assembly, modreq, modopt, &buf);
        D.28003 = mb->parameters;
        i.63 = (unsigned int) i;
        D.28049 = mono_array_addr_with_size (D.28003, 4, i.63);
        pt = MEM[(struct MonoReflectionType * *)D.28049];
        encode_reflection_type (assembly, pt, &buf);
      }
      i = i + 1;
      <D.21107>:
      i.64 = (unsigned int) i;
      if (i.64 < nparams) goto <D.21106>; else goto <D.21108>;
      <D.21108>:
      if (notypes != 0) goto <D.28051>; else goto <D.28052>;
      <D.28051>:
      sigbuffer_add_byte (&buf, 65);
      <D.28052>:
      i = 0;
      goto <D.21111>;
      <D.21110>:
      {
        struct MonoReflectionType * pt;

        D.28013 = mb->opt_types;
        i.63 = (unsigned int) i;
        D.28053 = mono_array_addr_with_size (D.28013, 4, i.63);
        pt = MEM[(struct MonoReflectionType * *)D.28053];
        encode_reflection_type (assembly, pt, &buf);
      }
      i = i + 1;
      <D.21111>:
      i.64 = (unsigned int) i;
      if (i.64 < notypes) goto <D.21110>; else goto <D.21112>;
      <D.21112>:
      idx = sigbuffer_add_to_blob_cached (assembly, &buf);
      sigbuffer_free (&buf);
      D.28054 = idx;
      return D.28054;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


sigbuffer_init (struct SigBuffer * buf, int size)
{
  unsigned int size.65;
  void * D.28058;
  char * D.28059;
  sizetype size.66;
  char * D.28061;

  size.65 = (unsigned int) size;
  D.28058 = monoeg_malloc (size.65);
  buf->buf = D.28058;
  D.28059 = buf->buf;
  buf->p = D.28059;
  D.28059 = buf->buf;
  size.66 = (sizetype) size;
  D.28061 = D.28059 + size.66;
  buf->end = D.28061;
}


sigbuffer_add_value (struct SigBuffer * buf, guint32 val)
{
  char * D.28062;
  char * * D.28063;

  sigbuffer_make_room (buf, 6);
  D.28062 = buf->p;
  D.28063 = &buf->p;
  mono_metadata_encode_value (val, D.28062, D.28063);
}


sigbuffer_make_room (struct SigBuffer * buf, int size)
{
  char * D.28064;
  int D.28065;
  char * D.28066;
  int D.28067;
  int D.28068;
  char * D.28071;
  int D.28072;
  int D.28073;
  int D.28074;
  unsigned int new_size.67;
  sizetype size.68;
  char * D.28077;
  sizetype new_size.69;
  char * D.28079;

  D.28064 = buf->end;
  D.28065 = (int) D.28064;
  D.28066 = buf->p;
  D.28067 = (int) D.28066;
  D.28068 = D.28065 - D.28067;
  if (D.28068 < size) goto <D.28069>; else goto <D.28070>;
  <D.28069>:
  {
    int new_size;
    char * p;

    D.28064 = buf->end;
    D.28065 = (int) D.28064;
    D.28071 = buf->buf;
    D.28072 = (int) D.28071;
    D.28073 = D.28065 - D.28072;
    D.28074 = D.28073 + size;
    new_size = D.28074 + 32;
    D.28071 = buf->buf;
    new_size.67 = (unsigned int) new_size;
    p = monoeg_realloc (D.28071, new_size.67);
    D.28066 = buf->p;
    D.28067 = (int) D.28066;
    D.28071 = buf->buf;
    D.28072 = (int) D.28071;
    size = D.28067 - D.28072;
    buf->buf = p;
    size.68 = (sizetype) size;
    D.28077 = p + size.68;
    buf->p = D.28077;
    D.28071 = buf->buf;
    new_size.69 = (sizetype) new_size;
    D.28079 = D.28071 + new_size.69;
    buf->end = D.28079;
  }
  <D.28070>:
}


encode_custom_modifiers (struct MonoDynamicImage * assembly, struct MonoArray * modreq, struct MonoArray * modopt, struct SigBuffer * buf)
{
  unsigned int i.70;
  char * D.28083;
  void * D.28084;
  unsigned int D.28085;
  unsigned int D.28086;
  char * D.28089;
  void * D.28090;
  unsigned int D.28091;
  unsigned int D.28092;
  int i;

  if (modreq != 0B) goto <D.28080>; else goto <D.28081>;
  <D.28080>:
  i = 0;
  goto <D.21076>;
  <D.21075>:
  {
    struct MonoType * mod;

    i.70 = (unsigned int) i;
    D.28083 = mono_array_addr_with_size (modreq, 4, i.70);
    D.28084 = MEM[(void * *)D.28083];
    mod = mono_reflection_type_get_handle (D.28084);
    sigbuffer_add_byte (buf, 31);
    D.28085 = mono_image_typedef_or_ref (assembly, mod);
    sigbuffer_add_value (buf, D.28085);
  }
  i = i + 1;
  <D.21076>:
  i.70 = (unsigned int) i;
  D.28086 = mono_array_length (modreq);
  if (i.70 < D.28086) goto <D.21075>; else goto <D.21077>;
  <D.21077>:
  <D.28081>:
  if (modopt != 0B) goto <D.28087>; else goto <D.28088>;
  <D.28087>:
  i = 0;
  goto <D.21080>;
  <D.21079>:
  {
    struct MonoType * mod;

    i.70 = (unsigned int) i;
    D.28089 = mono_array_addr_with_size (modopt, 4, i.70);
    D.28090 = MEM[(void * *)D.28089];
    mod = mono_reflection_type_get_handle (D.28090);
    sigbuffer_add_byte (buf, 32);
    D.28091 = mono_image_typedef_or_ref (assembly, mod);
    sigbuffer_add_value (buf, D.28091);
  }
  i = i + 1;
  <D.21080>:
  i.70 = (unsigned int) i;
  D.28092 = mono_array_length (modopt);
  if (i.70 < D.28092) goto <D.21079>; else goto <D.21081>;
  <D.21081>:
  <D.28088>:
}


mono_image_typedef_or_ref (struct MonoDynamicImage * assembly, struct MonoType * type)
{
  guint32 D.28093;

  D.28093 = mono_image_typedef_or_ref_full (assembly, type, 1);
  return D.28093;
}


mono_image_typedef_or_ref_full (struct MonoDynamicImage * assembly, struct MonoType * type, gboolean try_typespec)
{
  guint32 D.28099;
  struct GHashTable * D.28100;
  void * D.28101;
  struct MonoImage * D.28106;
  struct MonoImage * D.28107;
  unsigned char D.28110;
  unsigned int D.28115;
  struct MonoGHashTable * D.28116;
  void * token.71;
  void * D.28118;
  struct MonoClass * D.28119;
  struct MonoType * D.28122;
  unsigned int D.28123;
  int D.28125;
  unsigned int D.28128;
  unsigned int D.28129;
  guint32 * D.28130;
  unsigned int D.28131;
  unsigned int D.28132;
  guint32 * D.28133;
  struct MonoDynamicStream * D.28134;
  const char * D.28135;
  unsigned int D.28136;
  guint32 * D.28137;
  const char * D.28138;
  unsigned int D.28139;
  unsigned int D.28140;
  unsigned int D.28141;
  void * D.28142;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 token;
  guint32 scope;
  guint32 enclosing;
  struct MonoClass * klass;

  if (try_typespec != 0) goto <D.28095>; else goto <D.28096>;
  <D.28095>:
  token = create_typespec (assembly, type);
  if (token != 0) goto <D.28097>; else goto <D.28098>;
  <D.28097>:
  D.28099 = token;
  return D.28099;
  <D.28098>:
  <D.28096>:
  D.28100 = assembly->typeref;
  D.28101 = monoeg_g_hash_table_lookup (D.28100, type);
  token = (guint32) D.28101;
  if (token != 0) goto <D.28102>; else goto <D.28103>;
  <D.28102>:
  D.28099 = token;
  return D.28099;
  <D.28103>:
  klass = mono_class_from_mono_type (type);
  if (klass == 0B) goto <D.28104>; else goto <D.28105>;
  <D.28104>:
  klass = mono_class_from_mono_type (type);
  <D.28105>:
  D.28106 = klass->image;
  D.28107 = &assembly->image;
  if (D.28106 == D.28107) goto <D.28108>; else goto <D.28109>;
  <D.28108>:
  D.28110 = type->type;
  if (D.28110 != 19) goto <D.28111>; else goto <D.28112>;
  <D.28111>:
  D.28110 = type->type;
  if (D.28110 != 30) goto <D.28113>; else goto <D.28114>;
  <D.28113>:
  {
    struct MonoReflectionTypeBuilder * tb;

    tb = mono_class_get_ref_info (klass);
    D.28115 = tb->table_idx;
    token = D.28115 << 2;
    D.28116 = assembly->tokens;
    token.71 = (void *) token;
    D.28118 = mono_class_get_ref_info (klass);
    mono_g_hash_table_insert (D.28116, token.71, D.28118);
    D.28099 = token;
    return D.28099;
  }
  <D.28114>:
  <D.28112>:
  <D.28109>:
  D.28119 = klass->nested_in;
  if (D.28119 != 0B) goto <D.28120>; else goto <D.28121>;
  <D.28120>:
  D.28119 = klass->nested_in;
  D.28122 = &D.28119->byval_arg;
  enclosing = mono_image_typedef_or_ref_full (assembly, D.28122, 0);
  enclosing = enclosing >> 2;
  D.28123 = enclosing << 2;
  scope = D.28123 | 3;
  goto <D.28124>;
  <D.28121>:
  D.28106 = klass->image;
  scope = resolution_scope_from_image (assembly, D.28106);
  <D.28124>:
  table = &assembly->tables[1];
  D.28125 = assembly->save;
  if (D.28125 != 0) goto <D.28126>; else goto <D.28127>;
  <D.28126>:
  D.28128 = table->rows;
  D.28129 = D.28128 + 1;
  alloc_table (table, D.28129);
  D.28130 = table->values;
  D.28131 = table->next_idx;
  D.28132 = D.28131 * 12;
  values = D.28130 + D.28132;
  *values = scope;
  D.28133 = values + 4;
  D.28134 = &assembly->sheap;
  D.28135 = klass->name;
  D.28136 = string_heap_insert (D.28134, D.28135);
  *D.28133 = D.28136;
  D.28137 = values + 8;
  D.28134 = &assembly->sheap;
  D.28138 = klass->name_space;
  D.28139 = string_heap_insert (D.28134, D.28138);
  *D.28137 = D.28139;
  <D.28127>:
  D.28131 = table->next_idx;
  D.28140 = D.28131 << 2;
  token = D.28140 | 1;
  D.28100 = assembly->typeref;
  token.71 = (void *) token;
  monoeg_g_hash_table_insert_replace (D.28100, type, token.71, 0);
  D.28131 = table->next_idx;
  D.28141 = D.28131 + 1;
  table->next_idx = D.28141;
  D.28116 = assembly->tokens;
  token.71 = (void *) token;
  D.28142 = mono_class_get_ref_info (klass);
  mono_g_hash_table_insert (D.28116, token.71, D.28142);
  D.28099 = token;
  return D.28099;
}


create_typespec (struct MonoDynamicImage * assembly, struct MonoType * type)
{
  struct GHashTable * D.28144;
  void * D.28145;
  guint32 D.28148;
  unsigned char D.28149;
  int D.28150;
  struct MonoGenericContainer * D.28154;
  int D.28155;
  unsigned int D.28158;
  unsigned int D.28159;
  guint32 * D.28160;
  unsigned int D.28161;
  unsigned int D.28162;
  unsigned int D.28163;
  void * token.72;
  unsigned int D.28165;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 token;
  struct SigBuffer buf;

  try
    {
      D.28144 = assembly->typespec;
      D.28145 = monoeg_g_hash_table_lookup (D.28144, type);
      token = (guint32) D.28145;
      if (token != 0) goto <D.28146>; else goto <D.28147>;
      <D.28146>:
      D.28148 = token;
      return D.28148;
      <D.28147>:
      sigbuffer_init (&buf, 32);
      D.28149 = type->type;
      D.28150 = (int) D.28149;
      switch (D.28150) <default: <D.21565>, case 15: <D.21555>, case 17: <D.21563>, case 18: <D.21562>, case 19: <D.21558>, case 20: <D.21557>, case 21: <D.21560>, case 27: <D.21554>, case 29: <D.21556>, case 30: <D.21559>>
      <D.21554>:
      <D.21555>:
      <D.21556>:
      <D.21557>:
      <D.21558>:
      <D.21559>:
      <D.21560>:
      encode_type (assembly, type, &buf);
      goto <D.21561>;
      <D.21562>:
      <D.21563>:
      {
        struct MonoClass * k;

        k = mono_class_from_mono_type (type);
        if (k == 0B) goto <D.28151>; else goto <D.28153>;
        <D.28153>:
        D.28154 = k->generic_container;
        if (D.28154 == 0B) goto <D.28151>; else goto <D.28152>;
        <D.28151>:
        sigbuffer_free (&buf);
        D.28148 = 0;
        return D.28148;
        <D.28152>:
        encode_type (assembly, type, &buf);
        goto <D.21561>;
      }
      <D.21565>:
      sigbuffer_free (&buf);
      D.28148 = 0;
      return D.28148;
      <D.21561>:
      table = &assembly->tables[27];
      D.28155 = assembly->save;
      if (D.28155 != 0) goto <D.28156>; else goto <D.28157>;
      <D.28156>:
      token = sigbuffer_add_to_blob_cached (assembly, &buf);
      D.28158 = table->rows;
      D.28159 = D.28158 + 1;
      alloc_table (table, D.28159);
      D.28160 = table->values;
      D.28161 = table->next_idx;
      D.28162 = D.28161 * 4;
      values = D.28160 + D.28162;
      *values = token;
      <D.28157>:
      sigbuffer_free (&buf);
      D.28161 = table->next_idx;
      D.28163 = D.28161 << 2;
      token = D.28163 | 2;
      D.28144 = assembly->typespec;
      token.72 = (void *) token;
      monoeg_g_hash_table_insert_replace (D.28144, type, token.72, 0);
      D.28161 = table->next_idx;
      D.28165 = D.28161 + 1;
      table->next_idx = D.28165;
      D.28148 = token;
      return D.28148;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


encode_type (struct MonoDynamicImage * assembly, struct MonoType * type, struct SigBuffer * buf)
{
  unsigned char D.28170;
  unsigned char D.28171;
  unsigned char D.28174;
  int D.28175;
  unsigned int D.28176;
  struct MonoType * D.28177;
  struct MonoClass * D.28178;
  struct MonoType * D.28179;
  struct MonoGenericContainer * D.28180;
  struct MonoGenericInst * D.28183;
  unsigned char D.28185;
  unsigned int D.28186;
  struct MonoType * D.28187;
  unsigned int D.28188;
  struct MonoArrayType * D.28189;
  struct MonoClass * D.28190;
  struct MonoType * D.28191;
  unsigned char D.28192;
  unsigned int D.28193;
  struct MonoGenericClass * D.28194;
  struct MonoGenericParam * D.28195;
  short unsigned int D.28196;
  unsigned int D.28197;

  if (type == 0B) goto <D.28168>; else goto <D.28169>;
  <D.28168>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 679);
  return;
  <D.28169>:
  D.28170 = BIT_FIELD_REF <*type, 8, 56>;
  D.28171 = D.28170 & 64;
  if (D.28171 != 0) goto <D.28172>; else goto <D.28173>;
  <D.28172>:
  sigbuffer_add_value (buf, 16);
  <D.28173>:
  D.28174 = type->type;
  D.28175 = (int) D.28174;
  switch (D.28175) <default: <D.21060>, case 1: <D.21031>, case 2: <D.21032>, case 3: <D.21033>, case 4: <D.21034>, case 5: <D.21035>, case 6: <D.21036>, case 7: <D.21037>, case 8: <D.21038>, case 9: <D.21039>, case 10: <D.21040>, case 11: <D.21041>, case 12: <D.21042>, case 13: <D.21043>, case 14: <D.21046>, case 15: <D.21050>, case 17: <D.21052>, case 18: <D.21053>, case 19: <D.21058>, case 20: <D.21056>, case 21: <D.21057>, case 22: <D.21048>, case 24: <D.21044>, case 25: <D.21045>, case 28: <D.21047>, case 29: <D.21051>, case 30: <D.21059>>
  <D.21031>:
  <D.21032>:
  <D.21033>:
  <D.21034>:
  <D.21035>:
  <D.21036>:
  <D.21037>:
  <D.21038>:
  <D.21039>:
  <D.21040>:
  <D.21041>:
  <D.21042>:
  <D.21043>:
  <D.21044>:
  <D.21045>:
  <D.21046>:
  <D.21047>:
  <D.21048>:
  D.28174 = type->type;
  D.28176 = (unsigned int) D.28174;
  sigbuffer_add_value (buf, D.28176);
  goto <D.21049>;
  <D.21050>:
  D.28174 = type->type;
  D.28176 = (unsigned int) D.28174;
  sigbuffer_add_value (buf, D.28176);
  D.28177 = type->data.type;
  encode_type (assembly, D.28177, buf);
  goto <D.21049>;
  <D.21051>:
  D.28174 = type->type;
  D.28176 = (unsigned int) D.28174;
  sigbuffer_add_value (buf, D.28176);
  D.28178 = type->data.klass;
  D.28179 = &D.28178->byval_arg;
  encode_type (assembly, D.28179, buf);
  goto <D.21049>;
  <D.21052>:
  <D.21053>:
  {
    struct MonoClass * k;

    k = mono_class_from_mono_type (type);
    D.28180 = k->generic_container;
    if (D.28180 != 0B) goto <D.28181>; else goto <D.28182>;
    <D.28181>:
    {
      struct MonoGenericClass * gclass;

      D.28180 = k->generic_container;
      D.28183 = D.28180->context.class_inst;
      gclass = mono_metadata_lookup_generic_class (k, D.28183, 1);
      encode_generic_class (assembly, gclass, buf);
    }
    goto <D.28184>;
    <D.28182>:
    D.28185 = k->byval_arg.type;
    D.28186 = (unsigned int) D.28185;
    sigbuffer_add_value (buf, D.28186);
    D.28187 = &k->byval_arg;
    D.28188 = mono_image_typedef_or_ref (assembly, D.28187);
    sigbuffer_add_value (buf, D.28188);
    <D.28184>:
    goto <D.21049>;
  }
  <D.21056>:
  D.28174 = type->type;
  D.28176 = (unsigned int) D.28174;
  sigbuffer_add_value (buf, D.28176);
  D.28189 = type->data.array;
  D.28190 = D.28189->eklass;
  D.28191 = &D.28190->byval_arg;
  encode_type (assembly, D.28191, buf);
  D.28189 = type->data.array;
  D.28192 = D.28189->rank;
  D.28193 = (unsigned int) D.28192;
  sigbuffer_add_value (buf, D.28193);
  sigbuffer_add_value (buf, 0);
  sigbuffer_add_value (buf, 0);
  goto <D.21049>;
  <D.21057>:
  D.28194 = type->data.generic_class;
  encode_generic_class (assembly, D.28194, buf);
  goto <D.21049>;
  <D.21058>:
  <D.21059>:
  D.28174 = type->type;
  D.28176 = (unsigned int) D.28174;
  sigbuffer_add_value (buf, D.28176);
  D.28195 = type->data.generic_param;
  D.28196 = D.28195->num;
  D.28197 = (unsigned int) D.28196;
  sigbuffer_add_value (buf, D.28197);
  goto <D.21049>;
  <D.21060>:
  D.28174 = type->type;
  D.28175 = (int) D.28174;
  monoeg_g_log (0B, 4, "need to encode type %x", D.28175);
  <D.21061>:
  goto <D.21061>;
  <D.21049>:
}


encode_generic_class (struct MonoDynamicImage * assembly, struct MonoGenericClass * gclass, struct SigBuffer * buf)
{
  _Bool D.28198;
  long int D.28199;
  long int D.28200;
  unsigned char D.28203;
  unsigned int D.28204;
  struct MonoType * D.28205;
  unsigned int D.28206;
  <unnamed-unsigned:22> D.28207;
  unsigned int D.28208;
  struct MonoType * D.28209;
  int D.28210;
  int i;
  struct MonoGenericInst * class_inst;
  struct MonoClass * klass;

  D.28198 = gclass == 0B;
  D.28199 = (long int) D.28198;
  D.28200 = __builtin_expect (D.28199, 0);
  if (D.28200 != 0) goto <D.28201>; else goto <D.28202>;
  <D.28201>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 660, "gclass");
  <D.28202>:
  class_inst = gclass->context.class_inst;
  sigbuffer_add_value (buf, 21);
  klass = gclass->container_class;
  D.28203 = klass->byval_arg.type;
  D.28204 = (unsigned int) D.28203;
  sigbuffer_add_value (buf, D.28204);
  D.28205 = &klass->byval_arg;
  D.28206 = mono_image_typedef_or_ref_full (assembly, D.28205, 0);
  sigbuffer_add_value (buf, D.28206);
  D.28207 = class_inst->type_argc;
  D.28208 = (unsigned int) D.28207;
  sigbuffer_add_value (buf, D.28208);
  i = 0;
  goto <D.21024>;
  <D.21023>:
  D.28209 = class_inst->type_argv[i];
  encode_type (assembly, D.28209, buf);
  i = i + 1;
  <D.21024>:
  D.28207 = class_inst->type_argc;
  D.28210 = (int) D.28207;
  if (D.28210 > i) goto <D.21023>; else goto <D.21025>;
  <D.21025>:
}


sigbuffer_add_byte (struct SigBuffer * buf, guint8 val)
{
  char * D.28211;
  char * D.28212;

  sigbuffer_make_room (buf, 1);
  D.28211 = buf->p;
  *D.28211 = val;
  D.28211 = buf->p;
  D.28212 = D.28211 + 1;
  buf->p = D.28212;
}


encode_reflection_type (struct MonoDynamicImage * assembly, struct MonoReflectionType * type, struct SigBuffer * buf)
{
  struct MonoType * D.28215;

  if (type == 0B) goto <D.28213>; else goto <D.28214>;
  <D.28213>:
  sigbuffer_add_value (buf, 1);
  return;
  <D.28214>:
  D.28215 = mono_reflection_type_get_handle (type);
  encode_type (assembly, D.28215, buf);
}


sigbuffer_add_to_blob_cached (struct MonoDynamicImage * assembly, struct SigBuffer * buf)
{
  char * D.28217;
  int D.28218;
  char * D.28219;
  int D.28220;
  int D.28221;
  char * D.28222;
  int D.28223;
  int D.28224;
  unsigned int D.28225;
  _Bool D.28226;
  long int D.28227;
  long int D.28228;
  char * b.73;
  guint32 D.28232;
  int b.74;
  int blob_size.75;
  int D.28235;
  int size.76;
  char blob_size[8];
  char * b;
  guint32 size;

  try
    {
      b = &blob_size;
      D.28217 = buf->p;
      D.28218 = (int) D.28217;
      D.28219 = buf->buf;
      D.28220 = (int) D.28219;
      D.28221 = D.28218 - D.28220;
      size = (guint32) D.28221;
      D.28222 = buf->end;
      D.28223 = (int) D.28222;
      D.28219 = buf->buf;
      D.28220 = (int) D.28219;
      D.28224 = D.28223 - D.28220;
      D.28225 = (unsigned int) D.28224;
      D.28226 = D.28225 < size;
      D.28227 = (long int) D.28226;
      D.28228 = __builtin_expect (D.28227, 0);
      if (D.28228 != 0) goto <D.28229>; else goto <D.28230>;
      <D.28229>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 501, "size <= (buf->end - buf->buf)");
      <D.28230>:
      b.73 = b;
      mono_metadata_encode_value (size, b.73, &b);
      b.73 = b;
      b.74 = (int) b.73;
      blob_size.75 = (int) &blob_size;
      D.28235 = b.74 - blob_size.75;
      D.28219 = buf->buf;
      size.76 = (int) size;
      D.28232 = add_to_blob_cached (assembly, &blob_size, D.28235, D.28219, size.76);
      return D.28232;
    }
  finally
    {
      blob_size = {CLOBBER};
      b = {CLOBBER};
    }
}


add_to_blob_cached (struct MonoDynamicImage * assembly, char * b1, int s1, char * b2, int s2)
{
  int D.28239;
  unsigned int D.28240;
  unsigned int s1.77;
  sizetype s1.78;
  char * D.28243;
  unsigned int s2.79;
  struct GHashTable * D.28245;
  int D.28246;
  void * oldval.80;
  struct MonoDynamicStream * D.28251;
  unsigned int s1.81;
  unsigned int s2.82;
  void * idx.83;
  guint32 D.28255;
  guint32 idx;
  char * copy;
  void * oldkey;
  void * oldval;

  try
    {
      D.28239 = s1 + s2;
      D.28240 = (unsigned int) D.28239;
      copy = monoeg_malloc (D.28240);
      s1.77 = (unsigned int) s1;
      memcpy (copy, b1, s1.77);
      s1.78 = (sizetype) s1;
      D.28243 = copy + s1.78;
      s2.79 = (unsigned int) s2;
      memcpy (D.28243, b2, s2.79);
      D.28245 = assembly->blob_cache;
      D.28246 = monoeg_g_hash_table_lookup_extended (D.28245, copy, &oldkey, &oldval);
      if (D.28246 != 0) goto <D.28247>; else goto <D.28248>;
      <D.28247>:
      monoeg_g_free (copy);
      oldval.80 = oldval;
      idx = (guint32) oldval.80;
      goto <D.28250>;
      <D.28248>:
      D.28251 = &assembly->blob;
      s1.81 = (unsigned int) s1;
      idx = mono_image_add_stream_data (D.28251, b1, s1.81);
      D.28251 = &assembly->blob;
      s2.82 = (unsigned int) s2;
      mono_image_add_stream_data (D.28251, b2, s2.82);
      D.28245 = assembly->blob_cache;
      idx.83 = (void *) idx;
      monoeg_g_hash_table_insert_replace (D.28245, copy, idx.83, 0);
      <D.28250>:
      D.28255 = idx;
      return D.28255;
    }
  finally
    {
      oldkey = {CLOBBER};
      oldval = {CLOBBER};
    }
}


sigbuffer_free (struct SigBuffer * buf)
{
  char * D.28258;

  D.28258 = buf->buf;
  monoeg_g_free (D.28258);
}


method_encode_code (struct MonoDynamicImage * assembly, struct ReflectionMethodBuilder * mb)
{
  unsigned int D.28261;
  unsigned int D.28262;
  unsigned int D.28264;
  unsigned int D.28265;
  guint32 D.28266;
  struct MonoReflectionILGen * D.28267;
  int D.28270;
  gint32 iftmp.84;
  struct MonoArray * D.28272;
  unsigned int D.28275;
  struct MonoArray * D.28277;
  unsigned int D.28280;
  struct MonoString * D.28284;
  struct MonoDynamicStream * D.28285;
  int iftmp.85;
  _Bool D.28289;
  _Bool D.28290;
  _Bool D.28291;
  unsigned int D.28299;
  char D.28301;
  char D.28302;
  char flags.86;
  char flags.87;
  int D.28309;
  struct MonoGHashTable * D.28312;
  unsigned int D.28313;
  void * D.28314;
  char * D.28315;
  unsigned int D.28316;
  unsigned int D.28319;
  unsigned char D.28322;
  char D.28325;
  unsigned int D.28326;
  char D.28327;
  char D.28328;
  short unsigned int short_value.88;
  unsigned int D.28334;
  void * D.28335;
  char * D.28336;
  unsigned int num_exception.89;
  unsigned int D.28340;
  unsigned char D.28341;
  int D.28342;
  unsigned char D.28343;
  int D.28344;
  unsigned char D.28345;
  unsigned int D.28346;
  unsigned int D.28347;
  unsigned int i.90;
  struct MonoArray * D.28349;
  int D.28352;
  int D.28353;
  unsigned int j.91;
  int D.28355;
  unsigned int val.92;
  unsigned int val.93;
  int D.28360;
  unsigned int val.94;
  unsigned int val.95;
  int D.28364;
  unsigned int val.96;
  int D.28366;
  unsigned int val.97;
  struct MonoObject * D.28368;
  struct MonoType * D.28371;
  unsigned int D.28372;
  unsigned int val.98;
  int D.28377;
  unsigned int val.99;
  unsigned int val.100;
  unsigned int D.28381;
  char flags;
  guint32 idx;
  guint32 code_size;
  gint32 max_stack;
  gint32 i;
  gint32 num_locals;
  gint32 num_exception;
  gint maybe_small;
  guint32 fat_flags;
  char fat_header[12];
  guint32 int_value;
  guint16 short_value;
  guint32 local_sig;
  guint32 header_size;
  struct MonoArray * code;
  void fat_header = <<< error >>>;

  try
    {
      flags = 0;
      num_locals = 0;
      num_exception = 0;
      local_sig = 0;
      header_size = 12;
      D.28261 = mb->attrs;
      D.28262 = D.28261 & 9216;
      if (D.28262 != 0) goto <D.28259>; else goto <D.28263>;
      <D.28263>:
      D.28264 = mb->iattrs;
      D.28265 = D.28264 & 4099;
      if (D.28265 != 0) goto <D.28259>; else goto <D.28260>;
      <D.28259>:
      D.28266 = 0;
      return D.28266;
      <D.28260>:
      D.28267 = mb->ilgen;
      if (D.28267 != 0B) goto <D.28268>; else goto <D.28269>;
      <D.28268>:
      D.28267 = mb->ilgen;
      code = D.28267->code;
      D.28267 = mb->ilgen;
      D.28270 = D.28267->code_len;
      code_size = (guint32) D.28270;
      D.28267 = mb->ilgen;
      max_stack = D.28267->max_stack;
      D.28267 = mb->ilgen;
      D.28272 = D.28267->locals;
      if (D.28272 != 0B) goto <D.28273>; else goto <D.28274>;
      <D.28273>:
      D.28267 = mb->ilgen;
      D.28272 = D.28267->locals;
      D.28275 = mono_array_length (D.28272);
      iftmp.84 = (gint32) D.28275;
      goto <D.28276>;
      <D.28274>:
      iftmp.84 = 0;
      <D.28276>:
      num_locals = iftmp.84;
      D.28267 = mb->ilgen;
      D.28277 = D.28267->ex_handlers;
      if (D.28277 != 0B) goto <D.28278>; else goto <D.28279>;
      <D.28278>:
      D.28267 = mb->ilgen;
      D.28280 = method_count_clauses (D.28267);
      num_exception = (gint32) D.28280;
      <D.28279>:
      goto <D.28281>;
      <D.28269>:
      code = mb->code;
      if (code == 0B) goto <D.28282>; else goto <D.28283>;
      <D.28282>:
      {
        char * name;
        char * str;
        struct MonoException * exception;

        D.28284 = mb->name;
        name = mono_string_to_utf8 (D.28284);
        str = monoeg_g_strdup_printf ("Method %s does not have any IL associated", name);
        exception = mono_get_exception_argument (0B, "a method does not have any IL associated");
        monoeg_g_free (str);
        monoeg_g_free (name);
        mono_raise_exception (exception);
      }
      <D.28283>:
      code_size = mono_array_length (code);
      max_stack = 8;
      <D.28281>:
      D.28285 = &assembly->code;
      stream_data_align (D.28285);
      D.28289 = max_stack <= 8;
      D.28290 = num_locals == 0;
      D.28291 = D.28289 & D.28290;
      if (D.28291 != 0) goto <D.28292>; else goto <D.28287>;
      <D.28292>:
      if (num_exception == 0) goto <D.28293>; else goto <D.28287>;
      <D.28293>:
      iftmp.85 = 1;
      goto <D.28288>;
      <D.28287>:
      iftmp.85 = 0;
      <D.28288>:
      maybe_small = iftmp.85;
      if (maybe_small != 0) goto <D.28294>; else goto <D.28295>;
      <D.28294>:
      if (code_size <= 63) goto <D.28298>; else goto <D.28296>;
      <D.28298>:
      D.28299 = code_size & 1;
      if (D.28299 == 0) goto <D.28300>; else goto <D.28296>;
      <D.28300>:
      D.28301 = (char) code_size;
      D.28302 = D.28301 << 2;
      flags.86 = D.28302 | 2;
      flags = flags.86;
      goto <D.28297>;
      <D.28296>:
      if (code_size <= 31) goto <D.28304>; else goto fat_header;
      <D.28304>:
      D.28299 = code_size & 1;
      if (D.28299 != 0) goto <D.28305>; else goto fat_header;
      <D.28305>:
      D.28301 = (char) code_size;
      D.28302 = D.28301 << 2;
      flags.87 = D.28302 | 6;
      flags = flags.87;
      <D.28297>:
      D.28285 = &assembly->code;
      idx = mono_image_add_stream_data (D.28285, &flags, 1);
      D.28267 = mb->ilgen;
      if (D.28267 != 0B) goto <D.28307>; else goto <D.28308>;
      <D.28307>:
      D.28267 = mb->ilgen;
      D.28309 = D.28267->num_token_fixups;
      if (D.28309 != 0) goto <D.28310>; else goto <D.28311>;
      <D.28310>:
      D.28312 = assembly->token_fixups;
      D.28267 = mb->ilgen;
      D.28313 = idx + 1;
      D.28314 = (void *) D.28313;
      mono_g_hash_table_insert (D.28312, D.28267, D.28314);
      <D.28311>:
      <D.28308>:
      D.28285 = &assembly->code;
      D.28315 = mono_array_addr_with_size (code, 1, 0);
      mono_image_add_stream_data (D.28285, D.28315, code_size);
      D.28316 = assembly->text_rva;
      D.28266 = D.28316 + idx;
      return D.28266;
      <D.28295>:
      fat_header:
      if (num_locals != 0) goto <D.28317>; else goto <D.28318>;
      <D.28317>:
      D.28267 = mb->ilgen;
      D.28319 = encode_locals (assembly, D.28267);
      local_sig = D.28319 | 285212672;
      <D.28318>:
      fat_flags = 3;
      if (num_exception != 0) goto <D.28320>; else goto <D.28321>;
      <D.28320>:
      fat_flags = fat_flags | 8;
      <D.28321>:
      D.28322 = mb->init_locals;
      if (D.28322 != 0) goto <D.28323>; else goto <D.28324>;
      <D.28323>:
      fat_flags = fat_flags | 16;
      <D.28324>:
      D.28325 = (char) fat_flags;
      fat_header[0] = D.28325;
      D.28326 = header_size / 4;
      D.28327 = (char) D.28326;
      D.28328 = D.28327 << 4;
      fat_header[1] = D.28328;
      short_value.88 = (short unsigned int) max_stack;
      short_value = short_value.88;
      memcpy (&MEM[(void *)&fat_header + 2B], &short_value, 2);
      int_value = code_size;
      memcpy (&MEM[(void *)&fat_header + 4B], &int_value, 4);
      int_value = local_sig;
      memcpy (&MEM[(void *)&fat_header + 8B], &int_value, 4);
      D.28285 = &assembly->code;
      idx = mono_image_add_stream_data (D.28285, &fat_header, 12);
      D.28267 = mb->ilgen;
      if (D.28267 != 0B) goto <D.28330>; else goto <D.28331>;
      <D.28330>:
      D.28267 = mb->ilgen;
      D.28309 = D.28267->num_token_fixups;
      if (D.28309 != 0) goto <D.28332>; else goto <D.28333>;
      <D.28332>:
      D.28312 = assembly->token_fixups;
      D.28267 = mb->ilgen;
      D.28334 = idx + 12;
      D.28335 = (void *) D.28334;
      mono_g_hash_table_insert (D.28312, D.28267, D.28335);
      <D.28333>:
      <D.28331>:
      D.28285 = &assembly->code;
      D.28336 = mono_array_addr_with_size (code, 1, 0);
      mono_image_add_stream_data (D.28285, D.28336, code_size);
      if (num_exception != 0) goto <D.28337>; else goto <D.28338>;
      <D.28337>:
      {
        unsigned char sheader[4];
        struct MonoILExceptionInfo * ex_info;
        struct MonoILExceptionBlock * ex_block;
        int j;

        try
          {
            D.28285 = &assembly->code;
            stream_data_align (D.28285);
            sheader[0] = 65;
            num_exception.89 = (unsigned int) num_exception;
            D.28340 = num_exception.89 * 24;
            num_exception = (gint32) D.28340;
            num_exception = num_exception + 4;
            D.28341 = (unsigned char) num_exception;
            sheader[1] = D.28341;
            D.28342 = num_exception >> 8;
            D.28343 = (unsigned char) D.28342;
            sheader[2] = D.28343;
            D.28344 = num_exception >> 16;
            D.28345 = (unsigned char) D.28344;
            sheader[3] = D.28345;
            D.28285 = &assembly->code;
            mono_image_add_stream_data (D.28285, &sheader, 4);
            D.28267 = mb->ilgen;
            D.28277 = D.28267->ex_handlers;
            D.28346 = mono_array_length (D.28277);
            D.28347 = D.28346 + 4294967295;
            i = (gint32) D.28347;
            goto <D.21192>;
            <D.21191>:
            D.28267 = mb->ilgen;
            D.28277 = D.28267->ex_handlers;
            i.90 = (unsigned int) i;
            ex_info = mono_array_addr_with_size (D.28277, 16, i.90);
            D.28349 = ex_info->handlers;
            if (D.28349 != 0B) goto <D.28350>; else goto <D.28351>;
            <D.28350>:
            {
              int finally_start;

              D.28352 = ex_info->start;
              D.28353 = ex_info->len;
              finally_start = D.28352 + D.28353;
              j = 0;
              goto <D.21188>;
              <D.21187>:
              {
                guint32 val;

                try
                  {
                    D.28349 = ex_info->handlers;
                    j.91 = (unsigned int) j;
                    ex_block = mono_array_addr_with_size (D.28349, 20, j.91);
                    D.28355 = ex_block->type;
                    val.92 = (unsigned int) D.28355;
                    val = val.92;
                    D.28285 = &assembly->code;
                    mono_image_add_stream_data (D.28285, &val, 4);
                    D.28352 = ex_info->start;
                    val.93 = (unsigned int) D.28352;
                    val = val.93;
                    D.28285 = &assembly->code;
                    mono_image_add_stream_data (D.28285, &val, 4);
                    D.28355 = ex_block->type;
                    if (D.28355 == 2) goto <D.28358>; else goto <D.28359>;
                    <D.28358>:
                    D.28352 = ex_info->start;
                    D.28360 = finally_start - D.28352;
                    val.94 = (unsigned int) D.28360;
                    val = val.94;
                    goto <D.28362>;
                    <D.28359>:
                    D.28353 = ex_info->len;
                    val.95 = (unsigned int) D.28353;
                    val = val.95;
                    <D.28362>:
                    D.28285 = &assembly->code;
                    mono_image_add_stream_data (D.28285, &val, 4);
                    D.28364 = ex_block->start;
                    val.96 = (unsigned int) D.28364;
                    val = val.96;
                    D.28285 = &assembly->code;
                    mono_image_add_stream_data (D.28285, &val, 4);
                    D.28366 = ex_block->len;
                    val.97 = (unsigned int) D.28366;
                    val = val.97;
                    D.28285 = &assembly->code;
                    mono_image_add_stream_data (D.28285, &val, 4);
                    D.28364 = ex_block->start;
                    D.28366 = ex_block->len;
                    finally_start = D.28364 + D.28366;
                    D.28368 = ex_block->extype;
                    if (D.28368 != 0B) goto <D.28369>; else goto <D.28370>;
                    <D.28369>:
                    D.28368 = ex_block->extype;
                    D.28371 = mono_reflection_type_get_handle (D.28368);
                    D.28372 = mono_image_typedef_or_ref (assembly, D.28371);
                    val.98 = mono_metadata_token_from_dor (D.28372);
                    val = val.98;
                    goto <D.28374>;
                    <D.28370>:
                    D.28355 = ex_block->type;
                    if (D.28355 == 1) goto <D.28375>; else goto <D.28376>;
                    <D.28375>:
                    D.28377 = ex_block->filter_offset;
                    val.99 = (unsigned int) D.28377;
                    val = val.99;
                    goto <D.28379>;
                    <D.28376>:
                    val = 0;
                    <D.28379>:
                    <D.28374>:
                    val.100 = val;
                    val = val.100;
                    D.28285 = &assembly->code;
                    mono_image_add_stream_data (D.28285, &val, 4);
                  }
                finally
                  {
                    val = {CLOBBER};
                  }
              }
              j = j + 1;
              <D.21188>:
              j.91 = (unsigned int) j;
              D.28349 = ex_info->handlers;
              D.28381 = mono_array_length (D.28349);
              if (j.91 < D.28381) goto <D.21187>; else goto <D.21189>;
              <D.21189>:
            }
            goto <D.28382>;
            <D.28351>:
            monoeg_g_log (0B, 4, "No clauses for ex info block %d", i);
            <D.21190>:
            goto <D.21190>;
            <D.28382>:
            i = i + -1;
            <D.21192>:
            if (i >= 0) goto <D.21191>; else goto <D.21193>;
            <D.21193>:
          }
        finally
          {
            sheader = {CLOBBER};
          }
      }
      <D.28338>:
      D.28316 = assembly->text_rva;
      D.28266 = D.28316 + idx;
      return D.28266;
    }
  finally
    {
      flags = {CLOBBER};
      fat_header = {CLOBBER};
      int_value = {CLOBBER};
      short_value = {CLOBBER};
    }
}


method_count_clauses (struct MonoReflectionILGen * ilgen)
{
  struct MonoArray * D.28385;
  unsigned int i.101;
  struct MonoArray * D.28387;
  unsigned int D.28390;
  unsigned int D.28392;
  guint32 D.28393;
  guint32 num_clauses;
  int i;
  struct MonoILExceptionInfo * ex_info;

  num_clauses = 0;
  i = 0;
  goto <D.21135>;
  <D.21134>:
  D.28385 = ilgen->ex_handlers;
  i.101 = (unsigned int) i;
  ex_info = mono_array_addr_with_size (D.28385, 16, i.101);
  D.28387 = ex_info->handlers;
  if (D.28387 != 0B) goto <D.28388>; else goto <D.28389>;
  <D.28388>:
  D.28387 = ex_info->handlers;
  D.28390 = mono_array_length (D.28387);
  num_clauses = D.28390 + num_clauses;
  goto <D.28391>;
  <D.28389>:
  num_clauses = num_clauses + 1;
  <D.28391>:
  i = i + 1;
  <D.21135>:
  i.101 = (unsigned int) i;
  D.28385 = ilgen->ex_handlers;
  D.28392 = mono_array_length (D.28385);
  if (i.101 < D.28392) goto <D.21134>; else goto <D.21136>;
  <D.21136>:
  D.28393 = num_clauses;
  return D.28393;
}


encode_locals (struct MonoDynamicImage * assembly, struct MonoReflectionILGen * ilgen)
{
  struct MonoArray * D.28395;
  unsigned int i.102;
  char * D.28397;
  unsigned char D.28398;
  struct MonoObject * D.28401;
  unsigned int i.103;
  struct GHashTable * D.28403;
  struct GHashTable * D.28406;
  const void * sig_idx.104;
  void * D.28408;
  guint32 D.28411;
  unsigned int D.28412;
  unsigned int idx.105;
  unsigned int D.28414;
  unsigned int D.28415;
  unsigned int D.28416;
  guint32 * D.28417;
  unsigned int D.28418;
  void * sig_idx.106;
  void * idx.107;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 idx;
  guint32 sig_idx;
  guint nl;
  struct SigBuffer buf;
  int i;

  try
    {
      D.28395 = ilgen->locals;
      nl = mono_array_length (D.28395);
      sigbuffer_init (&buf, 32);
      sigbuffer_add_value (&buf, 7);
      sigbuffer_add_value (&buf, nl);
      i = 0;
      goto <D.21126>;
      <D.21125>:
      {
        struct MonoReflectionLocalBuilder * lb;

        D.28395 = ilgen->locals;
        i.102 = (unsigned int) i;
        D.28397 = mono_array_addr_with_size (D.28395, 4, i.102);
        lb = MEM[(struct MonoReflectionLocalBuilder * *)D.28397];
        D.28398 = lb->is_pinned;
        if (D.28398 != 0) goto <D.28399>; else goto <D.28400>;
        <D.28399>:
        sigbuffer_add_value (&buf, 69);
        <D.28400>:
        D.28401 = lb->type;
        encode_reflection_type (assembly, D.28401, &buf);
      }
      i = i + 1;
      <D.21126>:
      i.103 = (unsigned int) i;
      if (i.103 < nl) goto <D.21125>; else goto <D.21127>;
      <D.21127>:
      sig_idx = sigbuffer_add_to_blob_cached (assembly, &buf);
      sigbuffer_free (&buf);
      D.28403 = assembly->standalonesig_cache;
      if (D.28403 == 0B) goto <D.28404>; else goto <D.28405>;
      <D.28404>:
      D.28406 = monoeg_g_hash_table_new (0B, 0B);
      assembly->standalonesig_cache = D.28406;
      <D.28405>:
      D.28403 = assembly->standalonesig_cache;
      sig_idx.104 = (const void *) sig_idx;
      D.28408 = monoeg_g_hash_table_lookup (D.28403, sig_idx.104);
      idx = (guint32) D.28408;
      if (idx != 0) goto <D.28409>; else goto <D.28410>;
      <D.28409>:
      D.28411 = idx;
      return D.28411;
      <D.28410>:
      table = &assembly->tables[17];
      D.28412 = table->next_idx;
      idx.105 = D.28412;
      D.28414 = idx.105 + 1;
      table->next_idx = D.28414;
      idx = idx.105;
      D.28415 = table->rows;
      D.28416 = D.28415 + 1;
      table->rows = D.28416;
      D.28415 = table->rows;
      alloc_table (table, D.28415);
      D.28417 = table->values;
      D.28418 = idx * 4;
      values = D.28417 + D.28418;
      *values = sig_idx;
      D.28403 = assembly->standalonesig_cache;
      sig_idx.106 = (void *) sig_idx;
      idx.107 = (void *) idx;
      monoeg_g_hash_table_insert_replace (D.28403, sig_idx.106, idx.107, 0);
      D.28411 = idx;
      return D.28411;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


stream_data_align (struct MonoDynamicStream * stream)
{
  unsigned int D.28423;
  unsigned int D.28426;
  char buf[4];
  guint32 count;

  try
    {
      buf = {};
      D.28423 = stream->index;
      count = D.28423 & 3;
      if (count != 0) goto <D.28424>; else goto <D.28425>;
      <D.28424>:
      D.28426 = 4 - count;
      mono_image_add_stream_data (stream, &buf, D.28426);
      <D.28425>:
    }
  finally
    {
      buf = {CLOBBER};
    }
}


encode_marshal_blob (struct MonoDynamicImage * assembly, struct MonoReflectionMarshal * minfo)
{
  int D.28427;
  unsigned int D.28428;
  int D.28429;
  unsigned int D.28430;
  int D.28433;
  unsigned char D.28435;
  unsigned int D.28436;
  guint32 iftmp.108;
  int D.28440;
  guint32 iftmp.109;
  _Bool D.28448;
  unsigned int D.28449;
  struct MonoString * D.28452;
  struct MonoString * D.28459;
  struct MonoObject * D.28461;
  struct MonoType * D.28464;
  struct MonoString * D.28466;
  guint32 D.28470;
  char * str;
  struct SigBuffer buf;
  guint32 idx;
  guint32 len;

  try
    {
      sigbuffer_init (&buf, 32);
      D.28427 = minfo->type;
      D.28428 = (unsigned int) D.28427;
      sigbuffer_add_value (&buf, D.28428);
      D.28427 = minfo->type;
      switch (D.28427) <default: <D.21454>, case 23: <D.21448>, case 29: <D.21452>, case 30: <D.21449>, case 42: <D.21451>, case 44: <D.21453>>
      <D.21448>:
      <D.21449>:
      D.28429 = minfo->count;
      D.28430 = (unsigned int) D.28429;
      sigbuffer_add_value (&buf, D.28430);
      goto <D.21450>;
      <D.21451>:
      D.28433 = minfo->eltype;
      if (D.28433 != 0) goto <D.28431>; else goto <D.28434>;
      <D.28434>:
      D.28435 = minfo->has_size;
      if (D.28435 != 0) goto <D.28431>; else goto <D.28432>;
      <D.28431>:
      D.28433 = minfo->eltype;
      D.28436 = (unsigned int) D.28433;
      sigbuffer_add_value (&buf, D.28436);
      D.28435 = minfo->has_size;
      if (D.28435 != 0) goto <D.28437>; else goto <D.28438>;
      <D.28437>:
      D.28440 = minfo->param_num;
      if (D.28440 != -1) goto <D.28441>; else goto <D.28442>;
      <D.28441>:
      D.28440 = minfo->param_num;
      iftmp.108 = (guint32) D.28440;
      goto <D.28443>;
      <D.28442>:
      iftmp.108 = 0;
      <D.28443>:
      sigbuffer_add_value (&buf, iftmp.108);
      D.28429 = minfo->count;
      if (D.28429 != -1) goto <D.28445>; else goto <D.28446>;
      <D.28445>:
      D.28429 = minfo->count;
      iftmp.109 = (guint32) D.28429;
      goto <D.28447>;
      <D.28446>:
      iftmp.109 = 0;
      <D.28447>:
      sigbuffer_add_value (&buf, iftmp.109);
      D.28440 = minfo->param_num;
      D.28448 = D.28440 != -1;
      D.28449 = (unsigned int) D.28448;
      sigbuffer_add_value (&buf, D.28449);
      <D.28438>:
      <D.28432>:
      goto <D.21450>;
      <D.21452>:
      D.28433 = minfo->eltype;
      if (D.28433 != 0) goto <D.28450>; else goto <D.28451>;
      <D.28450>:
      D.28433 = minfo->eltype;
      D.28436 = (unsigned int) D.28433;
      sigbuffer_add_value (&buf, D.28436);
      <D.28451>:
      goto <D.21450>;
      <D.21453>:
      D.28452 = minfo->guid;
      if (D.28452 != 0B) goto <D.28453>; else goto <D.28454>;
      <D.28453>:
      D.28452 = minfo->guid;
      str = mono_string_to_utf8 (D.28452);
      len = strlen (str);
      sigbuffer_add_value (&buf, len);
      sigbuffer_add_mem (&buf, str, len);
      monoeg_g_free (str);
      goto <D.28455>;
      <D.28454>:
      sigbuffer_add_value (&buf, 0);
      <D.28455>:
      sigbuffer_add_value (&buf, 0);
      D.28459 = minfo->marshaltype;
      if (D.28459 != 0B) goto <D.28456>; else goto <D.28460>;
      <D.28460>:
      D.28461 = minfo->marshaltyperef;
      if (D.28461 != 0B) goto <D.28456>; else goto <D.28457>;
      <D.28456>:
      D.28461 = minfo->marshaltyperef;
      if (D.28461 != 0B) goto <D.28462>; else goto <D.28463>;
      <D.28462>:
      D.28461 = minfo->marshaltyperef;
      D.28464 = mono_reflection_type_get_handle (D.28461);
      str = type_get_fully_qualified_name (D.28464);
      goto <D.28465>;
      <D.28463>:
      D.28459 = minfo->marshaltype;
      str = mono_string_to_utf8 (D.28459);
      <D.28465>:
      len = strlen (str);
      sigbuffer_add_value (&buf, len);
      sigbuffer_add_mem (&buf, str, len);
      monoeg_g_free (str);
      goto <D.28458>;
      <D.28457>:
      sigbuffer_add_value (&buf, 0);
      <D.28458>:
      D.28466 = minfo->mcookie;
      if (D.28466 != 0B) goto <D.28467>; else goto <D.28468>;
      <D.28467>:
      D.28466 = minfo->mcookie;
      str = mono_string_to_utf8 (D.28466);
      len = strlen (str);
      sigbuffer_add_value (&buf, len);
      sigbuffer_add_mem (&buf, str, len);
      monoeg_g_free (str);
      goto <D.28469>;
      <D.28468>:
      sigbuffer_add_value (&buf, 0);
      <D.28469>:
      goto <D.21450>;
      <D.21454>:
      goto <D.21450>;
      <D.21450>:
      idx = sigbuffer_add_to_blob_cached (assembly, &buf);
      sigbuffer_free (&buf);
      D.28470 = idx;
      return D.28470;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


type_get_fully_qualified_name (struct MonoType * type)
{
  char * D.28474;

  D.28474 = mono_type_get_name_full (type, 3);
  return D.28474;
}


sigbuffer_add_mem (struct SigBuffer * buf, char * p, guint32 size)
{
  int size.110;
  char * D.28477;
  char * D.28478;

  size.110 = (int) size;
  sigbuffer_make_room (buf, size.110);
  D.28477 = buf->p;
  memcpy (D.28477, p, size);
  D.28477 = buf->p;
  D.28478 = D.28477 + size;
  buf->p = D.28478;
}


encode_constant (struct MonoDynamicImage * assembly, struct MonoObject * val, guint32 * ret_type)
{
  struct MonoVTable * D.28482;
  struct MonoClass * D.28483;
  unsigned char D.28484;
  unsigned int D.28485;
  unsigned int D.28486;
  unsigned char D.28487;
  unsigned char D.28488;
  struct MonoType * D.28491;
  unsigned char D.28492;
  unsigned int D.28493;
  struct MonoImage * D.28496;
  int D.28497;
  int D.21423;
  int iftmp.111;
  int D.21422;
  const char[7] * D.28502;
  unsigned char D.28503;
  int D.28504;
  unsigned char D.28505;
  int D.28506;
  _Bool D.28507;
  _Bool D.28508;
  _Bool D.28509;
  const unsigned char * D.28512;
  unsigned char D.28513;
  int D.28514;
  const unsigned char * D.28515;
  unsigned char D.28516;
  int D.28517;
  _Bool D.28518;
  _Bool D.28519;
  const unsigned char * D.28522;
  unsigned char D.28523;
  int D.28524;
  const unsigned char * D.28525;
  unsigned char D.28526;
  int D.28527;
  _Bool D.28528;
  _Bool D.28529;
  const unsigned char * D.28532;
  unsigned char D.28533;
  int D.28534;
  const unsigned char * D.28535;
  unsigned char D.28536;
  int D.28537;
  const char * D.28539;
  int D.21432;
  int iftmp.112;
  int D.21431;
  const char[9] * D.28544;
  unsigned char D.28545;
  int D.28546;
  unsigned char D.28547;
  int D.28548;
  _Bool D.28549;
  _Bool D.28550;
  _Bool D.28551;
  const unsigned char * D.28554;
  unsigned char D.28555;
  int D.28556;
  const unsigned char * D.28557;
  unsigned char D.28558;
  int D.28559;
  _Bool D.28560;
  _Bool D.28561;
  const unsigned char * D.28564;
  unsigned char D.28565;
  int D.28566;
  const unsigned char * D.28567;
  unsigned char D.28568;
  int D.28569;
  _Bool D.28570;
  _Bool D.28571;
  const unsigned char * D.28574;
  unsigned char D.28575;
  int D.28576;
  const unsigned char * D.28577;
  unsigned char D.28578;
  int D.28579;
  const char * D.28581;
  int D.28583;
  int D.28584;
  char * b.113;
  int b.114;
  int blob_size.115;
  int D.28588;
  mono_unichar2 * D.28589;
  int len.116;
  guint32 D.28591;
  struct MonoGenericClass * D.28592;
  struct MonoClass * D.28593;
  unsigned char D.28594;
  unsigned int D.28595;
  char blob_size[64];
  char * b;
  char * p;
  char * box_val;
  char * buf;
  guint32 idx;
  guint32 len;
  guint32 dummy;
  void handle_enum = <<< error >>>;

  try
    {
      b = &blob_size;
      idx = 0;
      len = 0;
      dummy = 0;
      buf = monoeg_malloc (64);
      p = buf;
      if (val == 0B) goto <D.28479>; else goto <D.28480>;
      <D.28479>:
      *ret_type = 18;
      len = 4;
      box_val = &dummy;
      goto <D.28481>;
      <D.28480>:
      box_val = val + 8;
      D.28482 = val->vtable;
      D.28483 = D.28482->klass;
      D.28484 = D.28483->byval_arg.type;
      D.28485 = (unsigned int) D.28484;
      *ret_type = D.28485;
      <D.28481>:
      handle_enum:
      D.28486 = *ret_type;
      switch (D.28486) <default: <D.21438>, case 2: <D.21400>, case 3: <D.21404>, case 4: <D.21402>, case 5: <D.21401>, case 6: <D.21406>, case 7: <D.21405>, case 8: <D.21408>, case 9: <D.21407>, case 10: <D.21411>, case 11: <D.21410>, case 12: <D.21409>, case 13: <D.21412>, case 14: <D.21435>, case 17: <D.21413>, case 18: <D.21434>, case 21: <D.21437>>
      <D.21400>:
      <D.21401>:
      <D.21402>:
      len = 1;
      goto <D.21403>;
      <D.21404>:
      <D.21405>:
      <D.21406>:
      len = 2;
      goto <D.21403>;
      <D.21407>:
      <D.21408>:
      <D.21409>:
      len = 4;
      goto <D.21403>;
      <D.21410>:
      <D.21411>:
      len = 8;
      goto <D.21403>;
      <D.21412>:
      len = 8;
      goto <D.21403>;
      <D.21413>:
      {
        struct MonoClass * klass;

        D.28482 = val->vtable;
        klass = D.28482->klass;
        D.28487 = BIT_FIELD_REF <*klass, 8, 160>;
        D.28488 = D.28487 & 16;
        if (D.28488 != 0) goto <D.28489>; else goto <D.28490>;
        <D.28489>:
        D.28491 = mono_class_enum_basetype (klass);
        D.28492 = D.28491->type;
        D.28493 = (unsigned int) D.28492;
        *ret_type = D.28493;
        goto handle_enum;
        <D.28490>:
        D.28496 = klass->image;
        D.28497 = mono_is_corlib_image (D.28496);
        if (D.28497 != 0) goto <D.28498>; else goto <D.28494>;
        <D.28498>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = klass->name_space;
            D.28502 = "System";
            D.28503 = MEM[(const unsigned char *)D.28502];
            D.28504 = (int) D.28503;
            D.28505 = *__s2;
            D.28506 = (int) D.28505;
            __result = D.28504 - D.28506;
            {
              D.28507 = __s2_len != 0;
              D.28508 = __result == 0;
              D.28509 = D.28507 & D.28508;
              if (D.28509 != 0) goto <D.28510>; else goto <D.28511>;
              <D.28510>:
              D.28512 = &MEM[(void *)"System" + 1B];
              D.28513 = *D.28512;
              D.28514 = (int) D.28513;
              D.28515 = __s2 + 1;
              D.28516 = *D.28515;
              D.28517 = (int) D.28516;
              __result = D.28514 - D.28517;
              D.28518 = __s2_len > 1;
              D.28508 = __result == 0;
              D.28519 = D.28518 & D.28508;
              if (D.28519 != 0) goto <D.28520>; else goto <D.28521>;
              <D.28520>:
              D.28522 = &MEM[(void *)"System" + 2B];
              D.28523 = *D.28522;
              D.28524 = (int) D.28523;
              D.28525 = __s2 + 2;
              D.28526 = *D.28525;
              D.28527 = (int) D.28526;
              __result = D.28524 - D.28527;
              D.28528 = __s2_len > 2;
              D.28508 = __result == 0;
              D.28529 = D.28528 & D.28508;
              if (D.28529 != 0) goto <D.28530>; else goto <D.28531>;
              <D.28530>:
              D.28532 = &MEM[(void *)"System" + 3B];
              D.28533 = *D.28532;
              D.28534 = (int) D.28533;
              D.28535 = __s2 + 3;
              D.28536 = *D.28535;
              D.28537 = (int) D.28536;
              __result = D.28534 - D.28537;
              <D.28531>:
              <D.28521>:
              <D.28511>:
            }
            D.21422 = __result;
          }
          iftmp.111 = -D.21422;
          goto <D.28538>;
          <D.28501>:
          D.28539 = klass->name_space;
          iftmp.111 = __builtin_strcmp (D.28539, "System");
          <D.28538>:
          D.21423 = iftmp.111;
        }
        if (D.21423 == 0) goto <D.28540>; else goto <D.28494>;
        <D.28540>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = klass->name;
            D.28544 = "DateTime";
            D.28545 = MEM[(const unsigned char *)D.28544];
            D.28546 = (int) D.28545;
            D.28547 = *__s2;
            D.28548 = (int) D.28547;
            __result = D.28546 - D.28548;
            {
              D.28549 = __s2_len != 0;
              D.28550 = __result == 0;
              D.28551 = D.28549 & D.28550;
              if (D.28551 != 0) goto <D.28552>; else goto <D.28553>;
              <D.28552>:
              D.28554 = &MEM[(void *)"DateTime" + 1B];
              D.28555 = *D.28554;
              D.28556 = (int) D.28555;
              D.28557 = __s2 + 1;
              D.28558 = *D.28557;
              D.28559 = (int) D.28558;
              __result = D.28556 - D.28559;
              D.28560 = __s2_len > 1;
              D.28550 = __result == 0;
              D.28561 = D.28560 & D.28550;
              if (D.28561 != 0) goto <D.28562>; else goto <D.28563>;
              <D.28562>:
              D.28564 = &MEM[(void *)"DateTime" + 2B];
              D.28565 = *D.28564;
              D.28566 = (int) D.28565;
              D.28567 = __s2 + 2;
              D.28568 = *D.28567;
              D.28569 = (int) D.28568;
              __result = D.28566 - D.28569;
              D.28570 = __s2_len > 2;
              D.28550 = __result == 0;
              D.28571 = D.28570 & D.28550;
              if (D.28571 != 0) goto <D.28572>; else goto <D.28573>;
              <D.28572>:
              D.28574 = &MEM[(void *)"DateTime" + 3B];
              D.28575 = *D.28574;
              D.28576 = (int) D.28575;
              D.28577 = __s2 + 3;
              D.28578 = *D.28577;
              D.28579 = (int) D.28578;
              __result = D.28576 - D.28579;
              <D.28573>:
              <D.28563>:
              <D.28553>:
            }
            D.21431 = __result;
          }
          iftmp.112 = -D.21431;
          goto <D.28580>;
          <D.28543>:
          D.28581 = klass->name;
          iftmp.112 = __builtin_strcmp (D.28581, "DateTime");
          <D.28580>:
          D.21432 = iftmp.112;
        }
        if (D.21432 == 0) goto <D.28582>; else goto <D.28494>;
        <D.28582>:
        len = 8;
        goto <D.28495>;
        <D.28494>:
        monoeg_g_log (0B, 4, "we can\'t encode valuetypes, we should have never reached this line");
        <D.21433>:
        goto <D.21433>;
        <D.28495>:
        goto <D.21403>;
      }
      <D.21434>:
      goto <D.21403>;
      <D.21435>:
      {
        struct MonoString * str;

        str = val;
        D.28583 = str->length;
        D.28584 = D.28583 * 2;
        len = (guint32) D.28584;
        b.113 = b;
        mono_metadata_encode_value (len, b.113, &b);
        b.113 = b;
        b.114 = (int) b.113;
        blob_size.115 = (int) &blob_size;
        D.28588 = b.114 - blob_size.115;
        D.28589 = mono_string_chars (str);
        len.116 = (int) len;
        idx = add_to_blob_cached (assembly, &blob_size, D.28588, D.28589, len.116);
        monoeg_g_free (buf);
        D.28591 = idx;
        return D.28591;
      }
      <D.21437>:
      D.28482 = val->vtable;
      D.28483 = D.28482->klass;
      D.28592 = D.28483->generic_class;
      D.28593 = D.28592->container_class;
      D.28594 = D.28593->byval_arg.type;
      D.28595 = (unsigned int) D.28594;
      *ret_type = D.28595;
      goto handle_enum;
      <D.21438>:
      D.28486 = *ret_type;
      monoeg_g_log (0B, 4, "we don\'t encode constant type 0x%02x yet", D.28486);
      <D.21439>:
      goto <D.21439>;
      <D.21403>:
      b.113 = b;
      mono_metadata_encode_value (len, b.113, &b);
      b.113 = b;
      b.114 = (int) b.113;
      blob_size.115 = (int) &blob_size;
      D.28588 = b.114 - blob_size.115;
      len.116 = (int) len;
      idx = add_to_blob_cached (assembly, &blob_size, D.28588, box_val, len.116);
      monoeg_g_free (buf);
      D.28591 = idx;
      return D.28591;
    }
  finally
    {
      blob_size = {CLOBBER};
      b = {CLOBBER};
      dummy = {CLOBBER};
    }
}


find_index_in_table (struct MonoDynamicImage * assembly, int table_idx, int col, guint32 token)
{
  unsigned char D.28599;
  int D.28600;
  _Bool D.28601;
  long int D.28602;
  long int D.28603;
  guint32 * D.28606;
  unsigned int D.28607;
  unsigned int D.28608;
  unsigned int col.117;
  unsigned int D.28610;
  guint32 * D.28611;
  unsigned int D.28612;
  guint32 D.28615;
  unsigned int i.118;
  unsigned int D.28617;
  int i;
  struct MonoDynamicTable * table;
  guint32 * values;

  table = &assembly->tables[table_idx];
  D.28599 = table->columns;
  D.28600 = (int) D.28599;
  D.28601 = D.28600 <= col;
  D.28602 = (long int) D.28601;
  D.28603 = __builtin_expect (D.28602, 0);
  if (D.28603 != 0) goto <D.28604>; else goto <D.28605>;
  <D.28604>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 1155, "col < table->columns");
  <D.28605>:
  D.28606 = table->values;
  D.28599 = table->columns;
  D.28607 = (unsigned int) D.28599;
  D.28608 = D.28607 * 4;
  values = D.28606 + D.28608;
  i = 1;
  goto <D.21204>;
  <D.21203>:
  col.117 = (unsigned int) col;
  D.28610 = col.117 * 4;
  D.28611 = values + D.28610;
  D.28612 = *D.28611;
  if (D.28612 == token) goto <D.28613>; else goto <D.28614>;
  <D.28613>:
  D.28615 = (guint32) i;
  return D.28615;
  <D.28614>:
  D.28599 = table->columns;
  D.28607 = (unsigned int) D.28599;
  D.28608 = D.28607 * 4;
  values = values + D.28608;
  i = i + 1;
  <D.21204>:
  i.118 = (unsigned int) i;
  D.28617 = table->rows;
  if (i.118 <= D.28617) goto <D.21203>; else goto <D.21205>;
  <D.21205>:
  D.28615 = 0;
  return D.28615;
}


mono_image_get_generic_param_info (struct MonoReflectionGenericParam * gparam, guint32 owner, struct MonoDynamicImage * assembly)
{
  int D.28619;
  struct MonoReflectionGenericParam * * D.28624;
  void * D.28625;
  struct GPtrArray * D.28626;
  struct GenericParamTableEntry * entry;

  entry = monoeg_malloc0 (8);
  entry->owner = owner;
  D.28619 = mono_gc_is_moving ();
  if (D.28619 != 0) goto <D.28620>; else goto <D.28621>;
  <D.28620>:
  if (0 != 0) goto <D.28622>; else goto <D.28623>;
  <D.28622>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 2206, "sizeof (entry->gparam) == sizeof (MonoObject*)");
  <D.28623>:
  D.28624 = &entry->gparam;
  D.28625 = mono_gc_make_root_descr_all_refs (1);
  mono_gc_register_root (D.28624, 4, D.28625);
  <D.28621>:
  entry->gparam = gparam;
  D.28626 = assembly->gen_params;
  monoeg_g_ptr_array_add (D.28626, entry);
}


mono_image_get_field_info (struct MonoReflectionFieldBuilder * fb, struct MonoDynamicImage * assembly)
{
  unsigned int D.28627;
  unsigned int D.28628;
  unsigned int D.28631;
  unsigned int D.28632;
  unsigned int D.28633;
  unsigned int D.28634;
  int D.28635;
  struct GHashTable * D.28636;
  struct MonoClassField * D.28637;
  int D.28638;
  void * D.28639;
  guint32 * D.28640;
  unsigned int D.28641;
  unsigned int D.28642;
  guint32 * D.28643;
  struct MonoDynamicStream * D.28644;
  struct MonoString * D.28645;
  unsigned int D.28646;
  guint32 * D.28647;
  unsigned int D.28648;
  int D.28649;
  unsigned int D.28652;
  unsigned int D.28653;
  unsigned int D.28654;
  unsigned int D.28655;
  unsigned int D.28656;
  unsigned int D.28659;
  int D.28660;
  unsigned int D.28661;
  guint32 * D.28662;
  struct MonoObject * D.28663;
  unsigned int D.28664;
  unsigned int field_type.119;
  unsigned int D.28666;
  struct MonoArray * D.28669;
  unsigned int D.28672;
  struct MonoDynamicStream * D.28675;
  char * D.28676;
  unsigned int D.28677;
  struct MonoClass * D.28679;
  int D.28680;
  unsigned int D.28681;
  unsigned int D.28682;
  unsigned int D.28683;
  struct MonoReflectionMarshal * D.28684;
  int D.28687;
  unsigned int D.28688;
  unsigned int D.28689;
  struct MonoDynamicTable * table;
  guint32 * values;

  D.28627 = fb->attrs;
  D.28628 = D.28627 & 64;
  if (D.28628 != 0) goto <D.28629>; else goto <D.28630>;
  <D.28629>:
  D.28627 = fb->attrs;
  D.28631 = D.28627 | 32768;
  fb->attrs = D.28631;
  <D.28630>:
  table = &assembly->tables[4];
  D.28632 = table->next_idx;
  D.28633 = D.28632;
  D.28634 = D.28633 + 1;
  table->next_idx = D.28634;
  D.28635 = (int) D.28633;
  fb->table_idx = D.28635;
  D.28636 = assembly->field_to_table_idx;
  D.28637 = fb->handle;
  D.28638 = fb->table_idx;
  D.28639 = (void *) D.28638;
  monoeg_g_hash_table_insert_replace (D.28636, D.28637, D.28639, 0);
  D.28640 = table->values;
  D.28638 = fb->table_idx;
  D.28641 = (unsigned int) D.28638;
  D.28642 = D.28641 * 12;
  values = D.28640 + D.28642;
  D.28643 = values + 4;
  D.28644 = &assembly->sheap;
  D.28645 = fb->name;
  D.28646 = string_heap_insert_mstring (D.28644, D.28645);
  *D.28643 = D.28646;
  D.28627 = fb->attrs;
  *values = D.28627;
  D.28647 = values + 8;
  D.28648 = field_encode_signature (assembly, fb);
  *D.28647 = D.28648;
  D.28649 = fb->offset;
  if (D.28649 != -1) goto <D.28650>; else goto <D.28651>;
  <D.28650>:
  table = &assembly->tables[16];
  D.28652 = table->rows;
  D.28653 = D.28652 + 1;
  table->rows = D.28653;
  D.28652 = table->rows;
  alloc_table (table, D.28652);
  D.28640 = table->values;
  D.28652 = table->rows;
  D.28654 = D.28652 * 8;
  values = D.28640 + D.28654;
  D.28643 = values + 4;
  D.28638 = fb->table_idx;
  D.28655 = (unsigned int) D.28638;
  *D.28643 = D.28655;
  D.28649 = fb->offset;
  D.28656 = (unsigned int) D.28649;
  *values = D.28656;
  <D.28651>:
  D.28627 = fb->attrs;
  D.28628 = D.28627 & 64;
  if (D.28628 != 0) goto <D.28657>; else goto <D.28658>;
  <D.28657>:
  {
    guint32 field_type;

    try
      {
        field_type = 0;
        table = &assembly->tables[11];
        D.28652 = table->rows;
        D.28653 = D.28652 + 1;
        table->rows = D.28653;
        D.28652 = table->rows;
        alloc_table (table, D.28652);
        D.28640 = table->values;
        D.28652 = table->rows;
        D.28659 = D.28652 * 16;
        values = D.28640 + D.28659;
        D.28647 = values + 8;
        D.28638 = fb->table_idx;
        D.28660 = D.28638 << 2;
        D.28661 = (unsigned int) D.28660;
        *D.28647 = D.28661;
        D.28662 = values + 12;
        D.28663 = fb->def_value;
        D.28664 = encode_constant (assembly, D.28663, &field_type);
        *D.28662 = D.28664;
        field_type.119 = field_type;
        *values = field_type.119;
        D.28643 = values + 4;
        *D.28643 = 0;
      }
    finally
      {
        field_type = {CLOBBER};
      }
  }
  <D.28658>:
  D.28627 = fb->attrs;
  D.28666 = D.28627 & 256;
  if (D.28666 != 0) goto <D.28667>; else goto <D.28668>;
  <D.28667>:
  {
    guint32 rva_idx;

    table = &assembly->tables[29];
    D.28652 = table->rows;
    D.28653 = D.28652 + 1;
    table->rows = D.28653;
    D.28652 = table->rows;
    alloc_table (table, D.28652);
    D.28640 = table->values;
    D.28652 = table->rows;
    D.28654 = D.28652 * 8;
    values = D.28640 + D.28654;
    D.28643 = values + 4;
    D.28638 = fb->table_idx;
    D.28655 = (unsigned int) D.28638;
    *D.28643 = D.28655;
    D.28669 = fb->rva_data;
    if (D.28669 != 0B) goto <D.28670>; else goto <D.28671>;
    <D.28670>:
    D.28669 = fb->rva_data;
    D.28672 = mono_array_length (D.28669);
    if (D.28672 > 9) goto <D.28673>; else goto <D.28674>;
    <D.28673>:
    D.28675 = &assembly->code;
    stream_data_align (D.28675);
    <D.28674>:
    D.28675 = &assembly->code;
    D.28669 = fb->rva_data;
    D.28676 = mono_array_addr_with_size (D.28669, 1, 0);
    D.28669 = fb->rva_data;
    D.28677 = mono_array_length (D.28669);
    rva_idx = mono_image_add_stream_data (D.28675, D.28676, D.28677);
    goto <D.28678>;
    <D.28671>:
    D.28675 = &assembly->code;
    D.28637 = fb->handle;
    D.28679 = D.28637->parent;
    D.28680 = mono_class_value_size (D.28679, 0B);
    D.28681 = (unsigned int) D.28680;
    rva_idx = mono_image_add_stream_zero (D.28675, D.28681);
    <D.28678>:
    D.28682 = assembly->text_rva;
    D.28683 = D.28682 + rva_idx;
    *values = D.28683;
  }
  <D.28668>:
  D.28684 = fb->marshal_info;
  if (D.28684 != 0B) goto <D.28685>; else goto <D.28686>;
  <D.28685>:
  table = &assembly->tables[13];
  D.28652 = table->rows;
  D.28653 = D.28652 + 1;
  table->rows = D.28653;
  D.28652 = table->rows;
  alloc_table (table, D.28652);
  D.28640 = table->values;
  D.28652 = table->rows;
  D.28654 = D.28652 * 8;
  values = D.28640 + D.28654;
  D.28638 = fb->table_idx;
  D.28687 = D.28638 << 1;
  D.28688 = (unsigned int) D.28687;
  *values = D.28688;
  D.28643 = values + 4;
  D.28684 = fb->marshal_info;
  D.28689 = encode_marshal_blob (assembly, D.28684);
  *D.28643 = D.28689;
  <D.28686>:
}


field_encode_signature (struct MonoDynamicImage * assembly, struct MonoReflectionFieldBuilder * fb)
{
  struct MonoObject * D.28690;
  struct MonoArray * D.28691;
  struct MonoArray * D.28692;
  struct MonoGenericContainer * D.28693;
  struct MonoGenericInst * D.28698;
  guint32 D.28700;
  struct SigBuffer buf;
  guint32 idx;
  guint32 typespec;
  struct MonoType * type;
  struct MonoClass * class;

  try
    {
      typespec = 0;
      D.28690 = fb->type;
      init_type_builder_generics (D.28690);
      D.28690 = fb->type;
      type = mono_reflection_type_get_handle (D.28690);
      class = mono_class_from_mono_type (type);
      sigbuffer_init (&buf, 32);
      sigbuffer_add_value (&buf, 6);
      D.28691 = fb->modreq;
      D.28692 = fb->modopt;
      encode_custom_modifiers (assembly, D.28691, D.28692, &buf);
      D.28693 = class->generic_container;
      if (D.28693 != 0B) goto <D.28694>; else goto <D.28695>;
      <D.28694>:
      typespec = create_typespec (assembly, type);
      <D.28695>:
      if (typespec != 0) goto <D.28696>; else goto <D.28697>;
      <D.28696>:
      {
        struct MonoGenericClass * gclass;

        D.28693 = class->generic_container;
        D.28698 = D.28693->context.class_inst;
        gclass = mono_metadata_lookup_generic_class (class, D.28698, 1);
        encode_generic_class (assembly, gclass, &buf);
      }
      goto <D.28699>;
      <D.28697>:
      encode_type (assembly, type, &buf);
      <D.28699>:
      idx = sigbuffer_add_to_blob_cached (assembly, &buf);
      sigbuffer_free (&buf);
      D.28700 = idx;
      return D.28700;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


init_type_builder_generics (struct MonoObject * type)
{
  struct MonoVTable * D.28703;
  struct MonoClass * D.28704;
  int D.28705;
  struct MonoGenericContainer * D.28710;
  struct MonoReflectionTypeBuilder * tb;

  D.28703 = type->vtable;
  D.28704 = D.28703->klass;
  D.28705 = is_sre_type_builder (D.28704);
  if (D.28705 == 0) goto <D.28706>; else goto <D.28707>;
  <D.28706>:
  return;
  <D.28707>:
  tb = type;
  if (tb != 0B) goto <D.28708>; else goto <D.28709>;
  <D.28708>:
  D.28710 = tb->generic_container;
  if (D.28710 != 0B) goto <D.28711>; else goto <D.28712>;
  <D.28711>:
  mono_reflection_create_generic_class (tb);
  <D.28712>:
  <D.28709>:
}


is_sre_type_builder (struct MonoClass * class)
{
  struct MonoClass * cached_class.120;
  gboolean D.28717;
  _Bool D.28718;
  int D.28719;
  int D.24779;
  int iftmp.121;
  int D.24775;
  const char[12] * D.28725;
  unsigned char D.28726;
  int D.28727;
  unsigned char D.28728;
  int D.28729;
  _Bool D.28730;
  _Bool D.28731;
  _Bool D.28732;
  const unsigned char * D.28735;
  unsigned char D.28736;
  int D.28737;
  const unsigned char * D.28738;
  unsigned char D.28739;
  int D.28740;
  _Bool D.28741;
  _Bool D.28742;
  const unsigned char * D.28745;
  unsigned char D.28746;
  int D.28747;
  const unsigned char * D.28748;
  unsigned char D.28749;
  int D.28750;
  _Bool D.28751;
  _Bool D.28752;
  const unsigned char * D.28755;
  unsigned char D.28756;
  int D.28757;
  const unsigned char * D.28758;
  unsigned char D.28759;
  int D.28760;
  const char * D.28762;
  int D.24788;
  int iftmp.122;
  int D.24784;
  const char[23] * D.28768;
  unsigned char D.28769;
  int D.28770;
  unsigned char D.28771;
  int D.28772;
  _Bool D.28773;
  _Bool D.28774;
  _Bool D.28775;
  const unsigned char * D.28778;
  unsigned char D.28779;
  int D.28780;
  const unsigned char * D.28781;
  unsigned char D.28782;
  int D.28783;
  _Bool D.28784;
  _Bool D.28785;
  const unsigned char * D.28788;
  unsigned char D.28789;
  int D.28790;
  const unsigned char * D.28791;
  unsigned char D.28792;
  int D.28793;
  _Bool D.28794;
  _Bool D.28795;
  const unsigned char * D.28798;
  unsigned char D.28799;
  int D.28800;
  const unsigned char * D.28801;
  unsigned char D.28802;
  int D.28803;
  const char * D.28805;

  {
    static struct MonoClass * cached_class;

    cached_class.120 = cached_class;
    if (cached_class.120 != 0B) goto <D.28715>; else goto <D.28716>;
    <D.28715>:
    cached_class.120 = cached_class;
    D.28718 = cached_class.120 == class;
    D.28717 = (gboolean) D.28718;
    return D.28717;
    <D.28716>:
    D.28719 = is_corlib_type (class);
    if (D.28719 != 0) goto <D.28720>; else goto <D.28721>;
    <D.28720>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 11;
      if (__s1_len <= 3) goto <D.28723>; else goto <D.28724>;
      <D.28723>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.28725 = "TypeBuilder";
        D.28726 = MEM[(const unsigned char *)D.28725];
        D.28727 = (int) D.28726;
        D.28728 = *__s2;
        D.28729 = (int) D.28728;
        __result = D.28727 - D.28729;
        {
          D.28730 = __s1_len != 0;
          D.28731 = __result == 0;
          D.28732 = D.28730 & D.28731;
          if (D.28732 != 0) goto <D.28733>; else goto <D.28734>;
          <D.28733>:
          D.28735 = &MEM[(void *)"TypeBuilder" + 1B];
          D.28736 = *D.28735;
          D.28737 = (int) D.28736;
          D.28738 = __s2 + 1;
          D.28739 = *D.28738;
          D.28740 = (int) D.28739;
          __result = D.28737 - D.28740;
          D.28741 = __s1_len > 1;
          D.28731 = __result == 0;
          D.28742 = D.28741 & D.28731;
          if (D.28742 != 0) goto <D.28743>; else goto <D.28744>;
          <D.28743>:
          D.28745 = &MEM[(void *)"TypeBuilder" + 2B];
          D.28746 = *D.28745;
          D.28747 = (int) D.28746;
          D.28748 = __s2 + 2;
          D.28749 = *D.28748;
          D.28750 = (int) D.28749;
          __result = D.28747 - D.28750;
          D.28751 = __s1_len > 2;
          D.28731 = __result == 0;
          D.28752 = D.28751 & D.28731;
          if (D.28752 != 0) goto <D.28753>; else goto <D.28754>;
          <D.28753>:
          D.28755 = &MEM[(void *)"TypeBuilder" + 3B];
          D.28756 = *D.28755;
          D.28757 = (int) D.28756;
          D.28758 = __s2 + 3;
          D.28759 = *D.28758;
          D.28760 = (int) D.28759;
          __result = D.28757 - D.28760;
          <D.28754>:
          <D.28744>:
          <D.28734>:
        }
        D.24775 = __result;
      }
      iftmp.121 = D.24775;
      goto <D.28761>;
      <D.28724>:
      D.28762 = class->name;
      iftmp.121 = __builtin_strcmp ("TypeBuilder", D.28762);
      <D.28761>:
      D.24779 = iftmp.121;
    }
    if (D.24779 == 0) goto <D.28763>; else goto <D.28764>;
    <D.28763>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 22;
      if (__s1_len <= 3) goto <D.28766>; else goto <D.28767>;
      <D.28766>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.28768 = "System.Reflection.Emit";
        D.28769 = MEM[(const unsigned char *)D.28768];
        D.28770 = (int) D.28769;
        D.28771 = *__s2;
        D.28772 = (int) D.28771;
        __result = D.28770 - D.28772;
        {
          D.28773 = __s1_len != 0;
          D.28774 = __result == 0;
          D.28775 = D.28773 & D.28774;
          if (D.28775 != 0) goto <D.28776>; else goto <D.28777>;
          <D.28776>:
          D.28778 = &MEM[(void *)"System.Reflection.Emit" + 1B];
          D.28779 = *D.28778;
          D.28780 = (int) D.28779;
          D.28781 = __s2 + 1;
          D.28782 = *D.28781;
          D.28783 = (int) D.28782;
          __result = D.28780 - D.28783;
          D.28784 = __s1_len > 1;
          D.28774 = __result == 0;
          D.28785 = D.28784 & D.28774;
          if (D.28785 != 0) goto <D.28786>; else goto <D.28787>;
          <D.28786>:
          D.28788 = &MEM[(void *)"System.Reflection.Emit" + 2B];
          D.28789 = *D.28788;
          D.28790 = (int) D.28789;
          D.28791 = __s2 + 2;
          D.28792 = *D.28791;
          D.28793 = (int) D.28792;
          __result = D.28790 - D.28793;
          D.28794 = __s1_len > 2;
          D.28774 = __result == 0;
          D.28795 = D.28794 & D.28774;
          if (D.28795 != 0) goto <D.28796>; else goto <D.28797>;
          <D.28796>:
          D.28798 = &MEM[(void *)"System.Reflection.Emit" + 3B];
          D.28799 = *D.28798;
          D.28800 = (int) D.28799;
          D.28801 = __s2 + 3;
          D.28802 = *D.28801;
          D.28803 = (int) D.28802;
          __result = D.28800 - D.28803;
          <D.28797>:
          <D.28787>:
          <D.28777>:
        }
        D.24784 = __result;
      }
      iftmp.122 = D.24784;
      goto <D.28804>;
      <D.28767>:
      D.28805 = class->name_space;
      iftmp.122 = __builtin_strcmp ("System.Reflection.Emit", D.28805);
      <D.28804>:
      D.24788 = iftmp.122;
    }
    if (D.24788 == 0) goto <D.28806>; else goto <D.28807>;
    <D.28806>:
    cached_class = class;
    D.28717 = 1;
    return D.28717;
    <D.28807>:
    <D.28764>:
    <D.28721>:
    D.28717 = 0;
    return D.28717;
  }
}


is_corlib_type (struct MonoClass * class)
{
  gboolean D.28809;
  struct MonoImage * D.28810;
  struct MonoImage * D.28811;
  _Bool D.28812;

  D.28810 = class->image;
  D.28811 = mono_defaults.corlib;
  D.28812 = D.28810 == D.28811;
  D.28809 = (gboolean) D.28812;
  return D.28809;
}


mono_image_add_stream_zero (struct MonoDynamicStream * stream, guint32 len)
{
  unsigned int D.28814;
  unsigned int D.28815;
  int D.28816;
  char * D.28817;
  void * D.28818;
  guint32 D.28819;
  guint32 idx;

  D.28814 = stream->index;
  D.28815 = D.28814 + len;
  D.28816 = (int) D.28815;
  make_room_in_stream (stream, D.28816);
  D.28817 = stream->data;
  D.28814 = stream->index;
  D.28818 = D.28817 + D.28814;
  memset (D.28818, 0, len);
  idx = stream->index;
  D.28814 = stream->index;
  D.28815 = D.28814 + len;
  stream->index = D.28815;
  D.28819 = idx;
  return D.28819;
}


mono_image_fill_module_table (struct MonoDomain * domain, struct MonoReflectionModuleBuilder * mb, struct MonoDynamicImage * assembly)
{
  unsigned int D.28821;
  unsigned int D.28822;
  unsigned int D.28823;
  guint32 * D.28824;
  unsigned int D.28825;
  unsigned int D.28826;
  sizetype D.28827;
  guint32 * D.28828;
  struct MonoDynamicStream * D.28829;
  struct MonoString * D.28830;
  unsigned int D.28831;
  struct MonoDynamicStream * D.28832;
  struct MonoArray * D.28833;
  char * D.28834;
  unsigned int D.28835;
  guint32 * D.28836;
  sizetype D.28837;
  guint32 * D.28838;
  unsigned int i.123;
  sizetype D.28840;
  guint32 * D.28841;
  sizetype D.28842;
  guint32 * D.28843;
  struct MonoDynamicTable * table;
  int i;

  table = &assembly->tables[0];
  D.28821 = table->next_idx;
  D.28822 = D.28821;
  D.28823 = D.28822 + 1;
  table->next_idx = D.28823;
  mb->table_idx = D.28822;
  D.28824 = table->values;
  D.28825 = mb->table_idx;
  D.28826 = D.28825 * 20;
  D.28827 = D.28826 + 4;
  D.28828 = D.28824 + D.28827;
  D.28829 = &assembly->sheap;
  D.28830 = mb->module.name;
  D.28831 = string_heap_insert_mstring (D.28829, D.28830);
  *D.28828 = D.28831;
  D.28832 = &assembly->guid;
  D.28833 = mb->guid;
  D.28834 = mono_array_addr_with_size (D.28833, 1, 0);
  D.28835 = mono_image_add_stream_data (D.28832, D.28834, 16);
  i = (int) D.28835;
  i = i / 16;
  i = i + 1;
  D.28824 = table->values;
  D.28825 = mb->table_idx;
  D.28826 = D.28825 * 20;
  D.28836 = D.28824 + D.28826;
  *D.28836 = 0;
  D.28824 = table->values;
  D.28825 = mb->table_idx;
  D.28826 = D.28825 * 20;
  D.28837 = D.28826 + 8;
  D.28838 = D.28824 + D.28837;
  i.123 = (unsigned int) i;
  *D.28838 = i.123;
  D.28824 = table->values;
  D.28825 = mb->table_idx;
  D.28826 = D.28825 * 20;
  D.28840 = D.28826 + 12;
  D.28841 = D.28824 + D.28840;
  *D.28841 = 0;
  D.28824 = table->values;
  D.28825 = mb->table_idx;
  D.28826 = D.28825 * 20;
  D.28842 = D.28826 + 16;
  D.28843 = D.28824 + D.28842;
  *D.28843 = 0;
}


collect_types (struct MonoPtrArray * types, struct MonoReflectionTypeBuilder * type)
{
  int D.28844;
  int D.28845;
  unsigned int D.28848;
  unsigned int D.28849;
  int D.28850;
  void * D.28851;
  void * * D.28852;
  unsigned int D.28853;
  int D.28856;
  int D.28857;
  unsigned int D.28858;
  unsigned int D.28859;
  void * * D.28860;
  struct MonoArray * D.28861;
  unsigned int i.124;
  char * D.28865;
  unsigned int D.28866;
  int i;

  D.28844 = types->size;
  D.28845 = types->capacity;
  if (D.28844 >= D.28845) goto <D.28846>; else goto <D.28847>;
  <D.28846>:
  {
    void * __tmp;

    D.28845 = types->capacity;
    D.28848 = (unsigned int) D.28845;
    D.28849 = D.28848 * 8;
    D.28845 = types->capacity;
    D.28850 = D.28845 * 2;
    D.28851 = mono_gc_make_root_descr_all_refs (D.28850);
    __tmp = mono_gc_alloc_fixed (D.28849, D.28851);
    D.28852 = types->data;
    D.28845 = types->capacity;
    D.28848 = (unsigned int) D.28845;
    D.28853 = D.28848 * 4;
    mono_gc_memmove_aligned (__tmp, D.28852, D.28853);
    D.28845 = types->capacity;
    if (D.28845 > 16) goto <D.28854>; else goto <D.28855>;
    <D.28854>:
    D.28852 = types->data;
    mono_gc_free_fixed (D.28852);
    <D.28855>:
    types->data = __tmp;
    D.28845 = types->capacity;
    D.28850 = D.28845 * 2;
    types->capacity = D.28850;
  }
  <D.28847>:
  D.28852 = types->data;
  D.28844 = types->size;
  D.28856 = D.28844;
  D.28857 = D.28856 + 1;
  types->size = D.28857;
  D.28858 = (unsigned int) D.28856;
  D.28859 = D.28858 * 4;
  D.28860 = D.28852 + D.28859;
  *D.28860 = type;
  D.28861 = type->subtypes;
  if (D.28861 == 0B) goto <D.28862>; else goto <D.28863>;
  <D.28862>:
  return;
  <D.28863>:
  i = 0;
  goto <D.21972>;
  <D.21971>:
  {
    struct MonoReflectionTypeBuilder * subtype;

    D.28861 = type->subtypes;
    i.124 = (unsigned int) i;
    D.28865 = mono_array_addr_with_size (D.28861, 4, i.124);
    subtype = MEM[(struct MonoReflectionTypeBuilder * *)D.28865];
    collect_types (types, subtype);
  }
  i = i + 1;
  <D.21972>:
  i.124 = (unsigned int) i;
  D.28861 = type->subtypes;
  D.28866 = mono_array_length (D.28861);
  if (i.124 < D.28866) goto <D.21971>; else goto <D.21973>;
  <D.21973>:
}


alloc_table (struct MonoDynamicTable * table, guint nrows)
{
  unsigned char D.28868;
  _Bool D.28869;
  long int D.28870;
  long int D.28871;
  unsigned int D.28874;
  unsigned int D.28875;
  unsigned int D.28881;
  guint32 * D.28882;
  unsigned int D.28883;
  unsigned int D.28884;
  unsigned int D.28885;
  void * D.28886;

  table->rows = nrows;
  D.28868 = table->columns;
  D.28869 = D.28868 == 0;
  D.28870 = (long int) D.28869;
  D.28871 = __builtin_expect (D.28870, 0);
  if (D.28871 != 0) goto <D.28872>; else goto <D.28873>;
  <D.28872>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 327, "table->columns");
  <D.28873>:
  D.28874 = nrows + 1;
  D.28875 = table->alloc_rows;
  if (D.28874 >= D.28875) goto <D.28876>; else goto <D.28877>;
  <D.28876>:
  goto <D.20893>;
  <D.20892>:
  D.28875 = table->alloc_rows;
  if (D.28875 == 0) goto <D.28878>; else goto <D.28879>;
  <D.28878>:
  table->alloc_rows = 16;
  goto <D.28880>;
  <D.28879>:
  D.28875 = table->alloc_rows;
  D.28881 = D.28875 * 2;
  table->alloc_rows = D.28881;
  <D.28880>:
  <D.20893>:
  D.28874 = nrows + 1;
  D.28875 = table->alloc_rows;
  if (D.28874 >= D.28875) goto <D.20892>; else goto <D.20894>;
  <D.20894>:
  D.28882 = table->values;
  D.28875 = table->alloc_rows;
  D.28868 = table->columns;
  D.28883 = (unsigned int) D.28868;
  D.28884 = D.28875 * D.28883;
  D.28885 = D.28884 * 4;
  D.28886 = monoeg_realloc (D.28882, D.28885);
  table->values = D.28886;
  <D.28877>:
}


string_heap_insert_mstring (struct MonoDynamicStream * sh, struct MonoString * str)
{
  guint32 D.28887;
  char * name;
  guint32 idx;

  name = mono_string_to_utf8 (str);
  idx = string_heap_insert (sh, name);
  monoeg_g_free (name);
  D.28887 = idx;
  return D.28887;
}


mono_image_get_type_info (struct MonoDomain * domain, struct MonoReflectionTypeBuilder * tb, struct MonoDynamicImage * assembly)
{
  guint32 * D.28889;
  unsigned int D.28890;
  unsigned int D.28891;
  unsigned int D.28892;
  struct MonoString * D.28893;
  int D.21926;
  int iftmp.125;
  int D.21925;
  const char[7] * D.28897;
  unsigned char D.28898;
  int D.28899;
  unsigned char D.28900;
  int D.28901;
  _Bool D.28902;
  _Bool D.28903;
  _Bool D.28904;
  const unsigned char * D.28907;
  unsigned char D.28908;
  int D.28909;
  const unsigned char * D.28910;
  unsigned char D.28911;
  int D.28912;
  _Bool D.28913;
  _Bool D.28914;
  const unsigned char * D.28917;
  unsigned char D.28918;
  int D.28919;
  const unsigned char * D.28920;
  unsigned char D.28921;
  int D.28922;
  _Bool D.28923;
  _Bool D.28924;
  const unsigned char * D.28927;
  unsigned char D.28928;
  int D.28929;
  const unsigned char * D.28930;
  unsigned char D.28931;
  int D.28932;
  guint * D.28936;
  struct MonoDynamicStream * D.28937;
  unsigned int D.28938;
  struct MonoString * D.28939;
  int D.21935;
  int iftmp.126;
  int D.21934;
  const char[7] * D.28943;
  unsigned char D.28944;
  int D.28945;
  unsigned char D.28946;
  int D.28947;
  _Bool D.28948;
  _Bool D.28949;
  _Bool D.28950;
  const unsigned char * D.28953;
  unsigned char D.28954;
  int D.28955;
  const unsigned char * D.28956;
  unsigned char D.28957;
  int D.28958;
  _Bool D.28959;
  _Bool D.28960;
  const unsigned char * D.28963;
  unsigned char D.28964;
  int D.28965;
  const unsigned char * D.28966;
  unsigned char D.28967;
  int D.28968;
  _Bool D.28969;
  _Bool D.28970;
  const unsigned char * D.28973;
  unsigned char D.28974;
  int D.28975;
  const unsigned char * D.28976;
  unsigned char D.28977;
  int D.28978;
  guint * D.28982;
  unsigned int D.28983;
  struct MonoObject * D.28986;
  _Bool D.28988;
  _Bool D.28989;
  _Bool D.28990;
  unsigned int D.28992;
  guint * D.28994;
  struct MonoType * D.28995;
  unsigned int D.28996;
  guint * D.28997;
  unsigned int D.28998;
  guint * D.28999;
  unsigned int D.29000;
  unsigned int D.29003;
  int D.29006;
  int D.29008;
  unsigned int D.29009;
  unsigned int D.29010;
  unsigned int D.29011;
  unsigned int D.29012;
  unsigned int D.29013;
  struct MonoArray * D.29014;
  unsigned int D.29017;
  unsigned int D.29018;
  int D.29019;
  unsigned int D.29020;
  unsigned int D.29021;
  unsigned int i.127;
  char * D.29023;
  struct MonoType * D.29024;
  unsigned int D.29025;
  unsigned int D.29026;
  struct MonoArray * D.29027;
  int D.29030;
  unsigned int D.29031;
  unsigned int D.29032;
  char * D.29033;
  struct MonoReflectionFieldBuilder * D.29034;
  struct MonoArray * D.29035;
  unsigned int D.29038;
  unsigned int D.29039;
  char * D.29040;
  struct MonoReflectionCtorBuilder * D.29041;
  unsigned int D.29042;
  struct MonoArray * D.29043;
  int D.29046;
  unsigned int D.29047;
  unsigned int D.29048;
  char * D.29049;
  struct MonoReflectionMethodBuilder * D.29050;
  struct MonoArray * D.29051;
  unsigned int D.29054;
  unsigned int D.29057;
  unsigned int D.29058;
  unsigned int D.29059;
  unsigned int D.29060;
  char * D.29061;
  struct MonoReflectionEventBuilder * D.29062;
  unsigned int D.29063;
  struct MonoArray * D.29064;
  unsigned int D.29067;
  unsigned int D.29070;
  unsigned int D.29071;
  unsigned int D.29072;
  char * D.29073;
  struct MonoReflectionPropertyBuilder * D.29074;
  unsigned int D.29075;
  struct MonoArray * D.29076;
  unsigned int D.29079;
  unsigned int D.29080;
  char * D.29081;
  struct MonoReflectionGenericParam * D.29082;
  unsigned int D.29083;
  unsigned int D.29084;
  struct MonoArray * D.29085;
  struct MonoArray * D.29086;
  unsigned int D.29089;
  unsigned int D.29090;
  unsigned int D.29091;
  guint32 * D.29092;
  unsigned int D.29093;
  unsigned int D.29094;
  char * D.29095;
  unsigned int D.29096;
  unsigned int D.29097;
  unsigned int D.29098;
  struct MonoDynamicTable * table;
  guint * values;
  int i;
  int is_object;
  int is_system;
  char * n;

  is_object = 0;
  is_system = 0;
  table = &assembly->tables[2];
  D.28889 = table->values;
  D.28890 = tb->table_idx;
  D.28891 = D.28890 * 24;
  values = D.28889 + D.28891;
  D.28892 = tb->attrs;
  *values = D.28892;
  D.28893 = tb->name;
  n = mono_string_to_utf8 (D.28893);
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = n;
      D.28897 = "Object";
      D.28898 = MEM[(const unsigned char *)D.28897];
      D.28899 = (int) D.28898;
      D.28900 = *__s2;
      D.28901 = (int) D.28900;
      __result = D.28899 - D.28901;
      {
        D.28902 = __s2_len != 0;
        D.28903 = __result == 0;
        D.28904 = D.28902 & D.28903;
        if (D.28904 != 0) goto <D.28905>; else goto <D.28906>;
        <D.28905>:
        D.28907 = &MEM[(void *)"Object" + 1B];
        D.28908 = *D.28907;
        D.28909 = (int) D.28908;
        D.28910 = __s2 + 1;
        D.28911 = *D.28910;
        D.28912 = (int) D.28911;
        __result = D.28909 - D.28912;
        D.28913 = __s2_len > 1;
        D.28903 = __result == 0;
        D.28914 = D.28913 & D.28903;
        if (D.28914 != 0) goto <D.28915>; else goto <D.28916>;
        <D.28915>:
        D.28917 = &MEM[(void *)"Object" + 2B];
        D.28918 = *D.28917;
        D.28919 = (int) D.28918;
        D.28920 = __s2 + 2;
        D.28921 = *D.28920;
        D.28922 = (int) D.28921;
        __result = D.28919 - D.28922;
        D.28923 = __s2_len > 2;
        D.28903 = __result == 0;
        D.28924 = D.28923 & D.28903;
        if (D.28924 != 0) goto <D.28925>; else goto <D.28926>;
        <D.28925>:
        D.28927 = &MEM[(void *)"Object" + 3B];
        D.28928 = *D.28927;
        D.28929 = (int) D.28928;
        D.28930 = __s2 + 3;
        D.28931 = *D.28930;
        D.28932 = (int) D.28931;
        __result = D.28929 - D.28932;
        <D.28926>:
        <D.28916>:
        <D.28906>:
      }
      D.21925 = __result;
    }
    iftmp.125 = -D.21925;
    goto <D.28933>;
    <D.28896>:
    iftmp.125 = __builtin_strcmp (n, "Object");
    <D.28933>:
    D.21926 = iftmp.125;
  }
  if (D.21926 == 0) goto <D.28934>; else goto <D.28935>;
  <D.28934>:
  is_object = is_object + 1;
  <D.28935>:
  D.28936 = values + 4;
  D.28937 = &assembly->sheap;
  D.28938 = string_heap_insert (D.28937, n);
  *D.28936 = D.28938;
  monoeg_g_free (n);
  D.28939 = tb->nspace;
  n = mono_string_to_utf8 (D.28939);
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = n;
      D.28943 = "System";
      D.28944 = MEM[(const unsigned char *)D.28943];
      D.28945 = (int) D.28944;
      D.28946 = *__s2;
      D.28947 = (int) D.28946;
      __result = D.28945 - D.28947;
      {
        D.28948 = __s2_len != 0;
        D.28949 = __result == 0;
        D.28950 = D.28948 & D.28949;
        if (D.28950 != 0) goto <D.28951>; else goto <D.28952>;
        <D.28951>:
        D.28953 = &MEM[(void *)"System" + 1B];
        D.28954 = *D.28953;
        D.28955 = (int) D.28954;
        D.28956 = __s2 + 1;
        D.28957 = *D.28956;
        D.28958 = (int) D.28957;
        __result = D.28955 - D.28958;
        D.28959 = __s2_len > 1;
        D.28949 = __result == 0;
        D.28960 = D.28959 & D.28949;
        if (D.28960 != 0) goto <D.28961>; else goto <D.28962>;
        <D.28961>:
        D.28963 = &MEM[(void *)"System" + 2B];
        D.28964 = *D.28963;
        D.28965 = (int) D.28964;
        D.28966 = __s2 + 2;
        D.28967 = *D.28966;
        D.28968 = (int) D.28967;
        __result = D.28965 - D.28968;
        D.28969 = __s2_len > 2;
        D.28949 = __result == 0;
        D.28970 = D.28969 & D.28949;
        if (D.28970 != 0) goto <D.28971>; else goto <D.28972>;
        <D.28971>:
        D.28973 = &MEM[(void *)"System" + 3B];
        D.28974 = *D.28973;
        D.28975 = (int) D.28974;
        D.28976 = __s2 + 3;
        D.28977 = *D.28976;
        D.28978 = (int) D.28977;
        __result = D.28975 - D.28978;
        <D.28972>:
        <D.28962>:
        <D.28952>:
      }
      D.21934 = __result;
    }
    iftmp.126 = -D.21934;
    goto <D.28979>;
    <D.28942>:
    iftmp.126 = __builtin_strcmp (n, "System");
    <D.28979>:
    D.21935 = iftmp.126;
  }
  if (D.21935 == 0) goto <D.28980>; else goto <D.28981>;
  <D.28980>:
  is_system = is_system + 1;
  <D.28981>:
  D.28982 = values + 8;
  D.28937 = &assembly->sheap;
  D.28983 = string_heap_insert (D.28937, n);
  *D.28982 = D.28983;
  monoeg_g_free (n);
  D.28986 = tb->parent;
  if (D.28986 != 0B) goto <D.28987>; else goto <D.28984>;
  <D.28987>:
  D.28988 = is_system == 0;
  D.28989 = is_object == 0;
  D.28990 = D.28988 | D.28989;
  if (D.28990 != 0) goto <D.28991>; else goto <D.28984>;
  <D.28991>:
  D.28892 = tb->attrs;
  D.28992 = D.28892 & 32;
  if (D.28992 == 0) goto <D.28993>; else goto <D.28984>;
  <D.28993>:
  D.28994 = values + 12;
  D.28986 = tb->parent;
  D.28995 = mono_reflection_type_get_handle (D.28986);
  D.28996 = mono_image_typedef_or_ref (assembly, D.28995);
  *D.28994 = D.28996;
  goto <D.28985>;
  <D.28984>:
  D.28994 = values + 12;
  *D.28994 = 0;
  <D.28985>:
  D.28997 = values + 16;
  D.28998 = assembly->tables[4].next_idx;
  *D.28997 = D.28998;
  D.28999 = values + 20;
  D.29000 = assembly->tables[6].next_idx;
  *D.28999 = D.29000;
  D.28892 = tb->attrs;
  D.29003 = D.28892 & 24;
  if (D.29003 != 0) goto <D.29004>; else goto <D.29005>;
  <D.29004>:
  D.29006 = tb->class_size;
  if (D.29006 > 0) goto <D.29001>; else goto <D.29007>;
  <D.29007>:
  D.29008 = tb->packing_size;
  if (D.29008 > 0) goto <D.29001>; else goto <D.29002>;
  <D.29001>:
  table = &assembly->tables[15];
  D.29009 = table->rows;
  D.29010 = D.29009 + 1;
  table->rows = D.29010;
  D.29009 = table->rows;
  alloc_table (table, D.29009);
  D.28889 = table->values;
  D.29009 = table->rows;
  D.29011 = D.29009 * 12;
  values = D.28889 + D.29011;
  D.28982 = values + 8;
  D.28890 = tb->table_idx;
  *D.28982 = D.28890;
  D.28936 = values + 4;
  D.29006 = tb->class_size;
  D.29012 = (unsigned int) D.29006;
  *D.28936 = D.29012;
  D.29008 = tb->packing_size;
  D.29013 = (unsigned int) D.29008;
  *values = D.29013;
  <D.29002>:
  <D.29005>:
  D.29014 = tb->interfaces;
  if (D.29014 != 0B) goto <D.29015>; else goto <D.29016>;
  <D.29015>:
  table = &assembly->tables[9];
  D.29009 = table->rows;
  i = (int) D.29009;
  D.29014 = tb->interfaces;
  D.29017 = mono_array_length (D.29014);
  D.29009 = table->rows;
  D.29018 = D.29009 + D.29017;
  table->rows = D.29018;
  D.29009 = table->rows;
  alloc_table (table, D.29009);
  D.28889 = table->values;
  D.29019 = i + 1;
  D.29020 = (unsigned int) D.29019;
  D.29021 = D.29020 * 8;
  values = D.28889 + D.29021;
  i = 0;
  goto <D.21938>;
  <D.21937>:
  {
    struct MonoReflectionType * iface;

    D.29014 = tb->interfaces;
    i.127 = (unsigned int) i;
    D.29023 = mono_array_addr_with_size (D.29014, 4, i.127);
    iface = MEM[(void * *)D.29023];
    D.28890 = tb->table_idx;
    *values = D.28890;
    D.28936 = values + 4;
    D.29024 = mono_reflection_type_get_handle (iface);
    D.29025 = mono_image_typedef_or_ref (assembly, D.29024);
    *D.28936 = D.29025;
    values = values + 8;
  }
  i = i + 1;
  <D.21938>:
  i.127 = (unsigned int) i;
  D.29014 = tb->interfaces;
  D.29026 = mono_array_length (D.29014);
  if (i.127 < D.29026) goto <D.21937>; else goto <D.21939>;
  <D.21939>:
  <D.29016>:
  D.29027 = tb->fields;
  if (D.29027 != 0B) goto <D.29028>; else goto <D.29029>;
  <D.29028>:
  table = &assembly->tables[4];
  D.29009 = table->rows;
  D.29030 = tb->num_fields;
  D.29031 = (unsigned int) D.29030;
  D.29032 = D.29009 + D.29031;
  table->rows = D.29032;
  D.29009 = table->rows;
  alloc_table (table, D.29009);
  i = 0;
  goto <D.21941>;
  <D.21940>:
  D.29027 = tb->fields;
  i.127 = (unsigned int) i;
  D.29033 = mono_array_addr_with_size (D.29027, 4, i.127);
  D.29034 = MEM[(struct MonoReflectionFieldBuilder * *)D.29033];
  mono_image_get_field_info (D.29034, assembly);
  i = i + 1;
  <D.21941>:
  D.29030 = tb->num_fields;
  if (D.29030 > i) goto <D.21940>; else goto <D.21942>;
  <D.21942>:
  <D.29029>:
  D.29035 = tb->ctors;
  if (D.29035 != 0B) goto <D.29036>; else goto <D.29037>;
  <D.29036>:
  table = &assembly->tables[6];
  D.29035 = tb->ctors;
  D.29038 = mono_array_length (D.29035);
  D.29009 = table->rows;
  D.29039 = D.29009 + D.29038;
  table->rows = D.29039;
  D.29009 = table->rows;
  alloc_table (table, D.29009);
  i = 0;
  goto <D.21944>;
  <D.21943>:
  D.29035 = tb->ctors;
  i.127 = (unsigned int) i;
  D.29040 = mono_array_addr_with_size (D.29035, 4, i.127);
  D.29041 = MEM[(struct MonoReflectionCtorBuilder * *)D.29040];
  mono_image_get_ctor_info (domain, D.29041, assembly);
  i = i + 1;
  <D.21944>:
  i.127 = (unsigned int) i;
  D.29035 = tb->ctors;
  D.29042 = mono_array_length (D.29035);
  if (i.127 < D.29042) goto <D.21943>; else goto <D.21945>;
  <D.21945>:
  <D.29037>:
  D.29043 = tb->methods;
  if (D.29043 != 0B) goto <D.29044>; else goto <D.29045>;
  <D.29044>:
  table = &assembly->tables[6];
  D.29009 = table->rows;
  D.29046 = tb->num_methods;
  D.29047 = (unsigned int) D.29046;
  D.29048 = D.29009 + D.29047;
  table->rows = D.29048;
  D.29009 = table->rows;
  alloc_table (table, D.29009);
  i = 0;
  goto <D.21947>;
  <D.21946>:
  D.29043 = tb->methods;
  i.127 = (unsigned int) i;
  D.29049 = mono_array_addr_with_size (D.29043, 4, i.127);
  D.29050 = MEM[(struct MonoReflectionMethodBuilder * *)D.29049];
  mono_image_get_method_info (D.29050, assembly);
  i = i + 1;
  <D.21947>:
  D.29046 = tb->num_methods;
  if (D.29046 > i) goto <D.21946>; else goto <D.21948>;
  <D.21948>:
  <D.29045>:
  D.29051 = tb->events;
  if (D.29051 != 0B) goto <D.29052>; else goto <D.29053>;
  <D.29052>:
  D.29051 = tb->events;
  D.29054 = mono_array_length (D.29051);
  if (D.29054 != 0) goto <D.29055>; else goto <D.29056>;
  <D.29055>:
  table = &assembly->tables[20];
  D.29051 = tb->events;
  D.29057 = mono_array_length (D.29051);
  D.29009 = table->rows;
  D.29058 = D.29009 + D.29057;
  table->rows = D.29058;
  D.29009 = table->rows;
  alloc_table (table, D.29009);
  table = &assembly->tables[18];
  D.29009 = table->rows;
  D.29010 = D.29009 + 1;
  table->rows = D.29010;
  D.29009 = table->rows;
  alloc_table (table, D.29009);
  D.28889 = table->values;
  D.29009 = table->rows;
  D.29059 = D.29009 * 8;
  values = D.28889 + D.29059;
  D.28890 = tb->table_idx;
  *values = D.28890;
  D.28936 = values + 4;
  D.29060 = assembly->tables[20].next_idx;
  *D.28936 = D.29060;
  i = 0;
  goto <D.21950>;
  <D.21949>:
  D.29051 = tb->events;
  i.127 = (unsigned int) i;
  D.29061 = mono_array_addr_with_size (D.29051, 4, i.127);
  D.29062 = MEM[(struct MonoReflectionEventBuilder * *)D.29061];
  mono_image_get_event_info (D.29062, assembly);
  i = i + 1;
  <D.21950>:
  i.127 = (unsigned int) i;
  D.29051 = tb->events;
  D.29063 = mono_array_length (D.29051);
  if (i.127 < D.29063) goto <D.21949>; else goto <D.21951>;
  <D.21951>:
  <D.29056>:
  <D.29053>:
  D.29064 = tb->properties;
  if (D.29064 != 0B) goto <D.29065>; else goto <D.29066>;
  <D.29065>:
  D.29064 = tb->properties;
  D.29067 = mono_array_length (D.29064);
  if (D.29067 != 0) goto <D.29068>; else goto <D.29069>;
  <D.29068>:
  table = &assembly->tables[23];
  D.29064 = tb->properties;
  D.29070 = mono_array_length (D.29064);
  D.29009 = table->rows;
  D.29071 = D.29009 + D.29070;
  table->rows = D.29071;
  D.29009 = table->rows;
  alloc_table (table, D.29009);
  table = &assembly->tables[21];
  D.29009 = table->rows;
  D.29010 = D.29009 + 1;
  table->rows = D.29010;
  D.29009 = table->rows;
  alloc_table (table, D.29009);
  D.28889 = table->values;
  D.29009 = table->rows;
  D.29059 = D.29009 * 8;
  values = D.28889 + D.29059;
  D.28890 = tb->table_idx;
  *values = D.28890;
  D.28936 = values + 4;
  D.29072 = assembly->tables[23].next_idx;
  *D.28936 = D.29072;
  i = 0;
  goto <D.21953>;
  <D.21952>:
  D.29064 = tb->properties;
  i.127 = (unsigned int) i;
  D.29073 = mono_array_addr_with_size (D.29064, 4, i.127);
  D.29074 = MEM[(struct MonoReflectionPropertyBuilder * *)D.29073];
  mono_image_get_property_info (D.29074, assembly);
  i = i + 1;
  <D.21953>:
  i.127 = (unsigned int) i;
  D.29064 = tb->properties;
  D.29075 = mono_array_length (D.29064);
  if (i.127 < D.29075) goto <D.21952>; else goto <D.21954>;
  <D.21954>:
  <D.29069>:
  <D.29066>:
  D.29076 = tb->generic_params;
  if (D.29076 != 0B) goto <D.29077>; else goto <D.29078>;
  <D.29077>:
  table = &assembly->tables[42];
  D.29076 = tb->generic_params;
  D.29079 = mono_array_length (D.29076);
  D.29009 = table->rows;
  D.29080 = D.29009 + D.29079;
  table->rows = D.29080;
  D.29009 = table->rows;
  alloc_table (table, D.29009);
  i = 0;
  goto <D.21957>;
  <D.21956>:
  {
    guint32 owner;

    D.28890 = tb->table_idx;
    owner = D.28890 << 1;
    D.29076 = tb->generic_params;
    i.127 = (unsigned int) i;
    D.29081 = mono_array_addr_with_size (D.29076, 4, i.127);
    D.29082 = MEM[(struct MonoReflectionGenericParam * *)D.29081];
    mono_image_get_generic_param_info (D.29082, owner, assembly);
  }
  i = i + 1;
  <D.21957>:
  i.127 = (unsigned int) i;
  D.29076 = tb->generic_params;
  D.29083 = mono_array_length (D.29076);
  if (i.127 < D.29083) goto <D.21956>; else goto <D.21958>;
  <D.21958>:
  <D.29078>:
  D.28890 = tb->table_idx;
  D.29084 = D.28890 | 33554432;
  D.29085 = tb->permissions;
  mono_image_add_decl_security (assembly, D.29084, D.29085);
  D.29086 = tb->subtypes;
  if (D.29086 != 0B) goto <D.29087>; else goto <D.29088>;
  <D.29087>:
  {
    struct MonoDynamicTable * ntable;

    ntable = &assembly->tables[41];
    D.29086 = tb->subtypes;
    D.29089 = mono_array_length (D.29086);
    D.29090 = ntable->rows;
    D.29091 = D.29090 + D.29089;
    ntable->rows = D.29091;
    D.29090 = ntable->rows;
    alloc_table (ntable, D.29090);
    D.29092 = ntable->values;
    D.29093 = ntable->next_idx;
    D.29094 = D.29093 * 8;
    values = D.29092 + D.29094;
    i = 0;
    goto <D.21962>;
    <D.21961>:
    {
      struct MonoReflectionTypeBuilder * subtype;

      D.29086 = tb->subtypes;
      i.127 = (unsigned int) i;
      D.29095 = mono_array_addr_with_size (D.29086, 4, i.127);
      subtype = MEM[(struct MonoReflectionTypeBuilder * *)D.29095];
      D.29096 = subtype->table_idx;
      *values = D.29096;
      D.28936 = values + 4;
      D.28890 = tb->table_idx;
      *D.28936 = D.28890;
      values = values + 8;
      D.29093 = ntable->next_idx;
      D.29097 = D.29093 + 1;
      ntable->next_idx = D.29097;
    }
    i = i + 1;
    <D.21962>:
    i.127 = (unsigned int) i;
    D.29086 = tb->subtypes;
    D.29098 = mono_array_length (D.29086);
    if (i.127 < D.29098) goto <D.21961>; else goto <D.21963>;
    <D.21963>:
  }
  <D.29088>:
}


mono_image_get_ctor_info (struct MonoDomain * domain, struct MonoReflectionCtorBuilder * mb, struct MonoDynamicImage * assembly)
{
  guint32 * D.29099;
  unsigned int D.29100;
  struct ReflectionMethodBuilder rmb;

  try
    {
      reflection_methodbuilder_from_ctor_builder (&rmb, mb);
      mono_image_basic_method (&rmb, assembly);
      D.29099 = rmb.table_idx;
      D.29100 = *D.29099;
      mb->table_idx = D.29100;
    }
  finally
    {
      rmb = {CLOBBER};
    }
}


reflection_methodbuilder_from_ctor_builder (struct ReflectionMethodBuilder * rmb, struct MonoReflectionCtorBuilder * mb)
{
  const char * iftmp.128;
  unsigned int D.29102;
  unsigned int D.29103;
  struct MonoReflectionILGen * D.29107;
  struct MonoDomain * D.29108;
  struct MonoClass * D.29109;
  struct MonoType * D.29110;
  struct MonoReflectionType * D.29111;
  struct MonoArray * D.29112;
  struct MonoArray * D.29113;
  unsigned int D.29114;
  unsigned int D.29115;
  struct MonoObject * D.29116;
  struct MonoDomain * D.29117;
  struct MonoString * D.29118;
  guint32 * D.29119;
  unsigned char D.29120;
  struct MonoArray * D.29121;
  struct MonoArray * D.29122;
  struct MonoArray * D.29123;
  struct MonoMethod * D.29124;
  const char * name;

  D.29102 = mb->attrs;
  D.29103 = D.29102 & 16;
  if (D.29103 != 0) goto <D.29104>; else goto <D.29105>;
  <D.29104>:
  iftmp.128 = ".cctor";
  goto <D.29106>;
  <D.29105>:
  iftmp.128 = ".ctor";
  <D.29106>:
  name = iftmp.128;
  memset (rmb, 0, 112);
  D.29107 = mb->ilgen;
  rmb->ilgen = D.29107;
  D.29108 = mono_domain_get ();
  D.29109 = mono_defaults.void_class;
  D.29110 = &D.29109->byval_arg;
  D.29111 = mono_type_get_object (D.29108, D.29110);
  rmb->rtype = D.29111;
  D.29112 = mb->parameters;
  rmb->parameters = D.29112;
  rmb->generic_params = 0B;
  rmb->generic_container = 0B;
  rmb->opt_types = 0B;
  D.29113 = mb->pinfo;
  rmb->pinfo = D.29113;
  D.29102 = mb->attrs;
  rmb->attrs = D.29102;
  D.29114 = mb->iattrs;
  rmb->iattrs = D.29114;
  D.29115 = mb->call_conv;
  rmb->call_conv = D.29115;
  rmb->code = 0B;
  D.29116 = mb->type;
  rmb->type = D.29116;
  D.29117 = mono_domain_get ();
  D.29118 = mono_string_new (D.29117, name);
  rmb->name = D.29118;
  D.29119 = &mb->table_idx;
  rmb->table_idx = D.29119;
  D.29120 = mb->init_locals;
  rmb->init_locals = D.29120;
  rmb->skip_visibility = 0;
  rmb->return_modreq = 0B;
  rmb->return_modopt = 0B;
  D.29121 = mb->param_modreq;
  rmb->param_modreq = D.29121;
  D.29122 = mb->param_modopt;
  rmb->param_modopt = D.29122;
  D.29123 = mb->permissions;
  rmb->permissions = D.29123;
  D.29124 = mb->mhandle;
  rmb->mhandle = D.29124;
  rmb->nrefs = 0;
  rmb->refs = 0B;
}


mono_image_get_event_info (struct MonoReflectionEventBuilder * eb, struct MonoDynamicImage * assembly)
{
  unsigned int D.29125;
  unsigned int D.29126;
  unsigned int D.29127;
  guint32 * D.29128;
  unsigned int D.29129;
  unsigned int D.29130;
  guint32 * D.29131;
  struct MonoDynamicStream * D.29132;
  struct MonoString * D.29133;
  unsigned int D.29134;
  unsigned int D.29135;
  guint32 * D.29136;
  struct MonoReflectionType * D.29137;
  struct MonoType * D.29138;
  unsigned int D.29139;
  struct MonoReflectionMethodBuilder * D.29140;
  struct MonoReflectionMethodBuilder * D.29143;
  struct MonoReflectionMethodBuilder * D.29146;
  unsigned int D.29149;
  unsigned int D.29150;
  unsigned int semaidx.129;
  unsigned int D.29154;
  unsigned int D.29155;
  unsigned int D.29156;
  unsigned int D.29157;
  unsigned int semaidx.130;
  unsigned int D.29161;
  unsigned int D.29162;
  unsigned int semaidx.131;
  unsigned int D.29166;
  unsigned int D.29167;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint num_methods;
  guint32 semaidx;

  num_methods = 0;
  table = &assembly->tables[20];
  D.29125 = table->next_idx;
  D.29126 = D.29125;
  D.29127 = D.29126 + 1;
  table->next_idx = D.29127;
  eb->table_idx = D.29126;
  D.29128 = table->values;
  D.29129 = eb->table_idx;
  D.29130 = D.29129 * 12;
  values = D.29128 + D.29130;
  D.29131 = values + 4;
  D.29132 = &assembly->sheap;
  D.29133 = eb->name;
  D.29134 = string_heap_insert_mstring (D.29132, D.29133);
  *D.29131 = D.29134;
  D.29135 = eb->attrs;
  *values = D.29135;
  D.29136 = values + 8;
  D.29137 = eb->type;
  D.29138 = mono_reflection_type_get_handle (D.29137);
  D.29139 = mono_image_typedef_or_ref (assembly, D.29138);
  *D.29136 = D.29139;
  D.29140 = eb->add_method;
  if (D.29140 != 0B) goto <D.29141>; else goto <D.29142>;
  <D.29141>:
  num_methods = num_methods + 1;
  <D.29142>:
  D.29143 = eb->remove_method;
  if (D.29143 != 0B) goto <D.29144>; else goto <D.29145>;
  <D.29144>:
  num_methods = num_methods + 1;
  <D.29145>:
  D.29146 = eb->raise_method;
  if (D.29146 != 0B) goto <D.29147>; else goto <D.29148>;
  <D.29147>:
  num_methods = num_methods + 1;
  <D.29148>:
  table = &assembly->tables[24];
  D.29149 = table->rows;
  D.29150 = D.29149 + num_methods;
  table->rows = D.29150;
  D.29149 = table->rows;
  alloc_table (table, D.29149);
  D.29140 = eb->add_method;
  if (D.29140 != 0B) goto <D.29151>; else goto <D.29152>;
  <D.29151>:
  D.29125 = table->next_idx;
  semaidx.129 = D.29125;
  D.29154 = semaidx.129 + 1;
  table->next_idx = D.29154;
  semaidx = semaidx.129;
  D.29128 = table->values;
  D.29155 = semaidx * 12;
  values = D.29128 + D.29155;
  *values = 8;
  D.29131 = values + 4;
  D.29140 = eb->add_method;
  D.29156 = D.29140->table_idx;
  *D.29131 = D.29156;
  D.29136 = values + 8;
  D.29129 = eb->table_idx;
  D.29157 = D.29129 << 1;
  *D.29136 = D.29157;
  <D.29152>:
  D.29143 = eb->remove_method;
  if (D.29143 != 0B) goto <D.29158>; else goto <D.29159>;
  <D.29158>:
  D.29125 = table->next_idx;
  semaidx.130 = D.29125;
  D.29161 = semaidx.130 + 1;
  table->next_idx = D.29161;
  semaidx = semaidx.130;
  D.29128 = table->values;
  D.29155 = semaidx * 12;
  values = D.29128 + D.29155;
  *values = 16;
  D.29131 = values + 4;
  D.29143 = eb->remove_method;
  D.29162 = D.29143->table_idx;
  *D.29131 = D.29162;
  D.29136 = values + 8;
  D.29129 = eb->table_idx;
  D.29157 = D.29129 << 1;
  *D.29136 = D.29157;
  <D.29159>:
  D.29146 = eb->raise_method;
  if (D.29146 != 0B) goto <D.29163>; else goto <D.29164>;
  <D.29163>:
  D.29125 = table->next_idx;
  semaidx.131 = D.29125;
  D.29166 = semaidx.131 + 1;
  table->next_idx = D.29166;
  semaidx = semaidx.131;
  D.29128 = table->values;
  D.29155 = semaidx * 12;
  values = D.29128 + D.29155;
  *values = 32;
  D.29131 = values + 4;
  D.29146 = eb->raise_method;
  D.29167 = D.29146->table_idx;
  *D.29131 = D.29167;
  D.29136 = values + 8;
  D.29129 = eb->table_idx;
  D.29157 = D.29129 << 1;
  *D.29136 = D.29157;
  <D.29164>:
}


mono_image_get_property_info (struct MonoReflectionPropertyBuilder * pb, struct MonoDynamicImage * assembly)
{
  unsigned int D.29168;
  unsigned int D.29169;
  unsigned int D.29170;
  int D.29171;
  guint32 * D.29172;
  int D.29173;
  unsigned int D.29174;
  unsigned int D.29175;
  guint32 * D.29176;
  struct MonoDynamicStream * D.29177;
  struct MonoString * D.29178;
  unsigned int D.29179;
  unsigned int D.29180;
  guint32 * D.29181;
  unsigned int D.29182;
  struct MonoReflectionMethodBuilder * D.29183;
  struct MonoReflectionMethodBuilder * D.29186;
  unsigned int D.29189;
  unsigned int D.29190;
  unsigned int semaidx.132;
  unsigned int D.29194;
  unsigned int D.29195;
  unsigned int D.29196;
  int D.29197;
  int D.29198;
  unsigned int D.29199;
  unsigned int semaidx.133;
  unsigned int D.29203;
  unsigned int D.29204;
  unsigned int D.29205;
  unsigned int D.29208;
  unsigned int D.29209;
  int D.29210;
  int D.29211;
  unsigned int D.29212;
  guint32 * D.29213;
  struct MonoObject * D.29214;
  unsigned int D.29215;
  unsigned int field_type.134;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint num_methods;
  guint32 semaidx;

  num_methods = 0;
  table = &assembly->tables[23];
  D.29168 = table->next_idx;
  D.29169 = D.29168;
  D.29170 = D.29169 + 1;
  table->next_idx = D.29170;
  D.29171 = (int) D.29169;
  pb->table_idx = D.29171;
  D.29172 = table->values;
  D.29173 = pb->table_idx;
  D.29174 = (unsigned int) D.29173;
  D.29175 = D.29174 * 12;
  values = D.29172 + D.29175;
  D.29176 = values + 4;
  D.29177 = &assembly->sheap;
  D.29178 = pb->name;
  D.29179 = string_heap_insert_mstring (D.29177, D.29178);
  *D.29176 = D.29179;
  D.29180 = pb->attrs;
  *values = D.29180;
  D.29181 = values + 8;
  D.29182 = property_encode_signature (assembly, pb);
  *D.29181 = D.29182;
  D.29183 = pb->get_method;
  if (D.29183 != 0B) goto <D.29184>; else goto <D.29185>;
  <D.29184>:
  num_methods = num_methods + 1;
  <D.29185>:
  D.29186 = pb->set_method;
  if (D.29186 != 0B) goto <D.29187>; else goto <D.29188>;
  <D.29187>:
  num_methods = num_methods + 1;
  <D.29188>:
  table = &assembly->tables[24];
  D.29189 = table->rows;
  D.29190 = D.29189 + num_methods;
  table->rows = D.29190;
  D.29189 = table->rows;
  alloc_table (table, D.29189);
  D.29183 = pb->get_method;
  if (D.29183 != 0B) goto <D.29191>; else goto <D.29192>;
  <D.29191>:
  D.29168 = table->next_idx;
  semaidx.132 = D.29168;
  D.29194 = semaidx.132 + 1;
  table->next_idx = D.29194;
  semaidx = semaidx.132;
  D.29172 = table->values;
  D.29195 = semaidx * 12;
  values = D.29172 + D.29195;
  *values = 2;
  D.29176 = values + 4;
  D.29183 = pb->get_method;
  D.29196 = D.29183->table_idx;
  *D.29176 = D.29196;
  D.29181 = values + 8;
  D.29173 = pb->table_idx;
  D.29197 = D.29173 << 1;
  D.29198 = D.29197 | 1;
  D.29199 = (unsigned int) D.29198;
  *D.29181 = D.29199;
  <D.29192>:
  D.29186 = pb->set_method;
  if (D.29186 != 0B) goto <D.29200>; else goto <D.29201>;
  <D.29200>:
  D.29168 = table->next_idx;
  semaidx.133 = D.29168;
  D.29203 = semaidx.133 + 1;
  table->next_idx = D.29203;
  semaidx = semaidx.133;
  D.29172 = table->values;
  D.29195 = semaidx * 12;
  values = D.29172 + D.29195;
  *values = 1;
  D.29176 = values + 4;
  D.29186 = pb->set_method;
  D.29204 = D.29186->table_idx;
  *D.29176 = D.29204;
  D.29181 = values + 8;
  D.29173 = pb->table_idx;
  D.29197 = D.29173 << 1;
  D.29198 = D.29197 | 1;
  D.29199 = (unsigned int) D.29198;
  *D.29181 = D.29199;
  <D.29201>:
  D.29180 = pb->attrs;
  D.29205 = D.29180 & 4096;
  if (D.29205 != 0) goto <D.29206>; else goto <D.29207>;
  <D.29206>:
  {
    guint32 field_type;

    try
      {
        field_type = 0;
        table = &assembly->tables[11];
        D.29189 = table->rows;
        D.29208 = D.29189 + 1;
        table->rows = D.29208;
        D.29189 = table->rows;
        alloc_table (table, D.29189);
        D.29172 = table->values;
        D.29189 = table->rows;
        D.29209 = D.29189 * 16;
        values = D.29172 + D.29209;
        D.29181 = values + 8;
        D.29173 = pb->table_idx;
        D.29210 = D.29173 << 2;
        D.29211 = D.29210 | 2;
        D.29212 = (unsigned int) D.29211;
        *D.29181 = D.29212;
        D.29213 = values + 12;
        D.29214 = pb->def_value;
        D.29215 = encode_constant (assembly, D.29214, &field_type);
        *D.29213 = D.29215;
        field_type.134 = field_type;
        *values = field_type.134;
        D.29176 = values + 4;
        *D.29176 = 0;
      }
    finally
      {
        field_type = {CLOBBER};
      }
  }
  <D.29207>:
}


property_encode_signature (struct MonoDynamicImage * assembly, struct MonoReflectionPropertyBuilder * fb)
{
  struct MonoArray * D.29219;
  _Bool D.29222;
  _Bool D.29223;
  _Bool D.29224;
  struct MonoArray * D.29227;
  unsigned int D.29230;
  unsigned int D.29231;
  unsigned int D.29232;
  struct MonoObject * D.29238;
  char * D.29239;
  char * D.29245;
  struct MonoReflectionType * D.29246;
  char * D.29247;
  struct MonoObject * D.29248;
  guint32 D.29249;
  struct SigBuffer buf;
  guint32 nparams;
  struct MonoReflectionMethodBuilder * mb;
  struct MonoReflectionMethodBuilder * smb;
  guint32 idx;
  guint32 i;

  try
    {
      nparams = 0;
      mb = fb->get_method;
      smb = fb->set_method;
      if (mb != 0B) goto <D.29217>; else goto <D.29218>;
      <D.29217>:
      D.29219 = mb->parameters;
      if (D.29219 != 0B) goto <D.29220>; else goto <D.29221>;
      <D.29220>:
      D.29219 = mb->parameters;
      nparams = mono_array_length (D.29219);
      <D.29221>:
      <D.29218>:
      D.29222 = mb == 0B;
      D.29223 = smb != 0B;
      D.29224 = D.29222 & D.29223;
      if (D.29224 != 0) goto <D.29225>; else goto <D.29226>;
      <D.29225>:
      D.29227 = smb->parameters;
      if (D.29227 != 0B) goto <D.29228>; else goto <D.29229>;
      <D.29228>:
      D.29227 = smb->parameters;
      D.29230 = mono_array_length (D.29227);
      nparams = D.29230 + 4294967295;
      <D.29229>:
      <D.29226>:
      sigbuffer_init (&buf, 32);
      D.29231 = fb->call_conv;
      D.29232 = D.29231 & 32;
      if (D.29232 != 0) goto <D.29233>; else goto <D.29234>;
      <D.29233>:
      sigbuffer_add_byte (&buf, 40);
      goto <D.29235>;
      <D.29234>:
      sigbuffer_add_byte (&buf, 8);
      <D.29235>:
      sigbuffer_add_value (&buf, nparams);
      if (mb != 0B) goto <D.29236>; else goto <D.29237>;
      <D.29236>:
      D.29238 = mb->rtype;
      encode_reflection_type (assembly, D.29238, &buf);
      i = 0;
      goto <D.21475>;
      <D.21474>:
      {
        struct MonoReflectionType * pt;

        D.29219 = mb->parameters;
        D.29239 = mono_array_addr_with_size (D.29219, 4, i);
        pt = MEM[(struct MonoReflectionType * *)D.29239];
        encode_reflection_type (assembly, pt, &buf);
      }
      i = i + 1;
      <D.21475>:
      if (i < nparams) goto <D.21474>; else goto <D.21476>;
      <D.21476>:
      goto <D.29240>;
      <D.29237>:
      if (smb != 0B) goto <D.29243>; else goto <D.29241>;
      <D.29243>:
      D.29227 = smb->parameters;
      if (D.29227 != 0B) goto <D.29244>; else goto <D.29241>;
      <D.29244>:
      D.29227 = smb->parameters;
      D.29245 = mono_array_addr_with_size (D.29227, 4, nparams);
      D.29246 = MEM[(struct MonoReflectionType * *)D.29245];
      encode_reflection_type (assembly, D.29246, &buf);
      i = 0;
      goto <D.21479>;
      <D.21478>:
      {
        struct MonoReflectionType * pt;

        D.29227 = smb->parameters;
        D.29247 = mono_array_addr_with_size (D.29227, 4, i);
        pt = MEM[(struct MonoReflectionType * *)D.29247];
        encode_reflection_type (assembly, pt, &buf);
      }
      i = i + 1;
      <D.21479>:
      if (i < nparams) goto <D.21478>; else goto <D.21480>;
      <D.21480>:
      goto <D.29242>;
      <D.29241>:
      D.29248 = fb->type;
      encode_reflection_type (assembly, D.29248, &buf);
      <D.29242>:
      <D.29240>:
      idx = sigbuffer_add_to_blob_cached (assembly, &buf);
      sigbuffer_free (&buf);
      D.29249 = idx;
      return D.29249;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


mono_image_add_cattrs (struct MonoDynamicImage * assembly, guint32 idx, guint32 type, struct MonoArray * cattrs)
{
  unsigned int D.29254;
  unsigned int D.29255;
  guint32 * D.29256;
  unsigned int D.29257;
  unsigned int D.29258;
  char * D.29259;
  struct MonoReflectionMethod * D.29260;
  unsigned int D.29261;
  struct MonoGHashTable * D.29262;
  void * token.135;
  guint32 * D.29264;
  struct MonoArray * D.29265;
  unsigned int D.29266;
  char * p.136;
  guint32 * D.29268;
  int p.137;
  int blob_size.138;
  int D.29271;
  char * D.29272;
  unsigned int D.29273;
  int D.29274;
  unsigned int D.29275;
  unsigned int D.29276;
  struct MonoDynamicTable * table;
  struct MonoReflectionCustomAttr * cattr;
  guint32 * values;
  guint32 count;
  guint32 i;
  guint32 token;
  char blob_size[6];
  char * p;

  try
    {
      p = &blob_size;
      if (cattrs == 0B) goto <D.29252>; else goto <D.29253>;
      <D.29252>:
      return;
      <D.29253>:
      count = mono_array_length (cattrs);
      table = &assembly->tables[12];
      D.29254 = table->rows;
      D.29255 = D.29254 + count;
      table->rows = D.29255;
      D.29254 = table->rows;
      alloc_table (table, D.29254);
      D.29256 = table->values;
      D.29257 = table->next_idx;
      D.29258 = D.29257 * 12;
      values = D.29256 + D.29258;
      idx = idx << 5;
      idx = idx | type;
      i = 0;
      goto <D.21264>;
      <D.21263>:
      D.29259 = mono_array_addr_with_size (cattrs, 4, i);
      cattr = MEM[(void * *)D.29259];
      *values = idx;
      D.29260 = cattr->ctor;
      token = mono_image_create_token (assembly, D.29260, 0, 0);
      type = token & 16777215;
      type = type << 3;
      D.29261 = token >> 24;
      switch (D.29261) <default: <D.21261>, case 6: <D.21258>, case 10: <D.21260>>
      <D.21258>:
      type = type | 2;
      D.29262 = assembly->remapped_tokens;
      token.135 = (void *) token;
      D.29260 = cattr->ctor;
      mono_g_hash_table_insert (D.29262, token.135, D.29260);
      goto <D.21259>;
      <D.21260>:
      type = type | 3;
      goto <D.21259>;
      <D.21261>:
      monoeg_g_log (0B, 16, "got wrong token in custom attr");
      // predicted unlikely by continue predictor.
      goto <D.21262>;
      <D.21259>:
      D.29264 = values + 4;
      *D.29264 = type;
      p = &blob_size;
      D.29265 = cattr->data;
      D.29266 = mono_array_length (D.29265);
      p.136 = p;
      mono_metadata_encode_value (D.29266, p.136, &p);
      D.29268 = values + 8;
      p.136 = p;
      p.137 = (int) p.136;
      blob_size.138 = (int) &blob_size;
      D.29271 = p.137 - blob_size.138;
      D.29265 = cattr->data;
      D.29272 = mono_array_addr_with_size (D.29265, 1, 0);
      D.29265 = cattr->data;
      D.29273 = mono_array_length (D.29265);
      D.29274 = (int) D.29273;
      D.29275 = add_to_blob_cached (assembly, &blob_size, D.29271, D.29272, D.29274);
      *D.29268 = D.29275;
      values = values + 12;
      D.29257 = table->next_idx;
      D.29276 = D.29257 + 1;
      table->next_idx = D.29276;
      <D.21262>:
      i = i + 1;
      <D.21264>:
      if (i < count) goto <D.21263>; else goto <D.21265>;
      <D.21265>:
    }
  finally
    {
      blob_size = {CLOBBER};
      p = {CLOBBER};
    }
}


mono_image_add_decl_security (struct MonoDynamicImage * assembly, guint32 parent_token, struct MonoArray * permissions)
{
  unsigned int D.29282;
  unsigned int D.29283;
  guint32 * D.29284;
  unsigned int D.29285;
  unsigned int D.29286;
  unsigned int D.29287;
  unsigned int D.29288;
  guint32 * D.29289;
  guint32 * D.29290;
  struct MonoString * D.29291;
  unsigned int D.29292;
  unsigned int D.29293;
  unsigned int D.29294;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 count;
  guint32 i;
  guint32 idx;
  struct MonoReflectionPermissionSet * perm;

  if (permissions == 0B) goto <D.29280>; else goto <D.29281>;
  <D.29280>:
  return;
  <D.29281>:
  count = mono_array_length (permissions);
  table = &assembly->tables[14];
  D.29282 = table->rows;
  D.29283 = D.29282 + count;
  table->rows = D.29283;
  D.29282 = table->rows;
  alloc_table (table, D.29282);
  i = 0;
  goto <D.21283>;
  <D.21282>:
  perm = mono_array_addr_with_size (permissions, 8, i);
  D.29284 = table->values;
  D.29285 = table->next_idx;
  D.29286 = D.29285 * 12;
  values = D.29284 + D.29286;
  idx = parent_token & 16777215;
  idx = idx << 2;
  D.29287 = parent_token >> 24;
  switch (D.29287) <default: <D.21281>, case 2: <D.21277>, case 6: <D.21279>, case 32: <D.21280>>
  <D.21277>:
  idx = idx;
  goto <D.21278>;
  <D.21279>:
  idx = idx | 1;
  goto <D.21278>;
  <D.21280>:
  idx = idx | 2;
  goto <D.21278>;
  <D.21281>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 1363);
  <D.21278>:
  D.29288 = perm->action;
  *values = D.29288;
  D.29289 = values + 4;
  *D.29289 = idx;
  D.29290 = values + 8;
  D.29291 = perm->pset;
  D.29292 = add_mono_string_to_blob_cached (assembly, D.29291);
  *D.29290 = D.29292;
  D.29285 = table->next_idx;
  D.29293 = D.29285 + 1;
  table->next_idx = D.29293;
  i = i + 1;
  <D.21283>:
  D.29294 = mono_array_length (permissions);
  if (D.29294 > i) goto <D.21282>; else goto <D.21284>;
  <D.21284>:
}


add_mono_string_to_blob_cached (struct MonoDynamicImage * assembly, struct MonoString * str)
{
  int D.29296;
  int D.29297;
  char * b.139;
  int b.140;
  int blob_size.141;
  int D.29301;
  mono_unichar2 * D.29302;
  int len.142;
  guint32 D.29304;
  char blob_size[64];
  char * b;
  guint32 idx;
  guint32 len;

  try
    {
      b = &blob_size;
      idx = 0;
      D.29296 = str->length;
      D.29297 = D.29296 * 2;
      len = (guint32) D.29297;
      b.139 = b;
      mono_metadata_encode_value (len, b.139, &b);
      b.139 = b;
      b.140 = (int) b.139;
      blob_size.141 = (int) &blob_size;
      D.29301 = b.140 - blob_size.141;
      D.29302 = mono_string_chars (str);
      len.142 = (int) len;
      idx = add_to_blob_cached (assembly, &blob_size, D.29301, D.29302, len.142);
      D.29304 = idx;
      return D.29304;
    }
  finally
    {
      blob_size = {CLOBBER};
      b = {CLOBBER};
    }
}


module_add_cattrs (struct MonoDynamicImage * assembly, struct MonoReflectionModuleBuilder * moduleb)
{
  unsigned int D.29307;
  struct MonoArray * D.29308;
  struct MonoArray * D.29309;
  unsigned int i.143;
  char * D.29313;
  unsigned int D.29314;
  struct MonoArray * D.29315;
  struct MonoArray * D.29316;
  unsigned int D.29317;
  struct MonoArray * D.29318;
  char * D.29321;
  int D.29322;
  unsigned int D.29323;
  struct MonoArray * D.29324;
  unsigned int D.29325;
  struct MonoArray * D.29326;
  char * D.29329;
  struct MonoReflectionTypeBuilder * D.29330;
  int D.29331;
  int i;

  D.29307 = moduleb->table_idx;
  D.29308 = moduleb->cattrs;
  mono_image_add_cattrs (assembly, D.29307, 7, D.29308);
  D.29309 = moduleb->global_methods;
  if (D.29309 != 0B) goto <D.29310>; else goto <D.29311>;
  <D.29310>:
  i = 0;
  goto <D.22023>;
  <D.22022>:
  {
    struct MonoReflectionMethodBuilder * mb;

    D.29309 = moduleb->global_methods;
    i.143 = (unsigned int) i;
    D.29313 = mono_array_addr_with_size (D.29309, 4, i.143);
    mb = MEM[(struct MonoReflectionMethodBuilder * *)D.29313];
    D.29314 = mb->table_idx;
    D.29315 = mb->cattrs;
    mono_image_add_cattrs (assembly, D.29314, 0, D.29315);
    D.29316 = mb->pinfo;
    params_add_cattrs (assembly, D.29316);
  }
  i = i + 1;
  <D.22023>:
  i.143 = (unsigned int) i;
  D.29309 = moduleb->global_methods;
  D.29317 = mono_array_length (D.29309);
  if (i.143 < D.29317) goto <D.22022>; else goto <D.22024>;
  <D.22024>:
  <D.29311>:
  D.29318 = moduleb->global_fields;
  if (D.29318 != 0B) goto <D.29319>; else goto <D.29320>;
  <D.29319>:
  i = 0;
  goto <D.22027>;
  <D.22026>:
  {
    struct MonoReflectionFieldBuilder * fb;

    D.29318 = moduleb->global_fields;
    i.143 = (unsigned int) i;
    D.29321 = mono_array_addr_with_size (D.29318, 4, i.143);
    fb = MEM[(struct MonoReflectionFieldBuilder * *)D.29321];
    D.29322 = fb->table_idx;
    D.29323 = (unsigned int) D.29322;
    D.29324 = fb->cattrs;
    mono_image_add_cattrs (assembly, D.29323, 1, D.29324);
  }
  i = i + 1;
  <D.22027>:
  i.143 = (unsigned int) i;
  D.29318 = moduleb->global_fields;
  D.29325 = mono_array_length (D.29318);
  if (i.143 < D.29325) goto <D.22026>; else goto <D.22028>;
  <D.22028>:
  <D.29320>:
  D.29326 = moduleb->types;
  if (D.29326 != 0B) goto <D.29327>; else goto <D.29328>;
  <D.29327>:
  i = 0;
  goto <D.22030>;
  <D.22029>:
  D.29326 = moduleb->types;
  i.143 = (unsigned int) i;
  D.29329 = mono_array_addr_with_size (D.29326, 4, i.143);
  D.29330 = MEM[(struct MonoReflectionTypeBuilder * *)D.29329];
  type_add_cattrs (assembly, D.29330);
  i = i + 1;
  <D.22030>:
  D.29331 = moduleb->num_types;
  if (D.29331 > i) goto <D.22029>; else goto <D.22031>;
  <D.22031>:
  <D.29328>:
}


params_add_cattrs (struct MonoDynamicImage * assembly, struct MonoArray * pinfo)
{
  unsigned int i.144;
  char * D.29335;
  unsigned int D.29338;
  struct MonoArray * D.29339;
  unsigned int D.29340;
  int i;

  if (pinfo == 0B) goto <D.29332>; else goto <D.29333>;
  <D.29332>:
  return;
  <D.29333>:
  i = 0;
  goto <D.21986>;
  <D.21985>:
  {
    struct MonoReflectionParamBuilder * pb;

    i.144 = (unsigned int) i;
    D.29335 = mono_array_addr_with_size (pinfo, 4, i.144);
    pb = MEM[(struct MonoReflectionParamBuilder * *)D.29335];
    if (pb == 0B) goto <D.29336>; else goto <D.29337>;
    <D.29336>:
    // predicted unlikely by continue predictor.
    goto <D.21984>;
    <D.29337>:
    D.29338 = pb->table_idx;
    D.29339 = pb->cattrs;
    mono_image_add_cattrs (assembly, D.29338, 4, D.29339);
  }
  <D.21984>:
  i = i + 1;
  <D.21986>:
  i.144 = (unsigned int) i;
  D.29340 = mono_array_length (pinfo);
  if (i.144 < D.29340) goto <D.21985>; else goto <D.21987>;
  <D.21987>:
}


type_add_cattrs (struct MonoDynamicImage * assembly, struct MonoReflectionTypeBuilder * tb)
{
  unsigned int D.29342;
  struct MonoArray * D.29343;
  struct MonoArray * D.29344;
  unsigned int i.145;
  char * D.29348;
  int D.29349;
  unsigned int D.29350;
  struct MonoArray * D.29351;
  int D.29352;
  struct MonoArray * D.29353;
  char * D.29356;
  unsigned int D.29357;
  struct MonoArray * D.29358;
  unsigned int D.29359;
  struct MonoArray * D.29360;
  char * D.29363;
  int D.29364;
  unsigned int D.29365;
  struct MonoArray * D.29366;
  unsigned int D.29367;
  struct MonoArray * D.29368;
  char * D.29371;
  unsigned int D.29372;
  struct MonoArray * D.29373;
  struct MonoArray * D.29374;
  unsigned int D.29375;
  struct MonoArray * D.29376;
  char * D.29379;
  unsigned int D.29380;
  struct MonoArray * D.29381;
  struct MonoArray * D.29382;
  int D.29383;
  struct MonoArray * D.29384;
  char * D.29387;
  struct MonoReflectionTypeBuilder * D.29388;
  unsigned int D.29389;
  int i;

  D.29342 = tb->table_idx;
  D.29343 = tb->cattrs;
  mono_image_add_cattrs (assembly, D.29342, 3, D.29343);
  D.29344 = tb->fields;
  if (D.29344 != 0B) goto <D.29345>; else goto <D.29346>;
  <D.29345>:
  i = 0;
  goto <D.21995>;
  <D.21994>:
  {
    struct MonoReflectionFieldBuilder * fb;

    D.29344 = tb->fields;
    i.145 = (unsigned int) i;
    D.29348 = mono_array_addr_with_size (D.29344, 4, i.145);
    fb = MEM[(struct MonoReflectionFieldBuilder * *)D.29348];
    D.29349 = fb->table_idx;
    D.29350 = (unsigned int) D.29349;
    D.29351 = fb->cattrs;
    mono_image_add_cattrs (assembly, D.29350, 1, D.29351);
  }
  i = i + 1;
  <D.21995>:
  D.29352 = tb->num_fields;
  if (D.29352 > i) goto <D.21994>; else goto <D.21996>;
  <D.21996>:
  <D.29346>:
  D.29353 = tb->events;
  if (D.29353 != 0B) goto <D.29354>; else goto <D.29355>;
  <D.29354>:
  i = 0;
  goto <D.21999>;
  <D.21998>:
  {
    struct MonoReflectionEventBuilder * eb;

    D.29353 = tb->events;
    i.145 = (unsigned int) i;
    D.29356 = mono_array_addr_with_size (D.29353, 4, i.145);
    eb = MEM[(struct MonoReflectionEventBuilder * *)D.29356];
    D.29357 = eb->table_idx;
    D.29358 = eb->cattrs;
    mono_image_add_cattrs (assembly, D.29357, 10, D.29358);
  }
  i = i + 1;
  <D.21999>:
  i.145 = (unsigned int) i;
  D.29353 = tb->events;
  D.29359 = mono_array_length (D.29353);
  if (i.145 < D.29359) goto <D.21998>; else goto <D.22000>;
  <D.22000>:
  <D.29355>:
  D.29360 = tb->properties;
  if (D.29360 != 0B) goto <D.29361>; else goto <D.29362>;
  <D.29361>:
  i = 0;
  goto <D.22003>;
  <D.22002>:
  {
    struct MonoReflectionPropertyBuilder * pb;

    D.29360 = tb->properties;
    i.145 = (unsigned int) i;
    D.29363 = mono_array_addr_with_size (D.29360, 4, i.145);
    pb = MEM[(struct MonoReflectionPropertyBuilder * *)D.29363];
    D.29364 = pb->table_idx;
    D.29365 = (unsigned int) D.29364;
    D.29366 = pb->cattrs;
    mono_image_add_cattrs (assembly, D.29365, 9, D.29366);
  }
  i = i + 1;
  <D.22003>:
  i.145 = (unsigned int) i;
  D.29360 = tb->properties;
  D.29367 = mono_array_length (D.29360);
  if (i.145 < D.29367) goto <D.22002>; else goto <D.22004>;
  <D.22004>:
  <D.29362>:
  D.29368 = tb->ctors;
  if (D.29368 != 0B) goto <D.29369>; else goto <D.29370>;
  <D.29369>:
  i = 0;
  goto <D.22007>;
  <D.22006>:
  {
    struct MonoReflectionCtorBuilder * cb;

    D.29368 = tb->ctors;
    i.145 = (unsigned int) i;
    D.29371 = mono_array_addr_with_size (D.29368, 4, i.145);
    cb = MEM[(struct MonoReflectionCtorBuilder * *)D.29371];
    D.29372 = cb->table_idx;
    D.29373 = cb->cattrs;
    mono_image_add_cattrs (assembly, D.29372, 0, D.29373);
    D.29374 = cb->pinfo;
    params_add_cattrs (assembly, D.29374);
  }
  i = i + 1;
  <D.22007>:
  i.145 = (unsigned int) i;
  D.29368 = tb->ctors;
  D.29375 = mono_array_length (D.29368);
  if (i.145 < D.29375) goto <D.22006>; else goto <D.22008>;
  <D.22008>:
  <D.29370>:
  D.29376 = tb->methods;
  if (D.29376 != 0B) goto <D.29377>; else goto <D.29378>;
  <D.29377>:
  i = 0;
  goto <D.22011>;
  <D.22010>:
  {
    struct MonoReflectionMethodBuilder * mb;

    D.29376 = tb->methods;
    i.145 = (unsigned int) i;
    D.29379 = mono_array_addr_with_size (D.29376, 4, i.145);
    mb = MEM[(struct MonoReflectionMethodBuilder * *)D.29379];
    D.29380 = mb->table_idx;
    D.29381 = mb->cattrs;
    mono_image_add_cattrs (assembly, D.29380, 0, D.29381);
    D.29382 = mb->pinfo;
    params_add_cattrs (assembly, D.29382);
  }
  i = i + 1;
  <D.22011>:
  D.29383 = tb->num_methods;
  if (D.29383 > i) goto <D.22010>; else goto <D.22012>;
  <D.22012>:
  <D.29378>:
  D.29384 = tb->subtypes;
  if (D.29384 != 0B) goto <D.29385>; else goto <D.29386>;
  <D.29385>:
  i = 0;
  goto <D.22014>;
  <D.22013>:
  D.29384 = tb->subtypes;
  i.145 = (unsigned int) i;
  D.29387 = mono_array_addr_with_size (D.29384, 4, i.145);
  D.29388 = MEM[(struct MonoReflectionTypeBuilder * *)D.29387];
  type_add_cattrs (assembly, D.29388);
  i = i + 1;
  <D.22014>:
  i.145 = (unsigned int) i;
  D.29384 = tb->subtypes;
  D.29389 = mono_array_length (D.29384);
  if (i.145 < D.29389) goto <D.22013>; else goto <D.22015>;
  <D.22015>:
  <D.29386>:
}


mono_image_add_methodimpl (struct MonoDynamicImage * assembly, struct MonoReflectionMethodBuilder * mb)
{
  struct MonoArray * D.29390;
  unsigned int i.146;
  char * D.29394;
  unsigned int D.29395;
  unsigned int D.29396;
  guint32 * D.29397;
  unsigned int D.29398;
  unsigned int D.29399;
  guint32 * D.29400;
  unsigned int D.29401;
  unsigned int D.29402;
  unsigned int D.29403;
  unsigned int D.29404;
  unsigned int D.29405;
  guint32 * D.29406;
  unsigned int D.29407;
  struct MonoReflectionTypeBuilder * tb;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 tok;
  struct MonoReflectionMethod * m;
  int i;

  tb = mb->type;
  D.29390 = mb->override_methods;
  if (D.29390 == 0B) goto <D.29391>; else goto <D.29392>;
  <D.29391>:
  return;
  <D.29392>:
  i = 0;
  goto <D.21331>;
  <D.21330>:
  D.29390 = mb->override_methods;
  i.146 = (unsigned int) i;
  D.29394 = mono_array_addr_with_size (D.29390, 4, i.146);
  m = MEM[(struct MonoReflectionMethod * *)D.29394];
  table = &assembly->tables[25];
  D.29395 = table->rows;
  D.29396 = D.29395 + 1;
  table->rows = D.29396;
  D.29395 = table->rows;
  alloc_table (table, D.29395);
  D.29397 = table->values;
  D.29395 = table->rows;
  D.29398 = D.29395 * 12;
  values = D.29397 + D.29398;
  D.29399 = tb->table_idx;
  *values = D.29399;
  D.29400 = values + 4;
  D.29401 = mb->table_idx;
  D.29402 = D.29401 << 1;
  *D.29400 = D.29402;
  tok = mono_image_create_token (assembly, m, 0, 0);
  D.29403 = tok >> 24;
  switch (D.29403) <default: <D.21329>, case 6: <D.21328>, case 10: <D.21326>>
  <D.21326>:
  D.29404 = tok & 16777215;
  D.29405 = D.29404 << 1;
  tok = D.29405 | 1;
  goto <D.21327>;
  <D.21328>:
  D.29404 = tok & 16777215;
  tok = D.29404 << 1;
  goto <D.21327>;
  <D.21329>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 1589);
  <D.21327>:
  D.29406 = values + 8;
  *D.29406 = tok;
  i = i + 1;
  <D.21331>:
  i.146 = (unsigned int) i;
  D.29390 = mb->override_methods;
  D.29407 = mono_array_length (D.29390);
  if (i.146 < D.29407) goto <D.21330>; else goto <D.21332>;
  <D.21332>:
}


fixup_cattrs (struct MonoDynamicImage * assembly)
{
  guint32 * D.29409;
  unsigned int D.29410;
  unsigned int D.29411;
  unsigned int D.29412;
  struct MonoGHashTable * D.29415;
  const void * token.147;
  _Bool D.29417;
  long int D.29418;
  long int D.29419;
  int D.22484;
  int iftmp.148;
  int D.22483;
  struct MonoVTable * D.29425;
  struct MonoClass * D.29426;
  const char[12] * D.29427;
  unsigned char D.29428;
  int D.29429;
  unsigned char D.29430;
  int D.29431;
  _Bool D.29432;
  _Bool D.29433;
  _Bool D.29434;
  const unsigned char * D.29437;
  unsigned char D.29438;
  int D.29439;
  const unsigned char * D.29440;
  unsigned char D.29441;
  int D.29442;
  _Bool D.29443;
  _Bool D.29444;
  const unsigned char * D.29447;
  unsigned char D.29448;
  int D.29449;
  const unsigned char * D.29450;
  unsigned char D.29451;
  int D.29452;
  _Bool D.29453;
  _Bool D.29454;
  const unsigned char * D.29457;
  unsigned char D.29458;
  int D.29459;
  const unsigned char * D.29460;
  unsigned char D.29461;
  int D.29462;
  const char * D.29464;
  struct GHashTable * D.29467;
  void * D.29468;
  guint32 * D.29469;
  unsigned int D.29470;
  unsigned int D.29471;
  int D.22494;
  int iftmp.149;
  int D.22493;
  const char[19] * D.29476;
  unsigned char D.29477;
  int D.29478;
  unsigned char D.29479;
  int D.29480;
  _Bool D.29481;
  _Bool D.29482;
  _Bool D.29483;
  const unsigned char * D.29486;
  unsigned char D.29487;
  int D.29488;
  const unsigned char * D.29489;
  unsigned char D.29490;
  int D.29491;
  _Bool D.29492;
  _Bool D.29493;
  const unsigned char * D.29496;
  unsigned char D.29497;
  int D.29498;
  const unsigned char * D.29499;
  unsigned char D.29500;
  int D.29501;
  _Bool D.29502;
  _Bool D.29503;
  const unsigned char * D.29506;
  unsigned char D.29507;
  int D.29508;
  const unsigned char * D.29509;
  unsigned char D.29510;
  int D.29511;
  void * D.29515;
  unsigned int D.29516;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 type;
  guint32 i;
  guint32 idx;
  guint32 token;
  struct MonoObject * ctor;

  table = &assembly->tables[12];
  i = 0;
  goto <D.22497>;
  <D.22496>:
  D.29409 = table->values;
  D.29410 = i + 1;
  D.29411 = D.29410 * 12;
  values = D.29409 + D.29411;
  type = MEM[(guint32 *)values + 4B];
  D.29412 = type & 7;
  if (D.29412 == 2) goto <D.29413>; else goto <D.29414>;
  <D.29413>:
  idx = type >> 3;
  token = idx | 100663296;
  D.29415 = assembly->remapped_tokens;
  token.147 = (const void *) token;
  ctor = mono_g_hash_table_lookup (D.29415, token.147);
  D.29417 = ctor == 0B;
  D.29418 = (long int) D.29417;
  D.29419 = __builtin_expect (D.29418, 0);
  if (D.29419 != 0) goto <D.29420>; else goto <D.29421>;
  <D.29420>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 4337, "ctor");
  <D.29421>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.29425 = ctor->vtable;
      D.29426 = D.29425->klass;
      __s2 = D.29426->name;
      D.29427 = "MonoCMethod";
      D.29428 = MEM[(const unsigned char *)D.29427];
      D.29429 = (int) D.29428;
      D.29430 = *__s2;
      D.29431 = (int) D.29430;
      __result = D.29429 - D.29431;
      {
        D.29432 = __s2_len != 0;
        D.29433 = __result == 0;
        D.29434 = D.29432 & D.29433;
        if (D.29434 != 0) goto <D.29435>; else goto <D.29436>;
        <D.29435>:
        D.29437 = &MEM[(void *)"MonoCMethod" + 1B];
        D.29438 = *D.29437;
        D.29439 = (int) D.29438;
        D.29440 = __s2 + 1;
        D.29441 = *D.29440;
        D.29442 = (int) D.29441;
        __result = D.29439 - D.29442;
        D.29443 = __s2_len > 1;
        D.29433 = __result == 0;
        D.29444 = D.29443 & D.29433;
        if (D.29444 != 0) goto <D.29445>; else goto <D.29446>;
        <D.29445>:
        D.29447 = &MEM[(void *)"MonoCMethod" + 2B];
        D.29448 = *D.29447;
        D.29449 = (int) D.29448;
        D.29450 = __s2 + 2;
        D.29451 = *D.29450;
        D.29452 = (int) D.29451;
        __result = D.29449 - D.29452;
        D.29453 = __s2_len > 2;
        D.29433 = __result == 0;
        D.29454 = D.29453 & D.29433;
        if (D.29454 != 0) goto <D.29455>; else goto <D.29456>;
        <D.29455>:
        D.29457 = &MEM[(void *)"MonoCMethod" + 3B];
        D.29458 = *D.29457;
        D.29459 = (int) D.29458;
        D.29460 = __s2 + 3;
        D.29461 = *D.29460;
        D.29462 = (int) D.29461;
        __result = D.29459 - D.29462;
        <D.29456>:
        <D.29446>:
        <D.29436>:
      }
      D.22483 = __result;
    }
    iftmp.148 = -D.22483;
    goto <D.29463>;
    <D.29424>:
    D.29425 = ctor->vtable;
    D.29426 = D.29425->klass;
    D.29464 = D.29426->name;
    iftmp.148 = __builtin_strcmp (D.29464, "MonoCMethod");
    <D.29463>:
    D.22484 = iftmp.148;
  }
  if (D.22484 == 0) goto <D.29465>; else goto <D.29466>;
  <D.29465>:
  {
    struct MonoMethod * m;

    m = MEM[(struct MonoReflectionMethod *)ctor].method;
    D.29467 = assembly->method_to_table_idx;
    D.29468 = monoeg_g_hash_table_lookup (D.29467, m);
    idx = (guint32) D.29468;
    D.29469 = values + 4;
    D.29470 = idx << 3;
    D.29471 = D.29470 | 2;
    *D.29469 = D.29471;
  }
  goto <D.29472>;
  <D.29466>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.29425 = ctor->vtable;
      D.29426 = D.29425->klass;
      __s2 = D.29426->name;
      D.29476 = "ConstructorBuilder";
      D.29477 = MEM[(const unsigned char *)D.29476];
      D.29478 = (int) D.29477;
      D.29479 = *__s2;
      D.29480 = (int) D.29479;
      __result = D.29478 - D.29480;
      {
        D.29481 = __s2_len != 0;
        D.29482 = __result == 0;
        D.29483 = D.29481 & D.29482;
        if (D.29483 != 0) goto <D.29484>; else goto <D.29485>;
        <D.29484>:
        D.29486 = &MEM[(void *)"ConstructorBuilder" + 1B];
        D.29487 = *D.29486;
        D.29488 = (int) D.29487;
        D.29489 = __s2 + 1;
        D.29490 = *D.29489;
        D.29491 = (int) D.29490;
        __result = D.29488 - D.29491;
        D.29492 = __s2_len > 1;
        D.29482 = __result == 0;
        D.29493 = D.29492 & D.29482;
        if (D.29493 != 0) goto <D.29494>; else goto <D.29495>;
        <D.29494>:
        D.29496 = &MEM[(void *)"ConstructorBuilder" + 2B];
        D.29497 = *D.29496;
        D.29498 = (int) D.29497;
        D.29499 = __s2 + 2;
        D.29500 = *D.29499;
        D.29501 = (int) D.29500;
        __result = D.29498 - D.29501;
        D.29502 = __s2_len > 2;
        D.29482 = __result == 0;
        D.29503 = D.29502 & D.29482;
        if (D.29503 != 0) goto <D.29504>; else goto <D.29505>;
        <D.29504>:
        D.29506 = &MEM[(void *)"ConstructorBuilder" + 3B];
        D.29507 = *D.29506;
        D.29508 = (int) D.29507;
        D.29509 = __s2 + 3;
        D.29510 = *D.29509;
        D.29511 = (int) D.29510;
        __result = D.29508 - D.29511;
        <D.29505>:
        <D.29495>:
        <D.29485>:
      }
      D.22493 = __result;
    }
    iftmp.149 = -D.22493;
    goto <D.29512>;
    <D.29475>:
    D.29425 = ctor->vtable;
    D.29426 = D.29425->klass;
    D.29464 = D.29426->name;
    iftmp.149 = __builtin_strcmp (D.29464, "ConstructorBuilder");
    <D.29512>:
    D.22494 = iftmp.149;
  }
  if (D.22494 == 0) goto <D.29513>; else goto <D.29514>;
  <D.29513>:
  {
    struct MonoMethod * m;

    m = MEM[(struct MonoReflectionCtorBuilder *)ctor].mhandle;
    D.29467 = assembly->method_to_table_idx;
    D.29515 = monoeg_g_hash_table_lookup (D.29467, m);
    idx = (guint32) D.29515;
    D.29469 = values + 4;
    D.29470 = idx << 3;
    D.29471 = D.29470 | 2;
    *D.29469 = D.29471;
  }
  <D.29514>:
  <D.29472>:
  <D.29414>:
  i = i + 1;
  <D.22497>:
  D.29516 = table->rows;
  if (D.29516 > i) goto <D.22496>; else goto <D.22498>;
  <D.22498>:
}


mono_image_insert_string (struct MonoReflectionModuleBuilder * module, struct MonoString * str)
{
  struct MonoDynamicImage * D.29517;
  int D.29520;
  int D.29523;
  int D.29524;
  int D.29525;
  unsigned int D.29526;
  char * b.150;
  struct MonoDynamicStream * D.29528;
  int b.151;
  int buf.152;
  int D.29531;
  unsigned int D.29532;
  mono_unichar2 * D.29533;
  unsigned int D.29534;
  unsigned int D.29536;
  unsigned int idx.153;
  unsigned int D.29538;
  struct MonoGHashTable * D.29539;
  unsigned int D.29540;
  void * D.29541;
  guint32 D.29542;
  struct MonoDynamicImage * assembly;
  guint32 idx;
  char buf[16];
  char * b;

  try
    {
      b = &buf;
      D.29517 = module->dynamic_image;
      if (D.29517 == 0B) goto <D.29518>; else goto <D.29519>;
      <D.29518>:
      mono_image_module_basic_init (module);
      <D.29519>:
      assembly = module->dynamic_image;
      D.29520 = assembly->save;
      if (D.29520 != 0) goto <D.29521>; else goto <D.29522>;
      <D.29521>:
      D.29523 = str->length;
      D.29524 = D.29523 * 2;
      D.29525 = D.29524 | 1;
      D.29526 = (unsigned int) D.29525;
      b.150 = b;
      mono_metadata_encode_value (D.29526, b.150, &b);
      D.29528 = &assembly->us;
      b.150 = b;
      b.151 = (int) b.150;
      buf.152 = (int) &buf;
      D.29531 = b.151 - buf.152;
      D.29532 = (unsigned int) D.29531;
      idx = mono_image_add_stream_data (D.29528, &buf, D.29532);
      D.29528 = &assembly->us;
      D.29533 = mono_string_chars (str);
      D.29523 = str->length;
      D.29524 = D.29523 * 2;
      D.29534 = (unsigned int) D.29524;
      mono_image_add_stream_data (D.29528, D.29533, D.29534);
      D.29528 = &assembly->us;
      mono_image_add_stream_data (D.29528, "", 1);
      goto <D.29535>;
      <D.29522>:
      D.29536 = assembly->us.index;
      idx.153 = D.29536;
      D.29538 = idx.153 + 1;
      assembly->us.index = D.29538;
      idx = idx.153;
      <D.29535>:
      D.29539 = assembly->tokens;
      D.29540 = idx | 1879048192;
      D.29541 = (void *) D.29540;
      mono_g_hash_table_insert (D.29539, D.29541, str);
      D.29542 = idx | 1879048192;
      return D.29542;
    }
  finally
    {
      buf = {CLOBBER};
      b = {CLOBBER};
    }
}


mono_image_create_method_token (struct MonoDynamicImage * assembly, struct MonoObject * obj, struct MonoArray * opt_param_types)
{
  struct MonoVTable * D.29545;
  int D.22659;
  int iftmp.154;
  int D.22658;
  const char[11] * D.29552;
  unsigned char D.29553;
  int D.29554;
  unsigned char D.29555;
  int D.29556;
  _Bool 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;
  _Bool D.29578;
  _Bool D.29579;
  const unsigned char * D.29582;
  unsigned char D.29583;
  int D.29584;
  const unsigned char * D.29585;
  unsigned char D.29586;
  int D.29587;
  const char * D.29589;
  int D.22668;
  int iftmp.155;
  int D.22667;
  const char[12] * D.29594;
  unsigned char D.29595;
  int D.29596;
  unsigned char D.29597;
  int D.29598;
  _Bool D.29599;
  _Bool D.29600;
  _Bool D.29601;
  const unsigned char * D.29604;
  unsigned char D.29605;
  int D.29606;
  const unsigned char * D.29607;
  unsigned char D.29608;
  int D.29609;
  _Bool D.29610;
  _Bool D.29611;
  const unsigned char * D.29614;
  unsigned char D.29615;
  int D.29616;
  const unsigned char * D.29617;
  unsigned char D.29618;
  int D.29619;
  _Bool D.29620;
  _Bool D.29621;
  const unsigned char * D.29624;
  unsigned char D.29625;
  int D.29626;
  const unsigned char * D.29627;
  unsigned char D.29628;
  int D.29629;
  int iftmp.156;
  struct MonoMethodSignature * D.29636;
  short int D.29637;
  _Bool D.29638;
  long int D.29639;
  long int D.29640;
  unsigned int D.29643;
  struct MonoImage * D.29644;
  short unsigned int D.29645;
  int D.29646;
  int D.29647;
  unsigned int D.29648;
  <unnamed-unsigned:1> D.29649;
  <unnamed-unsigned:1> D.29650;
  <unnamed-unsigned:6> D.29651;
  short unsigned int D.29652;
  short unsigned int D.29653;
  short unsigned int D.29654;
  short int D.29655;
  struct MonoType * D.29656;
  struct MonoType * D.29657;
  unsigned int i.157;
  char * D.29659;
  int D.29660;
  struct MonoType * D.29661;
  struct MonoClass * D.29662;
  struct MonoType * D.29663;
  unsigned int D.29664;
  _Bool D.29665;
  long int D.29666;
  long int D.29667;
  const char * D.29670;
  int D.22690;
  int iftmp.158;
  int D.22689;
  const char[14] * D.29674;
  unsigned char D.29675;
  int D.29676;
  unsigned char D.29677;
  int D.29678;
  _Bool D.29679;
  _Bool D.29680;
  _Bool D.29681;
  const unsigned char * D.29684;
  unsigned char D.29685;
  int D.29686;
  const unsigned char * D.29687;
  unsigned char D.29688;
  int D.29689;
  _Bool D.29690;
  _Bool D.29691;
  const unsigned char * D.29694;
  unsigned char D.29695;
  int D.29696;
  const unsigned char * D.29697;
  unsigned char D.29698;
  int D.29699;
  _Bool D.29700;
  _Bool D.29701;
  const unsigned char * D.29704;
  unsigned char D.29705;
  int D.29706;
  const unsigned char * D.29707;
  unsigned char D.29708;
  int D.29709;
  unsigned int D.29713;
  int iftmp.159;
  struct MonoArray * D.29715;
  unsigned int D.29718;
  int iftmp.160;
  struct MonoArray * D.29721;
  unsigned int D.29724;
  int D.29726;
  unsigned int D.29727;
  unsigned int D.29728;
  unsigned int D.29729;
  _Bool D.29730;
  unsigned int D.29731;
  unsigned int D.29732;
  _Bool D.29733;
  unsigned char D.29734;
  <unnamed-unsigned:6> D.29735;
  short unsigned int D.29736;
  short unsigned int D.29737;
  short unsigned int D.29738;
  short unsigned int D.29739;
  short int D.29740;
  struct MonoReflectionType * D.29741;
  struct MonoType * D.29742;
  unsigned int i.161;
  char * D.29744;
  struct MonoType * D.29745;
  char * D.29746;
  int D.29747;
  struct MonoType * D.29748;
  unsigned int D.29749;
  _Bool D.29750;
  long int D.29751;
  long int D.29752;
  unsigned int D.29755;
  struct MonoString * D.29756;
  struct GHashTable * D.29758;
  void * token.162;
  struct MonoGHashTable * D.29760;
  guint32 D.29761;
  struct MonoClass * klass;
  guint32 token;
  struct MonoMethodSignature * sig;

  token = 0;
  D.29545 = obj->vtable;
  klass = D.29545->klass;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.29552 = "MonoMethod";
      D.29553 = MEM[(const unsigned char *)D.29552];
      D.29554 = (int) D.29553;
      D.29555 = *__s2;
      D.29556 = (int) D.29555;
      __result = D.29554 - D.29556;
      {
        D.29557 = __s2_len != 0;
        D.29558 = __result == 0;
        D.29559 = D.29557 & D.29558;
        if (D.29559 != 0) goto <D.29560>; else goto <D.29561>;
        <D.29560>:
        D.29562 = &MEM[(void *)"MonoMethod" + 1B];
        D.29563 = *D.29562;
        D.29564 = (int) D.29563;
        D.29565 = __s2 + 1;
        D.29566 = *D.29565;
        D.29567 = (int) D.29566;
        __result = D.29564 - D.29567;
        D.29568 = __s2_len > 1;
        D.29558 = __result == 0;
        D.29569 = D.29568 & D.29558;
        if (D.29569 != 0) goto <D.29570>; else goto <D.29571>;
        <D.29570>:
        D.29572 = &MEM[(void *)"MonoMethod" + 2B];
        D.29573 = *D.29572;
        D.29574 = (int) D.29573;
        D.29575 = __s2 + 2;
        D.29576 = *D.29575;
        D.29577 = (int) D.29576;
        __result = D.29574 - D.29577;
        D.29578 = __s2_len > 2;
        D.29558 = __result == 0;
        D.29579 = D.29578 & D.29558;
        if (D.29579 != 0) goto <D.29580>; else goto <D.29581>;
        <D.29580>:
        D.29582 = &MEM[(void *)"MonoMethod" + 3B];
        D.29583 = *D.29582;
        D.29584 = (int) D.29583;
        D.29585 = __s2 + 3;
        D.29586 = *D.29585;
        D.29587 = (int) D.29586;
        __result = D.29584 - D.29587;
        <D.29581>:
        <D.29571>:
        <D.29561>:
      }
      D.22658 = __result;
    }
    iftmp.154 = -D.22658;
    goto <D.29588>;
    <D.29551>:
    D.29589 = klass->name;
    iftmp.154 = __builtin_strcmp (D.29589, "MonoMethod");
    <D.29588>:
    D.22659 = iftmp.154;
  }
  if (D.22659 == 0) goto <D.29546>; else goto <D.29590>;
  <D.29590>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.29594 = "MonoCMethod";
      D.29595 = MEM[(const unsigned char *)D.29594];
      D.29596 = (int) D.29595;
      D.29597 = *__s2;
      D.29598 = (int) D.29597;
      __result = D.29596 - D.29598;
      {
        D.29599 = __s2_len != 0;
        D.29600 = __result == 0;
        D.29601 = D.29599 & D.29600;
        if (D.29601 != 0) goto <D.29602>; else goto <D.29603>;
        <D.29602>:
        D.29604 = &MEM[(void *)"MonoCMethod" + 1B];
        D.29605 = *D.29604;
        D.29606 = (int) D.29605;
        D.29607 = __s2 + 1;
        D.29608 = *D.29607;
        D.29609 = (int) D.29608;
        __result = D.29606 - D.29609;
        D.29610 = __s2_len > 1;
        D.29600 = __result == 0;
        D.29611 = D.29610 & D.29600;
        if (D.29611 != 0) goto <D.29612>; else goto <D.29613>;
        <D.29612>:
        D.29614 = &MEM[(void *)"MonoCMethod" + 2B];
        D.29615 = *D.29614;
        D.29616 = (int) D.29615;
        D.29617 = __s2 + 2;
        D.29618 = *D.29617;
        D.29619 = (int) D.29618;
        __result = D.29616 - D.29619;
        D.29620 = __s2_len > 2;
        D.29600 = __result == 0;
        D.29621 = D.29620 & D.29600;
        if (D.29621 != 0) goto <D.29622>; else goto <D.29623>;
        <D.29622>:
        D.29624 = &MEM[(void *)"MonoCMethod" + 3B];
        D.29625 = *D.29624;
        D.29626 = (int) D.29625;
        D.29627 = __s2 + 3;
        D.29628 = *D.29627;
        D.29629 = (int) D.29628;
        __result = D.29626 - D.29629;
        <D.29623>:
        <D.29613>:
        <D.29603>:
      }
      D.22667 = __result;
    }
    iftmp.155 = -D.22667;
    goto <D.29630>;
    <D.29593>:
    D.29589 = klass->name;
    iftmp.155 = __builtin_strcmp (D.29589, "MonoCMethod");
    <D.29630>:
    D.22668 = iftmp.155;
  }
  if (D.22668 == 0) goto <D.29546>; else goto <D.29547>;
  <D.29546>:
  {
    struct MonoMethod * method;
    struct MonoMethodSignature * old;
    guint32 sig_token;
    guint32 parent;
    int nargs;
    int i;

    method = MEM[(struct MonoReflectionMethod *)obj].method;
    if (opt_param_types == 0B) goto <D.29632>; else goto <D.29635>;
    <D.29635>:
    D.29636 = mono_method_signature (method);
    D.29637 = D.29636->sentinelpos;
    if (D.29637 < 0) goto <D.29632>; else goto <D.29633>;
    <D.29632>:
    iftmp.156 = 1;
    goto <D.29634>;
    <D.29633>:
    iftmp.156 = 0;
    <D.29634>:
    D.29638 = iftmp.156 != 0;
    D.29639 = (long int) D.29638;
    D.29640 = __builtin_expect (D.29639, 0);
    if (D.29640 != 0) goto <D.29641>; else goto <D.29642>;
    <D.29641>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 4813, "opt_param_types && (mono_method_signature (method)->sentinelpos >= 0)");
    <D.29642>:
    D.29643 = mono_array_length (opt_param_types);
    nargs = (int) D.29643;
    old = mono_method_signature (method);
    D.29644 = &assembly->image;
    D.29645 = old->param_count;
    D.29646 = (int) D.29645;
    D.29647 = D.29646 + nargs;
    D.29648 = (unsigned int) D.29647;
    sig = mono_metadata_signature_alloc (D.29644, D.29648);
    D.29649 = old->hasthis;
    sig->hasthis = D.29649;
    D.29650 = old->explicit_this;
    sig->explicit_this = D.29650;
    D.29651 = old->call_convention;
    sig->call_convention = D.29651;
    D.29652 = old->generic_param_count;
    sig->generic_param_count = D.29652;
    D.29645 = old->param_count;
    D.29653 = (short unsigned int) nargs;
    D.29654 = D.29645 + D.29653;
    sig->param_count = D.29654;
    D.29645 = old->param_count;
    D.29655 = (short int) D.29645;
    sig->sentinelpos = D.29655;
    D.29656 = old->ret;
    sig->ret = D.29656;
    i = 0;
    goto <D.22676>;
    <D.22675>:
    D.29657 = old->params[i];
    sig->params[i] = D.29657;
    i = i + 1;
    <D.22676>:
    D.29645 = old->param_count;
    D.29646 = (int) D.29645;
    if (D.29646 > i) goto <D.22675>; else goto <D.22677>;
    <D.22677>:
    i = 0;
    goto <D.22680>;
    <D.22679>:
    {
      struct MonoReflectionType * rt;

      i.157 = (unsigned int) i;
      D.29659 = mono_array_addr_with_size (opt_param_types, 4, i.157);
      rt = MEM[(struct MonoReflectionType * *)D.29659];
      D.29645 = old->param_count;
      D.29646 = (int) D.29645;
      D.29660 = D.29646 + i;
      D.29661 = mono_reflection_type_get_handle (rt);
      sig->params[D.29660] = D.29661;
    }
    i = i + 1;
    <D.22680>:
    if (i < nargs) goto <D.22679>; else goto <D.22681>;
    <D.22681>:
    D.29662 = method->klass;
    D.29663 = &D.29662->byval_arg;
    parent = mono_image_typedef_or_ref (assembly, D.29663);
    D.29664 = parent & 3;
    D.29665 = D.29664 != 1;
    D.29666 = (long int) D.29665;
    D.29667 = __builtin_expect (D.29666, 0);
    if (D.29667 != 0) goto <D.29668>; else goto <D.29669>;
    <D.29668>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 4836, "(parent & MONO_TYPEDEFORREF_MASK) == MONO_MEMBERREF_PARENT_TYPEREF");
    <D.29669>:
    parent = parent >> 2;
    parent = parent << 3;
    parent = parent | 1;
    sig_token = method_encode_signature (assembly, sig);
    D.29670 = method->name;
    token = mono_image_get_varargs_method_token (assembly, parent, D.29670, sig_token);
  }
  goto <D.29548>;
  <D.29547>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.29674 = "MethodBuilder";
      D.29675 = MEM[(const unsigned char *)D.29674];
      D.29676 = (int) D.29675;
      D.29677 = *__s2;
      D.29678 = (int) D.29677;
      __result = D.29676 - D.29678;
      {
        D.29679 = __s2_len != 0;
        D.29680 = __result == 0;
        D.29681 = D.29679 & D.29680;
        if (D.29681 != 0) goto <D.29682>; else goto <D.29683>;
        <D.29682>:
        D.29684 = &MEM[(void *)"MethodBuilder" + 1B];
        D.29685 = *D.29684;
        D.29686 = (int) D.29685;
        D.29687 = __s2 + 1;
        D.29688 = *D.29687;
        D.29689 = (int) D.29688;
        __result = D.29686 - D.29689;
        D.29690 = __s2_len > 1;
        D.29680 = __result == 0;
        D.29691 = D.29690 & D.29680;
        if (D.29691 != 0) goto <D.29692>; else goto <D.29693>;
        <D.29692>:
        D.29694 = &MEM[(void *)"MethodBuilder" + 2B];
        D.29695 = *D.29694;
        D.29696 = (int) D.29695;
        D.29697 = __s2 + 2;
        D.29698 = *D.29697;
        D.29699 = (int) D.29698;
        __result = D.29696 - D.29699;
        D.29700 = __s2_len > 2;
        D.29680 = __result == 0;
        D.29701 = D.29700 & D.29680;
        if (D.29701 != 0) goto <D.29702>; else goto <D.29703>;
        <D.29702>:
        D.29704 = &MEM[(void *)"MethodBuilder" + 3B];
        D.29705 = *D.29704;
        D.29706 = (int) D.29705;
        D.29707 = __s2 + 3;
        D.29708 = *D.29707;
        D.29709 = (int) D.29708;
        __result = D.29706 - D.29709;
        <D.29703>:
        <D.29693>:
        <D.29683>:
      }
      D.22689 = __result;
    }
    iftmp.158 = -D.22689;
    goto <D.29710>;
    <D.29673>:
    D.29589 = klass->name;
    iftmp.158 = __builtin_strcmp (D.29589, "MethodBuilder");
    <D.29710>:
    D.22690 = iftmp.158;
  }
  if (D.22690 == 0) goto <D.29711>; else goto <D.29712>;
  <D.29711>:
  {
    struct MonoReflectionMethodBuilder * mb;
    struct ReflectionMethodBuilder rmb;
    guint32 parent;
    guint32 sig_token;
    int nopt_args;
    int nparams;
    int ngparams;
    int i;
    char * name;

    try
      {
        mb = obj;
        reflection_methodbuilder_from_method_builder (&rmb, mb);
        rmb.opt_types = opt_param_types;
        D.29713 = mono_array_length (opt_param_types);
        nopt_args = (int) D.29713;
        D.29715 = rmb.parameters;
        if (D.29715 != 0B) goto <D.29716>; else goto <D.29717>;
        <D.29716>:
        D.29715 = rmb.parameters;
        D.29718 = mono_array_length (D.29715);
        iftmp.159 = (int) D.29718;
        goto <D.29719>;
        <D.29717>:
        iftmp.159 = 0;
        <D.29719>:
        nparams = iftmp.159;
        D.29721 = rmb.generic_params;
        if (D.29721 != 0B) goto <D.29722>; else goto <D.29723>;
        <D.29722>:
        D.29721 = rmb.generic_params;
        D.29724 = mono_array_length (D.29721);
        iftmp.160 = (int) D.29724;
        goto <D.29725>;
        <D.29723>:
        iftmp.160 = 0;
        <D.29725>:
        ngparams = iftmp.160;
        D.29644 = &assembly->image;
        D.29726 = nparams + nopt_args;
        D.29727 = (unsigned int) D.29726;
        sig = mono_metadata_signature_alloc (D.29644, D.29727);
        D.29728 = rmb.attrs;
        D.29729 = D.29728 & 16;
        D.29730 = D.29729 == 0;
        sig->hasthis = D.29730;
        D.29731 = rmb.call_conv;
        D.29732 = D.29731 & 64;
        D.29733 = D.29732 != 0;
        sig->explicit_this = D.29733;
        D.29731 = rmb.call_conv;
        D.29734 = (unsigned char) D.29731;
        D.29735 = (<unnamed-unsigned:6>) D.29734;
        sig->call_convention = D.29735;
        D.29736 = (short unsigned int) ngparams;
        sig->generic_param_count = D.29736;
        D.29737 = (short unsigned int) nparams;
        D.29738 = (short unsigned int) nopt_args;
        D.29739 = D.29737 + D.29738;
        sig->param_count = D.29739;
        D.29740 = (short int) nparams;
        sig->sentinelpos = D.29740;
        D.29741 = rmb.rtype;
        D.29742 = mono_reflection_type_get_handle (D.29741);
        sig->ret = D.29742;
        i = 0;
        goto <D.22702>;
        <D.22701>:
        {
          struct MonoReflectionType * rt;

          D.29715 = rmb.parameters;
          i.161 = (unsigned int) i;
          D.29744 = mono_array_addr_with_size (D.29715, 4, i.161);
          rt = MEM[(struct MonoReflectionType * *)D.29744];
          D.29745 = mono_reflection_type_get_handle (rt);
          sig->params[i] = D.29745;
        }
        i = i + 1;
        <D.22702>:
        if (i < nparams) goto <D.22701>; else goto <D.22703>;
        <D.22703>:
        i = 0;
        goto <D.22706>;
        <D.22705>:
        {
          struct MonoReflectionType * rt;

          i.161 = (unsigned int) i;
          D.29746 = mono_array_addr_with_size (opt_param_types, 4, i.161);
          rt = MEM[(struct MonoReflectionType * *)D.29746];
          D.29747 = nparams + i;
          D.29748 = mono_reflection_type_get_handle (rt);
          sig->params[D.29747] = D.29748;
        }
        i = i + 1;
        <D.22706>:
        if (i < nopt_args) goto <D.22705>; else goto <D.22707>;
        <D.22707>:
        sig_token = method_builder_encode_signature (assembly, &rmb);
        parent = mono_image_create_token (assembly, obj, 1, 1);
        D.29749 = parent >> 24;
        D.29750 = D.29749 != 6;
        D.29751 = (long int) D.29750;
        D.29752 = __builtin_expect (D.29751, 0);
        if (D.29752 != 0) goto <D.29753>; else goto <D.29754>;
        <D.29753>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 4880, "mono_metadata_token_table (parent) == MONO_TABLE_METHOD");
        <D.29754>:
        D.29755 = parent & 16777215;
        parent = D.29755 << 3;
        parent = parent | 3;
        D.29756 = rmb.name;
        name = mono_string_to_utf8 (D.29756);
        token = mono_image_get_varargs_method_token (assembly, parent, name, sig_token);
        monoeg_g_free (name);
      }
    finally
      {
        rmb = {CLOBBER};
      }
  }
  goto <D.29757>;
  <D.29712>:
  D.29589 = klass->name;
  monoeg_g_log (0B, 4, "requested method token for %s\n", D.29589);
  <D.22708>:
  goto <D.22708>;
  <D.29757>:
  <D.29548>:
  D.29758 = assembly->vararg_aux_hash;
  token.162 = (void *) token;
  monoeg_g_hash_table_insert_replace (D.29758, token.162, sig, 0);
  D.29760 = assembly->tokens;
  token.162 = (void *) token;
  mono_g_hash_table_insert (D.29760, token.162, obj);
  D.29761 = token;
  return D.29761;
}


method_encode_signature (struct MonoDynamicImage * assembly, struct MonoMethodSignature * sig)
{
  short unsigned int D.29763;
  int D.29764;
  guint32 D.29767;
  <unnamed-unsigned:6> D.29768;
  unsigned char D.29769;
  unsigned char D.29770;
  short unsigned int D.29773;
  unsigned char D.29776;
  unsigned int D.29779;
  struct MonoType * D.29780;
  short int D.29781;
  int D.29782;
  struct MonoType * D.29785;
  unsigned int i.163;
  struct SigBuffer buf;
  int i;
  guint32 nparams;
  guint32 idx;

  try
    {
      D.29763 = sig->param_count;
      nparams = (guint32) D.29763;
      D.29764 = assembly->save;
      if (D.29764 == 0) goto <D.29765>; else goto <D.29766>;
      <D.29765>:
      D.29767 = 0;
      return D.29767;
      <D.29766>:
      sigbuffer_init (&buf, 32);
      D.29768 = sig->call_convention;
      idx = (guint32) D.29768;
      D.29769 = BIT_FIELD_REF <*sig, 8, 80>;
      D.29770 = D.29769 & 64;
      if (D.29770 != 0) goto <D.29771>; else goto <D.29772>;
      <D.29771>:
      idx = idx | 32;
      <D.29772>:
      D.29773 = sig->generic_param_count;
      if (D.29773 != 0) goto <D.29774>; else goto <D.29775>;
      <D.29774>:
      idx = idx | 16;
      <D.29775>:
      D.29776 = (unsigned char) idx;
      sigbuffer_add_byte (&buf, D.29776);
      D.29773 = sig->generic_param_count;
      if (D.29773 != 0) goto <D.29777>; else goto <D.29778>;
      <D.29777>:
      D.29773 = sig->generic_param_count;
      D.29779 = (unsigned int) D.29773;
      sigbuffer_add_value (&buf, D.29779);
      <D.29778>:
      sigbuffer_add_value (&buf, nparams);
      D.29780 = sig->ret;
      encode_type (assembly, D.29780, &buf);
      i = 0;
      goto <D.21091>;
      <D.21090>:
      D.29781 = sig->sentinelpos;
      D.29782 = (int) D.29781;
      if (D.29782 == i) goto <D.29783>; else goto <D.29784>;
      <D.29783>:
      sigbuffer_add_byte (&buf, 65);
      <D.29784>:
      D.29785 = sig->params[i];
      encode_type (assembly, D.29785, &buf);
      i = i + 1;
      <D.21091>:
      i.163 = (unsigned int) i;
      if (i.163 < nparams) goto <D.21090>; else goto <D.21092>;
      <D.21092>:
      idx = sigbuffer_add_to_blob_cached (assembly, &buf);
      sigbuffer_free (&buf);
      D.29767 = idx;
      return D.29767;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


mono_image_get_varargs_method_token (struct MonoDynamicImage * assembly, guint32 original, const gchar * name, guint32 sig)
{
  int D.29789;
  unsigned int D.29792;
  unsigned int D.29793;
  guint32 * D.29794;
  unsigned int D.29795;
  unsigned int D.29796;
  guint32 * D.29797;
  struct MonoDynamicStream * D.29798;
  unsigned int D.29799;
  guint32 * D.29800;
  unsigned int D.29801;
  guint32 D.29802;
  struct MonoDynamicTable * table;
  guint32 token;
  guint32 * values;

  table = &assembly->tables[10];
  D.29789 = assembly->save;
  if (D.29789 != 0) goto <D.29790>; else goto <D.29791>;
  <D.29790>:
  D.29792 = table->rows;
  D.29793 = D.29792 + 1;
  alloc_table (table, D.29793);
  D.29794 = table->values;
  D.29795 = table->next_idx;
  D.29796 = D.29795 * 12;
  values = D.29794 + D.29796;
  *values = original;
  D.29797 = values + 4;
  D.29798 = &assembly->sheap;
  D.29799 = string_heap_insert (D.29798, name);
  *D.29797 = D.29799;
  D.29800 = values + 8;
  *D.29800 = sig;
  <D.29791>:
  D.29795 = table->next_idx;
  token = D.29795 | 167772160;
  D.29795 = table->next_idx;
  D.29801 = D.29795 + 1;
  table->next_idx = D.29801;
  D.29802 = token;
  return D.29802;
}


mono_image_create_token (struct MonoDynamicImage * assembly, struct MonoObject * obj, gboolean create_open_instance, gboolean register_token)
{
  struct MonoVTable * D.29804;
  struct MonoImage * D.29807;
  struct MonoImage * D.29808;
  int D.22725;
  int iftmp.164;
  int D.22724;
  const char[14] * D.29813;
  unsigned char D.29814;
  int D.29815;
  unsigned char D.29816;
  int D.29817;
  _Bool D.29818;
  _Bool D.29819;
  _Bool D.29820;
  const unsigned char * D.29823;
  unsigned char D.29824;
  int D.29825;
  const unsigned char * D.29826;
  unsigned char D.29827;
  int D.29828;
  _Bool D.29829;
  _Bool D.29830;
  const unsigned char * D.29833;
  unsigned char D.29834;
  int D.29835;
  const unsigned char * D.29836;
  unsigned char D.29837;
  int D.29838;
  _Bool D.29839;
  _Bool D.29840;
  const unsigned char * D.29843;
  unsigned char D.29844;
  int D.29845;
  const unsigned char * D.29846;
  unsigned char D.29847;
  int D.29848;
  const char * D.29850;
  struct MonoException * D.29851;
  int D.22734;
  int iftmp.165;
  int D.22733;
  const char[14] * D.29855;
  unsigned char D.29856;
  int D.29857;
  unsigned char D.29858;
  int D.29859;
  _Bool D.29860;
  _Bool D.29861;
  _Bool D.29862;
  const unsigned char * D.29865;
  unsigned char D.29866;
  int D.29867;
  const unsigned char * D.29868;
  unsigned char D.29869;
  int D.29870;
  _Bool D.29871;
  _Bool D.29872;
  const unsigned char * D.29875;
  unsigned char D.29876;
  int D.29877;
  const unsigned char * D.29878;
  unsigned char D.29879;
  int D.29880;
  _Bool D.29881;
  _Bool D.29882;
  const unsigned char * D.29885;
  unsigned char D.29886;
  int D.29887;
  const unsigned char * D.29888;
  unsigned char D.29889;
  int D.29890;
  struct MonoReflectionModuleBuilder * D.29896;
  struct MonoDynamicImage * D.29897;
  struct MonoArray * D.29899;
  struct MonoArray * D.29901;
  unsigned int D.29903;
  int D.22745;
  int iftmp.166;
  int D.22744;
  const char[19] * D.29908;
  unsigned char D.29909;
  int D.29910;
  unsigned char D.29911;
  int D.29912;
  _Bool D.29913;
  _Bool D.29914;
  _Bool D.29915;
  const unsigned char * D.29918;
  unsigned char D.29919;
  int D.29920;
  const unsigned char * D.29921;
  unsigned char D.29922;
  int D.29923;
  _Bool D.29924;
  _Bool D.29925;
  const unsigned char * D.29928;
  unsigned char D.29929;
  int D.29930;
  const unsigned char * D.29931;
  unsigned char D.29932;
  int 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;
  struct MonoReflectionModuleBuilder * D.29949;
  struct MonoDynamicImage * D.29950;
  struct MonoArray * D.29952;
  unsigned int D.29954;
  int D.22756;
  int iftmp.167;
  int D.22755;
  const char[13] * D.29959;
  unsigned char D.29960;
  int D.29961;
  unsigned char D.29962;
  int D.29963;
  _Bool D.29964;
  _Bool D.29965;
  _Bool D.29966;
  const unsigned char * D.29969;
  unsigned char D.29970;
  int D.29971;
  const unsigned char * D.29972;
  unsigned char D.29973;
  int D.29974;
  _Bool D.29975;
  _Bool D.29976;
  const unsigned char * D.29979;
  unsigned char D.29980;
  int D.29981;
  const unsigned char * D.29982;
  unsigned char D.29983;
  int D.29984;
  _Bool D.29985;
  _Bool D.29986;
  const unsigned char * D.29989;
  unsigned char D.29990;
  int D.29991;
  const unsigned char * D.29992;
  unsigned char D.29993;
  int D.29994;
  struct MonoArray * D.29998;
  struct MonoReflectionModuleBuilder * D.30002;
  struct MonoDynamicImage * D.30003;
  int D.30006;
  int D.30007;
  struct MonoClassField * D.30009;
  int D.22767;
  int iftmp.168;
  int D.22766;
  const char[12] * D.30014;
  unsigned char D.30015;
  int D.30016;
  unsigned char D.30017;
  int D.30018;
  _Bool D.30019;
  _Bool D.30020;
  _Bool D.30021;
  const unsigned char * D.30024;
  unsigned char D.30025;
  int D.30026;
  const unsigned char * D.30027;
  unsigned char D.30028;
  int D.30029;
  _Bool D.30030;
  _Bool D.30031;
  const unsigned char * D.30034;
  unsigned char D.30035;
  int D.30036;
  const unsigned char * D.30037;
  unsigned char D.30038;
  int D.30039;
  _Bool D.30040;
  _Bool D.30041;
  const unsigned char * D.30044;
  unsigned char D.30045;
  int D.30046;
  const unsigned char * D.30047;
  unsigned char D.30048;
  int D.30049;
  struct MonoArray * D.30056;
  struct MonoReflectionModuleBuilder * D.30058;
  struct MonoDynamicImage * D.30059;
  unsigned int D.30062;
  unsigned int D.30064;
  int D.22779;
  int iftmp.169;
  int D.22778;
  const char[9] * D.30069;
  unsigned char D.30070;
  int D.30071;
  unsigned char D.30072;
  int D.30073;
  _Bool D.30074;
  _Bool D.30075;
  _Bool D.30076;
  const unsigned char * D.30079;
  unsigned char D.30080;
  int D.30081;
  const unsigned char * D.30082;
  unsigned char D.30083;
  int D.30084;
  _Bool D.30085;
  _Bool D.30086;
  const unsigned char * D.30089;
  unsigned char D.30090;
  int D.30091;
  const unsigned char * D.30092;
  unsigned char D.30093;
  int D.30094;
  _Bool D.30095;
  _Bool D.30096;
  const unsigned char * D.30099;
  unsigned char D.30100;
  int D.30101;
  const unsigned char * D.30102;
  unsigned char D.30103;
  int D.30104;
  int iftmp.170;
  struct MonoGenericContainer * D.30112;
  unsigned int D.30114;
  int D.22790;
  int iftmp.171;
  int D.22789;
  const char[28] * D.30119;
  unsigned char D.30120;
  int D.30121;
  unsigned char D.30122;
  int D.30123;
  _Bool D.30124;
  _Bool D.30125;
  _Bool D.30126;
  const unsigned char * D.30129;
  unsigned char D.30130;
  int D.30131;
  const unsigned char * D.30132;
  unsigned char D.30133;
  int D.30134;
  _Bool D.30135;
  _Bool D.30136;
  const unsigned char * D.30139;
  unsigned char D.30140;
  int D.30141;
  const unsigned char * D.30142;
  unsigned char D.30143;
  int D.30144;
  _Bool D.30145;
  _Bool D.30146;
  const unsigned char * D.30149;
  unsigned char D.30150;
  int D.30151;
  const unsigned char * D.30152;
  unsigned char D.30153;
  int D.30154;
  unsigned int D.30158;
  int D.22800;
  int iftmp.172;
  int D.22799;
  const char[17] * D.30163;
  unsigned char D.30164;
  int D.30165;
  unsigned char D.30166;
  int D.30167;
  _Bool D.30168;
  _Bool D.30169;
  _Bool D.30170;
  const unsigned char * D.30173;
  unsigned char D.30174;
  int D.30175;
  const unsigned char * D.30176;
  unsigned char D.30177;
  int D.30178;
  _Bool D.30179;
  _Bool D.30180;
  const unsigned char * D.30183;
  unsigned char D.30184;
  int D.30185;
  const unsigned char * D.30186;
  unsigned char D.30187;
  int 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;
  unsigned int D.30202;
  int D.22810;
  int iftmp.173;
  int D.22809;
  const char[12] * D.30210;
  unsigned char D.30211;
  int D.30212;
  unsigned char D.30213;
  int D.30214;
  _Bool D.30215;
  _Bool D.30216;
  _Bool D.30217;
  const unsigned char * D.30220;
  unsigned char D.30221;
  int D.30222;
  const unsigned char * D.30223;
  unsigned char D.30224;
  int D.30225;
  _Bool D.30226;
  _Bool D.30227;
  const unsigned char * D.30230;
  unsigned char D.30231;
  int D.30232;
  const unsigned char * D.30233;
  unsigned char D.30234;
  int D.30235;
  _Bool D.30236;
  _Bool D.30237;
  const unsigned char * D.30240;
  unsigned char D.30241;
  int D.30242;
  const unsigned char * D.30243;
  unsigned char D.30244;
  int D.30245;
  int D.22819;
  int iftmp.174;
  int D.22818;
  const char[11] * D.30251;
  unsigned char D.30252;
  int D.30253;
  unsigned char D.30254;
  int D.30255;
  _Bool D.30256;
  _Bool D.30257;
  _Bool D.30258;
  const unsigned char * D.30261;
  unsigned char D.30262;
  int D.30263;
  const unsigned char * D.30264;
  unsigned char D.30265;
  int D.30266;
  _Bool D.30267;
  _Bool D.30268;
  const unsigned char * D.30271;
  unsigned char D.30272;
  int D.30273;
  const unsigned char * D.30274;
  unsigned char D.30275;
  int D.30276;
  _Bool D.30277;
  _Bool D.30278;
  const unsigned char * D.30281;
  unsigned char D.30282;
  int D.30283;
  const unsigned char * D.30284;
  unsigned char D.30285;
  int D.30286;
  int D.22828;
  int iftmp.175;
  int D.22827;
  const char[18] * D.30292;
  unsigned char D.30293;
  int D.30294;
  unsigned char D.30295;
  int D.30296;
  _Bool D.30297;
  _Bool D.30298;
  _Bool D.30299;
  const unsigned char * D.30302;
  unsigned char D.30303;
  int D.30304;
  const unsigned char * D.30305;
  unsigned char D.30306;
  int D.30307;
  _Bool D.30308;
  _Bool D.30309;
  const unsigned char * D.30312;
  unsigned char D.30313;
  int D.30314;
  const unsigned char * D.30315;
  unsigned char D.30316;
  int D.30317;
  _Bool D.30318;
  _Bool D.30319;
  const unsigned char * D.30322;
  unsigned char D.30323;
  int D.30324;
  const unsigned char * D.30325;
  unsigned char D.30326;
  int D.30327;
  int D.22837;
  int iftmp.176;
  int D.22836;
  const char[19] * D.30333;
  unsigned char D.30334;
  int D.30335;
  unsigned char D.30336;
  int D.30337;
  _Bool D.30338;
  _Bool D.30339;
  _Bool D.30340;
  const unsigned char * D.30343;
  unsigned char D.30344;
  int D.30345;
  const unsigned char * D.30346;
  unsigned char D.30347;
  int D.30348;
  _Bool D.30349;
  _Bool D.30350;
  const unsigned char * D.30353;
  unsigned char D.30354;
  int D.30355;
  const unsigned char * D.30356;
  unsigned char D.30357;
  int 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;
  struct MonoMethod * D.30370;
  unsigned char D.30371;
  unsigned char D.30372;
  struct MonoClass * D.30381;
  struct MonoImage * D.30382;
  struct MonoImage * D.30383;
  struct MonoGenericClass * D.30385;
  unsigned char D.30387;
  unsigned char D.30388;
  unsigned int method_table_idx.177;
  unsigned int method_table_idx.178;
  int D.22848;
  int iftmp.179;
  int D.22847;
  const char[10] * D.30397;
  unsigned char D.30398;
  int D.30399;
  unsigned char D.30400;
  int D.30401;
  _Bool D.30402;
  _Bool D.30403;
  _Bool D.30404;
  const unsigned char * D.30407;
  unsigned char D.30408;
  int D.30409;
  const unsigned char * D.30410;
  unsigned char D.30411;
  int D.30412;
  _Bool D.30413;
  _Bool D.30414;
  const unsigned char * D.30417;
  unsigned char D.30418;
  int D.30419;
  const unsigned char * D.30420;
  unsigned char D.30421;
  int D.30422;
  _Bool D.30423;
  _Bool D.30424;
  const unsigned char * D.30427;
  unsigned char D.30428;
  int D.30429;
  const unsigned char * D.30430;
  unsigned char D.30431;
  int D.30432;
  struct MonoClassField * D.30438;
  struct MonoClass * D.30439;
  struct MonoImage * D.30440;
  int D.30442;
  unsigned int field_table_idx.180;
  unsigned int field_table_idx.181;
  int D.22859;
  int iftmp.182;
  int D.22858;
  const char[16] * D.30450;
  unsigned char D.30451;
  int D.30452;
  unsigned char D.30453;
  int D.30454;
  _Bool D.30455;
  _Bool D.30456;
  _Bool D.30457;
  const unsigned char * D.30460;
  unsigned char D.30461;
  int D.30462;
  const unsigned char * D.30463;
  unsigned char D.30464;
  int D.30465;
  _Bool D.30466;
  _Bool D.30467;
  const unsigned char * D.30470;
  unsigned char D.30471;
  int D.30472;
  const unsigned char * D.30473;
  unsigned char D.30474;
  int D.30475;
  _Bool D.30476;
  _Bool D.30477;
  const unsigned char * D.30480;
  unsigned char D.30481;
  int D.30482;
  const unsigned char * D.30483;
  unsigned char D.30484;
  int D.30485;
  int D.22869;
  int iftmp.183;
  int D.22868;
  const char[16] * D.30493;
  unsigned char D.30494;
  int D.30495;
  unsigned char D.30496;
  int D.30497;
  _Bool D.30498;
  _Bool D.30499;
  _Bool D.30500;
  const unsigned char * D.30503;
  unsigned char D.30504;
  int D.30505;
  const unsigned char * D.30506;
  unsigned char D.30507;
  int D.30508;
  _Bool D.30509;
  _Bool D.30510;
  const unsigned char * D.30513;
  unsigned char D.30514;
  int D.30515;
  const unsigned char * D.30516;
  unsigned char D.30517;
  int D.30518;
  _Bool D.30519;
  _Bool D.30520;
  const unsigned char * D.30523;
  unsigned char D.30524;
  int D.30525;
  const unsigned char * D.30526;
  unsigned char D.30527;
  int D.30528;
  unsigned int D.30532;
  int D.22879;
  int iftmp.184;
  int D.22878;
  const char[12] * D.30537;
  unsigned char D.30538;
  int D.30539;
  unsigned char D.30540;
  int D.30541;
  _Bool D.30542;
  _Bool D.30543;
  _Bool D.30544;
  const unsigned char * D.30547;
  unsigned char D.30548;
  int D.30549;
  const unsigned char * D.30550;
  unsigned char D.30551;
  int D.30552;
  _Bool D.30553;
  _Bool D.30554;
  const unsigned char * D.30557;
  unsigned char D.30558;
  int D.30559;
  const unsigned char * D.30560;
  unsigned char D.30561;
  int D.30562;
  _Bool D.30563;
  _Bool D.30564;
  const unsigned char * D.30567;
  unsigned char D.30568;
  int D.30569;
  const unsigned char * D.30570;
  unsigned char D.30571;
  int D.30572;
  unsigned int D.30576;
  int D.22889;
  int iftmp.185;
  int D.22888;
  const char[23] * D.30581;
  unsigned char D.30582;
  int D.30583;
  unsigned char D.30584;
  int D.30585;
  _Bool D.30586;
  _Bool D.30587;
  _Bool D.30588;
  const unsigned char * D.30591;
  unsigned char D.30592;
  int D.30593;
  const unsigned char * D.30594;
  unsigned char D.30595;
  int D.30596;
  _Bool D.30597;
  _Bool D.30598;
  const unsigned char * D.30601;
  unsigned char D.30602;
  int D.30603;
  const unsigned char * D.30604;
  unsigned char D.30605;
  int D.30606;
  _Bool D.30607;
  _Bool D.30608;
  const unsigned char * D.30611;
  unsigned char D.30612;
  int D.30613;
  const unsigned char * D.30614;
  unsigned char D.30615;
  int D.30616;
  int D.22899;
  int iftmp.186;
  int D.22898;
  const char[29] * D.30624;
  unsigned char D.30625;
  int D.30626;
  unsigned char D.30627;
  int D.30628;
  _Bool D.30629;
  _Bool D.30630;
  _Bool D.30631;
  const unsigned char * D.30634;
  unsigned char D.30635;
  int D.30636;
  const unsigned char * D.30637;
  unsigned char D.30638;
  int D.30639;
  _Bool D.30640;
  _Bool D.30641;
  const unsigned char * D.30644;
  unsigned char D.30645;
  int D.30646;
  const unsigned char * D.30647;
  unsigned char D.30648;
  int D.30649;
  _Bool D.30650;
  _Bool D.30651;
  const unsigned char * D.30654;
  unsigned char D.30655;
  int D.30656;
  const unsigned char * D.30657;
  unsigned char D.30658;
  int D.30659;
  int D.22909;
  int iftmp.187;
  int D.22908;
  const char[24] * D.30667;
  unsigned char D.30668;
  int D.30669;
  unsigned char D.30670;
  int D.30671;
  _Bool D.30672;
  _Bool D.30673;
  _Bool D.30674;
  const unsigned char * D.30677;
  unsigned char D.30678;
  int D.30679;
  const unsigned char * D.30680;
  unsigned char D.30681;
  int D.30682;
  _Bool D.30683;
  _Bool D.30684;
  const unsigned char * D.30687;
  unsigned char D.30688;
  int D.30689;
  const unsigned char * D.30690;
  unsigned char D.30691;
  int D.30692;
  _Bool D.30693;
  _Bool D.30694;
  const unsigned char * D.30697;
  unsigned char D.30698;
  int D.30699;
  const unsigned char * D.30700;
  unsigned char D.30701;
  int D.30702;
  int D.30710;
  int D.30712;
  int D.30714;
  struct MonoType * D.30715;
  unsigned int D.30716;
  guint32 D.30719;
  struct MonoClass * klass;
  guint32 token;

  token = 0;
  D.29804 = obj->vtable;
  klass = D.29804->klass;
  D.29807 = klass->image;
  D.29808 = mono_defaults.corlib;
  if (D.29807 != D.29808) goto <D.29805>; else goto <D.29809>;
  <D.29809>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.29813 = "TypeDelegator";
      D.29814 = MEM[(const unsigned char *)D.29813];
      D.29815 = (int) D.29814;
      D.29816 = *__s2;
      D.29817 = (int) D.29816;
      __result = D.29815 - D.29817;
      {
        D.29818 = __s2_len != 0;
        D.29819 = __result == 0;
        D.29820 = D.29818 & D.29819;
        if (D.29820 != 0) goto <D.29821>; else goto <D.29822>;
        <D.29821>:
        D.29823 = &MEM[(void *)"TypeDelegator" + 1B];
        D.29824 = *D.29823;
        D.29825 = (int) D.29824;
        D.29826 = __s2 + 1;
        D.29827 = *D.29826;
        D.29828 = (int) D.29827;
        __result = D.29825 - D.29828;
        D.29829 = __s2_len > 1;
        D.29819 = __result == 0;
        D.29830 = D.29829 & D.29819;
        if (D.29830 != 0) goto <D.29831>; else goto <D.29832>;
        <D.29831>:
        D.29833 = &MEM[(void *)"TypeDelegator" + 2B];
        D.29834 = *D.29833;
        D.29835 = (int) D.29834;
        D.29836 = __s2 + 2;
        D.29837 = *D.29836;
        D.29838 = (int) D.29837;
        __result = D.29835 - D.29838;
        D.29839 = __s2_len > 2;
        D.29819 = __result == 0;
        D.29840 = D.29839 & D.29819;
        if (D.29840 != 0) goto <D.29841>; else goto <D.29842>;
        <D.29841>:
        D.29843 = &MEM[(void *)"TypeDelegator" + 3B];
        D.29844 = *D.29843;
        D.29845 = (int) D.29844;
        D.29846 = __s2 + 3;
        D.29847 = *D.29846;
        D.29848 = (int) D.29847;
        __result = D.29845 - D.29848;
        <D.29842>:
        <D.29832>:
        <D.29822>:
      }
      D.22724 = __result;
    }
    iftmp.164 = -D.22724;
    goto <D.29849>;
    <D.29812>:
    D.29850 = klass->name;
    iftmp.164 = __builtin_strcmp (D.29850, "TypeDelegator");
    <D.29849>:
    D.22725 = iftmp.164;
  }
  if (D.22725 == 0) goto <D.29805>; else goto <D.29806>;
  <D.29805>:
  D.29851 = mono_get_exception_not_supported ("User defined subclasses of System.Type are not yet supported");
  mono_raise_exception (D.29851);
  <D.29806>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.29855 = "MethodBuilder";
      D.29856 = MEM[(const unsigned char *)D.29855];
      D.29857 = (int) D.29856;
      D.29858 = *__s2;
      D.29859 = (int) D.29858;
      __result = D.29857 - D.29859;
      {
        D.29860 = __s2_len != 0;
        D.29861 = __result == 0;
        D.29862 = D.29860 & D.29861;
        if (D.29862 != 0) goto <D.29863>; else goto <D.29864>;
        <D.29863>:
        D.29865 = &MEM[(void *)"MethodBuilder" + 1B];
        D.29866 = *D.29865;
        D.29867 = (int) D.29866;
        D.29868 = __s2 + 1;
        D.29869 = *D.29868;
        D.29870 = (int) D.29869;
        __result = D.29867 - D.29870;
        D.29871 = __s2_len > 1;
        D.29861 = __result == 0;
        D.29872 = D.29871 & D.29861;
        if (D.29872 != 0) goto <D.29873>; else goto <D.29874>;
        <D.29873>:
        D.29875 = &MEM[(void *)"MethodBuilder" + 2B];
        D.29876 = *D.29875;
        D.29877 = (int) D.29876;
        D.29878 = __s2 + 2;
        D.29879 = *D.29878;
        D.29880 = (int) D.29879;
        __result = D.29877 - D.29880;
        D.29881 = __s2_len > 2;
        D.29861 = __result == 0;
        D.29882 = D.29881 & D.29861;
        if (D.29882 != 0) goto <D.29883>; else goto <D.29884>;
        <D.29883>:
        D.29885 = &MEM[(void *)"MethodBuilder" + 3B];
        D.29886 = *D.29885;
        D.29887 = (int) D.29886;
        D.29888 = __s2 + 3;
        D.29889 = *D.29888;
        D.29890 = (int) D.29889;
        __result = D.29887 - D.29890;
        <D.29884>:
        <D.29874>:
        <D.29864>:
      }
      D.22733 = __result;
    }
    iftmp.165 = -D.22733;
    goto <D.29891>;
    <D.29854>:
    D.29850 = klass->name;
    iftmp.165 = __builtin_strcmp (D.29850, "MethodBuilder");
    <D.29891>:
    D.22734 = iftmp.165;
  }
  if (D.22734 == 0) goto <D.29892>; else goto <D.29893>;
  <D.29892>:
  {
    struct MonoReflectionMethodBuilder * mb;
    struct MonoReflectionTypeBuilder * tb;

    mb = obj;
    tb = mb->type;
    D.29896 = tb->module;
    D.29897 = D.29896->dynamic_image;
    if (D.29897 == assembly) goto <D.29898>; else goto <D.29894>;
    <D.29898>:
    D.29899 = tb->generic_params;
    if (D.29899 == 0B) goto <D.29900>; else goto <D.29894>;
    <D.29900>:
    D.29901 = mb->generic_params;
    if (D.29901 == 0B) goto <D.29902>; else goto <D.29894>;
    <D.29902>:
    D.29903 = mb->table_idx;
    token = D.29903 | 100663296;
    goto <D.29895>;
    <D.29894>:
    token = mono_image_get_methodbuilder_token (assembly, mb, create_open_instance);
    <D.29895>:
  }
  goto <D.29904>;
  <D.29893>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.29908 = "ConstructorBuilder";
      D.29909 = MEM[(const unsigned char *)D.29908];
      D.29910 = (int) D.29909;
      D.29911 = *__s2;
      D.29912 = (int) D.29911;
      __result = D.29910 - D.29912;
      {
        D.29913 = __s2_len != 0;
        D.29914 = __result == 0;
        D.29915 = D.29913 & D.29914;
        if (D.29915 != 0) goto <D.29916>; else goto <D.29917>;
        <D.29916>:
        D.29918 = &MEM[(void *)"ConstructorBuilder" + 1B];
        D.29919 = *D.29918;
        D.29920 = (int) D.29919;
        D.29921 = __s2 + 1;
        D.29922 = *D.29921;
        D.29923 = (int) D.29922;
        __result = D.29920 - D.29923;
        D.29924 = __s2_len > 1;
        D.29914 = __result == 0;
        D.29925 = D.29924 & D.29914;
        if (D.29925 != 0) goto <D.29926>; else goto <D.29927>;
        <D.29926>:
        D.29928 = &MEM[(void *)"ConstructorBuilder" + 2B];
        D.29929 = *D.29928;
        D.29930 = (int) D.29929;
        D.29931 = __s2 + 2;
        D.29932 = *D.29931;
        D.29933 = (int) D.29932;
        __result = D.29930 - D.29933;
        D.29934 = __s2_len > 2;
        D.29914 = __result == 0;
        D.29935 = D.29934 & D.29914;
        if (D.29935 != 0) goto <D.29936>; else goto <D.29937>;
        <D.29936>:
        D.29938 = &MEM[(void *)"ConstructorBuilder" + 3B];
        D.29939 = *D.29938;
        D.29940 = (int) D.29939;
        D.29941 = __s2 + 3;
        D.29942 = *D.29941;
        D.29943 = (int) D.29942;
        __result = D.29940 - D.29943;
        <D.29937>:
        <D.29927>:
        <D.29917>:
      }
      D.22744 = __result;
    }
    iftmp.166 = -D.22744;
    goto <D.29944>;
    <D.29907>:
    D.29850 = klass->name;
    iftmp.166 = __builtin_strcmp (D.29850, "ConstructorBuilder");
    <D.29944>:
    D.22745 = iftmp.166;
  }
  if (D.22745 == 0) goto <D.29945>; else goto <D.29946>;
  <D.29945>:
  {
    struct MonoReflectionCtorBuilder * mb;
    struct MonoReflectionTypeBuilder * tb;

    mb = obj;
    tb = mb->type;
    D.29949 = tb->module;
    D.29950 = D.29949->dynamic_image;
    if (D.29950 == assembly) goto <D.29951>; else goto <D.29947>;
    <D.29951>:
    D.29952 = tb->generic_params;
    if (D.29952 == 0B) goto <D.29953>; else goto <D.29947>;
    <D.29953>:
    D.29954 = mb->table_idx;
    token = D.29954 | 100663296;
    goto <D.29948>;
    <D.29947>:
    token = mono_image_get_ctorbuilder_token (assembly, mb);
    <D.29948>:
  }
  goto <D.29955>;
  <D.29946>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.29959 = "FieldBuilder";
      D.29960 = MEM[(const unsigned char *)D.29959];
      D.29961 = (int) D.29960;
      D.29962 = *__s2;
      D.29963 = (int) D.29962;
      __result = D.29961 - D.29963;
      {
        D.29964 = __s2_len != 0;
        D.29965 = __result == 0;
        D.29966 = D.29964 & D.29965;
        if (D.29966 != 0) goto <D.29967>; else goto <D.29968>;
        <D.29967>:
        D.29969 = &MEM[(void *)"FieldBuilder" + 1B];
        D.29970 = *D.29969;
        D.29971 = (int) D.29970;
        D.29972 = __s2 + 1;
        D.29973 = *D.29972;
        D.29974 = (int) D.29973;
        __result = D.29971 - D.29974;
        D.29975 = __s2_len > 1;
        D.29965 = __result == 0;
        D.29976 = D.29975 & D.29965;
        if (D.29976 != 0) goto <D.29977>; else goto <D.29978>;
        <D.29977>:
        D.29979 = &MEM[(void *)"FieldBuilder" + 2B];
        D.29980 = *D.29979;
        D.29981 = (int) D.29980;
        D.29982 = __s2 + 2;
        D.29983 = *D.29982;
        D.29984 = (int) D.29983;
        __result = D.29981 - D.29984;
        D.29985 = __s2_len > 2;
        D.29965 = __result == 0;
        D.29986 = D.29985 & D.29965;
        if (D.29986 != 0) goto <D.29987>; else goto <D.29988>;
        <D.29987>:
        D.29989 = &MEM[(void *)"FieldBuilder" + 3B];
        D.29990 = *D.29989;
        D.29991 = (int) D.29990;
        D.29992 = __s2 + 3;
        D.29993 = *D.29992;
        D.29994 = (int) D.29993;
        __result = D.29991 - D.29994;
        <D.29988>:
        <D.29978>:
        <D.29968>:
      }
      D.22755 = __result;
    }
    iftmp.167 = -D.22755;
    goto <D.29995>;
    <D.29958>:
    D.29850 = klass->name;
    iftmp.167 = __builtin_strcmp (D.29850, "FieldBuilder");
    <D.29995>:
    D.22756 = iftmp.167;
  }
  if (D.22756 == 0) goto <D.29996>; else goto <D.29997>;
  <D.29996>:
  {
    struct MonoReflectionFieldBuilder * fb;
    struct MonoReflectionTypeBuilder * tb;

    fb = obj;
    tb = fb->typeb;
    D.29998 = tb->generic_params;
    if (D.29998 != 0B) goto <D.29999>; else goto <D.30000>;
    <D.29999>:
    token = mono_image_get_generic_field_token (assembly, fb);
    goto <D.30001>;
    <D.30000>:
    D.30002 = tb->module;
    D.30003 = D.30002->dynamic_image;
    if (D.30003 == assembly) goto <D.30004>; else goto <D.30005>;
    <D.30004>:
    D.30006 = fb->table_idx;
    D.30007 = D.30006 | 67108864;
    token = (guint32) D.30007;
    goto <D.30008>;
    <D.30005>:
    D.30009 = fb->handle;
    token = mono_image_get_fieldref_token (assembly, fb, D.30009);
    <D.30008>:
    <D.30001>:
  }
  goto <D.30010>;
  <D.29997>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30014 = "TypeBuilder";
      D.30015 = MEM[(const unsigned char *)D.30014];
      D.30016 = (int) D.30015;
      D.30017 = *__s2;
      D.30018 = (int) D.30017;
      __result = D.30016 - D.30018;
      {
        D.30019 = __s2_len != 0;
        D.30020 = __result == 0;
        D.30021 = D.30019 & D.30020;
        if (D.30021 != 0) goto <D.30022>; else goto <D.30023>;
        <D.30022>:
        D.30024 = &MEM[(void *)"TypeBuilder" + 1B];
        D.30025 = *D.30024;
        D.30026 = (int) D.30025;
        D.30027 = __s2 + 1;
        D.30028 = *D.30027;
        D.30029 = (int) D.30028;
        __result = D.30026 - D.30029;
        D.30030 = __s2_len > 1;
        D.30020 = __result == 0;
        D.30031 = D.30030 & D.30020;
        if (D.30031 != 0) goto <D.30032>; else goto <D.30033>;
        <D.30032>:
        D.30034 = &MEM[(void *)"TypeBuilder" + 2B];
        D.30035 = *D.30034;
        D.30036 = (int) D.30035;
        D.30037 = __s2 + 2;
        D.30038 = *D.30037;
        D.30039 = (int) D.30038;
        __result = D.30036 - D.30039;
        D.30040 = __s2_len > 2;
        D.30020 = __result == 0;
        D.30041 = D.30040 & D.30020;
        if (D.30041 != 0) goto <D.30042>; else goto <D.30043>;
        <D.30042>:
        D.30044 = &MEM[(void *)"TypeBuilder" + 3B];
        D.30045 = *D.30044;
        D.30046 = (int) D.30045;
        D.30047 = __s2 + 3;
        D.30048 = *D.30047;
        D.30049 = (int) D.30048;
        __result = D.30046 - D.30049;
        <D.30043>:
        <D.30033>:
        <D.30023>:
      }
      D.22766 = __result;
    }
    iftmp.168 = -D.22766;
    goto <D.30050>;
    <D.30013>:
    D.29850 = klass->name;
    iftmp.168 = __builtin_strcmp (D.29850, "TypeBuilder");
    <D.30050>:
    D.22767 = iftmp.168;
  }
  if (D.22767 == 0) goto <D.30051>; else goto <D.30052>;
  <D.30051>:
  {
    struct MonoReflectionTypeBuilder * tb;

    tb = obj;
    if (create_open_instance != 0) goto <D.30055>; else goto <D.30053>;
    <D.30055>:
    D.30056 = tb->generic_params;
    if (D.30056 != 0B) goto <D.30057>; else goto <D.30053>;
    <D.30057>:
    {
      struct MonoType * type;

      init_type_builder_generics (obj);
      type = mono_reflection_type_get_handle (obj);
      token = mono_image_typedef_or_ref_full (assembly, type, 1);
      token = mono_metadata_token_from_dor (token);
    }
    goto <D.30054>;
    <D.30053>:
    D.30058 = tb->module;
    D.30059 = D.30058->dynamic_image;
    if (D.30059 == assembly) goto <D.30060>; else goto <D.30061>;
    <D.30060>:
    D.30062 = tb->table_idx;
    token = D.30062 | 33554432;
    goto <D.30063>;
    <D.30061>:
    {
      struct MonoType * type;

      type = mono_reflection_type_get_handle (obj);
      D.30064 = mono_image_typedef_or_ref (assembly, type);
      token = mono_metadata_token_from_dor (D.30064);
    }
    <D.30063>:
    <D.30054>:
  }
  goto <D.30065>;
  <D.30052>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30069 = "MonoType";
      D.30070 = MEM[(const unsigned char *)D.30069];
      D.30071 = (int) D.30070;
      D.30072 = *__s2;
      D.30073 = (int) D.30072;
      __result = D.30071 - D.30073;
      {
        D.30074 = __s2_len != 0;
        D.30075 = __result == 0;
        D.30076 = D.30074 & D.30075;
        if (D.30076 != 0) goto <D.30077>; else goto <D.30078>;
        <D.30077>:
        D.30079 = &MEM[(void *)"MonoType" + 1B];
        D.30080 = *D.30079;
        D.30081 = (int) D.30080;
        D.30082 = __s2 + 1;
        D.30083 = *D.30082;
        D.30084 = (int) D.30083;
        __result = D.30081 - D.30084;
        D.30085 = __s2_len > 1;
        D.30075 = __result == 0;
        D.30086 = D.30085 & D.30075;
        if (D.30086 != 0) goto <D.30087>; else goto <D.30088>;
        <D.30087>:
        D.30089 = &MEM[(void *)"MonoType" + 2B];
        D.30090 = *D.30089;
        D.30091 = (int) D.30090;
        D.30092 = __s2 + 2;
        D.30093 = *D.30092;
        D.30094 = (int) D.30093;
        __result = D.30091 - D.30094;
        D.30095 = __s2_len > 2;
        D.30075 = __result == 0;
        D.30096 = D.30095 & D.30075;
        if (D.30096 != 0) goto <D.30097>; else goto <D.30098>;
        <D.30097>:
        D.30099 = &MEM[(void *)"MonoType" + 3B];
        D.30100 = *D.30099;
        D.30101 = (int) D.30100;
        D.30102 = __s2 + 3;
        D.30103 = *D.30102;
        D.30104 = (int) D.30103;
        __result = D.30101 - D.30104;
        <D.30098>:
        <D.30088>:
        <D.30078>:
      }
      D.22778 = __result;
    }
    iftmp.169 = -D.22778;
    goto <D.30105>;
    <D.30068>:
    D.29850 = klass->name;
    iftmp.169 = __builtin_strcmp (D.29850, "MonoType");
    <D.30105>:
    D.22779 = iftmp.169;
  }
  if (D.22779 == 0) goto <D.30106>; else goto <D.30107>;
  <D.30106>:
  {
    struct MonoType * type;
    struct MonoClass * mc;

    type = mono_reflection_type_get_handle (obj);
    mc = mono_class_from_mono_type (type);
    D.30112 = mc->generic_container;
    if (D.30112 == 0B) goto <D.30109>; else goto <D.30113>;
    <D.30113>:
    if (create_open_instance != 0) goto <D.30109>; else goto <D.30110>;
    <D.30109>:
    iftmp.170 = 1;
    goto <D.30111>;
    <D.30110>:
    iftmp.170 = 0;
    <D.30111>:
    D.30114 = mono_image_typedef_or_ref_full (assembly, type, iftmp.170);
    token = mono_metadata_token_from_dor (D.30114);
  }
  goto <D.30115>;
  <D.30107>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30119 = "GenericTypeParameterBuilder";
      D.30120 = MEM[(const unsigned char *)D.30119];
      D.30121 = (int) D.30120;
      D.30122 = *__s2;
      D.30123 = (int) D.30122;
      __result = D.30121 - D.30123;
      {
        D.30124 = __s2_len != 0;
        D.30125 = __result == 0;
        D.30126 = D.30124 & D.30125;
        if (D.30126 != 0) goto <D.30127>; else goto <D.30128>;
        <D.30127>:
        D.30129 = &MEM[(void *)"GenericTypeParameterBuilder" + 1B];
        D.30130 = *D.30129;
        D.30131 = (int) D.30130;
        D.30132 = __s2 + 1;
        D.30133 = *D.30132;
        D.30134 = (int) D.30133;
        __result = D.30131 - D.30134;
        D.30135 = __s2_len > 1;
        D.30125 = __result == 0;
        D.30136 = D.30135 & D.30125;
        if (D.30136 != 0) goto <D.30137>; else goto <D.30138>;
        <D.30137>:
        D.30139 = &MEM[(void *)"GenericTypeParameterBuilder" + 2B];
        D.30140 = *D.30139;
        D.30141 = (int) D.30140;
        D.30142 = __s2 + 2;
        D.30143 = *D.30142;
        D.30144 = (int) D.30143;
        __result = D.30141 - D.30144;
        D.30145 = __s2_len > 2;
        D.30125 = __result == 0;
        D.30146 = D.30145 & D.30125;
        if (D.30146 != 0) goto <D.30147>; else goto <D.30148>;
        <D.30147>:
        D.30149 = &MEM[(void *)"GenericTypeParameterBuilder" + 3B];
        D.30150 = *D.30149;
        D.30151 = (int) D.30150;
        D.30152 = __s2 + 3;
        D.30153 = *D.30152;
        D.30154 = (int) D.30153;
        __result = D.30151 - D.30154;
        <D.30148>:
        <D.30138>:
        <D.30128>:
      }
      D.22789 = __result;
    }
    iftmp.171 = -D.22789;
    goto <D.30155>;
    <D.30118>:
    D.29850 = klass->name;
    iftmp.171 = __builtin_strcmp (D.29850, "GenericTypeParameterBuilder");
    <D.30155>:
    D.22790 = iftmp.171;
  }
  if (D.22790 == 0) goto <D.30156>; else goto <D.30157>;
  <D.30156>:
  {
    struct MonoType * type;

    type = mono_reflection_type_get_handle (obj);
    D.30158 = mono_image_typedef_or_ref (assembly, type);
    token = mono_metadata_token_from_dor (D.30158);
  }
  goto <D.30159>;
  <D.30157>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30163 = "MonoGenericClass";
      D.30164 = MEM[(const unsigned char *)D.30163];
      D.30165 = (int) D.30164;
      D.30166 = *__s2;
      D.30167 = (int) D.30166;
      __result = D.30165 - D.30167;
      {
        D.30168 = __s2_len != 0;
        D.30169 = __result == 0;
        D.30170 = D.30168 & D.30169;
        if (D.30170 != 0) goto <D.30171>; else goto <D.30172>;
        <D.30171>:
        D.30173 = &MEM[(void *)"MonoGenericClass" + 1B];
        D.30174 = *D.30173;
        D.30175 = (int) D.30174;
        D.30176 = __s2 + 1;
        D.30177 = *D.30176;
        D.30178 = (int) D.30177;
        __result = D.30175 - D.30178;
        D.30179 = __s2_len > 1;
        D.30169 = __result == 0;
        D.30180 = D.30179 & D.30169;
        if (D.30180 != 0) goto <D.30181>; else goto <D.30182>;
        <D.30181>:
        D.30183 = &MEM[(void *)"MonoGenericClass" + 2B];
        D.30184 = *D.30183;
        D.30185 = (int) D.30184;
        D.30186 = __s2 + 2;
        D.30187 = *D.30186;
        D.30188 = (int) D.30187;
        __result = D.30185 - D.30188;
        D.30189 = __s2_len > 2;
        D.30169 = __result == 0;
        D.30190 = D.30189 & D.30169;
        if (D.30190 != 0) goto <D.30191>; else goto <D.30192>;
        <D.30191>:
        D.30193 = &MEM[(void *)"MonoGenericClass" + 3B];
        D.30194 = *D.30193;
        D.30195 = (int) D.30194;
        D.30196 = __s2 + 3;
        D.30197 = *D.30196;
        D.30198 = (int) D.30197;
        __result = D.30195 - D.30198;
        <D.30192>:
        <D.30182>:
        <D.30172>:
      }
      D.22799 = __result;
    }
    iftmp.172 = -D.22799;
    goto <D.30199>;
    <D.30162>:
    D.29850 = klass->name;
    iftmp.172 = __builtin_strcmp (D.29850, "MonoGenericClass");
    <D.30199>:
    D.22800 = iftmp.172;
  }
  if (D.22800 == 0) goto <D.30200>; else goto <D.30201>;
  <D.30200>:
  {
    struct MonoType * type;

    type = mono_reflection_type_get_handle (obj);
    D.30202 = mono_image_typedef_or_ref (assembly, type);
    token = mono_metadata_token_from_dor (D.30202);
  }
  goto <D.30203>;
  <D.30201>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30210 = "MonoCMethod";
      D.30211 = MEM[(const unsigned char *)D.30210];
      D.30212 = (int) D.30211;
      D.30213 = *__s2;
      D.30214 = (int) D.30213;
      __result = D.30212 - D.30214;
      {
        D.30215 = __s2_len != 0;
        D.30216 = __result == 0;
        D.30217 = D.30215 & D.30216;
        if (D.30217 != 0) goto <D.30218>; else goto <D.30219>;
        <D.30218>:
        D.30220 = &MEM[(void *)"MonoCMethod" + 1B];
        D.30221 = *D.30220;
        D.30222 = (int) D.30221;
        D.30223 = __s2 + 1;
        D.30224 = *D.30223;
        D.30225 = (int) D.30224;
        __result = D.30222 - D.30225;
        D.30226 = __s2_len > 1;
        D.30216 = __result == 0;
        D.30227 = D.30226 & D.30216;
        if (D.30227 != 0) goto <D.30228>; else goto <D.30229>;
        <D.30228>:
        D.30230 = &MEM[(void *)"MonoCMethod" + 2B];
        D.30231 = *D.30230;
        D.30232 = (int) D.30231;
        D.30233 = __s2 + 2;
        D.30234 = *D.30233;
        D.30235 = (int) D.30234;
        __result = D.30232 - D.30235;
        D.30236 = __s2_len > 2;
        D.30216 = __result == 0;
        D.30237 = D.30236 & D.30216;
        if (D.30237 != 0) goto <D.30238>; else goto <D.30239>;
        <D.30238>:
        D.30240 = &MEM[(void *)"MonoCMethod" + 3B];
        D.30241 = *D.30240;
        D.30242 = (int) D.30241;
        D.30243 = __s2 + 3;
        D.30244 = *D.30243;
        D.30245 = (int) D.30244;
        __result = D.30242 - D.30245;
        <D.30239>:
        <D.30229>:
        <D.30219>:
      }
      D.22809 = __result;
    }
    iftmp.173 = -D.22809;
    goto <D.30246>;
    <D.30209>:
    D.29850 = klass->name;
    iftmp.173 = __builtin_strcmp (D.29850, "MonoCMethod");
    <D.30246>:
    D.22810 = iftmp.173;
  }
  if (D.22810 == 0) goto <D.30204>; else goto <D.30247>;
  <D.30247>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30251 = "MonoMethod";
      D.30252 = MEM[(const unsigned char *)D.30251];
      D.30253 = (int) D.30252;
      D.30254 = *__s2;
      D.30255 = (int) D.30254;
      __result = D.30253 - D.30255;
      {
        D.30256 = __s2_len != 0;
        D.30257 = __result == 0;
        D.30258 = D.30256 & D.30257;
        if (D.30258 != 0) goto <D.30259>; else goto <D.30260>;
        <D.30259>:
        D.30261 = &MEM[(void *)"MonoMethod" + 1B];
        D.30262 = *D.30261;
        D.30263 = (int) D.30262;
        D.30264 = __s2 + 1;
        D.30265 = *D.30264;
        D.30266 = (int) D.30265;
        __result = D.30263 - D.30266;
        D.30267 = __s2_len > 1;
        D.30257 = __result == 0;
        D.30268 = D.30267 & D.30257;
        if (D.30268 != 0) goto <D.30269>; else goto <D.30270>;
        <D.30269>:
        D.30271 = &MEM[(void *)"MonoMethod" + 2B];
        D.30272 = *D.30271;
        D.30273 = (int) D.30272;
        D.30274 = __s2 + 2;
        D.30275 = *D.30274;
        D.30276 = (int) D.30275;
        __result = D.30273 - D.30276;
        D.30277 = __s2_len > 2;
        D.30257 = __result == 0;
        D.30278 = D.30277 & D.30257;
        if (D.30278 != 0) goto <D.30279>; else goto <D.30280>;
        <D.30279>:
        D.30281 = &MEM[(void *)"MonoMethod" + 3B];
        D.30282 = *D.30281;
        D.30283 = (int) D.30282;
        D.30284 = __s2 + 3;
        D.30285 = *D.30284;
        D.30286 = (int) D.30285;
        __result = D.30283 - D.30286;
        <D.30280>:
        <D.30270>:
        <D.30260>:
      }
      D.22818 = __result;
    }
    iftmp.174 = -D.22818;
    goto <D.30287>;
    <D.30250>:
    D.29850 = klass->name;
    iftmp.174 = __builtin_strcmp (D.29850, "MonoMethod");
    <D.30287>:
    D.22819 = iftmp.174;
  }
  if (D.22819 == 0) goto <D.30204>; else goto <D.30288>;
  <D.30288>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30292 = "MonoGenericMethod";
      D.30293 = MEM[(const unsigned char *)D.30292];
      D.30294 = (int) D.30293;
      D.30295 = *__s2;
      D.30296 = (int) D.30295;
      __result = D.30294 - D.30296;
      {
        D.30297 = __s2_len != 0;
        D.30298 = __result == 0;
        D.30299 = D.30297 & D.30298;
        if (D.30299 != 0) goto <D.30300>; else goto <D.30301>;
        <D.30300>:
        D.30302 = &MEM[(void *)"MonoGenericMethod" + 1B];
        D.30303 = *D.30302;
        D.30304 = (int) D.30303;
        D.30305 = __s2 + 1;
        D.30306 = *D.30305;
        D.30307 = (int) D.30306;
        __result = D.30304 - D.30307;
        D.30308 = __s2_len > 1;
        D.30298 = __result == 0;
        D.30309 = D.30308 & D.30298;
        if (D.30309 != 0) goto <D.30310>; else goto <D.30311>;
        <D.30310>:
        D.30312 = &MEM[(void *)"MonoGenericMethod" + 2B];
        D.30313 = *D.30312;
        D.30314 = (int) D.30313;
        D.30315 = __s2 + 2;
        D.30316 = *D.30315;
        D.30317 = (int) D.30316;
        __result = D.30314 - D.30317;
        D.30318 = __s2_len > 2;
        D.30298 = __result == 0;
        D.30319 = D.30318 & D.30298;
        if (D.30319 != 0) goto <D.30320>; else goto <D.30321>;
        <D.30320>:
        D.30322 = &MEM[(void *)"MonoGenericMethod" + 3B];
        D.30323 = *D.30322;
        D.30324 = (int) D.30323;
        D.30325 = __s2 + 3;
        D.30326 = *D.30325;
        D.30327 = (int) D.30326;
        __result = D.30324 - D.30327;
        <D.30321>:
        <D.30311>:
        <D.30301>:
      }
      D.22827 = __result;
    }
    iftmp.175 = -D.22827;
    goto <D.30328>;
    <D.30291>:
    D.29850 = klass->name;
    iftmp.175 = __builtin_strcmp (D.29850, "MonoGenericMethod");
    <D.30328>:
    D.22828 = iftmp.175;
  }
  if (D.22828 == 0) goto <D.30204>; else goto <D.30329>;
  <D.30329>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30333 = "MonoGenericCMethod";
      D.30334 = MEM[(const unsigned char *)D.30333];
      D.30335 = (int) D.30334;
      D.30336 = *__s2;
      D.30337 = (int) D.30336;
      __result = D.30335 - D.30337;
      {
        D.30338 = __s2_len != 0;
        D.30339 = __result == 0;
        D.30340 = D.30338 & D.30339;
        if (D.30340 != 0) goto <D.30341>; else goto <D.30342>;
        <D.30341>:
        D.30343 = &MEM[(void *)"MonoGenericCMethod" + 1B];
        D.30344 = *D.30343;
        D.30345 = (int) D.30344;
        D.30346 = __s2 + 1;
        D.30347 = *D.30346;
        D.30348 = (int) D.30347;
        __result = D.30345 - D.30348;
        D.30349 = __s2_len > 1;
        D.30339 = __result == 0;
        D.30350 = D.30349 & D.30339;
        if (D.30350 != 0) goto <D.30351>; else goto <D.30352>;
        <D.30351>:
        D.30353 = &MEM[(void *)"MonoGenericCMethod" + 2B];
        D.30354 = *D.30353;
        D.30355 = (int) D.30354;
        D.30356 = __s2 + 2;
        D.30357 = *D.30356;
        D.30358 = (int) D.30357;
        __result = D.30355 - D.30358;
        D.30359 = __s2_len > 2;
        D.30339 = __result == 0;
        D.30360 = D.30359 & D.30339;
        if (D.30360 != 0) goto <D.30361>; else goto <D.30362>;
        <D.30361>:
        D.30363 = &MEM[(void *)"MonoGenericCMethod" + 3B];
        D.30364 = *D.30363;
        D.30365 = (int) D.30364;
        D.30366 = __s2 + 3;
        D.30367 = *D.30366;
        D.30368 = (int) D.30367;
        __result = D.30365 - D.30368;
        <D.30362>:
        <D.30352>:
        <D.30342>:
      }
      D.22836 = __result;
    }
    iftmp.176 = -D.22836;
    goto <D.30369>;
    <D.30332>:
    D.29850 = klass->name;
    iftmp.176 = __builtin_strcmp (D.29850, "MonoGenericCMethod");
    <D.30369>:
    D.22837 = iftmp.176;
  }
  if (D.22837 == 0) goto <D.30204>; else goto <D.30205>;
  <D.30204>:
  {
    struct MonoReflectionMethod * m;

    m = obj;
    D.30370 = m->method;
    D.30371 = BIT_FIELD_REF <*D.30370, 8, 168>;
    D.30372 = D.30371 & 16;
    if (D.30372 != 0) goto <D.30373>; else goto <D.30374>;
    <D.30373>:
    if (create_open_instance != 0) goto <D.30375>; else goto <D.30376>;
    <D.30375>:
    D.30370 = m->method;
    token = mono_image_get_methodspec_token (assembly, D.30370);
    goto <D.30377>;
    <D.30376>:
    D.30370 = m->method;
    token = mono_image_get_inflated_method_token (assembly, D.30370);
    <D.30377>:
    goto <D.30378>;
    <D.30374>:
    D.30370 = m->method;
    D.30381 = D.30370->klass;
    D.30382 = D.30381->image;
    D.30383 = &assembly->image;
    if (D.30382 == D.30383) goto <D.30384>; else goto <D.30379>;
    <D.30384>:
    D.30370 = m->method;
    D.30381 = D.30370->klass;
    D.30385 = D.30381->generic_class;
    if (D.30385 == 0B) goto <D.30386>; else goto <D.30379>;
    <D.30386>:
    {
      static guint32 method_table_idx = 16777215;

      D.30370 = m->method;
      D.30381 = D.30370->klass;
      D.30387 = BIT_FIELD_REF <*D.30381, 8, 160>;
      D.30388 = D.30387 & 128;
      if (D.30388 != 0) goto <D.30389>; else goto <D.30390>;
      <D.30389>:
      D.30370 = m->method;
      token = D.30370->token;
      goto <D.30391>;
      <D.30390>:
      method_table_idx.177 = method_table_idx;
      method_table_idx.178 = method_table_idx.177 + 4294967295;
      method_table_idx = method_table_idx.178;
      method_table_idx.177 = method_table_idx;
      token = method_table_idx.177 | 100663296;
      <D.30391>:
    }
    goto <D.30380>;
    <D.30379>:
    D.30370 = m->method;
    token = mono_image_get_methodref_token (assembly, D.30370, create_open_instance);
    <D.30380>:
    <D.30378>:
  }
  goto <D.30206>;
  <D.30205>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

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

    f = obj;
    D.30438 = f->field;
    D.30439 = D.30438->parent;
    D.30440 = D.30439->image;
    D.30383 = &assembly->image;
    if (D.30440 == D.30383) goto <D.30441>; else goto <D.30436>;
    <D.30441>:
    D.30438 = f->field;
    D.30442 = is_field_on_inst (D.30438);
    if (D.30442 == 0) goto <D.30443>; else goto <D.30436>;
    <D.30443>:
    {
      static guint32 field_table_idx = 16777215;

      field_table_idx.180 = field_table_idx;
      field_table_idx.181 = field_table_idx.180 + 4294967295;
      field_table_idx = field_table_idx.181;
      field_table_idx.180 = field_table_idx;
      token = field_table_idx.180 | 67108864;
    }
    goto <D.30437>;
    <D.30436>:
    D.30438 = f->field;
    token = mono_image_get_fieldref_token (assembly, f, D.30438);
    <D.30437>:
  }
  goto <D.30446>;
  <D.30435>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30450 = "MonoArrayMethod";
      D.30451 = MEM[(const unsigned char *)D.30450];
      D.30452 = (int) D.30451;
      D.30453 = *__s2;
      D.30454 = (int) D.30453;
      __result = D.30452 - D.30454;
      {
        D.30455 = __s2_len != 0;
        D.30456 = __result == 0;
        D.30457 = D.30455 & D.30456;
        if (D.30457 != 0) goto <D.30458>; else goto <D.30459>;
        <D.30458>:
        D.30460 = &MEM[(void *)"MonoArrayMethod" + 1B];
        D.30461 = *D.30460;
        D.30462 = (int) D.30461;
        D.30463 = __s2 + 1;
        D.30464 = *D.30463;
        D.30465 = (int) D.30464;
        __result = D.30462 - D.30465;
        D.30466 = __s2_len > 1;
        D.30456 = __result == 0;
        D.30467 = D.30466 & D.30456;
        if (D.30467 != 0) goto <D.30468>; else goto <D.30469>;
        <D.30468>:
        D.30470 = &MEM[(void *)"MonoArrayMethod" + 2B];
        D.30471 = *D.30470;
        D.30472 = (int) D.30471;
        D.30473 = __s2 + 2;
        D.30474 = *D.30473;
        D.30475 = (int) D.30474;
        __result = D.30472 - D.30475;
        D.30476 = __s2_len > 2;
        D.30456 = __result == 0;
        D.30477 = D.30476 & D.30456;
        if (D.30477 != 0) goto <D.30478>; else goto <D.30479>;
        <D.30478>:
        D.30480 = &MEM[(void *)"MonoArrayMethod" + 3B];
        D.30481 = *D.30480;
        D.30482 = (int) D.30481;
        D.30483 = __s2 + 3;
        D.30484 = *D.30483;
        D.30485 = (int) D.30484;
        __result = D.30482 - D.30485;
        <D.30479>:
        <D.30469>:
        <D.30459>:
      }
      D.22858 = __result;
    }
    iftmp.182 = -D.22858;
    goto <D.30486>;
    <D.30449>:
    D.29850 = klass->name;
    iftmp.182 = __builtin_strcmp (D.29850, "MonoArrayMethod");
    <D.30486>:
    D.22859 = iftmp.182;
  }
  if (D.22859 == 0) goto <D.30487>; else goto <D.30488>;
  <D.30487>:
  {
    struct MonoReflectionArrayMethod * m;

    m = obj;
    token = mono_image_get_array_token (assembly, m);
  }
  goto <D.30489>;
  <D.30488>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30493 = "SignatureHelper";
      D.30494 = MEM[(const unsigned char *)D.30493];
      D.30495 = (int) D.30494;
      D.30496 = *__s2;
      D.30497 = (int) D.30496;
      __result = D.30495 - D.30497;
      {
        D.30498 = __s2_len != 0;
        D.30499 = __result == 0;
        D.30500 = D.30498 & D.30499;
        if (D.30500 != 0) goto <D.30501>; else goto <D.30502>;
        <D.30501>:
        D.30503 = &MEM[(void *)"SignatureHelper" + 1B];
        D.30504 = *D.30503;
        D.30505 = (int) D.30504;
        D.30506 = __s2 + 1;
        D.30507 = *D.30506;
        D.30508 = (int) D.30507;
        __result = D.30505 - D.30508;
        D.30509 = __s2_len > 1;
        D.30499 = __result == 0;
        D.30510 = D.30509 & D.30499;
        if (D.30510 != 0) goto <D.30511>; else goto <D.30512>;
        <D.30511>:
        D.30513 = &MEM[(void *)"SignatureHelper" + 2B];
        D.30514 = *D.30513;
        D.30515 = (int) D.30514;
        D.30516 = __s2 + 2;
        D.30517 = *D.30516;
        D.30518 = (int) D.30517;
        __result = D.30515 - D.30518;
        D.30519 = __s2_len > 2;
        D.30499 = __result == 0;
        D.30520 = D.30519 & D.30499;
        if (D.30520 != 0) goto <D.30521>; else goto <D.30522>;
        <D.30521>:
        D.30523 = &MEM[(void *)"SignatureHelper" + 3B];
        D.30524 = *D.30523;
        D.30525 = (int) D.30524;
        D.30526 = __s2 + 3;
        D.30527 = *D.30526;
        D.30528 = (int) D.30527;
        __result = D.30525 - D.30528;
        <D.30522>:
        <D.30512>:
        <D.30502>:
      }
      D.22868 = __result;
    }
    iftmp.183 = -D.22868;
    goto <D.30529>;
    <D.30492>:
    D.29850 = klass->name;
    iftmp.183 = __builtin_strcmp (D.29850, "SignatureHelper");
    <D.30529>:
    D.22869 = iftmp.183;
  }
  if (D.22869 == 0) goto <D.30530>; else goto <D.30531>;
  <D.30530>:
  {
    struct MonoReflectionSigHelper * s;

    s = obj;
    D.30532 = mono_image_get_sighelper_token (assembly, s);
    token = D.30532 | 285212672;
  }
  goto <D.30533>;
  <D.30531>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30537 = "EnumBuilder";
      D.30538 = MEM[(const unsigned char *)D.30537];
      D.30539 = (int) D.30538;
      D.30540 = *__s2;
      D.30541 = (int) D.30540;
      __result = D.30539 - D.30541;
      {
        D.30542 = __s2_len != 0;
        D.30543 = __result == 0;
        D.30544 = D.30542 & D.30543;
        if (D.30544 != 0) goto <D.30545>; else goto <D.30546>;
        <D.30545>:
        D.30547 = &MEM[(void *)"EnumBuilder" + 1B];
        D.30548 = *D.30547;
        D.30549 = (int) D.30548;
        D.30550 = __s2 + 1;
        D.30551 = *D.30550;
        D.30552 = (int) D.30551;
        __result = D.30549 - D.30552;
        D.30553 = __s2_len > 1;
        D.30543 = __result == 0;
        D.30554 = D.30553 & D.30543;
        if (D.30554 != 0) goto <D.30555>; else goto <D.30556>;
        <D.30555>:
        D.30557 = &MEM[(void *)"EnumBuilder" + 2B];
        D.30558 = *D.30557;
        D.30559 = (int) D.30558;
        D.30560 = __s2 + 2;
        D.30561 = *D.30560;
        D.30562 = (int) D.30561;
        __result = D.30559 - D.30562;
        D.30563 = __s2_len > 2;
        D.30543 = __result == 0;
        D.30564 = D.30563 & D.30543;
        if (D.30564 != 0) goto <D.30565>; else goto <D.30566>;
        <D.30565>:
        D.30567 = &MEM[(void *)"EnumBuilder" + 3B];
        D.30568 = *D.30567;
        D.30569 = (int) D.30568;
        D.30570 = __s2 + 3;
        D.30571 = *D.30570;
        D.30572 = (int) D.30571;
        __result = D.30569 - D.30572;
        <D.30566>:
        <D.30556>:
        <D.30546>:
      }
      D.22878 = __result;
    }
    iftmp.184 = -D.22878;
    goto <D.30573>;
    <D.30536>:
    D.29850 = klass->name;
    iftmp.184 = __builtin_strcmp (D.29850, "EnumBuilder");
    <D.30573>:
    D.22879 = iftmp.184;
  }
  if (D.22879 == 0) goto <D.30574>; else goto <D.30575>;
  <D.30574>:
  {
    struct MonoType * type;

    type = mono_reflection_type_get_handle (obj);
    D.30576 = mono_image_typedef_or_ref (assembly, type);
    token = mono_metadata_token_from_dor (D.30576);
  }
  goto <D.30577>;
  <D.30575>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30581 = "FieldOnTypeBuilderInst";
      D.30582 = MEM[(const unsigned char *)D.30581];
      D.30583 = (int) D.30582;
      D.30584 = *__s2;
      D.30585 = (int) D.30584;
      __result = D.30583 - D.30585;
      {
        D.30586 = __s2_len != 0;
        D.30587 = __result == 0;
        D.30588 = D.30586 & D.30587;
        if (D.30588 != 0) goto <D.30589>; else goto <D.30590>;
        <D.30589>:
        D.30591 = &MEM[(void *)"FieldOnTypeBuilderInst" + 1B];
        D.30592 = *D.30591;
        D.30593 = (int) D.30592;
        D.30594 = __s2 + 1;
        D.30595 = *D.30594;
        D.30596 = (int) D.30595;
        __result = D.30593 - D.30596;
        D.30597 = __s2_len > 1;
        D.30587 = __result == 0;
        D.30598 = D.30597 & D.30587;
        if (D.30598 != 0) goto <D.30599>; else goto <D.30600>;
        <D.30599>:
        D.30601 = &MEM[(void *)"FieldOnTypeBuilderInst" + 2B];
        D.30602 = *D.30601;
        D.30603 = (int) D.30602;
        D.30604 = __s2 + 2;
        D.30605 = *D.30604;
        D.30606 = (int) D.30605;
        __result = D.30603 - D.30606;
        D.30607 = __s2_len > 2;
        D.30587 = __result == 0;
        D.30608 = D.30607 & D.30587;
        if (D.30608 != 0) goto <D.30609>; else goto <D.30610>;
        <D.30609>:
        D.30611 = &MEM[(void *)"FieldOnTypeBuilderInst" + 3B];
        D.30612 = *D.30611;
        D.30613 = (int) D.30612;
        D.30614 = __s2 + 3;
        D.30615 = *D.30614;
        D.30616 = (int) D.30615;
        __result = D.30613 - D.30616;
        <D.30610>:
        <D.30600>:
        <D.30590>:
      }
      D.22888 = __result;
    }
    iftmp.185 = -D.22888;
    goto <D.30617>;
    <D.30580>:
    D.29850 = klass->name;
    iftmp.185 = __builtin_strcmp (D.29850, "FieldOnTypeBuilderInst");
    <D.30617>:
    D.22889 = iftmp.185;
  }
  if (D.22889 == 0) goto <D.30618>; else goto <D.30619>;
  <D.30618>:
  {
    struct MonoReflectionFieldOnTypeBuilderInst * f;

    f = obj;
    token = mono_image_get_field_on_inst_token (assembly, f);
  }
  goto <D.30620>;
  <D.30619>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30624 = "ConstructorOnTypeBuilderInst";
      D.30625 = MEM[(const unsigned char *)D.30624];
      D.30626 = (int) D.30625;
      D.30627 = *__s2;
      D.30628 = (int) D.30627;
      __result = D.30626 - D.30628;
      {
        D.30629 = __s2_len != 0;
        D.30630 = __result == 0;
        D.30631 = D.30629 & D.30630;
        if (D.30631 != 0) goto <D.30632>; else goto <D.30633>;
        <D.30632>:
        D.30634 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 1B];
        D.30635 = *D.30634;
        D.30636 = (int) D.30635;
        D.30637 = __s2 + 1;
        D.30638 = *D.30637;
        D.30639 = (int) D.30638;
        __result = D.30636 - D.30639;
        D.30640 = __s2_len > 1;
        D.30630 = __result == 0;
        D.30641 = D.30640 & D.30630;
        if (D.30641 != 0) goto <D.30642>; else goto <D.30643>;
        <D.30642>:
        D.30644 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 2B];
        D.30645 = *D.30644;
        D.30646 = (int) D.30645;
        D.30647 = __s2 + 2;
        D.30648 = *D.30647;
        D.30649 = (int) D.30648;
        __result = D.30646 - D.30649;
        D.30650 = __s2_len > 2;
        D.30630 = __result == 0;
        D.30651 = D.30650 & D.30630;
        if (D.30651 != 0) goto <D.30652>; else goto <D.30653>;
        <D.30652>:
        D.30654 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 3B];
        D.30655 = *D.30654;
        D.30656 = (int) D.30655;
        D.30657 = __s2 + 3;
        D.30658 = *D.30657;
        D.30659 = (int) D.30658;
        __result = D.30656 - D.30659;
        <D.30653>:
        <D.30643>:
        <D.30633>:
      }
      D.22898 = __result;
    }
    iftmp.186 = -D.22898;
    goto <D.30660>;
    <D.30623>:
    D.29850 = klass->name;
    iftmp.186 = __builtin_strcmp (D.29850, "ConstructorOnTypeBuilderInst");
    <D.30660>:
    D.22899 = iftmp.186;
  }
  if (D.22899 == 0) goto <D.30661>; else goto <D.30662>;
  <D.30661>:
  {
    struct MonoReflectionCtorOnTypeBuilderInst * c;

    c = obj;
    token = mono_image_get_ctor_on_inst_token (assembly, c, create_open_instance);
  }
  goto <D.30663>;
  <D.30662>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.30667 = "MethodOnTypeBuilderInst";
      D.30668 = MEM[(const unsigned char *)D.30667];
      D.30669 = (int) D.30668;
      D.30670 = *__s2;
      D.30671 = (int) D.30670;
      __result = D.30669 - D.30671;
      {
        D.30672 = __s2_len != 0;
        D.30673 = __result == 0;
        D.30674 = D.30672 & D.30673;
        if (D.30674 != 0) goto <D.30675>; else goto <D.30676>;
        <D.30675>:
        D.30677 = &MEM[(void *)"MethodOnTypeBuilderInst" + 1B];
        D.30678 = *D.30677;
        D.30679 = (int) D.30678;
        D.30680 = __s2 + 1;
        D.30681 = *D.30680;
        D.30682 = (int) D.30681;
        __result = D.30679 - D.30682;
        D.30683 = __s2_len > 1;
        D.30673 = __result == 0;
        D.30684 = D.30683 & D.30673;
        if (D.30684 != 0) goto <D.30685>; else goto <D.30686>;
        <D.30685>:
        D.30687 = &MEM[(void *)"MethodOnTypeBuilderInst" + 2B];
        D.30688 = *D.30687;
        D.30689 = (int) D.30688;
        D.30690 = __s2 + 2;
        D.30691 = *D.30690;
        D.30692 = (int) D.30691;
        __result = D.30689 - D.30692;
        D.30693 = __s2_len > 2;
        D.30673 = __result == 0;
        D.30694 = D.30693 & D.30673;
        if (D.30694 != 0) goto <D.30695>; else goto <D.30696>;
        <D.30695>:
        D.30697 = &MEM[(void *)"MethodOnTypeBuilderInst" + 3B];
        D.30698 = *D.30697;
        D.30699 = (int) D.30698;
        D.30700 = __s2 + 3;
        D.30701 = *D.30700;
        D.30702 = (int) D.30701;
        __result = D.30699 - D.30702;
        <D.30696>:
        <D.30686>:
        <D.30676>:
      }
      D.22908 = __result;
    }
    iftmp.187 = -D.22908;
    goto <D.30703>;
    <D.30666>:
    D.29850 = klass->name;
    iftmp.187 = __builtin_strcmp (D.29850, "MethodOnTypeBuilderInst");
    <D.30703>:
    D.22909 = iftmp.187;
  }
  if (D.22909 == 0) goto <D.30704>; else goto <D.30705>;
  <D.30704>:
  {
    struct MonoReflectionMethodOnTypeBuilderInst * m;

    m = obj;
    token = mono_image_get_method_on_inst_token (assembly, m, create_open_instance);
  }
  goto <D.30706>;
  <D.30705>:
  D.30710 = is_sre_array (klass);
  if (D.30710 != 0) goto <D.30707>; else goto <D.30711>;
  <D.30711>:
  D.30712 = is_sre_byref (klass);
  if (D.30712 != 0) goto <D.30707>; else goto <D.30713>;
  <D.30713>:
  D.30714 = is_sre_pointer (klass);
  if (D.30714 != 0) goto <D.30707>; else goto <D.30708>;
  <D.30707>:
  {
    struct MonoReflectionType * type;

    type = obj;
    D.30715 = mono_reflection_type_get_handle (type);
    D.30716 = mono_image_typedef_or_ref (assembly, D.30715);
    token = mono_metadata_token_from_dor (D.30716);
  }
  goto <D.30709>;
  <D.30708>:
  D.29850 = klass->name;
  monoeg_g_log (0B, 4, "requested token for %s\n", D.29850);
  <D.22912>:
  goto <D.22912>;
  <D.30709>:
  <D.30706>:
  <D.30663>:
  <D.30620>:
  <D.30577>:
  <D.30533>:
  <D.30489>:
  <D.30446>:
  <D.30206>:
  <D.30203>:
  <D.30159>:
  <D.30115>:
  <D.30065>:
  <D.30010>:
  <D.29955>:
  <D.29904>:
  if (register_token != 0) goto <D.30717>; else goto <D.30718>;
  <D.30717>:
  mono_image_register_token (assembly, token, obj);
  <D.30718>:
  D.30719 = token;
  return D.30719;
}


mono_image_get_methodbuilder_token (struct MonoDynamicImage * assembly, struct MonoReflectionMethodBuilder * mb, gboolean create_methodspec)
{
  struct MonoArray * D.30721;
  guint32 D.30726;
  struct MonoGHashTable * D.30727;
  void * D.30728;
  void * token.188;
  guint32 token;

  D.30721 = mb->generic_params;
  if (D.30721 != 0B) goto <D.30722>; else goto <D.30723>;
  <D.30722>:
  if (create_methodspec != 0) goto <D.30724>; else goto <D.30725>;
  <D.30724>:
  D.30726 = mono_image_get_methodspec_token_for_generic_method_definition (assembly, mb);
  return D.30726;
  <D.30725>:
  <D.30723>:
  D.30727 = assembly->handleref_managed;
  D.30728 = mono_g_hash_table_lookup (D.30727, mb);
  token = (guint32) D.30728;
  if (token != 0) goto <D.30729>; else goto <D.30730>;
  <D.30729>:
  D.30726 = token;
  return D.30726;
  <D.30730>:
  token = mono_image_get_methodref_token_for_methodbuilder (assembly, mb);
  D.30727 = assembly->handleref_managed;
  token.188 = (void *) token;
  mono_g_hash_table_insert (D.30727, mb, token.188);
  D.30726 = token;
  return D.30726;
}


mono_image_get_methodspec_token_for_generic_method_definition (struct MonoDynamicImage * assembly, struct MonoReflectionMethodBuilder * mb)
{
  struct MonoGHashTable * D.30733;
  void * D.30734;
  guint32 D.30737;
  unsigned int D.30738;
  unsigned int D.30739;
  unsigned int D.30740;
  int D.30741;
  unsigned int D.30744;
  unsigned int D.30745;
  guint32 * D.30746;
  unsigned int D.30747;
  unsigned int D.30748;
  guint32 * D.30749;
  unsigned int D.30750;
  unsigned int D.30751;
  void * token.189;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 token;
  guint32 mtoken;

  mtoken = 0;
  D.30733 = assembly->methodspec;
  D.30734 = mono_g_hash_table_lookup (D.30733, mb);
  token = (guint32) D.30734;
  if (token != 0) goto <D.30735>; else goto <D.30736>;
  <D.30735>:
  D.30737 = token;
  return D.30737;
  <D.30736>:
  table = &assembly->tables[43];
  mtoken = mono_image_get_methodref_token_for_methodbuilder (assembly, mb);
  D.30738 = mtoken >> 24;
  switch (D.30738) <default: <D.21654>, case 6: <D.21653>, case 10: <D.21651>>
  <D.21651>:
  D.30739 = mtoken & 16777215;
  D.30740 = D.30739 << 1;
  mtoken = D.30740 | 1;
  goto <D.21652>;
  <D.21653>:
  D.30739 = mtoken & 16777215;
  mtoken = D.30739 << 1;
  goto <D.21652>;
  <D.21654>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 2637);
  <D.21652>:
  D.30741 = assembly->save;
  if (D.30741 != 0) goto <D.30742>; else goto <D.30743>;
  <D.30742>:
  D.30744 = table->rows;
  D.30745 = D.30744 + 1;
  alloc_table (table, D.30745);
  D.30746 = table->values;
  D.30747 = table->next_idx;
  D.30748 = D.30747 * 8;
  values = D.30746 + D.30748;
  *values = mtoken;
  D.30749 = values + 4;
  D.30750 = encode_generic_method_definition_sig (assembly, mb);
  *D.30749 = D.30750;
  <D.30743>:
  D.30747 = table->next_idx;
  token = D.30747 | 721420288;
  D.30747 = table->next_idx;
  D.30751 = D.30747 + 1;
  table->next_idx = D.30751;
  D.30733 = assembly->methodspec;
  token.189 = (void *) token;
  mono_g_hash_table_insert (D.30733, mb, token.189);
  D.30737 = token;
  return D.30737;
}


encode_generic_method_definition_sig (struct MonoDynamicImage * assembly, struct MonoReflectionMethodBuilder * mb)
{
  struct MonoArray * D.30754;
  int D.30755;
  guint32 D.30758;
  unsigned int i.190;
  struct SigBuffer buf;
  int i;
  guint32 nparams;
  guint32 idx;

  try
    {
      D.30754 = mb->generic_params;
      nparams = mono_array_length (D.30754);
      D.30755 = assembly->save;
      if (D.30755 == 0) goto <D.30756>; else goto <D.30757>;
      <D.30756>:
      D.30758 = 0;
      return D.30758;
      <D.30757>:
      sigbuffer_init (&buf, 32);
      sigbuffer_add_value (&buf, 10);
      sigbuffer_add_value (&buf, nparams);
      i = 0;
      goto <D.21641>;
      <D.21640>:
      sigbuffer_add_value (&buf, 30);
      i.190 = (unsigned int) i;
      sigbuffer_add_value (&buf, i.190);
      i = i + 1;
      <D.21641>:
      i.190 = (unsigned int) i;
      if (i.190 < nparams) goto <D.21640>; else goto <D.21642>;
      <D.21642>:
      idx = sigbuffer_add_to_blob_cached (assembly, &buf);
      sigbuffer_free (&buf);
      D.30758 = idx;
      return D.30758;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


mono_image_get_methodref_token_for_methodbuilder (struct MonoDynamicImage * assembly, struct MonoReflectionMethodBuilder * method)
{
  struct GHashTable * D.30762;
  void * D.30763;
  guint32 D.30766;
  struct MonoString * D.30767;
  unsigned int D.30768;
  unsigned int D.30769;
  _Bool D.30770;
  _Bool D.30771;
  _Bool D.30772;
  unsigned int D.30775;
  struct MonoArray * D.30776;
  struct MonoObject * D.30780;
  struct MonoType * D.30781;
  void * token.191;
  guint32 token;
  guint32 parent;
  guint32 sig;
  struct ReflectionMethodBuilder rmb;
  char * name;
  struct MonoReflectionTypeBuilder * tb;

  try
    {
      tb = method->type;
      D.30762 = assembly->handleref;
      D.30763 = monoeg_g_hash_table_lookup (D.30762, method);
      token = (guint32) D.30763;
      if (token != 0) goto <D.30764>; else goto <D.30765>;
      <D.30764>:
      D.30766 = token;
      return D.30766;
      <D.30765>:
      D.30767 = method->name;
      name = mono_string_to_utf8 (D.30767);
      reflection_methodbuilder_from_method_builder (&rmb, method);
      D.30768 = rmb.call_conv;
      D.30769 = D.30768 & 4294967199;
      D.30770 = D.30769 != 0;
      D.30771 = D.30769 != 5;
      D.30772 = D.30770 & D.30771;
      if (D.30772 != 0) goto <D.30773>; else goto <D.30774>;
      <D.30773>:
      D.30768 = rmb.call_conv;
      D.30775 = D.30768 & 96;
      rmb.call_conv = D.30775;
      <D.30774>:
      sig = method_builder_encode_signature (assembly, &rmb);
      D.30776 = tb->generic_params;
      if (D.30776 != 0B) goto <D.30777>; else goto <D.30778>;
      <D.30777>:
      parent = create_generic_typespec (assembly, tb);
      goto <D.30779>;
      <D.30778>:
      D.30780 = rmb.type;
      D.30781 = mono_reflection_type_get_handle (D.30780);
      parent = mono_image_typedef_or_ref (assembly, D.30781);
      <D.30779>:
      token = mono_image_add_memberef_row (assembly, parent, name, sig);
      monoeg_g_free (name);
      D.30762 = assembly->handleref;
      token.191 = (void *) token;
      monoeg_g_hash_table_insert_replace (D.30762, method, token.191, 0);
      D.30766 = token;
      return D.30766;
    }
  finally
    {
      rmb = {CLOBBER};
    }
}


create_generic_typespec (struct MonoDynamicImage * assembly, struct MonoReflectionTypeBuilder * tb)
{
  struct GHashTable * D.30785;
  void * D.30786;
  guint32 D.30789;
  struct MonoArray * D.30790;
  _Bool D.30791;
  long int D.30792;
  long int D.30793;
  struct MonoGenericContainer * D.30796;
  struct MonoGenericContainer * D.30799;
  _Bool D.30800;
  long int D.30801;
  long int D.30802;
  unsigned char D.30805;
  unsigned int D.30806;
  struct MonoType * D.30807;
  unsigned int D.30808;
  unsigned int D.30809;
  unsigned int count.192;
  unsigned int i.193;
  char * D.30812;
  struct MonoType * D.30813;
  int D.30814;
  unsigned int D.30817;
  unsigned int D.30818;
  guint32 * D.30819;
  unsigned int D.30820;
  unsigned int D.30821;
  unsigned int D.30822;
  void * token.194;
  unsigned int D.30824;
  struct MonoDynamicTable * table;
  struct MonoClass * klass;
  struct MonoType * type;
  guint32 * values;
  guint32 token;
  struct SigBuffer buf;
  int count;
  int i;

  try
    {
      type = mono_reflection_type_get_handle (tb);
      D.30785 = assembly->typespec;
      D.30786 = monoeg_g_hash_table_lookup (D.30785, type);
      token = (guint32) D.30786;
      if (token != 0) goto <D.30787>; else goto <D.30788>;
      <D.30787>:
      D.30789 = token;
      return D.30789;
      <D.30788>:
      sigbuffer_init (&buf, 32);
      D.30790 = tb->generic_params;
      D.30791 = D.30790 == 0B;
      D.30792 = (long int) D.30791;
      D.30793 = __builtin_expect (D.30792, 0);
      if (D.30793 != 0) goto <D.30794>; else goto <D.30795>;
      <D.30794>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 3096, "tb->generic_params");
      <D.30795>:
      klass = mono_class_from_mono_type (type);
      D.30796 = tb->generic_container;
      if (D.30796 != 0B) goto <D.30797>; else goto <D.30798>;
      <D.30797>:
      mono_reflection_create_generic_class (tb);
      <D.30798>:
      sigbuffer_add_value (&buf, 21);
      D.30799 = klass->generic_container;
      D.30800 = D.30799 == 0B;
      D.30801 = (long int) D.30800;
      D.30802 = __builtin_expect (D.30801, 0);
      if (D.30802 != 0) goto <D.30803>; else goto <D.30804>;
      <D.30803>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 3103, "klass->generic_container");
      <D.30804>:
      D.30805 = klass->byval_arg.type;
      D.30806 = (unsigned int) D.30805;
      sigbuffer_add_value (&buf, D.30806);
      D.30807 = &klass->byval_arg;
      D.30808 = mono_image_typedef_or_ref_full (assembly, D.30807, 0);
      sigbuffer_add_value (&buf, D.30808);
      D.30790 = tb->generic_params;
      D.30809 = mono_array_length (D.30790);
      count = (int) D.30809;
      count.192 = (unsigned int) count;
      sigbuffer_add_value (&buf, count.192);
      i = 0;
      goto <D.21807>;
      <D.21806>:
      {
        struct MonoReflectionGenericParam * gparam;

        D.30790 = tb->generic_params;
        i.193 = (unsigned int) i;
        D.30812 = mono_array_addr_with_size (D.30790, 4, i.193);
        gparam = MEM[(struct MonoReflectionGenericParam * *)D.30812];
        D.30813 = mono_reflection_type_get_handle (gparam);
        encode_type (assembly, D.30813, &buf);
      }
      i = i + 1;
      <D.21807>:
      if (i < count) goto <D.21806>; else goto <D.21808>;
      <D.21808>:
      table = &assembly->tables[27];
      D.30814 = assembly->save;
      if (D.30814 != 0) goto <D.30815>; else goto <D.30816>;
      <D.30815>:
      token = sigbuffer_add_to_blob_cached (assembly, &buf);
      D.30817 = table->rows;
      D.30818 = D.30817 + 1;
      alloc_table (table, D.30818);
      D.30819 = table->values;
      D.30820 = table->next_idx;
      D.30821 = D.30820 * 4;
      values = D.30819 + D.30821;
      *values = token;
      <D.30816>:
      sigbuffer_free (&buf);
      D.30820 = table->next_idx;
      D.30822 = D.30820 << 2;
      token = D.30822 | 2;
      D.30785 = assembly->typespec;
      token.194 = (void *) token;
      monoeg_g_hash_table_insert_replace (D.30785, type, token.194, 0);
      D.30820 = table->next_idx;
      D.30824 = D.30820 + 1;
      table->next_idx = D.30824;
      D.30789 = token;
      return D.30789;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


mono_image_add_memberef_row (struct MonoDynamicImage * assembly, guint32 parent, const char * name, guint32 sig)
{
  unsigned int D.30827;
  guint32 D.30828;
  int D.30829;
  unsigned int D.30832;
  unsigned int D.30833;
  guint32 * D.30834;
  unsigned int D.30835;
  unsigned int D.30836;
  unsigned int D.30837;
  unsigned int D.30838;
  guint32 * D.30839;
  struct MonoDynamicStream * D.30840;
  unsigned int D.30841;
  guint32 * D.30842;
  unsigned int D.30843;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 token;
  guint32 pclass;

  D.30827 = parent & 3;
  switch (D.30827) <default: <D.21596>, case 0: <D.21595>, case 1: <D.21592>, case 2: <D.21594>>
  <D.21592>:
  pclass = 1;
  goto <D.21593>;
  <D.21594>:
  pclass = 4;
  goto <D.21593>;
  <D.21595>:
  pclass = 0;
  goto <D.21593>;
  <D.21596>:
  monoeg_g_log (0B, 16, "unknown typeref or def token 0x%08x for %s", parent, name);
  D.30828 = 0;
  return D.30828;
  <D.21593>:
  parent = parent >> 2;
  table = &assembly->tables[10];
  D.30829 = assembly->save;
  if (D.30829 != 0) goto <D.30830>; else goto <D.30831>;
  <D.30830>:
  D.30832 = table->rows;
  D.30833 = D.30832 + 1;
  alloc_table (table, D.30833);
  D.30834 = table->values;
  D.30835 = table->next_idx;
  D.30836 = D.30835 * 12;
  values = D.30834 + D.30836;
  D.30837 = parent << 3;
  D.30838 = D.30837 | pclass;
  *values = D.30838;
  D.30839 = values + 4;
  D.30840 = &assembly->sheap;
  D.30841 = string_heap_insert (D.30840, name);
  *D.30839 = D.30841;
  D.30842 = values + 8;
  *D.30842 = sig;
  <D.30831>:
  D.30835 = table->next_idx;
  token = D.30835 | 167772160;
  D.30835 = table->next_idx;
  D.30843 = D.30835 + 1;
  table->next_idx = D.30843;
  D.30828 = token;
  return D.30828;
}


mono_image_get_ctorbuilder_token (struct MonoDynamicImage * assembly, struct MonoReflectionCtorBuilder * mb)
{
  struct MonoGHashTable * D.30845;
  void * D.30846;
  guint32 D.30849;
  struct MonoArray * D.30850;
  struct MonoType * D.30854;
  struct MonoString * D.30855;
  void * token.195;
  guint32 token;
  guint32 parent;
  guint32 sig;
  struct ReflectionMethodBuilder rmb;
  char * name;
  struct MonoReflectionTypeBuilder * tb;

  try
    {
      tb = mb->type;
      D.30845 = assembly->handleref_managed;
      D.30846 = mono_g_hash_table_lookup (D.30845, mb);
      token = (guint32) D.30846;
      if (token != 0) goto <D.30847>; else goto <D.30848>;
      <D.30847>:
      D.30849 = token;
      return D.30849;
      <D.30848>:
      reflection_methodbuilder_from_ctor_builder (&rmb, mb);
      D.30850 = tb->generic_params;
      if (D.30850 != 0B) goto <D.30851>; else goto <D.30852>;
      <D.30851>:
      parent = create_generic_typespec (assembly, tb);
      goto <D.30853>;
      <D.30852>:
      D.30854 = mono_reflection_type_get_handle (tb);
      parent = mono_image_typedef_or_ref (assembly, D.30854);
      <D.30853>:
      D.30855 = rmb.name;
      name = mono_string_to_utf8 (D.30855);
      sig = method_builder_encode_signature (assembly, &rmb);
      token = mono_image_add_memberef_row (assembly, parent, name, sig);
      monoeg_g_free (name);
      D.30845 = assembly->handleref_managed;
      token.195 = (void *) token;
      mono_g_hash_table_insert (D.30845, mb, token.195);
      D.30849 = token;
      return D.30849;
    }
  finally
    {
      rmb = {CLOBBER};
    }
}


mono_image_get_generic_field_token (struct MonoDynamicImage * assembly, struct MonoReflectionFieldBuilder * fb)
{
  struct MonoGHashTable * D.30859;
  void * D.30860;
  guint32 D.30863;
  struct MonoReflectionType * D.30864;
  struct MonoType * D.30865;
  struct MonoString * D.30866;
  struct MonoObject * D.30867;
  struct MonoArray * D.30870;
  struct MonoArray * D.30872;
  unsigned int D.30873;
  _Bool D.30874;
  long int D.30875;
  long int D.30876;
  int D.30879;
  unsigned int D.30882;
  unsigned int D.30883;
  guint32 * D.30884;
  unsigned int D.30885;
  unsigned int D.30886;
  unsigned int D.30887;
  unsigned int D.30888;
  guint32 * D.30889;
  struct MonoDynamicStream * D.30890;
  unsigned int D.30891;
  guint32 * D.30892;
  unsigned int D.30893;
  void * token.196;
  struct MonoDynamicTable * table;
  struct MonoClass * klass;
  struct MonoType * custom;
  struct MonoType * type;
  guint32 * values;
  guint32 token;
  guint32 pclass;
  guint32 parent;
  guint32 sig;
  gchar * name;

  custom = 0B;
  D.30859 = assembly->handleref_managed;
  D.30860 = mono_g_hash_table_lookup (D.30859, fb);
  token = (guint32) D.30860;
  if (token != 0) goto <D.30861>; else goto <D.30862>;
  <D.30861>:
  D.30863 = token;
  return D.30863;
  <D.30862>:
  D.30864 = fb->typeb;
  D.30865 = mono_reflection_type_get_handle (D.30864);
  klass = mono_class_from_mono_type (D.30865);
  D.30866 = fb->name;
  name = mono_string_to_utf8 (D.30866);
  D.30867 = fb->type;
  init_type_builder_generics (D.30867);
  D.30867 = fb->type;
  type = mono_reflection_type_get_handle (D.30867);
  D.30870 = fb->modreq;
  if (D.30870 != 0B) goto <D.30868>; else goto <D.30871>;
  <D.30871>:
  D.30872 = fb->modopt;
  if (D.30872 != 0B) goto <D.30868>; else goto <D.30869>;
  <D.30868>:
  D.30870 = fb->modreq;
  D.30872 = fb->modopt;
  custom = add_custom_modifiers (assembly, type, D.30870, D.30872);
  type = custom;
  <D.30869>:
  sig = fieldref_encode_signature (assembly, 0B, type);
  monoeg_g_free (custom);
  D.30864 = fb->typeb;
  parent = create_generic_typespec (assembly, D.30864);
  D.30873 = parent & 3;
  D.30874 = D.30873 != 2;
  D.30875 = (long int) D.30874;
  D.30876 = __builtin_expect (D.30875, 0);
  if (D.30876 != 0) goto <D.30877>; else goto <D.30878>;
  <D.30877>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 3220, "(parent & MONO_TYPEDEFORREF_MASK) == MONO_TYPEDEFORREF_TYPESPEC");
  <D.30878>:
  pclass = 4;
  parent = parent >> 2;
  table = &assembly->tables[10];
  D.30879 = assembly->save;
  if (D.30879 != 0) goto <D.30880>; else goto <D.30881>;
  <D.30880>:
  D.30882 = table->rows;
  D.30883 = D.30882 + 1;
  alloc_table (table, D.30883);
  D.30884 = table->values;
  D.30885 = table->next_idx;
  D.30886 = D.30885 * 12;
  values = D.30884 + D.30886;
  D.30887 = parent << 3;
  D.30888 = D.30887 | pclass;
  *values = D.30888;
  D.30889 = values + 4;
  D.30890 = &assembly->sheap;
  D.30891 = string_heap_insert (D.30890, name);
  *D.30889 = D.30891;
  D.30892 = values + 8;
  *D.30892 = sig;
  <D.30881>:
  D.30885 = table->next_idx;
  token = D.30885 | 167772160;
  D.30885 = table->next_idx;
  D.30893 = D.30885 + 1;
  table->next_idx = D.30893;
  D.30859 = assembly->handleref_managed;
  token.196 = (void *) token;
  mono_g_hash_table_insert (D.30859, fb, token.196);
  monoeg_g_free (name);
  D.30863 = token;
  return D.30863;
}


add_custom_modifiers (struct MonoDynamicImage * assembly, struct MonoType * type, struct MonoArray * modreq, struct MonoArray * modopt)
{
  unsigned int D.30898;
  unsigned int count.197;
  unsigned int D.30900;
  unsigned int D.30903;
  unsigned int D.30904;
  struct MonoType * D.30907;
  unsigned int count.198;
  unsigned int D.30909;
  unsigned int D.30910;
  unsigned int len.199;
  unsigned char D.30912;
  <unnamed-unsigned:6> D.30913;
  unsigned int i.200;
  char * D.30917;
  void * D.30918;
  unsigned int D.30919;
  <unnamed-unsigned:31> D.30920;
  unsigned int D.30921;
  char * D.30924;
  void * D.30925;
  unsigned int D.30926;
  <unnamed-unsigned:31> D.30927;
  unsigned int D.30928;
  int i;
  int count;
  int len;
  int pos;
  struct MonoType * t;

  count = 0;
  if (modreq != 0B) goto <D.30896>; else goto <D.30897>;
  <D.30896>:
  D.30898 = mono_array_length (modreq);
  count.197 = (unsigned int) count;
  D.30900 = D.30898 + count.197;
  count = (int) D.30900;
  <D.30897>:
  if (modopt != 0B) goto <D.30901>; else goto <D.30902>;
  <D.30901>:
  D.30903 = mono_array_length (modopt);
  count.197 = (unsigned int) count;
  D.30904 = D.30903 + count.197;
  count = (int) D.30904;
  <D.30902>:
  if (count == 0) goto <D.30905>; else goto <D.30906>;
  <D.30905>:
  D.30907 = mono_metadata_type_dup (0B, type);
  return D.30907;
  <D.30906>:
  count.198 = (unsigned int) count;
  D.30909 = count.198 + 2;
  D.30910 = D.30909 * 4;
  len = (int) D.30910;
  len.199 = (unsigned int) len;
  t = monoeg_malloc (len.199);
  memcpy (t, type, 8);
  D.30912 = (unsigned char) count;
  D.30913 = (<unnamed-unsigned:6>) D.30912;
  t->num_mods = D.30913;
  pos = 0;
  if (modreq != 0B) goto <D.30914>; else goto <D.30915>;
  <D.30914>:
  i = 0;
  goto <D.21822>;
  <D.21821>:
  {
    struct MonoType * mod;

    i.200 = (unsigned int) i;
    D.30917 = mono_array_addr_with_size (modreq, 4, i.200);
    D.30918 = MEM[(void * *)D.30917];
    mod = mono_reflection_type_get_handle (D.30918);
    t->modifiers[pos].required = 1;
    D.30919 = mono_image_typedef_or_ref (assembly, mod);
    D.30920 = (<unnamed-unsigned:31>) D.30919;
    t->modifiers[pos].token = D.30920;
    pos = pos + 1;
  }
  i = i + 1;
  <D.21822>:
  i.200 = (unsigned int) i;
  D.30921 = mono_array_length (modreq);
  if (i.200 < D.30921) goto <D.21821>; else goto <D.21823>;
  <D.21823>:
  <D.30915>:
  if (modopt != 0B) goto <D.30922>; else goto <D.30923>;
  <D.30922>:
  i = 0;
  goto <D.21826>;
  <D.21825>:
  {
    struct MonoType * mod;

    i.200 = (unsigned int) i;
    D.30924 = mono_array_addr_with_size (modopt, 4, i.200);
    D.30925 = MEM[(void * *)D.30924];
    mod = mono_reflection_type_get_handle (D.30925);
    t->modifiers[pos].required = 0;
    D.30926 = mono_image_typedef_or_ref (assembly, mod);
    D.30927 = (<unnamed-unsigned:31>) D.30926;
    t->modifiers[pos].token = D.30927;
    pos = pos + 1;
  }
  i = i + 1;
  <D.21826>:
  i.200 = (unsigned int) i;
  D.30928 = mono_array_length (modopt);
  if (i.200 < D.30928) goto <D.21825>; else goto <D.21827>;
  <D.21827>:
  <D.30923>:
  D.30907 = t;
  return D.30907;
}


fieldref_encode_signature (struct MonoDynamicImage * assembly, struct MonoImage * field_image, struct MonoType * type)
{
  int D.30930;
  guint32 D.30933;
  unsigned char D.30934;
  unsigned char D.30935;
  <unnamed-unsigned:31> D.30940;
  unsigned int D.30941;
  _Bool D.30942;
  long int D.30943;
  long int D.30944;
  struct MonoType * D.30947;
  <unnamed-unsigned:1> D.30949;
  <unnamed-unsigned:6> D.30953;
  unsigned int D.30954;
  struct SigBuffer buf;
  guint32 idx;
  guint32 i;
  guint32 token;

  try
    {
      D.30930 = assembly->save;
      if (D.30930 == 0) goto <D.30931>; else goto <D.30932>;
      <D.30931>:
      D.30933 = 0;
      return D.30933;
      <D.30932>:
      sigbuffer_init (&buf, 32);
      sigbuffer_add_value (&buf, 6);
      D.30934 = BIT_FIELD_REF <*type, 8, 56>;
      D.30935 = D.30934 & 63;
      if (D.30935 != 0) goto <D.30936>; else goto <D.30937>;
      <D.30936>:
      i = 0;
      goto <D.21374>;
      <D.21373>:
      if (field_image != 0B) goto <D.30938>; else goto <D.30939>;
      <D.30938>:
      {
        struct MonoClass * class;

        D.30940 = type->modifiers[i].token;
        D.30941 = (unsigned int) D.30940;
        class = mono_class_get (field_image, D.30941);
        D.30942 = class == 0B;
        D.30943 = (long int) D.30942;
        D.30944 = __builtin_expect (D.30943, 0);
        if (D.30944 != 0) goto <D.30945>; else goto <D.30946>;
        <D.30945>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 1706, "class");
        <D.30946>:
        D.30947 = &class->byval_arg;
        token = mono_image_typedef_or_ref (assembly, D.30947);
      }
      goto <D.30948>;
      <D.30939>:
      D.30940 = type->modifiers[i].token;
      token = (guint32) D.30940;
      <D.30948>:
      D.30949 = type->modifiers[i].required;
      if (D.30949 != 0) goto <D.30950>; else goto <D.30951>;
      <D.30950>:
      sigbuffer_add_byte (&buf, 31);
      goto <D.30952>;
      <D.30951>:
      sigbuffer_add_byte (&buf, 32);
      <D.30952>:
      sigbuffer_add_value (&buf, token);
      i = i + 1;
      <D.21374>:
      D.30953 = type->num_mods;
      D.30954 = (unsigned int) D.30953;
      if (D.30954 > i) goto <D.21373>; else goto <D.21375>;
      <D.21375>:
      <D.30937>:
      encode_type (assembly, type, &buf);
      idx = sigbuffer_add_to_blob_cached (assembly, &buf);
      sigbuffer_free (&buf);
      D.30933 = idx;
      return D.30933;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


mono_image_get_methodspec_token (struct MonoDynamicImage * assembly, struct MonoMethod * method)
{
  struct GHashTable * D.30957;
  void * D.30958;
  guint32 D.30961;
  unsigned char D.30962;
  unsigned char D.30963;
  _Bool D.30964;
  long int D.30965;
  long int D.30966;
  struct MonoMethod * D.30969;
  struct MonoMethodSignature * D.30970;
  short unsigned int D.30971;
  struct MonoMethodSignature * D.30975;
  struct MonoClass * D.30976;
  struct MonoType * D.30977;
  const char * D.30978;
  void * token.201;
  struct MonoMethodInflated * imethod;
  guint32 token;

  D.30957 = assembly->handleref;
  D.30958 = monoeg_g_hash_table_lookup (D.30957, method);
  token = (guint32) D.30958;
  if (token != 0) goto <D.30959>; else goto <D.30960>;
  <D.30959>:
  D.30961 = token;
  return D.30961;
  <D.30960>:
  D.30962 = BIT_FIELD_REF <*method, 8, 168>;
  D.30963 = D.30962 & 16;
  D.30964 = D.30963 == 0;
  D.30965 = (long int) D.30964;
  D.30966 = __builtin_expect (D.30965, 0);
  if (D.30966 != 0) goto <D.30967>; else goto <D.30968>;
  <D.30967>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 3044, "method->is_inflated");
  <D.30968>:
  imethod = method;
  D.30969 = imethod->declaring;
  D.30970 = mono_method_signature (D.30969);
  D.30971 = D.30970->generic_param_count;
  if (D.30971 != 0) goto <D.30972>; else goto <D.30973>;
  <D.30972>:
  token = method_encode_methodspec (assembly, method);
  goto <D.30974>;
  <D.30973>:
  {
    guint32 sig;

    D.30969 = imethod->declaring;
    D.30975 = mono_method_signature (D.30969);
    sig = method_encode_signature (assembly, D.30975);
    D.30976 = method->klass;
    D.30977 = &D.30976->byval_arg;
    D.30978 = method->name;
    token = mono_image_get_memberref_token (assembly, D.30977, D.30978, sig);
  }
  <D.30974>:
  D.30957 = assembly->handleref;
  token.201 = (void *) token;
  monoeg_g_hash_table_insert_replace (D.30957, method, token.201, 0);
  D.30961 = token;
  return D.30961;
}


method_encode_methodspec (struct MonoDynamicImage * assembly, struct MonoMethod * method)
{
  unsigned char D.30981;
  unsigned char D.30982;
  _Bool D.30983;
  long int D.30984;
  long int D.30985;
  struct MonoMethodSignature * D.30988;
  struct MonoClass * D.30989;
  struct MonoType * D.30990;
  const char * D.30991;
  struct MonoMethodSignature * D.30992;
  short unsigned int D.30993;
  guint32 D.30996;
  unsigned int D.30997;
  unsigned int D.30998;
  unsigned int D.30999;
  struct MonoGenericContext * D.31000;
  int D.31001;
  unsigned int D.31004;
  unsigned int D.31005;
  guint32 * D.31006;
  unsigned int D.31007;
  unsigned int D.31008;
  guint32 * D.31009;
  unsigned int D.31010;
  struct MonoDynamicTable * table;
  guint32 * values;
  guint32 token;
  guint32 mtoken;
  guint32 sig;
  struct MonoMethodInflated * imethod;
  struct MonoMethod * declaring;

  mtoken = 0;
  table = &assembly->tables[43];
  D.30981 = BIT_FIELD_REF <*method, 8, 168>;
  D.30982 = D.30981 & 16;
  D.30983 = D.30982 == 0;
  D.30984 = (long int) D.30983;
  D.30985 = __builtin_expect (D.30984, 0);
  if (D.30985 != 0) goto <D.30986>; else goto <D.30987>;
  <D.30986>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 2998, "method->is_inflated");
  <D.30987>:
  imethod = method;
  declaring = imethod->declaring;
  D.30988 = mono_method_signature (declaring);
  sig = method_encode_signature (assembly, D.30988);
  D.30989 = method->klass;
  D.30990 = &D.30989->byval_arg;
  D.30991 = declaring->name;
  mtoken = mono_image_get_memberref_token (assembly, D.30990, D.30991, sig);
  D.30992 = mono_method_signature (declaring);
  D.30993 = D.30992->generic_param_count;
  if (D.30993 == 0) goto <D.30994>; else goto <D.30995>;
  <D.30994>:
  D.30996 = mtoken;
  return D.30996;
  <D.30995>:
  D.30997 = mtoken >> 24;
  switch (D.30997) <default: <D.21778>, case 6: <D.21777>, case 10: <D.21775>>
  <D.21775>:
  D.30998 = mtoken & 16777215;
  D.30999 = D.30998 << 1;
  mtoken = D.30999 | 1;
  goto <D.21776>;
  <D.21777>:
  D.30998 = mtoken & 16777215;
  mtoken = D.30998 << 1;
  goto <D.21776>;
  <D.21778>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 3016);
  <D.21776>:
  D.31000 = mono_method_get_context (method);
  sig = encode_generic_method_sig (assembly, D.31000);
  D.31001 = assembly->save;
  if (D.31001 != 0) goto <D.31002>; else goto <D.31003>;
  <D.31002>:
  D.31004 = table->rows;
  D.31005 = D.31004 + 1;
  alloc_table (table, D.31005);
  D.31006 = table->values;
  D.31007 = table->next_idx;
  D.31008 = D.31007 * 8;
  values = D.31006 + D.31008;
  *values = mtoken;
  D.31009 = values + 4;
  *D.31009 = sig;
  <D.31003>:
  D.31007 = table->next_idx;
  token = D.31007 | 721420288;
  D.31007 = table->next_idx;
  D.31010 = D.31007 + 1;
  table->next_idx = D.31010;
  D.30996 = token;
  return D.30996;
}


encode_generic_method_sig (struct MonoDynamicImage * assembly, struct MonoGenericContext * context)
{
  struct MonoGenericInst * D.31012;
  <unnamed-unsigned:22> D.31013;
  int D.31014;
  guint32 D.31017;
  struct MonoType * D.31018;
  unsigned int i.202;
  struct SigBuffer buf;
  int i;
  guint32 nparams;
  guint32 idx;

  try
    {
      D.31012 = context->method_inst;
      D.31013 = D.31012->type_argc;
      nparams = (guint32) D.31013;
      D.31014 = assembly->save;
      if (D.31014 == 0) goto <D.31015>; else goto <D.31016>;
      <D.31015>:
      D.31017 = 0;
      return D.31017;
      <D.31016>:
      sigbuffer_init (&buf, 32);
      sigbuffer_add_value (&buf, 10);
      sigbuffer_add_value (&buf, nparams);
      i = 0;
      goto <D.21762>;
      <D.21761>:
      D.31012 = context->method_inst;
      D.31018 = D.31012->type_argv[i];
      encode_type (assembly, D.31018, &buf);
      i = i + 1;
      <D.21762>:
      i.202 = (unsigned int) i;
      if (i.202 < nparams) goto <D.21761>; else goto <D.21763>;
      <D.21763>:
      idx = sigbuffer_add_to_blob_cached (assembly, &buf);
      sigbuffer_free (&buf);
      D.31017 = idx;
      return D.31017;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


mono_image_get_memberref_token (struct MonoDynamicImage * assembly, struct MonoType * type, const char * name, guint32 sig)
{
  guint32 D.31022;
  guint32 parent;

  parent = mono_image_typedef_or_ref (assembly, type);
  D.31022 = mono_image_add_memberef_row (assembly, parent, name, sig);
  return D.31022;
}


mono_image_get_inflated_method_token (struct MonoDynamicImage * assembly, struct MonoMethod * m)
{
  struct MonoMethod * D.31024;
  struct MonoMethodSignature * D.31025;
  struct MonoClass * D.31026;
  struct MonoType * D.31027;
  const char * D.31028;
  guint32 D.31029;
  struct MonoMethodInflated * imethod;
  guint32 sig;
  guint32 token;

  imethod = m;
  D.31024 = imethod->declaring;
  D.31025 = mono_method_signature (D.31024);
  sig = method_encode_signature (assembly, D.31025);
  D.31026 = m->klass;
  D.31027 = &D.31026->byval_arg;
  D.31028 = m->name;
  token = mono_image_get_memberref_token (assembly, D.31027, D.31028, sig);
  D.31029 = token;
  return D.31029;
}


mono_image_get_methodref_token (struct MonoDynamicImage * assembly, struct MonoMethod * method, gboolean create_typespec)
{
  int iftmp.203;
  unsigned char D.31035;
  unsigned char D.31036;
  struct MonoClass * D.31038;
  struct MonoImage * D.31039;
  struct MonoImage * D.31040;
  struct GHashTable * D.31044;
  unsigned int method.204;
  unsigned int D.31046;
  const void * D.31047;
  void * D.31048;
  guint32 D.31051;
  void * D.31052;
  _Bool D.31053;
  _Bool D.31054;
  _Bool D.31055;
  unsigned char D.31058;
  _Bool D.31059;
  long int D.31060;
  long int D.31061;
  struct MonoMethodSignature * D.31066;
  unsigned char D.31067;
  unsigned char D.31068;
  _Bool D.31069;
  _Bool D.31070;
  _Bool D.31071;
  struct MonoType * D.31074;
  const char * D.31075;
  unsigned int D.31076;
  void * token.205;
  unsigned int D.31080;
  _Bool D.31081;
  long int D.31082;
  long int D.31083;
  unsigned int D.31086;
  unsigned int D.31087;
  int D.31088;
  unsigned int D.31091;
  unsigned int D.31092;
  guint32 * D.31093;
  unsigned int D.31094;
  unsigned int D.31095;
  guint32 * D.31096;
  struct MonoGenericContainer * D.31097;
  struct MonoGenericContext * D.31098;
  unsigned int D.31099;
  unsigned int D.31100;
  void * D.31101;
  guint32 token;
  struct MonoMethodSignature * sig;

  if (create_typespec != 0) goto <D.31034>; else goto <D.31032>;
  <D.31034>:
  D.31035 = BIT_FIELD_REF <*method, 8, 168>;
  D.31036 = D.31035 & 8;
  if (D.31036 != 0) goto <D.31037>; else goto <D.31032>;
  <D.31037>:
  D.31038 = method->klass;
  D.31039 = D.31038->image;
  D.31040 = &assembly->image;
  if (D.31039 != D.31040) goto <D.31041>; else goto <D.31032>;
  <D.31041>:
  iftmp.203 = 1;
  goto <D.31033>;
  <D.31032>:
  iftmp.203 = 0;
  <D.31033>:
  create_typespec = iftmp.203;
  if (create_typespec != 0) goto <D.31042>; else goto <D.31043>;
  <D.31042>:
  D.31044 = assembly->handleref;
  method.204 = (unsigned int) method;
  D.31046 = method.204 + 1;
  D.31047 = (const void *) D.31046;
  D.31048 = monoeg_g_hash_table_lookup (D.31044, D.31047);
  token = (guint32) D.31048;
  if (token != 0) goto <D.31049>; else goto <D.31050>;
  <D.31049>:
  D.31051 = token;
  return D.31051;
  <D.31050>:
  <D.31043>:
  D.31044 = assembly->handleref;
  D.31052 = monoeg_g_hash_table_lookup (D.31044, method);
  token = (guint32) D.31052;
  D.31053 = token != 0;
  D.31054 = create_typespec == 0;
  D.31055 = D.31053 & D.31054;
  if (D.31055 != 0) goto <D.31056>; else goto <D.31057>;
  <D.31056>:
  D.31051 = token;
  return D.31051;
  <D.31057>:
  D.31035 = BIT_FIELD_REF <*method, 8, 168>;
  D.31058 = D.31035 & 16;
  D.31059 = D.31058 != 0;
  D.31060 = (long int) D.31059;
  D.31061 = __builtin_expect (D.31060, 0);
  if (D.31061 != 0) goto <D.31062>; else goto <D.31063>;
  <D.31062>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 2492, "!method->is_inflated");
  <D.31063>:
  if (token == 0) goto <D.31064>; else goto <D.31065>;
  <D.31064>:
  D.31066 = mono_method_signature (method);
  sig = mono_metadata_signature_dup (D.31066);
  D.31067 = BIT_FIELD_REF <*sig, 8, 80>;
  D.31068 = D.31067 & 63;
  D.31069 = D.31068 != 0;
  D.31070 = D.31068 != 5;
  D.31071 = D.31069 & D.31070;
  if (D.31071 != 0) goto <D.31072>; else goto <D.31073>;
  <D.31072>:
  sig->call_convention = 0;
  <D.31073>:
  D.31038 = method->klass;
  D.31074 = &D.31038->byval_arg;
  D.31075 = method->name;
  D.31076 = method_encode_signature (assembly, sig);
  token = mono_image_get_memberref_token (assembly, D.31074, D.31075, D.31076);
  monoeg_g_free (sig);
  D.31044 = assembly->handleref;
  token.205 = (void *) token;
  monoeg_g_hash_table_insert_replace (D.31044, method, token.205, 0);
  <D.31065>:
  if (create_typespec != 0) goto <D.31078>; else goto <D.31079>;
  <D.31078>:
  {
    struct MonoDynamicTable * table;

    table = &assembly->tables[43];
    D.31080 = token >> 24;
    D.31081 = D.31080 != 10;
    D.31082 = (long int) D.31081;
    D.31083 = __builtin_expect (D.31082, 0);
    if (D.31083 != 0) goto <D.31084>; else goto <D.31085>;
    <D.31084>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 2508, "mono_metadata_token_table (token) == MONO_TABLE_MEMBERREF");
    <D.31085>:
    D.31086 = token & 16777215;
    D.31087 = D.31086 << 1;
    token = D.31087 | 1;
    D.31088 = assembly->save;
    if (D.31088 != 0) goto <D.31089>; else goto <D.31090>;
    <D.31089>:
    {
      guint32 * values;

      D.31091 = table->rows;
      D.31092 = D.31091 + 1;
      alloc_table (table, D.31092);
      D.31093 = table->values;
      D.31094 = table->next_idx;
      D.31095 = D.31094 * 8;
      values = D.31093 + D.31095;
      *values = token;
      D.31096 = values + 4;
      D.31097 = mono_method_get_generic_container (method);
      D.31098 = &D.31097->context;
      D.31099 = encode_generic_method_sig (assembly, D.31098);
      *D.31096 = D.31099;
    }
    <D.31090>:
    D.31094 = table->next_idx;
    token = D.31094 | 721420288;
    D.31094 = table->next_idx;
    D.31100 = D.31094 + 1;
    table->next_idx = D.31100;
    D.31044 = assembly->handleref;
    method.204 = (unsigned int) method;
    D.31046 = method.204 + 1;
    D.31101 = (void *) D.31046;
    token.205 = (void *) token;
    monoeg_g_hash_table_insert_replace (D.31044, D.31101, token.205, 0);
    D.31051 = token;
    return D.31051;
  }
  <D.31079>:
  D.31051 = token;
  return D.31051;
}


mono_image_get_fieldref_token (struct MonoDynamicImage * assembly, struct MonoObject * f, struct MonoClassField * field)
{
  _Bool D.31103;
  long int D.31104;
  long int D.31105;
  struct MonoClass * D.31108;
  _Bool D.31109;
  long int D.31110;
  long int D.31111;
  struct MonoGHashTable * D.31114;
  void * D.31115;
  guint32 D.31118;
  struct MonoGenericClass * D.31121;
  struct MonoClass * D.31123;
  struct MonoClassField * D.31125;
  int field.206;
  struct MonoClassField * D.31128;
  int D.31129;
  int D.31130;
  unsigned int index.207;
  unsigned int D.31132;
  struct MonoClassField * D.31133;
  int D.31134;
  struct MonoType * D.31138;
  const char * D.31139;
  struct MonoImage * D.31140;
  unsigned int D.31141;
  void * token.208;
  struct MonoType * type;
  guint32 token;

  D.31103 = field == 0B;
  D.31104 = (long int) D.31103;
  D.31105 = __builtin_expect (D.31104, 0);
  if (D.31105 != 0) goto <D.31106>; else goto <D.31107>;
  <D.31106>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 2745, "field");
  <D.31107>:
  D.31108 = field->parent;
  D.31109 = D.31108 == 0B;
  D.31110 = (long int) D.31109;
  D.31111 = __builtin_expect (D.31110, 0);
  if (D.31111 != 0) goto <D.31112>; else goto <D.31113>;
  <D.31112>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 2746, "field->parent");
  <D.31113>:
  D.31114 = assembly->handleref_managed;
  D.31115 = mono_g_hash_table_lookup (D.31114, f);
  token = (guint32) D.31115;
  if (token != 0) goto <D.31116>; else goto <D.31117>;
  <D.31116>:
  D.31118 = token;
  return D.31118;
  <D.31117>:
  D.31108 = field->parent;
  D.31121 = D.31108->generic_class;
  if (D.31121 != 0B) goto <D.31122>; else goto <D.31119>;
  <D.31122>:
  D.31108 = field->parent;
  D.31121 = D.31108->generic_class;
  D.31123 = D.31121->container_class;
  if (D.31123 != 0B) goto <D.31124>; else goto <D.31119>;
  <D.31124>:
  D.31108 = field->parent;
  D.31121 = D.31108->generic_class;
  D.31123 = D.31121->container_class;
  D.31125 = D.31123->fields;
  if (D.31125 != 0B) goto <D.31126>; else goto <D.31119>;
  <D.31126>:
  {
    int index;

    field.206 = (int) field;
    D.31108 = field->parent;
    D.31128 = D.31108->fields;
    D.31129 = (int) D.31128;
    D.31130 = field.206 - D.31129;
    index = D.31130 /[ex] 16;
    D.31108 = field->parent;
    D.31121 = D.31108->generic_class;
    D.31123 = D.31121->container_class;
    D.31125 = D.31123->fields;
    index.207 = (unsigned int) index;
    D.31132 = index.207 * 16;
    D.31133 = D.31125 + D.31132;
    type = mono_field_get_type (D.31133);
  }
  goto <D.31120>;
  <D.31119>:
  D.31134 = is_field_on_inst (field);
  if (D.31134 != 0) goto <D.31135>; else goto <D.31136>;
  <D.31135>:
  type = get_field_on_inst_generic_type (field);
  goto <D.31137>;
  <D.31136>:
  type = mono_field_get_type (field);
  <D.31137>:
  <D.31120>:
  D.31108 = field->parent;
  D.31138 = &D.31108->byval_arg;
  D.31139 = mono_field_get_name (field);
  D.31108 = field->parent;
  D.31140 = D.31108->image;
  D.31141 = fieldref_encode_signature (assembly, D.31140, type);
  token = mono_image_get_memberref_token (assembly, D.31138, D.31139, D.31141);
  D.31114 = assembly->handleref_managed;
  token.208 = (void *) token;
  mono_g_hash_table_insert (D.31114, f, token.208);
  D.31118 = token;
  return D.31118;
}


get_field_on_inst_generic_type (struct MonoClassField * field)
{
  int D.31144;
  _Bool D.31145;
  long int D.31146;
  long int D.31147;
  struct MonoClass * D.31150;
  struct MonoClassField * D.31151;
  int field.209;
  int D.31155;
  int D.31156;
  int D.31157;
  int D.31158;
  struct MonoType * D.31161;
  struct MonoType * * D.31162;
  unsigned int field_index.210;
  unsigned int D.31164;
  struct MonoType * * D.31165;
  struct MonoGenericClass * D.31166;
  struct MonoClassField * D.31167;
  int D.31170;
  int D.31171;
  int D.31172;
  unsigned int D.31173;
  unsigned int D.31174;
  struct MonoClassField * D.31177;
  unsigned int D.31178;
  struct MonoClassField * D.31179;
  struct MonoClass * class;
  struct MonoClass * gtd;
  struct MonoDynamicGenericClass * dgclass;
  int field_index;

  D.31144 = is_field_on_inst (field);
  D.31145 = D.31144 == 0;
  D.31146 = (long int) D.31145;
  D.31147 = __builtin_expect (D.31146, 0);
  if (D.31147 != 0) goto <D.31148>; else goto <D.31149>;
  <D.31148>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 2717, "is_field_on_inst (field)");
  <D.31149>:
  D.31150 = field->parent;
  dgclass = D.31150->generic_class;
  D.31151 = dgclass->fields;
  if (D.31151 <= field) goto <D.31152>; else goto <D.31153>;
  <D.31152>:
  field.209 = (int) field;
  D.31151 = dgclass->fields;
  D.31155 = (int) D.31151;
  D.31156 = field.209 - D.31155;
  D.31157 = D.31156 /[ex] 16;
  D.31158 = dgclass->count_fields;
  if (D.31157 < D.31158) goto <D.31159>; else goto <D.31160>;
  <D.31159>:
  field.209 = (int) field;
  D.31151 = dgclass->fields;
  D.31155 = (int) D.31151;
  D.31156 = field.209 - D.31155;
  field_index = D.31156 /[ex] 16;
  D.31162 = dgclass->field_generic_types;
  field_index.210 = (unsigned int) field_index;
  D.31164 = field_index.210 * 4;
  D.31165 = D.31162 + D.31164;
  D.31161 = *D.31165;
  return D.31161;
  <D.31160>:
  <D.31153>:
  class = field->parent;
  D.31166 = class->generic_class;
  gtd = D.31166->container_class;
  D.31167 = class->fields;
  if (D.31167 <= field) goto <D.31168>; else goto <D.31169>;
  <D.31168>:
  field.209 = (int) field;
  D.31167 = class->fields;
  D.31170 = (int) D.31167;
  D.31171 = field.209 - D.31170;
  D.31172 = D.31171 /[ex] 16;
  D.31173 = (unsigned int) D.31172;
  D.31174 = class->field.count;
  if (D.31173 < D.31174) goto <D.31175>; else goto <D.31176>;
  <D.31175>:
  field.209 = (int) field;
  D.31167 = class->fields;
  D.31170 = (int) D.31167;
  D.31171 = field.209 - D.31170;
  field_index = D.31171 /[ex] 16;
  D.31177 = gtd->fields;
  field_index.210 = (unsigned int) field_index;
  D.31178 = field_index.210 * 16;
  D.31179 = D.31177 + D.31178;
  D.31161 = D.31179->type;
  return D.31161;
  <D.31176>:
  <D.31169>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 2734);
  D.31161 = 0B;
  return D.31161;
}


mono_image_get_array_token (struct MonoDynamicImage * assembly, struct MonoReflectionArrayMethod * m)
{
  struct MonoString * D.31181;
  struct MonoArray * D.31182;
  unsigned int D.31183;
  unsigned int D.31184;
  unsigned int D.31185;
  int D.31186;
  int D.31187;
  unsigned char D.31188;
  <unnamed-unsigned:6> D.31189;
  short unsigned int D.31190;
  struct MonoType * iftmp.211;
  struct MonoReflectionType * D.31192;
  struct MonoClass * D.31196;
  struct MonoReflectionType * D.31197;
  char * D.31198;
  void * D.31199;
  struct MonoType * D.31200;
  int D.21903;
  char * D.31201;
  struct MonoType * D.31204;
  int D.31205;
  struct MonoMethodSignature * D.31208;
  int D.31209;
  unsigned int D.31212;
  unsigned int D.31213;
  guint32 D.31214;
  unsigned int D.31215;
  unsigned int D.31216;
  struct GList * D.31217;
  struct GList * D.31218;
  guint32 nparams;
  guint32 i;
  struct GList * tmp;
  char * name;
  struct MonoMethodSignature * sig;
  struct ArrayMethod * am;
  struct MonoType * mtype;

  D.31181 = m->name;
  name = mono_string_to_utf8 (D.31181);
  D.31182 = m->parameters;
  nparams = mono_array_length (D.31182);
  D.31183 = nparams + 3;
  D.31184 = D.31183 * 4;
  sig = monoeg_malloc0 (D.31184);
  sig->hasthis = 1;
  sig->sentinelpos = -1;
  D.31185 = m->call_conv;
  D.31186 = (int) D.31185;
  D.31187 = reflection_cc_to_file (D.31186);
  D.31188 = (unsigned char) D.31187;
  D.31189 = (<unnamed-unsigned:6>) D.31188;
  sig->call_convention = D.31189;
  D.31190 = (short unsigned int) nparams;
  sig->param_count = D.31190;
  D.31192 = m->ret;
  if (D.31192 != 0B) goto <D.31193>; else goto <D.31194>;
  <D.31193>:
  D.31192 = m->ret;
  iftmp.211 = mono_reflection_type_get_handle (D.31192);
  goto <D.31195>;
  <D.31194>:
  D.31196 = mono_defaults.void_class;
  iftmp.211 = &D.31196->byval_arg;
  <D.31195>:
  sig->ret = iftmp.211;
  D.31197 = m->parent;
  mtype = mono_reflection_type_get_handle (D.31197);
  i = 0;
  goto <D.21893>;
  <D.21892>:
  D.31182 = m->parameters;
  D.31198 = mono_array_addr_with_size (D.31182, 4, i);
  D.31199 = MEM[(void * *)D.31198];
  D.31200 = mono_reflection_type_get_handle (D.31199);
  sig->params[i] = D.31200;
  i = i + 1;
  <D.21893>:
  if (i < nparams) goto <D.21892>; else goto <D.21894>;
  <D.21894>:
  tmp = assembly->array_methods;
  goto <D.21905>;
  <D.21904>:
  am = tmp->data;
  {
    size_t __s1_len;
    size_t __s2_len;

    D.31201 = am->name;
    D.21903 = __builtin_strcmp (name, D.31201);
  }
  if (D.21903 == 0) goto <D.31202>; else goto <D.31203>;
  <D.31202>:
  D.31204 = am->parent;
  D.31205 = mono_metadata_type_equal (D.31204, mtype);
  if (D.31205 != 0) goto <D.31206>; else goto <D.31207>;
  <D.31206>:
  D.31208 = am->sig;
  D.31209 = mono_metadata_signature_equal (D.31208, sig);
  if (D.31209 != 0) goto <D.31210>; else goto <D.31211>;
  <D.31210>:
  monoeg_g_free (name);
  monoeg_g_free (sig);
  D.31212 = am->token;
  D.31213 = D.31212 & 16777215;
  m->table_idx = D.31213;
  D.31214 = am->token;
  return D.31214;
  <D.31211>:
  <D.31207>:
  <D.31203>:
  tmp = tmp->next;
  <D.21905>:
  if (tmp != 0B) goto <D.21904>; else goto <D.21906>;
  <D.21906>:
  am = monoeg_malloc0 (16);
  am->name = name;
  am->sig = sig;
  am->parent = mtype;
  D.31204 = am->parent;
  D.31215 = method_encode_signature (assembly, sig);
  D.31216 = mono_image_get_memberref_token (assembly, D.31204, name, D.31215);
  am->token = D.31216;
  D.31217 = assembly->array_methods;
  D.31218 = monoeg_g_list_prepend (D.31217, am);
  assembly->array_methods = D.31218;
  D.31212 = am->token;
  D.31213 = D.31212 & 16777215;
  m->table_idx = D.31213;
  D.31214 = am->token;
  return D.31214;
}


reflection_cc_to_file (int call_conv)
{
  int D.31220;
  int D.31221;

  D.31220 = call_conv & 3;
  switch (D.31220) <default: <D.21874>, case 0: <D.21871>, case 1: <D.21872>, case 2: <D.21873>>
  <D.21871>:
  <D.21872>:
  D.31221 = 0;
  return D.31221;
  <D.21873>:
  D.31221 = 5;
  return D.31221;
  <D.21874>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 3331);
  D.31221 = 0;
  return D.31221;
}


mono_image_get_sighelper_token (struct MonoDynamicImage * assembly, struct MonoReflectionSigHelper * helper)
{
  unsigned int D.31223;
  unsigned int idx.212;
  unsigned int D.31225;
  unsigned int D.31226;
  unsigned int D.31227;
  guint32 * D.31228;
  unsigned int D.31229;
  unsigned int D.31230;
  guint32 D.31231;
  guint32 idx;
  struct MonoDynamicTable * table;
  guint32 * values;

  table = &assembly->tables[17];
  D.31223 = table->next_idx;
  idx.212 = D.31223;
  D.31225 = idx.212 + 1;
  table->next_idx = D.31225;
  idx = idx.212;
  D.31226 = table->rows;
  D.31227 = D.31226 + 1;
  table->rows = D.31227;
  D.31226 = table->rows;
  alloc_table (table, D.31226);
  D.31228 = table->values;
  D.31229 = idx * 4;
  values = D.31228 + D.31229;
  D.31230 = mono_reflection_encode_sighelper (assembly, helper);
  *values = D.31230;
  D.31231 = idx;
  return D.31231;
}


mono_reflection_encode_sighelper (struct MonoDynamicImage * assembly, struct MonoReflectionSigHelper * helper)
{
  int D.31233;
  guint32 D.31236;
  unsigned int D.31237;
  _Bool D.31238;
  long int D.31239;
  long int D.31240;
  struct MonoArray * D.31243;
  unsigned int D.31247;
  unsigned int D.31248;
  unsigned int D.31249;
  unsigned int D.31252;
  unsigned int D.31255;
  unsigned int D.31258;
  unsigned int D.31260;
  unsigned char D.31263;
  struct MonoReflectionType * D.31264;
  struct MonoArray * D.31265;
  unsigned int D.31268;
  char * D.31271;
  struct MonoArray * D.31272;
  unsigned int D.31275;
  char * D.31278;
  char * D.31279;
  struct SigBuffer buf;
  guint32 nargs;
  guint32 size;
  guint32 i;
  guint32 idx;

  try
    {
      D.31233 = assembly->save;
      if (D.31233 == 0) goto <D.31234>; else goto <D.31235>;
      <D.31234>:
      D.31236 = 0;
      return D.31236;
      <D.31235>:
      D.31237 = helper->type;
      D.31238 = D.31237 != 2;
      D.31239 = (long int) D.31238;
      D.31240 = __builtin_expect (D.31239, 0);
      if (D.31240 != 0) goto <D.31241>; else goto <D.31242>;
      <D.31241>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 3254, "helper->type == 2");
      <D.31242>:
      D.31243 = helper->arguments;
      if (D.31243 != 0B) goto <D.31244>; else goto <D.31245>;
      <D.31244>:
      D.31243 = helper->arguments;
      nargs = mono_array_length (D.31243);
      goto <D.31246>;
      <D.31245>:
      nargs = 0;
      <D.31246>:
      D.31247 = nargs + 1;
      size = D.31247 * 10;
      sigbuffer_init (&buf, 32);
      D.31248 = helper->call_conv;
      D.31249 = D.31248 & 3;
      if (D.31249 == 3) goto <D.31250>; else goto <D.31251>;
      <D.31250>:
      helper->call_conv = 1;
      <D.31251>:
      D.31248 = helper->call_conv;
      D.31252 = D.31248 & 64;
      if (D.31252 != 0) goto <D.31253>; else goto <D.31254>;
      <D.31253>:
      D.31248 = helper->call_conv;
      D.31255 = D.31248 & 32;
      helper->call_conv = D.31255;
      <D.31254>:
      D.31248 = helper->call_conv;
      if (D.31248 == 0) goto <D.31256>; else goto <D.31257>;
      <D.31256>:
      D.31258 = helper->unmanaged_call_conv;
      idx = D.31258 + 4294967295;
      goto <D.31259>;
      <D.31257>:
      D.31248 = helper->call_conv;
      idx = D.31248 & 96;
      D.31248 = helper->call_conv;
      D.31260 = D.31248 & 2;
      if (D.31260 != 0) goto <D.31261>; else goto <D.31262>;
      <D.31261>:
      idx = idx + 5;
      <D.31262>:
      <D.31259>:
      D.31263 = (unsigned char) idx;
      sigbuffer_add_byte (&buf, D.31263);
      sigbuffer_add_value (&buf, nargs);
      D.31264 = helper->return_type;
      encode_reflection_type (assembly, D.31264, &buf);
      i = 0;
      goto <D.21859>;
      <D.21858>:
      {
        struct MonoArray * modreqs;
        struct MonoArray * modopts;
        struct MonoReflectionType * pt;

        modreqs = 0B;
        modopts = 0B;
        D.31265 = helper->modreqs;
        if (D.31265 != 0B) goto <D.31266>; else goto <D.31267>;
        <D.31266>:
        D.31265 = helper->modreqs;
        D.31268 = mono_array_length (D.31265);
        if (D.31268 > i) goto <D.31269>; else goto <D.31270>;
        <D.31269>:
        D.31265 = helper->modreqs;
        D.31271 = mono_array_addr_with_size (D.31265, 4, i);
        modreqs = MEM[(struct MonoArray * *)D.31271];
        <D.31270>:
        <D.31267>:
        D.31272 = helper->modopts;
        if (D.31272 != 0B) goto <D.31273>; else goto <D.31274>;
        <D.31273>:
        D.31272 = helper->modopts;
        D.31275 = mono_array_length (D.31272);
        if (D.31275 > i) goto <D.31276>; else goto <D.31277>;
        <D.31276>:
        D.31272 = helper->modopts;
        D.31278 = mono_array_addr_with_size (D.31272, 4, i);
        modopts = MEM[(struct MonoArray * *)D.31278];
        <D.31277>:
        <D.31274>:
        encode_custom_modifiers (assembly, modreqs, modopts, &buf);
        D.31243 = helper->arguments;
        D.31279 = mono_array_addr_with_size (D.31243, 4, i);
        pt = MEM[(struct MonoReflectionType * *)D.31279];
        encode_reflection_type (assembly, pt, &buf);
      }
      i = i + 1;
      <D.21859>:
      if (i < nargs) goto <D.21858>; else goto <D.21860>;
      <D.21860>:
      idx = sigbuffer_add_to_blob_cached (assembly, &buf);
      sigbuffer_free (&buf);
      D.31236 = idx;
      return D.31236;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


mono_image_get_field_on_inst_token (struct MonoDynamicImage * assembly, struct MonoReflectionFieldOnTypeBuilderInst * f)
{
  struct MonoGHashTable * D.31282;
  void * D.31283;
  guint32 D.31286;
  struct MonoObject * D.31287;
  struct MonoVTable * D.31288;
  struct MonoClass * D.31289;
  int D.31290;
  struct MonoReflectionGenericClass * D.31293;
  unsigned char D.31294;
  unsigned char D.31295;
  _Bool D.31296;
  long int D.31297;
  long int D.31298;
  struct MonoString * D.31301;
  struct MonoType * D.31302;
  unsigned int D.31303;
  int D.31305;
  struct MonoClass * D.31308;
  struct MonoImage * D.31309;
  struct MonoType * D.31310;
  const char * D.31311;
  void * token.213;
  guint32 token;
  struct MonoClass * klass;
  struct MonoGenericClass * gclass;
  struct MonoDynamicGenericClass * dgclass;
  struct MonoType * type;
  char * name;

  D.31282 = assembly->handleref_managed;
  D.31283 = mono_g_hash_table_lookup (D.31282, f);
  token = (guint32) D.31283;
  if (token != 0) goto <D.31284>; else goto <D.31285>;
  <D.31284>:
  D.31286 = token;
  return D.31286;
  <D.31285>:
  D.31287 = f->fb;
  D.31288 = D.31287->vtable;
  D.31289 = D.31288->klass;
  D.31290 = is_sre_field_builder (D.31289);
  if (D.31290 != 0) goto <D.31291>; else goto <D.31292>;
  <D.31291>:
  {
    struct MonoReflectionFieldBuilder * fb;

    fb = f->fb;
    D.31293 = f->inst;
    type = mono_reflection_type_get_handle (D.31293);
    klass = mono_class_from_mono_type (type);
    gclass = type->data.generic_class;
    D.31294 = BIT_FIELD_REF <*gclass, 8, 96>;
    D.31295 = D.31294 & 1;
    D.31296 = D.31295 == 0;
    D.31297 = (long int) D.31296;
    D.31298 = __builtin_expect (D.31297, 0);
    if (D.31298 != 0) goto <D.31299>; else goto <D.31300>;
    <D.31299>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 2786, "gclass->is_dynamic");
    <D.31300>:
    dgclass = gclass;
    D.31301 = fb->name;
    name = mono_string_to_utf8 (D.31301);
    D.31302 = &klass->byval_arg;
    D.31303 = field_encode_signature (assembly, fb);
    token = mono_image_get_memberref_token (assembly, D.31302, name, D.31303);
    monoeg_g_free (name);
  }
  goto <D.31304>;
  <D.31292>:
  D.31287 = f->fb;
  D.31288 = D.31287->vtable;
  D.31289 = D.31288->klass;
  D.31305 = is_sr_mono_field (D.31289);
  if (D.31305 != 0) goto <D.31306>; else goto <D.31307>;
  <D.31306>:
  {
    guint32 sig;
    struct MonoClassField * field;

    D.31287 = f->fb;
    field = MEM[(struct MonoReflectionField *)D.31287].field;
    D.31293 = f->inst;
    type = mono_reflection_type_get_handle (D.31293);
    klass = mono_class_from_mono_type (type);
    D.31308 = field->parent;
    D.31309 = D.31308->image;
    D.31310 = field->type;
    sig = fieldref_encode_signature (assembly, D.31309, D.31310);
    D.31302 = &klass->byval_arg;
    D.31311 = field->name;
    token = mono_image_get_memberref_token (assembly, D.31302, D.31311, sig);
  }
  goto <D.31312>;
  <D.31307>:
  {
    char * name;

    D.31287 = f->fb;
    D.31288 = D.31287->vtable;
    D.31289 = D.31288->klass;
    name = mono_type_get_full_name (D.31289);
    monoeg_g_log (0B, 4, "mono_image_get_field_on_inst_token: don\'t know how to handle %s", name);
    <D.21703>:
    goto <D.21703>;
  }
  <D.31312>:
  <D.31304>:
  D.31282 = assembly->handleref_managed;
  token.213 = (void *) token;
  mono_g_hash_table_insert (D.31282, f, token.213);
  D.31286 = token;
  return D.31286;
}


is_sre_field_builder (struct MonoClass * class)
{
  struct MonoClass * cached_class.214;
  gboolean D.31318;
  _Bool D.31319;
  int D.31320;
  int D.24845;
  int iftmp.215;
  int D.24841;
  const char[13] * D.31326;
  unsigned char D.31327;
  int D.31328;
  unsigned char D.31329;
  int D.31330;
  _Bool D.31331;
  _Bool D.31332;
  _Bool D.31333;
  const unsigned char * D.31336;
  unsigned char D.31337;
  int D.31338;
  const unsigned char * D.31339;
  unsigned char D.31340;
  int D.31341;
  _Bool D.31342;
  _Bool D.31343;
  const unsigned char * D.31346;
  unsigned char D.31347;
  int D.31348;
  const unsigned char * D.31349;
  unsigned char D.31350;
  int D.31351;
  _Bool D.31352;
  _Bool D.31353;
  const unsigned char * D.31356;
  unsigned char D.31357;
  int D.31358;
  const unsigned char * D.31359;
  unsigned char D.31360;
  int D.31361;
  const char * D.31363;
  int D.24854;
  int iftmp.216;
  int D.24850;
  const char[23] * D.31369;
  unsigned char D.31370;
  int D.31371;
  unsigned char D.31372;
  int D.31373;
  _Bool D.31374;
  _Bool D.31375;
  _Bool D.31376;
  const unsigned char * D.31379;
  unsigned char D.31380;
  int D.31381;
  const unsigned char * D.31382;
  unsigned char D.31383;
  int D.31384;
  _Bool D.31385;
  _Bool D.31386;
  const unsigned char * D.31389;
  unsigned char D.31390;
  int D.31391;
  const unsigned char * D.31392;
  unsigned char D.31393;
  int D.31394;
  _Bool D.31395;
  _Bool D.31396;
  const unsigned char * D.31399;
  unsigned char D.31400;
  int D.31401;
  const unsigned char * D.31402;
  unsigned char D.31403;
  int D.31404;
  const char * D.31406;

  {
    static struct MonoClass * cached_class;

    cached_class.214 = cached_class;
    if (cached_class.214 != 0B) goto <D.31316>; else goto <D.31317>;
    <D.31316>:
    cached_class.214 = cached_class;
    D.31319 = cached_class.214 == class;
    D.31318 = (gboolean) D.31319;
    return D.31318;
    <D.31317>:
    D.31320 = is_corlib_type (class);
    if (D.31320 != 0) goto <D.31321>; else goto <D.31322>;
    <D.31321>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 12;
      if (__s1_len <= 3) goto <D.31324>; else goto <D.31325>;
      <D.31324>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.31326 = "FieldBuilder";
        D.31327 = MEM[(const unsigned char *)D.31326];
        D.31328 = (int) D.31327;
        D.31329 = *__s2;
        D.31330 = (int) D.31329;
        __result = D.31328 - D.31330;
        {
          D.31331 = __s1_len != 0;
          D.31332 = __result == 0;
          D.31333 = D.31331 & D.31332;
          if (D.31333 != 0) goto <D.31334>; else goto <D.31335>;
          <D.31334>:
          D.31336 = &MEM[(void *)"FieldBuilder" + 1B];
          D.31337 = *D.31336;
          D.31338 = (int) D.31337;
          D.31339 = __s2 + 1;
          D.31340 = *D.31339;
          D.31341 = (int) D.31340;
          __result = D.31338 - D.31341;
          D.31342 = __s1_len > 1;
          D.31332 = __result == 0;
          D.31343 = D.31342 & D.31332;
          if (D.31343 != 0) goto <D.31344>; else goto <D.31345>;
          <D.31344>:
          D.31346 = &MEM[(void *)"FieldBuilder" + 2B];
          D.31347 = *D.31346;
          D.31348 = (int) D.31347;
          D.31349 = __s2 + 2;
          D.31350 = *D.31349;
          D.31351 = (int) D.31350;
          __result = D.31348 - D.31351;
          D.31352 = __s1_len > 2;
          D.31332 = __result == 0;
          D.31353 = D.31352 & D.31332;
          if (D.31353 != 0) goto <D.31354>; else goto <D.31355>;
          <D.31354>:
          D.31356 = &MEM[(void *)"FieldBuilder" + 3B];
          D.31357 = *D.31356;
          D.31358 = (int) D.31357;
          D.31359 = __s2 + 3;
          D.31360 = *D.31359;
          D.31361 = (int) D.31360;
          __result = D.31358 - D.31361;
          <D.31355>:
          <D.31345>:
          <D.31335>:
        }
        D.24841 = __result;
      }
      iftmp.215 = D.24841;
      goto <D.31362>;
      <D.31325>:
      D.31363 = class->name;
      iftmp.215 = __builtin_strcmp ("FieldBuilder", D.31363);
      <D.31362>:
      D.24845 = iftmp.215;
    }
    if (D.24845 == 0) goto <D.31364>; else goto <D.31365>;
    <D.31364>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 22;
      if (__s1_len <= 3) goto <D.31367>; else goto <D.31368>;
      <D.31367>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.31369 = "System.Reflection.Emit";
        D.31370 = MEM[(const unsigned char *)D.31369];
        D.31371 = (int) D.31370;
        D.31372 = *__s2;
        D.31373 = (int) D.31372;
        __result = D.31371 - D.31373;
        {
          D.31374 = __s1_len != 0;
          D.31375 = __result == 0;
          D.31376 = D.31374 & D.31375;
          if (D.31376 != 0) goto <D.31377>; else goto <D.31378>;
          <D.31377>:
          D.31379 = &MEM[(void *)"System.Reflection.Emit" + 1B];
          D.31380 = *D.31379;
          D.31381 = (int) D.31380;
          D.31382 = __s2 + 1;
          D.31383 = *D.31382;
          D.31384 = (int) D.31383;
          __result = D.31381 - D.31384;
          D.31385 = __s1_len > 1;
          D.31375 = __result == 0;
          D.31386 = D.31385 & D.31375;
          if (D.31386 != 0) goto <D.31387>; else goto <D.31388>;
          <D.31387>:
          D.31389 = &MEM[(void *)"System.Reflection.Emit" + 2B];
          D.31390 = *D.31389;
          D.31391 = (int) D.31390;
          D.31392 = __s2 + 2;
          D.31393 = *D.31392;
          D.31394 = (int) D.31393;
          __result = D.31391 - D.31394;
          D.31395 = __s1_len > 2;
          D.31375 = __result == 0;
          D.31396 = D.31395 & D.31375;
          if (D.31396 != 0) goto <D.31397>; else goto <D.31398>;
          <D.31397>:
          D.31399 = &MEM[(void *)"System.Reflection.Emit" + 3B];
          D.31400 = *D.31399;
          D.31401 = (int) D.31400;
          D.31402 = __s2 + 3;
          D.31403 = *D.31402;
          D.31404 = (int) D.31403;
          __result = D.31401 - D.31404;
          <D.31398>:
          <D.31388>:
          <D.31378>:
        }
        D.24850 = __result;
      }
      iftmp.216 = D.24850;
      goto <D.31405>;
      <D.31368>:
      D.31406 = class->name_space;
      iftmp.216 = __builtin_strcmp ("System.Reflection.Emit", D.31406);
      <D.31405>:
      D.24854 = iftmp.216;
    }
    if (D.24854 == 0) goto <D.31407>; else goto <D.31408>;
    <D.31407>:
    cached_class = class;
    D.31318 = 1;
    return D.31318;
    <D.31408>:
    <D.31365>:
    <D.31322>:
    D.31318 = 0;
    return D.31318;
  }
}


is_sr_mono_field (struct MonoClass * class)
{
  struct MonoClass * cached_class.217;
  gboolean D.31413;
  _Bool D.31414;
  int D.31415;
  int D.25003;
  int iftmp.218;
  int D.24999;
  const char[10] * D.31421;
  unsigned char D.31422;
  int D.31423;
  unsigned char D.31424;
  int D.31425;
  _Bool D.31426;
  _Bool D.31427;
  _Bool D.31428;
  const unsigned char * D.31431;
  unsigned char D.31432;
  int D.31433;
  const unsigned char * D.31434;
  unsigned char D.31435;
  int D.31436;
  _Bool D.31437;
  _Bool D.31438;
  const unsigned char * D.31441;
  unsigned char D.31442;
  int D.31443;
  const unsigned char * D.31444;
  unsigned char D.31445;
  int D.31446;
  _Bool D.31447;
  _Bool D.31448;
  const unsigned char * D.31451;
  unsigned char D.31452;
  int D.31453;
  const unsigned char * D.31454;
  unsigned char D.31455;
  int D.31456;
  const char * D.31458;
  int D.25012;
  int iftmp.219;
  int D.25008;
  const char[18] * D.31464;
  unsigned char D.31465;
  int D.31466;
  unsigned char D.31467;
  int D.31468;
  _Bool D.31469;
  _Bool D.31470;
  _Bool D.31471;
  const unsigned char * D.31474;
  unsigned char D.31475;
  int D.31476;
  const unsigned char * D.31477;
  unsigned char D.31478;
  int D.31479;
  _Bool D.31480;
  _Bool D.31481;
  const unsigned char * D.31484;
  unsigned char D.31485;
  int D.31486;
  const unsigned char * D.31487;
  unsigned char D.31488;
  int D.31489;
  _Bool D.31490;
  _Bool D.31491;
  const unsigned char * D.31494;
  unsigned char D.31495;
  int D.31496;
  const unsigned char * D.31497;
  unsigned char D.31498;
  int D.31499;
  const char * D.31501;

  {
    static struct MonoClass * cached_class;

    cached_class.217 = cached_class;
    if (cached_class.217 != 0B) goto <D.31411>; else goto <D.31412>;
    <D.31411>:
    cached_class.217 = cached_class;
    D.31414 = cached_class.217 == class;
    D.31413 = (gboolean) D.31414;
    return D.31413;
    <D.31412>:
    D.31415 = is_corlib_type (class);
    if (D.31415 != 0) goto <D.31416>; else goto <D.31417>;
    <D.31416>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 9;
      if (__s1_len <= 3) goto <D.31419>; else goto <D.31420>;
      <D.31419>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.31421 = "MonoField";
        D.31422 = MEM[(const unsigned char *)D.31421];
        D.31423 = (int) D.31422;
        D.31424 = *__s2;
        D.31425 = (int) D.31424;
        __result = D.31423 - D.31425;
        {
          D.31426 = __s1_len != 0;
          D.31427 = __result == 0;
          D.31428 = D.31426 & D.31427;
          if (D.31428 != 0) goto <D.31429>; else goto <D.31430>;
          <D.31429>:
          D.31431 = &MEM[(void *)"MonoField" + 1B];
          D.31432 = *D.31431;
          D.31433 = (int) D.31432;
          D.31434 = __s2 + 1;
          D.31435 = *D.31434;
          D.31436 = (int) D.31435;
          __result = D.31433 - D.31436;
          D.31437 = __s1_len > 1;
          D.31427 = __result == 0;
          D.31438 = D.31437 & D.31427;
          if (D.31438 != 0) goto <D.31439>; else goto <D.31440>;
          <D.31439>:
          D.31441 = &MEM[(void *)"MonoField" + 2B];
          D.31442 = *D.31441;
          D.31443 = (int) D.31442;
          D.31444 = __s2 + 2;
          D.31445 = *D.31444;
          D.31446 = (int) D.31445;
          __result = D.31443 - D.31446;
          D.31447 = __s1_len > 2;
          D.31427 = __result == 0;
          D.31448 = D.31447 & D.31427;
          if (D.31448 != 0) goto <D.31449>; else goto <D.31450>;
          <D.31449>:
          D.31451 = &MEM[(void *)"MonoField" + 3B];
          D.31452 = *D.31451;
          D.31453 = (int) D.31452;
          D.31454 = __s2 + 3;
          D.31455 = *D.31454;
          D.31456 = (int) D.31455;
          __result = D.31453 - D.31456;
          <D.31450>:
          <D.31440>:
          <D.31430>:
        }
        D.24999 = __result;
      }
      iftmp.218 = D.24999;
      goto <D.31457>;
      <D.31420>:
      D.31458 = class->name;
      iftmp.218 = __builtin_strcmp ("MonoField", D.31458);
      <D.31457>:
      D.25003 = iftmp.218;
    }
    if (D.25003 == 0) goto <D.31459>; else goto <D.31460>;
    <D.31459>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 17;
      if (__s1_len <= 3) goto <D.31462>; else goto <D.31463>;
      <D.31462>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.31464 = "System.Reflection";
        D.31465 = MEM[(const unsigned char *)D.31464];
        D.31466 = (int) D.31465;
        D.31467 = *__s2;
        D.31468 = (int) D.31467;
        __result = D.31466 - D.31468;
        {
          D.31469 = __s1_len != 0;
          D.31470 = __result == 0;
          D.31471 = D.31469 & D.31470;
          if (D.31471 != 0) goto <D.31472>; else goto <D.31473>;
          <D.31472>:
          D.31474 = &MEM[(void *)"System.Reflection" + 1B];
          D.31475 = *D.31474;
          D.31476 = (int) D.31475;
          D.31477 = __s2 + 1;
          D.31478 = *D.31477;
          D.31479 = (int) D.31478;
          __result = D.31476 - D.31479;
          D.31480 = __s1_len > 1;
          D.31470 = __result == 0;
          D.31481 = D.31480 & D.31470;
          if (D.31481 != 0) goto <D.31482>; else goto <D.31483>;
          <D.31482>:
          D.31484 = &MEM[(void *)"System.Reflection" + 2B];
          D.31485 = *D.31484;
          D.31486 = (int) D.31485;
          D.31487 = __s2 + 2;
          D.31488 = *D.31487;
          D.31489 = (int) D.31488;
          __result = D.31486 - D.31489;
          D.31490 = __s1_len > 2;
          D.31470 = __result == 0;
          D.31491 = D.31490 & D.31470;
          if (D.31491 != 0) goto <D.31492>; else goto <D.31493>;
          <D.31492>:
          D.31494 = &MEM[(void *)"System.Reflection" + 3B];
          D.31495 = *D.31494;
          D.31496 = (int) D.31495;
          D.31497 = __s2 + 3;
          D.31498 = *D.31497;
          D.31499 = (int) D.31498;
          __result = D.31496 - D.31499;
          <D.31493>:
          <D.31483>:
          <D.31473>:
        }
        D.25008 = __result;
      }
      iftmp.219 = D.25008;
      goto <D.31500>;
      <D.31463>:
      D.31501 = class->name_space;
      iftmp.219 = __builtin_strcmp ("System.Reflection", D.31501);
      <D.31500>:
      D.25012 = iftmp.219;
    }
    if (D.25012 == 0) goto <D.31502>; else goto <D.31503>;
    <D.31502>:
    cached_class = class;
    D.31413 = 1;
    return D.31413;
    <D.31503>:
    <D.31460>:
    <D.31417>:
    D.31413 = 0;
    return D.31413;
  }
}


mono_image_get_ctor_on_inst_token (struct MonoDynamicImage * assembly, struct MonoReflectionCtorOnTypeBuilderInst * c, gboolean create_methodspec)
{
  struct MonoGHashTable * D.31505;
  void * D.31506;
  guint32 D.31509;
  struct MonoObject * D.31510;
  struct MonoVTable * D.31511;
  struct MonoClass * D.31512;
  int D.31513;
  struct MonoReflectionGenericClass * D.31516;
  unsigned char D.31517;
  unsigned char D.31518;
  _Bool D.31519;
  long int D.31520;
  long int D.31521;
  struct MonoString * D.31524;
  struct MonoType * D.31525;
  int D.31527;
  struct MonoMethodSignature * D.31530;
  const char * D.31531;
  void * token.220;
  guint32 sig;
  guint32 token;
  struct MonoClass * klass;
  struct MonoGenericClass * gclass;
  struct MonoType * type;

  D.31505 = assembly->handleref_managed;
  D.31506 = mono_g_hash_table_lookup (D.31505, c);
  token = (guint32) D.31506;
  if (token != 0) goto <D.31507>; else goto <D.31508>;
  <D.31507>:
  D.31509 = token;
  return D.31509;
  <D.31508>:
  D.31510 = c->cb;
  D.31511 = D.31510->vtable;
  D.31512 = D.31511->klass;
  D.31513 = is_sre_ctor_builder (D.31512);
  if (D.31513 != 0) goto <D.31514>; else goto <D.31515>;
  <D.31514>:
  {
    struct MonoReflectionCtorBuilder * cb;
    struct MonoDynamicGenericClass * dgclass;
    struct ReflectionMethodBuilder rmb;
    char * name;

    try
      {
        cb = c->cb;
        D.31516 = c->inst;
        type = mono_reflection_type_get_handle (D.31516);
        klass = mono_class_from_mono_type (type);
        gclass = type->data.generic_class;
        D.31517 = BIT_FIELD_REF <*gclass, 8, 96>;
        D.31518 = D.31517 & 1;
        D.31519 = D.31518 == 0;
        D.31520 = (long int) D.31519;
        D.31521 = __builtin_expect (D.31520, 0);
        if (D.31521 != 0) goto <D.31522>; else goto <D.31523>;
        <D.31522>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 2835, "gclass->is_dynamic");
        <D.31523>:
        dgclass = gclass;
        reflection_methodbuilder_from_ctor_builder (&rmb, cb);
        D.31524 = rmb.name;
        name = mono_string_to_utf8 (D.31524);
        sig = method_builder_encode_signature (assembly, &rmb);
        D.31525 = &klass->byval_arg;
        token = mono_image_get_memberref_token (assembly, D.31525, name, sig);
        monoeg_g_free (name);
      }
    finally
      {
        rmb = {CLOBBER};
      }
  }
  goto <D.31526>;
  <D.31515>:
  D.31510 = c->cb;
  D.31511 = D.31510->vtable;
  D.31512 = D.31511->klass;
  D.31527 = is_sr_mono_cmethod (D.31512);
  if (D.31527 != 0) goto <D.31528>; else goto <D.31529>;
  <D.31528>:
  {
    struct MonoMethod * mm;

    D.31510 = c->cb;
    mm = MEM[(struct MonoReflectionMethod *)D.31510].method;
    D.31516 = c->inst;
    type = mono_reflection_type_get_handle (D.31516);
    klass = mono_class_from_mono_type (type);
    D.31530 = mono_method_signature (mm);
    sig = method_encode_signature (assembly, D.31530);
    D.31525 = &klass->byval_arg;
    D.31531 = mm->name;
    token = mono_image_get_memberref_token (assembly, D.31525, D.31531, sig);
  }
  goto <D.31532>;
  <D.31529>:
  {
    char * name;

    D.31510 = c->cb;
    D.31511 = D.31510->vtable;
    D.31512 = D.31511->klass;
    name = mono_type_get_full_name (D.31512);
    monoeg_g_log (0B, 4, "mono_image_get_method_on_inst_token: don\'t know how to handle %s", name);
    <D.21720>:
    goto <D.21720>;
  }
  <D.31532>:
  <D.31526>:
  D.31505 = assembly->handleref_managed;
  token.220 = (void *) token;
  mono_g_hash_table_insert (D.31505, c, token.220);
  D.31509 = token;
  return D.31509;
}


is_sre_ctor_builder (struct MonoClass * class)
{
  struct MonoClass * cached_class.221;
  gboolean D.31538;
  _Bool D.31539;
  int D.31540;
  int D.24823;
  int iftmp.222;
  int D.24819;
  const char[19] * D.31546;
  unsigned char D.31547;
  int D.31548;
  unsigned char D.31549;
  int D.31550;
  _Bool D.31551;
  _Bool D.31552;
  _Bool D.31553;
  const unsigned char * D.31556;
  unsigned char D.31557;
  int D.31558;
  const unsigned char * D.31559;
  unsigned char D.31560;
  int D.31561;
  _Bool D.31562;
  _Bool D.31563;
  const unsigned char * D.31566;
  unsigned char D.31567;
  int D.31568;
  const unsigned char * D.31569;
  unsigned char D.31570;
  int D.31571;
  _Bool D.31572;
  _Bool D.31573;
  const unsigned char * D.31576;
  unsigned char D.31577;
  int D.31578;
  const unsigned char * D.31579;
  unsigned char D.31580;
  int D.31581;
  const char * D.31583;
  int D.24832;
  int iftmp.223;
  int D.24828;
  const char[23] * D.31589;
  unsigned char D.31590;
  int D.31591;
  unsigned char D.31592;
  int D.31593;
  _Bool D.31594;
  _Bool D.31595;
  _Bool D.31596;
  const unsigned char * D.31599;
  unsigned char D.31600;
  int D.31601;
  const unsigned char * D.31602;
  unsigned char D.31603;
  int D.31604;
  _Bool D.31605;
  _Bool D.31606;
  const unsigned char * D.31609;
  unsigned char D.31610;
  int D.31611;
  const unsigned char * D.31612;
  unsigned char D.31613;
  int D.31614;
  _Bool D.31615;
  _Bool D.31616;
  const unsigned char * D.31619;
  unsigned char D.31620;
  int D.31621;
  const unsigned char * D.31622;
  unsigned char D.31623;
  int D.31624;
  const char * D.31626;

  {
    static struct MonoClass * cached_class;

    cached_class.221 = cached_class;
    if (cached_class.221 != 0B) goto <D.31536>; else goto <D.31537>;
    <D.31536>:
    cached_class.221 = cached_class;
    D.31539 = cached_class.221 == class;
    D.31538 = (gboolean) D.31539;
    return D.31538;
    <D.31537>:
    D.31540 = is_corlib_type (class);
    if (D.31540 != 0) goto <D.31541>; else goto <D.31542>;
    <D.31541>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 18;
      if (__s1_len <= 3) goto <D.31544>; else goto <D.31545>;
      <D.31544>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.31546 = "ConstructorBuilder";
        D.31547 = MEM[(const unsigned char *)D.31546];
        D.31548 = (int) D.31547;
        D.31549 = *__s2;
        D.31550 = (int) D.31549;
        __result = D.31548 - D.31550;
        {
          D.31551 = __s1_len != 0;
          D.31552 = __result == 0;
          D.31553 = D.31551 & D.31552;
          if (D.31553 != 0) goto <D.31554>; else goto <D.31555>;
          <D.31554>:
          D.31556 = &MEM[(void *)"ConstructorBuilder" + 1B];
          D.31557 = *D.31556;
          D.31558 = (int) D.31557;
          D.31559 = __s2 + 1;
          D.31560 = *D.31559;
          D.31561 = (int) D.31560;
          __result = D.31558 - D.31561;
          D.31562 = __s1_len > 1;
          D.31552 = __result == 0;
          D.31563 = D.31562 & D.31552;
          if (D.31563 != 0) goto <D.31564>; else goto <D.31565>;
          <D.31564>:
          D.31566 = &MEM[(void *)"ConstructorBuilder" + 2B];
          D.31567 = *D.31566;
          D.31568 = (int) D.31567;
          D.31569 = __s2 + 2;
          D.31570 = *D.31569;
          D.31571 = (int) D.31570;
          __result = D.31568 - D.31571;
          D.31572 = __s1_len > 2;
          D.31552 = __result == 0;
          D.31573 = D.31572 & D.31552;
          if (D.31573 != 0) goto <D.31574>; else goto <D.31575>;
          <D.31574>:
          D.31576 = &MEM[(void *)"ConstructorBuilder" + 3B];
          D.31577 = *D.31576;
          D.31578 = (int) D.31577;
          D.31579 = __s2 + 3;
          D.31580 = *D.31579;
          D.31581 = (int) D.31580;
          __result = D.31578 - D.31581;
          <D.31575>:
          <D.31565>:
          <D.31555>:
        }
        D.24819 = __result;
      }
      iftmp.222 = D.24819;
      goto <D.31582>;
      <D.31545>:
      D.31583 = class->name;
      iftmp.222 = __builtin_strcmp ("ConstructorBuilder", D.31583);
      <D.31582>:
      D.24823 = iftmp.222;
    }
    if (D.24823 == 0) goto <D.31584>; else goto <D.31585>;
    <D.31584>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 22;
      if (__s1_len <= 3) goto <D.31587>; else goto <D.31588>;
      <D.31587>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.31589 = "System.Reflection.Emit";
        D.31590 = MEM[(const unsigned char *)D.31589];
        D.31591 = (int) D.31590;
        D.31592 = *__s2;
        D.31593 = (int) D.31592;
        __result = D.31591 - D.31593;
        {
          D.31594 = __s1_len != 0;
          D.31595 = __result == 0;
          D.31596 = D.31594 & D.31595;
          if (D.31596 != 0) goto <D.31597>; else goto <D.31598>;
          <D.31597>:
          D.31599 = &MEM[(void *)"System.Reflection.Emit" + 1B];
          D.31600 = *D.31599;
          D.31601 = (int) D.31600;
          D.31602 = __s2 + 1;
          D.31603 = *D.31602;
          D.31604 = (int) D.31603;
          __result = D.31601 - D.31604;
          D.31605 = __s1_len > 1;
          D.31595 = __result == 0;
          D.31606 = D.31605 & D.31595;
          if (D.31606 != 0) goto <D.31607>; else goto <D.31608>;
          <D.31607>:
          D.31609 = &MEM[(void *)"System.Reflection.Emit" + 2B];
          D.31610 = *D.31609;
          D.31611 = (int) D.31610;
          D.31612 = __s2 + 2;
          D.31613 = *D.31612;
          D.31614 = (int) D.31613;
          __result = D.31611 - D.31614;
          D.31615 = __s1_len > 2;
          D.31595 = __result == 0;
          D.31616 = D.31615 & D.31595;
          if (D.31616 != 0) goto <D.31617>; else goto <D.31618>;
          <D.31617>:
          D.31619 = &MEM[(void *)"System.Reflection.Emit" + 3B];
          D.31620 = *D.31619;
          D.31621 = (int) D.31620;
          D.31622 = __s2 + 3;
          D.31623 = *D.31622;
          D.31624 = (int) D.31623;
          __result = D.31621 - D.31624;
          <D.31618>:
          <D.31608>:
          <D.31598>:
        }
        D.24828 = __result;
      }
      iftmp.223 = D.24828;
      goto <D.31625>;
      <D.31588>:
      D.31626 = class->name_space;
      iftmp.223 = __builtin_strcmp ("System.Reflection.Emit", D.31626);
      <D.31625>:
      D.24832 = iftmp.223;
    }
    if (D.24832 == 0) goto <D.31627>; else goto <D.31628>;
    <D.31627>:
    cached_class = class;
    D.31538 = 1;
    return D.31538;
    <D.31628>:
    <D.31585>:
    <D.31542>:
    D.31538 = 0;
    return D.31538;
  }
}


is_sr_mono_cmethod (struct MonoClass * class)
{
  struct MonoClass * cached_class.224;
  gboolean D.31633;
  _Bool D.31634;
  int D.31635;
  int D.25069;
  int iftmp.225;
  int D.25065;
  const char[12] * D.31641;
  unsigned char D.31642;
  int D.31643;
  unsigned char D.31644;
  int D.31645;
  _Bool D.31646;
  _Bool D.31647;
  _Bool D.31648;
  const unsigned char * D.31651;
  unsigned char D.31652;
  int D.31653;
  const unsigned char * D.31654;
  unsigned char D.31655;
  int D.31656;
  _Bool D.31657;
  _Bool D.31658;
  const unsigned char * D.31661;
  unsigned char D.31662;
  int D.31663;
  const unsigned char * D.31664;
  unsigned char D.31665;
  int D.31666;
  _Bool D.31667;
  _Bool D.31668;
  const unsigned char * D.31671;
  unsigned char D.31672;
  int D.31673;
  const unsigned char * D.31674;
  unsigned char D.31675;
  int D.31676;
  const char * D.31678;
  int D.25078;
  int iftmp.226;
  int D.25074;
  const char[18] * D.31684;
  unsigned char D.31685;
  int D.31686;
  unsigned char D.31687;
  int D.31688;
  _Bool D.31689;
  _Bool D.31690;
  _Bool D.31691;
  const unsigned char * D.31694;
  unsigned char D.31695;
  int D.31696;
  const unsigned char * D.31697;
  unsigned char D.31698;
  int D.31699;
  _Bool D.31700;
  _Bool D.31701;
  const unsigned char * D.31704;
  unsigned char D.31705;
  int D.31706;
  const unsigned char * D.31707;
  unsigned char D.31708;
  int D.31709;
  _Bool D.31710;
  _Bool D.31711;
  const unsigned char * D.31714;
  unsigned char D.31715;
  int D.31716;
  const unsigned char * D.31717;
  unsigned char D.31718;
  int D.31719;
  const char * D.31721;

  {
    static struct MonoClass * cached_class;

    cached_class.224 = cached_class;
    if (cached_class.224 != 0B) goto <D.31631>; else goto <D.31632>;
    <D.31631>:
    cached_class.224 = cached_class;
    D.31634 = cached_class.224 == class;
    D.31633 = (gboolean) D.31634;
    return D.31633;
    <D.31632>:
    D.31635 = is_corlib_type (class);
    if (D.31635 != 0) goto <D.31636>; else goto <D.31637>;
    <D.31636>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 11;
      if (__s1_len <= 3) goto <D.31639>; else goto <D.31640>;
      <D.31639>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.31641 = "MonoCMethod";
        D.31642 = MEM[(const unsigned char *)D.31641];
        D.31643 = (int) D.31642;
        D.31644 = *__s2;
        D.31645 = (int) D.31644;
        __result = D.31643 - D.31645;
        {
          D.31646 = __s1_len != 0;
          D.31647 = __result == 0;
          D.31648 = D.31646 & D.31647;
          if (D.31648 != 0) goto <D.31649>; else goto <D.31650>;
          <D.31649>:
          D.31651 = &MEM[(void *)"MonoCMethod" + 1B];
          D.31652 = *D.31651;
          D.31653 = (int) D.31652;
          D.31654 = __s2 + 1;
          D.31655 = *D.31654;
          D.31656 = (int) D.31655;
          __result = D.31653 - D.31656;
          D.31657 = __s1_len > 1;
          D.31647 = __result == 0;
          D.31658 = D.31657 & D.31647;
          if (D.31658 != 0) goto <D.31659>; else goto <D.31660>;
          <D.31659>:
          D.31661 = &MEM[(void *)"MonoCMethod" + 2B];
          D.31662 = *D.31661;
          D.31663 = (int) D.31662;
          D.31664 = __s2 + 2;
          D.31665 = *D.31664;
          D.31666 = (int) D.31665;
          __result = D.31663 - D.31666;
          D.31667 = __s1_len > 2;
          D.31647 = __result == 0;
          D.31668 = D.31667 & D.31647;
          if (D.31668 != 0) goto <D.31669>; else goto <D.31670>;
          <D.31669>:
          D.31671 = &MEM[(void *)"MonoCMethod" + 3B];
          D.31672 = *D.31671;
          D.31673 = (int) D.31672;
          D.31674 = __s2 + 3;
          D.31675 = *D.31674;
          D.31676 = (int) D.31675;
          __result = D.31673 - D.31676;
          <D.31670>:
          <D.31660>:
          <D.31650>:
        }
        D.25065 = __result;
      }
      iftmp.225 = D.25065;
      goto <D.31677>;
      <D.31640>:
      D.31678 = class->name;
      iftmp.225 = __builtin_strcmp ("MonoCMethod", D.31678);
      <D.31677>:
      D.25069 = iftmp.225;
    }
    if (D.25069 == 0) goto <D.31679>; else goto <D.31680>;
    <D.31679>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 17;
      if (__s1_len <= 3) goto <D.31682>; else goto <D.31683>;
      <D.31682>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.31684 = "System.Reflection";
        D.31685 = MEM[(const unsigned char *)D.31684];
        D.31686 = (int) D.31685;
        D.31687 = *__s2;
        D.31688 = (int) D.31687;
        __result = D.31686 - D.31688;
        {
          D.31689 = __s1_len != 0;
          D.31690 = __result == 0;
          D.31691 = D.31689 & D.31690;
          if (D.31691 != 0) goto <D.31692>; else goto <D.31693>;
          <D.31692>:
          D.31694 = &MEM[(void *)"System.Reflection" + 1B];
          D.31695 = *D.31694;
          D.31696 = (int) D.31695;
          D.31697 = __s2 + 1;
          D.31698 = *D.31697;
          D.31699 = (int) D.31698;
          __result = D.31696 - D.31699;
          D.31700 = __s1_len > 1;
          D.31690 = __result == 0;
          D.31701 = D.31700 & D.31690;
          if (D.31701 != 0) goto <D.31702>; else goto <D.31703>;
          <D.31702>:
          D.31704 = &MEM[(void *)"System.Reflection" + 2B];
          D.31705 = *D.31704;
          D.31706 = (int) D.31705;
          D.31707 = __s2 + 2;
          D.31708 = *D.31707;
          D.31709 = (int) D.31708;
          __result = D.31706 - D.31709;
          D.31710 = __s1_len > 2;
          D.31690 = __result == 0;
          D.31711 = D.31710 & D.31690;
          if (D.31711 != 0) goto <D.31712>; else goto <D.31713>;
          <D.31712>:
          D.31714 = &MEM[(void *)"System.Reflection" + 3B];
          D.31715 = *D.31714;
          D.31716 = (int) D.31715;
          D.31717 = __s2 + 3;
          D.31718 = *D.31717;
          D.31719 = (int) D.31718;
          __result = D.31716 - D.31719;
          <D.31713>:
          <D.31703>:
          <D.31693>:
        }
        D.25074 = __result;
      }
      iftmp.226 = D.25074;
      goto <D.31720>;
      <D.31683>:
      D.31721 = class->name_space;
      iftmp.226 = __builtin_strcmp ("System.Reflection", D.31721);
      <D.31720>:
      D.25078 = iftmp.226;
    }
    if (D.25078 == 0) goto <D.31722>; else goto <D.31723>;
    <D.31722>:
    cached_class = class;
    D.31633 = 1;
    return D.31633;
    <D.31723>:
    <D.31680>:
    <D.31637>:
    D.31633 = 0;
    return D.31633;
  }
}


mono_image_get_method_on_inst_token (struct MonoDynamicImage * assembly, struct MonoReflectionMethodOnTypeBuilderInst * m, gboolean create_methodspec)
{
  struct MonoArray * D.31725;
  guint32 D.31731;
  struct MonoGHashTable * D.31732;
  void * D.31733;
  struct MonoObject * D.31736;
  struct MonoVTable * D.31737;
  struct MonoClass * D.31738;
  int D.31739;
  struct MonoReflectionType * D.31742;
  unsigned char D.31743;
  unsigned char D.31744;
  _Bool D.31745;
  long int D.31746;
  long int D.31747;
  struct MonoString * D.31750;
  struct MonoType * D.31751;
  int D.31753;
  struct MonoMethodSignature * D.31756;
  const char * D.31757;
  void * token.227;
  guint32 sig;
  guint32 token;
  struct MonoType * type;
  struct MonoClass * klass;

  token = 0;
  D.31725 = m->method_args;
  if (D.31725 != 0B) goto <D.31726>; else goto <D.31727>;
  <D.31726>:
  {
    struct MonoMethod * inflated;

    inflated = mono_reflection_method_on_tb_inst_get_handle (m);
    if (create_methodspec != 0) goto <D.31728>; else goto <D.31729>;
    <D.31728>:
    token = mono_image_get_methodspec_token (assembly, inflated);
    goto <D.31730>;
    <D.31729>:
    token = mono_image_get_inflated_method_token (assembly, inflated);
    <D.31730>:
    D.31731 = token;
    return D.31731;
  }
  <D.31727>:
  D.31732 = assembly->handleref_managed;
  D.31733 = mono_g_hash_table_lookup (D.31732, m);
  token = (guint32) D.31733;
  if (token != 0) goto <D.31734>; else goto <D.31735>;
  <D.31734>:
  D.31731 = token;
  return D.31731;
  <D.31735>:
  D.31736 = m->mb;
  D.31737 = D.31736->vtable;
  D.31738 = D.31737->klass;
  D.31739 = is_sre_method_builder (D.31738);
  if (D.31739 != 0) goto <D.31740>; else goto <D.31741>;
  <D.31740>:
  {
    struct MonoReflectionMethodBuilder * mb;
    struct MonoGenericClass * gclass;
    struct ReflectionMethodBuilder rmb;
    char * name;

    try
      {
        mb = m->mb;
        D.31742 = m->inst;
        type = mono_reflection_type_get_handle (D.31742);
        klass = mono_class_from_mono_type (type);
        gclass = type->data.generic_class;
        D.31743 = BIT_FIELD_REF <*gclass, 8, 96>;
        D.31744 = D.31743 & 1;
        D.31745 = D.31744 == 0;
        D.31746 = (long int) D.31745;
        D.31747 = __builtin_expect (D.31746, 0);
        if (D.31747 != 0) goto <D.31748>; else goto <D.31749>;
        <D.31748>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 2934, "gclass->is_dynamic");
        <D.31749>:
        reflection_methodbuilder_from_method_builder (&rmb, mb);
        D.31750 = rmb.name;
        name = mono_string_to_utf8 (D.31750);
        sig = method_builder_encode_signature (assembly, &rmb);
        D.31751 = &klass->byval_arg;
        token = mono_image_get_memberref_token (assembly, D.31751, name, sig);
        monoeg_g_free (name);
      }
    finally
      {
        rmb = {CLOBBER};
      }
  }
  goto <D.31752>;
  <D.31741>:
  D.31736 = m->mb;
  D.31737 = D.31736->vtable;
  D.31738 = D.31737->klass;
  D.31753 = is_sr_mono_method (D.31738);
  if (D.31753 != 0) goto <D.31754>; else goto <D.31755>;
  <D.31754>:
  {
    struct MonoMethod * mm;

    D.31736 = m->mb;
    mm = MEM[(struct MonoReflectionMethod *)D.31736].method;
    D.31742 = m->inst;
    type = mono_reflection_type_get_handle (D.31742);
    klass = mono_class_from_mono_type (type);
    D.31756 = mono_method_signature (mm);
    sig = method_encode_signature (assembly, D.31756);
    D.31751 = &klass->byval_arg;
    D.31757 = mm->name;
    token = mono_image_get_memberref_token (assembly, D.31751, D.31757, sig);
  }
  goto <D.31758>;
  <D.31755>:
  {
    char * name;

    D.31736 = m->mb;
    D.31737 = D.31736->vtable;
    D.31738 = D.31737->klass;
    name = mono_type_get_full_name (D.31738);
    monoeg_g_log (0B, 4, "mono_image_get_method_on_inst_token: don\'t know how to handle %s", name);
    <D.21752>:
    goto <D.21752>;
  }
  <D.31758>:
  <D.31752>:
  D.31732 = assembly->handleref_managed;
  token.227 = (void *) token;
  mono_g_hash_table_insert (D.31732, m, token.227);
  D.31731 = token;
  return D.31731;
}


mono_reflection_method_on_tb_inst_get_handle (struct MonoReflectionMethodOnTypeBuilderInst * m)
{
  struct MonoReflectionType * D.31761;
  struct MonoObject * D.31762;
  struct MonoArray * D.31763;
  struct MonoMethod * D.31766;
  unsigned char D.31767;
  unsigned char D.31768;
  unsigned int D.31771;
  unsigned int count.228;
  unsigned int D.31773;
  unsigned int i.229;
  char * D.31775;
  unsigned int i.230;
  unsigned int D.31777;
  struct MonoType * * D.31778;
  struct MonoType * D.31779;
  struct MonoGenericInst * iftmp.231;
  struct MonoGenericClass * D.31781;
  struct MonoClass * klass;
  struct MonoGenericContext tmp_context;
  struct MonoType * * type_argv;
  struct MonoGenericInst * ginst;
  struct MonoMethod * method;
  struct MonoMethod * inflated;
  int count;
  int i;

  try
    {
      D.31761 = m->inst;
      init_type_builder_generics (D.31761);
      D.31761 = m->inst;
      D.31762 = m->mb;
      method = inflate_method (D.31761, D.31762);
      klass = method->klass;
      D.31763 = m->method_args;
      if (D.31763 == 0B) goto <D.31764>; else goto <D.31765>;
      <D.31764>:
      D.31766 = method;
      return D.31766;
      <D.31765>:
      D.31767 = BIT_FIELD_REF <*method, 8, 168>;
      D.31768 = D.31767 & 16;
      if (D.31768 != 0) goto <D.31769>; else goto <D.31770>;
      <D.31769>:
      method = MEM[(struct MonoMethodInflated *)method].declaring;
      <D.31770>:
      D.31763 = m->method_args;
      D.31771 = mono_array_length (D.31763);
      count = (int) D.31771;
      count.228 = (unsigned int) count;
      D.31773 = count.228 * 4;
      type_argv = monoeg_malloc0 (D.31773);
      i = 0;
      goto <D.21734>;
      <D.21733>:
      {
        struct MonoReflectionType * garg;

        D.31763 = m->method_args;
        i.229 = (unsigned int) i;
        D.31775 = mono_array_addr_with_size (D.31763, 4, i.229);
        garg = MEM[(void * *)D.31775];
        i.230 = (unsigned int) i;
        D.31777 = i.230 * 4;
        D.31778 = type_argv + D.31777;
        D.31779 = mono_reflection_type_get_handle (garg);
        *D.31778 = D.31779;
      }
      i = i + 1;
      <D.21734>:
      if (i < count) goto <D.21733>; else goto <D.21735>;
      <D.21735>:
      ginst = mono_metadata_get_generic_inst (count, type_argv);
      monoeg_g_free (type_argv);
      D.31781 = klass->generic_class;
      if (D.31781 != 0B) goto <D.31782>; else goto <D.31783>;
      <D.31782>:
      D.31781 = klass->generic_class;
      iftmp.231 = D.31781->context.class_inst;
      goto <D.31784>;
      <D.31783>:
      iftmp.231 = 0B;
      <D.31784>:
      tmp_context.class_inst = iftmp.231;
      tmp_context.method_inst = ginst;
      inflated = mono_class_inflate_generic_method (method, &tmp_context);
      D.31766 = inflated;
      return D.31766;
    }
  finally
    {
      tmp_context = {CLOBBER};
    }
}


inflate_method (struct MonoReflectionType * type, struct MonoObject * obj)
{
  struct MonoVTable * D.31787;
  int D.31788;
  struct MonoReflectionType * D.31791;
  struct MonoType * D.31792;
  int D.31794;
  struct MonoType * D.31797;
  struct MonoType * D.31799;
  struct MonoClass * D.31803;
  char * D.31804;
  int D.25575;
  int iftmp.232;
  int D.25574;
  struct MonoVTable * D.31808;
  struct MonoClass * D.31809;
  const char[14] * D.31810;
  unsigned char D.31811;
  int D.31812;
  unsigned char D.31813;
  int D.31814;
  _Bool D.31815;
  _Bool D.31816;
  _Bool D.31817;
  const unsigned char * D.31820;
  unsigned char D.31821;
  int D.31822;
  const unsigned char * D.31823;
  unsigned char D.31824;
  int D.31825;
  _Bool D.31826;
  _Bool D.31827;
  const unsigned char * D.31830;
  unsigned char D.31831;
  int D.31832;
  const unsigned char * D.31833;
  unsigned char D.31834;
  int D.31835;
  _Bool D.31836;
  _Bool D.31837;
  const unsigned char * D.31840;
  unsigned char D.31841;
  int D.31842;
  const unsigned char * D.31843;
  unsigned char D.31844;
  int D.31845;
  const char * D.31847;
  struct MonoMethod * D.31850;
  int D.25584;
  int iftmp.233;
  int D.25583;
  const char[19] * D.31858;
  unsigned char D.31859;
  int D.31860;
  unsigned char D.31861;
  int D.31862;
  _Bool D.31863;
  _Bool D.31864;
  _Bool D.31865;
  const unsigned char * D.31868;
  unsigned char D.31869;
  int D.31870;
  const unsigned char * D.31871;
  unsigned char D.31872;
  int D.31873;
  _Bool D.31874;
  _Bool D.31875;
  const unsigned char * D.31878;
  unsigned char D.31879;
  int D.31880;
  const unsigned char * D.31881;
  unsigned char D.31882;
  int D.31883;
  _Bool D.31884;
  _Bool D.31885;
  const unsigned char * D.31888;
  unsigned char D.31889;
  int D.31890;
  const unsigned char * D.31891;
  unsigned char D.31892;
  int D.31893;
  int D.25593;
  int iftmp.234;
  int D.25592;
  const char[11] * D.31904;
  unsigned char D.31905;
  int D.31906;
  unsigned char D.31907;
  int D.31908;
  _Bool D.31909;
  _Bool D.31910;
  _Bool D.31911;
  const unsigned char * D.31914;
  unsigned char D.31915;
  int D.31916;
  const unsigned char * D.31917;
  unsigned char D.31918;
  int D.31919;
  _Bool D.31920;
  _Bool D.31921;
  const unsigned char * D.31924;
  unsigned char D.31925;
  int D.31926;
  const unsigned char * D.31927;
  unsigned char D.31928;
  int D.31929;
  _Bool D.31930;
  _Bool D.31931;
  const unsigned char * D.31934;
  unsigned char D.31935;
  int D.31936;
  const unsigned char * D.31937;
  unsigned char D.31938;
  int D.31939;
  int D.25602;
  int iftmp.235;
  int D.25601;
  const char[12] * D.31945;
  unsigned char D.31946;
  int D.31947;
  unsigned char D.31948;
  int D.31949;
  _Bool D.31950;
  _Bool D.31951;
  _Bool D.31952;
  const unsigned char * D.31955;
  unsigned char D.31956;
  int D.31957;
  const unsigned char * D.31958;
  unsigned char D.31959;
  int D.31960;
  _Bool D.31961;
  _Bool D.31962;
  const unsigned char * D.31965;
  unsigned char D.31966;
  int D.31967;
  const unsigned char * D.31968;
  unsigned char D.31969;
  int D.31970;
  _Bool D.31971;
  _Bool D.31972;
  const unsigned char * D.31975;
  unsigned char D.31976;
  int D.31977;
  const unsigned char * D.31978;
  unsigned char D.31979;
  int D.31980;
  struct MonoMethod * D.31982;
  struct MonoType * D.31983;
  struct MonoClass * D.31984;
  struct MonoMethod * method;
  struct MonoClass * gklass;
  struct MonoClass * type_class;

  D.31787 = MEM[(struct MonoObject *)type].vtable;
  type_class = D.31787->klass;
  D.31788 = is_sre_generic_instance (type_class);
  if (D.31788 != 0) goto <D.31789>; else goto <D.31790>;
  <D.31789>:
  {
    struct MonoReflectionGenericClass * mgc;

    mgc = type;
    D.31791 = mgc->generic_type;
    D.31792 = mono_reflection_type_get_handle (D.31791);
    gklass = mono_class_from_mono_type (D.31792);
  }
  goto <D.31793>;
  <D.31790>:
  D.31794 = is_sre_type_builder (type_class);
  if (D.31794 != 0) goto <D.31795>; else goto <D.31796>;
  <D.31795>:
  D.31797 = mono_reflection_type_get_handle (type);
  gklass = mono_class_from_mono_type (D.31797);
  goto <D.31798>;
  <D.31796>:
  D.31799 = type->type;
  if (D.31799 != 0B) goto <D.31800>; else goto <D.31801>;
  <D.31800>:
  D.31799 = type->type;
  gklass = mono_class_from_mono_type (D.31799);
  gklass = mono_class_get_generic_type_definition (gklass);
  goto <D.31802>;
  <D.31801>:
  D.31787 = MEM[(struct MonoObject *)type].vtable;
  D.31803 = D.31787->klass;
  D.31804 = mono_type_get_full_name (D.31803);
  monoeg_g_log (0B, 4, "Can\'t handle type %s", D.31804);
  <D.25566>:
  goto <D.25566>;
  <D.31802>:
  <D.31798>:
  <D.31793>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.31808 = obj->vtable;
      D.31809 = D.31808->klass;
      __s2 = D.31809->name;
      D.31810 = "MethodBuilder";
      D.31811 = MEM[(const unsigned char *)D.31810];
      D.31812 = (int) D.31811;
      D.31813 = *__s2;
      D.31814 = (int) D.31813;
      __result = D.31812 - D.31814;
      {
        D.31815 = __s2_len != 0;
        D.31816 = __result == 0;
        D.31817 = D.31815 & D.31816;
        if (D.31817 != 0) goto <D.31818>; else goto <D.31819>;
        <D.31818>:
        D.31820 = &MEM[(void *)"MethodBuilder" + 1B];
        D.31821 = *D.31820;
        D.31822 = (int) D.31821;
        D.31823 = __s2 + 1;
        D.31824 = *D.31823;
        D.31825 = (int) D.31824;
        __result = D.31822 - D.31825;
        D.31826 = __s2_len > 1;
        D.31816 = __result == 0;
        D.31827 = D.31826 & D.31816;
        if (D.31827 != 0) goto <D.31828>; else goto <D.31829>;
        <D.31828>:
        D.31830 = &MEM[(void *)"MethodBuilder" + 2B];
        D.31831 = *D.31830;
        D.31832 = (int) D.31831;
        D.31833 = __s2 + 2;
        D.31834 = *D.31833;
        D.31835 = (int) D.31834;
        __result = D.31832 - D.31835;
        D.31836 = __s2_len > 2;
        D.31816 = __result == 0;
        D.31837 = D.31836 & D.31816;
        if (D.31837 != 0) goto <D.31838>; else goto <D.31839>;
        <D.31838>:
        D.31840 = &MEM[(void *)"MethodBuilder" + 3B];
        D.31841 = *D.31840;
        D.31842 = (int) D.31841;
        D.31843 = __s2 + 3;
        D.31844 = *D.31843;
        D.31845 = (int) D.31844;
        __result = D.31842 - D.31845;
        <D.31839>:
        <D.31829>:
        <D.31819>:
      }
      D.25574 = __result;
    }
    iftmp.232 = -D.25574;
    goto <D.31846>;
    <D.31807>:
    D.31808 = obj->vtable;
    D.31809 = D.31808->klass;
    D.31847 = D.31809->name;
    iftmp.232 = __builtin_strcmp (D.31847, "MethodBuilder");
    <D.31846>:
    D.25575 = iftmp.232;
  }
  if (D.25575 == 0) goto <D.31848>; else goto <D.31849>;
  <D.31848>:
  D.31850 = MEM[(struct MonoReflectionMethodBuilder *)obj].mhandle;
  if (D.31850 != 0B) goto <D.31851>; else goto <D.31852>;
  <D.31851>:
  method = MEM[(struct MonoReflectionMethodBuilder *)obj].mhandle;
  goto <D.31853>;
  <D.31852>:
  method = methodbuilder_to_mono_method (gklass, obj);
  <D.31853>:
  goto <D.31854>;
  <D.31849>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.31808 = obj->vtable;
      D.31809 = D.31808->klass;
      __s2 = D.31809->name;
      D.31858 = "ConstructorBuilder";
      D.31859 = MEM[(const unsigned char *)D.31858];
      D.31860 = (int) D.31859;
      D.31861 = *__s2;
      D.31862 = (int) D.31861;
      __result = D.31860 - D.31862;
      {
        D.31863 = __s2_len != 0;
        D.31864 = __result == 0;
        D.31865 = D.31863 & D.31864;
        if (D.31865 != 0) goto <D.31866>; else goto <D.31867>;
        <D.31866>:
        D.31868 = &MEM[(void *)"ConstructorBuilder" + 1B];
        D.31869 = *D.31868;
        D.31870 = (int) D.31869;
        D.31871 = __s2 + 1;
        D.31872 = *D.31871;
        D.31873 = (int) D.31872;
        __result = D.31870 - D.31873;
        D.31874 = __s2_len > 1;
        D.31864 = __result == 0;
        D.31875 = D.31874 & D.31864;
        if (D.31875 != 0) goto <D.31876>; else goto <D.31877>;
        <D.31876>:
        D.31878 = &MEM[(void *)"ConstructorBuilder" + 2B];
        D.31879 = *D.31878;
        D.31880 = (int) D.31879;
        D.31881 = __s2 + 2;
        D.31882 = *D.31881;
        D.31883 = (int) D.31882;
        __result = D.31880 - D.31883;
        D.31884 = __s2_len > 2;
        D.31864 = __result == 0;
        D.31885 = D.31884 & D.31864;
        if (D.31885 != 0) goto <D.31886>; else goto <D.31887>;
        <D.31886>:
        D.31888 = &MEM[(void *)"ConstructorBuilder" + 3B];
        D.31889 = *D.31888;
        D.31890 = (int) D.31889;
        D.31891 = __s2 + 3;
        D.31892 = *D.31891;
        D.31893 = (int) D.31892;
        __result = D.31890 - D.31893;
        <D.31887>:
        <D.31877>:
        <D.31867>:
      }
      D.25583 = __result;
    }
    iftmp.233 = -D.25583;
    goto <D.31894>;
    <D.31857>:
    D.31808 = obj->vtable;
    D.31809 = D.31808->klass;
    D.31847 = D.31809->name;
    iftmp.233 = __builtin_strcmp (D.31847, "ConstructorBuilder");
    <D.31894>:
    D.25584 = iftmp.233;
  }
  if (D.25584 == 0) goto <D.31895>; else goto <D.31896>;
  <D.31895>:
  method = ctorbuilder_to_mono_method (gklass, obj);
  goto <D.31897>;
  <D.31896>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.31808 = obj->vtable;
      D.31809 = D.31808->klass;
      __s2 = D.31809->name;
      D.31904 = "MonoMethod";
      D.31905 = MEM[(const unsigned char *)D.31904];
      D.31906 = (int) D.31905;
      D.31907 = *__s2;
      D.31908 = (int) D.31907;
      __result = D.31906 - D.31908;
      {
        D.31909 = __s2_len != 0;
        D.31910 = __result == 0;
        D.31911 = D.31909 & D.31910;
        if (D.31911 != 0) goto <D.31912>; else goto <D.31913>;
        <D.31912>:
        D.31914 = &MEM[(void *)"MonoMethod" + 1B];
        D.31915 = *D.31914;
        D.31916 = (int) D.31915;
        D.31917 = __s2 + 1;
        D.31918 = *D.31917;
        D.31919 = (int) D.31918;
        __result = D.31916 - D.31919;
        D.31920 = __s2_len > 1;
        D.31910 = __result == 0;
        D.31921 = D.31920 & D.31910;
        if (D.31921 != 0) goto <D.31922>; else goto <D.31923>;
        <D.31922>:
        D.31924 = &MEM[(void *)"MonoMethod" + 2B];
        D.31925 = *D.31924;
        D.31926 = (int) D.31925;
        D.31927 = __s2 + 2;
        D.31928 = *D.31927;
        D.31929 = (int) D.31928;
        __result = D.31926 - D.31929;
        D.31930 = __s2_len > 2;
        D.31910 = __result == 0;
        D.31931 = D.31930 & D.31910;
        if (D.31931 != 0) goto <D.31932>; else goto <D.31933>;
        <D.31932>:
        D.31934 = &MEM[(void *)"MonoMethod" + 3B];
        D.31935 = *D.31934;
        D.31936 = (int) D.31935;
        D.31937 = __s2 + 3;
        D.31938 = *D.31937;
        D.31939 = (int) D.31938;
        __result = D.31936 - D.31939;
        <D.31933>:
        <D.31923>:
        <D.31913>:
      }
      D.25592 = __result;
    }
    iftmp.234 = -D.25592;
    goto <D.31940>;
    <D.31903>:
    D.31808 = obj->vtable;
    D.31809 = D.31808->klass;
    D.31847 = D.31809->name;
    iftmp.234 = __builtin_strcmp (D.31847, "MonoMethod");
    <D.31940>:
    D.25593 = iftmp.234;
  }
  if (D.25593 == 0) goto <D.31898>; else goto <D.31941>;
  <D.31941>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.31808 = obj->vtable;
      D.31809 = D.31808->klass;
      __s2 = D.31809->name;
      D.31945 = "MonoCMethod";
      D.31946 = MEM[(const unsigned char *)D.31945];
      D.31947 = (int) D.31946;
      D.31948 = *__s2;
      D.31949 = (int) D.31948;
      __result = D.31947 - D.31949;
      {
        D.31950 = __s2_len != 0;
        D.31951 = __result == 0;
        D.31952 = D.31950 & D.31951;
        if (D.31952 != 0) goto <D.31953>; else goto <D.31954>;
        <D.31953>:
        D.31955 = &MEM[(void *)"MonoCMethod" + 1B];
        D.31956 = *D.31955;
        D.31957 = (int) D.31956;
        D.31958 = __s2 + 1;
        D.31959 = *D.31958;
        D.31960 = (int) D.31959;
        __result = D.31957 - D.31960;
        D.31961 = __s2_len > 1;
        D.31951 = __result == 0;
        D.31962 = D.31961 & D.31951;
        if (D.31962 != 0) goto <D.31963>; else goto <D.31964>;
        <D.31963>:
        D.31965 = &MEM[(void *)"MonoCMethod" + 2B];
        D.31966 = *D.31965;
        D.31967 = (int) D.31966;
        D.31968 = __s2 + 2;
        D.31969 = *D.31968;
        D.31970 = (int) D.31969;
        __result = D.31967 - D.31970;
        D.31971 = __s2_len > 2;
        D.31951 = __result == 0;
        D.31972 = D.31971 & D.31951;
        if (D.31972 != 0) goto <D.31973>; else goto <D.31974>;
        <D.31973>:
        D.31975 = &MEM[(void *)"MonoCMethod" + 3B];
        D.31976 = *D.31975;
        D.31977 = (int) D.31976;
        D.31978 = __s2 + 3;
        D.31979 = *D.31978;
        D.31980 = (int) D.31979;
        __result = D.31977 - D.31980;
        <D.31974>:
        <D.31964>:
        <D.31954>:
      }
      D.25601 = __result;
    }
    iftmp.235 = -D.25601;
    goto <D.31981>;
    <D.31944>:
    D.31808 = obj->vtable;
    D.31809 = D.31808->klass;
    D.31847 = D.31809->name;
    iftmp.235 = __builtin_strcmp (D.31847, "MonoCMethod");
    <D.31981>:
    D.25602 = iftmp.235;
  }
  if (D.25602 == 0) goto <D.31898>; else goto <D.31899>;
  <D.31898>:
  method = MEM[(struct MonoReflectionMethod *)obj].method;
  goto <D.31900>;
  <D.31899>:
  method = 0B;
  D.31808 = obj->vtable;
  D.31809 = D.31808->klass;
  D.31847 = D.31809->name;
  monoeg_g_log (0B, 4, "can\'t handle type %s", D.31847);
  <D.25603>:
  goto <D.25603>;
  <D.31900>:
  <D.31897>:
  <D.31854>:
  D.31983 = mono_reflection_type_get_handle (type);
  D.31984 = mono_class_from_mono_type (D.31983);
  D.31982 = inflate_mono_method (D.31984, method, obj);
  return D.31982;
}


is_sre_generic_instance (struct MonoClass * class)
{
  struct MonoClass * cached_class.236;
  gboolean D.31989;
  _Bool D.31990;
  int D.31991;
  int D.24757;
  int iftmp.237;
  int D.24753;
  const char[17] * D.31997;
  unsigned char D.31998;
  int D.31999;
  unsigned char D.32000;
  int D.32001;
  _Bool D.32002;
  _Bool D.32003;
  _Bool D.32004;
  const unsigned char * D.32007;
  unsigned char D.32008;
  int D.32009;
  const unsigned char * D.32010;
  unsigned char D.32011;
  int D.32012;
  _Bool D.32013;
  _Bool D.32014;
  const unsigned char * D.32017;
  unsigned char D.32018;
  int D.32019;
  const unsigned char * D.32020;
  unsigned char D.32021;
  int D.32022;
  _Bool D.32023;
  _Bool D.32024;
  const unsigned char * D.32027;
  unsigned char D.32028;
  int D.32029;
  const unsigned char * D.32030;
  unsigned char D.32031;
  int D.32032;
  const char * D.32034;
  int D.24766;
  int iftmp.238;
  int D.24762;
  const char[18] * D.32040;
  unsigned char D.32041;
  int D.32042;
  unsigned char D.32043;
  int D.32044;
  _Bool D.32045;
  _Bool D.32046;
  _Bool D.32047;
  const unsigned char * D.32050;
  unsigned char D.32051;
  int D.32052;
  const unsigned char * D.32053;
  unsigned char D.32054;
  int D.32055;
  _Bool D.32056;
  _Bool D.32057;
  const unsigned char * D.32060;
  unsigned char D.32061;
  int D.32062;
  const unsigned char * D.32063;
  unsigned char D.32064;
  int D.32065;
  _Bool D.32066;
  _Bool D.32067;
  const unsigned char * D.32070;
  unsigned char D.32071;
  int D.32072;
  const unsigned char * D.32073;
  unsigned char D.32074;
  int D.32075;
  const char * D.32077;

  {
    static struct MonoClass * cached_class;

    cached_class.236 = cached_class;
    if (cached_class.236 != 0B) goto <D.31987>; else goto <D.31988>;
    <D.31987>:
    cached_class.236 = cached_class;
    D.31990 = cached_class.236 == class;
    D.31989 = (gboolean) D.31990;
    return D.31989;
    <D.31988>:
    D.31991 = is_corlib_type (class);
    if (D.31991 != 0) goto <D.31992>; else goto <D.31993>;
    <D.31992>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 16;
      if (__s1_len <= 3) goto <D.31995>; else goto <D.31996>;
      <D.31995>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.31997 = "MonoGenericClass";
        D.31998 = MEM[(const unsigned char *)D.31997];
        D.31999 = (int) D.31998;
        D.32000 = *__s2;
        D.32001 = (int) D.32000;
        __result = D.31999 - D.32001;
        {
          D.32002 = __s1_len != 0;
          D.32003 = __result == 0;
          D.32004 = D.32002 & D.32003;
          if (D.32004 != 0) goto <D.32005>; else goto <D.32006>;
          <D.32005>:
          D.32007 = &MEM[(void *)"MonoGenericClass" + 1B];
          D.32008 = *D.32007;
          D.32009 = (int) D.32008;
          D.32010 = __s2 + 1;
          D.32011 = *D.32010;
          D.32012 = (int) D.32011;
          __result = D.32009 - D.32012;
          D.32013 = __s1_len > 1;
          D.32003 = __result == 0;
          D.32014 = D.32013 & D.32003;
          if (D.32014 != 0) goto <D.32015>; else goto <D.32016>;
          <D.32015>:
          D.32017 = &MEM[(void *)"MonoGenericClass" + 2B];
          D.32018 = *D.32017;
          D.32019 = (int) D.32018;
          D.32020 = __s2 + 2;
          D.32021 = *D.32020;
          D.32022 = (int) D.32021;
          __result = D.32019 - D.32022;
          D.32023 = __s1_len > 2;
          D.32003 = __result == 0;
          D.32024 = D.32023 & D.32003;
          if (D.32024 != 0) goto <D.32025>; else goto <D.32026>;
          <D.32025>:
          D.32027 = &MEM[(void *)"MonoGenericClass" + 3B];
          D.32028 = *D.32027;
          D.32029 = (int) D.32028;
          D.32030 = __s2 + 3;
          D.32031 = *D.32030;
          D.32032 = (int) D.32031;
          __result = D.32029 - D.32032;
          <D.32026>:
          <D.32016>:
          <D.32006>:
        }
        D.24753 = __result;
      }
      iftmp.237 = D.24753;
      goto <D.32033>;
      <D.31996>:
      D.32034 = class->name;
      iftmp.237 = __builtin_strcmp ("MonoGenericClass", D.32034);
      <D.32033>:
      D.24757 = iftmp.237;
    }
    if (D.24757 == 0) goto <D.32035>; else goto <D.32036>;
    <D.32035>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 17;
      if (__s1_len <= 3) goto <D.32038>; else goto <D.32039>;
      <D.32038>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.32040 = "System.Reflection";
        D.32041 = MEM[(const unsigned char *)D.32040];
        D.32042 = (int) D.32041;
        D.32043 = *__s2;
        D.32044 = (int) D.32043;
        __result = D.32042 - D.32044;
        {
          D.32045 = __s1_len != 0;
          D.32046 = __result == 0;
          D.32047 = D.32045 & D.32046;
          if (D.32047 != 0) goto <D.32048>; else goto <D.32049>;
          <D.32048>:
          D.32050 = &MEM[(void *)"System.Reflection" + 1B];
          D.32051 = *D.32050;
          D.32052 = (int) D.32051;
          D.32053 = __s2 + 1;
          D.32054 = *D.32053;
          D.32055 = (int) D.32054;
          __result = D.32052 - D.32055;
          D.32056 = __s1_len > 1;
          D.32046 = __result == 0;
          D.32057 = D.32056 & D.32046;
          if (D.32057 != 0) goto <D.32058>; else goto <D.32059>;
          <D.32058>:
          D.32060 = &MEM[(void *)"System.Reflection" + 2B];
          D.32061 = *D.32060;
          D.32062 = (int) D.32061;
          D.32063 = __s2 + 2;
          D.32064 = *D.32063;
          D.32065 = (int) D.32064;
          __result = D.32062 - D.32065;
          D.32066 = __s1_len > 2;
          D.32046 = __result == 0;
          D.32067 = D.32066 & D.32046;
          if (D.32067 != 0) goto <D.32068>; else goto <D.32069>;
          <D.32068>:
          D.32070 = &MEM[(void *)"System.Reflection" + 3B];
          D.32071 = *D.32070;
          D.32072 = (int) D.32071;
          D.32073 = __s2 + 3;
          D.32074 = *D.32073;
          D.32075 = (int) D.32074;
          __result = D.32072 - D.32075;
          <D.32069>:
          <D.32059>:
          <D.32049>:
        }
        D.24762 = __result;
      }
      iftmp.238 = D.24762;
      goto <D.32076>;
      <D.32039>:
      D.32077 = class->name_space;
      iftmp.238 = __builtin_strcmp ("System.Reflection", D.32077);
      <D.32076>:
      D.24766 = iftmp.238;
    }
    if (D.24766 == 0) goto <D.32078>; else goto <D.32079>;
    <D.32078>:
    cached_class = class;
    D.31989 = 1;
    return D.31989;
    <D.32079>:
    <D.32036>:
    <D.31993>:
    D.31989 = 0;
    return D.31989;
  }
}


methodbuilder_to_mono_method (struct MonoClass * klass, struct MonoReflectionMethodBuilder * mb)
{
  struct MonoImage * D.32081;
  struct MonoMethod * D.32082;
  struct MonoMethod * D.32083;
  struct MonoArray * D.32084;
  int D.32085;
  struct MonoGenericContainer * D.32088;
  struct MonoMethod * D.32091;
  struct ReflectionMethodBuilder rmb;
  struct MonoMethodSignature * sig;

  try
    {
      mono_loader_lock ();
      D.32081 = klass->image;
      sig = method_builder_to_signature (D.32081, mb);
      mono_loader_unlock ();
      reflection_methodbuilder_from_method_builder (&rmb, mb);
      D.32082 = reflection_methodbuilder_to_mono_method (klass, &rmb, sig);
      mb->mhandle = D.32082;
      D.32081 = klass->image;
      D.32083 = mb->mhandle;
      D.32084 = mb->cattrs;
      mono_save_custom_attrs (D.32081, D.32083, D.32084);
      D.32081 = klass->image;
      D.32085 = MEM[(struct MonoDynamicImage *)D.32081].save;
      if (D.32085 == 0) goto <D.32086>; else goto <D.32087>;
      <D.32086>:
      D.32088 = klass->generic_container;
      if (D.32088 == 0B) goto <D.32089>; else goto <D.32090>;
      <D.32089>:
      mb->ilgen = 0B;
      <D.32090>:
      <D.32087>:
      D.32091 = mb->mhandle;
      return D.32091;
    }
  finally
    {
      rmb = {CLOBBER};
    }
}


method_builder_to_signature (struct MonoImage * image, struct MonoReflectionMethodBuilder * method)
{
  struct MonoArray * D.32094;
  unsigned int D.32095;
  unsigned int D.32096;
  _Bool D.32097;
  struct MonoType * iftmp.239;
  struct MonoObject * D.32099;
  struct MonoClass * D.32103;
  short unsigned int iftmp.240;
  struct MonoArray * D.32105;
  unsigned int D.32108;
  struct MonoMethodSignature * D.32110;
  struct MonoMethodSignature * sig;

  D.32094 = method->parameters;
  sig = parameters_to_signature (image, D.32094);
  D.32095 = method->attrs;
  D.32096 = D.32095 & 16;
  D.32097 = D.32096 == 0;
  sig->hasthis = D.32097;
  D.32099 = method->rtype;
  if (D.32099 != 0B) goto <D.32100>; else goto <D.32101>;
  <D.32100>:
  D.32099 = method->rtype;
  iftmp.239 = mono_reflection_type_get_handle (D.32099);
  goto <D.32102>;
  <D.32101>:
  D.32103 = mono_defaults.void_class;
  iftmp.239 = &D.32103->byval_arg;
  <D.32102>:
  sig->ret = iftmp.239;
  D.32105 = method->generic_params;
  if (D.32105 != 0B) goto <D.32106>; else goto <D.32107>;
  <D.32106>:
  D.32105 = method->generic_params;
  D.32108 = mono_array_length (D.32105);
  iftmp.240 = (short unsigned int) D.32108;
  goto <D.32109>;
  <D.32107>:
  iftmp.240 = 0;
  <D.32109>:
  sig->generic_param_count = iftmp.240;
  D.32110 = sig;
  return D.32110;
}


parameters_to_signature (struct MonoImage * image, struct MonoArray * parameters)
{
  int iftmp.241;
  unsigned int D.32115;
  unsigned int count.242;
  unsigned int D.32118;
  unsigned int D.32119;
  short unsigned int D.32120;
  unsigned int i.243;
  char * D.32122;
  void * D.32123;
  struct MonoType * D.32124;
  struct MonoMethodSignature * D.32125;
  struct MonoMethodSignature * sig;
  int count;
  int i;

  if (parameters != 0B) goto <D.32113>; else goto <D.32114>;
  <D.32113>:
  D.32115 = mono_array_length (parameters);
  iftmp.241 = (int) D.32115;
  goto <D.32116>;
  <D.32114>:
  iftmp.241 = 0;
  <D.32116>:
  count = iftmp.241;
  count.242 = (unsigned int) count;
  D.32118 = count.242 + 3;
  D.32119 = D.32118 * 4;
  sig = image_g_malloc0 (image, D.32119);
  D.32120 = (short unsigned int) count;
  sig->param_count = D.32120;
  sig->sentinelpos = -1;
  i = 0;
  goto <D.24941>;
  <D.24940>:
  i.243 = (unsigned int) i;
  D.32122 = mono_array_addr_with_size (parameters, 4, i.243);
  D.32123 = MEM[(void * *)D.32122];
  D.32124 = mono_reflection_type_get_handle (D.32123);
  sig->params[i] = D.32124;
  i = i + 1;
  <D.24941>:
  if (i < count) goto <D.24940>; else goto <D.24942>;
  <D.24942>:
  D.32125 = sig;
  return D.32125;
}


image_g_malloc0 (struct MonoImage * image, guint size)
{
  void * D.32129;

  if (image != 0B) goto <D.32127>; else goto <D.32128>;
  <D.32127>:
  D.32129 = mono_image_alloc0 (image, size);
  return D.32129;
  <D.32128>:
  D.32129 = monoeg_malloc0 (size);
  return D.32129;
}


reflection_methodbuilder_to_mono_method (struct MonoClass * klass, struct ReflectionMethodBuilder * rmb, struct MonoMethodSignature * sig)
{
  void * * D.32131;
  _Bool D.32132;
  struct MonoImage * iftmp.244;
  struct MonoGenericClass * D.32139;
  _Bool D.32140;
  long int D.32141;
  long int D.32142;
  unsigned int D.32148;
  unsigned int D.32149;
  unsigned int D.32151;
  unsigned int D.32152;
  unsigned char D.32153;
  <unnamed-unsigned:1> D.32154;
  short unsigned int D.32155;
  short unsigned int D.32156;
  struct MonoString * D.32157;
  char * D.32158;
  unsigned char D.32159;
  <unnamed-unsigned:1> D.32160;
  guint32 * D.32161;
  unsigned int D.32164;
  unsigned int D.32165;
  short unsigned int D.32166;
  int D.32167;
  int D.32168;
  struct MonoClass * D.32171;
  int D.25433;
  int iftmp.245;
  int D.25432;
  const char[6] * D.32177;
  unsigned char D.32178;
  int D.32179;
  unsigned char D.32180;
  int D.32181;
  _Bool D.32182;
  _Bool D.32183;
  _Bool D.32184;
  const unsigned char * D.32187;
  unsigned char D.32188;
  int D.32189;
  const unsigned char * D.32190;
  unsigned char D.32191;
  int D.32192;
  _Bool D.32193;
  _Bool D.32194;
  const unsigned char * D.32197;
  unsigned char D.32198;
  int D.32199;
  const unsigned char * D.32200;
  unsigned char D.32201;
  int D.32202;
  _Bool D.32203;
  _Bool D.32204;
  const unsigned char * D.32207;
  unsigned char D.32208;
  int D.32209;
  const unsigned char * D.32210;
  unsigned char D.32211;
  int D.32212;
  const char * D.32214;
  struct MonoMethodSignature * D.32217;
  short unsigned int D.32219;
  int D.32220;
  int D.32221;
  char * iftmp.246;
  struct MonoString * D.32225;
  int D.32229;
  _Bool D.32230;
  long int D.32231;
  long int D.32232;
  struct MonoString * D.32235;
  char * D.32236;
  int D.32237;
  _Bool D.32238;
  long int D.32239;
  long int D.32240;
  int D.32243;
  int D.32244;
  signed short D.32245;
  signed short iftmp.247;
  int D.32247;
  int D.32250;
  unsigned short D.32251;
  unsigned short D.32252;
  signed short D.32254;
  int D.32255;
  signed short D.32256;
  signed short D.32257;
  short unsigned int D.32258;
  struct MonoImage * D.32259;
  unsigned char D.32260;
  unsigned char D.32261;
  struct GHashTable * D.32264;
  struct MonoMethod * D.32265;
  int D.32266;
  int D.32269;
  struct MonoReflectionILGen * D.32272;
  struct MonoArray * D.32275;
  int D.32276;
  gint32 iftmp.248;
  struct MonoArray * D.32278;
  unsigned int D.32281;
  struct MonoArray * D.32283;
  unsigned int D.32286;
  struct MonoArray * D.32288;
  unsigned int num_locals.249;
  unsigned int D.32293;
  unsigned int D.32294;
  void * D.32295;
  const unsigned char * D.32296;
  short unsigned int D.32297;
  <unnamed-unsigned:15> D.32298;
  unsigned char D.32299;
  <unnamed-unsigned:1> D.32300;
  short unsigned int D.32301;
  unsigned int i.250;
  char * D.32303;
  void * D.32304;
  struct MonoType * D.32305;
  struct MonoObject * D.32306;
  struct MonoType * D.32307;
  short unsigned int D.32308;
  <unnamed-unsigned:15> D.32309;
  unsigned int num_clauses.251;
  struct MonoExceptionClause * D.32313;
  struct MonoArray * D.32314;
  unsigned int D.32317;
  _Bool D.32318;
  long int D.32319;
  long int D.32320;
  <unnamed-signed:31> D.32323;
  unsigned int count.252;
  unsigned int D.32325;
  void * D.32326;
  unsigned int i.253;
  char * D.32328;
  struct MonoType * D.32329;
  struct MonoGenericParamFull * D.32330;
  unsigned int i.254;
  unsigned int D.32332;
  struct MonoGenericParamFull * D.32333;
  unsigned char D.32334;
  short unsigned int D.32337;
  int D.32338;
  struct MonoType * D.32341;
  struct MonoType * D.32342;
  unsigned int D.32343;
  unsigned int D.32344;
  struct MonoGenericParam * D.32345;
  short unsigned int D.32346;
  int D.32347;
  struct MonoGenericContainer * D.32348;
  struct MonoGenericInst * D.32351;
  struct MonoGenericInst * D.32352;
  unsigned int D.32355;
  unsigned int D.32356;
  unsigned int D.32357;
  void * D.32358;
  sizetype i.255;
  sizetype D.32360;
  sizetype D.32361;
  void * * D.32362;
  unsigned int i.256;
  unsigned int D.32364;
  void * * D.32365;
  void * D.32366;
  unsigned int i.257;
  struct MonoArray * D.32368;
  struct MonoMethodSignature * D.32373;
  short unsigned int D.32374;
  int D.32375;
  int D.32376;
  unsigned int D.32377;
  unsigned int D.32378;
  void * D.32379;
  char * D.32380;
  unsigned int D.32385;
  int D.32388;
  struct MonoType * D.32389;
  struct MonoType * D.32390;
  short unsigned int D.32391;
  unsigned int D.32392;
  uint8_t * * D.32395;
  int D.32398;
  unsigned int D.32399;
  unsigned int D.32400;
  void * D.32401;
  void * D.32402;
  struct MonoObject * D.32403;
  char * D.32404;
  const char * p2.258;
  int p2.259;
  int p.260;
  int D.32408;
  unsigned int D.32409;
  unsigned int D.32410;
  uint8_t * * D.32411;
  void * D.32412;
  uint32_t * D.32413;
  uint32_t * D.32414;
  unsigned int def_type.261;
  uint8_t * D.32416;
  struct MonoString * D.32417;
  char * * D.32420;
  char * * D.32421;
  char * D.32422;
  int D.32423;
  _Bool D.32424;
  long int D.32425;
  long int D.32426;
  struct MonoArray * D.32429;
  struct MonoCustomAttrInfo * * D.32432;
  void * D.32435;
  struct MonoCustomAttrInfo * * D.32436;
  struct MonoCustomAttrInfo * D.32437;
  char * D.32440;
  struct MonoReflectionMarshal * D.32443;
  short unsigned int D.32448;
  int D.32449;
  int D.32450;
  unsigned int D.32451;
  unsigned int D.32452;
  int D.32453;
  unsigned int D.32454;
  unsigned int D.32455;
  struct MonoMarshalSpec * * D.32456;
  struct MonoAssembly * D.32457;
  struct MonoMarshalSpec * D.32458;
  unsigned int D.32459;
  struct MonoError error;
  struct MonoMethod * m;
  struct MonoMethodWrapper * wrapperm;
  struct MonoMarshalSpec * * specs;
  struct MonoReflectionMethodAux * method_aux;
  struct MonoImage * image;
  gboolean dynamic;
  int i;

  try
    {
      mono_error_init (&error);
      D.32131 = rmb->refs;
      D.32132 = D.32131 != 0B;
      dynamic = (gboolean) D.32132;
      if (dynamic == 0) goto <D.32134>; else goto <D.32135>;
      <D.32134>:
      iftmp.244 = klass->image;
      goto <D.32136>;
      <D.32135>:
      iftmp.244 = 0B;
      <D.32136>:
      image = iftmp.244;
      if (dynamic == 0) goto <D.32137>; else goto <D.32138>;
      <D.32137>:
      D.32139 = klass->generic_class;
      D.32140 = D.32139 != 0B;
      D.32141 = (long int) D.32140;
      D.32142 = __builtin_expect (D.32141, 0);
      if (D.32142 != 0) goto <D.32143>; else goto <D.32144>;
      <D.32143>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10133, "!klass->generic_class");
      <D.32144>:
      <D.32138>:
      mono_loader_lock ();
      D.32148 = rmb->attrs;
      D.32149 = D.32148 & 8192;
      if (D.32149 != 0) goto <D.32145>; else goto <D.32150>;
      <D.32150>:
      D.32151 = rmb->iattrs;
      D.32152 = D.32151 & 4096;
      if (D.32152 != 0) goto <D.32145>; else goto <D.32146>;
      <D.32145>:
      m = image_g_malloc0 (image, 32);
      goto <D.32147>;
      <D.32146>:
      m = image_g_malloc0 (image, 32);
      <D.32147>:
      wrapperm = m;
      D.32153 = (unsigned char) dynamic;
      D.32154 = (<unnamed-unsigned:1>) D.32153;
      m->dynamic = D.32154;
      m->slot = -1;
      D.32148 = rmb->attrs;
      D.32155 = (short unsigned int) D.32148;
      m->flags = D.32155;
      D.32151 = rmb->iattrs;
      D.32156 = (short unsigned int) D.32151;
      m->iflags = D.32156;
      D.32157 = rmb->name;
      D.32158 = mono_string_to_utf8_image_ignore (image, D.32157);
      m->name = D.32158;
      m->klass = klass;
      m->signature = sig;
      m->sre_method = 1;
      D.32159 = rmb->skip_visibility;
      D.32160 = (<unnamed-unsigned:1>) D.32159;
      m->skip_visibility = D.32160;
      D.32161 = rmb->table_idx;
      if (D.32161 != 0B) goto <D.32162>; else goto <D.32163>;
      <D.32162>:
      D.32161 = rmb->table_idx;
      D.32164 = *D.32161;
      D.32165 = D.32164 | 100663296;
      m->token = D.32165;
      <D.32163>:
      D.32166 = m->iflags;
      D.32167 = (int) D.32166;
      D.32168 = D.32167 & 4096;
      if (D.32168 != 0) goto <D.32169>; else goto <D.32170>;
      <D.32169>:
      D.32171 = mono_defaults.string_class;
      if (D.32171 == klass) goto <D.32172>; else goto <D.32173>;
      <D.32172>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = m->name;
          D.32177 = ".ctor";
          D.32178 = MEM[(const unsigned char *)D.32177];
          D.32179 = (int) D.32178;
          D.32180 = *__s2;
          D.32181 = (int) D.32180;
          __result = D.32179 - D.32181;
          {
            D.32182 = __s2_len != 0;
            D.32183 = __result == 0;
            D.32184 = D.32182 & D.32183;
            if (D.32184 != 0) goto <D.32185>; else goto <D.32186>;
            <D.32185>:
            D.32187 = &MEM[(void *)".ctor" + 1B];
            D.32188 = *D.32187;
            D.32189 = (int) D.32188;
            D.32190 = __s2 + 1;
            D.32191 = *D.32190;
            D.32192 = (int) D.32191;
            __result = D.32189 - D.32192;
            D.32193 = __s2_len > 1;
            D.32183 = __result == 0;
            D.32194 = D.32193 & D.32183;
            if (D.32194 != 0) goto <D.32195>; else goto <D.32196>;
            <D.32195>:
            D.32197 = &MEM[(void *)".ctor" + 2B];
            D.32198 = *D.32197;
            D.32199 = (int) D.32198;
            D.32200 = __s2 + 2;
            D.32201 = *D.32200;
            D.32202 = (int) D.32201;
            __result = D.32199 - D.32202;
            D.32203 = __s2_len > 2;
            D.32183 = __result == 0;
            D.32204 = D.32203 & D.32183;
            if (D.32204 != 0) goto <D.32205>; else goto <D.32206>;
            <D.32205>:
            D.32207 = &MEM[(void *)".ctor" + 3B];
            D.32208 = *D.32207;
            D.32209 = (int) D.32208;
            D.32210 = __s2 + 3;
            D.32211 = *D.32210;
            D.32212 = (int) D.32211;
            __result = D.32209 - D.32212;
            <D.32206>:
            <D.32196>:
            <D.32186>:
          }
          D.25432 = __result;
        }
        iftmp.245 = -D.25432;
        goto <D.32213>;
        <D.32176>:
        D.32214 = m->name;
        iftmp.245 = __builtin_strcmp (D.32214, ".ctor");
        <D.32213>:
        D.25433 = iftmp.245;
      }
      if (D.25433 == 0) goto <D.32215>; else goto <D.32216>;
      <D.32215>:
      m->string_ctor = 1;
      <D.32216>:
      <D.32173>:
      D.32217 = m->signature;
      D.32217->pinvoke = 1;
      goto <D.32218>;
      <D.32170>:
      D.32219 = m->flags;
      D.32220 = (int) D.32219;
      D.32221 = D.32220 & 8192;
      if (D.32221 != 0) goto <D.32222>; else goto <D.32223>;
      <D.32222>:
      D.32217 = m->signature;
      D.32217->pinvoke = 1;
      method_aux = image_g_malloc0 (image, 28);
      D.32225 = rmb->dllentry;
      if (D.32225 != 0B) goto <D.32226>; else goto <D.32227>;
      <D.32226>:
      D.32225 = rmb->dllentry;
      iftmp.246 = mono_string_to_utf8_image (image, D.32225, &error);
      goto <D.32228>;
      <D.32227>:
      D.32214 = m->name;
      iftmp.246 = image_strdup (image, D.32214);
      <D.32228>:
      method_aux->dllentry = iftmp.246;
      D.32229 = mono_error_ok (&error);
      D.32230 = D.32229 == 0;
      D.32231 = (long int) D.32230;
      D.32232 = __builtin_expect (D.32231, 0);
      if (D.32232 != 0) goto <D.32233>; else goto <D.32234>;
      <D.32233>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10168, "mono_error_ok (&error)");
      <D.32234>:
      D.32235 = rmb->dll;
      D.32236 = mono_string_to_utf8_image (image, D.32235, &error);
      method_aux->dll = D.32236;
      D.32237 = mono_error_ok (&error);
      D.32238 = D.32237 == 0;
      D.32239 = (long int) D.32238;
      D.32240 = __builtin_expect (D.32239, 0);
      if (D.32240 != 0) goto <D.32241>; else goto <D.32242>;
      <D.32241>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10170, "mono_error_ok (&error)");
      <D.32242>:
      D.32243 = rmb->native_cc;
      D.32244 = D.32243 << 8;
      D.32245 = (signed short) D.32244;
      D.32247 = rmb->charset;
      if (D.32247 != 0) goto <D.32248>; else goto <D.32249>;
      <D.32248>:
      D.32247 = rmb->charset;
      D.32250 = D.32247 + -1;
      D.32251 = (unsigned short) D.32250;
      D.32252 = D.32251 * 2;
      iftmp.247 = (signed short) D.32252;
      goto <D.32253>;
      <D.32249>:
      iftmp.247 = 0;
      <D.32253>:
      D.32254 = D.32245 | iftmp.247;
      D.32255 = rmb->extra_flags;
      D.32256 = (signed short) D.32255;
      D.32257 = D.32254 | D.32256;
      D.32258 = (short unsigned int) D.32257;
      MEM[(struct MonoMethodPInvoke *)m].piflags = D.32258;
      D.32259 = klass->image;
      D.32260 = BIT_FIELD_REF <*D.32259, 8, 128>;
      D.32261 = D.32260 & 8;
      if (D.32261 != 0) goto <D.32262>; else goto <D.32263>;
      <D.32262>:
      D.32259 = klass->image;
      D.32264 = MEM[(struct MonoDynamicImage *)D.32259].method_aux_hash;
      monoeg_g_hash_table_insert_replace (D.32264, m, method_aux, 0);
      <D.32263>:
      mono_loader_unlock ();
      D.32265 = m;
      return D.32265;
      <D.32223>:
      D.32219 = m->flags;
      D.32220 = (int) D.32219;
      D.32266 = D.32220 & 1024;
      if (D.32266 == 0) goto <D.32267>; else goto <D.32268>;
      <D.32267>:
      D.32166 = m->iflags;
      D.32167 = (int) D.32166;
      D.32269 = D.32167 & 3;
      if (D.32269 == 0) goto <D.32270>; else goto <D.32271>;
      <D.32270>:
      {
        struct MonoMethodHeader * header;
        guint32 code_size;
        gint32 max_stack;
        gint32 i;
        gint32 num_locals;
        gint32 num_clauses;
        guint8 * code;

        num_locals = 0;
        num_clauses = 0;
        D.32272 = rmb->ilgen;
        if (D.32272 != 0B) goto <D.32273>; else goto <D.32274>;
        <D.32273>:
        D.32272 = rmb->ilgen;
        D.32275 = D.32272->code;
        code = mono_array_addr_with_size (D.32275, 1, 0);
        D.32272 = rmb->ilgen;
        D.32276 = D.32272->code_len;
        code_size = (guint32) D.32276;
        D.32272 = rmb->ilgen;
        max_stack = D.32272->max_stack;
        D.32272 = rmb->ilgen;
        D.32278 = D.32272->locals;
        if (D.32278 != 0B) goto <D.32279>; else goto <D.32280>;
        <D.32279>:
        D.32272 = rmb->ilgen;
        D.32278 = D.32272->locals;
        D.32281 = mono_array_length (D.32278);
        iftmp.248 = (gint32) D.32281;
        goto <D.32282>;
        <D.32280>:
        iftmp.248 = 0;
        <D.32282>:
        num_locals = iftmp.248;
        D.32272 = rmb->ilgen;
        D.32283 = D.32272->ex_handlers;
        if (D.32283 != 0B) goto <D.32284>; else goto <D.32285>;
        <D.32284>:
        D.32272 = rmb->ilgen;
        D.32286 = method_count_clauses (D.32272);
        num_clauses = (gint32) D.32286;
        <D.32285>:
        goto <D.32287>;
        <D.32274>:
        D.32288 = rmb->code;
        if (D.32288 != 0B) goto <D.32289>; else goto <D.32290>;
        <D.32289>:
        D.32288 = rmb->code;
        code = mono_array_addr_with_size (D.32288, 1, 0);
        D.32288 = rmb->code;
        code_size = mono_array_length (D.32288);
        max_stack = 8;
        goto <D.32291>;
        <D.32290>:
        code = 0B;
        code_size = 0;
        max_stack = 8;
        <D.32291>:
        <D.32287>:
        num_locals.249 = (unsigned int) num_locals;
        D.32293 = num_locals.249 + 5;
        D.32294 = D.32293 * 4;
        header = image_g_malloc0 (image, D.32294);
        header->code_size = code_size;
        D.32295 = image_g_malloc (image, code_size);
        header->code = D.32295;
        D.32296 = header->code;
        memcpy (D.32296, code, code_size);
        D.32297 = (short unsigned int) max_stack;
        D.32298 = (<unnamed-unsigned:15>) D.32297;
        header->max_stack = D.32298;
        D.32299 = rmb->init_locals;
        D.32300 = (<unnamed-unsigned:1>) D.32299;
        header->init_locals = D.32300;
        D.32301 = (short unsigned int) num_locals;
        header->num_locals = D.32301;
        i = 0;
        goto <D.25443>;
        <D.25442>:
        {
          struct MonoReflectionLocalBuilder * lb;

          D.32272 = rmb->ilgen;
          D.32278 = D.32272->locals;
          i.250 = (unsigned int) i;
          D.32303 = mono_array_addr_with_size (D.32278, 4, i.250);
          lb = MEM[(struct MonoReflectionLocalBuilder * *)D.32303];
          D.32304 = image_g_malloc0 (image, 8);
          header->locals[i] = D.32304;
          D.32305 = header->locals[i];
          D.32306 = lb->type;
          D.32307 = mono_reflection_type_get_handle (D.32306);
          memcpy (D.32305, D.32307, 8);
        }
        i = i + 1;
        <D.25443>:
        if (i < num_locals) goto <D.25442>; else goto <D.25444>;
        <D.25444>:
        D.32308 = (short unsigned int) num_clauses;
        D.32309 = (<unnamed-unsigned:15>) D.32308;
        header->num_clauses = D.32309;
        if (num_clauses != 0) goto <D.32310>; else goto <D.32311>;
        <D.32310>:
        D.32259 = klass->image;
        D.32272 = rmb->ilgen;
        num_clauses.251 = (unsigned int) num_clauses;
        D.32313 = method_encode_clauses (image, D.32259, D.32272, num_clauses.251);
        header->clauses = D.32313;
        <D.32311>:
        wrapperm->header = header;
      }
      <D.32271>:
      <D.32268>:
      <D.32218>:
      D.32314 = rmb->generic_params;
      if (D.32314 != 0B) goto <D.32315>; else goto <D.32316>;
      <D.32315>:
      {
        int count;
        struct MonoGenericContainer * container;

        D.32314 = rmb->generic_params;
        D.32317 = mono_array_length (D.32314);
        count = (int) D.32317;
        container = rmb->generic_container;
        D.32318 = container == 0B;
        D.32319 = (long int) D.32318;
        D.32320 = __builtin_expect (D.32319, 0);
        if (D.32320 != 0) goto <D.32321>; else goto <D.32322>;
        <D.32321>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10239, "container");
        <D.32322>:
        D.32323 = (<unnamed-signed:31>) count;
        container->type_argc = D.32323;
        count.252 = (unsigned int) count;
        D.32325 = count.252 * 32;
        D.32326 = image_g_malloc0 (image, D.32325);
        container->type_params = D.32326;
        container->owner.method = m;
        m->is_generic = 1;
        mono_method_set_generic_container (m, container);
        i = 0;
        goto <D.25450>;
        <D.25449>:
        {
          struct MonoReflectionGenericParam * gp;
          struct MonoGenericParamFull * param;

          D.32314 = rmb->generic_params;
          i.253 = (unsigned int) i;
          D.32328 = mono_array_addr_with_size (D.32314, 4, i.253);
          gp = MEM[(struct MonoReflectionGenericParam * *)D.32328];
          D.32329 = mono_reflection_type_get_handle (gp);
          param = D.32329->data.generic_param;
          D.32330 = container->type_params;
          i.254 = (unsigned int) i;
          D.32332 = i.254 * 32;
          D.32333 = D.32330 + D.32332;
          *D.32333 = *param;
        }
        i = i + 1;
        <D.25450>:
        if (i < count) goto <D.25449>; else goto <D.25451>;
        <D.25451>:
        i = 0;
        goto <D.25455>;
        <D.25454>:
        {
          struct MonoType * t;

          D.32217 = m->signature;
          t = D.32217->params[i];
          D.32334 = t->type;
          if (D.32334 == 30) goto <D.32335>; else goto <D.32336>;
          <D.32335>:
          {
            struct MonoGenericParam * gparam;

            gparam = t->data.generic_param;
            D.32337 = gparam->num;
            D.32338 = (int) D.32337;
            if (D.32338 < count) goto <D.32339>; else goto <D.32340>;
            <D.32339>:
            D.32217 = m->signature;
            D.32217 = m->signature;
            D.32341 = D.32217->params[i];
            D.32342 = mono_metadata_type_dup (image, D.32341);
            D.32217->params[i] = D.32342;
            D.32217 = m->signature;
            D.32341 = D.32217->params[i];
            D.32330 = container->type_params;
            D.32337 = gparam->num;
            D.32343 = (unsigned int) D.32337;
            D.32344 = D.32343 * 32;
            D.32345 = D.32330 + D.32344;
            D.32341->data.generic_param = D.32345;
            <D.32340>:
          }
          <D.32336>:
        }
        i = i + 1;
        <D.25455>:
        D.32217 = m->signature;
        D.32346 = D.32217->param_count;
        D.32347 = (int) D.32346;
        if (D.32347 > i) goto <D.25454>; else goto <D.25456>;
        <D.25456>:
        D.32348 = klass->generic_container;
        if (D.32348 != 0B) goto <D.32349>; else goto <D.32350>;
        <D.32349>:
        D.32348 = klass->generic_container;
        container->parent = D.32348;
        D.32348 = klass->generic_container;
        D.32351 = D.32348->context.class_inst;
        container->context.class_inst = D.32351;
        <D.32350>:
        D.32352 = mono_get_shared_generic_inst (container);
        container->context.method_inst = D.32352;
      }
      <D.32316>:
      D.32131 = rmb->refs;
      if (D.32131 != 0B) goto <D.32353>; else goto <D.32354>;
      <D.32353>:
      {
        struct MonoMethodWrapper * mw;
        int i;
        void * * data;

        mw = m;
        m->wrapper_type = 17;
        D.32355 = rmb->nrefs;
        D.32356 = D.32355 + 1;
        D.32357 = D.32356 * 4;
        data = image_g_malloc (image, D.32357);
        mw->method_data = data;
        D.32355 = rmb->nrefs;
        D.32358 = (void *) D.32355;
        *data = D.32358;
        i = 0;
        goto <D.25461>;
        <D.25460>:
        i.255 = (sizetype) i;
        D.32360 = i.255 + 1;
        D.32361 = D.32360 * 4;
        D.32362 = data + D.32361;
        D.32131 = rmb->refs;
        i.256 = (unsigned int) i;
        D.32364 = i.256 * 4;
        D.32365 = D.32131 + D.32364;
        D.32366 = *D.32365;
        *D.32362 = D.32366;
        i = i + 1;
        <D.25461>:
        i.257 = (unsigned int) i;
        D.32355 = rmb->nrefs;
        if (i.257 < D.32355) goto <D.25460>; else goto <D.25462>;
        <D.25462>:
      }
      <D.32354>:
      method_aux = 0B;
      D.32368 = rmb->pinfo;
      if (D.32368 != 0B) goto <D.32369>; else goto <D.32370>;
      <D.32369>:
      if (method_aux == 0B) goto <D.32371>; else goto <D.32372>;
      <D.32371>:
      method_aux = image_g_malloc0 (image, 28);
      <D.32372>:
      D.32373 = mono_method_signature (m);
      D.32374 = D.32373->param_count;
      D.32375 = (int) D.32374;
      D.32376 = D.32375 + 1;
      D.32377 = (unsigned int) D.32376;
      D.32378 = D.32377 * 4;
      D.32379 = image_g_malloc0 (image, D.32378);
      method_aux->param_names = D.32379;
      i = 0;
      goto <D.25471>;
      <D.25470>:
      {
        struct MonoReflectionParamBuilder * pb;

        D.32368 = rmb->pinfo;
        i.253 = (unsigned int) i;
        D.32380 = mono_array_addr_with_size (D.32368, 4, i.253);
        pb = MEM[(struct MonoReflectionParamBuilder * *)D.32380];
        if (pb != 0B) goto <D.32381>; else goto <D.32382>;
        <D.32381>:
        if (i > 0) goto <D.32383>; else goto <D.32384>;
        <D.32383>:
        D.32385 = pb->attrs;
        if (D.32385 != 0) goto <D.32386>; else goto <D.32387>;
        <D.32386>:
        D.32217 = m->signature;
        D.32388 = i + -1;
        D.32259 = klass->image;
        D.32217 = m->signature;
        D.32388 = i + -1;
        D.32389 = D.32217->params[D.32388];
        D.32390 = mono_metadata_type_dup (D.32259, D.32389);
        D.32217->params[D.32388] = D.32390;
        D.32217 = m->signature;
        D.32388 = i + -1;
        D.32389 = D.32217->params[D.32388];
        D.32385 = pb->attrs;
        D.32391 = (short unsigned int) D.32385;
        D.32389->attrs = D.32391;
        <D.32387>:
        <D.32384>:
        D.32385 = pb->attrs;
        D.32392 = D.32385 & 4096;
        if (D.32392 != 0) goto <D.32393>; else goto <D.32394>;
        <D.32393>:
        {
          struct MonoDynamicImage * assembly;
          guint32 idx;
          guint32 def_type;
          guint32 len;
          char * p;
          const char * p2;

          try
            {
              D.32395 = method_aux->param_defaults;
              if (D.32395 == 0B) goto <D.32396>; else goto <D.32397>;
              <D.32396>:
              D.32217 = m->signature;
              D.32346 = D.32217->param_count;
              D.32347 = (int) D.32346;
              D.32398 = D.32347 + 1;
              D.32399 = (unsigned int) D.32398;
              D.32400 = D.32399 * 4;
              D.32401 = image_g_malloc0 (image, D.32400);
              method_aux->param_defaults = D.32401;
              D.32217 = m->signature;
              D.32346 = D.32217->param_count;
              D.32347 = (int) D.32346;
              D.32398 = D.32347 + 1;
              D.32399 = (unsigned int) D.32398;
              D.32400 = D.32399 * 4;
              D.32402 = image_g_malloc0 (image, D.32400);
              method_aux->param_default_types = D.32402;
              <D.32397>:
              assembly = klass->image;
              D.32403 = pb->def_value;
              idx = encode_constant (assembly, D.32403, &def_type);
              D.32404 = assembly->blob.data;
              p = D.32404 + idx;
              len = mono_metadata_decode_blob_size (p, &p2);
              p2.258 = p2;
              p2.259 = (int) p2.258;
              p.260 = (int) p;
              D.32408 = p2.259 - p.260;
              D.32409 = (unsigned int) D.32408;
              len = D.32409 + len;
              D.32395 = method_aux->param_defaults;
              i.254 = (unsigned int) i;
              D.32410 = i.254 * 4;
              D.32411 = D.32395 + D.32410;
              D.32412 = image_g_malloc (image, len);
              *D.32411 = D.32412;
              D.32413 = method_aux->param_default_types;
              i.254 = (unsigned int) i;
              D.32410 = i.254 * 4;
              D.32414 = D.32413 + D.32410;
              def_type.261 = def_type;
              *D.32414 = def_type.261;
              D.32395 = method_aux->param_defaults;
              i.254 = (unsigned int) i;
              D.32410 = i.254 * 4;
              D.32411 = D.32395 + D.32410;
              D.32416 = *D.32411;
              memcpy (D.32416, p, len);
            }
          finally
            {
              def_type = {CLOBBER};
              p2 = {CLOBBER};
            }
        }
        <D.32394>:
        D.32417 = pb->name;
        if (D.32417 != 0B) goto <D.32418>; else goto <D.32419>;
        <D.32418>:
        D.32420 = method_aux->param_names;
        i.254 = (unsigned int) i;
        D.32410 = i.254 * 4;
        D.32421 = D.32420 + D.32410;
        D.32417 = pb->name;
        D.32422 = mono_string_to_utf8_image (image, D.32417, &error);
        *D.32421 = D.32422;
        D.32423 = mono_error_ok (&error);
        D.32424 = D.32423 == 0;
        D.32425 = (long int) D.32424;
        D.32426 = __builtin_expect (D.32425, 0);
        if (D.32426 != 0) goto <D.32427>; else goto <D.32428>;
        <D.32427>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10331, "mono_error_ok (&error)");
        <D.32428>:
        <D.32419>:
        D.32429 = pb->cattrs;
        if (D.32429 != 0B) goto <D.32430>; else goto <D.32431>;
        <D.32430>:
        D.32432 = method_aux->param_cattr;
        if (D.32432 == 0B) goto <D.32433>; else goto <D.32434>;
        <D.32433>:
        D.32217 = m->signature;
        D.32346 = D.32217->param_count;
        D.32347 = (int) D.32346;
        D.32398 = D.32347 + 1;
        D.32399 = (unsigned int) D.32398;
        D.32400 = D.32399 * 4;
        D.32435 = image_g_malloc0 (image, D.32400);
        method_aux->param_cattr = D.32435;
        <D.32434>:
        D.32432 = method_aux->param_cattr;
        i.254 = (unsigned int) i;
        D.32410 = i.254 * 4;
        D.32436 = D.32432 + D.32410;
        D.32259 = klass->image;
        D.32429 = pb->cattrs;
        D.32437 = mono_custom_attrs_from_builders (image, D.32259, D.32429);
        *D.32436 = D.32437;
        <D.32431>:
        <D.32382>:
      }
      i = i + 1;
      <D.25471>:
      D.32217 = m->signature;
      D.32346 = D.32217->param_count;
      D.32347 = (int) D.32346;
      if (D.32347 >= i) goto <D.25470>; else goto <D.25472>;
      <D.25472>:
      <D.32370>:
      specs = 0B;
      D.32368 = rmb->pinfo;
      if (D.32368 != 0B) goto <D.32438>; else goto <D.32439>;
      <D.32438>:
      i = 0;
      goto <D.25475>;
      <D.25474>:
      {
        struct MonoReflectionParamBuilder * pb;

        D.32368 = rmb->pinfo;
        i.253 = (unsigned int) i;
        D.32440 = mono_array_addr_with_size (D.32368, 4, i.253);
        pb = MEM[(struct MonoReflectionParamBuilder * *)D.32440];
        if (pb != 0B) goto <D.32441>; else goto <D.32442>;
        <D.32441>:
        D.32443 = pb->marshal_info;
        if (D.32443 != 0B) goto <D.32444>; else goto <D.32445>;
        <D.32444>:
        if (specs == 0B) goto <D.32446>; else goto <D.32447>;
        <D.32446>:
        D.32448 = sig->param_count;
        D.32449 = (int) D.32448;
        D.32450 = D.32449 + 1;
        D.32451 = (unsigned int) D.32450;
        D.32452 = D.32451 * 4;
        specs = image_g_malloc0 (image, D.32452);
        <D.32447>:
        D.32453 = pb->position;
        D.32454 = (unsigned int) D.32453;
        D.32455 = D.32454 * 4;
        D.32456 = specs + D.32455;
        D.32259 = klass->image;
        D.32457 = D.32259->assembly;
        D.32443 = pb->marshal_info;
        D.32458 = mono_marshal_spec_from_builder (image, D.32457, D.32443);
        *D.32456 = D.32458;
        <D.32445>:
        <D.32442>:
      }
      i = i + 1;
      <D.25475>:
      i.253 = (unsigned int) i;
      D.32368 = rmb->pinfo;
      D.32459 = mono_array_length (D.32368);
      if (i.253 < D.32459) goto <D.25474>; else goto <D.25476>;
      <D.25476>:
      <D.32439>:
      if (specs != 0B) goto <D.32460>; else goto <D.32461>;
      <D.32460>:
      if (method_aux == 0B) goto <D.32462>; else goto <D.32463>;
      <D.32462>:
      method_aux = image_g_malloc0 (image, 28);
      <D.32463>:
      method_aux->param_marshall = specs;
      <D.32461>:
      D.32259 = klass->image;
      D.32260 = BIT_FIELD_REF <*D.32259, 8, 128>;
      D.32261 = D.32260 & 8;
      if (D.32261 != 0) goto <D.32464>; else goto <D.32465>;
      <D.32464>:
      if (method_aux != 0B) goto <D.32466>; else goto <D.32467>;
      <D.32466>:
      D.32259 = klass->image;
      D.32264 = MEM[(struct MonoDynamicImage *)D.32259].method_aux_hash;
      monoeg_g_hash_table_insert_replace (D.32264, m, method_aux, 0);
      <D.32467>:
      <D.32465>:
      mono_loader_unlock ();
      D.32265 = m;
      return D.32265;
    }
  finally
    {
      error = {CLOBBER};
    }
}


image_strdup (struct MonoImage * image, const char * s)
{
  char * D.32472;

  if (image != 0B) goto <D.32470>; else goto <D.32471>;
  <D.32470>:
  D.32472 = mono_image_strdup (image, s);
  return D.32472;
  <D.32471>:
  D.32472 = monoeg_strdup (s);
  return D.32472;
}


method_encode_clauses (struct MonoImage * image, struct MonoDynamicImage * assembly, struct MonoReflectionILGen * ilgen, guint32 num_clauses)
{
  unsigned int D.32474;
  struct MonoArray * D.32475;
  unsigned int D.32476;
  unsigned int D.32477;
  unsigned int i.262;
  int D.32479;
  int D.32480;
  int D.32481;
  struct MonoArray * D.32482;
  unsigned int j.263;
  unsigned int clause_index.264;
  unsigned int D.32487;
  int D.32488;
  unsigned int D.32489;
  unsigned int D.32490;
  unsigned int D.32493;
  unsigned int D.32494;
  unsigned int D.32496;
  int D.32497;
  unsigned int D.32498;
  int D.32499;
  unsigned int D.32500;
  struct MonoObject * D.32501;
  struct MonoType * D.32504;
  struct MonoClass * D.32505;
  int D.32509;
  unsigned int D.32510;
  int D.32512;
  unsigned int D.32513;
  struct MonoExceptionClause * D.32514;
  struct MonoExceptionClause * clauses;
  struct MonoExceptionClause * clause;
  struct MonoILExceptionInfo * ex_info;
  struct MonoILExceptionBlock * ex_block;
  guint32 finally_start;
  int i;
  int j;
  int clause_index;

  D.32474 = num_clauses * 24;
  clauses = image_g_malloc0 (image, D.32474);
  clause_index = 0;
  D.32475 = ilgen->ex_handlers;
  D.32476 = mono_array_length (D.32475);
  D.32477 = D.32476 + 4294967295;
  i = (int) D.32477;
  goto <D.21156>;
  <D.21155>:
  D.32475 = ilgen->ex_handlers;
  i.262 = (unsigned int) i;
  ex_info = mono_array_addr_with_size (D.32475, 16, i.262);
  D.32479 = ex_info->start;
  D.32480 = ex_info->len;
  D.32481 = D.32479 + D.32480;
  finally_start = (guint32) D.32481;
  D.32482 = ex_info->handlers;
  if (D.32482 == 0B) goto <D.32483>; else goto <D.32484>;
  <D.32483>:
  // predicted unlikely by continue predictor.
  goto <D.21151>;
  <D.32484>:
  j = 0;
  goto <D.21153>;
  <D.21152>:
  D.32482 = ex_info->handlers;
  j.263 = (unsigned int) j;
  ex_block = mono_array_addr_with_size (D.32482, 20, j.263);
  clause_index.264 = (unsigned int) clause_index;
  D.32487 = clause_index.264 * 24;
  clause = clauses + D.32487;
  D.32488 = ex_block->type;
  D.32489 = (unsigned int) D.32488;
  clause->flags = D.32489;
  D.32479 = ex_info->start;
  D.32490 = (unsigned int) D.32479;
  clause->try_offset = D.32490;
  D.32488 = ex_block->type;
  if (D.32488 == 2) goto <D.32491>; else goto <D.32492>;
  <D.32491>:
  D.32479 = ex_info->start;
  D.32493 = (unsigned int) D.32479;
  D.32494 = finally_start - D.32493;
  clause->try_len = D.32494;
  goto <D.32495>;
  <D.32492>:
  D.32480 = ex_info->len;
  D.32496 = (unsigned int) D.32480;
  clause->try_len = D.32496;
  <D.32495>:
  D.32497 = ex_block->start;
  D.32498 = (unsigned int) D.32497;
  clause->handler_offset = D.32498;
  D.32499 = ex_block->len;
  D.32500 = (unsigned int) D.32499;
  clause->handler_len = D.32500;
  D.32501 = ex_block->extype;
  if (D.32501 != 0B) goto <D.32502>; else goto <D.32503>;
  <D.32502>:
  D.32501 = ex_block->extype;
  D.32504 = mono_reflection_type_get_handle (D.32501);
  D.32505 = mono_class_from_mono_type (D.32504);
  clause->data.catch_class = D.32505;
  goto <D.32506>;
  <D.32503>:
  D.32488 = ex_block->type;
  if (D.32488 == 1) goto <D.32507>; else goto <D.32508>;
  <D.32507>:
  D.32509 = ex_block->filter_offset;
  D.32510 = (unsigned int) D.32509;
  clause->data.filter_offset = D.32510;
  goto <D.32511>;
  <D.32508>:
  clause->data.filter_offset = 0;
  <D.32511>:
  <D.32506>:
  D.32497 = ex_block->start;
  D.32499 = ex_block->len;
  D.32512 = D.32497 + D.32499;
  finally_start = (guint32) D.32512;
  clause_index = clause_index + 1;
  j = j + 1;
  <D.21153>:
  j.263 = (unsigned int) j;
  D.32482 = ex_info->handlers;
  D.32513 = mono_array_length (D.32482);
  if (j.263 < D.32513) goto <D.21152>; else goto <D.21154>;
  <D.21154>:
  <D.21151>:
  i = i + -1;
  <D.21156>:
  if (i >= 0) goto <D.21155>; else goto <D.21157>;
  <D.21157>:
  D.32514 = clauses;
  return D.32514;
}


image_g_malloc (struct MonoImage * image, guint size)
{
  void * D.32518;

  if (image != 0B) goto <D.32516>; else goto <D.32517>;
  <D.32516>:
  D.32518 = mono_image_alloc (image, size);
  return D.32518;
  <D.32517>:
  D.32518 = monoeg_malloc (size);
  return D.32518;
}


mono_custom_attrs_from_builders (struct MonoImage * alloc_img, struct MonoImage * image, struct MonoArray * cattrs)
{
  struct MonoCustomAttrInfo * D.32522;
  unsigned int D.32523;
  unsigned int i.265;
  char * D.32525;
  int D.32526;
  unsigned int count.266;
  unsigned int D.32530;
  unsigned int D.32531;
  _Bool D.32532;
  int D.32533;
  char * D.32534;
  int D.32535;
  struct MonoArray * D.32538;
  unsigned int D.32539;
  char * D.32540;
  unsigned int D.32541;
  struct MonoReflectionMethod * D.32542;
  struct MonoMethod * D.32543;
  unsigned int D.32544;
  int i;
  int index;
  int count;
  int not_visible;
  struct MonoCustomAttrInfo * ainfo;
  struct MonoReflectionCustomAttr * cattr;

  if (cattrs == 0B) goto <D.32520>; else goto <D.32521>;
  <D.32520>:
  D.32522 = 0B;
  return D.32522;
  <D.32521>:
  D.32523 = mono_array_length (cattrs);
  count = (int) D.32523;
  not_visible = 0;
  i = 0;
  goto <D.21228>;
  <D.21227>:
  i.265 = (unsigned int) i;
  D.32525 = mono_array_addr_with_size (cattrs, 4, i.265);
  cattr = MEM[(void * *)D.32525];
  D.32526 = custom_attr_visible (image, cattr);
  if (D.32526 == 0) goto <D.32527>; else goto <D.32528>;
  <D.32527>:
  not_visible = not_visible + 1;
  <D.32528>:
  i = i + 1;
  <D.21228>:
  if (i < count) goto <D.21227>; else goto <D.21229>;
  <D.21229>:
  count = count - not_visible;
  count.266 = (unsigned int) count;
  D.32530 = count.266 + 1;
  D.32531 = D.32530 * 12;
  ainfo = image_g_malloc0 (alloc_img, D.32531);
  ainfo->image = image;
  ainfo->num_attrs = count;
  D.32532 = alloc_img != 0B;
  D.32533 = (int) D.32532;
  ainfo->cached = D.32533;
  index = 0;
  i = 0;
  goto <D.21232>;
  <D.21231>:
  i.265 = (unsigned int) i;
  D.32534 = mono_array_addr_with_size (cattrs, 4, i.265);
  cattr = MEM[(void * *)D.32534];
  D.32535 = custom_attr_visible (image, cattr);
  if (D.32535 != 0) goto <D.32536>; else goto <D.32537>;
  <D.32536>:
  {
    unsigned char * saved;

    D.32538 = cattr->data;
    D.32539 = mono_array_length (D.32538);
    saved = mono_image_alloc (image, D.32539);
    D.32538 = cattr->data;
    D.32540 = mono_array_addr_with_size (D.32538, 1, 0);
    D.32538 = cattr->data;
    D.32541 = mono_array_length (D.32538);
    memcpy (saved, D.32540, D.32541);
    D.32542 = cattr->ctor;
    D.32543 = D.32542->method;
    ainfo->attrs[index].ctor = D.32543;
    ainfo->attrs[index].data = saved;
    D.32538 = cattr->data;
    D.32544 = mono_array_length (D.32538);
    ainfo->attrs[index].data_size = D.32544;
    index = index + 1;
  }
  <D.32537>:
  i = i + 1;
  <D.21232>:
  if (i < count) goto <D.21231>; else goto <D.21233>;
  <D.21233>:
  D.32522 = ainfo;
  return D.32522;
}


custom_attr_visible (struct MonoImage * image, struct MonoReflectionCustomAttr * cattr)
{
  struct MonoReflectionMethod * D.32546;
  struct MonoMethod * D.32547;
  struct MonoClass * D.32550;
  struct MonoImage * D.32551;
  unsigned int D.32554;
  int D.32555;
  unsigned int visibility.267;
  unsigned int D.32557;
  gboolean D.32560;

  D.32546 = cattr->ctor;
  D.32547 = D.32546->method;
  if (D.32547 != 0B) goto <D.32548>; else goto <D.32549>;
  <D.32548>:
  D.32546 = cattr->ctor;
  D.32547 = D.32546->method;
  D.32550 = D.32547->klass;
  D.32551 = D.32550->image;
  if (D.32551 != image) goto <D.32552>; else goto <D.32553>;
  <D.32552>:
  {
    int visibility;

    D.32546 = cattr->ctor;
    D.32547 = D.32546->method;
    D.32550 = D.32547->klass;
    D.32554 = D.32550->flags;
    D.32555 = (int) D.32554;
    visibility = D.32555 & 7;
    visibility.267 = (unsigned int) visibility;
    D.32557 = visibility.267 + 4294967295;
    if (D.32557 > 1) goto <D.32558>; else goto <D.32559>;
    <D.32558>:
    D.32560 = 0;
    return D.32560;
    <D.32559>:
  }
  <D.32553>:
  <D.32549>:
  D.32560 = 1;
  return D.32560;
}


mono_marshal_spec_from_builder (struct MonoImage * image, struct MonoAssembly * assembly, struct MonoReflectionMarshal * minfo)
{
  int D.32562;
  <unnamed type> D.32563;
  int D.32564;
  <unnamed type> D.32565;
  unsigned char D.32566;
  int D.32569;
  short int D.32570;
  int D.32571;
  _Bool D.32572;
  short int D.32573;
  struct MonoObject * D.32575;
  struct MonoType * D.32578;
  char * D.32579;
  struct MonoString * D.32580;
  char * D.32583;
  struct MonoMarshalSpec * D.32584;
  struct MonoMarshalSpec * res;

  res = image_g_malloc0 (image, 16);
  D.32562 = minfo->type;
  D.32563 = (<unnamed type>) D.32562;
  res->native = D.32563;
  D.32562 = minfo->type;
  switch (D.32562) <default: <D.25397>, case 23: <D.25394>, case 30: <D.25395>, case 42: <D.25392>, case 44: <D.25396>>
  <D.25392>:
  D.32564 = minfo->eltype;
  D.32565 = (<unnamed type>) D.32564;
  res->data.array_data.elem_type = D.32565;
  D.32566 = minfo->has_size;
  if (D.32566 != 0) goto <D.32567>; else goto <D.32568>;
  <D.32567>:
  D.32569 = minfo->param_num;
  D.32570 = (short int) D.32569;
  res->data.array_data.param_num = D.32570;
  D.32571 = minfo->count;
  res->data.array_data.num_elem = D.32571;
  D.32569 = minfo->param_num;
  D.32572 = D.32569 != -1;
  D.32573 = (short int) D.32572;
  res->data.array_data.elem_mult = D.32573;
  goto <D.32574>;
  <D.32568>:
  res->data.array_data.param_num = -1;
  res->data.array_data.num_elem = -1;
  res->data.array_data.elem_mult = -1;
  <D.32574>:
  goto <D.25393>;
  <D.25394>:
  <D.25395>:
  D.32571 = minfo->count;
  res->data.array_data.num_elem = D.32571;
  goto <D.25393>;
  <D.25396>:
  D.32575 = minfo->marshaltyperef;
  if (D.32575 != 0B) goto <D.32576>; else goto <D.32577>;
  <D.32576>:
  D.32575 = minfo->marshaltyperef;
  D.32578 = mono_reflection_type_get_handle (D.32575);
  D.32579 = type_get_fully_qualified_name (D.32578);
  res->data.custom_data.custom_name = D.32579;
  <D.32577>:
  D.32580 = minfo->mcookie;
  if (D.32580 != 0B) goto <D.32581>; else goto <D.32582>;
  <D.32581>:
  D.32580 = minfo->mcookie;
  D.32583 = mono_string_to_utf8 (D.32580);
  res->data.custom_data.cookie = D.32583;
  <D.32582>:
  goto <D.25393>;
  <D.25397>:
  goto <D.25393>;
  <D.25393>:
  D.32584 = res;
  return D.32584;
}


mono_save_custom_attrs (struct MonoImage * image, void * obj, struct MonoArray * cattrs)
{
  unsigned int D.32590;
  struct MonoCustomAttrInfo * ainfo;
  struct MonoCustomAttrInfo * tmp;

  if (cattrs == 0B) goto <D.32587>; else goto <D.32589>;
  <D.32589>:
  D.32590 = mono_array_length (cattrs);
  if (D.32590 == 0) goto <D.32587>; else goto <D.32588>;
  <D.32587>:
  return;
  <D.32588>:
  ainfo = mono_custom_attrs_from_builders (image, image, cattrs);
  mono_loader_lock ();
  tmp = mono_image_property_lookup (image, obj, 4096);
  if (tmp != 0B) goto <D.32591>; else goto <D.32592>;
  <D.32591>:
  mono_custom_attrs_free (tmp);
  <D.32592>:
  mono_image_property_insert (image, obj, 4096, ainfo);
  mono_loader_unlock ();
}


ctorbuilder_to_mono_method (struct MonoClass * klass, struct MonoReflectionCtorBuilder * mb)
{
  struct MonoImage * D.32594;
  struct MonoMethod * D.32595;
  struct MonoMethod * D.32596;
  struct MonoArray * D.32597;
  int D.32598;
  struct MonoGenericContainer * D.32601;
  struct MonoMethod * D.32604;
  struct ReflectionMethodBuilder rmb;
  struct MonoMethodSignature * sig;

  try
    {
      mono_loader_lock ();
      D.32594 = klass->image;
      sig = ctor_builder_to_signature (D.32594, mb);
      mono_loader_unlock ();
      reflection_methodbuilder_from_ctor_builder (&rmb, mb);
      D.32595 = reflection_methodbuilder_to_mono_method (klass, &rmb, sig);
      mb->mhandle = D.32595;
      D.32594 = klass->image;
      D.32596 = mb->mhandle;
      D.32597 = mb->cattrs;
      mono_save_custom_attrs (D.32594, D.32596, D.32597);
      D.32594 = klass->image;
      D.32598 = MEM[(struct MonoDynamicImage *)D.32594].save;
      if (D.32598 == 0) goto <D.32599>; else goto <D.32600>;
      <D.32599>:
      D.32601 = klass->generic_container;
      if (D.32601 == 0B) goto <D.32602>; else goto <D.32603>;
      <D.32602>:
      mb->ilgen = 0B;
      <D.32603>:
      <D.32600>:
      D.32604 = mb->mhandle;
      return D.32604;
    }
  finally
    {
      rmb = {CLOBBER};
    }
}


ctor_builder_to_signature (struct MonoImage * image, struct MonoReflectionCtorBuilder * ctor)
{
  struct MonoArray * D.32607;
  unsigned int D.32608;
  unsigned int D.32609;
  _Bool D.32610;
  struct MonoClass * D.32611;
  struct MonoType * D.32612;
  struct MonoMethodSignature * D.32613;
  struct MonoMethodSignature * sig;

  D.32607 = ctor->parameters;
  sig = parameters_to_signature (image, D.32607);
  D.32608 = ctor->attrs;
  D.32609 = D.32608 & 16;
  D.32610 = D.32609 == 0;
  sig->hasthis = D.32610;
  D.32611 = mono_defaults.void_class;
  D.32612 = &D.32611->byval_arg;
  sig->ret = D.32612;
  D.32613 = sig;
  return D.32613;
}


inflate_mono_method (struct MonoClass * klass, struct MonoMethod * method, struct MonoObject * obj)
{
  struct MonoGenericClass * D.32615;
  struct MonoMethod * D.32618;
  unsigned int D.32621;
  struct MonoMethod * * D.32623;
  unsigned int i.268;
  unsigned int D.32626;
  struct MonoMethod * * D.32627;
  struct MonoMethod * D.32628;
  unsigned char D.32629;
  unsigned char D.32630;
  _Bool D.32631;
  long int D.32632;
  long int D.32633;
  struct MonoMethod * D.32636;
  unsigned int i.269;
  _Bool D.32639;
  long int D.32640;
  long int D.32641;
  unsigned char D.32644;
  unsigned char D.32645;
  struct MonoClass * D.32648;
  struct MonoImage * D.32649;
  unsigned char D.32650;
  unsigned char D.32651;
  struct MonoGHashTable * D.32654;
  struct MonoMethodInflated * imethod;
  struct MonoGenericContext * context;
  int i;

  D.32615 = klass->generic_class;
  if (D.32615 == 0B) goto <D.32616>; else goto <D.32617>;
  <D.32616>:
  D.32618 = method;
  return D.32618;
  <D.32617>:
  context = mono_class_get_context (klass);
  D.32621 = klass->method.count;
  if (D.32621 != 0) goto <D.32622>; else goto <D.32619>;
  <D.32622>:
  D.32623 = klass->methods;
  if (D.32623 != 0B) goto <D.32624>; else goto <D.32619>;
  <D.32624>:
  i = 0;
  goto <D.25556>;
  <D.25555>:
  D.32623 = klass->methods;
  i.268 = (unsigned int) i;
  D.32626 = i.268 * 4;
  D.32627 = D.32623 + D.32626;
  D.32628 = *D.32627;
  D.32629 = BIT_FIELD_REF <*D.32628, 8, 168>;
  D.32630 = D.32629 & 16;
  D.32631 = D.32630 == 0;
  D.32632 = (long int) D.32631;
  D.32633 = __builtin_expect (D.32632, 0);
  if (D.32633 != 0) goto <D.32634>; else goto <D.32635>;
  <D.32634>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10611, "klass->methods [i]->is_inflated");
  <D.32635>:
  D.32623 = klass->methods;
  i.268 = (unsigned int) i;
  D.32626 = i.268 * 4;
  D.32627 = D.32623 + D.32626;
  D.32628 = *D.32627;
  D.32636 = MEM[(struct MonoMethodInflated *)D.32628].declaring;
  if (D.32636 == method) goto <D.25554>; else goto <D.32637>;
  <D.32637>:
  i = i + 1;
  <D.25556>:
  i.269 = (unsigned int) i;
  D.32621 = klass->method.count;
  if (i.269 < D.32621) goto <D.25555>; else goto <D.25554>;
  <D.25554>:
  i.269 = (unsigned int) i;
  D.32621 = klass->method.count;
  D.32639 = i.269 >= D.32621;
  D.32640 = (long int) D.32639;
  D.32641 = __builtin_expect (D.32640, 0);
  if (D.32641 != 0) goto <D.32642>; else goto <D.32643>;
  <D.32642>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10615, "i < klass->method.count");
  <D.32643>:
  D.32623 = klass->methods;
  i.268 = (unsigned int) i;
  D.32626 = i.268 * 4;
  D.32627 = D.32623 + D.32626;
  imethod = *D.32627;
  goto <D.32620>;
  <D.32619>:
  imethod = mono_class_inflate_generic_method_full (method, klass, context);
  <D.32620>:
  D.32644 = BIT_FIELD_REF <*method, 8, 168>;
  D.32645 = D.32644 & 8;
  if (D.32645 != 0) goto <D.32646>; else goto <D.32647>;
  <D.32646>:
  D.32648 = method->klass;
  D.32649 = D.32648->image;
  D.32650 = BIT_FIELD_REF <*D.32649, 8, 128>;
  D.32651 = D.32650 & 8;
  if (D.32651 != 0) goto <D.32652>; else goto <D.32653>;
  <D.32652>:
  {
    struct MonoDynamicImage * image;

    D.32648 = method->klass;
    image = D.32648->image;
    mono_image_lock (image);
    D.32654 = image->generic_def_objects;
    mono_g_hash_table_insert (D.32654, imethod, obj);
    mono_image_unlock (image);
  }
  <D.32653>:
  <D.32647>:
  D.32618 = imethod;
  return D.32618;
}


is_sre_method_builder (struct MonoClass * class)
{
  struct MonoClass * cached_class.270;
  gboolean D.32659;
  _Bool D.32660;
  int D.32661;
  int D.24801;
  int iftmp.271;
  int D.24797;
  const char[14] * D.32667;
  unsigned char D.32668;
  int D.32669;
  unsigned char D.32670;
  int D.32671;
  _Bool D.32672;
  _Bool D.32673;
  _Bool D.32674;
  const unsigned char * D.32677;
  unsigned char D.32678;
  int D.32679;
  const unsigned char * D.32680;
  unsigned char D.32681;
  int D.32682;
  _Bool D.32683;
  _Bool D.32684;
  const unsigned char * D.32687;
  unsigned char D.32688;
  int D.32689;
  const unsigned char * D.32690;
  unsigned char D.32691;
  int D.32692;
  _Bool D.32693;
  _Bool D.32694;
  const unsigned char * D.32697;
  unsigned char D.32698;
  int D.32699;
  const unsigned char * D.32700;
  unsigned char D.32701;
  int D.32702;
  const char * D.32704;
  int D.24810;
  int iftmp.272;
  int D.24806;
  const char[23] * D.32710;
  unsigned char D.32711;
  int D.32712;
  unsigned char D.32713;
  int D.32714;
  _Bool D.32715;
  _Bool D.32716;
  _Bool D.32717;
  const unsigned char * D.32720;
  unsigned char D.32721;
  int D.32722;
  const unsigned char * D.32723;
  unsigned char D.32724;
  int D.32725;
  _Bool D.32726;
  _Bool D.32727;
  const unsigned char * D.32730;
  unsigned char D.32731;
  int D.32732;
  const unsigned char * D.32733;
  unsigned char D.32734;
  int D.32735;
  _Bool D.32736;
  _Bool D.32737;
  const unsigned char * D.32740;
  unsigned char D.32741;
  int D.32742;
  const unsigned char * D.32743;
  unsigned char D.32744;
  int D.32745;
  const char * D.32747;

  {
    static struct MonoClass * cached_class;

    cached_class.270 = cached_class;
    if (cached_class.270 != 0B) goto <D.32657>; else goto <D.32658>;
    <D.32657>:
    cached_class.270 = cached_class;
    D.32660 = cached_class.270 == class;
    D.32659 = (gboolean) D.32660;
    return D.32659;
    <D.32658>:
    D.32661 = is_corlib_type (class);
    if (D.32661 != 0) goto <D.32662>; else goto <D.32663>;
    <D.32662>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 13;
      if (__s1_len <= 3) goto <D.32665>; else goto <D.32666>;
      <D.32665>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.32667 = "MethodBuilder";
        D.32668 = MEM[(const unsigned char *)D.32667];
        D.32669 = (int) D.32668;
        D.32670 = *__s2;
        D.32671 = (int) D.32670;
        __result = D.32669 - D.32671;
        {
          D.32672 = __s1_len != 0;
          D.32673 = __result == 0;
          D.32674 = D.32672 & D.32673;
          if (D.32674 != 0) goto <D.32675>; else goto <D.32676>;
          <D.32675>:
          D.32677 = &MEM[(void *)"MethodBuilder" + 1B];
          D.32678 = *D.32677;
          D.32679 = (int) D.32678;
          D.32680 = __s2 + 1;
          D.32681 = *D.32680;
          D.32682 = (int) D.32681;
          __result = D.32679 - D.32682;
          D.32683 = __s1_len > 1;
          D.32673 = __result == 0;
          D.32684 = D.32683 & D.32673;
          if (D.32684 != 0) goto <D.32685>; else goto <D.32686>;
          <D.32685>:
          D.32687 = &MEM[(void *)"MethodBuilder" + 2B];
          D.32688 = *D.32687;
          D.32689 = (int) D.32688;
          D.32690 = __s2 + 2;
          D.32691 = *D.32690;
          D.32692 = (int) D.32691;
          __result = D.32689 - D.32692;
          D.32693 = __s1_len > 2;
          D.32673 = __result == 0;
          D.32694 = D.32693 & D.32673;
          if (D.32694 != 0) goto <D.32695>; else goto <D.32696>;
          <D.32695>:
          D.32697 = &MEM[(void *)"MethodBuilder" + 3B];
          D.32698 = *D.32697;
          D.32699 = (int) D.32698;
          D.32700 = __s2 + 3;
          D.32701 = *D.32700;
          D.32702 = (int) D.32701;
          __result = D.32699 - D.32702;
          <D.32696>:
          <D.32686>:
          <D.32676>:
        }
        D.24797 = __result;
      }
      iftmp.271 = D.24797;
      goto <D.32703>;
      <D.32666>:
      D.32704 = class->name;
      iftmp.271 = __builtin_strcmp ("MethodBuilder", D.32704);
      <D.32703>:
      D.24801 = iftmp.271;
    }
    if (D.24801 == 0) goto <D.32705>; else goto <D.32706>;
    <D.32705>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 22;
      if (__s1_len <= 3) goto <D.32708>; else goto <D.32709>;
      <D.32708>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.32710 = "System.Reflection.Emit";
        D.32711 = MEM[(const unsigned char *)D.32710];
        D.32712 = (int) D.32711;
        D.32713 = *__s2;
        D.32714 = (int) D.32713;
        __result = D.32712 - D.32714;
        {
          D.32715 = __s1_len != 0;
          D.32716 = __result == 0;
          D.32717 = D.32715 & D.32716;
          if (D.32717 != 0) goto <D.32718>; else goto <D.32719>;
          <D.32718>:
          D.32720 = &MEM[(void *)"System.Reflection.Emit" + 1B];
          D.32721 = *D.32720;
          D.32722 = (int) D.32721;
          D.32723 = __s2 + 1;
          D.32724 = *D.32723;
          D.32725 = (int) D.32724;
          __result = D.32722 - D.32725;
          D.32726 = __s1_len > 1;
          D.32716 = __result == 0;
          D.32727 = D.32726 & D.32716;
          if (D.32727 != 0) goto <D.32728>; else goto <D.32729>;
          <D.32728>:
          D.32730 = &MEM[(void *)"System.Reflection.Emit" + 2B];
          D.32731 = *D.32730;
          D.32732 = (int) D.32731;
          D.32733 = __s2 + 2;
          D.32734 = *D.32733;
          D.32735 = (int) D.32734;
          __result = D.32732 - D.32735;
          D.32736 = __s1_len > 2;
          D.32716 = __result == 0;
          D.32737 = D.32736 & D.32716;
          if (D.32737 != 0) goto <D.32738>; else goto <D.32739>;
          <D.32738>:
          D.32740 = &MEM[(void *)"System.Reflection.Emit" + 3B];
          D.32741 = *D.32740;
          D.32742 = (int) D.32741;
          D.32743 = __s2 + 3;
          D.32744 = *D.32743;
          D.32745 = (int) D.32744;
          __result = D.32742 - D.32745;
          <D.32739>:
          <D.32729>:
          <D.32719>:
        }
        D.24806 = __result;
      }
      iftmp.272 = D.24806;
      goto <D.32746>;
      <D.32709>:
      D.32747 = class->name_space;
      iftmp.272 = __builtin_strcmp ("System.Reflection.Emit", D.32747);
      <D.32746>:
      D.24810 = iftmp.272;
    }
    if (D.24810 == 0) goto <D.32748>; else goto <D.32749>;
    <D.32748>:
    cached_class = class;
    D.32659 = 1;
    return D.32659;
    <D.32749>:
    <D.32706>:
    <D.32663>:
    D.32659 = 0;
    return D.32659;
  }
}


is_sr_mono_method (struct MonoClass * class)
{
  struct MonoClass * cached_class.273;
  gboolean D.32754;
  _Bool D.32755;
  int D.32756;
  int D.25047;
  int iftmp.274;
  int D.25043;
  const char[11] * D.32762;
  unsigned char D.32763;
  int D.32764;
  unsigned char D.32765;
  int D.32766;
  _Bool D.32767;
  _Bool D.32768;
  _Bool D.32769;
  const unsigned char * D.32772;
  unsigned char D.32773;
  int D.32774;
  const unsigned char * D.32775;
  unsigned char D.32776;
  int D.32777;
  _Bool D.32778;
  _Bool D.32779;
  const unsigned char * D.32782;
  unsigned char D.32783;
  int D.32784;
  const unsigned char * D.32785;
  unsigned char D.32786;
  int D.32787;
  _Bool D.32788;
  _Bool D.32789;
  const unsigned char * D.32792;
  unsigned char D.32793;
  int D.32794;
  const unsigned char * D.32795;
  unsigned char D.32796;
  int D.32797;
  const char * D.32799;
  int D.25056;
  int iftmp.275;
  int D.25052;
  const char[18] * D.32805;
  unsigned char D.32806;
  int D.32807;
  unsigned char D.32808;
  int D.32809;
  _Bool D.32810;
  _Bool D.32811;
  _Bool D.32812;
  const unsigned char * D.32815;
  unsigned char D.32816;
  int D.32817;
  const unsigned char * D.32818;
  unsigned char D.32819;
  int D.32820;
  _Bool D.32821;
  _Bool D.32822;
  const unsigned char * D.32825;
  unsigned char D.32826;
  int D.32827;
  const unsigned char * D.32828;
  unsigned char D.32829;
  int D.32830;
  _Bool D.32831;
  _Bool D.32832;
  const unsigned char * D.32835;
  unsigned char D.32836;
  int D.32837;
  const unsigned char * D.32838;
  unsigned char D.32839;
  int D.32840;
  const char * D.32842;

  {
    static struct MonoClass * cached_class;

    cached_class.273 = cached_class;
    if (cached_class.273 != 0B) goto <D.32752>; else goto <D.32753>;
    <D.32752>:
    cached_class.273 = cached_class;
    D.32755 = cached_class.273 == class;
    D.32754 = (gboolean) D.32755;
    return D.32754;
    <D.32753>:
    D.32756 = is_corlib_type (class);
    if (D.32756 != 0) goto <D.32757>; else goto <D.32758>;
    <D.32757>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 10;
      if (__s1_len <= 3) goto <D.32760>; else goto <D.32761>;
      <D.32760>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.32762 = "MonoMethod";
        D.32763 = MEM[(const unsigned char *)D.32762];
        D.32764 = (int) D.32763;
        D.32765 = *__s2;
        D.32766 = (int) D.32765;
        __result = D.32764 - D.32766;
        {
          D.32767 = __s1_len != 0;
          D.32768 = __result == 0;
          D.32769 = D.32767 & D.32768;
          if (D.32769 != 0) goto <D.32770>; else goto <D.32771>;
          <D.32770>:
          D.32772 = &MEM[(void *)"MonoMethod" + 1B];
          D.32773 = *D.32772;
          D.32774 = (int) D.32773;
          D.32775 = __s2 + 1;
          D.32776 = *D.32775;
          D.32777 = (int) D.32776;
          __result = D.32774 - D.32777;
          D.32778 = __s1_len > 1;
          D.32768 = __result == 0;
          D.32779 = D.32778 & D.32768;
          if (D.32779 != 0) goto <D.32780>; else goto <D.32781>;
          <D.32780>:
          D.32782 = &MEM[(void *)"MonoMethod" + 2B];
          D.32783 = *D.32782;
          D.32784 = (int) D.32783;
          D.32785 = __s2 + 2;
          D.32786 = *D.32785;
          D.32787 = (int) D.32786;
          __result = D.32784 - D.32787;
          D.32788 = __s1_len > 2;
          D.32768 = __result == 0;
          D.32789 = D.32788 & D.32768;
          if (D.32789 != 0) goto <D.32790>; else goto <D.32791>;
          <D.32790>:
          D.32792 = &MEM[(void *)"MonoMethod" + 3B];
          D.32793 = *D.32792;
          D.32794 = (int) D.32793;
          D.32795 = __s2 + 3;
          D.32796 = *D.32795;
          D.32797 = (int) D.32796;
          __result = D.32794 - D.32797;
          <D.32791>:
          <D.32781>:
          <D.32771>:
        }
        D.25043 = __result;
      }
      iftmp.274 = D.25043;
      goto <D.32798>;
      <D.32761>:
      D.32799 = class->name;
      iftmp.274 = __builtin_strcmp ("MonoMethod", D.32799);
      <D.32798>:
      D.25047 = iftmp.274;
    }
    if (D.25047 == 0) goto <D.32800>; else goto <D.32801>;
    <D.32800>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 17;
      if (__s1_len <= 3) goto <D.32803>; else goto <D.32804>;
      <D.32803>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.32805 = "System.Reflection";
        D.32806 = MEM[(const unsigned char *)D.32805];
        D.32807 = (int) D.32806;
        D.32808 = *__s2;
        D.32809 = (int) D.32808;
        __result = D.32807 - D.32809;
        {
          D.32810 = __s1_len != 0;
          D.32811 = __result == 0;
          D.32812 = D.32810 & D.32811;
          if (D.32812 != 0) goto <D.32813>; else goto <D.32814>;
          <D.32813>:
          D.32815 = &MEM[(void *)"System.Reflection" + 1B];
          D.32816 = *D.32815;
          D.32817 = (int) D.32816;
          D.32818 = __s2 + 1;
          D.32819 = *D.32818;
          D.32820 = (int) D.32819;
          __result = D.32817 - D.32820;
          D.32821 = __s1_len > 1;
          D.32811 = __result == 0;
          D.32822 = D.32821 & D.32811;
          if (D.32822 != 0) goto <D.32823>; else goto <D.32824>;
          <D.32823>:
          D.32825 = &MEM[(void *)"System.Reflection" + 2B];
          D.32826 = *D.32825;
          D.32827 = (int) D.32826;
          D.32828 = __s2 + 2;
          D.32829 = *D.32828;
          D.32830 = (int) D.32829;
          __result = D.32827 - D.32830;
          D.32831 = __s1_len > 2;
          D.32811 = __result == 0;
          D.32832 = D.32831 & D.32811;
          if (D.32832 != 0) goto <D.32833>; else goto <D.32834>;
          <D.32833>:
          D.32835 = &MEM[(void *)"System.Reflection" + 3B];
          D.32836 = *D.32835;
          D.32837 = (int) D.32836;
          D.32838 = __s2 + 3;
          D.32839 = *D.32838;
          D.32840 = (int) D.32839;
          __result = D.32837 - D.32840;
          <D.32834>:
          <D.32824>:
          <D.32814>:
        }
        D.25052 = __result;
      }
      iftmp.275 = D.25052;
      goto <D.32841>;
      <D.32804>:
      D.32842 = class->name_space;
      iftmp.275 = __builtin_strcmp ("System.Reflection", D.32842);
      <D.32841>:
      D.25056 = iftmp.275;
    }
    if (D.25056 == 0) goto <D.32843>; else goto <D.32844>;
    <D.32843>:
    cached_class = class;
    D.32754 = 1;
    return D.32754;
    <D.32844>:
    <D.32801>:
    <D.32758>:
    D.32754 = 0;
    return D.32754;
  }
}


is_sre_array (struct MonoClass * class)
{
  struct MonoClass * cached_class.276;
  gboolean D.32849;
  _Bool D.32850;
  int D.32851;
  int D.24691;
  int iftmp.277;
  int D.24687;
  const char[10] * D.32857;
  unsigned char D.32858;
  int D.32859;
  unsigned char D.32860;
  int D.32861;
  _Bool D.32862;
  _Bool D.32863;
  _Bool D.32864;
  const unsigned char * D.32867;
  unsigned char D.32868;
  int D.32869;
  const unsigned char * D.32870;
  unsigned char D.32871;
  int D.32872;
  _Bool D.32873;
  _Bool D.32874;
  const unsigned char * D.32877;
  unsigned char D.32878;
  int D.32879;
  const unsigned char * D.32880;
  unsigned char D.32881;
  int D.32882;
  _Bool D.32883;
  _Bool D.32884;
  const unsigned char * D.32887;
  unsigned char D.32888;
  int D.32889;
  const unsigned char * D.32890;
  unsigned char D.32891;
  int D.32892;
  const char * D.32894;
  int D.24700;
  int iftmp.278;
  int D.24696;
  const char[23] * D.32900;
  unsigned char D.32901;
  int D.32902;
  unsigned char D.32903;
  int D.32904;
  _Bool D.32905;
  _Bool D.32906;
  _Bool D.32907;
  const unsigned char * D.32910;
  unsigned char D.32911;
  int D.32912;
  const unsigned char * D.32913;
  unsigned char D.32914;
  int D.32915;
  _Bool D.32916;
  _Bool D.32917;
  const unsigned char * D.32920;
  unsigned char D.32921;
  int D.32922;
  const unsigned char * D.32923;
  unsigned char D.32924;
  int D.32925;
  _Bool D.32926;
  _Bool D.32927;
  const unsigned char * D.32930;
  unsigned char D.32931;
  int D.32932;
  const unsigned char * D.32933;
  unsigned char D.32934;
  int D.32935;
  const char * D.32937;

  {
    static struct MonoClass * cached_class;

    cached_class.276 = cached_class;
    if (cached_class.276 != 0B) goto <D.32847>; else goto <D.32848>;
    <D.32847>:
    cached_class.276 = cached_class;
    D.32850 = cached_class.276 == class;
    D.32849 = (gboolean) D.32850;
    return D.32849;
    <D.32848>:
    D.32851 = is_corlib_type (class);
    if (D.32851 != 0) goto <D.32852>; else goto <D.32853>;
    <D.32852>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 9;
      if (__s1_len <= 3) goto <D.32855>; else goto <D.32856>;
      <D.32855>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.32857 = "ArrayType";
        D.32858 = MEM[(const unsigned char *)D.32857];
        D.32859 = (int) D.32858;
        D.32860 = *__s2;
        D.32861 = (int) D.32860;
        __result = D.32859 - D.32861;
        {
          D.32862 = __s1_len != 0;
          D.32863 = __result == 0;
          D.32864 = D.32862 & D.32863;
          if (D.32864 != 0) goto <D.32865>; else goto <D.32866>;
          <D.32865>:
          D.32867 = &MEM[(void *)"ArrayType" + 1B];
          D.32868 = *D.32867;
          D.32869 = (int) D.32868;
          D.32870 = __s2 + 1;
          D.32871 = *D.32870;
          D.32872 = (int) D.32871;
          __result = D.32869 - D.32872;
          D.32873 = __s1_len > 1;
          D.32863 = __result == 0;
          D.32874 = D.32873 & D.32863;
          if (D.32874 != 0) goto <D.32875>; else goto <D.32876>;
          <D.32875>:
          D.32877 = &MEM[(void *)"ArrayType" + 2B];
          D.32878 = *D.32877;
          D.32879 = (int) D.32878;
          D.32880 = __s2 + 2;
          D.32881 = *D.32880;
          D.32882 = (int) D.32881;
          __result = D.32879 - D.32882;
          D.32883 = __s1_len > 2;
          D.32863 = __result == 0;
          D.32884 = D.32883 & D.32863;
          if (D.32884 != 0) goto <D.32885>; else goto <D.32886>;
          <D.32885>:
          D.32887 = &MEM[(void *)"ArrayType" + 3B];
          D.32888 = *D.32887;
          D.32889 = (int) D.32888;
          D.32890 = __s2 + 3;
          D.32891 = *D.32890;
          D.32892 = (int) D.32891;
          __result = D.32889 - D.32892;
          <D.32886>:
          <D.32876>:
          <D.32866>:
        }
        D.24687 = __result;
      }
      iftmp.277 = D.24687;
      goto <D.32893>;
      <D.32856>:
      D.32894 = class->name;
      iftmp.277 = __builtin_strcmp ("ArrayType", D.32894);
      <D.32893>:
      D.24691 = iftmp.277;
    }
    if (D.24691 == 0) goto <D.32895>; else goto <D.32896>;
    <D.32895>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 22;
      if (__s1_len <= 3) goto <D.32898>; else goto <D.32899>;
      <D.32898>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.32900 = "System.Reflection.Emit";
        D.32901 = MEM[(const unsigned char *)D.32900];
        D.32902 = (int) D.32901;
        D.32903 = *__s2;
        D.32904 = (int) D.32903;
        __result = D.32902 - D.32904;
        {
          D.32905 = __s1_len != 0;
          D.32906 = __result == 0;
          D.32907 = D.32905 & D.32906;
          if (D.32907 != 0) goto <D.32908>; else goto <D.32909>;
          <D.32908>:
          D.32910 = &MEM[(void *)"System.Reflection.Emit" + 1B];
          D.32911 = *D.32910;
          D.32912 = (int) D.32911;
          D.32913 = __s2 + 1;
          D.32914 = *D.32913;
          D.32915 = (int) D.32914;
          __result = D.32912 - D.32915;
          D.32916 = __s1_len > 1;
          D.32906 = __result == 0;
          D.32917 = D.32916 & D.32906;
          if (D.32917 != 0) goto <D.32918>; else goto <D.32919>;
          <D.32918>:
          D.32920 = &MEM[(void *)"System.Reflection.Emit" + 2B];
          D.32921 = *D.32920;
          D.32922 = (int) D.32921;
          D.32923 = __s2 + 2;
          D.32924 = *D.32923;
          D.32925 = (int) D.32924;
          __result = D.32922 - D.32925;
          D.32926 = __s1_len > 2;
          D.32906 = __result == 0;
          D.32927 = D.32926 & D.32906;
          if (D.32927 != 0) goto <D.32928>; else goto <D.32929>;
          <D.32928>:
          D.32930 = &MEM[(void *)"System.Reflection.Emit" + 3B];
          D.32931 = *D.32930;
          D.32932 = (int) D.32931;
          D.32933 = __s2 + 3;
          D.32934 = *D.32933;
          D.32935 = (int) D.32934;
          __result = D.32932 - D.32935;
          <D.32929>:
          <D.32919>:
          <D.32909>:
        }
        D.24696 = __result;
      }
      iftmp.278 = D.24696;
      goto <D.32936>;
      <D.32899>:
      D.32937 = class->name_space;
      iftmp.278 = __builtin_strcmp ("System.Reflection.Emit", D.32937);
      <D.32936>:
      D.24700 = iftmp.278;
    }
    if (D.24700 == 0) goto <D.32938>; else goto <D.32939>;
    <D.32938>:
    cached_class = class;
    D.32849 = 1;
    return D.32849;
    <D.32939>:
    <D.32896>:
    <D.32853>:
    D.32849 = 0;
    return D.32849;
  }
}


is_sre_byref (struct MonoClass * class)
{
  struct MonoClass * cached_class.279;
  gboolean D.32944;
  _Bool D.32945;
  int D.32946;
  int D.24713;
  int iftmp.280;
  int D.24709;
  const char[10] * D.32952;
  unsigned char D.32953;
  int D.32954;
  unsigned char D.32955;
  int D.32956;
  _Bool D.32957;
  _Bool D.32958;
  _Bool D.32959;
  const unsigned char * D.32962;
  unsigned char D.32963;
  int D.32964;
  const unsigned char * D.32965;
  unsigned char D.32966;
  int D.32967;
  _Bool D.32968;
  _Bool D.32969;
  const unsigned char * D.32972;
  unsigned char D.32973;
  int D.32974;
  const unsigned char * D.32975;
  unsigned char D.32976;
  int D.32977;
  _Bool D.32978;
  _Bool D.32979;
  const unsigned char * D.32982;
  unsigned char D.32983;
  int D.32984;
  const unsigned char * D.32985;
  unsigned char D.32986;
  int D.32987;
  const char * D.32989;
  int D.24722;
  int iftmp.281;
  int D.24718;
  const char[23] * D.32995;
  unsigned char D.32996;
  int D.32997;
  unsigned char D.32998;
  int D.32999;
  _Bool D.33000;
  _Bool D.33001;
  _Bool D.33002;
  const unsigned char * D.33005;
  unsigned char D.33006;
  int D.33007;
  const unsigned char * D.33008;
  unsigned char D.33009;
  int D.33010;
  _Bool D.33011;
  _Bool D.33012;
  const unsigned char * D.33015;
  unsigned char D.33016;
  int D.33017;
  const unsigned char * D.33018;
  unsigned char D.33019;
  int D.33020;
  _Bool D.33021;
  _Bool D.33022;
  const unsigned char * D.33025;
  unsigned char D.33026;
  int D.33027;
  const unsigned char * D.33028;
  unsigned char D.33029;
  int D.33030;
  const char * D.33032;

  {
    static struct MonoClass * cached_class;

    cached_class.279 = cached_class;
    if (cached_class.279 != 0B) goto <D.32942>; else goto <D.32943>;
    <D.32942>:
    cached_class.279 = cached_class;
    D.32945 = cached_class.279 == class;
    D.32944 = (gboolean) D.32945;
    return D.32944;
    <D.32943>:
    D.32946 = is_corlib_type (class);
    if (D.32946 != 0) goto <D.32947>; else goto <D.32948>;
    <D.32947>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 9;
      if (__s1_len <= 3) goto <D.32950>; else goto <D.32951>;
      <D.32950>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.32952 = "ByRefType";
        D.32953 = MEM[(const unsigned char *)D.32952];
        D.32954 = (int) D.32953;
        D.32955 = *__s2;
        D.32956 = (int) D.32955;
        __result = D.32954 - D.32956;
        {
          D.32957 = __s1_len != 0;
          D.32958 = __result == 0;
          D.32959 = D.32957 & D.32958;
          if (D.32959 != 0) goto <D.32960>; else goto <D.32961>;
          <D.32960>:
          D.32962 = &MEM[(void *)"ByRefType" + 1B];
          D.32963 = *D.32962;
          D.32964 = (int) D.32963;
          D.32965 = __s2 + 1;
          D.32966 = *D.32965;
          D.32967 = (int) D.32966;
          __result = D.32964 - D.32967;
          D.32968 = __s1_len > 1;
          D.32958 = __result == 0;
          D.32969 = D.32968 & D.32958;
          if (D.32969 != 0) goto <D.32970>; else goto <D.32971>;
          <D.32970>:
          D.32972 = &MEM[(void *)"ByRefType" + 2B];
          D.32973 = *D.32972;
          D.32974 = (int) D.32973;
          D.32975 = __s2 + 2;
          D.32976 = *D.32975;
          D.32977 = (int) D.32976;
          __result = D.32974 - D.32977;
          D.32978 = __s1_len > 2;
          D.32958 = __result == 0;
          D.32979 = D.32978 & D.32958;
          if (D.32979 != 0) goto <D.32980>; else goto <D.32981>;
          <D.32980>:
          D.32982 = &MEM[(void *)"ByRefType" + 3B];
          D.32983 = *D.32982;
          D.32984 = (int) D.32983;
          D.32985 = __s2 + 3;
          D.32986 = *D.32985;
          D.32987 = (int) D.32986;
          __result = D.32984 - D.32987;
          <D.32981>:
          <D.32971>:
          <D.32961>:
        }
        D.24709 = __result;
      }
      iftmp.280 = D.24709;
      goto <D.32988>;
      <D.32951>:
      D.32989 = class->name;
      iftmp.280 = __builtin_strcmp ("ByRefType", D.32989);
      <D.32988>:
      D.24713 = iftmp.280;
    }
    if (D.24713 == 0) goto <D.32990>; else goto <D.32991>;
    <D.32990>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 22;
      if (__s1_len <= 3) goto <D.32993>; else goto <D.32994>;
      <D.32993>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.32995 = "System.Reflection.Emit";
        D.32996 = MEM[(const unsigned char *)D.32995];
        D.32997 = (int) D.32996;
        D.32998 = *__s2;
        D.32999 = (int) D.32998;
        __result = D.32997 - D.32999;
        {
          D.33000 = __s1_len != 0;
          D.33001 = __result == 0;
          D.33002 = D.33000 & D.33001;
          if (D.33002 != 0) goto <D.33003>; else goto <D.33004>;
          <D.33003>:
          D.33005 = &MEM[(void *)"System.Reflection.Emit" + 1B];
          D.33006 = *D.33005;
          D.33007 = (int) D.33006;
          D.33008 = __s2 + 1;
          D.33009 = *D.33008;
          D.33010 = (int) D.33009;
          __result = D.33007 - D.33010;
          D.33011 = __s1_len > 1;
          D.33001 = __result == 0;
          D.33012 = D.33011 & D.33001;
          if (D.33012 != 0) goto <D.33013>; else goto <D.33014>;
          <D.33013>:
          D.33015 = &MEM[(void *)"System.Reflection.Emit" + 2B];
          D.33016 = *D.33015;
          D.33017 = (int) D.33016;
          D.33018 = __s2 + 2;
          D.33019 = *D.33018;
          D.33020 = (int) D.33019;
          __result = D.33017 - D.33020;
          D.33021 = __s1_len > 2;
          D.33001 = __result == 0;
          D.33022 = D.33021 & D.33001;
          if (D.33022 != 0) goto <D.33023>; else goto <D.33024>;
          <D.33023>:
          D.33025 = &MEM[(void *)"System.Reflection.Emit" + 3B];
          D.33026 = *D.33025;
          D.33027 = (int) D.33026;
          D.33028 = __s2 + 3;
          D.33029 = *D.33028;
          D.33030 = (int) D.33029;
          __result = D.33027 - D.33030;
          <D.33024>:
          <D.33014>:
          <D.33004>:
        }
        D.24718 = __result;
      }
      iftmp.281 = D.24718;
      goto <D.33031>;
      <D.32994>:
      D.33032 = class->name_space;
      iftmp.281 = __builtin_strcmp ("System.Reflection.Emit", D.33032);
      <D.33031>:
      D.24722 = iftmp.281;
    }
    if (D.24722 == 0) goto <D.33033>; else goto <D.33034>;
    <D.33033>:
    cached_class = class;
    D.32944 = 1;
    return D.32944;
    <D.33034>:
    <D.32991>:
    <D.32948>:
    D.32944 = 0;
    return D.32944;
  }
}


is_sre_pointer (struct MonoClass * class)
{
  struct MonoClass * cached_class.282;
  gboolean D.33039;
  _Bool D.33040;
  int D.33041;
  int D.24735;
  int iftmp.283;
  int D.24731;
  const char[12] * D.33047;
  unsigned char D.33048;
  int D.33049;
  unsigned char D.33050;
  int D.33051;
  _Bool D.33052;
  _Bool D.33053;
  _Bool D.33054;
  const unsigned char * D.33057;
  unsigned char D.33058;
  int D.33059;
  const unsigned char * D.33060;
  unsigned char D.33061;
  int D.33062;
  _Bool D.33063;
  _Bool D.33064;
  const unsigned char * D.33067;
  unsigned char D.33068;
  int D.33069;
  const unsigned char * D.33070;
  unsigned char D.33071;
  int D.33072;
  _Bool D.33073;
  _Bool D.33074;
  const unsigned char * D.33077;
  unsigned char D.33078;
  int D.33079;
  const unsigned char * D.33080;
  unsigned char D.33081;
  int D.33082;
  const char * D.33084;
  int D.24744;
  int iftmp.284;
  int D.24740;
  const char[23] * D.33090;
  unsigned char D.33091;
  int D.33092;
  unsigned char D.33093;
  int D.33094;
  _Bool D.33095;
  _Bool D.33096;
  _Bool D.33097;
  const unsigned char * D.33100;
  unsigned char D.33101;
  int D.33102;
  const unsigned char * D.33103;
  unsigned char D.33104;
  int D.33105;
  _Bool D.33106;
  _Bool D.33107;
  const unsigned char * D.33110;
  unsigned char D.33111;
  int D.33112;
  const unsigned char * D.33113;
  unsigned char D.33114;
  int D.33115;
  _Bool D.33116;
  _Bool D.33117;
  const unsigned char * D.33120;
  unsigned char D.33121;
  int D.33122;
  const unsigned char * D.33123;
  unsigned char D.33124;
  int D.33125;
  const char * D.33127;

  {
    static struct MonoClass * cached_class;

    cached_class.282 = cached_class;
    if (cached_class.282 != 0B) goto <D.33037>; else goto <D.33038>;
    <D.33037>:
    cached_class.282 = cached_class;
    D.33040 = cached_class.282 == class;
    D.33039 = (gboolean) D.33040;
    return D.33039;
    <D.33038>:
    D.33041 = is_corlib_type (class);
    if (D.33041 != 0) goto <D.33042>; else goto <D.33043>;
    <D.33042>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 11;
      if (__s1_len <= 3) goto <D.33045>; else goto <D.33046>;
      <D.33045>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.33047 = "PointerType";
        D.33048 = MEM[(const unsigned char *)D.33047];
        D.33049 = (int) D.33048;
        D.33050 = *__s2;
        D.33051 = (int) D.33050;
        __result = D.33049 - D.33051;
        {
          D.33052 = __s1_len != 0;
          D.33053 = __result == 0;
          D.33054 = D.33052 & D.33053;
          if (D.33054 != 0) goto <D.33055>; else goto <D.33056>;
          <D.33055>:
          D.33057 = &MEM[(void *)"PointerType" + 1B];
          D.33058 = *D.33057;
          D.33059 = (int) D.33058;
          D.33060 = __s2 + 1;
          D.33061 = *D.33060;
          D.33062 = (int) D.33061;
          __result = D.33059 - D.33062;
          D.33063 = __s1_len > 1;
          D.33053 = __result == 0;
          D.33064 = D.33063 & D.33053;
          if (D.33064 != 0) goto <D.33065>; else goto <D.33066>;
          <D.33065>:
          D.33067 = &MEM[(void *)"PointerType" + 2B];
          D.33068 = *D.33067;
          D.33069 = (int) D.33068;
          D.33070 = __s2 + 2;
          D.33071 = *D.33070;
          D.33072 = (int) D.33071;
          __result = D.33069 - D.33072;
          D.33073 = __s1_len > 2;
          D.33053 = __result == 0;
          D.33074 = D.33073 & D.33053;
          if (D.33074 != 0) goto <D.33075>; else goto <D.33076>;
          <D.33075>:
          D.33077 = &MEM[(void *)"PointerType" + 3B];
          D.33078 = *D.33077;
          D.33079 = (int) D.33078;
          D.33080 = __s2 + 3;
          D.33081 = *D.33080;
          D.33082 = (int) D.33081;
          __result = D.33079 - D.33082;
          <D.33076>:
          <D.33066>:
          <D.33056>:
        }
        D.24731 = __result;
      }
      iftmp.283 = D.24731;
      goto <D.33083>;
      <D.33046>:
      D.33084 = class->name;
      iftmp.283 = __builtin_strcmp ("PointerType", D.33084);
      <D.33083>:
      D.24735 = iftmp.283;
    }
    if (D.24735 == 0) goto <D.33085>; else goto <D.33086>;
    <D.33085>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 22;
      if (__s1_len <= 3) goto <D.33088>; else goto <D.33089>;
      <D.33088>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.33090 = "System.Reflection.Emit";
        D.33091 = MEM[(const unsigned char *)D.33090];
        D.33092 = (int) D.33091;
        D.33093 = *__s2;
        D.33094 = (int) D.33093;
        __result = D.33092 - D.33094;
        {
          D.33095 = __s1_len != 0;
          D.33096 = __result == 0;
          D.33097 = D.33095 & D.33096;
          if (D.33097 != 0) goto <D.33098>; else goto <D.33099>;
          <D.33098>:
          D.33100 = &MEM[(void *)"System.Reflection.Emit" + 1B];
          D.33101 = *D.33100;
          D.33102 = (int) D.33101;
          D.33103 = __s2 + 1;
          D.33104 = *D.33103;
          D.33105 = (int) D.33104;
          __result = D.33102 - D.33105;
          D.33106 = __s1_len > 1;
          D.33096 = __result == 0;
          D.33107 = D.33106 & D.33096;
          if (D.33107 != 0) goto <D.33108>; else goto <D.33109>;
          <D.33108>:
          D.33110 = &MEM[(void *)"System.Reflection.Emit" + 2B];
          D.33111 = *D.33110;
          D.33112 = (int) D.33111;
          D.33113 = __s2 + 2;
          D.33114 = *D.33113;
          D.33115 = (int) D.33114;
          __result = D.33112 - D.33115;
          D.33116 = __s1_len > 2;
          D.33096 = __result == 0;
          D.33117 = D.33116 & D.33096;
          if (D.33117 != 0) goto <D.33118>; else goto <D.33119>;
          <D.33118>:
          D.33120 = &MEM[(void *)"System.Reflection.Emit" + 3B];
          D.33121 = *D.33120;
          D.33122 = (int) D.33121;
          D.33123 = __s2 + 3;
          D.33124 = *D.33123;
          D.33125 = (int) D.33124;
          __result = D.33122 - D.33125;
          <D.33119>:
          <D.33109>:
          <D.33099>:
        }
        D.24740 = __result;
      }
      iftmp.284 = D.24740;
      goto <D.33126>;
      <D.33089>:
      D.33127 = class->name_space;
      iftmp.284 = __builtin_strcmp ("System.Reflection.Emit", D.33127);
      <D.33126>:
      D.24744 = iftmp.284;
    }
    if (D.24744 == 0) goto <D.33128>; else goto <D.33129>;
    <D.33128>:
    cached_class = class;
    D.33039 = 1;
    return D.33039;
    <D.33129>:
    <D.33086>:
    <D.33043>:
    D.33039 = 0;
    return D.33039;
  }
}


mono_image_register_token (struct MonoDynamicImage * assembly, guint32 token, struct MonoObject * obj)
{
  struct MonoGHashTable * D.33131;
  const void * token.285;
  void * token.286;
  struct MonoObject * prev;

  D.33131 = assembly->tokens;
  token.285 = (const void *) token;
  prev = mono_g_hash_table_lookup (D.33131, token.285);
  if (prev != 0B) goto <D.33133>; else goto <D.33134>;
  <D.33133>:
  goto <D.33135>;
  <D.33134>:
  D.33131 = assembly->tokens;
  token.286 = (void *) token;
  mono_g_hash_table_insert (D.33131, token.286, obj);
  <D.33135>:
}


mono_dynamic_image_release_gc_roots (struct MonoDynamicImage * image)
{
  struct MonoGHashTable * * D.33137;
  struct MonoGHashTable * * D.33138;
  struct MonoGHashTable * * D.33139;
  struct MonoGHashTable * * D.33140;
  struct MonoGHashTable * * D.33141;
  struct MonoGHashTable * * D.33142;

  D.33137 = &image->token_fixups;
  release_hashtable (D.33137);
  D.33138 = &image->handleref_managed;
  release_hashtable (D.33138);
  D.33139 = &image->tokens;
  release_hashtable (D.33139);
  D.33140 = &image->remapped_tokens;
  release_hashtable (D.33140);
  D.33141 = &image->generic_def_objects;
  release_hashtable (D.33141);
  D.33142 = &image->methodspec;
  release_hashtable (D.33142);
}


release_hashtable (struct MonoGHashTable * * hash)
{
  struct MonoGHashTable * D.33143;

  D.33143 = *hash;
  if (D.33143 != 0B) goto <D.33144>; else goto <D.33145>;
  <D.33144>:
  D.33143 = *hash;
  mono_g_hash_table_destroy (D.33143);
  *hash = 0B;
  <D.33145>:
}


mono_dynamic_image_free (struct MonoDynamicImage * image)
{
  struct MonoGHashTable * D.33146;
  struct GHashTable * D.33149;
  struct GHashTable * D.33152;
  struct GHashTable * D.33155;
  struct MonoGHashTable * D.33158;
  struct MonoGHashTable * D.33161;
  struct MonoGHashTable * D.33164;
  struct MonoGHashTable * D.33167;
  struct GHashTable * D.33170;
  struct GHashTable * D.33173;
  struct MonoMethodSignature * D.33176;
  char * D.33177;
  struct GList * D.33178;
  struct GPtrArray * D.33179;
  void * * D.33182;
  unsigned int i.287;
  unsigned int D.33184;
  void * * D.33185;
  struct MonoReflectionGenericParam * * D.33186;
  unsigned int i.288;
  unsigned int D.33188;
  struct MonoGHashTable * D.33189;
  struct GHashTable * D.33192;
  struct GHashTable * D.33195;
  struct GHashTable * D.33198;
  struct GHashTable * D.33201;
  char * D.33204;
  char * D.33205;
  guint8 * D.33206;
  struct MonoDynamicStream * D.33209;
  struct MonoDynamicStream * D.33210;
  struct MonoDynamicStream * D.33211;
  struct MonoDynamicStream * D.33212;
  struct MonoDynamicStream * D.33213;
  struct MonoDynamicStream * D.33214;
  struct MonoDynamicStream * D.33215;
  guint32 * D.33216;
  struct MonoDynamicImage * di;
  struct GList * list;
  int i;

  di = image;
  D.33146 = di->methodspec;
  if (D.33146 != 0B) goto <D.33147>; else goto <D.33148>;
  <D.33147>:
  D.33146 = di->methodspec;
  mono_g_hash_table_destroy (D.33146);
  <D.33148>:
  D.33149 = di->typespec;
  if (D.33149 != 0B) goto <D.33150>; else goto <D.33151>;
  <D.33150>:
  D.33149 = di->typespec;
  monoeg_g_hash_table_destroy (D.33149);
  <D.33151>:
  D.33152 = di->typeref;
  if (D.33152 != 0B) goto <D.33153>; else goto <D.33154>;
  <D.33153>:
  D.33152 = di->typeref;
  monoeg_g_hash_table_destroy (D.33152);
  <D.33154>:
  D.33155 = di->handleref;
  if (D.33155 != 0B) goto <D.33156>; else goto <D.33157>;
  <D.33156>:
  D.33155 = di->handleref;
  monoeg_g_hash_table_destroy (D.33155);
  <D.33157>:
  D.33158 = di->handleref_managed;
  if (D.33158 != 0B) goto <D.33159>; else goto <D.33160>;
  <D.33159>:
  D.33158 = di->handleref_managed;
  mono_g_hash_table_destroy (D.33158);
  <D.33160>:
  D.33161 = di->tokens;
  if (D.33161 != 0B) goto <D.33162>; else goto <D.33163>;
  <D.33162>:
  D.33161 = di->tokens;
  mono_g_hash_table_destroy (D.33161);
  <D.33163>:
  D.33164 = di->remapped_tokens;
  if (D.33164 != 0B) goto <D.33165>; else goto <D.33166>;
  <D.33165>:
  D.33164 = di->remapped_tokens;
  mono_g_hash_table_destroy (D.33164);
  <D.33166>:
  D.33167 = di->generic_def_objects;
  if (D.33167 != 0B) goto <D.33168>; else goto <D.33169>;
  <D.33168>:
  D.33167 = di->generic_def_objects;
  mono_g_hash_table_destroy (D.33167);
  <D.33169>:
  D.33170 = di->blob_cache;
  if (D.33170 != 0B) goto <D.33171>; else goto <D.33172>;
  <D.33171>:
  D.33170 = di->blob_cache;
  monoeg_g_hash_table_foreach (D.33170, free_blob_cache_entry, 0B);
  D.33170 = di->blob_cache;
  monoeg_g_hash_table_destroy (D.33170);
  <D.33172>:
  D.33173 = di->standalonesig_cache;
  if (D.33173 != 0B) goto <D.33174>; else goto <D.33175>;
  <D.33174>:
  D.33173 = di->standalonesig_cache;
  monoeg_g_hash_table_destroy (D.33173);
  <D.33175>:
  list = di->array_methods;
  goto <D.22959>;
  <D.22958>:
  {
    struct ArrayMethod * am;

    am = list->data;
    D.33176 = am->sig;
    monoeg_g_free (D.33176);
    D.33177 = am->name;
    monoeg_g_free (D.33177);
    monoeg_g_free (am);
  }
  list = list->next;
  <D.22959>:
  if (list != 0B) goto <D.22958>; else goto <D.22960>;
  <D.22960>:
  D.33178 = di->array_methods;
  monoeg_g_list_free (D.33178);
  D.33179 = di->gen_params;
  if (D.33179 != 0B) goto <D.33180>; else goto <D.33181>;
  <D.33180>:
  i = 0;
  goto <D.22963>;
  <D.22962>:
  {
    struct GenericParamTableEntry * entry;

    D.33179 = di->gen_params;
    D.33182 = D.33179->pdata;
    i.287 = (unsigned int) i;
    D.33184 = i.287 * 4;
    D.33185 = D.33182 + D.33184;
    entry = *D.33185;
    D.33186 = &entry->gparam;
    mono_gc_deregister_root (D.33186);
    monoeg_g_free (entry);
  }
  i = i + 1;
  <D.22963>:
  i.288 = (unsigned int) i;
  D.33179 = di->gen_params;
  D.33188 = D.33179->len;
  if (i.288 < D.33188) goto <D.22962>; else goto <D.22964>;
  <D.22964>:
  D.33179 = di->gen_params;
  monoeg_g_ptr_array_free (D.33179, 1);
  <D.33181>:
  D.33189 = di->token_fixups;
  if (D.33189 != 0B) goto <D.33190>; else goto <D.33191>;
  <D.33190>:
  D.33189 = di->token_fixups;
  mono_g_hash_table_destroy (D.33189);
  <D.33191>:
  D.33192 = di->method_to_table_idx;
  if (D.33192 != 0B) goto <D.33193>; else goto <D.33194>;
  <D.33193>:
  D.33192 = di->method_to_table_idx;
  monoeg_g_hash_table_destroy (D.33192);
  <D.33194>:
  D.33195 = di->field_to_table_idx;
  if (D.33195 != 0B) goto <D.33196>; else goto <D.33197>;
  <D.33196>:
  D.33195 = di->field_to_table_idx;
  monoeg_g_hash_table_destroy (D.33195);
  <D.33197>:
  D.33198 = di->method_aux_hash;
  if (D.33198 != 0B) goto <D.33199>; else goto <D.33200>;
  <D.33199>:
  D.33198 = di->method_aux_hash;
  monoeg_g_hash_table_destroy (D.33198);
  <D.33200>:
  D.33201 = di->vararg_aux_hash;
  if (D.33201 != 0B) goto <D.33202>; else goto <D.33203>;
  <D.33202>:
  D.33201 = di->vararg_aux_hash;
  monoeg_g_hash_table_destroy (D.33201);
  <D.33203>:
  D.33204 = di->strong_name;
  monoeg_g_free (D.33204);
  D.33205 = di->win32_res;
  monoeg_g_free (D.33205);
  D.33206 = di->public_key;
  if (D.33206 != 0B) goto <D.33207>; else goto <D.33208>;
  <D.33207>:
  D.33206 = di->public_key;
  monoeg_g_free (D.33206);
  <D.33208>:
  D.33209 = &di->sheap;
  mono_dynamic_stream_reset (D.33209);
  D.33210 = &di->code;
  mono_dynamic_stream_reset (D.33210);
  D.33211 = &di->resources;
  mono_dynamic_stream_reset (D.33211);
  D.33212 = &di->us;
  mono_dynamic_stream_reset (D.33212);
  D.33213 = &di->blob;
  mono_dynamic_stream_reset (D.33213);
  D.33214 = &di->tstream;
  mono_dynamic_stream_reset (D.33214);
  D.33215 = &di->guid;
  mono_dynamic_stream_reset (D.33215);
  i = 0;
  goto <D.22966>;
  <D.22965>:
  D.33216 = di->tables[i].values;
  monoeg_g_free (D.33216);
  i = i + 1;
  <D.22966>:
  if (i <= 44) goto <D.22965>; else goto <D.22967>;
  <D.22967>:
}


free_blob_cache_entry (void * key, void * val, void * user_data)
{
  monoeg_g_free (key);
}


mono_image_basic_init (struct MonoReflectionAssemblyBuilder * assemblyb)
{
  struct MonoVTable * D.33217;
  struct MonoDynamicAssembly * D.33218;
  void * D.33221;
  struct MonoAssembly * D.33222;
  unsigned char D.33223;
  struct MonoString * D.33224;
  char * D.33225;
  struct MonoString * D.33226;
  char * D.33229;
  gchar * D.33231;
  struct MonoString * D.33232;
  char * * parts.289;
  char * D.33236;
  int D.33237;
  short unsigned int D.33238;
  char * * parts.290;
  char * D.33240;
  int D.33241;
  short unsigned int D.33242;
  uint16_t iftmp.291;
  char * D.33244;
  char * * parts.292;
  char * D.33248;
  int D.33249;
  uint16_t iftmp.293;
  int D.33254;
  unsigned int D.33257;
  _Bool D.33258;
  unsigned char D.33259;
  _Bool D.33260;
  unsigned char D.33261;
  struct MonoString * D.33262;
  char * D.33263;
  gchar * D.33264;
  char * D.33265;
  struct MonoImage * D.33266;
  struct MonoArray * D.33267;
  unsigned int D.33270;
  const char * D.33275;
  mono_byte[17] * D.33276;
  char * D.33277;
  union mono_mutex_t * D.33278;
  _Bool D.33281;
  long int D.33282;
  long int D.33283;
  struct GSList * D.33286;
  struct GSList * D.33287;
  _Bool D.33290;
  long int D.33291;
  long int D.33292;
  struct MonoDomain * D.33295;
  struct MonoReflectionAssembly * D.33296;
  struct MonoDynamicAssembly * assembly;
  struct MonoDynamicImage * image;
  struct MonoDomain * domain;

  D.33217 = MEM[(struct MonoObject *)assemblyb].vtable;
  domain = D.33217->domain;
  D.33218 = assemblyb->dynamic_assembly;
  if (D.33218 != 0B) goto <D.33219>; else goto <D.33220>;
  <D.33219>:
  return;
  <D.33220>:
  D.33221 = monoeg_malloc0 (108);
  assemblyb->dynamic_assembly = D.33221;
  assembly = assemblyb->dynamic_assembly;
  D.33222 = &assembly->assembly;
  mono_profiler_assembly_event (D.33222, 0);
  assembly->assembly.ref_count = 1;
  assembly->assembly.dynamic = 1;
  D.33223 = assemblyb->corlib_internal;
  assembly->assembly.corlib_internal = D.33223;
  assemblyb->assembly.assembly = assembly;
  D.33224 = assemblyb->dir;
  D.33225 = mono_string_to_utf8 (D.33224);
  assembly->assembly.basedir = D.33225;
  D.33226 = assemblyb->culture;
  if (D.33226 != 0B) goto <D.33227>; else goto <D.33228>;
  <D.33227>:
  D.33226 = assemblyb->culture;
  D.33229 = mono_string_to_utf8 (D.33226);
  assembly->assembly.aname.culture = D.33229;
  goto <D.33230>;
  <D.33228>:
  D.33231 = monoeg_strdup ("");
  assembly->assembly.aname.culture = D.33231;
  <D.33230>:
  D.33232 = assemblyb->version;
  if (D.33232 != 0B) goto <D.33233>; else goto <D.33234>;
  <D.33233>:
  {
    char * vstr;
    char * * version;
    char * * parts;

    D.33232 = assemblyb->version;
    vstr = mono_string_to_utf8 (D.33232);
    version = monoeg_g_strsplit (vstr, ".", 4);
    parts = version;
    parts.289 = parts;
    parts = parts.289 + 4;
    D.33236 = *parts.289;
    D.33237 = atoi (D.33236);
    D.33238 = (short unsigned int) D.33237;
    assembly->assembly.aname.major = D.33238;
    parts.290 = parts;
    parts = parts.290 + 4;
    D.33240 = *parts.290;
    D.33241 = atoi (D.33240);
    D.33242 = (short unsigned int) D.33241;
    assembly->assembly.aname.minor = D.33242;
    D.33244 = *parts;
    if (D.33244 != 0B) goto <D.33245>; else goto <D.33246>;
    <D.33245>:
    parts.292 = parts;
    parts = parts.292 + 4;
    D.33248 = *parts.292;
    D.33249 = atoi (D.33248);
    iftmp.291 = (uint16_t) D.33249;
    goto <D.33250>;
    <D.33246>:
    iftmp.291 = 0;
    <D.33250>:
    assembly->assembly.aname.build = iftmp.291;
    D.33244 = *parts;
    if (D.33244 != 0B) goto <D.33252>; else goto <D.33253>;
    <D.33252>:
    D.33244 = *parts;
    D.33254 = atoi (D.33244);
    iftmp.293 = (uint16_t) D.33254;
    goto <D.33255>;
    <D.33253>:
    iftmp.293 = 0;
    <D.33255>:
    assembly->assembly.aname.revision = iftmp.293;
    monoeg_g_strfreev (version);
    monoeg_g_free (vstr);
  }
  goto <D.33256>;
  <D.33234>:
  assembly->assembly.aname.major = 0;
  assembly->assembly.aname.minor = 0;
  assembly->assembly.aname.build = 0;
  assembly->assembly.aname.revision = 0;
  <D.33256>:
  D.33257 = assemblyb->access;
  D.33258 = D.33257 != 2;
  D.33259 = (unsigned char) D.33258;
  assembly->run = D.33259;
  D.33257 = assemblyb->access;
  D.33260 = D.33257 != 1;
  D.33261 = (unsigned char) D.33260;
  assembly->save = D.33261;
  assembly->domain = domain;
  D.33262 = assemblyb->name;
  D.33263 = mono_string_to_utf8 (D.33262);
  D.33264 = monoeg_strdup ("RefEmit_YouForgotToDefineAModule");
  image = create_dynamic_mono_image (assembly, D.33263, D.33264);
  image->initial_image = 1;
  D.33265 = image->image.name;
  assembly->assembly.aname.name = D.33265;
  D.33266 = &image->image;
  assembly->assembly.image = D.33266;
  D.33267 = assemblyb->pktoken;
  if (D.33267 != 0B) goto <D.33268>; else goto <D.33269>;
  <D.33268>:
  D.33267 = assemblyb->pktoken;
  D.33270 = D.33267->max_length;
  if (D.33270 != 0) goto <D.33271>; else goto <D.33272>;
  <D.33271>:
  D.33267 = assemblyb->pktoken;
  D.33270 = D.33267->max_length;
  if (D.33270 != 16) goto <D.33273>; else goto <D.33274>;
  <D.33273>:
  D.33275 = assembly->assembly.aname.name;
  D.33267 = assemblyb->pktoken;
  D.33270 = D.33267->max_length;
  monoeg_g_log (0B, 4, "Public key token length invalid for assembly %s: %i", D.33275, D.33270);
  <D.22977>:
  goto <D.22977>;
  <D.33274>:
  D.33276 = &assembly->assembly.aname.public_key_token;
  D.33267 = assemblyb->pktoken;
  D.33277 = mono_array_addr_with_size (D.33267, 1, 0);
  D.33267 = assemblyb->pktoken;
  D.33270 = D.33267->max_length;
  memcpy (D.33276, D.33277, D.33270);
  <D.33272>:
  <D.33269>:
  {
    int ret;

    D.33278 = &domain->assemblies_lock.mutex;
    ret = pthread_mutex_lock (D.33278);
    if (ret != 0) goto <D.33279>; else goto <D.33280>;
    <D.33279>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.33280>:
    D.33281 = ret != 0;
    D.33282 = (long int) D.33281;
    D.33283 = __builtin_expect (D.33282, 0);
    if (D.33283 != 0) goto <D.33284>; else goto <D.33285>;
    <D.33284>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5333, "ret == 0");
    <D.33285>:
  }
  D.33286 = domain->domain_assemblies;
  D.33287 = monoeg_g_slist_append (D.33286, assembly);
  domain->domain_assemblies = D.33287;
  {
    int ret;

    D.33278 = &domain->assemblies_lock.mutex;
    ret = pthread_mutex_unlock (D.33278);
    if (ret != 0) goto <D.33288>; else goto <D.33289>;
    <D.33288>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.33289>:
    D.33290 = ret != 0;
    D.33291 = (long int) D.33290;
    D.33292 = __builtin_expect (D.33291, 0);
    if (D.33292 != 0) goto <D.33293>; else goto <D.33294>;
    <D.33293>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5335, "ret == 0");
    <D.33294>:
  }
  D.33217 = MEM[(struct MonoObject *)assemblyb].vtable;
  D.33295 = D.33217->domain;
  D.33296 = &assemblyb->assembly;
  D.33222 = &assembly->assembly;
  register_assembly (D.33295, D.33296, D.33222);
  D.33222 = &assembly->assembly;
  mono_profiler_assembly_loaded (D.33222, 0);
  mono_assembly_invoke_load_hook (assembly);
}


atoi (const char * __nptr)
{
  int D.33298;

  D.33298 = strtol (__nptr, 0B, 10);
  return D.33298;
}


create_dynamic_mono_image (struct MonoDynamicAssembly * assembly, char * assembly_name, char * module_name)
{
  int D.22936;
  int iftmp.294;
  int D.22935;
  const struct MonoRuntimeInfo * D.33303;
  const char[4] * D.33304;
  unsigned char D.33305;
  int D.33306;
  unsigned char D.33307;
  int D.33308;
  _Bool D.33309;
  _Bool D.33310;
  _Bool D.33311;
  const unsigned char * D.33314;
  unsigned char D.33315;
  int D.33316;
  const unsigned char * D.33317;
  unsigned char D.33318;
  int D.33319;
  _Bool D.33320;
  _Bool D.33321;
  const unsigned char * D.33324;
  unsigned char D.33325;
  int D.33326;
  const unsigned char * D.33327;
  unsigned char D.33328;
  int D.33329;
  _Bool D.33330;
  _Bool D.33331;
  const unsigned char * D.33334;
  unsigned char D.33335;
  int D.33336;
  const unsigned char * D.33337;
  unsigned char D.33338;
  int D.33339;
  const struct MonoRuntimeInfo * D.33341;
  const char[4] * D.33342;
  const struct MonoRuntimeInfo * D.33346;
  struct MonoImage * D.33347;
  char * D.33348;
  gchar * D.33349;
  void * D.33350;
  struct MonoAssembly * * D.33351;
  struct MonoGHashTable * D.33352;
  struct GHashTable * D.33353;
  struct GHashTable * D.33354;
  struct GHashTable * D.33355;
  struct GHashTable * D.33356;
  struct GHashTable * D.33357;
  struct MonoGHashTable * D.33358;
  struct MonoGHashTable * D.33359;
  struct MonoGHashTable * D.33360;
  struct MonoGHashTable * D.33361;
  struct GHashTable * D.33362;
  struct GHashTable * D.33363;
  struct GHashTable * D.33364;
  struct GPtrArray * D.33365;
  struct MonoGHashTable * D.33366;
  struct MonoDynamicStream * D.33367;
  struct MonoDynamicStream * D.33368;
  struct MonoDynamicStream * D.33369;
  unsigned int D.33370;
  unsigned int D.33371;
  unsigned int D.33372;
  unsigned int D.33373;
  unsigned int D.33374;
  unsigned char D.33375;
  unsigned char D.33376;
  int D.33377;
  unsigned char D.33378;
  int D.33379;
  struct MonoDynamicImage * D.33380;
  static const guchar entrycode[16] = {255, 37, 0};
  struct MonoDynamicImage * image;
  int i;
  const char * version;

  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.33303 = mono_get_runtime_info ();
      __s2 = &D.33303->framework_version;
      D.33304 = "2.1";
      D.33305 = MEM[(const unsigned char *)D.33304];
      D.33306 = (int) D.33305;
      D.33307 = *__s2;
      D.33308 = (int) D.33307;
      __result = D.33306 - D.33308;
      {
        D.33309 = __s2_len != 0;
        D.33310 = __result == 0;
        D.33311 = D.33309 & D.33310;
        if (D.33311 != 0) goto <D.33312>; else goto <D.33313>;
        <D.33312>:
        D.33314 = &MEM[(void *)"2.1" + 1B];
        D.33315 = *D.33314;
        D.33316 = (int) D.33315;
        D.33317 = __s2 + 1;
        D.33318 = *D.33317;
        D.33319 = (int) D.33318;
        __result = D.33316 - D.33319;
        D.33320 = __s2_len > 1;
        D.33310 = __result == 0;
        D.33321 = D.33320 & D.33310;
        if (D.33321 != 0) goto <D.33322>; else goto <D.33323>;
        <D.33322>:
        D.33324 = &MEM[(void *)"2.1" + 2B];
        D.33325 = *D.33324;
        D.33326 = (int) D.33325;
        D.33327 = __s2 + 2;
        D.33328 = *D.33327;
        D.33329 = (int) D.33328;
        __result = D.33326 - D.33329;
        D.33330 = __s2_len > 2;
        D.33310 = __result == 0;
        D.33331 = D.33330 & D.33310;
        if (D.33331 != 0) goto <D.33332>; else goto <D.33333>;
        <D.33332>:
        D.33334 = &MEM[(void *)"2.1" + 3B];
        D.33335 = *D.33334;
        D.33336 = (int) D.33335;
        D.33337 = __s2 + 3;
        D.33338 = *D.33337;
        D.33339 = (int) D.33338;
        __result = D.33336 - D.33339;
        <D.33333>:
        <D.33323>:
        <D.33313>:
      }
      D.22935 = __result;
    }
    iftmp.294 = -D.22935;
    goto <D.33340>;
    <D.33302>:
    D.33341 = mono_get_runtime_info ();
    D.33342 = &D.33341->framework_version;
    iftmp.294 = __builtin_strcmp (D.33342, "2.1");
    <D.33340>:
    D.22936 = iftmp.294;
  }
  if (D.22936 == 0) goto <D.33343>; else goto <D.33344>;
  <D.33343>:
  version = "v2.0.50727";
  goto <D.33345>;
  <D.33344>:
  D.33346 = mono_get_runtime_info ();
  version = &D.33346->runtime_version;
  <D.33345>:
  image = monoeg_malloc0 (2220);
  D.33347 = &image->image;
  mono_profiler_module_event (D.33347, 0);
  image->image.name = assembly_name;
  D.33348 = image->image.name;
  image->image.assembly_name = D.33348;
  image->image.module_name = module_name;
  D.33349 = monoeg_strdup (version);
  image->image.version = D.33349;
  image->image.md_version_major = 1;
  image->image.md_version_minor = 1;
  image->image.dynamic = 1;
  D.33350 = monoeg_malloc0 (4);
  image->image.references = D.33350;
  D.33351 = image->image.references;
  *D.33351 = 0B;
  D.33347 = &image->image;
  mono_image_init (D.33347);
  D.33352 = mono_g_hash_table_new_type (mono_object_hash, 0B, 1);
  image->token_fixups = D.33352;
  D.33353 = monoeg_g_hash_table_new (0B, 0B);
  image->method_to_table_idx = D.33353;
  D.33354 = monoeg_g_hash_table_new (0B, 0B);
  image->field_to_table_idx = D.33354;
  D.33355 = monoeg_g_hash_table_new (0B, 0B);
  image->method_aux_hash = D.33355;
  D.33356 = monoeg_g_hash_table_new (0B, 0B);
  image->vararg_aux_hash = D.33356;
  D.33357 = monoeg_g_hash_table_new (0B, 0B);
  image->handleref = D.33357;
  D.33358 = mono_g_hash_table_new_type (mono_object_hash, 0B, 1);
  image->handleref_managed = D.33358;
  D.33359 = mono_g_hash_table_new_type (0B, 0B, 2);
  image->tokens = D.33359;
  D.33360 = mono_g_hash_table_new_type (0B, 0B, 2);
  image->generic_def_objects = D.33360;
  D.33361 = mono_g_hash_table_new_type (mono_object_hash, 0B, 1);
  image->methodspec = D.33361;
  D.33362 = monoeg_g_hash_table_new (mono_metadata_type_hash, mono_metadata_type_equal);
  image->typespec = D.33362;
  D.33363 = monoeg_g_hash_table_new (mono_metadata_type_hash, mono_metadata_type_equal);
  image->typeref = D.33363;
  D.33364 = monoeg_g_hash_table_new (mono_blob_entry_hash, mono_blob_entry_equal);
  image->blob_cache = D.33364;
  D.33365 = monoeg_g_ptr_array_new ();
  image->gen_params = D.33365;
  D.33366 = mono_g_hash_table_new_type (0B, 0B, 2);
  image->remapped_tokens = D.33366;
  D.33367 = &image->sheap;
  string_heap_init (D.33367);
  D.33368 = &image->us;
  mono_image_add_stream_data (D.33368, "", 1);
  add_to_blob_cached (image, "", 1, 0B, 0);
  D.33369 = &image->code;
  mono_image_add_stream_data (D.33369, &entrycode, 16);
  D.33369 = &image->code;
  D.33370 = mono_image_add_stream_zero (D.33369, 8);
  image->iat_offset = D.33370;
  D.33369 = &image->code;
  D.33371 = mono_image_add_stream_zero (D.33369, 40);
  image->idt_offset = D.33371;
  D.33369 = &image->code;
  D.33372 = mono_image_add_stream_zero (D.33369, 2);
  image->imp_names_offset = D.33372;
  D.33369 = &image->code;
  mono_image_add_stream_data (D.33369, "_CorExeMain", 12);
  D.33369 = &image->code;
  mono_image_add_stream_data (D.33369, "mscoree.dll", 12);
  D.33369 = &image->code;
  D.33373 = mono_image_add_stream_zero (D.33369, 8);
  image->ilt_offset = D.33373;
  D.33369 = &image->code;
  stream_data_align (D.33369);
  D.33369 = &image->code;
  D.33374 = mono_image_add_stream_zero (D.33369, 136);
  image->cli_header_offset = D.33374;
  i = 0;
  goto <D.22938>;
  <D.22937>:
  image->tables[i].next_idx = 1;
  D.33375 = table_sizes[i];
  image->tables[i].columns = D.33375;
  i = i + 1;
  <D.22938>:
  if (i <= 44) goto <D.22937>; else goto <D.22939>;
  <D.22939>:
  image->image.assembly = assembly;
  D.33376 = assembly->run;
  D.33377 = (int) D.33376;
  image->run = D.33377;
  D.33378 = assembly->save;
  D.33379 = (int) D.33378;
  image->save = D.33379;
  image->pe_kind = 1;
  image->machine = 332;
  D.33347 = &image->image;
  mono_profiler_module_loaded (D.33347, 0);
  D.33380 = image;
  return D.33380;
}


mono_blob_entry_equal (const char * str1, const char * str2)
{
  unsigned int D.33382;
  unsigned int D.33383;
  gboolean D.33386;
  const char * end1.295;
  const char * end2.296;
  unsigned int len.297;
  int D.33390;
  _Bool D.33391;
  int len;
  int len2;
  const char * end1;
  const char * end2;

  try
    {
      D.33382 = mono_metadata_decode_blob_size (str1, &end1);
      len = (int) D.33382;
      D.33383 = mono_metadata_decode_blob_size (str2, &end2);
      len2 = (int) D.33383;
      if (len != len2) goto <D.33384>; else goto <D.33385>;
      <D.33384>:
      D.33386 = 0;
      return D.33386;
      <D.33385>:
      end1.295 = end1;
      end2.296 = end2;
      len.297 = (unsigned int) len;
      D.33390 = memcmp (end1.295, end2.296, len.297);
      D.33391 = D.33390 == 0;
      D.33386 = (gboolean) D.33391;
      return D.33386;
    }
  finally
    {
      end1 = {CLOBBER};
      end2 = {CLOBBER};
    }
}


mono_blob_entry_hash (const char * str)
{
  const char * str.298;
  char D.33397;
  const char * str.299;
  unsigned int D.33399;
  unsigned int D.33400;
  unsigned int D.33401;
  int D.33402;
  guint len;
  guint h;
  const char * end;

  str.298 = str;
  len = mono_metadata_decode_blob_size (str.298, &str);
  if (len != 0) goto <D.33395>; else goto <D.33396>;
  <D.33395>:
  str.298 = str;
  end = str.298 + len;
  str.298 = str;
  D.33397 = *str.298;
  h = (guint) D.33397;
  str.298 = str;
  str.299 = str.298 + 1;
  str = str.299;
  goto <D.20942>;
  <D.20941>:
  D.33399 = h << 5;
  D.33400 = D.33399 - h;
  str.298 = str;
  D.33397 = *str.298;
  D.33401 = (unsigned int) D.33397;
  h = D.33400 + D.33401;
  str.298 = str;
  str.299 = str.298 + 1;
  str = str.299;
  <D.20942>:
  str.298 = str;
  if (str.298 < end) goto <D.20941>; else goto <D.20943>;
  <D.20943>:
  D.33402 = (int) h;
  return D.33402;
  <D.33396>:
  D.33402 = 0;
  return D.33402;
}


string_heap_init (struct MonoDynamicStream * sh)
{
  void * D.33404;
  struct GHashTable * D.33405;

  sh->index = 0;
  sh->alloc_size = 4096;
  D.33404 = monoeg_malloc (4096);
  sh->data = D.33404;
  D.33405 = monoeg_g_hash_table_new_full (monoeg_g_str_hash, monoeg_g_str_equal, monoeg_g_free, 0B);
  sh->hash = D.33405;
  string_heap_insert (sh, "");
}


register_assembly (struct MonoDomain * domain, struct MonoReflectionAssembly * res, struct MonoAssembly * assembly)
{
  union mono_mutex_t * D.33406;
  _Bool D.33409;
  long int D.33410;
  long int D.33411;
  struct MonoGHashTable * D.33414;
  struct MonoGHashTable * D.33417;
  struct MonoMemPool * D.33420;
  _Bool D.33423;
  long int D.33424;
  long int D.33425;
  void * D.33428;

  {
    struct MonoReflectionAssembly * _obj;
    struct ReflectedEntry pe;

    try
      {
        pe.item = assembly;
        pe.refclass = 0B;
        {
          int ret;

          D.33406 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.33406);
          if (ret != 0) goto <D.33407>; else goto <D.33408>;
          <D.33407>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.33408>:
          D.33409 = ret != 0;
          D.33410 = (long int) D.33409;
          D.33411 = __builtin_expect (D.33410, 0);
          if (D.33411 != 0) goto <D.33412>; else goto <D.33413>;
          <D.33412>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6167, "ret == 0");
          <D.33413>:
        }
        D.33414 = domain->refobject_hash;
        if (D.33414 == 0B) goto <D.33415>; else goto <D.33416>;
        <D.33415>:
        D.33417 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.33417;
        <D.33416>:
        D.33414 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.33414, &pe);
        if (_obj == 0B) goto <D.33418>; else goto <D.33419>;
        <D.33418>:
        {
          struct ReflectedEntry * e;

          D.33420 = domain->mp;
          e = mono_mempool_alloc (D.33420, 8);
          e->item = assembly;
          e->refclass = 0B;
          D.33414 = domain->refobject_hash;
          mono_g_hash_table_insert (D.33414, e, res);
          _obj = res;
        }
        <D.33419>:
        {
          int ret;

          D.33406 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.33406);
          if (ret != 0) goto <D.33421>; else goto <D.33422>;
          <D.33421>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.33422>:
          D.33423 = ret != 0;
          D.33424 = (long int) D.33423;
          D.33425 = __builtin_expect (D.33424, 0);
          if (D.33425 != 0) goto <D.33426>; else goto <D.33427>;
          <D.33426>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6167, "ret == 0");
          <D.33427>:
        }
        D.33428 = _obj;
        return D.33428;
      }
    finally
      {
        pe = {CLOBBER};
      }
  }
}


reflected_equal (const void * a, const void * b)
{
  gboolean D.33431;
  int iftmp.300;
  void * D.33435;
  void * D.33436;
  struct MonoClass * D.33438;
  struct MonoClass * D.33439;
  const struct ReflectedEntry * ea;
  const struct ReflectedEntry * eb;

  ea = a;
  eb = b;
  D.33435 = ea->item;
  D.33436 = eb->item;
  if (D.33435 == D.33436) goto <D.33437>; else goto <D.33433>;
  <D.33437>:
  D.33438 = ea->refclass;
  D.33439 = eb->refclass;
  if (D.33438 == D.33439) goto <D.33440>; else goto <D.33433>;
  <D.33440>:
  iftmp.300 = 1;
  goto <D.33434>;
  <D.33433>:
  iftmp.300 = 0;
  <D.33434>:
  D.33431 = iftmp.300;
  return D.33431;
}


reflected_hash (const void * a)
{
  guint D.33442;
  void * D.33443;
  const struct ReflectedEntry * ea;

  ea = a;
  D.33443 = ea->item;
  D.33442 = mono_aligned_addr_hash (D.33443);
  return D.33442;
}


mono_image_create_pefile (struct MonoReflectionModuleBuilder * mb, void * file)
{
  int D.33445;
  unsigned int D.33446;
  int D.33447;
  unsigned int D.33448;
  struct MonoDynamicAssembly * D.33449;
  struct MonoImage * D.33450;
  int D.33451;
  struct MonoArray * D.33454;
  unsigned int D.33457;
  unsigned int i.301;
  char * D.33459;
  struct MonoArray * D.33460;
  unsigned int D.33463;
  char * D.33464;
  unsigned int nsections.302;
  unsigned int D.33470;
  unsigned int D.33471;
  unsigned int D.33474;
  unsigned int D.33475;
  unsigned int D.33476;
  char * D.33477;
  short unsigned int D.33478;
  short unsigned int D.33479;
  long int D.33480;
  unsigned int D.33481;
  unsigned int D.33482;
  unsigned int D.33486;
  _Bool D.33487;
  long int D.33488;
  long int D.33489;
  unsigned int D.33492;
  short unsigned int kind.303;
  unsigned int D.33497;
  unsigned int D.33498;
  unsigned int D.33499;
  unsigned int D.33500;
  unsigned int D.33501;
  unsigned int D.33502;
  unsigned int D.33503;
  unsigned int D.33504;
  char * D.33507;
  unsigned int D.33508;
  sizetype D.33509;
  char * D.33510;
  unsigned int D.33512;
  unsigned int D.33513;
  unsigned int D.33514;
  sizetype D.33515;
  unsigned int D.33516;
  sizetype D.33517;
  unsigned int D.33518;
  unsigned int D.33519;
  guchar * p.304;
  unsigned char D.33521;
  guchar * p.305;
  unsigned int D.33523;
  unsigned char D.33524;
  guchar * p.306;
  unsigned int D.33526;
  unsigned char D.33527;
  guchar * p.307;
  unsigned int D.33529;
  unsigned char D.33530;
  struct MonoReflectionMethod * D.33531;
  int D.23125;
  int iftmp.308;
  int D.23124;
  struct MonoVTable * D.33537;
  struct MonoClass * D.33538;
  const char[14] * D.33539;
  unsigned char D.33540;
  int D.33541;
  unsigned char D.33542;
  int D.33543;
  _Bool D.33544;
  _Bool D.33545;
  _Bool D.33546;
  const unsigned char * D.33549;
  unsigned char D.33550;
  int D.33551;
  const unsigned char * D.33552;
  unsigned char D.33553;
  int D.33554;
  _Bool D.33555;
  _Bool D.33556;
  const unsigned char * D.33559;
  unsigned char D.33560;
  int D.33561;
  const unsigned char * D.33562;
  unsigned char D.33563;
  int D.33564;
  _Bool D.33565;
  _Bool D.33566;
  const unsigned char * D.33569;
  unsigned char D.33570;
  int D.33571;
  const unsigned char * D.33572;
  unsigned char D.33573;
  int D.33574;
  const char * D.33576;
  struct GHashTable * D.33580;
  struct MonoMethod * D.33581;
  void * D.33582;
  unsigned int D.33583;
  unsigned int D.33585;
  unsigned int D.33586;
  unsigned int D.33587;
  unsigned int D.33588;
  char[8] * D.33593;
  const char[7] * D.33594;
  unsigned int D.33595;
  unsigned int D.33596;
  unsigned int D.33597;
  unsigned int D.33598;
  unsigned int D.33599;
  unsigned int D.33600;
  unsigned int D.33601;
  unsigned int D.33602;
  int D.33605;
  unsigned int D.33606;
  unsigned int D.33609;
  unsigned int D.33610;
  guchar * p.309;
  guchar * p.310;
  guchar * p.311;
  guchar * p.312;
  char * D.33615;
  char * D.33616;
  char * D.33617;
  char * D.33620;
  unsigned int D.33623;
  int file_offset.313;
  unsigned int D.33625;
  unsigned int D.33628;
  int D.33629;
  unsigned int D.33632;
  struct MonoDynamicStream * D.33633;
  struct MonoDynamicStream * D.33634;
  struct MonoDynamicStream * D.33635;
  struct MonoDynamicStream * D.33636;
  struct MonoDynamicStream * D.33637;
  struct GHashTable * D.33638;
  struct MonoMSDOSHeader * msdos;
  struct MonoDotNetHeader * header;
  struct MonoSectionTable * section;
  struct MonoCLIHeader * cli_header;
  guint32 size;
  guint32 image_size;
  guint32 virtual_base;
  guint32 text_offset;
  guint32 header_start;
  guint32 section_start;
  guint32 file_offset;
  guint32 virtual_offset;
  struct MonoDynamicImage * assembly;
  struct MonoReflectionAssemblyBuilder * assemblyb;
  struct MonoDynamicStream pefile_stream;
  struct MonoDynamicStream * pefile;
  int i;
  int nsections;
  guint32 * rva;
  guint32 value;
  guchar * p;
  static const unsigned char msheader[128] = {77, 90, 144, 0, 3, 0, 0, 0, 4, 0, 0, 0, 255, 255, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 14, 31, 186, 14, 0, 180, 9, 205, 33, 184, 1, 76, 205, 33, 84, 104, 105, 115, 32, 112, 114, 111, 103, 114, 97, 109, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 114, 117, 110, 32, 105, 110, 32, 68, 79, 83, 32, 109, 111, 100, 101, 46, 13, 13, 10, 36, 0, 0, 0, 0, 0, 0, 0};

  try
    {
      pefile_stream = {};
      pefile = &pefile_stream;
      assemblyb = mb->assemblyb;
      mono_image_basic_init (assemblyb);
      assembly = mb->dynamic_image;
      D.33445 = assemblyb->pe_kind;
      D.33446 = (unsigned int) D.33445;
      assembly->pe_kind = D.33446;
      D.33447 = assemblyb->machine;
      D.33448 = (unsigned int) D.33447;
      assembly->machine = D.33448;
      D.33449 = assemblyb->dynamic_assembly;
      D.33450 = D.33449->assembly.image;
      D.33445 = assemblyb->pe_kind;
      D.33446 = (unsigned int) D.33445;
      MEM[(struct MonoDynamicImage *)D.33450].pe_kind = D.33446;
      D.33449 = assemblyb->dynamic_assembly;
      D.33450 = D.33449->assembly.image;
      D.33447 = assemblyb->machine;
      D.33448 = (unsigned int) D.33447;
      MEM[(struct MonoDynamicImage *)D.33450].machine = D.33448;
      mono_image_build_metadata (mb);
      D.33451 = mb->is_main;
      if (D.33451 != 0) goto <D.33452>; else goto <D.33453>;
      <D.33452>:
      D.33454 = assemblyb->resources;
      if (D.33454 != 0B) goto <D.33455>; else goto <D.33456>;
      <D.33455>:
      {
        int len;

        D.33454 = assemblyb->resources;
        D.33457 = mono_array_length (D.33454);
        len = (int) D.33457;
        i = 0;
        goto <D.23105>;
        <D.23104>:
        D.33454 = assemblyb->resources;
        i.301 = (unsigned int) i;
        D.33459 = mono_array_addr_with_size (D.33454, 24, i.301);
        assembly_add_resource (mb, assembly, D.33459);
        i = i + 1;
        <D.23105>:
        if (i < len) goto <D.23104>; else goto <D.23106>;
        <D.23106>:
      }
      <D.33456>:
      <D.33453>:
      D.33460 = mb->resources;
      if (D.33460 != 0B) goto <D.33461>; else goto <D.33462>;
      <D.33461>:
      {
        int len;

        D.33460 = mb->resources;
        D.33463 = mono_array_length (D.33460);
        len = (int) D.33463;
        i = 0;
        goto <D.23109>;
        <D.23108>:
        D.33460 = mb->resources;
        i.301 = (unsigned int) i;
        D.33464 = mono_array_addr_with_size (D.33460, 24, i.301);
        assembly_add_resource (mb, assembly, D.33464);
        i = i + 1;
        <D.23109>:
        if (i < len) goto <D.23108>; else goto <D.23110>;
        <D.23110>:
      }
      <D.33462>:
      build_compressed_metadata (assembly);
      D.33451 = mb->is_main;
      if (D.33451 != 0) goto <D.33465>; else goto <D.33466>;
      <D.33465>:
      assembly_add_win32_resources (assembly, assemblyb);
      <D.33466>:
      nsections = calc_section_size (assembly);
      if (0 != 0) goto <D.33467>; else goto <D.33468>;
      <D.33467>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5690, "sizeof (MonoMSDOSHeader) == sizeof (msheader)");
      <D.33468>:
      mono_image_add_stream_data (pefile, &msheader, 128);
      header_start = mono_image_add_stream_zero (pefile, 248);
      nsections.302 = (unsigned int) nsections;
      D.33470 = nsections.302 * 40;
      section_start = mono_image_add_stream_zero (pefile, D.33470);
      nsections.302 = (unsigned int) nsections;
      D.33470 = nsections.302 * 40;
      file_offset = D.33470 + section_start;
      virtual_offset = 8192;
      image_size = 0;
      i = 0;
      goto <D.23113>;
      <D.23112>:
      D.33471 = assembly->sections[i].size;
      if (D.33471 == 0) goto <D.33472>; else goto <D.33473>;
      <D.33472>:
      // predicted unlikely by continue predictor.
      goto <D.23111>;
      <D.33473>:
      file_offset = file_offset + 511;
      file_offset = file_offset & 4294966784;
      virtual_offset = virtual_offset + 8191;
      virtual_offset = virtual_offset & 4294959104;
      assembly->sections[i].offset = file_offset;
      assembly->sections[i].rva = virtual_offset;
      D.33471 = assembly->sections[i].size;
      file_offset = D.33471 + file_offset;
      D.33471 = assembly->sections[i].size;
      virtual_offset = D.33471 + virtual_offset;
      D.33471 = assembly->sections[i].size;
      D.33474 = D.33471 + 8191;
      D.33475 = D.33474 & 4294959104;
      image_size = D.33475 + image_size;
      <D.23111>:
      i = i + 1;
      <D.23113>:
      if (i <= 2) goto <D.23112>; else goto <D.23114>;
      <D.23114>:
      file_offset = file_offset + 511;
      file_offset = file_offset & 4294966784;
      nsections.302 = (unsigned int) nsections;
      D.33470 = nsections.302 * 40;
      D.33476 = D.33470 + section_start;
      image_size = D.33476 + image_size;
      msdos = pefile->data;
      msdos->pe_offset = 128;
      D.33477 = pefile->data;
      header = D.33477 + header_start;
      header->pesig[0] = 80;
      header->pesig[1] = 69;
      D.33447 = assemblyb->machine;
      D.33478 = (short unsigned int) D.33447;
      header->coff.coff_machine = D.33478;
      D.33479 = (short unsigned int) nsections;
      header->coff.coff_sections = D.33479;
      D.33480 = time (0B);
      D.33481 = (unsigned int) D.33480;
      header->coff.coff_time = D.33481;
      header->coff.coff_opt_header_size = 224;
      D.33482 = assemblyb->pekind;
      if (D.33482 == 1) goto <D.33483>; else goto <D.33484>;
      <D.33483>:
      header->coff.coff_attributes = 8462;
      goto <D.33485>;
      <D.33484>:
      header->coff.coff_attributes = 270;
      <D.33485>:
      virtual_base = 4194304;
      header->pe.pe_magic = 267;
      header->pe.pe_major = 6;
      header->pe.pe_minor = 0;
      size = assembly->sections[0].size;
      size = size + 511;
      size = size & 4294966784;
      header->pe.pe_code_size = size;
      size = assembly->sections[1].size;
      size = size + 511;
      size = size & 4294966784;
      header->pe.pe_data_size = size;
      D.33486 = assembly->sections[0].rva;
      D.33487 = D.33486 != 8192;
      D.33488 = (long int) D.33487;
      D.33489 = __builtin_expect (D.33488, 0);
      if (D.33489 != 0) goto <D.33490>; else goto <D.33491>;
      <D.33490>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5758, "START_TEXT_RVA == assembly->sections [MONO_SECTION_TEXT].rva");
      <D.33491>:
      D.33486 = assembly->sections[0].rva;
      header->pe.pe_rva_code_base = D.33486;
      D.33492 = assembly->sections[1].rva;
      header->pe.pe_rva_data_base = D.33492;
      D.33486 = assembly->sections[0].rva;
      header->pe.pe_rva_entry_point = D.33486;
      header->nt.pe_image_base = virtual_base;
      header->nt.pe_section_align = 8192;
      header->nt.pe_file_alignment = 512;
      header->nt.pe_os_major = 4;
      header->nt.pe_os_minor = 0;
      header->nt.pe_subsys_major = 4;
      size = section_start;
      size = size + 511;
      size = size & 4294966784;
      header->nt.pe_header_size = size;
      size = image_size;
      size = size + 8191;
      size = size & 4294959104;
      header->nt.pe_image_size = size;
      {
        short int kind;

        D.33482 = assemblyb->pekind;
        if (D.33482 == 3) goto <D.33493>; else goto <D.33494>;
        <D.33493>:
        kind = 2;
        goto <D.33495>;
        <D.33494>:
        kind = 3;
        <D.33495>:
        kind.303 = (short unsigned int) kind;
        header->nt.pe_subsys_required = kind.303;
      }
      header->nt.pe_stack_reserve = 1048576;
      header->nt.pe_stack_commit = 4096;
      header->nt.pe_heap_reserve = 1048576;
      header->nt.pe_heap_commit = 4096;
      header->nt.pe_loader_flags = 0;
      header->nt.pe_data_dir_count = 16;
      D.33497 = assembly->sections[1].size;
      header->datadir.pe_resource_table.size = D.33497;
      D.33492 = assembly->sections[1].rva;
      header->datadir.pe_resource_table.rva = D.33492;
      D.33498 = assembly->sections[2].size;
      header->datadir.pe_reloc_table.size = D.33498;
      D.33499 = assembly->sections[2].rva;
      header->datadir.pe_reloc_table.rva = D.33499;
      header->datadir.pe_cli_header.size = 72;
      D.33500 = assembly->text_rva;
      D.33501 = assembly->cli_header_offset;
      D.33502 = D.33500 + D.33501;
      header->datadir.pe_cli_header.rva = D.33502;
      header->datadir.pe_iat.size = 8;
      D.33500 = assembly->text_rva;
      D.33503 = assembly->iat_offset;
      D.33504 = D.33500 + D.33503;
      header->datadir.pe_iat.rva = D.33504;
      D.33482 = assemblyb->pekind;
      if (D.33482 == 1) goto <D.33505>; else goto <D.33506>;
      <D.33505>:
      D.33507 = assembly->code.data;
      D.33508 = assembly->imp_names_offset;
      D.33509 = D.33508 + 2;
      D.33510 = D.33507 + D.33509;
      memcpy (D.33510, "_CorDllMain", 12);
      goto <D.33511>;
      <D.33506>:
      D.33507 = assembly->code.data;
      D.33508 = assembly->imp_names_offset;
      D.33509 = D.33508 + 2;
      D.33510 = D.33507 + D.33509;
      memcpy (D.33510, "_CorExeMain", 12);
      <D.33511>:
      D.33507 = assembly->code.data;
      D.33503 = assembly->iat_offset;
      rva = D.33507 + D.33503;
      D.33500 = assembly->text_rva;
      D.33508 = assembly->imp_names_offset;
      D.33512 = D.33500 + D.33508;
      *rva = D.33512;
      header->datadir.pe_import_table.size = 79;
      D.33500 = assembly->text_rva;
      D.33513 = assembly->idt_offset;
      D.33514 = D.33500 + D.33513;
      header->datadir.pe_import_table.rva = D.33514;
      D.33507 = assembly->code.data;
      D.33513 = assembly->idt_offset;
      D.33515 = D.33513 + 12;
      rva = D.33507 + D.33515;
      D.33500 = assembly->text_rva;
      D.33508 = assembly->imp_names_offset;
      D.33512 = D.33500 + D.33508;
      D.33516 = D.33512 + 14;
      *rva = D.33516;
      D.33507 = assembly->code.data;
      D.33513 = assembly->idt_offset;
      D.33517 = D.33513 + 16;
      rva = D.33507 + D.33517;
      D.33500 = assembly->text_rva;
      D.33503 = assembly->iat_offset;
      D.33504 = D.33500 + D.33503;
      *rva = D.33504;
      D.33507 = assembly->code.data;
      D.33513 = assembly->idt_offset;
      rva = D.33507 + D.33513;
      D.33500 = assembly->text_rva;
      D.33518 = assembly->ilt_offset;
      D.33519 = D.33500 + D.33518;
      *rva = D.33519;
      D.33507 = assembly->code.data;
      D.33518 = assembly->ilt_offset;
      p = D.33507 + D.33518;
      D.33500 = assembly->text_rva;
      D.33508 = assembly->imp_names_offset;
      value = D.33500 + D.33508;
      p.304 = p;
      p = p.304 + 1;
      D.33521 = (unsigned char) value;
      *p.304 = D.33521;
      p.305 = p;
      p = p.305 + 1;
      D.33523 = value >> 8;
      D.33524 = (unsigned char) D.33523;
      *p.305 = D.33524;
      p.306 = p;
      p = p.306 + 1;
      D.33526 = value >> 16;
      D.33527 = (unsigned char) D.33526;
      *p.306 = D.33527;
      p.307 = p;
      p = p.307 + 1;
      D.33529 = value >> 24;
      D.33530 = (unsigned char) D.33529;
      *p.307 = D.33530;
      D.33507 = assembly->code.data;
      D.33501 = assembly->cli_header_offset;
      cli_header = D.33507 + D.33501;
      cli_header->ch_size = 72;
      cli_header->ch_runtime_major = 2;
      cli_header->ch_runtime_minor = 5;
      D.33445 = assemblyb->pe_kind;
      D.33446 = (unsigned int) D.33445;
      cli_header->ch_flags = D.33446;
      D.33531 = assemblyb->entry_point;
      if (D.33531 != 0B) goto <D.33532>; else goto <D.33533>;
      <D.33532>:
      {
        guint32 table_idx;

        table_idx = 0;
        {
          size_t __s1_len;
          size_t __s2_len;

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

            D.33531 = assemblyb->entry_point;
            D.33537 = D.33531->object.vtable;
            D.33538 = D.33537->klass;
            __s2 = D.33538->name;
            D.33539 = "MethodBuilder";
            D.33540 = MEM[(const unsigned char *)D.33539];
            D.33541 = (int) D.33540;
            D.33542 = *__s2;
            D.33543 = (int) D.33542;
            __result = D.33541 - D.33543;
            {
              D.33544 = __s2_len != 0;
              D.33545 = __result == 0;
              D.33546 = D.33544 & D.33545;
              if (D.33546 != 0) goto <D.33547>; else goto <D.33548>;
              <D.33547>:
              D.33549 = &MEM[(void *)"MethodBuilder" + 1B];
              D.33550 = *D.33549;
              D.33551 = (int) D.33550;
              D.33552 = __s2 + 1;
              D.33553 = *D.33552;
              D.33554 = (int) D.33553;
              __result = D.33551 - D.33554;
              D.33555 = __s2_len > 1;
              D.33545 = __result == 0;
              D.33556 = D.33555 & D.33545;
              if (D.33556 != 0) goto <D.33557>; else goto <D.33558>;
              <D.33557>:
              D.33559 = &MEM[(void *)"MethodBuilder" + 2B];
              D.33560 = *D.33559;
              D.33561 = (int) D.33560;
              D.33562 = __s2 + 2;
              D.33563 = *D.33562;
              D.33564 = (int) D.33563;
              __result = D.33561 - D.33564;
              D.33565 = __s2_len > 2;
              D.33545 = __result == 0;
              D.33566 = D.33565 & D.33545;
              if (D.33566 != 0) goto <D.33567>; else goto <D.33568>;
              <D.33567>:
              D.33569 = &MEM[(void *)"MethodBuilder" + 3B];
              D.33570 = *D.33569;
              D.33571 = (int) D.33570;
              D.33572 = __s2 + 3;
              D.33573 = *D.33572;
              D.33574 = (int) D.33573;
              __result = D.33571 - D.33574;
              <D.33568>:
              <D.33558>:
              <D.33548>:
            }
            D.23124 = __result;
          }
          iftmp.308 = -D.23124;
          goto <D.33575>;
          <D.33536>:
          D.33531 = assemblyb->entry_point;
          D.33537 = D.33531->object.vtable;
          D.33538 = D.33537->klass;
          D.33576 = D.33538->name;
          iftmp.308 = __builtin_strcmp (D.33576, "MethodBuilder");
          <D.33575>:
          D.23125 = iftmp.308;
        }
        if (D.23125 == 0) goto <D.33577>; else goto <D.33578>;
        <D.33577>:
        {
          struct MonoReflectionMethodBuilder * methodb;

          methodb = assemblyb->entry_point;
          table_idx = methodb->table_idx;
        }
        goto <D.33579>;
        <D.33578>:
        D.33580 = assembly->method_to_table_idx;
        D.33531 = assemblyb->entry_point;
        D.33581 = D.33531->method;
        D.33582 = monoeg_g_hash_table_lookup (D.33580, D.33581);
        table_idx = (guint32) D.33582;
        <D.33579>:
        D.33583 = table_idx | 100663296;
        cli_header->ch_entry_point = D.33583;
      }
      goto <D.33584>;
      <D.33533>:
      cli_header->ch_entry_point = 0;
      <D.33584>:
      D.33500 = assembly->text_rva;
      D.33585 = assembly->code.index;
      text_offset = D.33500 + D.33585;
      cli_header->ch_resources.rva = text_offset;
      D.33586 = assembly->resources.index;
      cli_header->ch_resources.size = D.33586;
      D.33586 = assembly->resources.index;
      text_offset = D.33586 + text_offset;
      cli_header->ch_metadata.rva = text_offset;
      D.33587 = assembly->meta_size;
      cli_header->ch_metadata.size = D.33587;
      D.33587 = assembly->meta_size;
      text_offset = D.33587 + text_offset;
      D.33588 = assembly->strong_name_size;
      if (D.33588 != 0) goto <D.33589>; else goto <D.33590>;
      <D.33589>:
      cli_header->ch_strong_name.rva = text_offset;
      D.33588 = assembly->strong_name_size;
      cli_header->ch_strong_name.size = D.33588;
      D.33588 = assembly->strong_name_size;
      text_offset = D.33588 + text_offset;
      <D.33590>:
      D.33477 = pefile->data;
      section = D.33477 + section_start;
      i = 0;
      goto <D.23130>;
      <D.23129>:
      {
        static const char section_names[3][7] = {".text", ".rsrc", ".reloc"};

        D.33471 = assembly->sections[i].size;
        if (D.33471 == 0) goto <D.33591>; else goto <D.33592>;
        <D.33591>:
        // predicted unlikely by continue predictor.
        goto <D.23128>;
        <D.33592>:
        D.33593 = &section->st_name;
        D.33594 = &section_names[i];
        strcpy (D.33593, D.33594);
        D.33595 = assembly->sections[i].rva;
        section->st_virtual_address = D.33595;
        D.33471 = assembly->sections[i].size;
        section->st_virtual_size = D.33471;
        D.33596 = section->st_virtual_size;
        D.33597 = D.33596 + 511;
        section->st_raw_data_size = D.33597;
        D.33598 = section->st_raw_data_size;
        D.33599 = D.33598 & 4294966784;
        section->st_raw_data_size = D.33599;
        D.33600 = assembly->sections[i].offset;
        section->st_raw_data_ptr = D.33600;
        D.33601 = assembly->sections[i].attrs;
        section->st_flags = D.33601;
        section = section + 40;
      }
      <D.23128>:
      i = i + 1;
      <D.23130>:
      if (i <= 2) goto <D.23129>; else goto <D.23131>;
      <D.23131>:
      D.33477 = pefile->data;
      D.33602 = pefile->index;
      checked_write_file (file, D.33477, D.33602);
      mono_dynamic_stream_reset (pefile);
      i = 0;
      goto <D.23146>;
      <D.23145>:
      D.33471 = assembly->sections[i].size;
      if (D.33471 == 0) goto <D.33603>; else goto <D.33604>;
      <D.33603>:
      // predicted unlikely by continue predictor.
      goto <D.23132>;
      <D.33604>:
      D.33600 = assembly->sections[i].offset;
      D.33605 = (int) D.33600;
      D.33606 = SetFilePointer (file, D.33605, 0B, 0);
      if (D.33606 == 4294967295) goto <D.33607>; else goto <D.33608>;
      <D.33607>:
      D.33609 = GetLastError ();
      monoeg_g_log (0B, 4, "SetFilePointer returned %d\n", D.33609);
      <D.23133>:
      goto <D.23133>;
      <D.33608>:
      switch (i) <default: <D.23144>, case 0: <D.23134>, case 1: <D.23143>, case 2: <D.23136>>
      <D.23134>:
      D.33507 = assembly->code.data;
      p = D.33507 + 2;
      D.33500 = assembly->text_rva;
      D.33610 = D.33500 + virtual_base;
      D.33503 = assembly->iat_offset;
      value = D.33610 + D.33503;
      p.309 = p;
      p = p.309 + 1;
      D.33521 = (unsigned char) value;
      *p.309 = D.33521;
      p.310 = p;
      p = p.310 + 1;
      D.33523 = value >> 8;
      D.33524 = (unsigned char) D.33523;
      *p.310 = D.33524;
      p.311 = p;
      p = p.311 + 1;
      D.33526 = value >> 16;
      D.33527 = (unsigned char) D.33526;
      *p.311 = D.33527;
      p.312 = p;
      p = p.312 + 1;
      D.33529 = value >> 24;
      D.33530 = (unsigned char) D.33529;
      *p.312 = D.33530;
      D.33507 = assembly->code.data;
      D.33585 = assembly->code.index;
      checked_write_file (file, D.33507, D.33585);
      D.33615 = assembly->resources.data;
      D.33586 = assembly->resources.index;
      checked_write_file (file, D.33615, D.33586);
      D.33616 = assembly->image.raw_metadata;
      D.33587 = assembly->meta_size;
      checked_write_file (file, D.33616, D.33587);
      D.33617 = assembly->strong_name;
      D.33588 = assembly->strong_name_size;
      checked_write_file (file, D.33617, D.33588);
      D.33616 = assembly->image.raw_metadata;
      monoeg_g_free (D.33616);
      goto <D.23135>;
      <D.23136>:
      {
        typedef struct 
      {
        guint32 page_rva;
        guint32 block_size;
        guint16 type_and_offset;
        guint16 term;
      } struct struct 
      {
        guint32 page_rva;
        guint32 block_size;
        guint16 type_and_offset;
        guint16 term;
      };
        struct 
      {
        guint32 page_rva;
        guint32 block_size;
        guint16 type_and_offset;
        guint16 term;
      } reloc;

        try
          {
            if (0 != 0) goto <D.33618>; else goto <D.33619>;
            <D.33618>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5935, "sizeof (reloc) == 12");
            <D.33619>:
            D.33500 = assembly->text_rva;
            reloc.page_rva = D.33500;
            reloc.block_size = 12;
            reloc.type_and_offset = 12290;
            reloc.term = 0;
            checked_write_file (file, &reloc, 12);
            goto <D.23135>;
          }
        finally
          {
            reloc = {CLOBBER};
          }
      }
      <D.23143>:
      D.33620 = assembly->win32_res;
      if (D.33620 != 0B) goto <D.33621>; else goto <D.33622>;
      <D.33621>:
      D.33620 = assembly->win32_res;
      D.33620 = assembly->win32_res;
      D.33595 = assembly->sections[i].rva;
      fixup_resource_directory (D.33620, D.33620, D.33595);
      D.33620 = assembly->win32_res;
      D.33623 = assembly->win32_res_size;
      checked_write_file (file, D.33620, D.33623);
      <D.33622>:
      goto <D.23135>;
      <D.23144>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 5961);
      <D.23135>:
      <D.23132>:
      i = i + 1;
      <D.23146>:
      if (i <= 2) goto <D.23145>; else goto <D.23147>;
      <D.23147>:
      file_offset.313 = (int) file_offset;
      D.33625 = SetFilePointer (file, file_offset.313, 0B, 0);
      if (D.33625 == 4294967295) goto <D.33626>; else goto <D.33627>;
      <D.33626>:
      D.33628 = GetLastError ();
      monoeg_g_log (0B, 4, "SetFilePointer returned %d\n", D.33628);
      <D.23148>:
      goto <D.23148>;
      <D.33627>:
      D.33629 = SetEndOfFile (file);
      if (D.33629 == 0) goto <D.33630>; else goto <D.33631>;
      <D.33630>:
      D.33632 = GetLastError ();
      monoeg_g_log (0B, 4, "SetEndOfFile returned %d\n", D.33632);
      <D.23149>:
      goto <D.23149>;
      <D.33631>:
      D.33633 = &assembly->code;
      mono_dynamic_stream_reset (D.33633);
      D.33634 = &assembly->us;
      mono_dynamic_stream_reset (D.33634);
      D.33635 = &assembly->blob;
      mono_dynamic_stream_reset (D.33635);
      D.33636 = &assembly->guid;
      mono_dynamic_stream_reset (D.33636);
      D.33637 = &assembly->sheap;
      mono_dynamic_stream_reset (D.33637);
      D.33638 = assembly->blob_cache;
      monoeg_g_hash_table_foreach (D.33638, monoeg_g_free, 0B);
      D.33638 = assembly->blob_cache;
      monoeg_g_hash_table_destroy (D.33638);
      assembly->blob_cache = 0B;
    }
  finally
    {
      pefile_stream = {CLOBBER};
    }
}


assembly_add_resource (struct MonoReflectionModuleBuilder * mb, struct MonoDynamicImage * assembly, struct MonoReflectionResource * rsrc)
{
  struct MonoString * D.33641;
  unsigned int D.33644;
  unsigned int D.33645;
  guint32 * D.33646;
  unsigned int D.33647;
  unsigned int D.33648;
  guint32 * D.33649;
  struct MonoDynamicStream * D.33650;
  unsigned int D.33651;
  char * b.314;
  guint32 * D.33653;
  struct MonoDynamicStream * D.33654;
  int b.315;
  int blob_size.316;
  int D.33657;
  unsigned int D.33658;
  unsigned int D.33659;
  unsigned int idx.317;
  unsigned int D.33661;
  struct MonoArray * D.33663;
  char D.33667;
  unsigned int D.33668;
  char D.33669;
  unsigned int D.33670;
  char D.33671;
  unsigned int D.33672;
  char D.33673;
  struct MonoDynamicStream * D.33674;
  unsigned int D.33675;
  int D.33676;
  struct MonoDynamicTable * table;
  guint32 * values;
  char blob_size[6];
  guchar hash[20];
  char * b;
  char * name;
  char * sname;
  guint32 idx;
  guint32 offset;

  try
    {
      b = &blob_size;
      D.33641 = rsrc->filename;
      if (D.33641 != 0B) goto <D.33642>; else goto <D.33643>;
      <D.33642>:
      D.33641 = rsrc->filename;
      name = mono_string_to_utf8 (D.33641);
      sname = monoeg_g_path_get_basename (name);
      table = &assembly->tables[38];
      D.33644 = table->rows;
      D.33645 = D.33644 + 1;
      table->rows = D.33645;
      D.33644 = table->rows;
      alloc_table (table, D.33644);
      D.33646 = table->values;
      D.33647 = table->next_idx;
      D.33648 = D.33647 * 12;
      values = D.33646 + D.33648;
      *values = 1;
      D.33649 = values + 4;
      D.33650 = &assembly->sheap;
      D.33651 = string_heap_insert (D.33650, sname);
      *D.33649 = D.33651;
      monoeg_g_free (sname);
      mono_sha1_get_digest_from_file (name, &hash);
      b.314 = b;
      mono_metadata_encode_value (20, b.314, &b);
      D.33653 = values + 8;
      D.33654 = &assembly->blob;
      b.314 = b;
      b.315 = (int) b.314;
      blob_size.316 = (int) &blob_size;
      D.33657 = b.315 - blob_size.316;
      D.33658 = (unsigned int) D.33657;
      D.33659 = mono_image_add_stream_data (D.33654, &blob_size, D.33658);
      *D.33653 = D.33659;
      D.33654 = &assembly->blob;
      mono_image_add_stream_data (D.33654, &hash, 20);
      monoeg_g_free (name);
      D.33647 = table->next_idx;
      idx.317 = D.33647;
      D.33661 = idx.317 + 1;
      table->next_idx = D.33661;
      idx = idx.317;
      rsrc->offset = 0;
      idx = idx << 2;
      goto <D.33662>;
      <D.33643>:
      {
        char sizebuf[4];
        char * data;
        guint len;

        try
          {
            D.33663 = rsrc->data;
            if (D.33663 != 0B) goto <D.33664>; else goto <D.33665>;
            <D.33664>:
            D.33663 = rsrc->data;
            data = mono_array_addr_with_size (D.33663, 1, 0);
            D.33663 = rsrc->data;
            len = mono_array_length (D.33663);
            goto <D.33666>;
            <D.33665>:
            data = 0B;
            len = 0;
            <D.33666>:
            offset = len;
            D.33667 = (char) offset;
            sizebuf[0] = D.33667;
            D.33668 = offset >> 8;
            D.33669 = (char) D.33668;
            sizebuf[1] = D.33669;
            D.33670 = offset >> 16;
            D.33671 = (char) D.33670;
            sizebuf[2] = D.33671;
            D.33672 = offset >> 24;
            D.33673 = (char) D.33672;
            sizebuf[3] = D.33673;
            D.33674 = &assembly->resources;
            D.33675 = mono_image_add_stream_data (D.33674, &sizebuf, 4);
            rsrc->offset = D.33675;
            D.33674 = &assembly->resources;
            mono_image_add_stream_data (D.33674, data, len);
            D.33676 = mb->is_main;
            if (D.33676 == 0) goto <D.33677>; else goto <D.33678>;
            <D.33677>:
            return;
            <D.33678>:
            idx = 0;
          }
        finally
          {
            sizebuf = {CLOBBER};
          }
      }
      <D.33662>:
      assembly_add_resource_manifest (mb, assembly, rsrc, idx);
    }
  finally
    {
      blob_size = {CLOBBER};
      hash = {CLOBBER};
      b = {CLOBBER};
    }
}


build_compressed_metadata (struct MonoDynamicImage * assembly)
{
  struct GPtrArray * D.33684;
  void * * D.33685;
  unsigned int D.33686;
  unsigned int i.318;
  unsigned int D.33688;
  void * * D.33689;
  unsigned int i.319;
  struct MonoDynamicStream * D.33691;
  struct MonoDynamicStream * D.33692;
  struct MonoDynamicStream * D.33693;
  struct MonoDynamicStream * D.33694;
  struct MonoDynamicStream * D.33695;
  unsigned int D.33696;
  _Bool D.33697;
  unsigned int D.33698;
  _Bool D.33699;
  unsigned int D.33700;
  _Bool D.33701;
  unsigned int D.33702;
  unsigned int D.33703;
  <unnamed-unsigned:24> D.33704;
  <unnamed-unsigned:24> D.33705;
  long long unsigned int D.33708;
  guint32 * D.33709;
  int D.33710;
  unsigned char D.33711;
  unsigned char D.33712;
  int D.33713;
  int D.33714;
  int D.33715;
  unsigned int D.33716;
  unsigned int D.33717;
  void * D.33718;
  unsigned char * p.320;
  unsigned char * p.321;
  unsigned char * p.322;
  unsigned char * p.323;
  guint16 * int16val.324;
  short int D.33724;
  short unsigned int D.33725;
  short int D.33726;
  short unsigned int D.33727;
  char * D.33728;
  unsigned int D.33729;
  unsigned int D.33730;
  unsigned int D.33731;
  unsigned int D.33732;
  unsigned int D.33733;
  int p.325;
  char * D.33735;
  int D.33736;
  int D.33737;
  unsigned int D.33738;
  unsigned int D.33741;
  guint16 * int16val.326;
  int D.33743;
  struct MonoDynamicStream * D.33744;
  guint32 * int32val.327;
  unsigned int D.33746;
  const char * D.33747;
  unsigned int D.33748;
  sizetype D.33749;
  unsigned int D.33750;
  unsigned int D.33753;
  unsigned int D.33754;
  unsigned int D.33755;
  _Bool D.33756;
  long int D.33757;
  long int D.33758;
  unsigned char * p.328;
  unsigned char * p.329;
  unsigned char D.33763;
  unsigned char D.33764;
  unsigned char D.33767;
  unsigned char D.33768;
  unsigned char D.33769;
  unsigned char D.33772;
  unsigned char D.33773;
  unsigned char D.33776;
  unsigned char * p.330;
  guint64 * int64val.331;
  guint64 * int64val.332;
  long long unsigned int D.33780;
  guint32 * int32val.333;
  unsigned int D.33784;
  unsigned int D.33785;
  guint32 * D.33788;
  void * D.33789;
  void * D.33792;
  void * D.33797;
  unsigned char D.33806;
  unsigned int D.33807;
  unsigned int D.33808;
  int D.33811;
  guint32 * D.33812;
  int D.33813;
  unsigned int D.33814;
  unsigned int D.33815;
  int D.33816;
  unsigned int D.33817;
  unsigned int D.33818;
  unsigned int D.33819;
  unsigned char * p.334;
  unsigned int col.335;
  unsigned int D.33822;
  guint32 * D.33823;
  unsigned int D.33824;
  unsigned char D.33825;
  unsigned char * p.336;
  unsigned char * p.337;
  unsigned int D.33828;
  unsigned char D.33829;
  unsigned char * p.338;
  unsigned char * p.339;
  unsigned char * p.340;
  unsigned int D.33833;
  unsigned char D.33834;
  unsigned char * p.341;
  unsigned int D.33836;
  unsigned char D.33837;
  const char * D.33838;
  int D.33839;
  int D.33840;
  _Bool D.33841;
  long int D.33842;
  long int D.33843;
  unsigned int D.33846;
  unsigned int D.33847;
  _Bool D.33848;
  long int D.33849;
  long int D.33850;
  unsigned int D.33853;
  char * D.33854;
  char * D.33855;
  unsigned int D.33856;
  char * D.33857;
  char * D.33858;
  unsigned int D.33859;
  char * D.33860;
  char * D.33861;
  char * D.33862;
  char * D.33863;
  struct MonoDynamicTable * table;
  int i;
  guint64 valid_mask;
  guint64 sorted_mask;
  guint32 heapt_size;
  guint32 meta_size;
  guint32 table_offset;
  guint32 ntables;
  guint64 * int64val;
  guint32 * int32val;
  guint16 * int16val;
  struct MonoImage * meta;
  unsigned char * p;
  struct StreamDesc stream_desc[5];

  try
    {
      valid_mask = 0;
      heapt_size = 0;
      meta_size = 256;
      ntables = 0;
      D.33684 = assembly->gen_params;
      D.33685 = D.33684->pdata;
      D.33684 = assembly->gen_params;
      D.33686 = D.33684->len;
      qsort (D.33685, D.33686, 4, compare_genericparam);
      i = 0;
      goto <D.22198>;
      <D.22197>:
      {
        struct GenericParamTableEntry * entry;

        D.33684 = assembly->gen_params;
        D.33685 = D.33684->pdata;
        i.318 = (unsigned int) i;
        D.33688 = i.318 * 4;
        D.33689 = D.33685 + D.33688;
        entry = *D.33689;
        write_generic_param_entry (assembly, entry);
      }
      i = i + 1;
      <D.22198>:
      i.319 = (unsigned int) i;
      D.33684 = assembly->gen_params;
      D.33686 = D.33684->len;
      if (i.319 < D.33686) goto <D.22197>; else goto <D.22199>;
      <D.22199>:
      stream_desc[0].name = "#~";
      D.33691 = &assembly->tstream;
      stream_desc[0].stream = D.33691;
      stream_desc[1].name = "#Strings";
      D.33692 = &assembly->sheap;
      stream_desc[1].stream = D.33692;
      stream_desc[2].name = "#US";
      D.33693 = &assembly->us;
      stream_desc[2].stream = D.33693;
      stream_desc[3].name = "#Blob";
      D.33694 = &assembly->blob;
      stream_desc[3].stream = D.33694;
      stream_desc[4].name = "#GUID";
      D.33695 = &assembly->guid;
      stream_desc[4].stream = D.33695;
      sorted_mask = 6597925534208;
      meta = &assembly->image;
      D.33694 = &assembly->blob;
      pad_heap (D.33694);
      D.33695 = &assembly->guid;
      pad_heap (D.33695);
      D.33692 = &assembly->sheap;
      pad_heap (D.33692);
      D.33693 = &assembly->us;
      pad_heap (D.33693);
      D.33696 = assembly->blob.index;
      D.33697 = D.33696 > 65535;
      meta->idx_blob_wide = D.33697;
      D.33698 = assembly->guid.index;
      D.33699 = D.33698 > 65535;
      meta->idx_guid_wide = D.33699;
      D.33700 = assembly->sheap.index;
      D.33701 = D.33700 > 65535;
      meta->idx_string_wide = D.33701;
      D.33696 = assembly->blob.index;
      meta_size = D.33696 + meta_size;
      D.33698 = assembly->guid.index;
      meta_size = D.33698 + meta_size;
      D.33700 = assembly->sheap.index;
      meta_size = D.33700 + meta_size;
      D.33702 = assembly->us.index;
      meta_size = D.33702 + meta_size;
      i = 0;
      goto <D.22201>;
      <D.22200>:
      D.33703 = assembly->tables[i].rows;
      D.33704 = (<unnamed-unsigned:24>) D.33703;
      meta->tables[i].rows = D.33704;
      i = i + 1;
      <D.22201>:
      if (i <= 44) goto <D.22200>; else goto <D.22202>;
      <D.22202>:
      i = 0;
      goto <D.22205>;
      <D.22204>:
      D.33705 = meta->tables[i].rows;
      if (D.33705 == 0) goto <D.33706>; else goto <D.33707>;
      <D.33706>:
      // predicted unlikely by continue predictor.
      goto <D.22203>;
      <D.33707>:
      D.33708 = 1 << i;
      valid_mask = D.33708 | valid_mask;
      ntables = ntables + 1;
      D.33709 = &meta->tables[i].size_bitfield;
      D.33710 = mono_metadata_compute_size (meta, i, D.33709);
      D.33711 = (unsigned char) D.33710;
      meta->tables[i].row_size = D.33711;
      D.33712 = meta->tables[i].row_size;
      D.33713 = (int) D.33712;
      D.33705 = meta->tables[i].rows;
      D.33714 = (int) D.33705;
      D.33715 = D.33713 * D.33714;
      D.33716 = (unsigned int) D.33715;
      heapt_size = D.33716 + heapt_size;
      <D.22203>:
      i = i + 1;
      <D.22205>:
      if (i <= 44) goto <D.22204>; else goto <D.22206>;
      <D.22206>:
      heapt_size = heapt_size + 24;
      D.33717 = ntables * 4;
      heapt_size = D.33717 + heapt_size;
      heapt_size = heapt_size + 3;
      heapt_size = heapt_size & 4294967292;
      meta_size = meta_size + heapt_size;
      D.33718 = monoeg_malloc0 (meta_size);
      meta->raw_metadata = D.33718;
      p = meta->raw_metadata;
      p.320 = p;
      p = p.320 + 1;
      *p.320 = 66;
      p.321 = p;
      p = p.321 + 1;
      *p.321 = 83;
      p.322 = p;
      p = p.322 + 1;
      *p.322 = 74;
      p.323 = p;
      p = p.323 + 1;
      *p.323 = 66;
      int16val = p;
      int16val.324 = int16val;
      int16val = int16val.324 + 2;
      D.33724 = meta->md_version_major;
      D.33725 = (short unsigned int) D.33724;
      *int16val.324 = D.33725;
      D.33726 = meta->md_version_minor;
      D.33727 = (short unsigned int) D.33726;
      *int16val = D.33727;
      p = p + 8;
      int32val = p;
      D.33728 = meta->version;
      D.33729 = strlen (D.33728);
      D.33730 = D.33729 + 3;
      D.33731 = D.33730 & 4294967292;
      *int32val = D.33731;
      p = p + 4;
      D.33728 = meta->version;
      D.33728 = meta->version;
      D.33732 = strlen (D.33728);
      memcpy (p, D.33728, D.33732);
      D.33733 = *int32val;
      p = p + D.33733;
      {
        guint32 __diff;

        p.325 = (int) p;
        D.33735 = meta->raw_metadata;
        D.33736 = (int) D.33735;
        D.33737 = p.325 - D.33736;
        __diff = (guint32) D.33737;
        D.33738 = __diff & 3;
        if (D.33738 != 0) goto <D.33739>; else goto <D.33740>;
        <D.33739>:
        D.33738 = __diff & 3;
        D.33741 = 4 - D.33738;
        p = p + D.33741;
        <D.33740>:
      }
      int16val = p;
      int16val.326 = int16val;
      int16val = int16val.326 + 2;
      *int16val.326 = 0;
      *int16val = 5;
      p = p + 4;
      p.325 = (int) p;
      D.33735 = meta->raw_metadata;
      D.33736 = (int) D.33735;
      D.33737 = p.325 - D.33736;
      D.33743 = D.33737 + 80;
      table_offset = (guint32) D.33743;
      table_offset = table_offset + 3;
      table_offset = table_offset & 4294967292;
      assembly->tstream.index = heapt_size;
      i = 0;
      goto <D.22210>;
      <D.22209>:
      int32val = p;
      D.33744 = stream_desc[i].stream;
      D.33744->offset = table_offset;
      int32val.327 = int32val;
      int32val = int32val.327 + 4;
      *int32val.327 = table_offset;
      D.33744 = stream_desc[i].stream;
      D.33746 = D.33744->index;
      *int32val = D.33746;
      D.33733 = *int32val;
      table_offset = D.33733 + table_offset;
      table_offset = table_offset + 3;
      table_offset = table_offset & 4294967292;
      p = p + 8;
      D.33747 = stream_desc[i].name;
      strcpy (p, D.33747);
      D.33747 = stream_desc[i].name;
      D.33748 = strlen (D.33747);
      D.33749 = D.33748 + 1;
      p = p + D.33749;
      {
        guint32 __diff;

        p.325 = (int) p;
        D.33735 = meta->raw_metadata;
        D.33736 = (int) D.33735;
        D.33737 = p.325 - D.33736;
        __diff = (guint32) D.33737;
        D.33750 = __diff & 3;
        if (D.33750 != 0) goto <D.33751>; else goto <D.33752>;
        <D.33751>:
        D.33750 = __diff & 3;
        D.33753 = 4 - D.33750;
        p = p + D.33753;
        <D.33752>:
      }
      i = i + 1;
      <D.22210>:
      if (i <= 4) goto <D.22209>; else goto <D.22211>;
      <D.22211>:
      p.325 = (int) p;
      D.33735 = meta->raw_metadata;
      D.33736 = (int) D.33735;
      D.33737 = p.325 - D.33736;
      D.33754 = (unsigned int) D.33737;
      D.33755 = assembly->tstream.offset;
      D.33756 = D.33754 >= D.33755;
      D.33757 = (long int) D.33756;
      D.33758 = __builtin_expect (D.33757, 0);
      if (D.33758 != 0) goto <D.33759>; else goto <D.33760>;
      <D.33759>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 4106, "(p - (unsigned char*)meta->raw_metadata) < assembly->tstream.offset");
      <D.33760>:
      D.33735 = meta->raw_metadata;
      D.33755 = assembly->tstream.offset;
      p = D.33735 + D.33755;
      int32val = p;
      *int32val = 0;
      p = p + 4;
      p.328 = p;
      p = p.328 + 1;
      *p.328 = 2;
      p.329 = p;
      p = p.329 + 1;
      *p.329 = 0;
      D.33763 = BIT_FIELD_REF <*meta, 8, 136>;
      D.33764 = D.33763 & 1;
      if (D.33764 != 0) goto <D.33765>; else goto <D.33766>;
      <D.33765>:
      D.33767 = *p;
      D.33768 = D.33767 | 1;
      *p = D.33768;
      <D.33766>:
      D.33763 = BIT_FIELD_REF <*meta, 8, 136>;
      D.33769 = D.33763 & 2;
      if (D.33769 != 0) goto <D.33770>; else goto <D.33771>;
      <D.33770>:
      D.33767 = *p;
      D.33772 = D.33767 | 2;
      *p = D.33772;
      <D.33771>:
      D.33763 = BIT_FIELD_REF <*meta, 8, 136>;
      D.33773 = D.33763 & 4;
      if (D.33773 != 0) goto <D.33774>; else goto <D.33775>;
      <D.33774>:
      D.33767 = *p;
      D.33776 = D.33767 | 4;
      *p = D.33776;
      <D.33775>:
      p = p + 1;
      p.330 = p;
      p = p.330 + 1;
      *p.330 = 1;
      int64val = p;
      int64val.331 = int64val;
      int64val = int64val.331 + 8;
      *int64val.331 = valid_mask;
      int64val.332 = int64val;
      int64val = int64val.332 + 8;
      D.33780 = valid_mask & sorted_mask;
      *int64val.332 = D.33780;
      p = p + 16;
      int32val = p;
      i = 0;
      goto <D.22214>;
      <D.22213>:
      D.33705 = meta->tables[i].rows;
      if (D.33705 == 0) goto <D.33781>; else goto <D.33782>;
      <D.33781>:
      // predicted unlikely by continue predictor.
      goto <D.22212>;
      <D.33782>:
      int32val.333 = int32val;
      int32val = int32val.333 + 4;
      D.33705 = meta->tables[i].rows;
      D.33784 = (unsigned int) D.33705;
      *int32val.333 = D.33784;
      <D.22212>:
      i = i + 1;
      <D.22214>:
      if (i <= 44) goto <D.22213>; else goto <D.22215>;
      <D.22215>:
      p = int32val;
      table = &assembly->tables[11];
      D.33785 = table->rows;
      if (D.33785 != 0) goto <D.33786>; else goto <D.33787>;
      <D.33786>:
      D.33788 = table->values;
      D.33789 = D.33788 + 16;
      D.33785 = table->rows;
      qsort (D.33789, D.33785, 16, compare_constants);
      <D.33787>:
      table = &assembly->tables[24];
      D.33785 = table->rows;
      if (D.33785 != 0) goto <D.33790>; else goto <D.33791>;
      <D.33790>:
      D.33788 = table->values;
      D.33792 = D.33788 + 12;
      D.33785 = table->rows;
      qsort (D.33792, D.33785, 12, compare_semantics);
      <D.33791>:
      table = &assembly->tables[12];
      D.33785 = table->rows;
      if (D.33785 != 0) goto <D.33793>; else goto <D.33794>;
      <D.33793>:
      D.33788 = table->values;
      D.33792 = D.33788 + 12;
      D.33785 = table->rows;
      qsort (D.33792, D.33785, 12, compare_custom_attrs);
      <D.33794>:
      table = &assembly->tables[13];
      D.33785 = table->rows;
      if (D.33785 != 0) goto <D.33795>; else goto <D.33796>;
      <D.33795>:
      D.33788 = table->values;
      D.33797 = D.33788 + 8;
      D.33785 = table->rows;
      qsort (D.33797, D.33785, 8, compare_field_marshal);
      <D.33796>:
      table = &assembly->tables[41];
      D.33785 = table->rows;
      if (D.33785 != 0) goto <D.33798>; else goto <D.33799>;
      <D.33798>:
      D.33788 = table->values;
      D.33797 = D.33788 + 8;
      D.33785 = table->rows;
      qsort (D.33797, D.33785, 8, compare_nested);
      <D.33799>:
      table = &assembly->tables[14];
      D.33785 = table->rows;
      if (D.33785 != 0) goto <D.33800>; else goto <D.33801>;
      <D.33800>:
      D.33788 = table->values;
      D.33792 = D.33788 + 12;
      D.33785 = table->rows;
      qsort (D.33792, D.33785, 12, compare_declsecurity_attrs);
      <D.33801>:
      table = &assembly->tables[9];
      D.33785 = table->rows;
      if (D.33785 != 0) goto <D.33802>; else goto <D.33803>;
      <D.33802>:
      D.33788 = table->values;
      D.33797 = D.33788 + 8;
      D.33785 = table->rows;
      qsort (D.33797, D.33785, 8, compare_interface_impl);
      <D.33803>:
      i = 0;
      goto <D.22234>;
      <D.22233>:
      {
        int row;
        int col;
        guint32 * values;
        guint32 bitfield;

        bitfield = meta->tables[i].size_bitfield;
        D.33705 = meta->tables[i].rows;
        if (D.33705 == 0) goto <D.33804>; else goto <D.33805>;
        <D.33804>:
        // predicted unlikely by continue predictor.
        goto <D.22220>;
        <D.33805>:
        D.33806 = assembly->tables[i].columns;
        D.33807 = (unsigned int) D.33806;
        D.33808 = bitfield >> 24;
        if (D.33807 != D.33808) goto <D.33809>; else goto <D.33810>;
        <D.33809>:
        D.33806 = assembly->tables[i].columns;
        D.33811 = (int) D.33806;
        D.33808 = bitfield >> 24;
        monoeg_g_log (0B, 4, "col count mismatch in %d: %d %d", i, D.33811, D.33808);
        <D.22221>:
        goto <D.22221>;
        <D.33810>:
        meta->tables[i].base = p;
        row = 1;
        goto <D.22231>;
        <D.22230>:
        D.33812 = assembly->tables[i].values;
        D.33806 = assembly->tables[i].columns;
        D.33811 = (int) D.33806;
        D.33813 = D.33811 * row;
        D.33814 = (unsigned int) D.33813;
        D.33815 = D.33814 * 4;
        values = D.33812 + D.33815;
        col = 0;
        goto <D.22228>;
        <D.22227>:
        D.33816 = col * 2;
        D.33817 = bitfield >> D.33816;
        D.33818 = D.33817 & 3;
        D.33819 = D.33818 + 1;
        switch (D.33819) <default: <D.22226>, case 1: <D.22222>, case 2: <D.22224>, case 4: <D.22225>>
        <D.22222>:
        p.334 = p;
        p = p.334 + 1;
        col.335 = (unsigned int) col;
        D.33822 = col.335 * 4;
        D.33823 = values + D.33822;
        D.33824 = *D.33823;
        D.33825 = (unsigned char) D.33824;
        *p.334 = D.33825;
        goto <D.22223>;
        <D.22224>:
        p.336 = p;
        p = p.336 + 1;
        col.335 = (unsigned int) col;
        D.33822 = col.335 * 4;
        D.33823 = values + D.33822;
        D.33824 = *D.33823;
        D.33825 = (unsigned char) D.33824;
        *p.336 = D.33825;
        p.337 = p;
        p = p.337 + 1;
        col.335 = (unsigned int) col;
        D.33822 = col.335 * 4;
        D.33823 = values + D.33822;
        D.33824 = *D.33823;
        D.33828 = D.33824 >> 8;
        D.33829 = (unsigned char) D.33828;
        *p.337 = D.33829;
        goto <D.22223>;
        <D.22225>:
        p.338 = p;
        p = p.338 + 1;
        col.335 = (unsigned int) col;
        D.33822 = col.335 * 4;
        D.33823 = values + D.33822;
        D.33824 = *D.33823;
        D.33825 = (unsigned char) D.33824;
        *p.338 = D.33825;
        p.339 = p;
        p = p.339 + 1;
        col.335 = (unsigned int) col;
        D.33822 = col.335 * 4;
        D.33823 = values + D.33822;
        D.33824 = *D.33823;
        D.33828 = D.33824 >> 8;
        D.33829 = (unsigned char) D.33828;
        *p.339 = D.33829;
        p.340 = p;
        p = p.340 + 1;
        col.335 = (unsigned int) col;
        D.33822 = col.335 * 4;
        D.33823 = values + D.33822;
        D.33824 = *D.33823;
        D.33833 = D.33824 >> 16;
        D.33834 = (unsigned char) D.33833;
        *p.340 = D.33834;
        p.341 = p;
        p = p.341 + 1;
        col.335 = (unsigned int) col;
        D.33822 = col.335 * 4;
        D.33823 = values + D.33822;
        D.33824 = *D.33823;
        D.33836 = D.33824 >> 24;
        D.33837 = (unsigned char) D.33836;
        *p.341 = D.33837;
        goto <D.22223>;
        <D.22226>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 4187);
        <D.22223>:
        col = col + 1;
        <D.22228>:
        D.33806 = assembly->tables[i].columns;
        D.33811 = (int) D.33806;
        if (D.33811 > col) goto <D.22227>; else goto <D.22229>;
        <D.22229>:
        row = row + 1;
        <D.22231>:
        D.33705 = meta->tables[i].rows;
        D.33714 = (int) D.33705;
        if (D.33714 >= row) goto <D.22230>; else goto <D.22232>;
        <D.22232>:
        p.325 = (int) p;
        D.33838 = meta->tables[i].base;
        D.33839 = (int) D.33838;
        D.33840 = p.325 - D.33839;
        D.33705 = meta->tables[i].rows;
        D.33714 = (int) D.33705;
        D.33712 = meta->tables[i].row_size;
        D.33713 = (int) D.33712;
        D.33715 = D.33714 * D.33713;
        D.33841 = D.33840 != D.33715;
        D.33842 = (long int) D.33841;
        D.33843 = __builtin_expect (D.33842, 0);
        if (D.33843 != 0) goto <D.33844>; else goto <D.33845>;
        <D.33844>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 4191, "(p - (const unsigned char*)meta->tables [i].base) == (meta->tables [i].rows * meta->tables [i].row_size)");
        <D.33845>:
      }
      <D.22220>:
      i = i + 1;
      <D.22234>:
      if (i <= 44) goto <D.22233>; else goto <D.22235>;
      <D.22235>:
      D.33846 = assembly->guid.offset;
      D.33698 = assembly->guid.index;
      D.33847 = D.33846 + D.33698;
      D.33848 = D.33847 >= meta_size;
      D.33849 = (long int) D.33848;
      D.33850 = __builtin_expect (D.33849, 0);
      if (D.33850 != 0) goto <D.33851>; else goto <D.33852>;
      <D.33851>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 4194, "assembly->guid.offset + assembly->guid.index < meta_size");
      <D.33852>:
      D.33735 = meta->raw_metadata;
      D.33853 = assembly->sheap.offset;
      D.33854 = D.33735 + D.33853;
      D.33855 = assembly->sheap.data;
      D.33700 = assembly->sheap.index;
      memcpy (D.33854, D.33855, D.33700);
      D.33735 = meta->raw_metadata;
      D.33856 = assembly->us.offset;
      D.33857 = D.33735 + D.33856;
      D.33858 = assembly->us.data;
      D.33702 = assembly->us.index;
      memcpy (D.33857, D.33858, D.33702);
      D.33735 = meta->raw_metadata;
      D.33859 = assembly->blob.offset;
      D.33860 = D.33735 + D.33859;
      D.33861 = assembly->blob.data;
      D.33696 = assembly->blob.index;
      memcpy (D.33860, D.33861, D.33696);
      D.33735 = meta->raw_metadata;
      D.33846 = assembly->guid.offset;
      D.33862 = D.33735 + D.33846;
      D.33863 = assembly->guid.data;
      D.33698 = assembly->guid.index;
      memcpy (D.33862, D.33863, D.33698);
      D.33846 = assembly->guid.offset;
      D.33698 = assembly->guid.index;
      D.33847 = D.33846 + D.33698;
      assembly->meta_size = D.33847;
    }
  finally
    {
      stream_desc = {CLOBBER};
    }
}


compare_interface_impl (const void * a, const void * b)
{
  unsigned int D.33864;
  unsigned int D.33865;
  unsigned int D.33866;
  int D.33869;
  const guint32 * D.33870;
  unsigned int D.33871;
  const guint32 * D.33872;
  unsigned int D.33873;
  unsigned int D.33874;
  const guint32 * a_values;
  const guint32 * b_values;
  int klass;

  a_values = a;
  b_values = b;
  D.33864 = *a_values;
  D.33865 = *b_values;
  D.33866 = D.33864 - D.33865;
  klass = (int) D.33866;
  if (klass != 0) goto <D.33867>; else goto <D.33868>;
  <D.33867>:
  D.33869 = klass;
  return D.33869;
  <D.33868>:
  D.33870 = a_values + 4;
  D.33871 = *D.33870;
  D.33872 = b_values + 4;
  D.33873 = *D.33872;
  D.33874 = D.33871 - D.33873;
  D.33869 = (int) D.33874;
  return D.33869;
}


compare_declsecurity_attrs (const void * a, const void * b)
{
  int D.33876;
  const guint32 * D.33877;
  unsigned int D.33878;
  const guint32 * D.33879;
  unsigned int D.33880;
  unsigned int D.33881;
  const guint32 * a_values;
  const guint32 * b_values;

  a_values = a;
  b_values = b;
  D.33877 = a_values + 4;
  D.33878 = *D.33877;
  D.33879 = b_values + 4;
  D.33880 = *D.33879;
  D.33881 = D.33878 - D.33880;
  D.33876 = (int) D.33881;
  return D.33876;
}


compare_nested (const void * a, const void * b)
{
  int D.33883;
  unsigned int D.33884;
  unsigned int D.33885;
  unsigned int D.33886;
  const guint32 * a_values;
  const guint32 * b_values;

  a_values = a;
  b_values = b;
  D.33884 = *a_values;
  D.33885 = *b_values;
  D.33886 = D.33884 - D.33885;
  D.33883 = (int) D.33886;
  return D.33883;
}


compare_field_marshal (const void * a, const void * b)
{
  int D.33888;
  unsigned int D.33889;
  unsigned int D.33890;
  unsigned int D.33891;
  const guint32 * a_values;
  const guint32 * b_values;

  a_values = a;
  b_values = b;
  D.33889 = *a_values;
  D.33890 = *b_values;
  D.33891 = D.33889 - D.33890;
  D.33888 = (int) D.33891;
  return D.33888;
}


compare_custom_attrs (const void * a, const void * b)
{
  int D.33893;
  unsigned int D.33894;
  unsigned int D.33895;
  unsigned int D.33896;
  const guint32 * a_values;
  const guint32 * b_values;

  a_values = a;
  b_values = b;
  D.33894 = *a_values;
  D.33895 = *b_values;
  D.33896 = D.33894 - D.33895;
  D.33893 = (int) D.33896;
  return D.33893;
}


compare_semantics (const void * a, const void * b)
{
  const guint32 * D.33898;
  unsigned int D.33899;
  const guint32 * D.33900;
  unsigned int D.33901;
  unsigned int D.33902;
  int D.33905;
  unsigned int D.33906;
  unsigned int D.33907;
  unsigned int D.33908;
  const guint32 * a_values;
  const guint32 * b_values;
  int assoc;

  a_values = a;
  b_values = b;
  D.33898 = a_values + 8;
  D.33899 = *D.33898;
  D.33900 = b_values + 8;
  D.33901 = *D.33900;
  D.33902 = D.33899 - D.33901;
  assoc = (int) D.33902;
  if (assoc != 0) goto <D.33903>; else goto <D.33904>;
  <D.33903>:
  D.33905 = assoc;
  return D.33905;
  <D.33904>:
  D.33906 = *a_values;
  D.33907 = *b_values;
  D.33908 = D.33906 - D.33907;
  D.33905 = (int) D.33908;
  return D.33905;
}


compare_constants (const void * a, const void * b)
{
  int D.33910;
  const guint32 * D.33911;
  unsigned int D.33912;
  const guint32 * D.33913;
  unsigned int D.33914;
  unsigned int D.33915;
  const guint32 * a_values;
  const guint32 * b_values;

  a_values = a;
  b_values = b;
  D.33911 = a_values + 8;
  D.33912 = *D.33911;
  D.33913 = b_values + 8;
  D.33914 = *D.33913;
  D.33915 = D.33912 - D.33914;
  D.33910 = (int) D.33915;
  return D.33910;
}


compare_genericparam (const void * a, const void * b)
{
  const struct GenericParamTableEntry * D.33917;
  unsigned int D.33918;
  const struct GenericParamTableEntry * D.33919;
  unsigned int D.33920;
  int D.33923;
  struct MonoReflectionGenericParam * D.33924;
  struct MonoType * D.33925;
  struct MonoGenericParam * D.33926;
  short unsigned int D.33927;
  int D.33928;
  struct MonoReflectionGenericParam * D.33929;
  struct MonoType * D.33930;
  struct MonoGenericParam * D.33931;
  short unsigned int D.33932;
  int D.33933;
  unsigned int D.33934;
  const struct GenericParamTableEntry * * a_entry;
  const struct GenericParamTableEntry * * b_entry;

  a_entry = a;
  b_entry = b;
  D.33917 = *b_entry;
  D.33918 = D.33917->owner;
  D.33919 = *a_entry;
  D.33920 = D.33919->owner;
  if (D.33918 == D.33920) goto <D.33921>; else goto <D.33922>;
  <D.33921>:
  D.33919 = *a_entry;
  D.33924 = D.33919->gparam;
  D.33925 = mono_reflection_type_get_handle (D.33924);
  D.33926 = D.33925->data.generic_param;
  D.33927 = D.33926->num;
  D.33928 = (int) D.33927;
  D.33917 = *b_entry;
  D.33929 = D.33917->gparam;
  D.33930 = mono_reflection_type_get_handle (D.33929);
  D.33931 = D.33930->data.generic_param;
  D.33932 = D.33931->num;
  D.33933 = (int) D.33932;
  D.33923 = D.33928 - D.33933;
  return D.33923;
  <D.33922>:
  D.33919 = *a_entry;
  D.33920 = D.33919->owner;
  D.33917 = *b_entry;
  D.33918 = D.33917->owner;
  D.33934 = D.33920 - D.33918;
  D.33923 = (int) D.33934;
  return D.33923;
}


write_generic_param_entry (struct MonoDynamicImage * assembly, struct GenericParamTableEntry * entry)
{
  unsigned int D.33936;
  unsigned int table_idx.342;
  unsigned int D.33938;
  guint32 * D.33939;
  unsigned int D.33940;
  struct MonoReflectionGenericParam * D.33941;
  struct MonoType * D.33942;
  guint32 * D.33943;
  unsigned int D.33944;
  guint32 * D.33945;
  unsigned int D.33946;
  short unsigned int D.33947;
  unsigned int D.33948;
  guint32 * D.33949;
  struct MonoDynamicStream * D.33950;
  struct MonoGenericParamInfo * iftmp.343;
  struct MonoGenericContainer * D.33952;
  const char * D.33956;
  unsigned int D.33957;
  struct MonoArray * D.33958;
  struct MonoDynamicTable * table;
  struct MonoGenericParam * param;
  guint32 * values;
  guint32 table_idx;

  table = &assembly->tables[42];
  D.33936 = table->next_idx;
  table_idx.342 = D.33936;
  D.33938 = table_idx.342 + 1;
  table->next_idx = D.33938;
  table_idx = table_idx.342;
  D.33939 = table->values;
  D.33940 = table_idx * 16;
  values = D.33939 + D.33940;
  D.33941 = entry->gparam;
  D.33942 = mono_reflection_type_get_handle (D.33941);
  param = D.33942->data.generic_param;
  D.33943 = values + 8;
  D.33944 = entry->owner;
  *D.33943 = D.33944;
  D.33945 = values + 4;
  D.33941 = entry->gparam;
  D.33946 = D.33941->attrs;
  *D.33945 = D.33946;
  D.33947 = param->num;
  D.33948 = (unsigned int) D.33947;
  *values = D.33948;
  D.33949 = values + 12;
  D.33950 = &assembly->sheap;
  D.33952 = param->owner;
  if (D.33952 != 0B) goto <D.33953>; else goto <D.33954>;
  <D.33953>:
  iftmp.343 = &MEM[(struct MonoGenericParamFull *)param].info;
  goto <D.33955>;
  <D.33954>:
  iftmp.343 = 0B;
  <D.33955>:
  D.33956 = iftmp.343->name;
  D.33957 = string_heap_insert (D.33950, D.33956);
  *D.33949 = D.33957;
  D.33941 = entry->gparam;
  D.33958 = D.33941->cattrs;
  mono_image_add_cattrs (assembly, table_idx, 19, D.33958);
  D.33941 = entry->gparam;
  encode_constraints (D.33941, table_idx, assembly);
}


encode_constraints (struct MonoReflectionGenericParam * gparam, guint32 owner, struct MonoDynamicImage * assembly)
{
  uintptr_t iftmp.344;
  struct MonoArray * D.33960;
  unsigned int D.33964;
  unsigned int D.33965;
  struct MonoReflectionType * D.33966;
  unsigned int D.33969;
  unsigned int D.33972;
  unsigned int table_idx.345;
  unsigned int D.33974;
  guint32 * D.33975;
  unsigned int D.33976;
  guint32 * D.33977;
  struct MonoType * D.33978;
  unsigned int D.33979;
  char * D.33980;
  unsigned int table_idx.346;
  unsigned int D.33982;
  struct MonoType * D.33983;
  unsigned int D.33984;
  struct MonoDynamicTable * table;
  guint32 num_constraints;
  guint32 i;
  guint32 * values;
  guint32 table_idx;

  table = &assembly->tables[44];
  D.33960 = gparam->iface_constraints;
  if (D.33960 != 0B) goto <D.33961>; else goto <D.33962>;
  <D.33961>:
  D.33960 = gparam->iface_constraints;
  iftmp.344 = mono_array_length (D.33960);
  goto <D.33963>;
  <D.33962>:
  iftmp.344 = 0;
  <D.33963>:
  num_constraints = iftmp.344;
  D.33964 = table->rows;
  D.33965 = D.33964 + num_constraints;
  table->rows = D.33965;
  D.33966 = gparam->base_type;
  if (D.33966 != 0B) goto <D.33967>; else goto <D.33968>;
  <D.33967>:
  D.33964 = table->rows;
  D.33969 = D.33964 + 1;
  table->rows = D.33969;
  <D.33968>:
  D.33964 = table->rows;
  alloc_table (table, D.33964);
  D.33966 = gparam->base_type;
  if (D.33966 != 0B) goto <D.33970>; else goto <D.33971>;
  <D.33970>:
  D.33972 = table->next_idx;
  table_idx.345 = D.33972;
  D.33974 = table_idx.345 + 1;
  table->next_idx = D.33974;
  table_idx = table_idx.345;
  D.33975 = table->values;
  D.33976 = table_idx * 8;
  values = D.33975 + D.33976;
  *values = owner;
  D.33977 = values + 4;
  D.33966 = gparam->base_type;
  D.33978 = mono_reflection_type_get_handle (D.33966);
  D.33979 = mono_image_typedef_or_ref (assembly, D.33978);
  *D.33977 = D.33979;
  <D.33971>:
  i = 0;
  goto <D.21510>;
  <D.21509>:
  {
    struct MonoReflectionType * constraint;

    D.33960 = gparam->iface_constraints;
    D.33980 = mono_array_addr_with_size (D.33960, 4, i);
    constraint = MEM[(void * *)D.33980];
    D.33972 = table->next_idx;
    table_idx.346 = D.33972;
    D.33982 = table_idx.346 + 1;
    table->next_idx = D.33982;
    table_idx = table_idx.346;
    D.33975 = table->values;
    D.33976 = table_idx * 8;
    values = D.33975 + D.33976;
    *values = owner;
    D.33977 = values + 4;
    D.33983 = mono_reflection_type_get_handle (constraint);
    D.33984 = mono_image_typedef_or_ref (assembly, D.33983);
    *D.33977 = D.33984;
  }
  i = i + 1;
  <D.21510>:
  if (i < num_constraints) goto <D.21509>; else goto <D.21511>;
  <D.21511>:
}


pad_heap (struct MonoDynamicStream * sh)
{
  unsigned int D.33985;
  unsigned int D.33986;
  unsigned int D.33989;
  char * D.33990;
  void * D.33991;
  unsigned int sz.347;
  unsigned int sz.348;
  unsigned int D.33994;

  D.33985 = sh->index;
  D.33986 = D.33985 & 3;
  if (D.33986 != 0) goto <D.33987>; else goto <D.33988>;
  <D.33987>:
  {
    int sz;

    D.33985 = sh->index;
    D.33986 = D.33985 & 3;
    D.33989 = 4 - D.33986;
    sz = (int) D.33989;
    D.33990 = sh->data;
    D.33985 = sh->index;
    D.33991 = D.33990 + D.33985;
    sz.347 = (unsigned int) sz;
    memset (D.33991, 0, sz.347);
    D.33985 = sh->index;
    sz.348 = (unsigned int) sz;
    D.33994 = D.33985 + sz.348;
    sh->index = D.33994;
  }
  <D.33988>:
}


assembly_add_win32_resources (struct MonoDynamicImage * assembly, struct MonoReflectionAssemblyBuilder * assemblyb)
{
  struct MonoArray * D.33995;
  struct MonoArray * D.33998;
  unsigned int D.33999;
  unsigned int D.34000;
  unsigned int D.34001;
  unsigned int D.34002;
  char * p.349;
  int p.350;
  int buf.351;
  int D.34006;
  unsigned int D.34007;
  _Bool D.34008;
  long int D.34009;
  long int D.34010;
  unsigned int D.34013;
  void * D.34014;
  char * D.34015;
  unsigned int D.34016;
  char * buf;
  char * p;
  guint32 size;
  guint32 i;
  struct MonoReflectionWin32Resource * win32_res;
  struct ResTreeNode * tree;

  try
    {
      D.33995 = assemblyb->win32_resources;
      if (D.33995 == 0B) goto <D.33996>; else goto <D.33997>;
      <D.33996>:
      return;
      <D.33997>:
      D.33995 = assemblyb->win32_resources;
      tree = resource_tree_create (D.33995);
      size = 0;
      i = 0;
      goto <D.23055>;
      <D.23054>:
      D.33995 = assemblyb->win32_resources;
      win32_res = mono_array_addr_with_size (D.33995, 16, i);
      D.33998 = win32_res->res_data;
      D.33999 = mono_array_length (D.33998);
      size = D.33999 + size;
      i = i + 1;
      <D.23055>:
      D.33995 = assemblyb->win32_resources;
      D.34000 = mono_array_length (D.33995);
      if (D.34000 > i) goto <D.23054>; else goto <D.23056>;
      <D.23056>:
      D.33995 = assemblyb->win32_resources;
      D.34001 = mono_array_length (D.33995);
      D.34002 = D.34001 * 256;
      size = D.34002 + size;
      buf = monoeg_malloc (size);
      p = buf;
      p.349 = p;
      p.349 = p;
      resource_tree_encode (tree, p.349, p.349, &p);
      p.349 = p;
      p.350 = (int) p.349;
      buf.351 = (int) buf;
      D.34006 = p.350 - buf.351;
      D.34007 = (unsigned int) D.34006;
      D.34008 = D.34007 > size;
      D.34009 = (long int) D.34008;
      D.34010 = __builtin_expect (D.34009, 0);
      if (D.34010 != 0) goto <D.34011>; else goto <D.34012>;
      <D.34011>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5585, "p - buf <= size");
      <D.34012>:
      p.349 = p;
      p.350 = (int) p.349;
      buf.351 = (int) buf;
      D.34006 = p.350 - buf.351;
      D.34013 = (unsigned int) D.34006;
      D.34014 = monoeg_malloc (D.34013);
      assembly->win32_res = D.34014;
      p.349 = p;
      p.350 = (int) p.349;
      buf.351 = (int) buf;
      D.34006 = p.350 - buf.351;
      D.34007 = (unsigned int) D.34006;
      assembly->win32_res_size = D.34007;
      D.34015 = assembly->win32_res;
      p.349 = p;
      p.350 = (int) p.349;
      buf.351 = (int) buf;
      D.34006 = p.350 - buf.351;
      D.34016 = (unsigned int) D.34006;
      memcpy (D.34015, buf, D.34016);
      monoeg_g_free (buf);
      resource_tree_free (tree);
    }
  finally
    {
      p = {CLOBBER};
    }
}


resource_tree_create (struct MonoArray * win32_resources)
{
  unsigned int i.352;
  unsigned int D.34021;
  void * D.34022;
  unsigned int D.34023;
  unsigned int D.34024;
  struct GSList * D.34029;
  struct GSList * D.34030;
  unsigned int D.34031;
  struct GSList * D.34036;
  struct GSList * D.34037;
  struct GSList * D.34038;
  struct GSList * D.34039;
  unsigned int D.34040;
  struct ResTreeNode * D.34041;
  struct ResTreeNode * tree;
  struct ResTreeNode * res_node;
  struct ResTreeNode * type_node;
  struct ResTreeNode * lang_node;
  struct GSList * l;
  int i;

  tree = monoeg_malloc0 (16);
  i = 0;
  goto <D.23014>;
  <D.23013>:
  {
    struct MonoReflectionWin32Resource * win32_res;

    i.352 = (unsigned int) i;
    win32_res = mono_array_addr_with_size (win32_resources, 16, i.352);
    lang_node = monoeg_malloc0 (16);
    D.34021 = win32_res->lang_id;
    lang_node->id = D.34021;
    lang_node->win32_res = win32_res;
    type_node = 0B;
    l = tree->children;
    goto <D.23009>;
    <D.23008>:
    D.34022 = l->data;
    D.34023 = MEM[(struct ResTreeNode *)D.34022].id;
    D.34024 = win32_res->res_type;
    if (D.34023 == D.34024) goto <D.34025>; else goto <D.34026>;
    <D.34025>:
    type_node = l->data;
    goto <D.23007>;
    <D.34026>:
    l = l->next;
    <D.23009>:
    if (l != 0B) goto <D.23008>; else goto <D.23007>;
    <D.23007>:
    if (type_node == 0B) goto <D.34027>; else goto <D.34028>;
    <D.34027>:
    type_node = monoeg_malloc0 (16);
    D.34024 = win32_res->res_type;
    type_node->id = D.34024;
    D.34029 = tree->children;
    D.34030 = monoeg_g_slist_insert_sorted (D.34029, type_node, resource_tree_compare_by_id);
    tree->children = D.34030;
    <D.34028>:
    res_node = 0B;
    l = type_node->children;
    goto <D.23012>;
    <D.23011>:
    D.34022 = l->data;
    D.34023 = MEM[(struct ResTreeNode *)D.34022].id;
    D.34031 = win32_res->res_id;
    if (D.34023 == D.34031) goto <D.34032>; else goto <D.34033>;
    <D.34032>:
    res_node = l->data;
    goto <D.23010>;
    <D.34033>:
    l = l->next;
    <D.23012>:
    if (l != 0B) goto <D.23011>; else goto <D.23010>;
    <D.23010>:
    if (res_node == 0B) goto <D.34034>; else goto <D.34035>;
    <D.34034>:
    res_node = monoeg_malloc0 (16);
    D.34031 = win32_res->res_id;
    res_node->id = D.34031;
    D.34036 = type_node->children;
    D.34037 = monoeg_g_slist_append (D.34036, res_node);
    type_node->children = D.34037;
    <D.34035>:
    D.34038 = res_node->children;
    D.34039 = monoeg_g_slist_append (D.34038, lang_node);
    res_node->children = D.34039;
  }
  i = i + 1;
  <D.23014>:
  i.352 = (unsigned int) i;
  D.34040 = mono_array_length (win32_resources);
  if (i.352 < D.34040) goto <D.23013>; else goto <D.23015>;
  <D.23015>:
  D.34041 = tree;
  return D.34041;
}


resource_tree_compare_by_id (const void * a, const void * b)
{
  int D.34043;
  unsigned int D.34044;
  unsigned int D.34045;
  unsigned int D.34046;
  struct ResTreeNode * t1;
  struct ResTreeNode * t2;

  t1 = a;
  t2 = b;
  D.34044 = t1->id;
  D.34045 = t2->id;
  D.34046 = D.34044 - D.34045;
  D.34043 = (int) D.34046;
  return D.34043;
}


resource_tree_encode (struct ResTreeNode * node, char * begin, char * p, char * * endbuf)
{
  char * p.353;
  int p.354;
  int begin.355;
  int D.34057;
  unsigned int D.34058;
  struct GSList * D.34059;
  short unsigned int D.34060;
  char * p.356;
  unsigned int D.34062;
  char * p.357;
  struct MonoReflectionWin32Resource * D.34064;
  unsigned int D.34067;
  unsigned int D.34068;
  struct MonoArray * D.34069;
  char * D.34070;
  char * p.358;
  unsigned int D.34073;
  unsigned int D.34074;
  unsigned int iftmp.359;
  struct MonoReflectionWin32Resource * D.34076;
  unsigned int D.34080;
  unsigned int D.34081;
  unsigned int D.34082;
  char * entries;
  struct MonoPEResourceDir dir;
  struct MonoPEResourceDirEntry dir_entry;
  struct MonoPEResourceDataEntry data_entry;
  struct GSList * l;
  guint32 res_id_entries;

  try
    {
      memset (&dir, 0, 16);
      memset (&dir_entry, 0, 8);
      memset (&data_entry, 0, 16);
      if (0 != 0) goto <D.34048>; else goto <D.34049>;
      <D.34048>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5486, "sizeof (dir) == 16");
      <D.34049>:
      if (0 != 0) goto <D.34050>; else goto <D.34051>;
      <D.34050>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5487, "sizeof (dir_entry) == 8");
      <D.34051>:
      if (0 != 0) goto <D.34052>; else goto <D.34053>;
      <D.34052>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5488, "sizeof (data_entry) == 16");
      <D.34053>:
      p.353 = p;
      p.354 = (int) p.353;
      begin.355 = (int) begin;
      D.34057 = p.354 - begin.355;
      D.34058 = (unsigned int) D.34057;
      node->offset = D.34058;
      D.34059 = node->children;
      res_id_entries = monoeg_g_slist_length (D.34059);
      D.34060 = (short unsigned int) res_id_entries;
      dir.res_id_entries = D.34060;
      p.353 = p;
      memcpy (p.353, &dir, 16);
      p.353 = p;
      p.356 = p.353 + 16;
      p = p.356;
      entries = p;
      p.353 = p;
      D.34062 = res_id_entries * 8;
      p.357 = p.353 + D.34062;
      p = p.357;
      l = node->children;
      goto <D.23031>;
      <D.23030>:
      {
        struct ResTreeNode * child;

        child = l->data;
        D.34064 = child->win32_res;
        if (D.34064 != 0B) goto <D.34065>; else goto <D.34066>;
        <D.34065>:
        {
          guint32 size;

          p.353 = p;
          p.354 = (int) p.353;
          begin.355 = (int) begin;
          D.34057 = p.354 - begin.355;
          D.34058 = (unsigned int) D.34057;
          child->offset = D.34058;
          p.353 = p;
          p.354 = (int) p.353;
          begin.355 = (int) begin;
          D.34057 = p.354 - begin.355;
          D.34067 = (unsigned int) D.34057;
          D.34068 = D.34067 + 16;
          data_entry.rde_data_offset = D.34068;
          D.34064 = child->win32_res;
          D.34069 = D.34064->res_data;
          size = mono_array_length (D.34069);
          data_entry.rde_size = size;
          p.353 = p;
          memcpy (p.353, &data_entry, 16);
          p.353 = p;
          p.356 = p.353 + 16;
          p = p.356;
          p.353 = p;
          D.34064 = child->win32_res;
          D.34069 = D.34064->res_data;
          D.34070 = mono_array_addr_with_size (D.34069, 1, 0);
          memcpy (p.353, D.34070, size);
          p.353 = p;
          p.358 = p.353 + size;
          p = p.358;
        }
        goto <D.34072>;
        <D.34066>:
        p.353 = p;
        resource_tree_encode (child, begin, p.353, &p);
        <D.34072>:
      }
      l = l->next;
      <D.23031>:
      if (l != 0B) goto <D.23030>; else goto <D.23032>;
      <D.23032>:
      l = node->children;
      goto <D.23035>;
      <D.23034>:
      {
        struct ResTreeNode * child;

        child = l->data;
        D.34073 = child->id;
        D.34074 = D.34073 & 2147483647;
        dir_entry.name = D.34074;
        D.34076 = child->win32_res;
        if (D.34076 == 0B) goto <D.34077>; else goto <D.34078>;
        <D.34077>:
        iftmp.359 = 2147483648;
        goto <D.34079>;
        <D.34078>:
        iftmp.359 = 0;
        <D.34079>:
        D.34080 = child->offset;
        D.34081 = D.34080 & 2147483647;
        D.34082 = iftmp.359 | D.34081;
        dir_entry.dir = D.34082;
        memcpy (entries, &dir_entry, 8);
        entries = entries + 8;
      }
      l = l->next;
      <D.23035>:
      if (l != 0B) goto <D.23034>; else goto <D.23036>;
      <D.23036>:
      p.353 = p;
      *endbuf = p.353;
    }
  finally
    {
      dir = {CLOBBER};
      dir_entry = {CLOBBER};
      data_entry = {CLOBBER};
    }
}


resource_tree_free (struct ResTreeNode * node)
{
  void * D.34083;
  struct GSList * D.34084;
  struct GSList * list;

  list = node->children;
  goto <D.23042>;
  <D.23041>:
  D.34083 = list->data;
  resource_tree_free (D.34083);
  list = list->next;
  <D.23042>:
  if (list != 0B) goto <D.23041>; else goto <D.23043>;
  <D.23043>:
  D.34084 = node->children;
  monoeg_g_slist_free (D.34084);
  monoeg_g_free (node);
}


calc_section_size (struct MonoDynamicImage * assembly)
{
  struct MonoDynamicStream * D.34085;
  unsigned int D.34086;
  unsigned int D.34087;
  unsigned int D.34088;
  _Bool D.34089;
  long int D.34090;
  long int D.34091;
  unsigned int D.34094;
  unsigned int D.34095;
  unsigned int D.34096;
  struct MonoDynamicStream * D.34097;
  unsigned int D.34098;
  unsigned int D.34099;
  unsigned int D.34100;
  _Bool D.34101;
  long int D.34102;
  long int D.34103;
  unsigned int D.34106;
  unsigned int D.34107;
  unsigned int D.34108;
  unsigned int D.34109;
  char * D.34110;
  unsigned int D.34113;
  unsigned int D.34114;
  int D.34115;
  int nsections;

  nsections = 0;
  D.34085 = &assembly->code;
  D.34086 = assembly->code.index;
  D.34087 = D.34086 & 3;
  D.34088 = 4 - D.34087;
  mono_image_add_stream_zero (D.34085, D.34088);
  D.34086 = assembly->code.index;
  D.34087 = D.34086 & 3;
  D.34089 = D.34087 != 0;
  D.34090 = (long int) D.34089;
  D.34091 = __builtin_expect (D.34090, 0);
  if (D.34091 != 0) goto <D.34092>; else goto <D.34093>;
  <D.34092>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5355, "(assembly->code.index % 4) == 0");
  <D.34093>:
  D.34094 = assembly->meta_size;
  D.34095 = D.34094 + 3;
  assembly->meta_size = D.34095;
  D.34094 = assembly->meta_size;
  D.34096 = D.34094 & 4294967292;
  assembly->meta_size = D.34096;
  D.34097 = &assembly->resources;
  D.34098 = assembly->resources.index;
  D.34099 = D.34098 & 3;
  D.34100 = 4 - D.34099;
  mono_image_add_stream_zero (D.34097, D.34100);
  D.34098 = assembly->resources.index;
  D.34099 = D.34098 & 3;
  D.34101 = D.34099 != 0;
  D.34102 = (long int) D.34101;
  D.34103 = __builtin_expect (D.34102, 0);
  if (D.34103 != 0) goto <D.34104>; else goto <D.34105>;
  <D.34104>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 5359, "(assembly->resources.index % 4) == 0");
  <D.34105>:
  D.34094 = assembly->meta_size;
  D.34086 = assembly->code.index;
  D.34106 = D.34094 + D.34086;
  D.34098 = assembly->resources.index;
  D.34107 = D.34106 + D.34098;
  D.34108 = assembly->strong_name_size;
  D.34109 = D.34107 + D.34108;
  assembly->sections[0].size = D.34109;
  assembly->sections[0].attrs = 1610612768;
  nsections = nsections + 1;
  D.34110 = assembly->win32_res;
  if (D.34110 != 0B) goto <D.34111>; else goto <D.34112>;
  <D.34111>:
  {
    guint32 res_size;

    D.34113 = assembly->win32_res_size;
    D.34114 = D.34113 + 3;
    res_size = D.34114 & 4294967292;
    assembly->sections[1].size = res_size;
    assembly->sections[1].attrs = 1073741888;
    nsections = nsections + 1;
  }
  <D.34112>:
  assembly->sections[2].size = 12;
  assembly->sections[2].attrs = 1107296320;
  nsections = nsections + 1;
  D.34115 = nsections;
  return D.34115;
}


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

  D.34118 = __builtin_object_size (__dest, 1);
  D.34117 = __builtin___strcpy_chk (__dest, __src, D.34118);
  return D.34117;
}


fixup_resource_directory (char * res_section, char * p, guint32 rva)
{
  unsigned int D.34120;
  sizetype D.34121;
  signed int D.34122;
  unsigned int D.34126;
  unsigned int D.34127;
  short unsigned int D.34128;
  int D.34129;
  short unsigned int D.34130;
  int D.34131;
  int D.34132;
  struct MonoPEResourceDir * dir;
  int i;

  dir = p;
  p = p + 16;
  i = 0;
  goto <D.23068>;
  <D.23067>:
  {
    struct MonoPEResourceDirEntry * dir_entry;
    char * child;

    dir_entry = p;
    D.34120 = dir_entry->dir;
    D.34121 = D.34120 & 2147483647;
    child = res_section + D.34121;
    D.34120 = dir_entry->dir;
    D.34122 = (signed int) D.34120;
    if (D.34122 < 0) goto <D.34123>; else goto <D.34124>;
    <D.34123>:
    fixup_resource_directory (res_section, child, rva);
    goto <D.34125>;
    <D.34124>:
    {
      struct MonoPEResourceDataEntry * data_entry;

      data_entry = child;
      D.34126 = data_entry->rde_data_offset;
      D.34127 = D.34126 + rva;
      data_entry->rde_data_offset = D.34127;
    }
    <D.34125>:
    p = p + 8;
  }
  i = i + 1;
  <D.23068>:
  D.34128 = dir->res_named_entries;
  D.34129 = (int) D.34128;
  D.34130 = dir->res_id_entries;
  D.34131 = (int) D.34130;
  D.34132 = D.34129 + D.34131;
  if (D.34132 > i) goto <D.23067>; else goto <D.23069>;
  <D.23069>:
}


checked_write_file (void * f, const void * buffer, guint32 numbytes)
{
  int D.34133;
  unsigned int D.34136;
  guint32 dummy;

  try
    {
      D.34133 = WriteFile (f, buffer, numbytes, &dummy, 0B);
      if (D.34133 == 0) goto <D.34134>; else goto <D.34135>;
      <D.34134>:
      D.34136 = GetLastError ();
      monoeg_g_log (0B, 4, "WriteFile returned %d\n", D.34136);
      <D.23076>:
      goto <D.23076>;
      <D.34135>:
    }
  finally
    {
      dummy = {CLOBBER};
    }
}


mono_image_load_module_dynamic (struct MonoReflectionAssemblyBuilder * ab, struct MonoString * fileName)
{
  <unnamed type> status.360;
  struct MonoAssembly * D.34143;
  struct MonoImage * D.34144;
  unsigned int D.34145;
  unsigned int D.34146;
  struct MonoImage * * D.34147;
  unsigned int D.34150;
  gboolean * D.34151;
  struct MonoImage * * D.34154;
  gboolean * D.34155;
  unsigned int D.34156;
  unsigned int D.34157;
  struct MonoException * D.34160;
  struct MonoReflectionModule * D.34161;
  struct MonoDomain * D.34162;
  char * name;
  struct MonoImage * image;
  MonoImageOpenStatus status;
  struct MonoDynamicAssembly * assembly;
  guint32 module_count;
  struct MonoImage * * new_modules;
  gboolean * new_modules_loaded;

  try
    {
      name = mono_string_to_utf8 (fileName);
      image = mono_image_open (name, &status);
      if (image == 0B) goto <D.34137>; else goto <D.34138>;
      <D.34137>:
      {
        struct MonoException * exc;

        status.360 = status;
        if (status.360 == 1) goto <D.34140>; else goto <D.34141>;
        <D.34140>:
        exc = mono_get_exception_file_not_found (fileName);
        goto <D.34142>;
        <D.34141>:
        exc = mono_get_exception_bad_image_format (name);
        <D.34142>:
        monoeg_g_free (name);
        mono_raise_exception (exc);
      }
      <D.34138>:
      monoeg_g_free (name);
      assembly = ab->dynamic_assembly;
      image->assembly = assembly;
      D.34143 = image->assembly;
      D.34144 = D.34143->image;
      module_count = D.34144->module_count;
      D.34145 = module_count + 1;
      D.34146 = D.34145 * 4;
      new_modules = monoeg_malloc0 (D.34146);
      D.34145 = module_count + 1;
      D.34146 = D.34145 * 4;
      new_modules_loaded = monoeg_malloc0 (D.34146);
      D.34143 = image->assembly;
      D.34144 = D.34143->image;
      D.34147 = D.34144->modules;
      if (D.34147 != 0B) goto <D.34148>; else goto <D.34149>;
      <D.34148>:
      D.34143 = image->assembly;
      D.34144 = D.34143->image;
      D.34147 = D.34144->modules;
      D.34150 = module_count * 4;
      memcpy (new_modules, D.34147, D.34150);
      <D.34149>:
      D.34143 = image->assembly;
      D.34144 = D.34143->image;
      D.34151 = D.34144->modules_loaded;
      if (D.34151 != 0B) goto <D.34152>; else goto <D.34153>;
      <D.34152>:
      D.34143 = image->assembly;
      D.34144 = D.34143->image;
      D.34151 = D.34144->modules_loaded;
      D.34150 = module_count * 4;
      memcpy (new_modules_loaded, D.34151, D.34150);
      <D.34153>:
      D.34150 = module_count * 4;
      D.34154 = new_modules + D.34150;
      *D.34154 = image;
      D.34150 = module_count * 4;
      D.34155 = new_modules_loaded + D.34150;
      *D.34155 = 1;
      mono_image_addref (image);
      D.34143 = image->assembly;
      D.34144 = D.34143->image;
      D.34147 = D.34144->modules;
      monoeg_g_free (D.34147);
      D.34143 = image->assembly;
      D.34144 = D.34143->image;
      D.34144->modules = new_modules;
      D.34143 = image->assembly;
      D.34144 = D.34143->image;
      D.34144->modules_loaded = new_modules_loaded;
      D.34143 = image->assembly;
      D.34144 = D.34143->image;
      D.34156 = D.34144->module_count;
      D.34157 = D.34156 + 1;
      D.34144->module_count = D.34157;
      mono_assembly_load_references (image, &status);
      status.360 = status;
      if (status.360 != 0) goto <D.34158>; else goto <D.34159>;
      <D.34158>:
      mono_image_close (image);
      D.34160 = mono_get_exception_file_not_found (fileName);
      mono_raise_exception (D.34160);
      <D.34159>:
      D.34162 = mono_domain_get ();
      D.34161 = mono_module_get_object (D.34162, image);
      return D.34161;
    }
  finally
    {
      status = {CLOBBER};
    }
}


mono_reflection_cleanup_domain (struct MonoDomain * domain)
{
  struct MonoGHashTable * D.34165;

  D.34165 = domain->refobject_hash;
  if (D.34165 != 0B) goto <D.34166>; else goto <D.34167>;
  <D.34166>:
  D.34165 = domain->refobject_hash;
  mono_g_hash_table_destroy (D.34165);
  domain->refobject_hash = 0B;
  <D.34167>:
}


mono_image_module_basic_init (struct MonoReflectionModuleBuilder * moduleb)
{
  struct MonoString * D.34170;
  struct MonoString * D.34171;
  int D.34172;
  struct MonoDynamicAssembly * D.34175;
  struct MonoImage * D.34176;
  struct MonoVTable * D.34177;
  struct MonoDomain * D.34178;
  unsigned int D.34179;
  int D.34180;
  unsigned int D.34181;
  unsigned int D.34182;
  struct MonoImage * * D.34183;
  unsigned int module_count.361;
  unsigned int D.34187;
  struct MonoImage * * D.34188;
  unsigned int D.34189;
  struct MonoDynamicImage * image;
  struct MonoReflectionAssemblyBuilder * ab;

  image = moduleb->dynamic_image;
  ab = moduleb->assemblyb;
  if (image == 0B) goto <D.34168>; else goto <D.34169>;
  <D.34168>:
  {
    struct MonoError error;
    int module_count;
    struct MonoImage * * new_modules;
    struct MonoImage * ass;
    char * name;
    char * fqname;

    try
      {
        D.34170 = ab->name;
        name = mono_string_to_utf8 (D.34170);
        D.34171 = moduleb->module.fqname;
        fqname = mono_string_to_utf8_checked (D.34171, &error);
        D.34172 = mono_error_ok (&error);
        if (D.34172 == 0) goto <D.34173>; else goto <D.34174>;
        <D.34173>:
        monoeg_g_free (name);
        mono_error_raise_exception (&error);
        <D.34174>:
        D.34175 = ab->dynamic_assembly;
        image = create_dynamic_mono_image (D.34175, name, fqname);
        D.34176 = &image->image;
        moduleb->module.image = D.34176;
        moduleb->dynamic_image = image;
        D.34177 = MEM[(struct MonoObject *)moduleb].vtable;
        D.34178 = D.34177->domain;
        register_module (D.34178, moduleb, image);
        D.34175 = ab->dynamic_assembly;
        ass = D.34175->assembly.image;
        D.34179 = ass->module_count;
        module_count = (int) D.34179;
        D.34180 = module_count + 1;
        D.34181 = (unsigned int) D.34180;
        D.34182 = D.34181 * 4;
        new_modules = monoeg_malloc0 (D.34182);
        D.34183 = ass->modules;
        if (D.34183 != 0B) goto <D.34184>; else goto <D.34185>;
        <D.34184>:
        D.34183 = ass->modules;
        module_count.361 = (unsigned int) module_count;
        D.34187 = module_count.361 * 4;
        memcpy (new_modules, D.34183, D.34187);
        <D.34185>:
        module_count.361 = (unsigned int) module_count;
        D.34187 = module_count.361 * 4;
        D.34188 = new_modules + D.34187;
        D.34176 = &image->image;
        *D.34188 = D.34176;
        D.34176 = &image->image;
        mono_image_addref (D.34176);
        D.34183 = ass->modules;
        monoeg_g_free (D.34183);
        ass->modules = new_modules;
        D.34179 = ass->module_count;
        D.34189 = D.34179 + 1;
        ass->module_count = D.34189;
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.34169>:
}


register_module (struct MonoDomain * domain, struct MonoReflectionModuleBuilder * res, struct MonoDynamicImage * module)
{
  union mono_mutex_t * D.34190;
  _Bool D.34193;
  long int D.34194;
  long int D.34195;
  struct MonoGHashTable * D.34198;
  struct MonoGHashTable * D.34201;
  struct MonoMemPool * D.34204;
  _Bool D.34207;
  long int D.34208;
  long int D.34209;
  void * D.34212;

  {
    struct MonoReflectionModuleBuilder * _obj;
    struct ReflectedEntry pe;

    try
      {
        pe.item = module;
        pe.refclass = 0B;
        {
          int ret;

          D.34190 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.34190);
          if (ret != 0) goto <D.34191>; else goto <D.34192>;
          <D.34191>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.34192>:
          D.34193 = ret != 0;
          D.34194 = (long int) D.34193;
          D.34195 = __builtin_expect (D.34194, 0);
          if (D.34195 != 0) goto <D.34196>; else goto <D.34197>;
          <D.34196>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6173, "ret == 0");
          <D.34197>:
        }
        D.34198 = domain->refobject_hash;
        if (D.34198 == 0B) goto <D.34199>; else goto <D.34200>;
        <D.34199>:
        D.34201 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.34201;
        <D.34200>:
        D.34198 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.34198, &pe);
        if (_obj == 0B) goto <D.34202>; else goto <D.34203>;
        <D.34202>:
        {
          struct ReflectedEntry * e;

          D.34204 = domain->mp;
          e = mono_mempool_alloc (D.34204, 8);
          e->item = module;
          e->refclass = 0B;
          D.34198 = domain->refobject_hash;
          mono_g_hash_table_insert (D.34198, e, res);
          _obj = res;
        }
        <D.34203>:
        {
          int ret;

          D.34190 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34190);
          if (ret != 0) goto <D.34205>; else goto <D.34206>;
          <D.34205>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34206>:
          D.34207 = ret != 0;
          D.34208 = (long int) D.34207;
          D.34209 = __builtin_expect (D.34208, 0);
          if (D.34209 != 0) goto <D.34210>; else goto <D.34211>;
          <D.34210>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6173, "ret == 0");
          <D.34211>:
        }
        D.34212 = _obj;
        return D.34212;
      }
    finally
      {
        pe = {CLOBBER};
      }
  }
}


mono_image_set_wrappers_type (struct MonoReflectionModuleBuilder * moduleb, struct MonoReflectionType * type)
{
  struct MonoType * D.34215;
  _Bool D.34216;
  long int D.34217;
  long int D.34218;
  struct MonoClass * D.34221;
  struct MonoDynamicImage * image;

  image = moduleb->dynamic_image;
  D.34215 = type->type;
  D.34216 = D.34215 == 0B;
  D.34217 = (long int) D.34216;
  D.34218 = __builtin_expect (D.34217, 0);
  if (D.34218 != 0) goto <D.34219>; else goto <D.34220>;
  <D.34219>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6226, "type->type");
  <D.34220>:
  D.34215 = type->type;
  D.34221 = mono_class_from_mono_type (D.34215);
  image->wrappers_type = D.34221;
}


mono_assembly_get_object (struct MonoDomain * domain, struct MonoAssembly * assembly)
{
  union mono_mutex_t * D.34222;
  _Bool D.34225;
  long int D.34226;
  long int D.34227;
  struct MonoGHashTable * D.34230;
  struct MonoGHashTable * D.34233;
  _Bool D.34238;
  long int D.34239;
  long int D.34240;
  struct MonoReflectionAssembly * D.34243;
  _Bool D.34246;
  long int D.34247;
  long int D.34248;
  struct MonoClass * assembly_type.362;
  struct MonoImage * D.34254;
  _Bool D.34257;
  long int D.34258;
  long int D.34259;
  _Bool D.34264;
  long int D.34265;
  long int D.34266;
  struct MonoGHashTable * D.34271;
  struct MonoMemPool * D.34274;
  _Bool D.34277;
  long int D.34278;
  long int D.34279;
  static struct MonoClass * assembly_type;
  struct MonoReflectionAssembly * res;

  {
    struct MonoReflectionAssembly * _obj;
    struct ReflectedEntry e;

    try
      {
        e.item = assembly;
        e.refclass = 0B;
        {
          int ret;

          D.34222 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.34222);
          if (ret != 0) goto <D.34223>; else goto <D.34224>;
          <D.34223>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.34224>:
          D.34225 = ret != 0;
          D.34226 = (long int) D.34225;
          D.34227 = __builtin_expect (D.34226, 0);
          if (D.34227 != 0) goto <D.34228>; else goto <D.34229>;
          <D.34228>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6245, "ret == 0");
          <D.34229>:
        }
        D.34230 = domain->refobject_hash;
        if (D.34230 == 0B) goto <D.34231>; else goto <D.34232>;
        <D.34231>:
        D.34233 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.34233;
        <D.34232>:
        D.34230 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.34230, &e);
        if (_obj != 0B) goto <D.34234>; else goto <D.34235>;
        <D.34234>:
        {
          int ret;

          D.34222 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34222);
          if (ret != 0) goto <D.34236>; else goto <D.34237>;
          <D.34236>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34237>:
          D.34238 = ret != 0;
          D.34239 = (long int) D.34238;
          D.34240 = __builtin_expect (D.34239, 0);
          if (D.34240 != 0) goto <D.34241>; else goto <D.34242>;
          <D.34241>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6245, "ret == 0");
          <D.34242>:
        }
        D.34243 = _obj;
        return D.34243;
        <D.34235>:
        {
          int ret;

          D.34222 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34222);
          if (ret != 0) goto <D.34244>; else goto <D.34245>;
          <D.34244>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34245>:
          D.34246 = ret != 0;
          D.34247 = (long int) D.34246;
          D.34248 = __builtin_expect (D.34247, 0);
          if (D.34248 != 0) goto <D.34249>; else goto <D.34250>;
          <D.34249>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6245, "ret == 0");
          <D.34250>:
        }
      }
    finally
      {
        e = {CLOBBER};
      }
  }
  assembly_type.362 = assembly_type;
  if (assembly_type.362 == 0B) goto <D.34252>; else goto <D.34253>;
  <D.34252>:
  {
    struct MonoClass * class;

    D.34254 = mono_defaults.corlib;
    class = mono_class_from_name (D.34254, "System.Reflection", "MonoAssembly");
    if (class == 0B) goto <D.34255>; else goto <D.34256>;
    <D.34255>:
    D.34254 = mono_defaults.corlib;
    class = mono_class_from_name (D.34254, "System.Reflection", "Assembly");
    <D.34256>:
    D.34257 = class == 0B;
    D.34258 = (long int) D.34257;
    D.34259 = __builtin_expect (D.34258, 0);
    if (D.34259 != 0) goto <D.34260>; else goto <D.34261>;
    <D.34260>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6250, "class");
    <D.34261>:
    assembly_type = class;
  }
  <D.34253>:
  assembly_type.362 = assembly_type;
  res = mono_object_new (domain, assembly_type.362);
  res->assembly = assembly;
  {
    struct MonoReflectionAssembly * _obj;
    struct ReflectedEntry pe;

    try
      {
        pe.item = assembly;
        pe.refclass = 0B;
        {
          int ret;

          D.34222 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.34222);
          if (ret != 0) goto <D.34262>; else goto <D.34263>;
          <D.34262>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.34263>:
          D.34264 = ret != 0;
          D.34265 = (long int) D.34264;
          D.34266 = __builtin_expect (D.34265, 0);
          if (D.34266 != 0) goto <D.34267>; else goto <D.34268>;
          <D.34267>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6256, "ret == 0");
          <D.34268>:
        }
        D.34230 = domain->refobject_hash;
        if (D.34230 == 0B) goto <D.34269>; else goto <D.34270>;
        <D.34269>:
        D.34271 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.34271;
        <D.34270>:
        D.34230 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.34230, &pe);
        if (_obj == 0B) goto <D.34272>; else goto <D.34273>;
        <D.34272>:
        {
          struct ReflectedEntry * e;

          D.34274 = domain->mp;
          e = mono_mempool_alloc (D.34274, 8);
          e->item = assembly;
          e->refclass = 0B;
          D.34230 = domain->refobject_hash;
          mono_g_hash_table_insert (D.34230, e, res);
          _obj = res;
        }
        <D.34273>:
        {
          int ret;

          D.34222 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34222);
          if (ret != 0) goto <D.34275>; else goto <D.34276>;
          <D.34275>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34276>:
          D.34277 = ret != 0;
          D.34278 = (long int) D.34277;
          D.34279 = __builtin_expect (D.34278, 0);
          if (D.34279 != 0) goto <D.34280>; else goto <D.34281>;
          <D.34280>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6256, "ret == 0");
          <D.34281>:
        }
        D.34243 = _obj;
        return D.34243;
      }
    finally
      {
        pe = {CLOBBER};
      }
  }
}


mono_module_get_object (struct MonoDomain * domain, struct MonoImage * image)
{
  union mono_mutex_t * D.34286;
  _Bool D.34289;
  long int D.34290;
  long int D.34291;
  struct MonoGHashTable * D.34294;
  struct MonoGHashTable * D.34297;
  _Bool D.34302;
  long int D.34303;
  long int D.34304;
  struct MonoReflectionModule * D.34307;
  _Bool D.34310;
  long int D.34311;
  long int D.34312;
  struct MonoClass * module_type.363;
  struct MonoImage * D.34318;
  _Bool D.34321;
  long int D.34322;
  long int D.34323;
  struct MonoReflectionAssembly * * D.34326;
  struct MonoAssembly * D.34327;
  struct MonoReflectionAssembly * D.34328;
  struct MonoString * * D.34329;
  char * D.34330;
  struct MonoString * D.34331;
  struct MonoString * * D.34332;
  struct MonoString * D.34333;
  struct MonoString * * D.34334;
  const char * D.34335;
  struct MonoString * D.34336;
  struct MonoImage * D.34337;
  struct MonoImage * * D.34341;
  unsigned int i.364;
  unsigned int D.34345;
  struct MonoImage * * D.34346;
  struct MonoImage * D.34347;
  int D.34350;
  int D.34351;
  unsigned int D.34352;
  unsigned int i.365;
  unsigned int D.34354;
  unsigned int D.34355;
  _Bool D.34356;
  long int D.34357;
  long int D.34358;
  _Bool D.34363;
  long int D.34364;
  long int D.34365;
  struct MonoGHashTable * D.34370;
  struct MonoMemPool * D.34373;
  _Bool D.34376;
  long int D.34377;
  long int D.34378;
  static struct MonoClass * module_type;
  struct MonoReflectionModule * res;
  char * basename;

  {
    struct MonoReflectionModule * _obj;
    struct ReflectedEntry e;

    try
      {
        e.item = image;
        e.refclass = 0B;
        {
          int ret;

          D.34286 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.34286);
          if (ret != 0) goto <D.34287>; else goto <D.34288>;
          <D.34287>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.34288>:
          D.34289 = ret != 0;
          D.34290 = (long int) D.34289;
          D.34291 = __builtin_expect (D.34290, 0);
          if (D.34291 != 0) goto <D.34292>; else goto <D.34293>;
          <D.34292>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6268, "ret == 0");
          <D.34293>:
        }
        D.34294 = domain->refobject_hash;
        if (D.34294 == 0B) goto <D.34295>; else goto <D.34296>;
        <D.34295>:
        D.34297 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.34297;
        <D.34296>:
        D.34294 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.34294, &e);
        if (_obj != 0B) goto <D.34298>; else goto <D.34299>;
        <D.34298>:
        {
          int ret;

          D.34286 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34286);
          if (ret != 0) goto <D.34300>; else goto <D.34301>;
          <D.34300>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34301>:
          D.34302 = ret != 0;
          D.34303 = (long int) D.34302;
          D.34304 = __builtin_expect (D.34303, 0);
          if (D.34304 != 0) goto <D.34305>; else goto <D.34306>;
          <D.34305>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6268, "ret == 0");
          <D.34306>:
        }
        D.34307 = _obj;
        return D.34307;
        <D.34299>:
        {
          int ret;

          D.34286 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34286);
          if (ret != 0) goto <D.34308>; else goto <D.34309>;
          <D.34308>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34309>:
          D.34310 = ret != 0;
          D.34311 = (long int) D.34310;
          D.34312 = __builtin_expect (D.34311, 0);
          if (D.34312 != 0) goto <D.34313>; else goto <D.34314>;
          <D.34313>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6268, "ret == 0");
          <D.34314>:
        }
      }
    finally
      {
        e = {CLOBBER};
      }
  }
  module_type.363 = module_type;
  if (module_type.363 == 0B) goto <D.34316>; else goto <D.34317>;
  <D.34316>:
  {
    struct MonoClass * class;

    D.34318 = mono_defaults.corlib;
    class = mono_class_from_name (D.34318, "System.Reflection", "MonoModule");
    if (class == 0B) goto <D.34319>; else goto <D.34320>;
    <D.34319>:
    D.34318 = mono_defaults.corlib;
    class = mono_class_from_name (D.34318, "System.Reflection", "Module");
    <D.34320>:
    D.34321 = class == 0B;
    D.34322 = (long int) D.34321;
    D.34323 = __builtin_expect (D.34322, 0);
    if (D.34323 != 0) goto <D.34324>; else goto <D.34325>;
    <D.34324>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6273, "class");
    <D.34325>:
    module_type = class;
  }
  <D.34317>:
  module_type.363 = module_type;
  res = mono_object_new (domain, module_type.363);
  res->image = image;
  D.34326 = &res->assembly;
  D.34327 = image->assembly;
  D.34328 = mono_assembly_get_object (domain, D.34327);
  mono_gc_wbarrier_set_field (res, D.34326, D.34328);
  D.34329 = &res->fqname;
  D.34330 = image->name;
  D.34331 = mono_string_new (domain, D.34330);
  mono_gc_wbarrier_set_field (res, D.34329, D.34331);
  D.34330 = image->name;
  basename = monoeg_g_path_get_basename (D.34330);
  D.34332 = &res->name;
  D.34333 = mono_string_new (domain, basename);
  mono_gc_wbarrier_set_field (res, D.34332, D.34333);
  D.34334 = &res->scopename;
  D.34335 = image->module_name;
  D.34336 = mono_string_new (domain, D.34335);
  mono_gc_wbarrier_set_field (res, D.34334, D.34336);
  monoeg_g_free (basename);
  D.34327 = image->assembly;
  D.34337 = D.34327->image;
  if (D.34337 == image) goto <D.34338>; else goto <D.34339>;
  <D.34338>:
  res->token = 1;
  goto <D.34340>;
  <D.34339>:
  {
    int i;

    res->token = 0;
    D.34327 = image->assembly;
    D.34337 = D.34327->image;
    D.34341 = D.34337->modules;
    if (D.34341 != 0B) goto <D.34342>; else goto <D.34343>;
    <D.34342>:
    i = 0;
    goto <D.23257>;
    <D.23256>:
    D.34327 = image->assembly;
    D.34337 = D.34327->image;
    D.34341 = D.34337->modules;
    i.364 = (unsigned int) i;
    D.34345 = i.364 * 4;
    D.34346 = D.34341 + D.34345;
    D.34347 = *D.34346;
    if (D.34347 == image) goto <D.34348>; else goto <D.34349>;
    <D.34348>:
    D.34350 = i + 1;
    D.34351 = D.34350 | 436207616;
    D.34352 = (unsigned int) D.34351;
    res->token = D.34352;
    <D.34349>:
    i = i + 1;
    <D.23257>:
    i.365 = (unsigned int) i;
    D.34327 = image->assembly;
    D.34337 = D.34327->image;
    D.34354 = D.34337->module_count;
    if (i.365 < D.34354) goto <D.23256>; else goto <D.23258>;
    <D.23258>:
    D.34355 = res->token;
    D.34356 = D.34355 == 0;
    D.34357 = (long int) D.34356;
    D.34358 = __builtin_expect (D.34357, 0);
    if (D.34358 != 0) goto <D.34359>; else goto <D.34360>;
    <D.34359>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6298, "res->token");
    <D.34360>:
    <D.34343>:
  }
  <D.34340>:
  {
    struct MonoReflectionModule * _obj;
    struct ReflectedEntry pe;

    try
      {
        pe.item = image;
        pe.refclass = 0B;
        {
          int ret;

          D.34286 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.34286);
          if (ret != 0) goto <D.34361>; else goto <D.34362>;
          <D.34361>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.34362>:
          D.34363 = ret != 0;
          D.34364 = (long int) D.34363;
          D.34365 = __builtin_expect (D.34364, 0);
          if (D.34365 != 0) goto <D.34366>; else goto <D.34367>;
          <D.34366>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6302, "ret == 0");
          <D.34367>:
        }
        D.34294 = domain->refobject_hash;
        if (D.34294 == 0B) goto <D.34368>; else goto <D.34369>;
        <D.34368>:
        D.34370 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.34370;
        <D.34369>:
        D.34294 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.34294, &pe);
        if (_obj == 0B) goto <D.34371>; else goto <D.34372>;
        <D.34371>:
        {
          struct ReflectedEntry * e;

          D.34373 = domain->mp;
          e = mono_mempool_alloc (D.34373, 8);
          e->item = image;
          e->refclass = 0B;
          D.34294 = domain->refobject_hash;
          mono_g_hash_table_insert (D.34294, e, res);
          _obj = res;
        }
        <D.34372>:
        {
          int ret;

          D.34286 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34286);
          if (ret != 0) goto <D.34374>; else goto <D.34375>;
          <D.34374>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34375>:
          D.34376 = ret != 0;
          D.34377 = (long int) D.34376;
          D.34378 = __builtin_expect (D.34377, 0);
          if (D.34378 != 0) goto <D.34379>; else goto <D.34380>;
          <D.34379>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6302, "ret == 0");
          <D.34380>:
        }
        D.34307 = _obj;
        return D.34307;
      }
    finally
      {
        pe = {CLOBBER};
      }
  }
}


mono_module_file_get_object (struct MonoDomain * domain, struct MonoImage * image, int table_index)
{
  struct MonoClass * module_type.366;
  struct MonoImage * D.34388;
  _Bool D.34391;
  long int D.34392;
  long int D.34393;
  <unnamed-unsigned:24> D.34396;
  int D.34397;
  _Bool D.34398;
  long int D.34399;
  long int D.34400;
  struct MonoReflectionAssembly * * D.34403;
  struct MonoAssembly * D.34404;
  struct MonoReflectionAssembly * D.34405;
  unsigned int D.34406;
  int i.367;
  int D.23286;
  struct MonoImage * * D.34410;
  unsigned int D.34411;
  struct MonoImage * * D.34412;
  struct MonoImage * D.34413;
  unsigned int D.34414;
  struct MonoString * * D.34415;
  struct MonoString * D.34416;
  struct MonoString * * D.34417;
  struct MonoString * D.34418;
  struct MonoString * * D.34419;
  struct MonoString * D.34420;
  unsigned int D.34421;
  _Bool D.34422;
  unsigned char D.34423;
  int D.34424;
  int D.34425;
  unsigned int D.34426;
  struct MonoReflectionModule * D.34427;
  static struct MonoClass * module_type;
  struct MonoReflectionModule * res;
  struct MonoTableInfo * table;
  guint32 cols[3];
  const char * name;
  guint32 i;
  guint32 name_idx;
  const char * val;

  try
    {
      module_type.366 = module_type;
      if (module_type.366 == 0B) goto <D.34386>; else goto <D.34387>;
      <D.34386>:
      {
        struct MonoClass * class;

        D.34388 = mono_defaults.corlib;
        class = mono_class_from_name (D.34388, "System.Reflection", "MonoModule");
        if (class == 0B) goto <D.34389>; else goto <D.34390>;
        <D.34389>:
        D.34388 = mono_defaults.corlib;
        class = mono_class_from_name (D.34388, "System.Reflection", "Module");
        <D.34390>:
        D.34391 = class == 0B;
        D.34392 = (long int) D.34391;
        D.34393 = __builtin_expect (D.34392, 0);
        if (D.34393 != 0) goto <D.34394>; else goto <D.34395>;
        <D.34394>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6320, "class");
        <D.34395>:
        module_type = class;
      }
      <D.34387>:
      module_type.366 = module_type;
      res = mono_object_new (domain, module_type.366);
      table = &image->tables[38];
      D.34396 = table->rows;
      D.34397 = (int) D.34396;
      D.34398 = D.34397 <= table_index;
      D.34399 = (long int) D.34398;
      D.34400 = __builtin_expect (D.34399, 0);
      if (D.34400 != 0) goto <D.34401>; else goto <D.34402>;
      <D.34401>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6326, "table_index < table->rows");
      <D.34402>:
      mono_metadata_decode_row (table, table_index, &cols, 3);
      res->image = 0B;
      D.34403 = &res->assembly;
      D.34404 = image->assembly;
      D.34405 = mono_assembly_get_object (domain, D.34404);
      mono_gc_wbarrier_set_field (res, D.34403, D.34405);
      D.34406 = cols[1];
      name = mono_metadata_string_heap (image, D.34406);
      table = &image->tables[26];
      i = 0;
      goto <D.23288>;
      <D.23287>:
      i.367 = (int) i;
      name_idx = mono_metadata_decode_row_col (table, i.367, 0);
      val = mono_metadata_string_heap (image, name_idx);
      {
        size_t __s1_len;
        size_t __s2_len;

        D.23286 = __builtin_strcmp (val, name);
      }
      if (D.23286 == 0) goto <D.34408>; else goto <D.34409>;
      <D.34408>:
      D.34410 = image->modules;
      D.34411 = i * 4;
      D.34412 = D.34410 + D.34411;
      D.34413 = *D.34412;
      res->image = D.34413;
      <D.34409>:
      i = i + 1;
      <D.23288>:
      D.34396 = table->rows;
      D.34414 = (unsigned int) D.34396;
      if (D.34414 > i) goto <D.23287>; else goto <D.23289>;
      <D.23289>:
      D.34415 = &res->fqname;
      D.34416 = mono_string_new (domain, name);
      mono_gc_wbarrier_set_field (res, D.34415, D.34416);
      D.34417 = &res->name;
      D.34418 = mono_string_new (domain, name);
      mono_gc_wbarrier_set_field (res, D.34417, D.34418);
      D.34419 = &res->scopename;
      D.34420 = mono_string_new (domain, name);
      mono_gc_wbarrier_set_field (res, D.34419, D.34420);
      D.34421 = cols[0];
      D.34422 = D.34421 != 0;
      D.34423 = (unsigned char) D.34422;
      res->is_resource = D.34423;
      D.34424 = table_index + 1;
      D.34425 = D.34424 | 637534208;
      D.34426 = (unsigned int) D.34425;
      res->token = D.34426;
      D.34427 = res;
      return D.34427;
    }
  finally
    {
      cols = {CLOBBER};
    }
}


mono_type_get_object (struct MonoDomain * domain, struct MonoType * type)
{
  struct MonoType * iftmp.368;
  <unnamed-unsigned:1> D.34431;
  <unnamed-unsigned:1> D.34432;
  unsigned char D.34436;
  struct MonoObject * D.34439;
  struct MonoReflectionType * D.34442;
  struct MonoType * D.34443;
  struct MonoImage * D.34446;
  unsigned char D.34447;
  unsigned char D.34448;
  void * D.34453;
  union mono_mutex_t * D.34456;
  _Bool D.34459;
  long int D.34460;
  long int D.34461;
  struct MonoGHashTable * D.34464;
  struct MonoGHashTable * D.34467;
  _Bool D.34472;
  long int D.34473;
  long int D.34474;
  _Bool D.34481;
  long int D.34482;
  long int D.34483;
  struct MonoGenericClass * D.34488;
  unsigned char D.34489;
  unsigned char D.34490;
  struct MonoClass * D.34493;
  unsigned char D.34494;
  unsigned char D.34495;
  int D.34500;
  _Bool D.34505;
  long int D.34506;
  long int D.34507;
  struct MonoException * D.34510;
  void * D.34511;
  unsigned char D.34514;
  unsigned char D.34515;
  unsigned char D.34518;
  _Bool D.34519;
  _Bool D.34520;
  _Bool D.34521;
  struct MonoGenericContainer * D.34526;
  unsigned char D.34528;
  unsigned char D.34529;
  struct MonoClass * D.34533;
  struct MonoClass * D.34534;
  unsigned char D.34535;
  unsigned char D.34536;
  struct MonoClass * D.34545;
  unsigned char D.34546;
  unsigned char D.34547;
  unsigned char D.34552;
  unsigned char D.34553;
  _Bool D.34558;
  long int D.34559;
  long int D.34560;
  struct MonoClass * D.34563;
  _Bool D.34568;
  long int D.34569;
  long int D.34570;
  struct MonoType * norm_type;
  struct MonoReflectionType * res;
  struct MonoClass * klass;

  klass = mono_class_from_mono_type (type);
  D.34431 = klass->byval_arg.byref;
  D.34432 = type->byref;
  if (D.34431 == D.34432) goto <D.34433>; else goto <D.34434>;
  <D.34433>:
  iftmp.368 = &klass->byval_arg;
  goto <D.34435>;
  <D.34434>:
  iftmp.368 = &klass->this_arg;
  <D.34435>:
  type = iftmp.368;
  D.34436 = type->type;
  if (D.34436 == 1) goto <D.34437>; else goto <D.34438>;
  <D.34437>:
  D.34439 = domain->typeof_void;
  if (D.34439 != 0B) goto <D.34440>; else goto <D.34441>;
  <D.34440>:
  D.34442 = domain->typeof_void;
  return D.34442;
  <D.34441>:
  <D.34438>:
  D.34443 = &klass->byval_arg;
  if (D.34443 == type) goto <D.34444>; else goto <D.34445>;
  <D.34444>:
  D.34446 = klass->image;
  D.34447 = BIT_FIELD_REF <*D.34446, 8, 128>;
  D.34448 = D.34447 & 8;
  if (D.34448 == 0) goto <D.34449>; else goto <D.34450>;
  <D.34449>:
  {
    struct MonoVTable * vtable;

    vtable = mono_class_try_get_vtable (domain, klass);
    if (vtable != 0B) goto <D.34451>; else goto <D.34452>;
    <D.34451>:
    D.34453 = vtable->type;
    if (D.34453 != 0B) goto <D.34454>; else goto <D.34455>;
    <D.34454>:
    D.34442 = vtable->type;
    return D.34442;
    <D.34455>:
    <D.34452>:
  }
  <D.34450>:
  <D.34445>:
  mono_loader_lock ();
  {
    int ret;

    D.34456 = &domain->lock.mutex;
    ret = pthread_mutex_lock (D.34456);
    if (ret != 0) goto <D.34457>; else goto <D.34458>;
    <D.34457>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.34458>:
    D.34459 = ret != 0;
    D.34460 = (long int) D.34459;
    D.34461 = __builtin_expect (D.34460, 0);
    if (D.34461 != 0) goto <D.34462>; else goto <D.34463>;
    <D.34462>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6462, "ret == 0");
    <D.34463>:
  }
  D.34464 = domain->type_hash;
  if (D.34464 == 0B) goto <D.34465>; else goto <D.34466>;
  <D.34465>:
  D.34467 = mono_g_hash_table_new_type (mono_metadata_type_hash, mono_metadata_type_equal, 2);
  domain->type_hash = D.34467;
  <D.34466>:
  D.34464 = domain->type_hash;
  res = mono_g_hash_table_lookup (D.34464, type);
  if (res != 0B) goto <D.34468>; else goto <D.34469>;
  <D.34468>:
  {
    int ret;

    D.34456 = &domain->lock.mutex;
    ret = pthread_mutex_unlock (D.34456);
    if (ret != 0) goto <D.34470>; else goto <D.34471>;
    <D.34470>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.34471>:
    D.34472 = ret != 0;
    D.34473 = (long int) D.34472;
    D.34474 = __builtin_expect (D.34473, 0);
    if (D.34474 != 0) goto <D.34475>; else goto <D.34476>;
    <D.34475>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6467, "ret == 0");
    <D.34476>:
  }
  mono_loader_unlock ();
  D.34442 = res;
  return D.34442;
  <D.34469>:
  norm_type = mono_type_normalize (type);
  if (norm_type != type) goto <D.34477>; else goto <D.34478>;
  <D.34477>:
  res = mono_type_get_object (domain, norm_type);
  D.34464 = domain->type_hash;
  mono_g_hash_table_insert (D.34464, type, res);
  {
    int ret;

    D.34456 = &domain->lock.mutex;
    ret = pthread_mutex_unlock (D.34456);
    if (ret != 0) goto <D.34479>; else goto <D.34480>;
    <D.34479>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.34480>:
    D.34481 = ret != 0;
    D.34482 = (long int) D.34481;
    D.34483 = __builtin_expect (D.34482, 0);
    if (D.34483 != 0) goto <D.34484>; else goto <D.34485>;
    <D.34484>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6483, "ret == 0");
    <D.34485>:
  }
  mono_loader_unlock ();
  D.34442 = res;
  return D.34442;
  <D.34478>:
  D.34436 = type->type;
  if (D.34436 == 21) goto <D.34486>; else goto <D.34487>;
  <D.34486>:
  D.34488 = type->data.generic_class;
  D.34489 = BIT_FIELD_REF <*D.34488, 8, 96>;
  D.34490 = D.34489 & 1;
  if (D.34490 != 0) goto <D.34491>; else goto <D.34492>;
  <D.34491>:
  D.34488 = type->data.generic_class;
  D.34493 = D.34488->container_class;
  D.34494 = BIT_FIELD_REF <*D.34493, 8, 160>;
  D.34495 = D.34494 & 128;
  if (D.34495 == 0) goto <D.34496>; else goto <D.34497>;
  <D.34496>:
  if (1 != 0) goto <D.34498>; else goto <D.34499>;
  <D.34498>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6490, "0");
  <D.34499>:
  <D.34497>:
  <D.34492>:
  <D.34487>:
  D.34500 = verify_safe_for_managed_space (type);
  if (D.34500 == 0) goto <D.34501>; else goto <D.34502>;
  <D.34501>:
  {
    int ret;

    D.34456 = &domain->lock.mutex;
    ret = pthread_mutex_unlock (D.34456);
    if (ret != 0) goto <D.34503>; else goto <D.34504>;
    <D.34503>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.34504>:
    D.34505 = ret != 0;
    D.34506 = (long int) D.34505;
    D.34507 = __builtin_expect (D.34506, 0);
    if (D.34507 != 0) goto <D.34508>; else goto <D.34509>;
    <D.34508>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6493, "ret == 0");
    <D.34509>:
  }
  mono_loader_unlock ();
  D.34510 = mono_get_exception_invalid_operation ("This type cannot be propagated to managed space");
  mono_raise_exception (D.34510);
  <D.34502>:
  D.34511 = mono_class_get_ref_info (klass);
  if (D.34511 != 0B) goto <D.34512>; else goto <D.34513>;
  <D.34512>:
  D.34514 = BIT_FIELD_REF <*klass, 8, 160>;
  D.34515 = D.34514 & 128;
  if (D.34515 == 0) goto <D.34516>; else goto <D.34517>;
  <D.34516>:
  {
    gboolean is_type_done;

    is_type_done = 1;
    D.34518 = klass->byval_arg.type;
    D.34519 = D.34518 == 30;
    D.34520 = D.34518 == 19;
    D.34521 = D.34519 | D.34520;
    if (D.34521 != 0) goto <D.34522>; else goto <D.34523>;
    <D.34522>:
    {
      struct MonoGenericParam * gparam;

      gparam = klass->byval_arg.data.generic_param;
      D.34526 = gparam->owner;
      if (D.34526 != 0B) goto <D.34527>; else goto <D.34524>;
      <D.34527>:
      D.34526 = gparam->owner;
      D.34528 = BIT_FIELD_REF <*D.34526, 8, 152>;
      D.34529 = D.34528 & 128;
      if (D.34529 != 0) goto <D.34530>; else goto <D.34524>;
      <D.34530>:
      {
        struct MonoMethod * method;

        D.34526 = gparam->owner;
        method = D.34526->owner.method;
        if (method != 0B) goto <D.34531>; else goto <D.34532>;
        <D.34531>:
        D.34533 = method->klass;
        D.34534 = mono_class_get_generic_type_definition (D.34533);
        D.34535 = BIT_FIELD_REF <*D.34534, 8, 160>;
        D.34536 = D.34535 & 128;
        if (D.34536 != 0) goto <D.34537>; else goto <D.34538>;
        <D.34537>:
        is_type_done = 0;
        <D.34538>:
        <D.34532>:
      }
      goto <D.34525>;
      <D.34524>:
      D.34526 = gparam->owner;
      if (D.34526 != 0B) goto <D.34539>; else goto <D.34540>;
      <D.34539>:
      D.34526 = gparam->owner;
      D.34528 = BIT_FIELD_REF <*D.34526, 8, 152>;
      D.34529 = D.34528 & 128;
      if (D.34529 == 0) goto <D.34541>; else goto <D.34542>;
      <D.34541>:
      {
        struct MonoClass * klass;

        D.34526 = gparam->owner;
        klass = D.34526->owner.klass;
        if (klass != 0B) goto <D.34543>; else goto <D.34544>;
        <D.34543>:
        D.34545 = mono_class_get_generic_type_definition (klass);
        D.34546 = BIT_FIELD_REF <*D.34545, 8, 160>;
        D.34547 = D.34546 & 128;
        if (D.34547 != 0) goto <D.34548>; else goto <D.34549>;
        <D.34548>:
        is_type_done = 0;
        <D.34549>:
        <D.34544>:
      }
      <D.34542>:
      <D.34540>:
      <D.34525>:
    }
    <D.34523>:
    if (is_type_done != 0) goto <D.34550>; else goto <D.34551>;
    <D.34550>:
    D.34552 = BIT_FIELD_REF <*type, 8, 56>;
    D.34553 = D.34552 & 64;
    if (D.34553 == 0) goto <D.34554>; else goto <D.34555>;
    <D.34554>:
    {
      int ret;

      D.34456 = &domain->lock.mutex;
      ret = pthread_mutex_unlock (D.34456);
      if (ret != 0) goto <D.34556>; else goto <D.34557>;
      <D.34556>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
      <D.34557>:
      D.34558 = ret != 0;
      D.34559 = (long int) D.34558;
      D.34560 = __builtin_expect (D.34559, 0);
      if (D.34560 != 0) goto <D.34561>; else goto <D.34562>;
      <D.34561>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6521, "ret == 0");
      <D.34562>:
    }
    mono_loader_unlock ();
    D.34442 = mono_class_get_ref_info (klass);
    return D.34442;
    <D.34555>:
    <D.34551>:
  }
  <D.34517>:
  <D.34513>:
  D.34563 = mono_defaults.monotype_class;
  res = mono_object_new_pinned (domain, D.34563);
  res->type = type;
  D.34464 = domain->type_hash;
  mono_g_hash_table_insert (D.34464, type, res);
  D.34436 = type->type;
  if (D.34436 == 1) goto <D.34564>; else goto <D.34565>;
  <D.34564>:
  domain->typeof_void = res;
  <D.34565>:
  {
    int ret;

    D.34456 = &domain->lock.mutex;
    ret = pthread_mutex_unlock (D.34456);
    if (ret != 0) goto <D.34566>; else goto <D.34567>;
    <D.34566>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.34567>:
    D.34568 = ret != 0;
    D.34569 = (long int) D.34568;
    D.34570 = __builtin_expect (D.34569, 0);
    if (D.34570 != 0) goto <D.34571>; else goto <D.34572>;
    <D.34571>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6534, "ret == 0");
    <D.34572>:
  }
  mono_loader_unlock ();
  D.34442 = res;
  return D.34442;
}


mono_type_normalize (struct MonoType * type)
{
  unsigned char D.34574;
  struct MonoType * D.34577;
  unsigned char D.34578;
  unsigned char D.34579;
  <unnamed-unsigned:22> D.34582;
  unsigned int D.34583;
  unsigned int D.34584;
  unsigned char D.34587;
  struct MonoGenericParam * D.34589;
  short unsigned int D.34590;
  int D.34591;
  struct MonoGenericContainer * D.34593;
  unsigned int i.369;
  unsigned int D.34595;
  struct MonoType * * D.34596;
  int D.34599;
  struct MonoType * iftmp.370;
  <unnamed-unsigned:1> D.34603;
  <unnamed-unsigned:1> D.34604;
  <unnamed-unsigned:1> D.34610;
  int D.34611;
  struct MonoType * iftmp.371;
  <unnamed-unsigned:1> D.34613;
  int i;
  struct MonoGenericClass * gclass;
  struct MonoGenericInst * ginst;
  struct MonoClass * gtd;
  struct MonoGenericContainer * gcontainer;
  struct MonoType * * argv;
  gboolean is_denorm_gtd;
  gboolean requires_rebind;

  argv = 0B;
  is_denorm_gtd = 1;
  requires_rebind = 0;
  D.34574 = type->type;
  if (D.34574 != 21) goto <D.34575>; else goto <D.34576>;
  <D.34575>:
  D.34577 = type;
  return D.34577;
  <D.34576>:
  gclass = type->data.generic_class;
  ginst = gclass->context.class_inst;
  D.34578 = BIT_FIELD_REF <*ginst, 8, 48>;
  D.34579 = D.34578 & 64;
  if (D.34579 == 0) goto <D.34580>; else goto <D.34581>;
  <D.34580>:
  D.34577 = type;
  return D.34577;
  <D.34581>:
  gtd = gclass->container_class;
  gcontainer = gtd->generic_container;
  D.34582 = ginst->type_argc;
  D.34583 = (unsigned int) D.34582;
  D.34584 = D.34583 * 4;
  argv = __builtin_alloca (D.34584);
  i = 0;
  goto <D.23309>;
  <D.23308>:
  {
    struct MonoType * t;
    struct MonoType * norm;

    t = ginst->type_argv[i];
    D.34587 = t->type;
    if (D.34587 != 19) goto <D.34585>; else goto <D.34588>;
    <D.34588>:
    D.34589 = t->data.generic_param;
    D.34590 = D.34589->num;
    D.34591 = (int) D.34590;
    if (D.34591 != i) goto <D.34585>; else goto <D.34592>;
    <D.34592>:
    D.34589 = t->data.generic_param;
    D.34593 = D.34589->owner;
    if (D.34593 != gcontainer) goto <D.34585>; else goto <D.34586>;
    <D.34585>:
    is_denorm_gtd = 0;
    <D.34586>:
    norm = mono_type_normalize (t);
    i.369 = (unsigned int) i;
    D.34595 = i.369 * 4;
    D.34596 = argv + D.34595;
    *D.34596 = norm;
    if (norm != t) goto <D.34597>; else goto <D.34598>;
    <D.34597>:
    requires_rebind = 1;
    <D.34598>:
  }
  i = i + 1;
  <D.23309>:
  D.34582 = ginst->type_argc;
  D.34599 = (int) D.34582;
  if (D.34599 > i) goto <D.23308>; else goto <D.23310>;
  <D.23310>:
  if (is_denorm_gtd != 0) goto <D.34600>; else goto <D.34601>;
  <D.34600>:
  D.34603 = type->byref;
  D.34604 = gtd->byval_arg.byref;
  if (D.34603 == D.34604) goto <D.34605>; else goto <D.34606>;
  <D.34605>:
  iftmp.370 = &gtd->byval_arg;
  goto <D.34607>;
  <D.34606>:
  iftmp.370 = &gtd->this_arg;
  <D.34607>:
  D.34577 = iftmp.370;
  return D.34577;
  <D.34601>:
  if (requires_rebind != 0) goto <D.34608>; else goto <D.34609>;
  <D.34608>:
  {
    struct MonoClass * klass;

    D.34582 = ginst->type_argc;
    D.34599 = (int) D.34582;
    D.34610 = gclass->is_dynamic;
    D.34611 = (int) D.34610;
    klass = mono_class_bind_generic_parameters (gtd, D.34599, argv, D.34611);
    D.34603 = type->byref;
    D.34613 = klass->byval_arg.byref;
    if (D.34603 == D.34613) goto <D.34614>; else goto <D.34615>;
    <D.34614>:
    iftmp.371 = &klass->byval_arg;
    goto <D.34616>;
    <D.34615>:
    iftmp.371 = &klass->this_arg;
    <D.34616>:
    D.34577 = iftmp.371;
    return D.34577;
  }
  <D.34609>:
  D.34577 = type;
  return D.34577;
}


verify_safe_for_managed_space (struct MonoType * type)
{
  unsigned char D.34618;
  int D.34619;
  gboolean D.34620;

  D.34618 = type->type;
  D.34619 = (int) D.34618;
  switch (D.34619) <default: <D.34621>, case 19: <D.23293>, case 30: <D.23294>>
  <D.23293>:
  <D.23294>:
  D.34620 = 1;
  return D.34620;
  <D.34621>:
  D.34620 = 1;
  return D.34620;
}


mono_method_get_object (struct MonoDomain * domain, struct MonoMethod * method, struct MonoClass * refclass)
{
  unsigned char D.34623;
  unsigned char D.34624;
  union mono_mutex_t * D.34627;
  _Bool D.34630;
  long int D.34631;
  long int D.34632;
  struct MonoGHashTable * D.34635;
  struct MonoGHashTable * D.34638;
  _Bool D.34643;
  long int D.34644;
  long int D.34645;
  struct MonoReflectionMethod * D.34648;
  _Bool D.34651;
  long int D.34652;
  long int D.34653;
  const char * D.34659;
  char D.34660;
  int D.23355;
  int iftmp.372;
  int D.23354;
  const char[6] * D.34665;
  unsigned char D.34666;
  int D.34667;
  unsigned char D.34668;
  int D.34669;
  _Bool D.34670;
  _Bool D.34671;
  _Bool D.34672;
  const unsigned char * D.34675;
  unsigned char D.34676;
  int D.34677;
  const unsigned char * D.34678;
  unsigned char D.34679;
  int D.34680;
  _Bool D.34681;
  _Bool D.34682;
  const unsigned char * D.34685;
  unsigned char D.34686;
  int D.34687;
  const unsigned char * D.34688;
  unsigned char D.34689;
  int D.34690;
  _Bool D.34691;
  _Bool D.34692;
  const unsigned char * D.34695;
  unsigned char D.34696;
  int D.34697;
  const unsigned char * D.34698;
  unsigned char D.34699;
  int D.34700;
  int D.23364;
  int iftmp.373;
  int D.23363;
  const char[7] * D.34706;
  unsigned char D.34707;
  int D.34708;
  unsigned char D.34709;
  int D.34710;
  _Bool D.34711;
  _Bool D.34712;
  _Bool D.34713;
  const unsigned char * D.34716;
  unsigned char D.34717;
  int D.34718;
  const unsigned char * D.34719;
  unsigned char D.34720;
  int D.34721;
  _Bool D.34722;
  _Bool D.34723;
  const unsigned char * D.34726;
  unsigned char D.34727;
  int D.34728;
  const unsigned char * D.34729;
  unsigned char D.34730;
  int D.34731;
  _Bool D.34732;
  _Bool D.34733;
  const unsigned char * D.34736;
  unsigned char D.34737;
  int D.34738;
  const unsigned char * D.34739;
  unsigned char D.34740;
  int D.34741;
  struct MonoClass * System_Reflection_MonoGenericCMethod.374;
  struct MonoImage * D.34746;
  struct MonoClass * System_Reflection_MonoGenericCMethod.375;
  struct MonoClass * System_Reflection_MonoGenericMethod.376;
  struct MonoClass * System_Reflection_MonoGenericMethod.377;
  struct MonoString * * D.34752;
  struct MonoString * D.34753;
  struct MonoReflectionType * * D.34754;
  struct MonoType * D.34755;
  struct MonoReflectionType * D.34756;
  _Bool D.34759;
  long int D.34760;
  long int D.34761;
  struct MonoGHashTable * D.34766;
  struct MonoMemPool * D.34769;
  _Bool D.34772;
  long int D.34773;
  long int D.34774;
  _Bool D.34781;
  long int D.34782;
  long int D.34783;
  struct MonoGHashTable * D.34788;
  _Bool D.34793;
  long int D.34794;
  long int D.34795;
  _Bool D.34800;
  long int D.34801;
  long int D.34802;
  int D.23383;
  int iftmp.378;
  int D.23382;
  unsigned char D.34812;
  int D.34813;
  _Bool D.34814;
  _Bool D.34815;
  _Bool D.34816;
  const unsigned char * D.34819;
  unsigned char D.34820;
  int D.34821;
  _Bool D.34822;
  _Bool D.34823;
  const unsigned char * D.34826;
  unsigned char D.34827;
  int D.34828;
  _Bool D.34829;
  _Bool D.34830;
  const unsigned char * D.34833;
  unsigned char D.34834;
  int D.34835;
  int D.23392;
  int iftmp.379;
  int D.23391;
  unsigned char D.34841;
  int D.34842;
  _Bool D.34843;
  _Bool D.34844;
  _Bool D.34845;
  const unsigned char * D.34848;
  unsigned char D.34849;
  int D.34850;
  _Bool D.34851;
  _Bool D.34852;
  const unsigned char * D.34855;
  unsigned char D.34856;
  int D.34857;
  _Bool D.34858;
  _Bool D.34859;
  const unsigned char * D.34862;
  unsigned char D.34863;
  int D.34864;
  struct MonoClass * System_Reflection_MonoCMethod.380;
  struct MonoClass * System_Reflection_MonoCMethod.381;
  struct MonoClass * System_Reflection_MonoMethod.382;
  struct MonoClass * System_Reflection_MonoMethod.383;
  struct MonoReflectionType * * D.34874;
  struct MonoReflectionType * D.34875;
  _Bool D.34878;
  long int D.34879;
  long int D.34880;
  struct MonoGHashTable * D.34885;
  _Bool D.34890;
  long int D.34891;
  long int D.34892;
  static struct MonoClass * System_Reflection_MonoMethod = 0B;
  static struct MonoClass * System_Reflection_MonoCMethod = 0B;
  static struct MonoClass * System_Reflection_MonoGenericMethod = 0B;
  static struct MonoClass * System_Reflection_MonoGenericCMethod = 0B;
  struct MonoClass * klass;
  struct MonoReflectionMethod * ret;

  D.34623 = BIT_FIELD_REF <*method, 8, 168>;
  D.34624 = D.34623 & 16;
  if (D.34624 != 0) goto <D.34625>; else goto <D.34626>;
  <D.34625>:
  {
    struct MonoReflectionGenericMethod * gret;

    refclass = method->klass;
    {
      struct MonoReflectionMethod * _obj;
      struct ReflectedEntry e;

      try
        {
          e.item = method;
          e.refclass = refclass;
          {
            int ret;

            D.34627 = &domain->lock.mutex;
            ret = pthread_mutex_lock (D.34627);
            if (ret != 0) goto <D.34628>; else goto <D.34629>;
            <D.34628>:
            monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
            <D.34629>:
            D.34630 = ret != 0;
            D.34631 = (long int) D.34630;
            D.34632 = __builtin_expect (D.34631, 0);
            if (D.34632 != 0) goto <D.34633>; else goto <D.34634>;
            <D.34633>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6565, "ret == 0");
            <D.34634>:
          }
          D.34635 = domain->refobject_hash;
          if (D.34635 == 0B) goto <D.34636>; else goto <D.34637>;
          <D.34636>:
          D.34638 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
          domain->refobject_hash = D.34638;
          <D.34637>:
          D.34635 = domain->refobject_hash;
          _obj = mono_g_hash_table_lookup (D.34635, &e);
          if (_obj != 0B) goto <D.34639>; else goto <D.34640>;
          <D.34639>:
          {
            int ret;

            D.34627 = &domain->lock.mutex;
            ret = pthread_mutex_unlock (D.34627);
            if (ret != 0) goto <D.34641>; else goto <D.34642>;
            <D.34641>:
            monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
            <D.34642>:
            D.34643 = ret != 0;
            D.34644 = (long int) D.34643;
            D.34645 = __builtin_expect (D.34644, 0);
            if (D.34645 != 0) goto <D.34646>; else goto <D.34647>;
            <D.34646>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6565, "ret == 0");
            <D.34647>:
          }
          D.34648 = _obj;
          return D.34648;
          <D.34640>:
          {
            int ret;

            D.34627 = &domain->lock.mutex;
            ret = pthread_mutex_unlock (D.34627);
            if (ret != 0) goto <D.34649>; else goto <D.34650>;
            <D.34649>:
            monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
            <D.34650>:
            D.34651 = ret != 0;
            D.34652 = (long int) D.34651;
            D.34653 = __builtin_expect (D.34652, 0);
            if (D.34653 != 0) goto <D.34654>; else goto <D.34655>;
            <D.34654>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6565, "ret == 0");
            <D.34655>:
          }
        }
      finally
        {
          e = {CLOBBER};
        }
    }
    D.34659 = method->name;
    D.34660 = *D.34659;
    if (D.34660 == 46) goto <D.34661>; else goto <D.34656>;
    <D.34661>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = method->name;
        D.34665 = ".ctor";
        D.34666 = MEM[(const unsigned char *)D.34665];
        D.34667 = (int) D.34666;
        D.34668 = *__s2;
        D.34669 = (int) D.34668;
        __result = D.34667 - D.34669;
        {
          D.34670 = __s2_len != 0;
          D.34671 = __result == 0;
          D.34672 = D.34670 & D.34671;
          if (D.34672 != 0) goto <D.34673>; else goto <D.34674>;
          <D.34673>:
          D.34675 = &MEM[(void *)".ctor" + 1B];
          D.34676 = *D.34675;
          D.34677 = (int) D.34676;
          D.34678 = __s2 + 1;
          D.34679 = *D.34678;
          D.34680 = (int) D.34679;
          __result = D.34677 - D.34680;
          D.34681 = __s2_len > 1;
          D.34671 = __result == 0;
          D.34682 = D.34681 & D.34671;
          if (D.34682 != 0) goto <D.34683>; else goto <D.34684>;
          <D.34683>:
          D.34685 = &MEM[(void *)".ctor" + 2B];
          D.34686 = *D.34685;
          D.34687 = (int) D.34686;
          D.34688 = __s2 + 2;
          D.34689 = *D.34688;
          D.34690 = (int) D.34689;
          __result = D.34687 - D.34690;
          D.34691 = __s2_len > 2;
          D.34671 = __result == 0;
          D.34692 = D.34691 & D.34671;
          if (D.34692 != 0) goto <D.34693>; else goto <D.34694>;
          <D.34693>:
          D.34695 = &MEM[(void *)".ctor" + 3B];
          D.34696 = *D.34695;
          D.34697 = (int) D.34696;
          D.34698 = __s2 + 3;
          D.34699 = *D.34698;
          D.34700 = (int) D.34699;
          __result = D.34697 - D.34700;
          <D.34694>:
          <D.34684>:
          <D.34674>:
        }
        D.23354 = __result;
      }
      iftmp.372 = -D.23354;
      goto <D.34701>;
      <D.34664>:
      D.34659 = method->name;
      iftmp.372 = __builtin_strcmp (D.34659, ".ctor");
      <D.34701>:
      D.23355 = iftmp.372;
    }
    if (D.23355 == 0) goto <D.34657>; else goto <D.34702>;
    <D.34702>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = method->name;
        D.34706 = ".cctor";
        D.34707 = MEM[(const unsigned char *)D.34706];
        D.34708 = (int) D.34707;
        D.34709 = *__s2;
        D.34710 = (int) D.34709;
        __result = D.34708 - D.34710;
        {
          D.34711 = __s2_len != 0;
          D.34712 = __result == 0;
          D.34713 = D.34711 & D.34712;
          if (D.34713 != 0) goto <D.34714>; else goto <D.34715>;
          <D.34714>:
          D.34716 = &MEM[(void *)".cctor" + 1B];
          D.34717 = *D.34716;
          D.34718 = (int) D.34717;
          D.34719 = __s2 + 1;
          D.34720 = *D.34719;
          D.34721 = (int) D.34720;
          __result = D.34718 - D.34721;
          D.34722 = __s2_len > 1;
          D.34712 = __result == 0;
          D.34723 = D.34722 & D.34712;
          if (D.34723 != 0) goto <D.34724>; else goto <D.34725>;
          <D.34724>:
          D.34726 = &MEM[(void *)".cctor" + 2B];
          D.34727 = *D.34726;
          D.34728 = (int) D.34727;
          D.34729 = __s2 + 2;
          D.34730 = *D.34729;
          D.34731 = (int) D.34730;
          __result = D.34728 - D.34731;
          D.34732 = __s2_len > 2;
          D.34712 = __result == 0;
          D.34733 = D.34732 & D.34712;
          if (D.34733 != 0) goto <D.34734>; else goto <D.34735>;
          <D.34734>:
          D.34736 = &MEM[(void *)".cctor" + 3B];
          D.34737 = *D.34736;
          D.34738 = (int) D.34737;
          D.34739 = __s2 + 3;
          D.34740 = *D.34739;
          D.34741 = (int) D.34740;
          __result = D.34738 - D.34741;
          <D.34735>:
          <D.34725>:
          <D.34715>:
        }
        D.23363 = __result;
      }
      iftmp.373 = -D.23363;
      goto <D.34742>;
      <D.34705>:
      D.34659 = method->name;
      iftmp.373 = __builtin_strcmp (D.34659, ".cctor");
      <D.34742>:
      D.23364 = iftmp.373;
    }
    if (D.23364 == 0) goto <D.34657>; else goto <D.34656>;
    <D.34657>:
    System_Reflection_MonoGenericCMethod.374 = System_Reflection_MonoGenericCMethod;
    if (System_Reflection_MonoGenericCMethod.374 == 0B) goto <D.34744>; else goto <D.34745>;
    <D.34744>:
    D.34746 = mono_defaults.corlib;
    System_Reflection_MonoGenericCMethod.375 = mono_class_from_name (D.34746, "System.Reflection", "MonoGenericCMethod");
    System_Reflection_MonoGenericCMethod = System_Reflection_MonoGenericCMethod.375;
    <D.34745>:
    klass = System_Reflection_MonoGenericCMethod;
    goto <D.34658>;
    <D.34656>:
    System_Reflection_MonoGenericMethod.376 = System_Reflection_MonoGenericMethod;
    if (System_Reflection_MonoGenericMethod.376 == 0B) goto <D.34749>; else goto <D.34750>;
    <D.34749>:
    D.34746 = mono_defaults.corlib;
    System_Reflection_MonoGenericMethod.377 = mono_class_from_name (D.34746, "System.Reflection", "MonoGenericMethod");
    System_Reflection_MonoGenericMethod = System_Reflection_MonoGenericMethod.377;
    <D.34750>:
    klass = System_Reflection_MonoGenericMethod;
    <D.34658>:
    gret = mono_object_new (domain, klass);
    gret->method.method = method;
    D.34752 = &gret->method.name;
    D.34659 = method->name;
    D.34753 = mono_string_new (domain, D.34659);
    mono_gc_wbarrier_set_field (gret, D.34752, D.34753);
    D.34754 = &gret->method.reftype;
    D.34755 = &refclass->byval_arg;
    D.34756 = mono_type_get_object (domain, D.34755);
    mono_gc_wbarrier_set_field (gret, D.34754, D.34756);
    {
      struct MonoReflectionMethod * _obj;
      struct ReflectedEntry pe;

      try
        {
          pe.item = method;
          pe.refclass = refclass;
          {
            int ret;

            D.34627 = &domain->lock.mutex;
            ret = pthread_mutex_lock (D.34627);
            if (ret != 0) goto <D.34757>; else goto <D.34758>;
            <D.34757>:
            monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
            <D.34758>:
            D.34759 = ret != 0;
            D.34760 = (long int) D.34759;
            D.34761 = __builtin_expect (D.34760, 0);
            if (D.34761 != 0) goto <D.34762>; else goto <D.34763>;
            <D.34762>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6579, "ret == 0");
            <D.34763>:
          }
          D.34635 = domain->refobject_hash;
          if (D.34635 == 0B) goto <D.34764>; else goto <D.34765>;
          <D.34764>:
          D.34766 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
          domain->refobject_hash = D.34766;
          <D.34765>:
          D.34635 = domain->refobject_hash;
          _obj = mono_g_hash_table_lookup (D.34635, &pe);
          if (_obj == 0B) goto <D.34767>; else goto <D.34768>;
          <D.34767>:
          {
            struct ReflectedEntry * e;

            D.34769 = domain->mp;
            e = mono_mempool_alloc (D.34769, 8);
            e->item = method;
            e->refclass = refclass;
            D.34635 = domain->refobject_hash;
            mono_g_hash_table_insert (D.34635, e, gret);
            _obj = gret;
          }
          <D.34768>:
          {
            int ret;

            D.34627 = &domain->lock.mutex;
            ret = pthread_mutex_unlock (D.34627);
            if (ret != 0) goto <D.34770>; else goto <D.34771>;
            <D.34770>:
            monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
            <D.34771>:
            D.34772 = ret != 0;
            D.34773 = (long int) D.34772;
            D.34774 = __builtin_expect (D.34773, 0);
            if (D.34774 != 0) goto <D.34775>; else goto <D.34776>;
            <D.34775>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6579, "ret == 0");
            <D.34776>:
          }
          D.34648 = _obj;
          return D.34648;
        }
      finally
        {
          pe = {CLOBBER};
        }
    }
  }
  <D.34626>:
  if (refclass == 0B) goto <D.34777>; else goto <D.34778>;
  <D.34777>:
  refclass = method->klass;
  <D.34778>:
  {
    struct MonoReflectionMethod * _obj;
    struct ReflectedEntry e;

    try
      {
        e.item = method;
        e.refclass = refclass;
        {
          int ret;

          D.34627 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.34627);
          if (ret != 0) goto <D.34779>; else goto <D.34780>;
          <D.34779>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.34780>:
          D.34781 = ret != 0;
          D.34782 = (long int) D.34781;
          D.34783 = __builtin_expect (D.34782, 0);
          if (D.34783 != 0) goto <D.34784>; else goto <D.34785>;
          <D.34784>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6585, "ret == 0");
          <D.34785>:
        }
        D.34635 = domain->refobject_hash;
        if (D.34635 == 0B) goto <D.34786>; else goto <D.34787>;
        <D.34786>:
        D.34788 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.34788;
        <D.34787>:
        D.34635 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.34635, &e);
        if (_obj != 0B) goto <D.34789>; else goto <D.34790>;
        <D.34789>:
        {
          int ret;

          D.34627 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34627);
          if (ret != 0) goto <D.34791>; else goto <D.34792>;
          <D.34791>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34792>:
          D.34793 = ret != 0;
          D.34794 = (long int) D.34793;
          D.34795 = __builtin_expect (D.34794, 0);
          if (D.34795 != 0) goto <D.34796>; else goto <D.34797>;
          <D.34796>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6585, "ret == 0");
          <D.34797>:
        }
        D.34648 = _obj;
        return D.34648;
        <D.34790>:
        {
          int ret;

          D.34627 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34627);
          if (ret != 0) goto <D.34798>; else goto <D.34799>;
          <D.34798>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34799>:
          D.34800 = ret != 0;
          D.34801 = (long int) D.34800;
          D.34802 = __builtin_expect (D.34801, 0);
          if (D.34802 != 0) goto <D.34803>; else goto <D.34804>;
          <D.34803>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6585, "ret == 0");
          <D.34804>:
        }
      }
    finally
      {
        e = {CLOBBER};
      }
  }
  D.34659 = method->name;
  D.34660 = *D.34659;
  if (D.34660 == 46) goto <D.34808>; else goto <D.34805>;
  <D.34808>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = method->name;
      D.34665 = ".ctor";
      D.34666 = MEM[(const unsigned char *)D.34665];
      D.34667 = (int) D.34666;
      D.34812 = *__s2;
      D.34813 = (int) D.34812;
      __result = D.34667 - D.34813;
      {
        D.34814 = __s2_len != 0;
        D.34815 = __result == 0;
        D.34816 = D.34814 & D.34815;
        if (D.34816 != 0) goto <D.34817>; else goto <D.34818>;
        <D.34817>:
        D.34675 = &MEM[(void *)".ctor" + 1B];
        D.34676 = *D.34675;
        D.34677 = (int) D.34676;
        D.34819 = __s2 + 1;
        D.34820 = *D.34819;
        D.34821 = (int) D.34820;
        __result = D.34677 - D.34821;
        D.34822 = __s2_len > 1;
        D.34815 = __result == 0;
        D.34823 = D.34822 & D.34815;
        if (D.34823 != 0) goto <D.34824>; else goto <D.34825>;
        <D.34824>:
        D.34685 = &MEM[(void *)".ctor" + 2B];
        D.34686 = *D.34685;
        D.34687 = (int) D.34686;
        D.34826 = __s2 + 2;
        D.34827 = *D.34826;
        D.34828 = (int) D.34827;
        __result = D.34687 - D.34828;
        D.34829 = __s2_len > 2;
        D.34815 = __result == 0;
        D.34830 = D.34829 & D.34815;
        if (D.34830 != 0) goto <D.34831>; else goto <D.34832>;
        <D.34831>:
        D.34695 = &MEM[(void *)".ctor" + 3B];
        D.34696 = *D.34695;
        D.34697 = (int) D.34696;
        D.34833 = __s2 + 3;
        D.34834 = *D.34833;
        D.34835 = (int) D.34834;
        __result = D.34697 - D.34835;
        <D.34832>:
        <D.34825>:
        <D.34818>:
      }
      D.23382 = __result;
    }
    iftmp.378 = -D.23382;
    goto <D.34836>;
    <D.34811>:
    D.34659 = method->name;
    iftmp.378 = __builtin_strcmp (D.34659, ".ctor");
    <D.34836>:
    D.23383 = iftmp.378;
  }
  if (D.23383 == 0) goto <D.34806>; else goto <D.34837>;
  <D.34837>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = method->name;
      D.34706 = ".cctor";
      D.34707 = MEM[(const unsigned char *)D.34706];
      D.34708 = (int) D.34707;
      D.34841 = *__s2;
      D.34842 = (int) D.34841;
      __result = D.34708 - D.34842;
      {
        D.34843 = __s2_len != 0;
        D.34844 = __result == 0;
        D.34845 = D.34843 & D.34844;
        if (D.34845 != 0) goto <D.34846>; else goto <D.34847>;
        <D.34846>:
        D.34716 = &MEM[(void *)".cctor" + 1B];
        D.34717 = *D.34716;
        D.34718 = (int) D.34717;
        D.34848 = __s2 + 1;
        D.34849 = *D.34848;
        D.34850 = (int) D.34849;
        __result = D.34718 - D.34850;
        D.34851 = __s2_len > 1;
        D.34844 = __result == 0;
        D.34852 = D.34851 & D.34844;
        if (D.34852 != 0) goto <D.34853>; else goto <D.34854>;
        <D.34853>:
        D.34726 = &MEM[(void *)".cctor" + 2B];
        D.34727 = *D.34726;
        D.34728 = (int) D.34727;
        D.34855 = __s2 + 2;
        D.34856 = *D.34855;
        D.34857 = (int) D.34856;
        __result = D.34728 - D.34857;
        D.34858 = __s2_len > 2;
        D.34844 = __result == 0;
        D.34859 = D.34858 & D.34844;
        if (D.34859 != 0) goto <D.34860>; else goto <D.34861>;
        <D.34860>:
        D.34736 = &MEM[(void *)".cctor" + 3B];
        D.34737 = *D.34736;
        D.34738 = (int) D.34737;
        D.34862 = __s2 + 3;
        D.34863 = *D.34862;
        D.34864 = (int) D.34863;
        __result = D.34738 - D.34864;
        <D.34861>:
        <D.34854>:
        <D.34847>:
      }
      D.23391 = __result;
    }
    iftmp.379 = -D.23391;
    goto <D.34865>;
    <D.34840>:
    D.34659 = method->name;
    iftmp.379 = __builtin_strcmp (D.34659, ".cctor");
    <D.34865>:
    D.23392 = iftmp.379;
  }
  if (D.23392 == 0) goto <D.34806>; else goto <D.34805>;
  <D.34806>:
  System_Reflection_MonoCMethod.380 = System_Reflection_MonoCMethod;
  if (System_Reflection_MonoCMethod.380 == 0B) goto <D.34867>; else goto <D.34868>;
  <D.34867>:
  D.34746 = mono_defaults.corlib;
  System_Reflection_MonoCMethod.381 = mono_class_from_name (D.34746, "System.Reflection", "MonoCMethod");
  System_Reflection_MonoCMethod = System_Reflection_MonoCMethod.381;
  <D.34868>:
  klass = System_Reflection_MonoCMethod;
  goto <D.34807>;
  <D.34805>:
  System_Reflection_MonoMethod.382 = System_Reflection_MonoMethod;
  if (System_Reflection_MonoMethod.382 == 0B) goto <D.34871>; else goto <D.34872>;
  <D.34871>:
  D.34746 = mono_defaults.corlib;
  System_Reflection_MonoMethod.383 = mono_class_from_name (D.34746, "System.Reflection", "MonoMethod");
  System_Reflection_MonoMethod = System_Reflection_MonoMethod.383;
  <D.34872>:
  klass = System_Reflection_MonoMethod;
  <D.34807>:
  ret = mono_object_new (domain, klass);
  ret->method = method;
  D.34874 = &ret->reftype;
  D.34755 = &refclass->byval_arg;
  D.34875 = mono_type_get_object (domain, D.34755);
  mono_gc_wbarrier_set_field (ret, D.34874, D.34875);
  {
    struct MonoReflectionMethod * _obj;
    struct ReflectedEntry pe;

    try
      {
        pe.item = method;
        pe.refclass = refclass;
        {
          int ret;

          D.34627 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.34627);
          if (ret != 0) goto <D.34876>; else goto <D.34877>;
          <D.34876>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.34877>:
          D.34878 = ret != 0;
          D.34879 = (long int) D.34878;
          D.34880 = __builtin_expect (D.34879, 0);
          if (D.34880 != 0) goto <D.34881>; else goto <D.34882>;
          <D.34881>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6599, "ret == 0");
          <D.34882>:
        }
        D.34635 = domain->refobject_hash;
        if (D.34635 == 0B) goto <D.34883>; else goto <D.34884>;
        <D.34883>:
        D.34885 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.34885;
        <D.34884>:
        D.34635 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.34635, &pe);
        if (_obj == 0B) goto <D.34886>; else goto <D.34887>;
        <D.34886>:
        {
          struct ReflectedEntry * e;

          D.34769 = domain->mp;
          e = mono_mempool_alloc (D.34769, 8);
          e->item = method;
          e->refclass = refclass;
          D.34635 = domain->refobject_hash;
          mono_g_hash_table_insert (D.34635, e, ret);
          _obj = ret;
        }
        <D.34887>:
        {
          int ret;

          D.34627 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34627);
          if (ret != 0) goto <D.34888>; else goto <D.34889>;
          <D.34888>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34889>:
          D.34890 = ret != 0;
          D.34891 = (long int) D.34890;
          D.34892 = __builtin_expect (D.34891, 0);
          if (D.34892 != 0) goto <D.34893>; else goto <D.34894>;
          <D.34893>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6599, "ret == 0");
          <D.34894>:
        }
        D.34648 = _obj;
        return D.34648;
      }
    finally
      {
        pe = {CLOBBER};
      }
  }
}


mono_method_clear_object (struct MonoDomain * domain, struct MonoMethod * method)
{
  unsigned char D.34902;
  unsigned char D.34903;
  _Bool D.34904;
  long int D.34905;
  long int D.34906;
  struct MonoMethodSignature * * D.34909;
  struct MonoClass * klass;

  D.34902 = BIT_FIELD_REF <*method, 8, 168>;
  D.34903 = D.34902 & 2;
  D.34904 = D.34903 == 0;
  D.34905 = (long int) D.34904;
  D.34906 = __builtin_expect (D.34905, 0);
  if (D.34906 != 0) goto <D.34907>; else goto <D.34908>;
  <D.34907>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6611, "method->dynamic");
  <D.34908>:
  klass = method->klass;
  goto <D.23404>;
  <D.23403>:
  clear_cached_object (domain, method, klass);
  klass = klass->parent;
  <D.23404>:
  if (klass != 0B) goto <D.23403>; else goto <D.23405>;
  <D.23405>:
  D.34909 = &method->signature;
  clear_cached_object (domain, D.34909, 0B);
  klass = method->klass;
  goto <D.23407>;
  <D.23406>:
  D.34909 = &method->signature;
  clear_cached_object (domain, D.34909, klass);
  klass = klass->parent;
  <D.23407>:
  if (klass != 0B) goto <D.23406>; else goto <D.23408>;
  <D.23408>:
}


clear_cached_object (struct MonoDomain * domain, void * o, struct MonoClass * klass)
{
  union mono_mutex_t * D.34910;
  _Bool D.34913;
  long int D.34914;
  long int D.34915;
  struct MonoGHashTable * D.34918;
  int D.34921;
  _Bool D.34926;
  long int D.34927;
  long int D.34928;

  {
    int ret;

    D.34910 = &domain->lock.mutex;
    ret = pthread_mutex_lock (D.34910);
    if (ret != 0) goto <D.34911>; else goto <D.34912>;
    <D.34911>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.34912>:
    D.34913 = ret != 0;
    D.34914 = (long int) D.34913;
    D.34915 = __builtin_expect (D.34914, 0);
    if (D.34915 != 0) goto <D.34916>; else goto <D.34917>;
    <D.34916>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6127, "ret == 0");
    <D.34917>:
  }
  D.34918 = domain->refobject_hash;
  if (D.34918 != 0B) goto <D.34919>; else goto <D.34920>;
  <D.34919>:
  {
    struct ReflectedEntry pe;
    void * orig_pe;
    void * orig_value;

    try
      {
        pe.item = o;
        pe.refclass = klass;
        D.34918 = domain->refobject_hash;
        D.34921 = mono_g_hash_table_lookup_extended (D.34918, &pe, &orig_pe, &orig_value);
        if (D.34921 != 0) goto <D.34922>; else goto <D.34923>;
        <D.34922>:
        D.34918 = domain->refobject_hash;
        mono_g_hash_table_remove (D.34918, &pe);
        <D.34923>:
      }
    finally
      {
        pe = {CLOBBER};
        orig_pe = {CLOBBER};
        orig_value = {CLOBBER};
      }
  }
  <D.34920>:
  {
    int ret;

    D.34910 = &domain->lock.mutex;
    ret = pthread_mutex_unlock (D.34910);
    if (ret != 0) goto <D.34924>; else goto <D.34925>;
    <D.34924>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.34925>:
    D.34926 = ret != 0;
    D.34927 = (long int) D.34926;
    D.34928 = __builtin_expect (D.34927, 0);
    if (D.34928 != 0) goto <D.34929>; else goto <D.34930>;
    <D.34929>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6139, "ret == 0");
    <D.34930>:
  }
}


mono_field_get_object (struct MonoDomain * domain, struct MonoClass * klass, struct MonoClassField * field)
{
  union mono_mutex_t * D.34931;
  _Bool D.34934;
  long int D.34935;
  long int D.34936;
  struct MonoGHashTable * D.34939;
  struct MonoGHashTable * D.34942;
  _Bool D.34947;
  long int D.34948;
  long int D.34949;
  struct MonoReflectionField * D.34952;
  _Bool D.34955;
  long int D.34956;
  long int D.34957;
  struct MonoClass * monofield_klass.384;
  struct MonoImage * D.34963;
  struct MonoClass * monofield_klass.385;
  struct MonoString * * D.34965;
  const char * D.34966;
  struct MonoString * D.34967;
  int D.34968;
  struct MonoType * D.34971;
  short unsigned int D.34972;
  unsigned int D.34973;
  struct MonoReflectionType * * D.34974;
  struct MonoType * D.34975;
  struct MonoReflectionType * D.34976;
  struct MonoReflectionType * D.34980;
  unsigned int D.34981;
  _Bool D.34984;
  long int D.34985;
  long int D.34986;
  struct MonoGHashTable * D.34991;
  struct MonoMemPool * D.34994;
  _Bool D.34997;
  long int D.34998;
  long int D.34999;
  struct MonoReflectionField * res;
  static struct MonoClass * monofield_klass;

  {
    struct MonoReflectionField * _obj;
    struct ReflectedEntry e;

    try
      {
        e.item = field;
        e.refclass = klass;
        {
          int ret;

          D.34931 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.34931);
          if (ret != 0) goto <D.34932>; else goto <D.34933>;
          <D.34932>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.34933>:
          D.34934 = ret != 0;
          D.34935 = (long int) D.34934;
          D.34936 = __builtin_expect (D.34935, 0);
          if (D.34936 != 0) goto <D.34937>; else goto <D.34938>;
          <D.34937>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6642, "ret == 0");
          <D.34938>:
        }
        D.34939 = domain->refobject_hash;
        if (D.34939 == 0B) goto <D.34940>; else goto <D.34941>;
        <D.34940>:
        D.34942 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.34942;
        <D.34941>:
        D.34939 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.34939, &e);
        if (_obj != 0B) goto <D.34943>; else goto <D.34944>;
        <D.34943>:
        {
          int ret;

          D.34931 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34931);
          if (ret != 0) goto <D.34945>; else goto <D.34946>;
          <D.34945>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34946>:
          D.34947 = ret != 0;
          D.34948 = (long int) D.34947;
          D.34949 = __builtin_expect (D.34948, 0);
          if (D.34949 != 0) goto <D.34950>; else goto <D.34951>;
          <D.34950>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6642, "ret == 0");
          <D.34951>:
        }
        D.34952 = _obj;
        return D.34952;
        <D.34944>:
        {
          int ret;

          D.34931 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34931);
          if (ret != 0) goto <D.34953>; else goto <D.34954>;
          <D.34953>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34954>:
          D.34955 = ret != 0;
          D.34956 = (long int) D.34955;
          D.34957 = __builtin_expect (D.34956, 0);
          if (D.34957 != 0) goto <D.34958>; else goto <D.34959>;
          <D.34958>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6642, "ret == 0");
          <D.34959>:
        }
      }
    finally
      {
        e = {CLOBBER};
      }
  }
  monofield_klass.384 = monofield_klass;
  if (monofield_klass.384 == 0B) goto <D.34961>; else goto <D.34962>;
  <D.34961>:
  D.34963 = mono_defaults.corlib;
  monofield_klass.385 = mono_class_from_name (D.34963, "System.Reflection", "MonoField");
  monofield_klass = monofield_klass.385;
  <D.34962>:
  monofield_klass.384 = monofield_klass;
  res = mono_object_new (domain, monofield_klass.384);
  res->klass = klass;
  res->field = field;
  D.34965 = &res->name;
  D.34966 = mono_field_get_name (field);
  D.34967 = mono_string_new (domain, D.34966);
  mono_gc_wbarrier_set_field (res, D.34965, D.34967);
  D.34968 = is_field_on_inst (field);
  if (D.34968 != 0) goto <D.34969>; else goto <D.34970>;
  <D.34969>:
  D.34971 = get_field_on_inst_generic_type (field);
  D.34972 = D.34971->attrs;
  D.34973 = (unsigned int) D.34972;
  res->attrs = D.34973;
  D.34974 = &res->type;
  D.34975 = field->type;
  D.34976 = mono_type_get_object (domain, D.34975);
  mono_gc_wbarrier_set_field (res, D.34974, D.34976);
  goto <D.34977>;
  <D.34970>:
  D.34975 = field->type;
  if (D.34975 != 0B) goto <D.34978>; else goto <D.34979>;
  <D.34978>:
  D.34974 = &res->type;
  D.34975 = field->type;
  D.34980 = mono_type_get_object (domain, D.34975);
  mono_gc_wbarrier_set_field (res, D.34974, D.34980);
  <D.34979>:
  D.34981 = mono_field_get_flags (field);
  res->attrs = D.34981;
  <D.34977>:
  {
    struct MonoReflectionField * _obj;
    struct ReflectedEntry pe;

    try
      {
        pe.item = field;
        pe.refclass = klass;
        {
          int ret;

          D.34931 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.34931);
          if (ret != 0) goto <D.34982>; else goto <D.34983>;
          <D.34982>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.34983>:
          D.34984 = ret != 0;
          D.34985 = (long int) D.34984;
          D.34986 = __builtin_expect (D.34985, 0);
          if (D.34986 != 0) goto <D.34987>; else goto <D.34988>;
          <D.34987>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6658, "ret == 0");
          <D.34988>:
        }
        D.34939 = domain->refobject_hash;
        if (D.34939 == 0B) goto <D.34989>; else goto <D.34990>;
        <D.34989>:
        D.34991 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.34991;
        <D.34990>:
        D.34939 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.34939, &pe);
        if (_obj == 0B) goto <D.34992>; else goto <D.34993>;
        <D.34992>:
        {
          struct ReflectedEntry * e;

          D.34994 = domain->mp;
          e = mono_mempool_alloc (D.34994, 8);
          e->item = field;
          e->refclass = klass;
          D.34939 = domain->refobject_hash;
          mono_g_hash_table_insert (D.34939, e, res);
          _obj = res;
        }
        <D.34993>:
        {
          int ret;

          D.34931 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.34931);
          if (ret != 0) goto <D.34995>; else goto <D.34996>;
          <D.34995>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.34996>:
          D.34997 = ret != 0;
          D.34998 = (long int) D.34997;
          D.34999 = __builtin_expect (D.34998, 0);
          if (D.34999 != 0) goto <D.35000>; else goto <D.35001>;
          <D.35000>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6658, "ret == 0");
          <D.35001>:
        }
        D.34952 = _obj;
        return D.34952;
      }
    finally
      {
        pe = {CLOBBER};
      }
  }
}


mono_property_get_object (struct MonoDomain * domain, struct MonoClass * klass, struct MonoProperty * property)
{
  union mono_mutex_t * D.35006;
  _Bool D.35009;
  long int D.35010;
  long int D.35011;
  struct MonoGHashTable * D.35014;
  struct MonoGHashTable * D.35017;
  _Bool D.35022;
  long int D.35023;
  long int D.35024;
  struct MonoReflectionProperty * D.35027;
  _Bool D.35030;
  long int D.35031;
  long int D.35032;
  struct MonoClass * monoproperty_klass.386;
  struct MonoImage * D.35038;
  struct MonoClass * monoproperty_klass.387;
  _Bool D.35042;
  long int D.35043;
  long int D.35044;
  struct MonoGHashTable * D.35049;
  struct MonoMemPool * D.35052;
  _Bool D.35055;
  long int D.35056;
  long int D.35057;
  struct MonoReflectionProperty * res;
  static struct MonoClass * monoproperty_klass;

  {
    struct MonoReflectionProperty * _obj;
    struct ReflectedEntry e;

    try
      {
        e.item = property;
        e.refclass = klass;
        {
          int ret;

          D.35006 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.35006);
          if (ret != 0) goto <D.35007>; else goto <D.35008>;
          <D.35007>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.35008>:
          D.35009 = ret != 0;
          D.35010 = (long int) D.35009;
          D.35011 = __builtin_expect (D.35010, 0);
          if (D.35011 != 0) goto <D.35012>; else goto <D.35013>;
          <D.35012>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6676, "ret == 0");
          <D.35013>:
        }
        D.35014 = domain->refobject_hash;
        if (D.35014 == 0B) goto <D.35015>; else goto <D.35016>;
        <D.35015>:
        D.35017 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.35017;
        <D.35016>:
        D.35014 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.35014, &e);
        if (_obj != 0B) goto <D.35018>; else goto <D.35019>;
        <D.35018>:
        {
          int ret;

          D.35006 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.35006);
          if (ret != 0) goto <D.35020>; else goto <D.35021>;
          <D.35020>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.35021>:
          D.35022 = ret != 0;
          D.35023 = (long int) D.35022;
          D.35024 = __builtin_expect (D.35023, 0);
          if (D.35024 != 0) goto <D.35025>; else goto <D.35026>;
          <D.35025>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6676, "ret == 0");
          <D.35026>:
        }
        D.35027 = _obj;
        return D.35027;
        <D.35019>:
        {
          int ret;

          D.35006 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.35006);
          if (ret != 0) goto <D.35028>; else goto <D.35029>;
          <D.35028>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.35029>:
          D.35030 = ret != 0;
          D.35031 = (long int) D.35030;
          D.35032 = __builtin_expect (D.35031, 0);
          if (D.35032 != 0) goto <D.35033>; else goto <D.35034>;
          <D.35033>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6676, "ret == 0");
          <D.35034>:
        }
      }
    finally
      {
        e = {CLOBBER};
      }
  }
  monoproperty_klass.386 = monoproperty_klass;
  if (monoproperty_klass.386 == 0B) goto <D.35036>; else goto <D.35037>;
  <D.35036>:
  D.35038 = mono_defaults.corlib;
  monoproperty_klass.387 = mono_class_from_name (D.35038, "System.Reflection", "MonoProperty");
  monoproperty_klass = monoproperty_klass.387;
  <D.35037>:
  monoproperty_klass.386 = monoproperty_klass;
  res = mono_object_new (domain, monoproperty_klass.386);
  res->klass = klass;
  res->property = property;
  {
    struct MonoReflectionProperty * _obj;
    struct ReflectedEntry pe;

    try
      {
        pe.item = property;
        pe.refclass = klass;
        {
          int ret;

          D.35006 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.35006);
          if (ret != 0) goto <D.35040>; else goto <D.35041>;
          <D.35040>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.35041>:
          D.35042 = ret != 0;
          D.35043 = (long int) D.35042;
          D.35044 = __builtin_expect (D.35043, 0);
          if (D.35044 != 0) goto <D.35045>; else goto <D.35046>;
          <D.35045>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6682, "ret == 0");
          <D.35046>:
        }
        D.35014 = domain->refobject_hash;
        if (D.35014 == 0B) goto <D.35047>; else goto <D.35048>;
        <D.35047>:
        D.35049 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.35049;
        <D.35048>:
        D.35014 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.35014, &pe);
        if (_obj == 0B) goto <D.35050>; else goto <D.35051>;
        <D.35050>:
        {
          struct ReflectedEntry * e;

          D.35052 = domain->mp;
          e = mono_mempool_alloc (D.35052, 8);
          e->item = property;
          e->refclass = klass;
          D.35014 = domain->refobject_hash;
          mono_g_hash_table_insert (D.35014, e, res);
          _obj = res;
        }
        <D.35051>:
        {
          int ret;

          D.35006 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.35006);
          if (ret != 0) goto <D.35053>; else goto <D.35054>;
          <D.35053>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.35054>:
          D.35055 = ret != 0;
          D.35056 = (long int) D.35055;
          D.35057 = __builtin_expect (D.35056, 0);
          if (D.35057 != 0) goto <D.35058>; else goto <D.35059>;
          <D.35058>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6682, "ret == 0");
          <D.35059>:
        }
        D.35027 = _obj;
        return D.35027;
      }
    finally
      {
        pe = {CLOBBER};
      }
  }
}


mono_event_get_object (struct MonoDomain * domain, struct MonoClass * klass, struct MonoEvent * event)
{
  union mono_mutex_t * D.35064;
  _Bool D.35067;
  long int D.35068;
  long int D.35069;
  struct MonoGHashTable * D.35072;
  struct MonoGHashTable * D.35075;
  _Bool D.35080;
  long int D.35081;
  long int D.35082;
  struct MonoReflectionEvent * D.35085;
  _Bool D.35088;
  long int D.35089;
  long int D.35090;
  struct MonoClass * monoevent_klass.388;
  struct MonoImage * D.35096;
  struct MonoClass * monoevent_klass.389;
  _Bool D.35100;
  long int D.35101;
  long int D.35102;
  struct MonoGHashTable * D.35107;
  struct MonoMemPool * D.35110;
  _Bool D.35113;
  long int D.35114;
  long int D.35115;
  struct MonoReflectionEvent * res;
  struct MonoReflectionMonoEvent * mono_event;
  static struct MonoClass * monoevent_klass;

  {
    struct MonoReflectionEvent * _obj;
    struct ReflectedEntry e;

    try
      {
        e.item = event;
        e.refclass = klass;
        {
          int ret;

          D.35064 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.35064);
          if (ret != 0) goto <D.35065>; else goto <D.35066>;
          <D.35065>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.35066>:
          D.35067 = ret != 0;
          D.35068 = (long int) D.35067;
          D.35069 = __builtin_expect (D.35068, 0);
          if (D.35069 != 0) goto <D.35070>; else goto <D.35071>;
          <D.35070>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6701, "ret == 0");
          <D.35071>:
        }
        D.35072 = domain->refobject_hash;
        if (D.35072 == 0B) goto <D.35073>; else goto <D.35074>;
        <D.35073>:
        D.35075 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.35075;
        <D.35074>:
        D.35072 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.35072, &e);
        if (_obj != 0B) goto <D.35076>; else goto <D.35077>;
        <D.35076>:
        {
          int ret;

          D.35064 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.35064);
          if (ret != 0) goto <D.35078>; else goto <D.35079>;
          <D.35078>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.35079>:
          D.35080 = ret != 0;
          D.35081 = (long int) D.35080;
          D.35082 = __builtin_expect (D.35081, 0);
          if (D.35082 != 0) goto <D.35083>; else goto <D.35084>;
          <D.35083>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6701, "ret == 0");
          <D.35084>:
        }
        D.35085 = _obj;
        return D.35085;
        <D.35077>:
        {
          int ret;

          D.35064 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.35064);
          if (ret != 0) goto <D.35086>; else goto <D.35087>;
          <D.35086>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.35087>:
          D.35088 = ret != 0;
          D.35089 = (long int) D.35088;
          D.35090 = __builtin_expect (D.35089, 0);
          if (D.35090 != 0) goto <D.35091>; else goto <D.35092>;
          <D.35091>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6701, "ret == 0");
          <D.35092>:
        }
      }
    finally
      {
        e = {CLOBBER};
      }
  }
  monoevent_klass.388 = monoevent_klass;
  if (monoevent_klass.388 == 0B) goto <D.35094>; else goto <D.35095>;
  <D.35094>:
  D.35096 = mono_defaults.corlib;
  monoevent_klass.389 = mono_class_from_name (D.35096, "System.Reflection", "MonoEvent");
  monoevent_klass = monoevent_klass.389;
  <D.35095>:
  monoevent_klass.388 = monoevent_klass;
  mono_event = mono_object_new (domain, monoevent_klass.388);
  mono_event->klass = klass;
  mono_event->event = event;
  res = mono_event;
  {
    struct MonoReflectionEvent * _obj;
    struct ReflectedEntry pe;

    try
      {
        pe.item = event;
        pe.refclass = klass;
        {
          int ret;

          D.35064 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.35064);
          if (ret != 0) goto <D.35098>; else goto <D.35099>;
          <D.35098>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.35099>:
          D.35100 = ret != 0;
          D.35101 = (long int) D.35100;
          D.35102 = __builtin_expect (D.35101, 0);
          if (D.35102 != 0) goto <D.35103>; else goto <D.35104>;
          <D.35103>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6708, "ret == 0");
          <D.35104>:
        }
        D.35072 = domain->refobject_hash;
        if (D.35072 == 0B) goto <D.35105>; else goto <D.35106>;
        <D.35105>:
        D.35107 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.35107;
        <D.35106>:
        D.35072 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.35072, &pe);
        if (_obj == 0B) goto <D.35108>; else goto <D.35109>;
        <D.35108>:
        {
          struct ReflectedEntry * e;

          D.35110 = domain->mp;
          e = mono_mempool_alloc (D.35110, 8);
          e->item = event;
          e->refclass = klass;
          D.35072 = domain->refobject_hash;
          mono_g_hash_table_insert (D.35072, e, res);
          _obj = res;
        }
        <D.35109>:
        {
          int ret;

          D.35064 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.35064);
          if (ret != 0) goto <D.35111>; else goto <D.35112>;
          <D.35111>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.35112>:
          D.35113 = ret != 0;
          D.35114 = (long int) D.35113;
          D.35115 = __builtin_expect (D.35114, 0);
          if (D.35115 != 0) goto <D.35116>; else goto <D.35117>;
          <D.35116>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6708, "ret == 0");
          <D.35117>:
        }
        D.35085 = _obj;
        return D.35085;
      }
    finally
      {
        pe = {CLOBBER};
      }
  }
}


mono_param_get_objects_internal (struct MonoDomain * domain, struct MonoMethod * method, struct MonoClass * refclass)
{
  struct MonoClass * System_Reflection_ParameterInfo_array.390;
  struct MonoImage * D.35125;
  int D.35128;
  short unsigned int D.35131;
  struct MonoArray * D.35134;
  struct MonoVTable * D.35135;
  struct MonoMethodSignature * * D.35136;
  union mono_mutex_t * D.35137;
  _Bool D.35140;
  long int D.35141;
  long int D.35142;
  struct MonoGHashTable * D.35145;
  struct MonoGHashTable * D.35148;
  _Bool D.35153;
  long int D.35154;
  long int D.35155;
  _Bool D.35160;
  long int D.35161;
  long int D.35162;
  unsigned int D.35165;
  unsigned int D.35166;
  int D.35167;
  int D.35168;
  unsigned int D.35169;
  unsigned int D.35170;
  struct MonoVTable * D.35171;
  unsigned int D.35172;
  struct MonoClass * System_Reflection_ParameterInfo.391;
  struct MonoReflectionType * * D.35174;
  struct MonoType * D.35175;
  struct MonoReflectionType * D.35176;
  struct MonoObject * * D.35177;
  struct MonoString * * D.35178;
  unsigned int i.392;
  unsigned int D.35180;
  char * * D.35181;
  char * D.35182;
  struct MonoString * D.35183;
  short unsigned int D.35184;
  unsigned int D.35185;
  unsigned int D.35186;
  unsigned int D.35187;
  unsigned int D.35190;
  struct MonoObject * * D.35193;
  struct MonoObject * D.35194;
  struct MonoObject * D.35196;
  guint32 * D.35202;
  unsigned int D.35203;
  unsigned char D.35204;
  struct MonoClass * D.35207;
  unsigned char D.35211;
  struct MonoClass * D.35213;
  unsigned char D.35214;
  unsigned char D.35215;
  struct MonoClass * D.35217;
  struct MonoClass * D.35218;
  char * * D.35219;
  char * D.35220;
  struct MonoObject * D.35221;
  struct MonoObject * D.35224;
  struct MonoObject * D.35229;
  struct MonoObject * D.35231;
  sizetype i.393;
  sizetype D.35233;
  sizetype D.35234;
  struct MonoMarshalSpec * * D.35235;
  struct MonoMarshalSpec * D.35236;
  struct MonoObject * * D.35239;
  struct MonoClass * D.35240;
  struct MonoReflectionMarshalAsAttribute * D.35241;
  unsigned int i.394;
  struct MonoMethodSignature * D.35243;
  short unsigned int D.35244;
  struct MonoMarshalSpec * * D.35245;
  struct MonoMarshalSpec * D.35246;
  _Bool D.35251;
  long int D.35252;
  long int D.35253;
  struct MonoGHashTable * D.35258;
  struct MonoMemPool * D.35261;
  _Bool D.35264;
  long int D.35265;
  long int D.35266;
  static struct MonoClass * System_Reflection_ParameterInfo;
  static struct MonoClass * System_Reflection_ParameterInfo_array;
  struct MonoError error;
  struct MonoArray * res;
  struct MonoReflectionMethod * member;
  struct MonoReflectionParameter * param;
  char * * names;
  char * * blobs;
  guint32 * types;
  struct MonoType * type;
  struct MonoObject * dbnull;
  struct MonoObject * missing;
  struct MonoMarshalSpec * * mspecs;
  struct MonoMethodSignature * sig;
  struct MonoVTable * pinfo_vtable;
  int i;

  try
    {
      res = 0B;
      member = 0B;
      param = 0B;
      blobs = 0B;
      types = 0B;
      type = 0B;
      dbnull = 0B;
      missing = 0B;
      System_Reflection_ParameterInfo_array.390 = System_Reflection_ParameterInfo_array;
      if (System_Reflection_ParameterInfo_array.390 == 0B) goto <D.35123>; else goto <D.35124>;
      <D.35123>:
      {
        struct MonoClass * klass;

        D.35125 = mono_defaults.corlib;
        klass = mono_class_from_name (D.35125, "System.Reflection", "MonoParameterInfo");
        if (klass == 0B) goto <D.35126>; else goto <D.35127>;
        <D.35126>:
        D.35125 = mono_defaults.corlib;
        klass = mono_class_from_name (D.35125, "System.Reflection", "ParameterInfo");
        <D.35127>:
        mono_memory_barrier ();
        System_Reflection_ParameterInfo = klass;
        klass = mono_array_class_get (klass, 1);
        mono_memory_barrier ();
        System_Reflection_ParameterInfo_array = klass;
      }
      <D.35124>:
      sig = mono_method_signature_checked (method, &error);
      D.35128 = mono_error_ok (&error);
      if (D.35128 == 0) goto <D.35129>; else goto <D.35130>;
      <D.35129>:
      mono_error_raise_exception (&error);
      <D.35130>:
      D.35131 = sig->param_count;
      if (D.35131 == 0) goto <D.35132>; else goto <D.35133>;
      <D.35132>:
      System_Reflection_ParameterInfo_array.390 = System_Reflection_ParameterInfo_array;
      D.35135 = mono_class_vtable (domain, System_Reflection_ParameterInfo_array.390);
      D.35134 = mono_array_new_specific (D.35135, 0);
      return D.35134;
      <D.35133>:
      {
        struct MonoArray * _obj;
        struct ReflectedEntry e;

        try
          {
            D.35136 = &method->signature;
            e.item = D.35136;
            e.refclass = refclass;
            {
              int ret;

              D.35137 = &domain->lock.mutex;
              ret = pthread_mutex_lock (D.35137);
              if (ret != 0) goto <D.35138>; else goto <D.35139>;
              <D.35138>:
              monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
              <D.35139>:
              D.35140 = ret != 0;
              D.35141 = (long int) D.35140;
              D.35142 = __builtin_expect (D.35141, 0);
              if (D.35142 != 0) goto <D.35143>; else goto <D.35144>;
              <D.35143>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6808, "ret == 0");
              <D.35144>:
            }
            D.35145 = domain->refobject_hash;
            if (D.35145 == 0B) goto <D.35146>; else goto <D.35147>;
            <D.35146>:
            D.35148 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
            domain->refobject_hash = D.35148;
            <D.35147>:
            D.35145 = domain->refobject_hash;
            _obj = mono_g_hash_table_lookup (D.35145, &e);
            if (_obj != 0B) goto <D.35149>; else goto <D.35150>;
            <D.35149>:
            {
              int ret;

              D.35137 = &domain->lock.mutex;
              ret = pthread_mutex_unlock (D.35137);
              if (ret != 0) goto <D.35151>; else goto <D.35152>;
              <D.35151>:
              monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
              <D.35152>:
              D.35153 = ret != 0;
              D.35154 = (long int) D.35153;
              D.35155 = __builtin_expect (D.35154, 0);
              if (D.35155 != 0) goto <D.35156>; else goto <D.35157>;
              <D.35156>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6808, "ret == 0");
              <D.35157>:
            }
            D.35134 = _obj;
            return D.35134;
            <D.35150>:
            {
              int ret;

              D.35137 = &domain->lock.mutex;
              ret = pthread_mutex_unlock (D.35137);
              if (ret != 0) goto <D.35158>; else goto <D.35159>;
              <D.35158>:
              monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
              <D.35159>:
              D.35160 = ret != 0;
              D.35161 = (long int) D.35160;
              D.35162 = __builtin_expect (D.35161, 0);
              if (D.35162 != 0) goto <D.35163>; else goto <D.35164>;
              <D.35163>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6808, "ret == 0");
              <D.35164>:
            }
          }
        finally
          {
            e = {CLOBBER};
          }
      }
      member = mono_method_get_object (domain, method, refclass);
      D.35131 = sig->param_count;
      D.35165 = (unsigned int) D.35131;
      D.35166 = D.35165 * 4;
      names = monoeg_malloc (D.35166);
      mono_method_get_param_names (method, names);
      D.35131 = sig->param_count;
      D.35167 = (int) D.35131;
      D.35168 = D.35167 + 1;
      D.35169 = (unsigned int) D.35168;
      D.35170 = D.35169 * 4;
      mspecs = monoeg_malloc (D.35170);
      mono_method_get_marshal_info (method, mspecs);
      System_Reflection_ParameterInfo_array.390 = System_Reflection_ParameterInfo_array;
      D.35171 = mono_class_vtable (domain, System_Reflection_ParameterInfo_array.390);
      D.35131 = sig->param_count;
      D.35172 = (unsigned int) D.35131;
      res = mono_array_new_specific (D.35171, D.35172);
      System_Reflection_ParameterInfo.391 = System_Reflection_ParameterInfo;
      pinfo_vtable = mono_class_vtable (domain, System_Reflection_ParameterInfo.391);
      i = 0;
      goto <D.23504>;
      <D.23503>:
      param = mono_object_new_specific (pinfo_vtable);
      D.35174 = &param->ClassImpl;
      D.35175 = sig->params[i];
      D.35176 = mono_type_get_object (domain, D.35175);
      mono_gc_wbarrier_set_field (param, D.35174, D.35176);
      D.35177 = &param->MemberImpl;
      mono_gc_wbarrier_set_field (param, D.35177, member);
      D.35178 = &param->NameImpl;
      i.392 = (unsigned int) i;
      D.35180 = i.392 * 4;
      D.35181 = names + D.35180;
      D.35182 = *D.35181;
      D.35183 = mono_string_new (domain, D.35182);
      mono_gc_wbarrier_set_field (param, D.35178, D.35183);
      param->PositionImpl = i;
      D.35175 = sig->params[i];
      D.35184 = D.35175->attrs;
      D.35185 = (unsigned int) D.35184;
      param->AttrsImpl = D.35185;
      D.35186 = param->AttrsImpl;
      D.35187 = D.35186 & 4096;
      if (D.35187 == 0) goto <D.35188>; else goto <D.35189>;
      <D.35188>:
      D.35186 = param->AttrsImpl;
      D.35190 = D.35186 & 16;
      if (D.35190 != 0) goto <D.35191>; else goto <D.35192>;
      <D.35191>:
      D.35193 = &param->DefaultValueImpl;
      D.35194 = get_reflection_missing (domain, &missing);
      mono_gc_wbarrier_set_field (param, D.35193, D.35194);
      goto <D.35195>;
      <D.35192>:
      D.35193 = &param->DefaultValueImpl;
      D.35196 = get_dbnull (domain, &dbnull);
      mono_gc_wbarrier_set_field (param, D.35193, D.35196);
      <D.35195>:
      goto <D.35197>;
      <D.35189>:
      if (blobs == 0B) goto <D.35198>; else goto <D.35199>;
      <D.35198>:
      D.35131 = sig->param_count;
      D.35165 = (unsigned int) D.35131;
      D.35166 = D.35165 * 4;
      blobs = monoeg_malloc0 (D.35166);
      D.35131 = sig->param_count;
      D.35165 = (unsigned int) D.35131;
      D.35166 = D.35165 * 4;
      types = monoeg_malloc0 (D.35166);
      get_default_param_value_blobs (method, blobs, types);
      <D.35199>:
      if (type == 0B) goto <D.35200>; else goto <D.35201>;
      <D.35200>:
      type = monoeg_malloc0 (8);
      <D.35201>:
      i.392 = (unsigned int) i;
      D.35180 = i.392 * 4;
      D.35202 = types + D.35180;
      D.35203 = *D.35202;
      D.35204 = (unsigned char) D.35203;
      type->type = D.35204;
      type->data.klass = 0B;
      i.392 = (unsigned int) i;
      D.35180 = i.392 * 4;
      D.35202 = types + D.35180;
      D.35203 = *D.35202;
      if (D.35203 == 18) goto <D.35205>; else goto <D.35206>;
      <D.35205>:
      D.35207 = mono_defaults.object_class;
      type->data.klass = D.35207;
      goto <D.35208>;
      <D.35206>:
      D.35175 = sig->params[i];
      D.35211 = D.35175->type;
      if (D.35211 == 17) goto <D.35212>; else goto <D.35209>;
      <D.35212>:
      D.35175 = sig->params[i];
      D.35213 = D.35175->data.klass;
      D.35214 = BIT_FIELD_REF <*D.35213, 8, 160>;
      D.35215 = D.35214 & 16;
      if (D.35215 != 0) goto <D.35216>; else goto <D.35209>;
      <D.35216>:
      type->type = 17;
      D.35175 = sig->params[i];
      D.35217 = mono_class_from_mono_type (D.35175);
      type->data.klass = D.35217;
      goto <D.35210>;
      <D.35209>:
      D.35218 = mono_class_from_mono_type (type);
      type->data.klass = D.35218;
      <D.35210>:
      <D.35208>:
      D.35193 = &param->DefaultValueImpl;
      i.392 = (unsigned int) i;
      D.35180 = i.392 * 4;
      D.35219 = blobs + D.35180;
      D.35220 = *D.35219;
      D.35221 = mono_get_object_from_blob (domain, type, D.35220);
      mono_gc_wbarrier_set_field (param, D.35193, D.35221);
      i.392 = (unsigned int) i;
      D.35180 = i.392 * 4;
      D.35202 = types + D.35180;
      D.35203 = *D.35202;
      if (D.35203 != 18) goto <D.35222>; else goto <D.35223>;
      <D.35222>:
      D.35224 = param->DefaultValueImpl;
      if (D.35224 == 0B) goto <D.35225>; else goto <D.35226>;
      <D.35225>:
      D.35186 = param->AttrsImpl;
      D.35190 = D.35186 & 16;
      if (D.35190 != 0) goto <D.35227>; else goto <D.35228>;
      <D.35227>:
      D.35193 = &param->DefaultValueImpl;
      D.35229 = get_reflection_missing (domain, &missing);
      mono_gc_wbarrier_set_field (param, D.35193, D.35229);
      goto <D.35230>;
      <D.35228>:
      D.35193 = &param->DefaultValueImpl;
      D.35231 = get_dbnull (domain, &dbnull);
      mono_gc_wbarrier_set_field (param, D.35193, D.35231);
      <D.35230>:
      <D.35226>:
      <D.35223>:
      <D.35197>:
      i.393 = (sizetype) i;
      D.35233 = i.393 + 1;
      D.35234 = D.35233 * 4;
      D.35235 = mspecs + D.35234;
      D.35236 = *D.35235;
      if (D.35236 != 0B) goto <D.35237>; else goto <D.35238>;
      <D.35237>:
      D.35239 = &param->MarshalAsImpl;
      D.35240 = method->klass;
      i.393 = (sizetype) i;
      D.35233 = i.393 + 1;
      D.35234 = D.35233 * 4;
      D.35235 = mspecs + D.35234;
      D.35236 = *D.35235;
      D.35241 = mono_reflection_marshal_as_attribute_from_marshal_spec (domain, D.35240, D.35236);
      mono_gc_wbarrier_set_field (param, D.35239, D.35241);
      <D.35238>:
      {
        void * * __p;

        i.394 = (unsigned int) i;
        __p = mono_array_addr_with_size (res, 4, i.394);
        mono_gc_wbarrier_set_arrayref (res, __p, param);
      }
      i = i + 1;
      <D.23504>:
      D.35131 = sig->param_count;
      D.35167 = (int) D.35131;
      if (D.35167 > i) goto <D.23503>; else goto <D.23505>;
      <D.23505>:
      monoeg_g_free (names);
      monoeg_g_free (blobs);
      monoeg_g_free (types);
      monoeg_g_free (type);
      D.35243 = mono_method_signature (method);
      D.35244 = D.35243->param_count;
      i = (int) D.35244;
      goto <D.23507>;
      <D.23506>:
      i.392 = (unsigned int) i;
      D.35180 = i.392 * 4;
      D.35245 = mspecs + D.35180;
      D.35246 = *D.35245;
      if (D.35246 != 0B) goto <D.35247>; else goto <D.35248>;
      <D.35247>:
      i.392 = (unsigned int) i;
      D.35180 = i.392 * 4;
      D.35245 = mspecs + D.35180;
      D.35246 = *D.35245;
      mono_metadata_free_marshal_spec (D.35246);
      <D.35248>:
      i = i + -1;
      <D.23507>:
      if (i >= 0) goto <D.23506>; else goto <D.23508>;
      <D.23508>:
      monoeg_g_free (mspecs);
      {
        struct MonoArray * _obj;
        struct ReflectedEntry pe;

        try
          {
            D.35136 = &method->signature;
            pe.item = D.35136;
            pe.refclass = refclass;
            {
              int ret;

              D.35137 = &domain->lock.mutex;
              ret = pthread_mutex_lock (D.35137);
              if (ret != 0) goto <D.35249>; else goto <D.35250>;
              <D.35249>:
              monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
              <D.35250>:
              D.35251 = ret != 0;
              D.35252 = (long int) D.35251;
              D.35253 = __builtin_expect (D.35252, 0);
              if (D.35253 != 0) goto <D.35254>; else goto <D.35255>;
              <D.35254>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6882, "ret == 0");
              <D.35255>:
            }
            D.35145 = domain->refobject_hash;
            if (D.35145 == 0B) goto <D.35256>; else goto <D.35257>;
            <D.35256>:
            D.35258 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
            domain->refobject_hash = D.35258;
            <D.35257>:
            D.35145 = domain->refobject_hash;
            _obj = mono_g_hash_table_lookup (D.35145, &pe);
            if (_obj == 0B) goto <D.35259>; else goto <D.35260>;
            <D.35259>:
            {
              struct ReflectedEntry * e;

              D.35261 = domain->mp;
              e = mono_mempool_alloc (D.35261, 8);
              D.35136 = &method->signature;
              e->item = D.35136;
              e->refclass = refclass;
              D.35145 = domain->refobject_hash;
              mono_g_hash_table_insert (D.35145, e, res);
              _obj = res;
            }
            <D.35260>:
            {
              int ret;

              D.35137 = &domain->lock.mutex;
              ret = pthread_mutex_unlock (D.35137);
              if (ret != 0) goto <D.35262>; else goto <D.35263>;
              <D.35262>:
              monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
              <D.35263>:
              D.35264 = ret != 0;
              D.35265 = (long int) D.35264;
              D.35266 = __builtin_expect (D.35265, 0);
              if (D.35266 != 0) goto <D.35267>; else goto <D.35268>;
              <D.35267>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6882, "ret == 0");
              <D.35268>:
            }
            D.35134 = _obj;
            return D.35134;
          }
        finally
          {
            pe = {CLOBBER};
          }
      }
    }
  finally
    {
      error = {CLOBBER};
      dbnull = {CLOBBER};
      missing = {CLOBBER};
    }
}


mono_memory_barrier ()
{
  __sync_synchronize ();
}


get_default_param_value_blobs (struct MonoMethod * method, char * * blobs, guint32 * types)
{
  short unsigned int D.35274;
  struct MonoImage * D.35277;
  unsigned char D.35278;
  unsigned char D.35279;
  unsigned char D.35282;
  unsigned char D.35283;
  struct MonoClass * D.35286;
  struct MonoImage * D.35287;
  struct GHashTable * D.35288;
  uint8_t * * D.35291;
  uint8_t * * D.35294;
  unsigned int D.35295;
  unsigned int D.35296;
  uint32_t * D.35297;
  uint32_t * D.35298;
  unsigned int D.35299;
  unsigned int D.35300;
  _Bool D.35301;
  long int D.35302;
  long int D.35303;
  int D.35306;
  <unnamed-unsigned:24> D.35307;
  int D.35308;
  <unnamed-unsigned:24> D.35312;
  int D.35313;
  int D.35314;
  unsigned int D.35315;
  int D.35316;
  unsigned int D.35317;
  unsigned int D.35318;
  unsigned int D.35321;
  unsigned int D.35322;
  unsigned int D.35325;
  int D.35326;
  sizetype D.35327;
  sizetype D.35328;
  char * * D.35329;
  unsigned int D.35330;
  const char * D.35331;
  guint32 * D.35332;
  unsigned int D.35333;
  guint32 param_index;
  guint32 i;
  guint32 lastp;
  guint32 crow;
  guint32 param_cols[3];
  guint32 const_cols[4];
  gint32 idx;
  struct MonoClass * klass;
  struct MonoImage * image;
  struct MonoMethodSignature * methodsig;
  struct MonoTableInfo * constt;
  struct MonoTableInfo * methodt;
  struct MonoTableInfo * paramt;

  try
    {
      crow = 0;
      klass = method->klass;
      image = klass->image;
      methodsig = mono_method_signature (method);
      D.35274 = methodsig->param_count;
      if (D.35274 == 0) goto <D.35275>; else goto <D.35276>;
      <D.35275>:
      return;
      <D.35276>:
      mono_class_init (klass);
      D.35277 = klass->image;
      D.35278 = BIT_FIELD_REF <*D.35277, 8, 128>;
      D.35279 = D.35278 & 8;
      if (D.35279 != 0) goto <D.35280>; else goto <D.35281>;
      <D.35280>:
      {
        struct MonoReflectionMethodAux * aux;

        D.35282 = BIT_FIELD_REF <*method, 8, 168>;
        D.35283 = D.35282 & 16;
        if (D.35283 != 0) goto <D.35284>; else goto <D.35285>;
        <D.35284>:
        method = MEM[(struct MonoMethodInflated *)method].declaring;
        <D.35285>:
        D.35286 = method->klass;
        D.35287 = D.35286->image;
        D.35288 = MEM[(struct MonoDynamicImage *)D.35287].method_aux_hash;
        aux = monoeg_g_hash_table_lookup (D.35288, method);
        if (aux != 0B) goto <D.35289>; else goto <D.35290>;
        <D.35289>:
        D.35291 = aux->param_defaults;
        if (D.35291 != 0B) goto <D.35292>; else goto <D.35293>;
        <D.35292>:
        D.35291 = aux->param_defaults;
        D.35294 = D.35291 + 4;
        D.35274 = methodsig->param_count;
        D.35295 = (unsigned int) D.35274;
        D.35296 = D.35295 * 4;
        memcpy (blobs, D.35294, D.35296);
        D.35297 = aux->param_default_types;
        D.35298 = D.35297 + 4;
        D.35274 = methodsig->param_count;
        D.35295 = (unsigned int) D.35274;
        D.35296 = D.35295 * 4;
        memcpy (types, D.35298, D.35296);
        <D.35293>:
        <D.35290>:
        return;
      }
      <D.35281>:
      D.35277 = klass->image;
      methodt = &D.35277->tables[6];
      D.35277 = klass->image;
      paramt = &D.35277->tables[8];
      constt = &image->tables[11];
      D.35299 = mono_method_get_index (method);
      D.35300 = D.35299 + 4294967295;
      idx = (gint32) D.35300;
      D.35301 = idx == -1;
      D.35302 = (long int) D.35301;
      D.35303 = __builtin_expect (D.35302, 0);
      if (D.35303 != 0) goto <D.35304>; else goto <D.35305>;
      <D.35304>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 7061, "idx != -1");
      <D.35305>:
      param_index = mono_metadata_decode_row_col (methodt, idx, 5);
      D.35306 = idx + 1;
      D.35307 = methodt->rows;
      D.35308 = (int) D.35307;
      if (D.35306 < D.35308) goto <D.35309>; else goto <D.35310>;
      <D.35309>:
      D.35306 = idx + 1;
      lastp = mono_metadata_decode_row_col (methodt, D.35306, 5);
      goto <D.35311>;
      <D.35310>:
      D.35312 = paramt->rows;
      D.35313 = (int) D.35312;
      D.35314 = D.35313 + 1;
      lastp = (guint32) D.35314;
      <D.35311>:
      i = param_index;
      goto <D.23593>;
      <D.23592>:
      {
        guint32 paramseq;

        D.35315 = i + 4294967295;
        D.35316 = (int) D.35315;
        mono_metadata_decode_row (paramt, D.35316, &param_cols, 3);
        paramseq = param_cols[1];
        D.35317 = param_cols[0];
        D.35318 = D.35317 & 4096;
        if (D.35318 == 0) goto <D.35319>; else goto <D.35320>;
        <D.35319>:
        // predicted unlikely by continue predictor.
        goto <D.23591>;
        <D.35320>:
        D.35321 = i | 134217728;
        D.35322 = crow + 1;
        crow = mono_metadata_get_constant_index (image, D.35321, D.35322);
        if (crow == 0) goto <D.35323>; else goto <D.35324>;
        <D.35323>:
        // predicted unlikely by continue predictor.
        goto <D.23591>;
        <D.35324>:
        D.35325 = crow + 4294967295;
        D.35326 = (int) D.35325;
        mono_metadata_decode_row (constt, D.35326, &const_cols, 4);
        D.35327 = paramseq + 1073741823;
        D.35328 = D.35327 * 4;
        D.35329 = blobs + D.35328;
        D.35330 = const_cols[3];
        D.35331 = mono_metadata_blob_heap (image, D.35330);
        *D.35329 = D.35331;
        D.35327 = paramseq + 1073741823;
        D.35328 = D.35327 * 4;
        D.35332 = types + D.35328;
        D.35333 = const_cols[0];
        *D.35332 = D.35333;
      }
      <D.23591>:
      i = i + 1;
      <D.23593>:
      if (i < lastp) goto <D.23592>; else goto <D.23594>;
      <D.23594>:
      return;
    }
  finally
    {
      param_cols = {CLOBBER};
      const_cols = {CLOBBER};
    }
}


get_reflection_missing (struct MonoDomain * domain, struct MonoObject * * reflection_missing)
{
  struct MonoObject * D.35336;
  struct MonoObject * D.35339;
  struct MonoObject * D.35340;

  D.35336 = *reflection_missing;
  if (D.35336 == 0B) goto <D.35337>; else goto <D.35338>;
  <D.35337>:
  D.35339 = mono_get_reflection_missing_object (domain);
  *reflection_missing = D.35339;
  <D.35338>:
  D.35340 = *reflection_missing;
  return D.35340;
}


mono_get_reflection_missing_object (struct MonoDomain * domain)
{
  struct MonoClassField * missing_value_field.395;
  struct MonoImage * D.35345;
  struct MonoClassField * missing_value_field.396;
  _Bool D.35347;
  long int D.35348;
  long int D.35349;
  _Bool D.35352;
  long int D.35353;
  long int D.35354;
  struct MonoObject * D.35357;
  struct MonoObject * obj;
  static struct MonoClassField * missing_value_field = 0B;

  missing_value_field.395 = missing_value_field;
  if (missing_value_field.395 == 0B) goto <D.35343>; else goto <D.35344>;
  <D.35343>:
  {
    struct MonoClass * missing_klass;

    D.35345 = mono_defaults.corlib;
    missing_klass = mono_class_from_name (D.35345, "System.Reflection", "Missing");
    mono_class_init (missing_klass);
    missing_value_field.396 = mono_class_get_field_from_name (missing_klass, "Value");
    missing_value_field = missing_value_field.396;
    missing_value_field.395 = missing_value_field;
    D.35347 = missing_value_field.395 == 0B;
    D.35348 = (long int) D.35347;
    D.35349 = __builtin_expect (D.35348, 0);
    if (D.35349 != 0) goto <D.35350>; else goto <D.35351>;
    <D.35350>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6732, "missing_value_field");
    <D.35351>:
  }
  <D.35344>:
  missing_value_field.395 = missing_value_field;
  obj = mono_field_get_value_object (domain, missing_value_field.395, 0B);
  D.35352 = obj == 0B;
  D.35353 = (long int) D.35352;
  D.35354 = __builtin_expect (D.35353, 0);
  if (D.35354 != 0) goto <D.35355>; else goto <D.35356>;
  <D.35355>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6735, "obj");
  <D.35356>:
  D.35357 = obj;
  return D.35357;
}


get_dbnull (struct MonoDomain * domain, struct MonoObject * * dbnull)
{
  struct MonoObject * D.35359;
  struct MonoObject * D.35362;
  struct MonoObject * D.35363;

  D.35359 = *dbnull;
  if (D.35359 == 0B) goto <D.35360>; else goto <D.35361>;
  <D.35360>:
  D.35362 = mono_get_dbnull_object (domain);
  *dbnull = D.35362;
  <D.35361>:
  D.35363 = *dbnull;
  return D.35363;
}


mono_param_get_objects (struct MonoDomain * domain, struct MonoMethod * method)
{
  struct MonoArray * D.35365;

  D.35365 = mono_param_get_objects_internal (domain, method, 0B);
  return D.35365;
}


mono_method_body_get_object (struct MonoDomain * domain, struct MonoMethod * method)
{
  unsigned char D.35367;
  unsigned char D.35368;
  struct MonoException * D.35371;
  struct MonoClass * System_Reflection_MethodBody.397;
  struct MonoImage * D.35375;
  struct MonoClass * System_Reflection_MethodBody.398;
  struct MonoClass * System_Reflection_LocalVariableInfo.399;
  struct MonoClass * System_Reflection_LocalVariableInfo.400;
  struct MonoClass * System_Reflection_ExceptionHandlingClause.401;
  struct MonoClass * System_Reflection_ExceptionHandlingClause.402;
  union mono_mutex_t * D.35385;
  _Bool D.35388;
  long int D.35389;
  long int D.35390;
  struct MonoGHashTable * D.35393;
  struct MonoGHashTable * D.35396;
  _Bool D.35401;
  long int D.35402;
  long int D.35403;
  struct MonoReflectionMethodBody * D.35406;
  _Bool D.35409;
  long int D.35410;
  long int D.35411;
  short unsigned int D.35416;
  unsigned int D.35417;
  unsigned int D.35418;
  short unsigned int D.35420;
  unsigned int D.35421;
  unsigned int D.35422;
  struct MonoClass * D.35423;
  unsigned char D.35424;
  unsigned char D.35425;
  struct MonoTableInfo * D.35428;
  unsigned int D.35429;
  unsigned int D.35430;
  unsigned int D.35431;
  int D.35432;
  int D.35433;
  <unnamed-unsigned:1> D.35435;
  unsigned char D.35436;
  <unnamed-unsigned:15> D.35437;
  unsigned int D.35438;
  struct MonoArray * * D.35439;
  struct MonoClass * D.23544;
  struct MonoClass * tmp_klass.403;
  struct MonoClass * D.35443;
  struct MonoClass * tmp_klass.404;
  _Bool D.35445;
  long int D.35446;
  long int D.35447;
  struct MonoVTable * D.35450;
  unsigned int D.35451;
  struct MonoArray * D.35452;
  struct MonoArray * D.35453;
  char * D.35454;
  const unsigned char * D.35455;
  struct MonoArray * * D.35456;
  struct MonoClass * D.23546;
  struct MonoClass * tmp_klass.405;
  struct MonoClass * tmp_klass.406;
  _Bool D.35461;
  long int D.35462;
  long int D.35463;
  struct MonoVTable * D.35466;
  short unsigned int D.35467;
  unsigned int D.35468;
  struct MonoArray * D.35469;
  struct MonoReflectionType * * D.35470;
  struct MonoType * D.35471;
  struct MonoReflectionType * D.35472;
  <unnamed-unsigned:1> D.35473;
  unsigned char D.35474;
  short unsigned int D.35475;
  struct MonoArray * D.35476;
  unsigned int i.407;
  int D.35478;
  struct MonoArray * * D.35479;
  struct MonoClass * D.23553;
  struct MonoClass * tmp_klass.408;
  struct MonoClass * tmp_klass.409;
  _Bool D.35484;
  long int D.35485;
  long int D.35486;
  struct MonoVTable * D.35489;
  <unnamed-unsigned:15> D.35490;
  unsigned int D.35491;
  struct MonoArray * D.35492;
  struct MonoExceptionClause * D.35493;
  unsigned int i.410;
  unsigned int D.35495;
  unsigned int D.35496;
  int D.35497;
  unsigned int D.35498;
  int D.35499;
  unsigned int D.35500;
  int D.35501;
  unsigned int D.35502;
  int D.35503;
  unsigned int D.35504;
  int D.35505;
  unsigned int D.35508;
  int D.35509;
  struct MonoClass * D.35511;
  struct MonoObject * * D.35514;
  struct MonoDomain * D.35515;
  struct MonoType * D.35516;
  struct MonoReflectionType * D.35517;
  struct MonoArray * D.35518;
  int D.35519;
  _Bool D.35522;
  long int D.35523;
  long int D.35524;
  struct MonoGHashTable * D.35529;
  struct MonoMemPool * D.35532;
  _Bool D.35535;
  long int D.35536;
  long int D.35537;
  static struct MonoClass * System_Reflection_MethodBody = 0B;
  static struct MonoClass * System_Reflection_LocalVariableInfo = 0B;
  static struct MonoClass * System_Reflection_ExceptionHandlingClause = 0B;
  struct MonoReflectionMethodBody * ret;
  struct MonoMethodHeader * header;
  struct MonoImage * image;
  guint32 method_rva;
  guint32 local_var_sig_token;
  char * ptr;
  unsigned char format;
  unsigned char flags;
  int i;

  D.35367 = BIT_FIELD_REF <*method, 8, 168>;
  D.35368 = D.35367 & 2;
  if (D.35368 != 0) goto <D.35369>; else goto <D.35370>;
  <D.35369>:
  D.35371 = mono_get_exception_invalid_operation (0B);
  mono_raise_exception (D.35371);
  <D.35370>:
  System_Reflection_MethodBody.397 = System_Reflection_MethodBody;
  if (System_Reflection_MethodBody.397 == 0B) goto <D.35373>; else goto <D.35374>;
  <D.35373>:
  D.35375 = mono_defaults.corlib;
  System_Reflection_MethodBody.398 = mono_class_from_name (D.35375, "System.Reflection", "MethodBody");
  System_Reflection_MethodBody = System_Reflection_MethodBody.398;
  <D.35374>:
  System_Reflection_LocalVariableInfo.399 = System_Reflection_LocalVariableInfo;
  if (System_Reflection_LocalVariableInfo.399 == 0B) goto <D.35378>; else goto <D.35379>;
  <D.35378>:
  D.35375 = mono_defaults.corlib;
  System_Reflection_LocalVariableInfo.400 = mono_class_from_name (D.35375, "System.Reflection", "LocalVariableInfo");
  System_Reflection_LocalVariableInfo = System_Reflection_LocalVariableInfo.400;
  <D.35379>:
  System_Reflection_ExceptionHandlingClause.401 = System_Reflection_ExceptionHandlingClause;
  if (System_Reflection_ExceptionHandlingClause.401 == 0B) goto <D.35382>; else goto <D.35383>;
  <D.35382>:
  D.35375 = mono_defaults.corlib;
  System_Reflection_ExceptionHandlingClause.402 = mono_class_from_name (D.35375, "System.Reflection", "ExceptionHandlingClause");
  System_Reflection_ExceptionHandlingClause = System_Reflection_ExceptionHandlingClause.402;
  <D.35383>:
  {
    struct MonoReflectionMethodBody * _obj;
    struct ReflectedEntry e;

    try
      {
        e.item = method;
        e.refclass = 0B;
        {
          int ret;

          D.35385 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.35385);
          if (ret != 0) goto <D.35386>; else goto <D.35387>;
          <D.35386>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.35387>:
          D.35388 = ret != 0;
          D.35389 = (long int) D.35388;
          D.35390 = __builtin_expect (D.35389, 0);
          if (D.35390 != 0) goto <D.35391>; else goto <D.35392>;
          <D.35391>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6923, "ret == 0");
          <D.35392>:
        }
        D.35393 = domain->refobject_hash;
        if (D.35393 == 0B) goto <D.35394>; else goto <D.35395>;
        <D.35394>:
        D.35396 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.35396;
        <D.35395>:
        D.35393 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.35393, &e);
        if (_obj != 0B) goto <D.35397>; else goto <D.35398>;
        <D.35397>:
        {
          int ret;

          D.35385 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.35385);
          if (ret != 0) goto <D.35399>; else goto <D.35400>;
          <D.35399>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.35400>:
          D.35401 = ret != 0;
          D.35402 = (long int) D.35401;
          D.35403 = __builtin_expect (D.35402, 0);
          if (D.35403 != 0) goto <D.35404>; else goto <D.35405>;
          <D.35404>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6923, "ret == 0");
          <D.35405>:
        }
        D.35406 = _obj;
        return D.35406;
        <D.35398>:
        {
          int ret;

          D.35385 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.35385);
          if (ret != 0) goto <D.35407>; else goto <D.35408>;
          <D.35407>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.35408>:
          D.35409 = ret != 0;
          D.35410 = (long int) D.35409;
          D.35411 = __builtin_expect (D.35410, 0);
          if (D.35411 != 0) goto <D.35412>; else goto <D.35413>;
          <D.35412>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6923, "ret == 0");
          <D.35413>:
        }
      }
    finally
      {
        e = {CLOBBER};
      }
  }
  D.35416 = method->flags;
  D.35417 = (unsigned int) D.35416;
  D.35418 = D.35417 & 9216;
  if (D.35418 != 0) goto <D.35414>; else goto <D.35419>;
  <D.35419>:
  D.35420 = method->iflags;
  D.35421 = (unsigned int) D.35420;
  D.35422 = D.35421 & 4099;
  if (D.35422 != 0) goto <D.35414>; else goto <D.35415>;
  <D.35414>:
  D.35406 = 0B;
  return D.35406;
  <D.35415>:
  D.35423 = method->klass;
  image = D.35423->image;
  header = mono_method_get_header (method);
  D.35424 = BIT_FIELD_REF <*image, 8, 128>;
  D.35425 = D.35424 & 8;
  if (D.35425 == 0) goto <D.35426>; else goto <D.35427>;
  <D.35426>:
  D.35428 = &image->tables[6];
  D.35429 = method->token;
  D.35430 = D.35429 & 16777215;
  D.35431 = D.35430 + 4294967295;
  D.35432 = (int) D.35431;
  method_rva = mono_metadata_decode_row_col (D.35428, D.35432, 0);
  ptr = mono_image_rva_map (image, method_rva);
  flags = MEM[(const unsigned char *)ptr];
  format = flags & 3;
  D.35433 = (int) format;
  switch (D.35433) <default: <D.23542>, case 2: <D.23539>, case 3: <D.23541>>
  <D.23539>:
  local_var_sig_token = 0;
  goto <D.23540>;
  <D.23541>:
  ptr = ptr + 2;
  ptr = ptr + 2;
  ptr = ptr + 4;
  local_var_sig_token = mono_read32 (ptr);
  goto <D.23540>;
  <D.23542>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 6951);
  <D.23540>:
  goto <D.35434>;
  <D.35427>:
  local_var_sig_token = 0;
  <D.35434>:
  System_Reflection_MethodBody.397 = System_Reflection_MethodBody;
  ret = mono_object_new (domain, System_Reflection_MethodBody.397);
  D.35435 = header->init_locals;
  D.35436 = (unsigned char) D.35435;
  ret->init_locals = D.35436;
  D.35437 = header->max_stack;
  D.35438 = (unsigned int) D.35437;
  ret->max_stack = D.35438;
  ret->local_var_sig_token = local_var_sig_token;
  D.35439 = &ret->il;
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.403 = tmp_klass;
      if (tmp_klass.403 == 0B) goto <D.35441>; else goto <D.35442>;
      <D.35441>:
      D.35443 = mono_defaults.byte_class;
      tmp_klass.404 = mono_array_class_get (D.35443, 1);
      tmp_klass = tmp_klass.404;
      tmp_klass.403 = tmp_klass;
      D.35445 = tmp_klass.403 == 0B;
      D.35446 = (long int) D.35445;
      D.35447 = __builtin_expect (D.35446, 0);
      if (D.35447 != 0) goto <D.35448>; else goto <D.35449>;
      <D.35448>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6961, "tmp_klass");
      <D.35449>:
      <D.35442>:
    }
    D.23544 = tmp_klass;
  }
  D.35450 = mono_class_vtable (domain, D.23544);
  D.35451 = header->code_size;
  D.35452 = mono_array_new_specific (D.35450, D.35451);
  mono_gc_wbarrier_set_field (ret, D.35439, D.35452);
  D.35453 = ret->il;
  D.35454 = mono_array_addr_with_size (D.35453, 1, 0);
  D.35455 = header->code;
  D.35451 = header->code_size;
  memcpy (D.35454, D.35455, D.35451);
  D.35456 = &ret->locals;
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.405 = tmp_klass;
      if (tmp_klass.405 == 0B) goto <D.35458>; else goto <D.35459>;
      <D.35458>:
      System_Reflection_LocalVariableInfo.399 = System_Reflection_LocalVariableInfo;
      tmp_klass.406 = mono_array_class_get (System_Reflection_LocalVariableInfo.399, 1);
      tmp_klass = tmp_klass.406;
      tmp_klass.405 = tmp_klass;
      D.35461 = tmp_klass.405 == 0B;
      D.35462 = (long int) D.35461;
      D.35463 = __builtin_expect (D.35462, 0);
      if (D.35463 != 0) goto <D.35464>; else goto <D.35465>;
      <D.35464>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6965, "tmp_klass");
      <D.35465>:
      <D.35459>:
    }
    D.23546 = tmp_klass;
  }
  D.35466 = mono_class_vtable (domain, D.23546);
  D.35467 = header->num_locals;
  D.35468 = (unsigned int) D.35467;
  D.35469 = mono_array_new_specific (D.35466, D.35468);
  mono_gc_wbarrier_set_field (ret, D.35456, D.35469);
  i = 0;
  goto <D.23550>;
  <D.23549>:
  {
    struct MonoReflectionLocalVariableInfo * info;

    System_Reflection_LocalVariableInfo.399 = System_Reflection_LocalVariableInfo;
    info = mono_object_new (domain, System_Reflection_LocalVariableInfo.399);
    D.35470 = &info->local_type;
    D.35471 = header->locals[i];
    D.35472 = mono_type_get_object (domain, D.35471);
    mono_gc_wbarrier_set_field (info, D.35470, D.35472);
    D.35471 = header->locals[i];
    D.35473 = D.35471->pinned;
    D.35474 = (unsigned char) D.35473;
    info->is_pinned = D.35474;
    D.35475 = (short unsigned int) i;
    info->local_index = D.35475;
    {
      void * * __p;

      D.35476 = ret->locals;
      i.407 = (unsigned int) i;
      __p = mono_array_addr_with_size (D.35476, 4, i.407);
      D.35476 = ret->locals;
      mono_gc_wbarrier_set_arrayref (D.35476, __p, info);
    }
  }
  i = i + 1;
  <D.23550>:
  D.35467 = header->num_locals;
  D.35478 = (int) D.35467;
  if (D.35478 > i) goto <D.23549>; else goto <D.23551>;
  <D.23551>:
  D.35479 = &ret->clauses;
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.408 = tmp_klass;
      if (tmp_klass.408 == 0B) goto <D.35481>; else goto <D.35482>;
      <D.35481>:
      System_Reflection_ExceptionHandlingClause.401 = System_Reflection_ExceptionHandlingClause;
      tmp_klass.409 = mono_array_class_get (System_Reflection_ExceptionHandlingClause.401, 1);
      tmp_klass = tmp_klass.409;
      tmp_klass.408 = tmp_klass;
      D.35484 = tmp_klass.408 == 0B;
      D.35485 = (long int) D.35484;
      D.35486 = __builtin_expect (D.35485, 0);
      if (D.35486 != 0) goto <D.35487>; else goto <D.35488>;
      <D.35487>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6975, "tmp_klass");
      <D.35488>:
      <D.35482>:
    }
    D.23553 = tmp_klass;
  }
  D.35489 = mono_class_vtable (domain, D.23553);
  D.35490 = header->num_clauses;
  D.35491 = (unsigned int) D.35490;
  D.35492 = mono_array_new_specific (D.35489, D.35491);
  mono_gc_wbarrier_set_field (ret, D.35479, D.35492);
  i = 0;
  goto <D.23558>;
  <D.23557>:
  {
    struct MonoReflectionExceptionHandlingClause * info;
    struct MonoExceptionClause * clause;

    System_Reflection_ExceptionHandlingClause.401 = System_Reflection_ExceptionHandlingClause;
    info = mono_object_new (domain, System_Reflection_ExceptionHandlingClause.401);
    D.35493 = header->clauses;
    i.410 = (unsigned int) i;
    D.35495 = i.410 * 24;
    clause = D.35493 + D.35495;
    D.35496 = clause->flags;
    D.35497 = (int) D.35496;
    info->flags = D.35497;
    D.35498 = clause->try_offset;
    D.35499 = (int) D.35498;
    info->try_offset = D.35499;
    D.35500 = clause->try_len;
    D.35501 = (int) D.35500;
    info->try_length = D.35501;
    D.35502 = clause->handler_offset;
    D.35503 = (int) D.35502;
    info->handler_offset = D.35503;
    D.35504 = clause->handler_len;
    D.35505 = (int) D.35504;
    info->handler_length = D.35505;
    D.35496 = clause->flags;
    if (D.35496 == 1) goto <D.35506>; else goto <D.35507>;
    <D.35506>:
    D.35508 = clause->data.filter_offset;
    D.35509 = (int) D.35508;
    info->filter_offset = D.35509;
    goto <D.35510>;
    <D.35507>:
    D.35511 = clause->data.catch_class;
    if (D.35511 != 0B) goto <D.35512>; else goto <D.35513>;
    <D.35512>:
    D.35514 = &info->catch_type;
    D.35515 = mono_domain_get ();
    D.35511 = clause->data.catch_class;
    D.35516 = &D.35511->byval_arg;
    D.35517 = mono_type_get_object (D.35515, D.35516);
    mono_gc_wbarrier_set_field (info, D.35514, D.35517);
    <D.35513>:
    <D.35510>:
    {
      void * * __p;

      D.35518 = ret->clauses;
      i.407 = (unsigned int) i;
      __p = mono_array_addr_with_size (D.35518, 4, i.407);
      D.35518 = ret->clauses;
      mono_gc_wbarrier_set_arrayref (D.35518, __p, info);
    }
  }
  i = i + 1;
  <D.23558>:
  D.35490 = header->num_clauses;
  D.35519 = (int) D.35490;
  if (D.35519 > i) goto <D.23557>; else goto <D.23559>;
  <D.23559>:
  mono_metadata_free_mh (header);
  {
    struct MonoReflectionMethodBody * _obj;
    struct ReflectedEntry pe;

    try
      {
        pe.item = method;
        pe.refclass = 0B;
        {
          int ret;

          D.35385 = &domain->lock.mutex;
          ret = pthread_mutex_lock (D.35385);
          if (ret != 0) goto <D.35520>; else goto <D.35521>;
          <D.35520>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
          <D.35521>:
          D.35522 = ret != 0;
          D.35523 = (long int) D.35522;
          D.35524 = __builtin_expect (D.35523, 0);
          if (D.35524 != 0) goto <D.35525>; else goto <D.35526>;
          <D.35525>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6994, "ret == 0");
          <D.35526>:
        }
        D.35393 = domain->refobject_hash;
        if (D.35393 == 0B) goto <D.35527>; else goto <D.35528>;
        <D.35527>:
        D.35529 = mono_g_hash_table_new_type (reflected_hash, reflected_equal, 2);
        domain->refobject_hash = D.35529;
        <D.35528>:
        D.35393 = domain->refobject_hash;
        _obj = mono_g_hash_table_lookup (D.35393, &pe);
        if (_obj == 0B) goto <D.35530>; else goto <D.35531>;
        <D.35530>:
        {
          struct ReflectedEntry * e;

          D.35532 = domain->mp;
          e = mono_mempool_alloc (D.35532, 8);
          e->item = method;
          e->refclass = 0B;
          D.35393 = domain->refobject_hash;
          mono_g_hash_table_insert (D.35393, e, ret);
          _obj = ret;
        }
        <D.35531>:
        {
          int ret;

          D.35385 = &domain->lock.mutex;
          ret = pthread_mutex_unlock (D.35385);
          if (ret != 0) goto <D.35533>; else goto <D.35534>;
          <D.35533>:
          monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
          <D.35534>:
          D.35535 = ret != 0;
          D.35536 = (long int) D.35535;
          D.35537 = __builtin_expect (D.35536, 0);
          if (D.35537 != 0) goto <D.35538>; else goto <D.35539>;
          <D.35538>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 6994, "ret == 0");
          <D.35539>:
        }
        D.35406 = _obj;
        return D.35406;
      }
    finally
      {
        pe = {CLOBBER};
      }
  }
  D.35406 = ret;
  return D.35406;
}


mono_get_dbnull_object (struct MonoDomain * domain)
{
  struct MonoClassField * dbnull_value_field.411;
  struct MonoImage * D.35547;
  struct MonoClassField * dbnull_value_field.412;
  _Bool D.35549;
  long int D.35550;
  long int D.35551;
  _Bool D.35554;
  long int D.35555;
  long int D.35556;
  struct MonoObject * D.35559;
  struct MonoObject * obj;
  static struct MonoClassField * dbnull_value_field = 0B;

  dbnull_value_field.411 = dbnull_value_field;
  if (dbnull_value_field.411 == 0B) goto <D.35545>; else goto <D.35546>;
  <D.35545>:
  {
    struct MonoClass * dbnull_klass;

    D.35547 = mono_defaults.corlib;
    dbnull_klass = mono_class_from_name (D.35547, "System", "DBNull");
    mono_class_init (dbnull_klass);
    dbnull_value_field.412 = mono_class_get_field_from_name (dbnull_klass, "Value");
    dbnull_value_field = dbnull_value_field.412;
    dbnull_value_field.411 = dbnull_value_field;
    D.35549 = dbnull_value_field.411 == 0B;
    D.35550 = (long int) D.35549;
    D.35551 = __builtin_expect (D.35550, 0);
    if (D.35551 != 0) goto <D.35552>; else goto <D.35553>;
    <D.35552>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 7017, "dbnull_value_field");
    <D.35553>:
  }
  <D.35546>:
  dbnull_value_field.411 = dbnull_value_field;
  obj = mono_field_get_value_object (domain, dbnull_value_field.411, 0B);
  D.35554 = obj == 0B;
  D.35555 = (long int) D.35554;
  D.35556 = __builtin_expect (D.35555, 0);
  if (D.35556 != 0) goto <D.35557>; else goto <D.35558>;
  <D.35557>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 7020, "obj");
  <D.35558>:
  D.35559 = obj;
  return D.35559;
}


mono_get_object_from_blob (struct MonoDomain * domain, struct MonoType * type, const char * blob)
{
  struct MonoObject * D.35563;
  unsigned char D.35564;
  unsigned char D.35565;
  struct MonoObject * object.413;
  struct MonoObject * object.414;
  unsigned char D.35570;
  unsigned char D.35574;
  <unnamed type> D.35575;
  int D.35576;
  void * retval;
  struct MonoClass * klass;
  struct MonoObject * object;
  struct MonoType * basetype;

  try
    {
      basetype = type;
      if (blob == 0B) goto <D.35561>; else goto <D.35562>;
      <D.35561>:
      D.35563 = 0B;
      return D.35563;
      <D.35562>:
      klass = mono_class_from_mono_type (type);
      D.35564 = BIT_FIELD_REF <*klass, 8, 160>;
      D.35565 = D.35564 & 8;
      if (D.35565 != 0) goto <D.35566>; else goto <D.35567>;
      <D.35566>:
      object.413 = mono_object_new (domain, klass);
      object = object.413;
      object.414 = object;
      retval = object.414 + 8;
      D.35564 = BIT_FIELD_REF <*klass, 8, 160>;
      D.35570 = D.35564 & 16;
      if (D.35570 != 0) goto <D.35571>; else goto <D.35572>;
      <D.35571>:
      basetype = mono_class_enum_basetype (klass);
      <D.35572>:
      goto <D.35573>;
      <D.35567>:
      retval = &object;
      <D.35573>:
      D.35574 = basetype->type;
      D.35575 = (<unnamed type>) D.35574;
      D.35576 = mono_get_constant_value_from_blob (domain, D.35575, blob, retval);
      if (D.35576 == 0) goto <D.35577>; else goto <D.35578>;
      <D.35577>:
      D.35563 = object;
      return D.35563;
      <D.35578>:
      D.35563 = 0B;
      return D.35563;
    }
  finally
    {
      object = {CLOBBER};
    }
}


mono_reflection_parse_type (char * name, struct MonoTypeNameParse * info)
{
  int D.35581;

  D.35581 = _mono_reflection_parse_type (name, 0B, 0, info);
  return D.35581;
}


_mono_reflection_parse_type (char * name, char * * endptr, gboolean is_recursed, struct MonoTypeNameParse * info)
{
  struct MonoAssemblyName * D.35583;
  char * D.35584;
  char * p.415;
  char * p.416;
  char D.35587;
  int D.35588;
  struct GList * D.35589;
  struct GList * D.35590;
  char * D.35591;
  char * D.35595;
  int D.35605;
  struct GList * D.35606;
  struct GList * D.35607;
  char * p.417;
  char * p.418;
  struct GList * D.35610;
  char * p.419;
  char * p.420;
  char * p.421;
  char * p.422;
  char D.35619;
  _Bool D.35620;
  _Bool D.35621;
  _Bool D.35622;
  struct GList * D.35630;
  char * p.423;
  char * p.424;
  char D.35634;
  void * rank.425;
  struct GList * D.35638;
  struct GPtrArray * D.35641;
  struct GPtrArray * D.35642;
  int D.35645;
  char * p.426;
  char * p.427;
  char D.35656;
  _Bool D.35657;
  _Bool D.35658;
  _Bool D.35659;
  char * p.428;
  char * p.429;
  const short unsigned int * * D.35664;
  const short unsigned int * D.35665;
  char D.35666;
  unsigned int D.35667;
  unsigned int D.35668;
  const short unsigned int * D.35669;
  short unsigned int D.35670;
  int D.35671;
  int D.35672;
  struct MonoAssemblyName * D.35678;
  int D.35679;
  char * p.430;
  char * p.431;
  char * p.432;
  char * p.433;
  char * p.434;
  char * p.435;
  char * p.436;
  char * p.437;
  unsigned int D.35698;
  unsigned int D.35699;
  const short unsigned int * D.35700;
  short unsigned int D.35701;
  int D.35702;
  int D.35703;
  int D.35708;
  const char * D.35711;
  char D.35716;
  char * start;
  char * p;
  char * w;
  char * last_point;
  char * startn;
  int in_modifiers;
  int isbyref;
  int rank;
  void end = <<< error >>>;

  try
    {
      in_modifiers = 0;
      isbyref = 0;
      rank = 0;
      w = name;
      p = w;
      start = p;
      D.35583 = &info->assembly;
      memset (D.35583, 0, 60);
      info->name_space = 0B;
      D.35584 = info->name_space;
      info->name = D.35584;
      info->nested = 0B;
      info->modifiers = 0B;
      info->type_arguments = 0B;
      last_point = 0B;
      goto <D.23661>;
      <D.23660>:
      p.415 = p;
      p.416 = p.415 + 1;
      p = p.416;
      start = start + 1;
      w = w + 1;
      name = name + 1;
      <D.23661>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 == 32) goto <D.23660>; else goto <D.23662>;
      <D.23662>:
      goto <D.23675>;
      <D.23674>:
      p.415 = p;
      D.35587 = *p.415;
      D.35588 = (int) D.35587;
      switch (D.35588) <default: <D.23672>, case 38: <D.23667>, case 42: <D.23668>, case 43: <D.23663>, case 44: <D.23670>, case 46: <D.23665>, case 91: <D.23669>, case 92: <D.23666>, case 93: <D.23671>>
      <D.23663>:
      p.415 = p;
      *p.415 = 0;
      p.415 = p;
      startn = p.415 + 1;
      D.35589 = info->nested;
      D.35590 = monoeg_g_list_append (D.35589, startn);
      info->nested = D.35590;
      D.35591 = info->name;
      if (D.35591 != 0B) goto <D.23664>; else goto <D.35592>;
      <D.35592>:
      if (last_point != 0B) goto <D.35593>; else goto <D.35594>;
      <D.35593>:
      info->name_space = start;
      *last_point = 0;
      D.35595 = last_point + 1;
      info->name = D.35595;
      goto <D.35596>;
      <D.35594>:
      info->name_space = "";
      info->name = start;
      <D.35596>:
      goto <D.23664>;
      <D.23665>:
      last_point = p;
      goto <D.23664>;
      <D.23666>:
      p.415 = p;
      p.416 = p.415 + 1;
      p = p.416;
      goto <D.23664>;
      <D.23667>:
      <D.23668>:
      <D.23669>:
      <D.23670>:
      <D.23671>:
      in_modifiers = 1;
      goto <D.23664>;
      <D.23672>:
      goto <D.23664>;
      <D.23664>:
      if (in_modifiers != 0) goto <D.23673>; else goto <D.35597>;
      <D.35597>:
      p.415 = p;
      p.416 = p.415 + 1;
      p = p.416;
      <D.23675>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 != 0) goto <D.23674>; else goto <D.23673>;
      <D.23673>:
      D.35591 = info->name;
      if (D.35591 == 0B) goto <D.35598>; else goto <D.35599>;
      <D.35598>:
      if (last_point != 0B) goto <D.35600>; else goto <D.35601>;
      <D.35600>:
      info->name_space = start;
      *last_point = 0;
      D.35595 = last_point + 1;
      info->name = D.35595;
      goto <D.35602>;
      <D.35601>:
      info->name_space = "";
      info->name = start;
      <D.35602>:
      <D.35599>:
      goto <D.23704>;
      <D.23703>:
      p.415 = p;
      D.35587 = *p.415;
      D.35588 = (int) D.35587;
      switch (D.35588) <default: <D.23701>, case 38: <D.23676>, case 42: <D.23678>, case 44: <D.23697>, case 91: <D.23679>, case 93: <D.23695>>
      <D.23676>:
      if (isbyref != 0) goto <D.35603>; else goto <D.35604>;
      <D.35603>:
      D.35605 = 0;
      return D.35605;
      <D.35604>:
      isbyref = 1;
      D.35606 = info->modifiers;
      D.35607 = monoeg_g_list_append (D.35606, 0B);
      info->modifiers = D.35607;
      p.415 = p;
      p.417 = p.415;
      p.418 = p.417 + 1;
      p = p.418;
      *p.417 = 0;
      goto <D.23677>;
      <D.23678>:
      D.35606 = info->modifiers;
      D.35610 = monoeg_g_list_append (D.35606, 4294967295B);
      info->modifiers = D.35610;
      p.415 = p;
      p.419 = p.415;
      p.420 = p.419 + 1;
      p = p.420;
      *p.419 = 0;
      goto <D.23677>;
      <D.23679>:
      p.415 = p;
      p.421 = p.415;
      p.422 = p.421 + 1;
      p = p.422;
      *p.421 = 0;
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 == 0) goto <D.35615>; else goto <D.35616>;
      <D.35615>:
      D.35605 = 0;
      return D.35605;
      <D.35616>:
      p.415 = p;
      D.35619 = *p.415;
      D.35620 = D.35619 == 44;
      D.35621 = D.35619 == 42;
      D.35622 = D.35620 | D.35621;
      if (D.35622 != 0) goto <D.35617>; else goto <D.35623>;
      <D.35623>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 == 93) goto <D.35617>; else goto <D.35618>;
      <D.35617>:
      rank = 1;
      goto <D.23682>;
      <D.23681>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 == 93) goto <D.23680>; else goto <D.35624>;
      <D.35624>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 == 44) goto <D.35625>; else goto <D.35626>;
      <D.35625>:
      rank = rank + 1;
      goto <D.35627>;
      <D.35626>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 == 42) goto <D.35628>; else goto <D.35629>;
      <D.35628>:
      D.35606 = info->modifiers;
      D.35630 = monoeg_g_list_append (D.35606, 4294967294B);
      info->modifiers = D.35630;
      goto <D.35631>;
      <D.35629>:
      D.35605 = 0;
      return D.35605;
      <D.35631>:
      <D.35627>:
      p.415 = p;
      p.416 = p.415 + 1;
      p = p.416;
      <D.23682>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 != 0) goto <D.23681>; else goto <D.23680>;
      <D.23680>:
      p.415 = p;
      p.423 = p.415;
      p.424 = p.423 + 1;
      p = p.424;
      D.35634 = *p.423;
      if (D.35634 != 93) goto <D.35635>; else goto <D.35636>;
      <D.35635>:
      D.35605 = 0;
      return D.35605;
      <D.35636>:
      D.35606 = info->modifiers;
      rank.425 = (void *) rank;
      D.35638 = monoeg_g_list_append (D.35606, rank.425);
      info->modifiers = D.35638;
      goto <D.23692>;
      <D.35618>:
      if (rank != 0) goto <D.35639>; else goto <D.35640>;
      <D.35639>:
      D.35605 = 0;
      return D.35605;
      <D.35640>:
      D.35641 = monoeg_g_ptr_array_new ();
      info->type_arguments = D.35641;
      goto <D.23694>;
      <D.23693>:
      {
        struct MonoTypeNameParse * subinfo;
        gboolean fqname;

        subinfo = monoeg_malloc0 (80);
        fqname = 0;
        D.35642 = info->type_arguments;
        monoeg_g_ptr_array_add (D.35642, subinfo);
        p.415 = p;
        D.35587 = *p.415;
        if (D.35587 == 91) goto <D.35643>; else goto <D.35644>;
        <D.35643>:
        p.415 = p;
        p.416 = p.415 + 1;
        p = p.416;
        fqname = 1;
        <D.35644>:
        p.415 = p;
        D.35645 = _mono_reflection_parse_type (p.415, &p, 1, subinfo);
        if (D.35645 == 0) goto <D.35646>; else goto <D.35647>;
        <D.35646>:
        D.35605 = 0;
        return D.35605;
        <D.35647>:
        if (fqname != 0) goto <D.35650>; else goto <D.35648>;
        <D.35650>:
        p.415 = p;
        D.35587 = *p.415;
        if (D.35587 != 93) goto <D.35651>; else goto <D.35648>;
        <D.35651>:
        {
          char * aname;

          p.415 = p;
          D.35587 = *p.415;
          if (D.35587 != 44) goto <D.35652>; else goto <D.35653>;
          <D.35652>:
          D.35605 = 0;
          return D.35605;
          <D.35653>:
          p.415 = p;
          p.426 = p.415;
          p.427 = p.426 + 1;
          p = p.427;
          *p.426 = 0;
          aname = p;
          goto <D.23687>;
          <D.23686>:
          p.415 = p;
          p.416 = p.415 + 1;
          p = p.416;
          <D.23687>:
          p.415 = p;
          D.35656 = *p.415;
          D.35657 = D.35656 != 0;
          D.35658 = D.35656 != 93;
          D.35659 = D.35657 & D.35658;
          if (D.35659 != 0) goto <D.23686>; else goto <D.23688>;
          <D.23688>:
          p.415 = p;
          D.35587 = *p.415;
          if (D.35587 != 93) goto <D.35660>; else goto <D.35661>;
          <D.35660>:
          D.35605 = 0;
          return D.35605;
          <D.35661>:
          p.415 = p;
          p.428 = p.415;
          p.429 = p.428 + 1;
          p = p.429;
          *p.428 = 0;
          goto <D.23689>;
          <D.23691>:
          D.35664 = __ctype_b_loc ();
          D.35665 = *D.35664;
          D.35666 = *aname;
          D.35667 = (unsigned int) D.35666;
          D.35668 = D.35667 * 2;
          D.35669 = D.35665 + D.35668;
          D.35670 = *D.35669;
          D.35671 = (int) D.35670;
          D.35672 = D.35671 & 8192;
          if (D.35672 != 0) goto <D.35673>; else goto <D.35674>;
          <D.35673>:
          aname = aname + 1;
          // predicted unlikely by continue predictor.
          goto <D.23689>;
          <D.35674>:
          goto <D.23690>;
          <D.23689>:
          D.35666 = *aname;
          if (D.35666 != 0) goto <D.23691>; else goto <D.23690>;
          <D.23690>:
          D.35666 = *aname;
          if (D.35666 == 0) goto <D.35675>; else goto <D.35677>;
          <D.35677>:
          D.35678 = &subinfo->assembly;
          D.35679 = assembly_name_to_aname (D.35678, aname);
          if (D.35679 == 0) goto <D.35675>; else goto <D.35676>;
          <D.35675>:
          D.35605 = 0;
          return D.35605;
          <D.35676>:
        }
        goto <D.35649>;
        <D.35648>:
        if (fqname != 0) goto <D.35680>; else goto <D.35681>;
        <D.35680>:
        p.415 = p;
        D.35587 = *p.415;
        if (D.35587 == 93) goto <D.35682>; else goto <D.35683>;
        <D.35682>:
        p.415 = p;
        p.430 = p.415;
        p.431 = p.430 + 1;
        p = p.431;
        *p.430 = 0;
        <D.35683>:
        <D.35681>:
        <D.35649>:
        p.415 = p;
        D.35587 = *p.415;
        if (D.35587 == 93) goto <D.35686>; else goto <D.35687>;
        <D.35686>:
        p.415 = p;
        p.432 = p.415;
        p.433 = p.432 + 1;
        p = p.433;
        *p.432 = 0;
        goto <D.23692>;
        <D.35687>:
        p.415 = p;
        D.35587 = *p.415;
        if (D.35587 == 0) goto <D.35690>; else goto <D.35691>;
        <D.35690>:
        D.35605 = 0;
        return D.35605;
        <D.35691>:
        p.415 = p;
        p.434 = p.415;
        p.435 = p.434 + 1;
        p = p.435;
        *p.434 = 0;
      }
      <D.23694>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 != 0) goto <D.23693>; else goto <D.23692>;
      <D.23692>:
      goto <D.23677>;
      <D.23695>:
      if (is_recursed != 0) goto end; else goto <D.35694>;
      <D.35694>:
      D.35605 = 0;
      return D.35605;
      <D.23697>:
      if (is_recursed != 0) goto end; else goto <D.35695>;
      <D.35695>:
      p.415 = p;
      p.436 = p.415;
      p.437 = p.436 + 1;
      p = p.437;
      *p.436 = 0;
      goto <D.23698>;
      <D.23700>:
      D.35664 = __ctype_b_loc ();
      D.35665 = *D.35664;
      p.415 = p;
      D.35587 = *p.415;
      D.35698 = (unsigned int) D.35587;
      D.35699 = D.35698 * 2;
      D.35700 = D.35665 + D.35699;
      D.35701 = *D.35700;
      D.35702 = (int) D.35701;
      D.35703 = D.35702 & 8192;
      if (D.35703 != 0) goto <D.35704>; else goto <D.35705>;
      <D.35704>:
      p.415 = p;
      p.416 = p.415 + 1;
      p = p.416;
      // predicted unlikely by continue predictor.
      goto <D.23698>;
      <D.35705>:
      goto <D.23699>;
      <D.23698>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 != 0) goto <D.23700>; else goto <D.23699>;
      <D.23699>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 == 0) goto <D.35706>; else goto <D.35707>;
      <D.35706>:
      D.35605 = 0;
      return D.35605;
      <D.35707>:
      D.35583 = &info->assembly;
      p.415 = p;
      D.35708 = assembly_name_to_aname (D.35583, p.415);
      if (D.35708 == 0) goto <D.35709>; else goto <D.35710>;
      <D.35709>:
      D.35605 = 0;
      return D.35605;
      <D.35710>:
      goto <D.23677>;
      <D.23701>:
      D.35605 = 0;
      return D.35605;
      <D.23677>:
      D.35711 = info->assembly.name;
      if (D.35711 != 0B) goto <D.23702>; else goto <D.35712>;
      <D.35712>:
      <D.23704>:
      p.415 = p;
      D.35587 = *p.415;
      if (D.35587 != 0) goto <D.23703>; else goto <D.23702>;
      <D.23702>:
      end:
      D.35591 = info->name;
      if (D.35591 == 0B) goto <D.35713>; else goto <D.35715>;
      <D.35715>:
      D.35591 = info->name;
      D.35716 = *D.35591;
      if (D.35716 == 0) goto <D.35713>; else goto <D.35714>;
      <D.35713>:
      D.35605 = 0;
      return D.35605;
      <D.35714>:
      if (endptr != 0B) goto <D.35717>; else goto <D.35718>;
      <D.35717>:
      p.415 = p;
      *endptr = p.415;
      <D.35718>:
      D.35605 = 1;
      return D.35605;
    }
  finally
    {
      p = {CLOBBER};
    }
}


assembly_name_to_aname (struct MonoAssemblyName * assembly, char * p)
{
  mono_byte[17] * D.35722;
  char D.35723;
  const short unsigned int * * D.35727;
  const short unsigned int * D.35728;
  unsigned int D.35729;
  unsigned int D.35730;
  const short unsigned int * D.35731;
  short unsigned int D.35732;
  int D.35733;
  int D.35734;
  int D.35741;
  int D.35746;
  char * s.438;
  char * s.439;
  char * s.440;
  char * s.441;
  char D.35753;
  unsigned int D.35755;
  unsigned int D.35756;
  const short unsigned int * D.35757;
  short unsigned int D.35758;
  int D.35759;
  int D.35760;
  int D.35764;
  long unsigned int D.35766;
  short unsigned int D.35767;
  char * s.442;
  long unsigned int D.35772;
  short unsigned int D.35773;
  long unsigned int D.35777;
  short unsigned int D.35778;
  long unsigned int D.35782;
  short unsigned int D.35783;
  int D.35789;
  int D.35791;
  char D.35795;
  _Bool D.35796;
  _Bool D.35797;
  _Bool D.35798;
  int D.35801;
  int D.35803;
  char D.35807;
  _Bool D.35808;
  _Bool D.35809;
  _Bool D.35810;
  int p.443;
  int start.444;
  int D.35813;
  unsigned int len.445;
  char D.35817;
  _Bool D.35818;
  _Bool D.35819;
  _Bool D.35820;
  char * p.446;
  int found_sep;
  char * s;
  gboolean quoted;

  try
    {
      quoted = 0;
      memset (assembly, 0, 60);
      assembly->culture = "";
      D.35722 = &assembly->public_key_token;
      memset (D.35722, 0, 17);
      D.35723 = *p;
      if (D.35723 == 34) goto <D.35724>; else goto <D.35725>;
      <D.35724>:
      quoted = 1;
      p = p + 1;
      <D.35725>:
      assembly->name = p;
      goto <D.23612>;
      <D.23611>:
      p = p + 1;
      <D.23612>:
      D.35723 = *p;
      if (D.35723 != 0) goto <D.35726>; else goto <D.23613>;
      <D.35726>:
      D.35727 = __ctype_b_loc ();
      D.35728 = *D.35727;
      D.35723 = *p;
      D.35729 = (unsigned int) D.35723;
      D.35730 = D.35729 * 2;
      D.35731 = D.35728 + D.35730;
      D.35732 = *D.35731;
      D.35733 = (int) D.35732;
      D.35734 = D.35733 & 8;
      if (D.35734 != 0) goto <D.23611>; else goto <D.35735>;
      <D.35735>:
      D.35723 = *p;
      if (D.35723 == 46) goto <D.23611>; else goto <D.35736>;
      <D.35736>:
      D.35723 = *p;
      if (D.35723 == 45) goto <D.23611>; else goto <D.35737>;
      <D.35737>:
      D.35723 = *p;
      if (D.35723 == 95) goto <D.23611>; else goto <D.35738>;
      <D.35738>:
      D.35723 = *p;
      if (D.35723 == 36) goto <D.23611>; else goto <D.35739>;
      <D.35739>:
      D.35723 = *p;
      if (D.35723 == 64) goto <D.23611>; else goto <D.35740>;
      <D.35740>:
      D.35727 = __ctype_b_loc ();
      D.35728 = *D.35727;
      D.35723 = *p;
      D.35729 = (unsigned int) D.35723;
      D.35730 = D.35729 * 2;
      D.35731 = D.35728 + D.35730;
      D.35732 = *D.35731;
      D.35733 = (int) D.35732;
      D.35741 = D.35733 & 8192;
      if (D.35741 != 0) goto <D.23611>; else goto <D.23613>;
      <D.23613>:
      if (quoted != 0) goto <D.35742>; else goto <D.35743>;
      <D.35742>:
      D.35723 = *p;
      if (D.35723 != 34) goto <D.35744>; else goto <D.35745>;
      <D.35744>:
      D.35746 = 1;
      return D.35746;
      <D.35745>:
      *p = 0;
      p = p + 1;
      <D.35743>:
      D.35723 = *p;
      if (D.35723 != 44) goto <D.35747>; else goto <D.35748>;
      <D.35747>:
      D.35746 = 1;
      return D.35746;
      <D.35748>:
      *p = 0;
      s.438 = p + 4294967295;
      s = s.438;
      goto <D.23615>;
      <D.23614>:
      s.439 = s;
      s.440 = s.439;
      s.441 = s.440 + 4294967295;
      s = s.441;
      *s.440 = 0;
      <D.23615>:
      s.439 = s;
      D.35753 = *s.439;
      if (D.35753 != 0) goto <D.35754>; else goto <D.23616>;
      <D.35754>:
      D.35727 = __ctype_b_loc ();
      D.35728 = *D.35727;
      s.439 = s;
      D.35753 = *s.439;
      D.35755 = (unsigned int) D.35753;
      D.35756 = D.35755 * 2;
      D.35757 = D.35728 + D.35756;
      D.35758 = *D.35757;
      D.35759 = (int) D.35758;
      D.35760 = D.35759 & 8192;
      if (D.35760 != 0) goto <D.23614>; else goto <D.23616>;
      <D.23616>:
      p = p + 1;
      goto <D.23618>;
      <D.23617>:
      p = p + 1;
      <D.23618>:
      D.35727 = __ctype_b_loc ();
      D.35728 = *D.35727;
      D.35723 = *p;
      D.35729 = (unsigned int) D.35723;
      D.35730 = D.35729 * 2;
      D.35731 = D.35728 + D.35730;
      D.35732 = *D.35731;
      D.35733 = (int) D.35732;
      D.35741 = D.35733 & 8192;
      if (D.35741 != 0) goto <D.23617>; else goto <D.23619>;
      <D.23619>:
      goto <D.23644>;
      <D.23643>:
      D.35723 = *p;
      if (D.35723 == 86) goto <D.35763>; else goto <D.35761>;
      <D.35763>:
      D.35764 = monoeg_g_ascii_strncasecmp (p, "Version=", 8);
      if (D.35764 == 0) goto <D.35765>; else goto <D.35761>;
      <D.35765>:
      p = p + 8;
      D.35766 = strtoul (p, &s, 10);
      D.35767 = (short unsigned int) D.35766;
      assembly->major = D.35767;
      s.439 = s;
      if (s.439 == p) goto <D.35768>; else goto <D.35770>;
      <D.35770>:
      s.439 = s;
      D.35753 = *s.439;
      if (D.35753 != 46) goto <D.35768>; else goto <D.35769>;
      <D.35768>:
      D.35746 = 1;
      return D.35746;
      <D.35769>:
      s.439 = s;
      s.442 = s.439 + 1;
      s = s.442;
      p = s;
      D.35772 = strtoul (p, &s, 10);
      D.35773 = (short unsigned int) D.35772;
      assembly->minor = D.35773;
      s.439 = s;
      if (s.439 == p) goto <D.35774>; else goto <D.35776>;
      <D.35776>:
      s.439 = s;
      D.35753 = *s.439;
      if (D.35753 != 46) goto <D.35774>; else goto <D.35775>;
      <D.35774>:
      D.35746 = 1;
      return D.35746;
      <D.35775>:
      s.439 = s;
      s.442 = s.439 + 1;
      s = s.442;
      p = s;
      D.35777 = strtoul (p, &s, 10);
      D.35778 = (short unsigned int) D.35777;
      assembly->build = D.35778;
      s.439 = s;
      if (s.439 == p) goto <D.35779>; else goto <D.35781>;
      <D.35781>:
      s.439 = s;
      D.35753 = *s.439;
      if (D.35753 != 46) goto <D.35779>; else goto <D.35780>;
      <D.35779>:
      D.35746 = 1;
      return D.35746;
      <D.35780>:
      s.439 = s;
      s.442 = s.439 + 1;
      s = s.442;
      p = s;
      D.35782 = strtoul (p, &s, 10);
      D.35783 = (short unsigned int) D.35782;
      assembly->revision = D.35783;
      s.439 = s;
      if (s.439 == p) goto <D.35784>; else goto <D.35785>;
      <D.35784>:
      D.35746 = 1;
      return D.35746;
      <D.35785>:
      p = s;
      goto <D.35762>;
      <D.35761>:
      D.35723 = *p;
      if (D.35723 == 67) goto <D.35788>; else goto <D.35786>;
      <D.35788>:
      D.35789 = monoeg_g_ascii_strncasecmp (p, "Culture=", 8);
      if (D.35789 == 0) goto <D.35790>; else goto <D.35786>;
      <D.35790>:
      p = p + 8;
      D.35791 = monoeg_g_ascii_strncasecmp (p, "neutral", 7);
      if (D.35791 == 0) goto <D.35792>; else goto <D.35793>;
      <D.35792>:
      assembly->culture = "";
      p = p + 7;
      goto <D.35794>;
      <D.35793>:
      assembly->culture = p;
      goto <D.23621>;
      <D.23620>:
      p = p + 1;
      <D.23621>:
      D.35795 = *p;
      D.35796 = D.35795 != 0;
      D.35797 = D.35795 != 44;
      D.35798 = D.35796 & D.35797;
      if (D.35798 != 0) goto <D.23620>; else goto <D.23622>;
      <D.23622>:
      <D.35794>:
      goto <D.35787>;
      <D.35786>:
      D.35723 = *p;
      if (D.35723 == 80) goto <D.35800>; else goto <D.35799>;
      <D.35800>:
      D.35801 = monoeg_g_ascii_strncasecmp (p, "PublicKeyToken=", 15);
      if (D.35801 == 0) goto <D.35802>; else goto <D.35799>;
      <D.35802>:
      p = p + 15;
      D.35803 = strncmp (p, "null", 4);
      if (D.35803 == 0) goto <D.35804>; else goto <D.35805>;
      <D.35804>:
      p = p + 4;
      goto <D.35806>;
      <D.35805>:
      {
        int len;
        gchar * start;

        start = p;
        goto <D.23635>;
        <D.23634>:
        p = p + 1;
        <D.23635>:
        D.35807 = *p;
        D.35808 = D.35807 != 0;
        D.35809 = D.35807 != 44;
        D.35810 = D.35808 & D.35809;
        if (D.35810 != 0) goto <D.23634>; else goto <D.23636>;
        <D.23636>:
        p.443 = (int) p;
        start.444 = (int) start;
        D.35813 = p.443 - start.444;
        len = D.35813 + 1;
        if (len > 17) goto <D.35814>; else goto <D.35815>;
        <D.35814>:
        len = 17;
        <D.35815>:
        D.35722 = &assembly->public_key_token;
        len.445 = (unsigned int) len;
        monoeg_g_strlcpy (D.35722, start, len.445);
      }
      <D.35806>:
      goto <D.23639>;
      <D.35799>:
      goto <D.23638>;
      <D.23637>:
      p = p + 1;
      <D.23638>:
      D.35817 = *p;
      D.35818 = D.35817 != 0;
      D.35819 = D.35817 != 44;
      D.35820 = D.35818 & D.35819;
      if (D.35820 != 0) goto <D.23637>; else goto <D.23639>;
      <D.23639>:
      <D.35787>:
      <D.35762>:
      found_sep = 0;
      goto <D.23640>;
      <D.23641>:
      p.446 = p;
      p = p.446 + 1;
      *p.446 = 0;
      found_sep = 1;
      // predicted unlikely by continue predictor.
      goto <D.23640>;
      <D.23640>:
      D.35727 = __ctype_b_loc ();
      D.35728 = *D.35727;
      D.35723 = *p;
      D.35729 = (unsigned int) D.35723;
      D.35730 = D.35729 * 2;
      D.35731 = D.35728 + D.35730;
      D.35732 = *D.35731;
      D.35733 = (int) D.35732;
      D.35741 = D.35733 & 8192;
      if (D.35741 != 0) goto <D.23641>; else goto <D.35822>;
      <D.35822>:
      D.35723 = *p;
      if (D.35723 == 44) goto <D.23641>; else goto <D.23642>;
      <D.23642>:
      if (found_sep == 0) goto <D.35823>; else goto <D.35824>;
      <D.35823>:
      D.35746 = 1;
      return D.35746;
      <D.35824>:
      <D.23644>:
      D.35723 = *p;
      if (D.35723 != 0) goto <D.23643>; else goto <D.23645>;
      <D.23645>:
      D.35746 = 0;
      return D.35746;
    }
  finally
    {
      s = {CLOBBER};
    }
}


mono_reflection_get_type (struct MonoImage * image, struct MonoTypeNameParse * info, gboolean ignorecase, gboolean * type_resolve)
{
  struct MonoType * D.35827;

  D.35827 = mono_reflection_get_type_with_rootimage (image, image, info, ignorecase, type_resolve);
  return D.35827;
}


mono_reflection_get_type_with_rootimage (struct MonoImage * rootimage, struct MonoImage * image, struct MonoTypeNameParse * info, gboolean ignorecase, gboolean * type_resolve)
{
  unsigned char D.35832;
  unsigned char D.35833;
  struct MonoAssembly * D.35835;
  struct MonoType * D.35838;
  struct MonoDomain * D.35839;
  int D.35840;
  int D.35845;
  char * D.35850;
  char D.35852;
  char * D.35854;
  void * D.35855;
  struct MonoDomain * D.35856;
  char * D.35857;
  struct MonoAssembly * D.35860;
  unsigned char D.35861;
  struct MonoImage * D.35865;
  struct MonoType * type;
  struct MonoReflectionAssembly * assembly;
  struct GString * fullName;
  struct GList * mod;

  if (image != 0B) goto <D.35831>; else goto <D.35829>;
  <D.35831>:
  D.35832 = BIT_FIELD_REF <*image, 8, 128>;
  D.35833 = D.35832 & 8;
  if (D.35833 != 0) goto <D.35834>; else goto <D.35829>;
  <D.35834>:
  D.35835 = image->assembly;
  type = mono_reflection_get_type_internal_dynamic (rootimage, D.35835, info, ignorecase);
  goto <D.35830>;
  <D.35829>:
  type = mono_reflection_get_type_internal (rootimage, image, info, ignorecase);
  <D.35830>:
  if (type != 0B) goto <D.35836>; else goto <D.35837>;
  <D.35836>:
  D.35838 = type;
  return D.35838;
  <D.35837>:
  D.35839 = mono_domain_get ();
  D.35840 = mono_domain_has_type_resolve (D.35839);
  if (D.35840 == 0) goto <D.35841>; else goto <D.35842>;
  <D.35841>:
  D.35838 = 0B;
  return D.35838;
  <D.35842>:
  if (type_resolve != 0B) goto <D.35843>; else goto <D.35844>;
  <D.35843>:
  D.35845 = *type_resolve;
  if (D.35845 != 0) goto <D.35846>; else goto <D.35847>;
  <D.35846>:
  D.35838 = 0B;
  return D.35838;
  <D.35847>:
  *type_resolve = 1;
  <D.35844>:
  fullName = monoeg_g_string_new ("");
  D.35850 = info->name_space;
  if (D.35850 != 0B) goto <D.35851>; else goto <D.35848>;
  <D.35851>:
  D.35850 = info->name_space;
  D.35852 = *D.35850;
  if (D.35852 != 0) goto <D.35853>; else goto <D.35848>;
  <D.35853>:
  D.35850 = info->name_space;
  D.35854 = info->name;
  monoeg_g_string_printf (fullName, "%s.%s", D.35850, D.35854);
  goto <D.35849>;
  <D.35848>:
  D.35854 = info->name;
  monoeg_g_string_printf (fullName, "%s", D.35854);
  <D.35849>:
  mod = info->nested;
  goto <D.23791>;
  <D.23790>:
  D.35855 = mod->data;
  monoeg_g_string_append_printf (fullName, "+%s", D.35855);
  mod = mod->next;
  <D.23791>:
  if (mod != 0B) goto <D.23790>; else goto <D.23792>;
  <D.23792>:
  D.35856 = mono_domain_get ();
  D.35857 = fullName->str;
  assembly = mono_domain_try_type_resolve (D.35856, D.35857, 0B);
  if (assembly != 0B) goto <D.35858>; else goto <D.35859>;
  <D.35858>:
  D.35860 = assembly->assembly;
  D.35861 = D.35860->dynamic;
  if (D.35861 != 0) goto <D.35862>; else goto <D.35863>;
  <D.35862>:
  D.35860 = assembly->assembly;
  type = mono_reflection_get_type_internal_dynamic (rootimage, D.35860, info, ignorecase);
  goto <D.35864>;
  <D.35863>:
  D.35860 = assembly->assembly;
  D.35865 = D.35860->image;
  type = mono_reflection_get_type_internal (rootimage, D.35865, info, ignorecase);
  <D.35864>:
  <D.35859>:
  monoeg_g_string_free (fullName, 1);
  D.35838 = type;
  return D.35838;
}


mono_reflection_get_type_internal_dynamic (struct MonoImage * rootimage, struct MonoAssembly * assembly, struct MonoTypeNameParse * info, gboolean ignorecase)
{
  unsigned char D.35867;
  _Bool D.35868;
  long int D.35869;
  long int D.35870;
  struct MonoDomain * D.35873;
  struct MonoArray * D.35874;
  unsigned int i.447;
  char * D.35878;
  struct MonoDynamicImage * D.35879;
  struct MonoImage * D.35880;
  unsigned int D.35882;
  struct MonoArray * D.35885;
  char * D.35888;
  struct MonoImage * D.35889;
  unsigned int D.35891;
  struct MonoType * D.35892;
  struct MonoReflectionAssemblyBuilder * abuilder;
  struct MonoType * type;
  int i;

  D.35867 = assembly->dynamic;
  D.35868 = D.35867 == 0;
  D.35869 = (long int) D.35868;
  D.35870 = __builtin_expect (D.35869, 0);
  if (D.35870 != 0) goto <D.35871>; else goto <D.35872>;
  <D.35871>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 7574, "assembly->dynamic");
  <D.35872>:
  D.35873 = MEM[(struct MonoDynamicAssembly *)assembly].domain;
  abuilder = mono_assembly_get_object (D.35873, assembly);
  type = 0B;
  D.35874 = abuilder->modules;
  if (D.35874 != 0B) goto <D.35875>; else goto <D.35876>;
  <D.35875>:
  i = 0;
  goto <D.23774>;
  <D.23773>:
  {
    struct MonoReflectionModuleBuilder * mb;

    D.35874 = abuilder->modules;
    i.447 = (unsigned int) i;
    D.35878 = mono_array_addr_with_size (D.35874, 4, i.447);
    mb = MEM[(struct MonoReflectionModuleBuilder * *)D.35878];
    D.35879 = mb->dynamic_image;
    D.35880 = &D.35879->image;
    type = mono_reflection_get_type_internal (rootimage, D.35880, info, ignorecase);
    if (type != 0B) goto <D.23772>; else goto <D.35881>;
    <D.35881>:
  }
  i = i + 1;
  <D.23774>:
  i.447 = (unsigned int) i;
  D.35874 = abuilder->modules;
  D.35882 = mono_array_length (D.35874);
  if (i.447 < D.35882) goto <D.23773>; else goto <D.23772>;
  <D.23772>:
  <D.35876>:
  if (type == 0B) goto <D.35883>; else goto <D.35884>;
  <D.35883>:
  D.35885 = abuilder->loaded_modules;
  if (D.35885 != 0B) goto <D.35886>; else goto <D.35887>;
  <D.35886>:
  i = 0;
  goto <D.23778>;
  <D.23777>:
  {
    struct MonoReflectionModule * mod;

    D.35885 = abuilder->loaded_modules;
    i.447 = (unsigned int) i;
    D.35888 = mono_array_addr_with_size (D.35885, 4, i.447);
    mod = MEM[(struct MonoReflectionModule * *)D.35888];
    D.35889 = mod->image;
    type = mono_reflection_get_type_internal (rootimage, D.35889, info, ignorecase);
    if (type != 0B) goto <D.23776>; else goto <D.35890>;
    <D.35890>:
  }
  i = i + 1;
  <D.23778>:
  i.447 = (unsigned int) i;
  D.35885 = abuilder->loaded_modules;
  D.35891 = mono_array_length (D.35885);
  if (i.447 < D.35891) goto <D.23777>; else goto <D.23776>;
  <D.23776>:
  <D.35887>:
  <D.35884>:
  D.35892 = type;
  return D.35892;
}


mono_reflection_get_type_internal (struct MonoImage * rootimage, struct MonoImage * image, struct MonoTypeNameParse * info, gboolean ignorecase)
{
  char * D.35898;
  char * D.35899;
  struct MonoType * D.35903;
  const char * D.35906;
  void * D.35907;
  int D.35908;
  int D.23739;
  struct GPtrArray * D.35915;
  unsigned int D.35918;
  unsigned int D.35919;
  void * * D.35920;
  unsigned int i.448;
  unsigned int D.35922;
  void * * D.35923;
  struct MonoType * * D.35924;
  struct MonoType * D.35925;
  struct MonoType * D.35926;
  unsigned int i.449;
  struct MonoDomain * D.35930;
  struct MonoType * D.35931;
  int D.35932;
  unsigned int modval.450;
  struct MonoClass * klass;
  struct GList * mod;
  int modval;
  gboolean bounded;

  bounded = 0;
  if (image == 0B) goto <D.35894>; else goto <D.35895>;
  <D.35894>:
  image = mono_defaults.corlib;
  <D.35895>:
  if (ignorecase != 0) goto <D.35896>; else goto <D.35897>;
  <D.35896>:
  D.35898 = info->name_space;
  D.35899 = info->name;
  klass = mono_class_from_name_case (image, D.35898, D.35899);
  goto <D.35900>;
  <D.35897>:
  D.35898 = info->name_space;
  D.35899 = info->name;
  klass = mono_class_from_name (image, D.35898, D.35899);
  <D.35900>:
  if (klass == 0B) goto <D.35901>; else goto <D.35902>;
  <D.35901>:
  D.35903 = 0B;
  return D.35903;
  <D.35902>:
  mod = info->nested;
  goto <D.23744>;
  <D.23743>:
  {
    void * iter;
    struct MonoClass * parent;

    try
      {
        iter = 0B;
        parent = klass;
        mono_class_init (parent);
        goto <D.23741>;
        <D.23740>:
        if (ignorecase != 0) goto <D.35904>; else goto <D.35905>;
        <D.35904>:
        D.35906 = klass->name;
        D.35907 = mod->data;
        D.35908 = monoeg_ascii_strcasecmp (D.35906, D.35907);
        if (D.35908 == 0) goto <D.23730>; else goto <D.35909>;
        <D.35909>:
        goto <D.35910>;
        <D.35905>:
        {
          size_t __s1_len;
          size_t __s2_len;

          D.35906 = klass->name;
          D.35907 = mod->data;
          D.23739 = __builtin_strcmp (D.35906, D.35907);
        }
        if (D.23739 == 0) goto <D.23730>; else goto <D.35911>;
        <D.35911>:
        <D.35910>:
        <D.23741>:
        klass = mono_class_get_nested_types (parent, &iter);
        if (klass != 0B) goto <D.23740>; else goto <D.23730>;
        <D.23730>:
        if (klass == 0B) goto <D.23742>; else goto <D.35912>;
        <D.35912>:
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  mod = mod->next;
  <D.23744>:
  if (mod != 0B) goto <D.23743>; else goto <D.23742>;
  <D.23742>:
  if (klass == 0B) goto <D.35913>; else goto <D.35914>;
  <D.35913>:
  D.35903 = 0B;
  return D.35903;
  <D.35914>:
  D.35915 = info->type_arguments;
  if (D.35915 != 0B) goto <D.35916>; else goto <D.35917>;
  <D.35916>:
  {
    struct MonoType * * type_args;
    struct MonoReflectionType * the_type;
    struct MonoType * instance;
    int i;

    D.35915 = info->type_arguments;
    D.35918 = D.35915->len;
    D.35919 = D.35918 * 4;
    type_args = monoeg_malloc0 (D.35919);
    i = 0;
    goto <D.23751>;
    <D.23750>:
    {
      struct MonoTypeNameParse * subinfo;

      D.35915 = info->type_arguments;
      D.35920 = D.35915->pdata;
      i.448 = (unsigned int) i;
      D.35922 = i.448 * 4;
      D.35923 = D.35920 + D.35922;
      subinfo = *D.35923;
      i.448 = (unsigned int) i;
      D.35922 = i.448 * 4;
      D.35924 = type_args + D.35922;
      D.35925 = _mono_reflection_get_type_from_info (subinfo, rootimage, ignorecase);
      *D.35924 = D.35925;
      i.448 = (unsigned int) i;
      D.35922 = i.448 * 4;
      D.35924 = type_args + D.35922;
      D.35926 = *D.35924;
      if (D.35926 == 0B) goto <D.35927>; else goto <D.35928>;
      <D.35927>:
      monoeg_g_free (type_args);
      D.35903 = 0B;
      return D.35903;
      <D.35928>:
    }
    i = i + 1;
    <D.23751>:
    i.449 = (unsigned int) i;
    D.35915 = info->type_arguments;
    D.35918 = D.35915->len;
    if (i.449 < D.35918) goto <D.23750>; else goto <D.23752>;
    <D.23752>:
    D.35930 = mono_domain_get ();
    D.35931 = &klass->byval_arg;
    the_type = mono_type_get_object (D.35930, D.35931);
    D.35915 = info->type_arguments;
    D.35918 = D.35915->len;
    D.35932 = (int) D.35918;
    instance = mono_reflection_bind_generic_parameters (the_type, D.35932, type_args);
    monoeg_g_free (type_args);
    if (instance == 0B) goto <D.35933>; else goto <D.35934>;
    <D.35933>:
    D.35903 = 0B;
    return D.35903;
    <D.35934>:
    klass = mono_class_from_mono_type (instance);
  }
  <D.35917>:
  mod = info->modifiers;
  goto <D.23754>;
  <D.23753>:
  D.35907 = mod->data;
  modval = (int) D.35907;
  if (modval == 0) goto <D.35935>; else goto <D.35936>;
  <D.35935>:
  D.35903 = &klass->this_arg;
  return D.35903;
  <D.35936>:
  if (modval == -1) goto <D.35937>; else goto <D.35938>;
  <D.35937>:
  D.35931 = &klass->byval_arg;
  klass = mono_ptr_class_get (D.35931);
  goto <D.35939>;
  <D.35938>:
  if (modval == -2) goto <D.35940>; else goto <D.35941>;
  <D.35940>:
  bounded = 1;
  goto <D.35942>;
  <D.35941>:
  modval.450 = (unsigned int) modval;
  klass = mono_bounded_array_class_get (klass, modval.450, bounded);
  <D.35942>:
  <D.35939>:
  mod = mod->next;
  <D.23754>:
  if (mod != 0B) goto <D.23753>; else goto <D.23755>;
  <D.23755>:
  D.35903 = &klass->byval_arg;
  return D.35903;
}


_mono_reflection_get_type_from_info (struct MonoTypeNameParse * info, struct MonoImage * image, gboolean ignorecase)
{
  const char * D.35947;
  struct MonoAssemblyName * D.35950;
  _Bool D.35951;
  _Bool D.35952;
  _Bool D.35953;
  struct MonoAssembly * D.35956;
  struct MonoAssemblyName * D.35959;
  int D.35960;
  struct MonoType * D.35967;
  struct MonoImage * D.35975;
  gboolean type_resolve;
  struct MonoType * type;
  struct MonoImage * rootimage;

  try
    {
      type_resolve = 0;
      rootimage = image;
      D.35947 = info->assembly.name;
      if (D.35947 != 0B) goto <D.35948>; else goto <D.35949>;
      <D.35948>:
      {
        struct MonoAssembly * assembly;

        D.35950 = &info->assembly;
        assembly = mono_assembly_loaded (D.35950);
        D.35951 = assembly == 0B;
        D.35952 = image != 0B;
        D.35953 = D.35951 & D.35952;
        if (D.35953 != 0) goto <D.35954>; else goto <D.35955>;
        <D.35954>:
        D.35956 = image->assembly;
        if (D.35956 != 0B) goto <D.35957>; else goto <D.35958>;
        <D.35957>:
        D.35950 = &info->assembly;
        D.35956 = image->assembly;
        D.35959 = &D.35956->aname;
        D.35960 = mono_assembly_names_equal (D.35950, D.35959);
        if (D.35960 != 0) goto <D.35961>; else goto <D.35962>;
        <D.35961>:
        assembly = image->assembly;
        <D.35962>:
        <D.35958>:
        <D.35955>:
        if (assembly == 0B) goto <D.35963>; else goto <D.35964>;
        <D.35963>:
        D.35950 = &info->assembly;
        assembly = mono_assembly_load (D.35950, 0B, 0B);
        if (assembly == 0B) goto <D.35965>; else goto <D.35966>;
        <D.35965>:
        D.35967 = 0B;
        return D.35967;
        <D.35966>:
        <D.35964>:
        image = assembly->image;
      }
      goto <D.35968>;
      <D.35949>:
      if (image == 0B) goto <D.35969>; else goto <D.35970>;
      <D.35969>:
      image = mono_defaults.corlib;
      <D.35970>:
      <D.35968>:
      type = mono_reflection_get_type_with_rootimage (rootimage, image, info, ignorecase, &type_resolve);
      if (type == 0B) goto <D.35971>; else goto <D.35972>;
      <D.35971>:
      D.35947 = info->assembly.name;
      if (D.35947 == 0B) goto <D.35973>; else goto <D.35974>;
      <D.35973>:
      D.35975 = mono_defaults.corlib;
      if (D.35975 != image) goto <D.35976>; else goto <D.35977>;
      <D.35976>:
      image = mono_defaults.corlib;
      type = mono_reflection_get_type_with_rootimage (rootimage, image, info, ignorecase, &type_resolve);
      <D.35977>:
      <D.35974>:
      <D.35972>:
      D.35967 = type;
      return D.35967;
    }
  finally
    {
      type_resolve = {CLOBBER};
    }
}


mono_reflection_free_type_info (struct MonoTypeNameParse * info)
{
  struct GList * D.35980;
  struct GList * D.35981;
  struct GPtrArray * D.35982;
  void * * D.35985;
  unsigned int i.451;
  unsigned int D.35987;
  void * * D.35988;
  unsigned int i.452;
  unsigned int D.35990;

  D.35980 = info->modifiers;
  monoeg_g_list_free (D.35980);
  D.35981 = info->nested;
  monoeg_g_list_free (D.35981);
  D.35982 = info->type_arguments;
  if (D.35982 != 0B) goto <D.35983>; else goto <D.35984>;
  <D.35983>:
  {
    int i;

    i = 0;
    goto <D.23799>;
    <D.23798>:
    {
      struct MonoTypeNameParse * subinfo;

      D.35982 = info->type_arguments;
      D.35985 = D.35982->pdata;
      i.451 = (unsigned int) i;
      D.35987 = i.451 * 4;
      D.35988 = D.35985 + D.35987;
      subinfo = *D.35988;
      mono_reflection_free_type_info (subinfo);
      monoeg_g_free (subinfo);
    }
    i = i + 1;
    <D.23799>:
    i.452 = (unsigned int) i;
    D.35982 = info->type_arguments;
    D.35990 = D.35982->len;
    if (i.452 < D.35990) goto <D.23798>; else goto <D.23800>;
    <D.23800>:
    D.35982 = info->type_arguments;
    monoeg_g_ptr_array_free (D.35982, 1);
  }
  <D.35984>:
}


mono_reflection_type_from_name (char * name, struct MonoImage * image)
{
  int D.35991;
  struct MonoType * D.35994;
  struct MonoType * type;
  struct MonoTypeNameParse info;
  char * tmp;

  try
    {
      type = 0B;
      tmp = monoeg_strdup (name);
      D.35991 = mono_reflection_parse_type (tmp, &info);
      if (D.35991 != 0) goto <D.35992>; else goto <D.35993>;
      <D.35992>:
      type = _mono_reflection_get_type_from_info (&info, image, 0);
      <D.35993>:
      monoeg_g_free (tmp);
      mono_reflection_free_type_info (&info);
      D.35994 = type;
      return D.35994;
    }
  finally
    {
      info = {CLOBBER};
    }
}


mono_reflection_get_token (struct MonoObject * obj)
{
  struct MonoVTable * D.35997;
  int D.23821;
  int iftmp.453;
  int D.23820;
  const char[14] * D.36001;
  unsigned char D.36002;
  int D.36003;
  unsigned char D.36004;
  int D.36005;
  _Bool D.36006;
  _Bool D.36007;
  _Bool D.36008;
  const unsigned char * D.36011;
  unsigned char D.36012;
  int D.36013;
  const unsigned char * D.36014;
  unsigned char D.36015;
  int D.36016;
  _Bool D.36017;
  _Bool D.36018;
  const unsigned char * D.36021;
  unsigned char D.36022;
  int D.36023;
  const unsigned char * D.36024;
  unsigned char D.36025;
  int D.36026;
  _Bool D.36027;
  _Bool D.36028;
  const unsigned char * D.36031;
  unsigned char D.36032;
  int D.36033;
  const unsigned char * D.36034;
  unsigned char D.36035;
  int D.36036;
  const char * D.36038;
  unsigned int D.36041;
  int D.23831;
  int iftmp.454;
  int D.23830;
  const char[19] * D.36046;
  unsigned char D.36047;
  int D.36048;
  unsigned char D.36049;
  int D.36050;
  _Bool D.36051;
  _Bool D.36052;
  _Bool D.36053;
  const unsigned char * D.36056;
  unsigned char D.36057;
  int D.36058;
  const unsigned char * D.36059;
  unsigned char D.36060;
  int D.36061;
  _Bool D.36062;
  _Bool D.36063;
  const unsigned char * D.36066;
  unsigned char D.36067;
  int D.36068;
  const unsigned char * D.36069;
  unsigned char D.36070;
  int D.36071;
  _Bool D.36072;
  _Bool D.36073;
  const unsigned char * D.36076;
  unsigned char D.36077;
  int D.36078;
  const unsigned char * D.36079;
  unsigned char D.36080;
  int D.36081;
  unsigned int D.36085;
  int D.23841;
  int iftmp.455;
  int D.23840;
  const char[13] * D.36090;
  unsigned char D.36091;
  int D.36092;
  unsigned char D.36093;
  int D.36094;
  _Bool D.36095;
  _Bool D.36096;
  _Bool D.36097;
  const unsigned char * D.36100;
  unsigned char D.36101;
  int D.36102;
  const unsigned char * D.36103;
  unsigned char D.36104;
  int D.36105;
  _Bool D.36106;
  _Bool D.36107;
  const unsigned char * D.36110;
  unsigned char D.36111;
  int D.36112;
  const unsigned char * D.36113;
  unsigned char D.36114;
  int D.36115;
  _Bool D.36116;
  _Bool D.36117;
  const unsigned char * D.36120;
  unsigned char D.36121;
  int D.36122;
  const unsigned char * D.36123;
  unsigned char D.36124;
  int D.36125;
  int D.36129;
  int D.36130;
  int D.23851;
  int iftmp.456;
  int D.23850;
  const char[12] * D.36135;
  unsigned char D.36136;
  int D.36137;
  unsigned char D.36138;
  int D.36139;
  _Bool D.36140;
  _Bool D.36141;
  _Bool D.36142;
  const unsigned char * D.36145;
  unsigned char D.36146;
  int D.36147;
  const unsigned char * D.36148;
  unsigned char D.36149;
  int D.36150;
  _Bool D.36151;
  _Bool D.36152;
  const unsigned char * D.36155;
  unsigned char D.36156;
  int D.36157;
  const unsigned char * D.36158;
  unsigned char D.36159;
  int D.36160;
  _Bool D.36161;
  _Bool D.36162;
  const unsigned char * D.36165;
  unsigned char D.36166;
  int D.36167;
  const unsigned char * D.36168;
  unsigned char D.36169;
  int D.36170;
  unsigned int D.36174;
  int D.23861;
  int iftmp.457;
  int D.23860;
  const char[9] * D.36179;
  unsigned char D.36180;
  int D.36181;
  unsigned char D.36182;
  int D.36183;
  _Bool D.36184;
  _Bool D.36185;
  _Bool D.36186;
  const unsigned char * D.36189;
  unsigned char D.36190;
  int D.36191;
  const unsigned char * D.36192;
  unsigned char D.36193;
  int D.36194;
  _Bool D.36195;
  _Bool D.36196;
  const unsigned char * D.36199;
  unsigned char D.36200;
  int D.36201;
  const unsigned char * D.36202;
  unsigned char D.36203;
  int D.36204;
  _Bool D.36205;
  _Bool D.36206;
  const unsigned char * D.36209;
  unsigned char D.36210;
  int D.36211;
  const unsigned char * D.36212;
  unsigned char D.36213;
  int D.36214;
  int D.36218;
  struct MonoException * D.36221;
  int D.23872;
  int iftmp.458;
  int D.23871;
  const char[12] * D.36229;
  unsigned char D.36230;
  int D.36231;
  unsigned char D.36232;
  int D.36233;
  _Bool D.36234;
  _Bool D.36235;
  _Bool D.36236;
  const unsigned char * D.36239;
  unsigned char D.36240;
  int D.36241;
  const unsigned char * D.36242;
  unsigned char D.36243;
  int D.36244;
  _Bool D.36245;
  _Bool D.36246;
  const unsigned char * D.36249;
  unsigned char D.36250;
  int D.36251;
  const unsigned char * D.36252;
  unsigned char D.36253;
  int D.36254;
  _Bool D.36255;
  _Bool D.36256;
  const unsigned char * D.36259;
  unsigned char D.36260;
  int D.36261;
  const unsigned char * D.36262;
  unsigned char D.36263;
  int D.36264;
  int D.23881;
  int iftmp.459;
  int D.23880;
  const char[11] * D.36270;
  unsigned char D.36271;
  int D.36272;
  unsigned char D.36273;
  int D.36274;
  _Bool D.36275;
  _Bool D.36276;
  _Bool D.36277;
  const unsigned char * D.36280;
  unsigned char D.36281;
  int D.36282;
  const unsigned char * D.36283;
  unsigned char D.36284;
  int D.36285;
  _Bool D.36286;
  _Bool D.36287;
  const unsigned char * D.36290;
  unsigned char D.36291;
  int D.36292;
  const unsigned char * D.36293;
  unsigned char D.36294;
  int D.36295;
  _Bool D.36296;
  _Bool D.36297;
  const unsigned char * D.36300;
  unsigned char D.36301;
  int D.36302;
  const unsigned char * D.36303;
  unsigned char D.36304;
  int D.36305;
  int D.23890;
  int iftmp.460;
  int D.23889;
  const char[18] * D.36311;
  unsigned char D.36312;
  int D.36313;
  unsigned char D.36314;
  int D.36315;
  _Bool D.36316;
  _Bool D.36317;
  _Bool D.36318;
  const unsigned char * D.36321;
  unsigned char D.36322;
  int D.36323;
  const unsigned char * D.36324;
  unsigned char D.36325;
  int D.36326;
  _Bool D.36327;
  _Bool D.36328;
  const unsigned char * D.36331;
  unsigned char D.36332;
  int D.36333;
  const unsigned char * D.36334;
  unsigned char D.36335;
  int D.36336;
  _Bool D.36337;
  _Bool D.36338;
  const unsigned char * D.36341;
  unsigned char D.36342;
  int D.36343;
  const unsigned char * D.36344;
  unsigned char D.36345;
  int D.36346;
  int D.23899;
  int iftmp.461;
  int D.23898;
  const char[19] * D.36352;
  unsigned char D.36353;
  int D.36354;
  unsigned char D.36355;
  int D.36356;
  _Bool D.36357;
  _Bool D.36358;
  _Bool D.36359;
  const unsigned char * D.36362;
  unsigned char D.36363;
  int D.36364;
  const unsigned char * D.36365;
  unsigned char D.36366;
  int D.36367;
  _Bool D.36368;
  _Bool D.36369;
  const unsigned char * D.36372;
  unsigned char D.36373;
  int D.36374;
  const unsigned char * D.36375;
  unsigned char D.36376;
  int D.36377;
  _Bool D.36378;
  _Bool D.36379;
  const unsigned char * D.36382;
  unsigned char D.36383;
  int D.36384;
  const unsigned char * D.36385;
  unsigned char D.36386;
  int D.36387;
  struct MonoMethod * D.36389;
  unsigned char D.36390;
  unsigned char D.36391;
  uint32_t D.36394;
  struct MonoMethod * D.36395;
  int D.23910;
  int iftmp.462;
  int D.23909;
  const char[10] * D.36399;
  unsigned char D.36400;
  int D.36401;
  unsigned char D.36402;
  int D.36403;
  _Bool D.36404;
  _Bool D.36405;
  _Bool D.36406;
  const unsigned char * D.36409;
  unsigned char D.36410;
  int D.36411;
  const unsigned char * D.36412;
  unsigned char D.36413;
  int D.36414;
  _Bool D.36415;
  _Bool D.36416;
  const unsigned char * D.36419;
  unsigned char D.36420;
  int D.36421;
  const unsigned char * D.36422;
  unsigned char D.36423;
  int D.36424;
  _Bool D.36425;
  _Bool D.36426;
  const unsigned char * D.36429;
  unsigned char D.36430;
  int D.36431;
  const unsigned char * D.36432;
  unsigned char D.36433;
  int D.36434;
  struct MonoClassField * D.36438;
  int D.36439;
  struct MonoClass * D.36442;
  int D.36443;
  struct MonoClassField * D.36444;
  int D.36445;
  int D.36446;
  int iftmp.463;
  int D.36452;
  _Bool D.36453;
  long int D.36454;
  long int D.36455;
  struct MonoObject * * D.36458;
  unsigned int field_index.464;
  unsigned int D.36460;
  struct MonoObject * * D.36461;
  int D.23923;
  int iftmp.465;
  int D.23922;
  const char[13] * D.36466;
  unsigned char D.36467;
  int D.36468;
  unsigned char D.36469;
  int D.36470;
  _Bool D.36471;
  _Bool D.36472;
  _Bool D.36473;
  const unsigned char * D.36476;
  unsigned char D.36477;
  int D.36478;
  const unsigned char * D.36479;
  unsigned char D.36480;
  int D.36481;
  _Bool D.36482;
  _Bool D.36483;
  const unsigned char * D.36486;
  unsigned char D.36487;
  int D.36488;
  const unsigned char * D.36489;
  unsigned char D.36490;
  int D.36491;
  _Bool D.36492;
  _Bool D.36493;
  const unsigned char * D.36496;
  unsigned char D.36497;
  int D.36498;
  const unsigned char * D.36499;
  unsigned char D.36500;
  int D.36501;
  struct MonoProperty * D.36505;
  int D.23933;
  int iftmp.466;
  int D.23932;
  const char[10] * D.36510;
  unsigned char D.36511;
  int D.36512;
  unsigned char D.36513;
  int D.36514;
  _Bool D.36515;
  _Bool D.36516;
  _Bool D.36517;
  const unsigned char * D.36520;
  unsigned char D.36521;
  int D.36522;
  const unsigned char * D.36523;
  unsigned char D.36524;
  int D.36525;
  _Bool D.36526;
  _Bool D.36527;
  const unsigned char * D.36530;
  unsigned char D.36531;
  int D.36532;
  const unsigned char * D.36533;
  unsigned char D.36534;
  int D.36535;
  _Bool D.36536;
  _Bool D.36537;
  const unsigned char * D.36540;
  unsigned char D.36541;
  int D.36542;
  const unsigned char * D.36543;
  unsigned char D.36544;
  int D.36545;
  struct MonoEvent * D.36549;
  int D.23943;
  int iftmp.467;
  int D.23942;
  const char[14] * D.36557;
  unsigned char D.36558;
  int D.36559;
  unsigned char D.36560;
  int D.36561;
  _Bool D.36562;
  _Bool D.36563;
  _Bool D.36564;
  const unsigned char * D.36567;
  unsigned char D.36568;
  int D.36569;
  const unsigned char * D.36570;
  unsigned char D.36571;
  int D.36572;
  _Bool D.36573;
  _Bool D.36574;
  const unsigned char * D.36577;
  unsigned char D.36578;
  int D.36579;
  const unsigned char * D.36580;
  unsigned char D.36581;
  int D.36582;
  _Bool D.36583;
  _Bool D.36584;
  const unsigned char * D.36587;
  unsigned char D.36588;
  int D.36589;
  const unsigned char * D.36590;
  unsigned char D.36591;
  int D.36592;
  int D.23952;
  int iftmp.468;
  int D.23951;
  const char[18] * D.36598;
  unsigned char D.36599;
  int D.36600;
  unsigned char D.36601;
  int D.36602;
  _Bool D.36603;
  _Bool D.36604;
  _Bool D.36605;
  const unsigned char * D.36608;
  unsigned char D.36609;
  int D.36610;
  const unsigned char * D.36611;
  unsigned char D.36612;
  int D.36613;
  _Bool D.36614;
  _Bool D.36615;
  const unsigned char * D.36618;
  unsigned char D.36619;
  int D.36620;
  const unsigned char * D.36621;
  unsigned char D.36622;
  int D.36623;
  _Bool D.36624;
  _Bool D.36625;
  const unsigned char * D.36628;
  unsigned char D.36629;
  int D.36630;
  const unsigned char * D.36631;
  unsigned char D.36632;
  int D.36633;
  struct MonoObject * D.36635;
  struct MonoVTable * D.36636;
  int D.36637;
  _Bool D.36638;
  long int D.36639;
  long int D.36640;
  struct MonoMethod * D.36643;
  int D.36644;
  int D.23963;
  int iftmp.469;
  int D.23962;
  const char[7] * D.36651;
  unsigned char D.36652;
  int D.36653;
  unsigned char D.36654;
  int D.36655;
  _Bool D.36656;
  _Bool D.36657;
  _Bool D.36658;
  const unsigned char * D.36661;
  unsigned char D.36662;
  int D.36663;
  const unsigned char * D.36664;
  unsigned char D.36665;
  int D.36666;
  _Bool D.36667;
  _Bool D.36668;
  const unsigned char * D.36671;
  unsigned char D.36672;
  int D.36673;
  const unsigned char * D.36674;
  unsigned char D.36675;
  int D.36676;
  _Bool D.36677;
  _Bool D.36678;
  const unsigned char * D.36681;
  unsigned char D.36682;
  int D.36683;
  const unsigned char * D.36684;
  unsigned char D.36685;
  int D.36686;
  int D.23972;
  int iftmp.470;
  int D.23971;
  const char[11] * D.36692;
  unsigned char D.36693;
  int D.36694;
  unsigned char D.36695;
  int D.36696;
  _Bool D.36697;
  _Bool D.36698;
  _Bool D.36699;
  const unsigned char * D.36702;
  unsigned char D.36703;
  int D.36704;
  const unsigned char * D.36705;
  unsigned char D.36706;
  int D.36707;
  _Bool D.36708;
  _Bool D.36709;
  const unsigned char * D.36712;
  unsigned char D.36713;
  int D.36714;
  const unsigned char * D.36715;
  unsigned char D.36716;
  int D.36717;
  _Bool D.36718;
  _Bool D.36719;
  const unsigned char * D.36722;
  unsigned char D.36723;
  int D.36724;
  const unsigned char * D.36725;
  unsigned char D.36726;
  int D.36727;
  int D.23982;
  int iftmp.471;
  int D.23981;
  const char[9] * D.36735;
  unsigned char D.36736;
  int D.36737;
  unsigned char D.36738;
  int D.36739;
  _Bool D.36740;
  _Bool D.36741;
  _Bool D.36742;
  const unsigned char * D.36745;
  unsigned char D.36746;
  int D.36747;
  const unsigned char * D.36748;
  unsigned char D.36749;
  int D.36750;
  _Bool D.36751;
  _Bool D.36752;
  const unsigned char * D.36755;
  unsigned char D.36756;
  int D.36757;
  const unsigned char * D.36758;
  unsigned char D.36759;
  int D.36760;
  _Bool D.36761;
  _Bool D.36762;
  const unsigned char * D.36765;
  unsigned char D.36766;
  int D.36767;
  const unsigned char * D.36768;
  unsigned char D.36769;
  int D.36770;
  int D.23991;
  int iftmp.472;
  int D.23990;
  const char[13] * D.36776;
  unsigned char D.36777;
  int D.36778;
  unsigned char D.36779;
  int D.36780;
  _Bool D.36781;
  _Bool D.36782;
  _Bool D.36783;
  const unsigned char * D.36786;
  unsigned char D.36787;
  int D.36788;
  const unsigned char * D.36789;
  unsigned char D.36790;
  int D.36791;
  _Bool D.36792;
  _Bool D.36793;
  const unsigned char * D.36796;
  unsigned char D.36797;
  int D.36798;
  const unsigned char * D.36799;
  unsigned char D.36800;
  int D.36801;
  _Bool D.36802;
  _Bool D.36803;
  const unsigned char * D.36806;
  unsigned char D.36807;
  int D.36808;
  const unsigned char * D.36809;
  unsigned char D.36810;
  int D.36811;
  const char * D.36813;
  struct MonoClass * klass;
  guint32 token;

  token = 0;
  D.35997 = obj->vtable;
  klass = D.35997->klass;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36001 = "MethodBuilder";
      D.36002 = MEM[(const unsigned char *)D.36001];
      D.36003 = (int) D.36002;
      D.36004 = *__s2;
      D.36005 = (int) D.36004;
      __result = D.36003 - D.36005;
      {
        D.36006 = __s2_len != 0;
        D.36007 = __result == 0;
        D.36008 = D.36006 & D.36007;
        if (D.36008 != 0) goto <D.36009>; else goto <D.36010>;
        <D.36009>:
        D.36011 = &MEM[(void *)"MethodBuilder" + 1B];
        D.36012 = *D.36011;
        D.36013 = (int) D.36012;
        D.36014 = __s2 + 1;
        D.36015 = *D.36014;
        D.36016 = (int) D.36015;
        __result = D.36013 - D.36016;
        D.36017 = __s2_len > 1;
        D.36007 = __result == 0;
        D.36018 = D.36017 & D.36007;
        if (D.36018 != 0) goto <D.36019>; else goto <D.36020>;
        <D.36019>:
        D.36021 = &MEM[(void *)"MethodBuilder" + 2B];
        D.36022 = *D.36021;
        D.36023 = (int) D.36022;
        D.36024 = __s2 + 2;
        D.36025 = *D.36024;
        D.36026 = (int) D.36025;
        __result = D.36023 - D.36026;
        D.36027 = __s2_len > 2;
        D.36007 = __result == 0;
        D.36028 = D.36027 & D.36007;
        if (D.36028 != 0) goto <D.36029>; else goto <D.36030>;
        <D.36029>:
        D.36031 = &MEM[(void *)"MethodBuilder" + 3B];
        D.36032 = *D.36031;
        D.36033 = (int) D.36032;
        D.36034 = __s2 + 3;
        D.36035 = *D.36034;
        D.36036 = (int) D.36035;
        __result = D.36033 - D.36036;
        <D.36030>:
        <D.36020>:
        <D.36010>:
      }
      D.23820 = __result;
    }
    iftmp.453 = -D.23820;
    goto <D.36037>;
    <D.36000>:
    D.36038 = klass->name;
    iftmp.453 = __builtin_strcmp (D.36038, "MethodBuilder");
    <D.36037>:
    D.23821 = iftmp.453;
  }
  if (D.23821 == 0) goto <D.36039>; else goto <D.36040>;
  <D.36039>:
  {
    struct MonoReflectionMethodBuilder * mb;

    mb = obj;
    D.36041 = mb->table_idx;
    token = D.36041 | 100663296;
  }
  goto <D.36042>;
  <D.36040>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36046 = "ConstructorBuilder";
      D.36047 = MEM[(const unsigned char *)D.36046];
      D.36048 = (int) D.36047;
      D.36049 = *__s2;
      D.36050 = (int) D.36049;
      __result = D.36048 - D.36050;
      {
        D.36051 = __s2_len != 0;
        D.36052 = __result == 0;
        D.36053 = D.36051 & D.36052;
        if (D.36053 != 0) goto <D.36054>; else goto <D.36055>;
        <D.36054>:
        D.36056 = &MEM[(void *)"ConstructorBuilder" + 1B];
        D.36057 = *D.36056;
        D.36058 = (int) D.36057;
        D.36059 = __s2 + 1;
        D.36060 = *D.36059;
        D.36061 = (int) D.36060;
        __result = D.36058 - D.36061;
        D.36062 = __s2_len > 1;
        D.36052 = __result == 0;
        D.36063 = D.36062 & D.36052;
        if (D.36063 != 0) goto <D.36064>; else goto <D.36065>;
        <D.36064>:
        D.36066 = &MEM[(void *)"ConstructorBuilder" + 2B];
        D.36067 = *D.36066;
        D.36068 = (int) D.36067;
        D.36069 = __s2 + 2;
        D.36070 = *D.36069;
        D.36071 = (int) D.36070;
        __result = D.36068 - D.36071;
        D.36072 = __s2_len > 2;
        D.36052 = __result == 0;
        D.36073 = D.36072 & D.36052;
        if (D.36073 != 0) goto <D.36074>; else goto <D.36075>;
        <D.36074>:
        D.36076 = &MEM[(void *)"ConstructorBuilder" + 3B];
        D.36077 = *D.36076;
        D.36078 = (int) D.36077;
        D.36079 = __s2 + 3;
        D.36080 = *D.36079;
        D.36081 = (int) D.36080;
        __result = D.36078 - D.36081;
        <D.36075>:
        <D.36065>:
        <D.36055>:
      }
      D.23830 = __result;
    }
    iftmp.454 = -D.23830;
    goto <D.36082>;
    <D.36045>:
    D.36038 = klass->name;
    iftmp.454 = __builtin_strcmp (D.36038, "ConstructorBuilder");
    <D.36082>:
    D.23831 = iftmp.454;
  }
  if (D.23831 == 0) goto <D.36083>; else goto <D.36084>;
  <D.36083>:
  {
    struct MonoReflectionCtorBuilder * mb;

    mb = obj;
    D.36085 = mb->table_idx;
    token = D.36085 | 100663296;
  }
  goto <D.36086>;
  <D.36084>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36090 = "FieldBuilder";
      D.36091 = MEM[(const unsigned char *)D.36090];
      D.36092 = (int) D.36091;
      D.36093 = *__s2;
      D.36094 = (int) D.36093;
      __result = D.36092 - D.36094;
      {
        D.36095 = __s2_len != 0;
        D.36096 = __result == 0;
        D.36097 = D.36095 & D.36096;
        if (D.36097 != 0) goto <D.36098>; else goto <D.36099>;
        <D.36098>:
        D.36100 = &MEM[(void *)"FieldBuilder" + 1B];
        D.36101 = *D.36100;
        D.36102 = (int) D.36101;
        D.36103 = __s2 + 1;
        D.36104 = *D.36103;
        D.36105 = (int) D.36104;
        __result = D.36102 - D.36105;
        D.36106 = __s2_len > 1;
        D.36096 = __result == 0;
        D.36107 = D.36106 & D.36096;
        if (D.36107 != 0) goto <D.36108>; else goto <D.36109>;
        <D.36108>:
        D.36110 = &MEM[(void *)"FieldBuilder" + 2B];
        D.36111 = *D.36110;
        D.36112 = (int) D.36111;
        D.36113 = __s2 + 2;
        D.36114 = *D.36113;
        D.36115 = (int) D.36114;
        __result = D.36112 - D.36115;
        D.36116 = __s2_len > 2;
        D.36096 = __result == 0;
        D.36117 = D.36116 & D.36096;
        if (D.36117 != 0) goto <D.36118>; else goto <D.36119>;
        <D.36118>:
        D.36120 = &MEM[(void *)"FieldBuilder" + 3B];
        D.36121 = *D.36120;
        D.36122 = (int) D.36121;
        D.36123 = __s2 + 3;
        D.36124 = *D.36123;
        D.36125 = (int) D.36124;
        __result = D.36122 - D.36125;
        <D.36119>:
        <D.36109>:
        <D.36099>:
      }
      D.23840 = __result;
    }
    iftmp.455 = -D.23840;
    goto <D.36126>;
    <D.36089>:
    D.36038 = klass->name;
    iftmp.455 = __builtin_strcmp (D.36038, "FieldBuilder");
    <D.36126>:
    D.23841 = iftmp.455;
  }
  if (D.23841 == 0) goto <D.36127>; else goto <D.36128>;
  <D.36127>:
  {
    struct MonoReflectionFieldBuilder * fb;

    fb = obj;
    D.36129 = fb->table_idx;
    D.36130 = D.36129 | 67108864;
    token = (guint32) D.36130;
  }
  goto <D.36131>;
  <D.36128>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36135 = "TypeBuilder";
      D.36136 = MEM[(const unsigned char *)D.36135];
      D.36137 = (int) D.36136;
      D.36138 = *__s2;
      D.36139 = (int) D.36138;
      __result = D.36137 - D.36139;
      {
        D.36140 = __s2_len != 0;
        D.36141 = __result == 0;
        D.36142 = D.36140 & D.36141;
        if (D.36142 != 0) goto <D.36143>; else goto <D.36144>;
        <D.36143>:
        D.36145 = &MEM[(void *)"TypeBuilder" + 1B];
        D.36146 = *D.36145;
        D.36147 = (int) D.36146;
        D.36148 = __s2 + 1;
        D.36149 = *D.36148;
        D.36150 = (int) D.36149;
        __result = D.36147 - D.36150;
        D.36151 = __s2_len > 1;
        D.36141 = __result == 0;
        D.36152 = D.36151 & D.36141;
        if (D.36152 != 0) goto <D.36153>; else goto <D.36154>;
        <D.36153>:
        D.36155 = &MEM[(void *)"TypeBuilder" + 2B];
        D.36156 = *D.36155;
        D.36157 = (int) D.36156;
        D.36158 = __s2 + 2;
        D.36159 = *D.36158;
        D.36160 = (int) D.36159;
        __result = D.36157 - D.36160;
        D.36161 = __s2_len > 2;
        D.36141 = __result == 0;
        D.36162 = D.36161 & D.36141;
        if (D.36162 != 0) goto <D.36163>; else goto <D.36164>;
        <D.36163>:
        D.36165 = &MEM[(void *)"TypeBuilder" + 3B];
        D.36166 = *D.36165;
        D.36167 = (int) D.36166;
        D.36168 = __s2 + 3;
        D.36169 = *D.36168;
        D.36170 = (int) D.36169;
        __result = D.36167 - D.36170;
        <D.36164>:
        <D.36154>:
        <D.36144>:
      }
      D.23850 = __result;
    }
    iftmp.456 = -D.23850;
    goto <D.36171>;
    <D.36134>:
    D.36038 = klass->name;
    iftmp.456 = __builtin_strcmp (D.36038, "TypeBuilder");
    <D.36171>:
    D.23851 = iftmp.456;
  }
  if (D.23851 == 0) goto <D.36172>; else goto <D.36173>;
  <D.36172>:
  {
    struct MonoReflectionTypeBuilder * tb;

    tb = obj;
    D.36174 = tb->table_idx;
    token = D.36174 | 33554432;
  }
  goto <D.36175>;
  <D.36173>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36179 = "MonoType";
      D.36180 = MEM[(const unsigned char *)D.36179];
      D.36181 = (int) D.36180;
      D.36182 = *__s2;
      D.36183 = (int) D.36182;
      __result = D.36181 - D.36183;
      {
        D.36184 = __s2_len != 0;
        D.36185 = __result == 0;
        D.36186 = D.36184 & D.36185;
        if (D.36186 != 0) goto <D.36187>; else goto <D.36188>;
        <D.36187>:
        D.36189 = &MEM[(void *)"MonoType" + 1B];
        D.36190 = *D.36189;
        D.36191 = (int) D.36190;
        D.36192 = __s2 + 1;
        D.36193 = *D.36192;
        D.36194 = (int) D.36193;
        __result = D.36191 - D.36194;
        D.36195 = __s2_len > 1;
        D.36185 = __result == 0;
        D.36196 = D.36195 & D.36185;
        if (D.36196 != 0) goto <D.36197>; else goto <D.36198>;
        <D.36197>:
        D.36199 = &MEM[(void *)"MonoType" + 2B];
        D.36200 = *D.36199;
        D.36201 = (int) D.36200;
        D.36202 = __s2 + 2;
        D.36203 = *D.36202;
        D.36204 = (int) D.36203;
        __result = D.36201 - D.36204;
        D.36205 = __s2_len > 2;
        D.36185 = __result == 0;
        D.36206 = D.36205 & D.36185;
        if (D.36206 != 0) goto <D.36207>; else goto <D.36208>;
        <D.36207>:
        D.36209 = &MEM[(void *)"MonoType" + 3B];
        D.36210 = *D.36209;
        D.36211 = (int) D.36210;
        D.36212 = __s2 + 3;
        D.36213 = *D.36212;
        D.36214 = (int) D.36213;
        __result = D.36211 - D.36214;
        <D.36208>:
        <D.36198>:
        <D.36188>:
      }
      D.23860 = __result;
    }
    iftmp.457 = -D.23860;
    goto <D.36215>;
    <D.36178>:
    D.36038 = klass->name;
    iftmp.457 = __builtin_strcmp (D.36038, "MonoType");
    <D.36215>:
    D.23861 = iftmp.457;
  }
  if (D.23861 == 0) goto <D.36216>; else goto <D.36217>;
  <D.36216>:
  {
    struct MonoType * type;
    struct MonoClass * mc;

    type = mono_reflection_type_get_handle (obj);
    mc = mono_class_from_mono_type (type);
    D.36218 = mono_class_init (mc);
    if (D.36218 == 0) goto <D.36219>; else goto <D.36220>;
    <D.36219>:
    D.36221 = mono_class_get_exception_for_failure (mc);
    mono_raise_exception (D.36221);
    <D.36220>:
    token = mc->type_token;
  }
  goto <D.36222>;
  <D.36217>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36229 = "MonoCMethod";
      D.36230 = MEM[(const unsigned char *)D.36229];
      D.36231 = (int) D.36230;
      D.36232 = *__s2;
      D.36233 = (int) D.36232;
      __result = D.36231 - D.36233;
      {
        D.36234 = __s2_len != 0;
        D.36235 = __result == 0;
        D.36236 = D.36234 & D.36235;
        if (D.36236 != 0) goto <D.36237>; else goto <D.36238>;
        <D.36237>:
        D.36239 = &MEM[(void *)"MonoCMethod" + 1B];
        D.36240 = *D.36239;
        D.36241 = (int) D.36240;
        D.36242 = __s2 + 1;
        D.36243 = *D.36242;
        D.36244 = (int) D.36243;
        __result = D.36241 - D.36244;
        D.36245 = __s2_len > 1;
        D.36235 = __result == 0;
        D.36246 = D.36245 & D.36235;
        if (D.36246 != 0) goto <D.36247>; else goto <D.36248>;
        <D.36247>:
        D.36249 = &MEM[(void *)"MonoCMethod" + 2B];
        D.36250 = *D.36249;
        D.36251 = (int) D.36250;
        D.36252 = __s2 + 2;
        D.36253 = *D.36252;
        D.36254 = (int) D.36253;
        __result = D.36251 - D.36254;
        D.36255 = __s2_len > 2;
        D.36235 = __result == 0;
        D.36256 = D.36255 & D.36235;
        if (D.36256 != 0) goto <D.36257>; else goto <D.36258>;
        <D.36257>:
        D.36259 = &MEM[(void *)"MonoCMethod" + 3B];
        D.36260 = *D.36259;
        D.36261 = (int) D.36260;
        D.36262 = __s2 + 3;
        D.36263 = *D.36262;
        D.36264 = (int) D.36263;
        __result = D.36261 - D.36264;
        <D.36258>:
        <D.36248>:
        <D.36238>:
      }
      D.23871 = __result;
    }
    iftmp.458 = -D.23871;
    goto <D.36265>;
    <D.36228>:
    D.36038 = klass->name;
    iftmp.458 = __builtin_strcmp (D.36038, "MonoCMethod");
    <D.36265>:
    D.23872 = iftmp.458;
  }
  if (D.23872 == 0) goto <D.36223>; else goto <D.36266>;
  <D.36266>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36270 = "MonoMethod";
      D.36271 = MEM[(const unsigned char *)D.36270];
      D.36272 = (int) D.36271;
      D.36273 = *__s2;
      D.36274 = (int) D.36273;
      __result = D.36272 - D.36274;
      {
        D.36275 = __s2_len != 0;
        D.36276 = __result == 0;
        D.36277 = D.36275 & D.36276;
        if (D.36277 != 0) goto <D.36278>; else goto <D.36279>;
        <D.36278>:
        D.36280 = &MEM[(void *)"MonoMethod" + 1B];
        D.36281 = *D.36280;
        D.36282 = (int) D.36281;
        D.36283 = __s2 + 1;
        D.36284 = *D.36283;
        D.36285 = (int) D.36284;
        __result = D.36282 - D.36285;
        D.36286 = __s2_len > 1;
        D.36276 = __result == 0;
        D.36287 = D.36286 & D.36276;
        if (D.36287 != 0) goto <D.36288>; else goto <D.36289>;
        <D.36288>:
        D.36290 = &MEM[(void *)"MonoMethod" + 2B];
        D.36291 = *D.36290;
        D.36292 = (int) D.36291;
        D.36293 = __s2 + 2;
        D.36294 = *D.36293;
        D.36295 = (int) D.36294;
        __result = D.36292 - D.36295;
        D.36296 = __s2_len > 2;
        D.36276 = __result == 0;
        D.36297 = D.36296 & D.36276;
        if (D.36297 != 0) goto <D.36298>; else goto <D.36299>;
        <D.36298>:
        D.36300 = &MEM[(void *)"MonoMethod" + 3B];
        D.36301 = *D.36300;
        D.36302 = (int) D.36301;
        D.36303 = __s2 + 3;
        D.36304 = *D.36303;
        D.36305 = (int) D.36304;
        __result = D.36302 - D.36305;
        <D.36299>:
        <D.36289>:
        <D.36279>:
      }
      D.23880 = __result;
    }
    iftmp.459 = -D.23880;
    goto <D.36306>;
    <D.36269>:
    D.36038 = klass->name;
    iftmp.459 = __builtin_strcmp (D.36038, "MonoMethod");
    <D.36306>:
    D.23881 = iftmp.459;
  }
  if (D.23881 == 0) goto <D.36223>; else goto <D.36307>;
  <D.36307>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36311 = "MonoGenericMethod";
      D.36312 = MEM[(const unsigned char *)D.36311];
      D.36313 = (int) D.36312;
      D.36314 = *__s2;
      D.36315 = (int) D.36314;
      __result = D.36313 - D.36315;
      {
        D.36316 = __s2_len != 0;
        D.36317 = __result == 0;
        D.36318 = D.36316 & D.36317;
        if (D.36318 != 0) goto <D.36319>; else goto <D.36320>;
        <D.36319>:
        D.36321 = &MEM[(void *)"MonoGenericMethod" + 1B];
        D.36322 = *D.36321;
        D.36323 = (int) D.36322;
        D.36324 = __s2 + 1;
        D.36325 = *D.36324;
        D.36326 = (int) D.36325;
        __result = D.36323 - D.36326;
        D.36327 = __s2_len > 1;
        D.36317 = __result == 0;
        D.36328 = D.36327 & D.36317;
        if (D.36328 != 0) goto <D.36329>; else goto <D.36330>;
        <D.36329>:
        D.36331 = &MEM[(void *)"MonoGenericMethod" + 2B];
        D.36332 = *D.36331;
        D.36333 = (int) D.36332;
        D.36334 = __s2 + 2;
        D.36335 = *D.36334;
        D.36336 = (int) D.36335;
        __result = D.36333 - D.36336;
        D.36337 = __s2_len > 2;
        D.36317 = __result == 0;
        D.36338 = D.36337 & D.36317;
        if (D.36338 != 0) goto <D.36339>; else goto <D.36340>;
        <D.36339>:
        D.36341 = &MEM[(void *)"MonoGenericMethod" + 3B];
        D.36342 = *D.36341;
        D.36343 = (int) D.36342;
        D.36344 = __s2 + 3;
        D.36345 = *D.36344;
        D.36346 = (int) D.36345;
        __result = D.36343 - D.36346;
        <D.36340>:
        <D.36330>:
        <D.36320>:
      }
      D.23889 = __result;
    }
    iftmp.460 = -D.23889;
    goto <D.36347>;
    <D.36310>:
    D.36038 = klass->name;
    iftmp.460 = __builtin_strcmp (D.36038, "MonoGenericMethod");
    <D.36347>:
    D.23890 = iftmp.460;
  }
  if (D.23890 == 0) goto <D.36223>; else goto <D.36348>;
  <D.36348>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36352 = "MonoGenericCMethod";
      D.36353 = MEM[(const unsigned char *)D.36352];
      D.36354 = (int) D.36353;
      D.36355 = *__s2;
      D.36356 = (int) D.36355;
      __result = D.36354 - D.36356;
      {
        D.36357 = __s2_len != 0;
        D.36358 = __result == 0;
        D.36359 = D.36357 & D.36358;
        if (D.36359 != 0) goto <D.36360>; else goto <D.36361>;
        <D.36360>:
        D.36362 = &MEM[(void *)"MonoGenericCMethod" + 1B];
        D.36363 = *D.36362;
        D.36364 = (int) D.36363;
        D.36365 = __s2 + 1;
        D.36366 = *D.36365;
        D.36367 = (int) D.36366;
        __result = D.36364 - D.36367;
        D.36368 = __s2_len > 1;
        D.36358 = __result == 0;
        D.36369 = D.36368 & D.36358;
        if (D.36369 != 0) goto <D.36370>; else goto <D.36371>;
        <D.36370>:
        D.36372 = &MEM[(void *)"MonoGenericCMethod" + 2B];
        D.36373 = *D.36372;
        D.36374 = (int) D.36373;
        D.36375 = __s2 + 2;
        D.36376 = *D.36375;
        D.36377 = (int) D.36376;
        __result = D.36374 - D.36377;
        D.36378 = __s2_len > 2;
        D.36358 = __result == 0;
        D.36379 = D.36378 & D.36358;
        if (D.36379 != 0) goto <D.36380>; else goto <D.36381>;
        <D.36380>:
        D.36382 = &MEM[(void *)"MonoGenericCMethod" + 3B];
        D.36383 = *D.36382;
        D.36384 = (int) D.36383;
        D.36385 = __s2 + 3;
        D.36386 = *D.36385;
        D.36387 = (int) D.36386;
        __result = D.36384 - D.36387;
        <D.36381>:
        <D.36371>:
        <D.36361>:
      }
      D.23898 = __result;
    }
    iftmp.461 = -D.23898;
    goto <D.36388>;
    <D.36351>:
    D.36038 = klass->name;
    iftmp.461 = __builtin_strcmp (D.36038, "MonoGenericCMethod");
    <D.36388>:
    D.23899 = iftmp.461;
  }
  if (D.23899 == 0) goto <D.36223>; else goto <D.36224>;
  <D.36223>:
  {
    struct MonoReflectionMethod * m;

    m = obj;
    D.36389 = m->method;
    D.36390 = BIT_FIELD_REF <*D.36389, 8, 168>;
    D.36391 = D.36390 & 16;
    if (D.36391 != 0) goto <D.36392>; else goto <D.36393>;
    <D.36392>:
    {
      struct MonoMethodInflated * inflated;

      inflated = m->method;
      D.36395 = inflated->declaring;
      D.36394 = D.36395->token;
      return D.36394;
    }
    <D.36393>:
    D.36389 = m->method;
    token = D.36389->token;
  }
  goto <D.36225>;
  <D.36224>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36399 = "MonoField";
      D.36400 = MEM[(const unsigned char *)D.36399];
      D.36401 = (int) D.36400;
      D.36402 = *__s2;
      D.36403 = (int) D.36402;
      __result = D.36401 - D.36403;
      {
        D.36404 = __s2_len != 0;
        D.36405 = __result == 0;
        D.36406 = D.36404 & D.36405;
        if (D.36406 != 0) goto <D.36407>; else goto <D.36408>;
        <D.36407>:
        D.36409 = &MEM[(void *)"MonoField" + 1B];
        D.36410 = *D.36409;
        D.36411 = (int) D.36410;
        D.36412 = __s2 + 1;
        D.36413 = *D.36412;
        D.36414 = (int) D.36413;
        __result = D.36411 - D.36414;
        D.36415 = __s2_len > 1;
        D.36405 = __result == 0;
        D.36416 = D.36415 & D.36405;
        if (D.36416 != 0) goto <D.36417>; else goto <D.36418>;
        <D.36417>:
        D.36419 = &MEM[(void *)"MonoField" + 2B];
        D.36420 = *D.36419;
        D.36421 = (int) D.36420;
        D.36422 = __s2 + 2;
        D.36423 = *D.36422;
        D.36424 = (int) D.36423;
        __result = D.36421 - D.36424;
        D.36425 = __s2_len > 2;
        D.36405 = __result == 0;
        D.36426 = D.36425 & D.36405;
        if (D.36426 != 0) goto <D.36427>; else goto <D.36428>;
        <D.36427>:
        D.36429 = &MEM[(void *)"MonoField" + 3B];
        D.36430 = *D.36429;
        D.36431 = (int) D.36430;
        D.36432 = __s2 + 3;
        D.36433 = *D.36432;
        D.36434 = (int) D.36433;
        __result = D.36431 - D.36434;
        <D.36428>:
        <D.36418>:
        <D.36408>:
      }
      D.23909 = __result;
    }
    iftmp.462 = -D.23909;
    goto <D.36435>;
    <D.36398>:
    D.36038 = klass->name;
    iftmp.462 = __builtin_strcmp (D.36038, "MonoField");
    <D.36435>:
    D.23910 = iftmp.462;
  }
  if (D.23910 == 0) goto <D.36436>; else goto <D.36437>;
  <D.36436>:
  {
    struct MonoReflectionField * f;

    f = obj;
    D.36438 = f->field;
    D.36439 = is_field_on_inst (D.36438);
    if (D.36439 != 0) goto <D.36440>; else goto <D.36441>;
    <D.36440>:
    {
      struct MonoDynamicGenericClass * dgclass;
      int field_index;
      struct MonoObject * obj;

      D.36438 = f->field;
      D.36442 = D.36438->parent;
      dgclass = D.36442->generic_class;
      D.36438 = f->field;
      D.36443 = (int) D.36438;
      D.36444 = dgclass->fields;
      D.36445 = (int) D.36444;
      D.36446 = D.36443 - D.36445;
      field_index = D.36446 /[ex] 16;
      if (field_index < 0) goto <D.36448>; else goto <D.36451>;
      <D.36451>:
      D.36452 = dgclass->count_fields;
      if (D.36452 <= field_index) goto <D.36448>; else goto <D.36449>;
      <D.36448>:
      iftmp.463 = 1;
      goto <D.36450>;
      <D.36449>:
      iftmp.463 = 0;
      <D.36450>:
      D.36453 = iftmp.463 != 0;
      D.36454 = (long int) D.36453;
      D.36455 = __builtin_expect (D.36454, 0);
      if (D.36455 != 0) goto <D.36456>; else goto <D.36457>;
      <D.36456>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 7752, "field_index >= 0 && field_index < dgclass->count_fields");
      <D.36457>:
      D.36458 = dgclass->field_objects;
      field_index.464 = (unsigned int) field_index;
      D.36460 = field_index.464 * 4;
      D.36461 = D.36458 + D.36460;
      obj = *D.36461;
      D.36394 = mono_reflection_get_token (obj);
      return D.36394;
    }
    <D.36441>:
    D.36438 = f->field;
    token = mono_class_get_field_token (D.36438);
  }
  goto <D.36462>;
  <D.36437>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36466 = "MonoProperty";
      D.36467 = MEM[(const unsigned char *)D.36466];
      D.36468 = (int) D.36467;
      D.36469 = *__s2;
      D.36470 = (int) D.36469;
      __result = D.36468 - D.36470;
      {
        D.36471 = __s2_len != 0;
        D.36472 = __result == 0;
        D.36473 = D.36471 & D.36472;
        if (D.36473 != 0) goto <D.36474>; else goto <D.36475>;
        <D.36474>:
        D.36476 = &MEM[(void *)"MonoProperty" + 1B];
        D.36477 = *D.36476;
        D.36478 = (int) D.36477;
        D.36479 = __s2 + 1;
        D.36480 = *D.36479;
        D.36481 = (int) D.36480;
        __result = D.36478 - D.36481;
        D.36482 = __s2_len > 1;
        D.36472 = __result == 0;
        D.36483 = D.36482 & D.36472;
        if (D.36483 != 0) goto <D.36484>; else goto <D.36485>;
        <D.36484>:
        D.36486 = &MEM[(void *)"MonoProperty" + 2B];
        D.36487 = *D.36486;
        D.36488 = (int) D.36487;
        D.36489 = __s2 + 2;
        D.36490 = *D.36489;
        D.36491 = (int) D.36490;
        __result = D.36488 - D.36491;
        D.36492 = __s2_len > 2;
        D.36472 = __result == 0;
        D.36493 = D.36492 & D.36472;
        if (D.36493 != 0) goto <D.36494>; else goto <D.36495>;
        <D.36494>:
        D.36496 = &MEM[(void *)"MonoProperty" + 3B];
        D.36497 = *D.36496;
        D.36498 = (int) D.36497;
        D.36499 = __s2 + 3;
        D.36500 = *D.36499;
        D.36501 = (int) D.36500;
        __result = D.36498 - D.36501;
        <D.36495>:
        <D.36485>:
        <D.36475>:
      }
      D.23922 = __result;
    }
    iftmp.465 = -D.23922;
    goto <D.36502>;
    <D.36465>:
    D.36038 = klass->name;
    iftmp.465 = __builtin_strcmp (D.36038, "MonoProperty");
    <D.36502>:
    D.23923 = iftmp.465;
  }
  if (D.23923 == 0) goto <D.36503>; else goto <D.36504>;
  <D.36503>:
  {
    struct MonoReflectionProperty * p;

    p = obj;
    D.36505 = p->property;
    token = mono_class_get_property_token (D.36505);
  }
  goto <D.36506>;
  <D.36504>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36510 = "MonoEvent";
      D.36511 = MEM[(const unsigned char *)D.36510];
      D.36512 = (int) D.36511;
      D.36513 = *__s2;
      D.36514 = (int) D.36513;
      __result = D.36512 - D.36514;
      {
        D.36515 = __s2_len != 0;
        D.36516 = __result == 0;
        D.36517 = D.36515 & D.36516;
        if (D.36517 != 0) goto <D.36518>; else goto <D.36519>;
        <D.36518>:
        D.36520 = &MEM[(void *)"MonoEvent" + 1B];
        D.36521 = *D.36520;
        D.36522 = (int) D.36521;
        D.36523 = __s2 + 1;
        D.36524 = *D.36523;
        D.36525 = (int) D.36524;
        __result = D.36522 - D.36525;
        D.36526 = __s2_len > 1;
        D.36516 = __result == 0;
        D.36527 = D.36526 & D.36516;
        if (D.36527 != 0) goto <D.36528>; else goto <D.36529>;
        <D.36528>:
        D.36530 = &MEM[(void *)"MonoEvent" + 2B];
        D.36531 = *D.36530;
        D.36532 = (int) D.36531;
        D.36533 = __s2 + 2;
        D.36534 = *D.36533;
        D.36535 = (int) D.36534;
        __result = D.36532 - D.36535;
        D.36536 = __s2_len > 2;
        D.36516 = __result == 0;
        D.36537 = D.36536 & D.36516;
        if (D.36537 != 0) goto <D.36538>; else goto <D.36539>;
        <D.36538>:
        D.36540 = &MEM[(void *)"MonoEvent" + 3B];
        D.36541 = *D.36540;
        D.36542 = (int) D.36541;
        D.36543 = __s2 + 3;
        D.36544 = *D.36543;
        D.36545 = (int) D.36544;
        __result = D.36542 - D.36545;
        <D.36539>:
        <D.36529>:
        <D.36519>:
      }
      D.23932 = __result;
    }
    iftmp.466 = -D.23932;
    goto <D.36546>;
    <D.36509>:
    D.36038 = klass->name;
    iftmp.466 = __builtin_strcmp (D.36038, "MonoEvent");
    <D.36546>:
    D.23933 = iftmp.466;
  }
  if (D.23933 == 0) goto <D.36547>; else goto <D.36548>;
  <D.36547>:
  {
    struct MonoReflectionMonoEvent * p;

    p = obj;
    D.36549 = p->event;
    token = mono_class_get_event_token (D.36549);
  }
  goto <D.36550>;
  <D.36548>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36557 = "ParameterInfo";
      D.36558 = MEM[(const unsigned char *)D.36557];
      D.36559 = (int) D.36558;
      D.36560 = *__s2;
      D.36561 = (int) D.36560;
      __result = D.36559 - D.36561;
      {
        D.36562 = __s2_len != 0;
        D.36563 = __result == 0;
        D.36564 = D.36562 & D.36563;
        if (D.36564 != 0) goto <D.36565>; else goto <D.36566>;
        <D.36565>:
        D.36567 = &MEM[(void *)"ParameterInfo" + 1B];
        D.36568 = *D.36567;
        D.36569 = (int) D.36568;
        D.36570 = __s2 + 1;
        D.36571 = *D.36570;
        D.36572 = (int) D.36571;
        __result = D.36569 - D.36572;
        D.36573 = __s2_len > 1;
        D.36563 = __result == 0;
        D.36574 = D.36573 & D.36563;
        if (D.36574 != 0) goto <D.36575>; else goto <D.36576>;
        <D.36575>:
        D.36577 = &MEM[(void *)"ParameterInfo" + 2B];
        D.36578 = *D.36577;
        D.36579 = (int) D.36578;
        D.36580 = __s2 + 2;
        D.36581 = *D.36580;
        D.36582 = (int) D.36581;
        __result = D.36579 - D.36582;
        D.36583 = __s2_len > 2;
        D.36563 = __result == 0;
        D.36584 = D.36583 & D.36563;
        if (D.36584 != 0) goto <D.36585>; else goto <D.36586>;
        <D.36585>:
        D.36587 = &MEM[(void *)"ParameterInfo" + 3B];
        D.36588 = *D.36587;
        D.36589 = (int) D.36588;
        D.36590 = __s2 + 3;
        D.36591 = *D.36590;
        D.36592 = (int) D.36591;
        __result = D.36589 - D.36592;
        <D.36586>:
        <D.36576>:
        <D.36566>:
      }
      D.23942 = __result;
    }
    iftmp.467 = -D.23942;
    goto <D.36593>;
    <D.36556>:
    D.36038 = klass->name;
    iftmp.467 = __builtin_strcmp (D.36038, "ParameterInfo");
    <D.36593>:
    D.23943 = iftmp.467;
  }
  if (D.23943 == 0) goto <D.36551>; else goto <D.36594>;
  <D.36594>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36598 = "MonoParameterInfo";
      D.36599 = MEM[(const unsigned char *)D.36598];
      D.36600 = (int) D.36599;
      D.36601 = *__s2;
      D.36602 = (int) D.36601;
      __result = D.36600 - D.36602;
      {
        D.36603 = __s2_len != 0;
        D.36604 = __result == 0;
        D.36605 = D.36603 & D.36604;
        if (D.36605 != 0) goto <D.36606>; else goto <D.36607>;
        <D.36606>:
        D.36608 = &MEM[(void *)"MonoParameterInfo" + 1B];
        D.36609 = *D.36608;
        D.36610 = (int) D.36609;
        D.36611 = __s2 + 1;
        D.36612 = *D.36611;
        D.36613 = (int) D.36612;
        __result = D.36610 - D.36613;
        D.36614 = __s2_len > 1;
        D.36604 = __result == 0;
        D.36615 = D.36614 & D.36604;
        if (D.36615 != 0) goto <D.36616>; else goto <D.36617>;
        <D.36616>:
        D.36618 = &MEM[(void *)"MonoParameterInfo" + 2B];
        D.36619 = *D.36618;
        D.36620 = (int) D.36619;
        D.36621 = __s2 + 2;
        D.36622 = *D.36621;
        D.36623 = (int) D.36622;
        __result = D.36620 - D.36623;
        D.36624 = __s2_len > 2;
        D.36604 = __result == 0;
        D.36625 = D.36624 & D.36604;
        if (D.36625 != 0) goto <D.36626>; else goto <D.36627>;
        <D.36626>:
        D.36628 = &MEM[(void *)"MonoParameterInfo" + 3B];
        D.36629 = *D.36628;
        D.36630 = (int) D.36629;
        D.36631 = __s2 + 3;
        D.36632 = *D.36631;
        D.36633 = (int) D.36632;
        __result = D.36630 - D.36633;
        <D.36627>:
        <D.36617>:
        <D.36607>:
      }
      D.23951 = __result;
    }
    iftmp.468 = -D.23951;
    goto <D.36634>;
    <D.36597>:
    D.36038 = klass->name;
    iftmp.468 = __builtin_strcmp (D.36038, "MonoParameterInfo");
    <D.36634>:
    D.23952 = iftmp.468;
  }
  if (D.23952 == 0) goto <D.36551>; else goto <D.36552>;
  <D.36551>:
  {
    struct MonoReflectionParameter * p;
    struct MonoClass * member_class;

    p = obj;
    D.36635 = p->MemberImpl;
    D.36636 = D.36635->vtable;
    member_class = D.36636->klass;
    D.36637 = mono_class_is_reflection_method_or_constructor (member_class);
    D.36638 = D.36637 == 0;
    D.36639 = (long int) D.36638;
    D.36640 = __builtin_expect (D.36639, 0);
    if (D.36640 != 0) goto <D.36641>; else goto <D.36642>;
    <D.36641>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 7768, "mono_class_is_reflection_method_or_constructor (member_class)");
    <D.36642>:
    D.36635 = p->MemberImpl;
    D.36643 = MEM[(struct MonoReflectionMethod *)D.36635].method;
    D.36644 = p->PositionImpl;
    token = mono_method_get_param_token (D.36643, D.36644);
  }
  goto <D.36553>;
  <D.36552>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36651 = "Module";
      D.36652 = MEM[(const unsigned char *)D.36651];
      D.36653 = (int) D.36652;
      D.36654 = *__s2;
      D.36655 = (int) D.36654;
      __result = D.36653 - D.36655;
      {
        D.36656 = __s2_len != 0;
        D.36657 = __result == 0;
        D.36658 = D.36656 & D.36657;
        if (D.36658 != 0) goto <D.36659>; else goto <D.36660>;
        <D.36659>:
        D.36661 = &MEM[(void *)"Module" + 1B];
        D.36662 = *D.36661;
        D.36663 = (int) D.36662;
        D.36664 = __s2 + 1;
        D.36665 = *D.36664;
        D.36666 = (int) D.36665;
        __result = D.36663 - D.36666;
        D.36667 = __s2_len > 1;
        D.36657 = __result == 0;
        D.36668 = D.36667 & D.36657;
        if (D.36668 != 0) goto <D.36669>; else goto <D.36670>;
        <D.36669>:
        D.36671 = &MEM[(void *)"Module" + 2B];
        D.36672 = *D.36671;
        D.36673 = (int) D.36672;
        D.36674 = __s2 + 2;
        D.36675 = *D.36674;
        D.36676 = (int) D.36675;
        __result = D.36673 - D.36676;
        D.36677 = __s2_len > 2;
        D.36657 = __result == 0;
        D.36678 = D.36677 & D.36657;
        if (D.36678 != 0) goto <D.36679>; else goto <D.36680>;
        <D.36679>:
        D.36681 = &MEM[(void *)"Module" + 3B];
        D.36682 = *D.36681;
        D.36683 = (int) D.36682;
        D.36684 = __s2 + 3;
        D.36685 = *D.36684;
        D.36686 = (int) D.36685;
        __result = D.36683 - D.36686;
        <D.36680>:
        <D.36670>:
        <D.36660>:
      }
      D.23962 = __result;
    }
    iftmp.469 = -D.23962;
    goto <D.36687>;
    <D.36650>:
    D.36038 = klass->name;
    iftmp.469 = __builtin_strcmp (D.36038, "Module");
    <D.36687>:
    D.23963 = iftmp.469;
  }
  if (D.23963 == 0) goto <D.36645>; else goto <D.36688>;
  <D.36688>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36692 = "MonoModule";
      D.36693 = MEM[(const unsigned char *)D.36692];
      D.36694 = (int) D.36693;
      D.36695 = *__s2;
      D.36696 = (int) D.36695;
      __result = D.36694 - D.36696;
      {
        D.36697 = __s2_len != 0;
        D.36698 = __result == 0;
        D.36699 = D.36697 & D.36698;
        if (D.36699 != 0) goto <D.36700>; else goto <D.36701>;
        <D.36700>:
        D.36702 = &MEM[(void *)"MonoModule" + 1B];
        D.36703 = *D.36702;
        D.36704 = (int) D.36703;
        D.36705 = __s2 + 1;
        D.36706 = *D.36705;
        D.36707 = (int) D.36706;
        __result = D.36704 - D.36707;
        D.36708 = __s2_len > 1;
        D.36698 = __result == 0;
        D.36709 = D.36708 & D.36698;
        if (D.36709 != 0) goto <D.36710>; else goto <D.36711>;
        <D.36710>:
        D.36712 = &MEM[(void *)"MonoModule" + 2B];
        D.36713 = *D.36712;
        D.36714 = (int) D.36713;
        D.36715 = __s2 + 2;
        D.36716 = *D.36715;
        D.36717 = (int) D.36716;
        __result = D.36714 - D.36717;
        D.36718 = __s2_len > 2;
        D.36698 = __result == 0;
        D.36719 = D.36718 & D.36698;
        if (D.36719 != 0) goto <D.36720>; else goto <D.36721>;
        <D.36720>:
        D.36722 = &MEM[(void *)"MonoModule" + 3B];
        D.36723 = *D.36722;
        D.36724 = (int) D.36723;
        D.36725 = __s2 + 3;
        D.36726 = *D.36725;
        D.36727 = (int) D.36726;
        __result = D.36724 - D.36727;
        <D.36721>:
        <D.36711>:
        <D.36701>:
      }
      D.23971 = __result;
    }
    iftmp.470 = -D.23971;
    goto <D.36728>;
    <D.36691>:
    D.36038 = klass->name;
    iftmp.470 = __builtin_strcmp (D.36038, "MonoModule");
    <D.36728>:
    D.23972 = iftmp.470;
  }
  if (D.23972 == 0) goto <D.36645>; else goto <D.36646>;
  <D.36645>:
  {
    struct MonoReflectionModule * m;

    m = obj;
    token = m->token;
  }
  goto <D.36647>;
  <D.36646>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36735 = "Assembly";
      D.36736 = MEM[(const unsigned char *)D.36735];
      D.36737 = (int) D.36736;
      D.36738 = *__s2;
      D.36739 = (int) D.36738;
      __result = D.36737 - D.36739;
      {
        D.36740 = __s2_len != 0;
        D.36741 = __result == 0;
        D.36742 = D.36740 & D.36741;
        if (D.36742 != 0) goto <D.36743>; else goto <D.36744>;
        <D.36743>:
        D.36745 = &MEM[(void *)"Assembly" + 1B];
        D.36746 = *D.36745;
        D.36747 = (int) D.36746;
        D.36748 = __s2 + 1;
        D.36749 = *D.36748;
        D.36750 = (int) D.36749;
        __result = D.36747 - D.36750;
        D.36751 = __s2_len > 1;
        D.36741 = __result == 0;
        D.36752 = D.36751 & D.36741;
        if (D.36752 != 0) goto <D.36753>; else goto <D.36754>;
        <D.36753>:
        D.36755 = &MEM[(void *)"Assembly" + 2B];
        D.36756 = *D.36755;
        D.36757 = (int) D.36756;
        D.36758 = __s2 + 2;
        D.36759 = *D.36758;
        D.36760 = (int) D.36759;
        __result = D.36757 - D.36760;
        D.36761 = __s2_len > 2;
        D.36741 = __result == 0;
        D.36762 = D.36761 & D.36741;
        if (D.36762 != 0) goto <D.36763>; else goto <D.36764>;
        <D.36763>:
        D.36765 = &MEM[(void *)"Assembly" + 3B];
        D.36766 = *D.36765;
        D.36767 = (int) D.36766;
        D.36768 = __s2 + 3;
        D.36769 = *D.36768;
        D.36770 = (int) D.36769;
        __result = D.36767 - D.36770;
        <D.36764>:
        <D.36754>:
        <D.36744>:
      }
      D.23981 = __result;
    }
    iftmp.471 = -D.23981;
    goto <D.36771>;
    <D.36734>:
    D.36038 = klass->name;
    iftmp.471 = __builtin_strcmp (D.36038, "Assembly");
    <D.36771>:
    D.23982 = iftmp.471;
  }
  if (D.23982 == 0) goto <D.36729>; else goto <D.36772>;
  <D.36772>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.36776 = "MonoAssembly";
      D.36777 = MEM[(const unsigned char *)D.36776];
      D.36778 = (int) D.36777;
      D.36779 = *__s2;
      D.36780 = (int) D.36779;
      __result = D.36778 - D.36780;
      {
        D.36781 = __s2_len != 0;
        D.36782 = __result == 0;
        D.36783 = D.36781 & D.36782;
        if (D.36783 != 0) goto <D.36784>; else goto <D.36785>;
        <D.36784>:
        D.36786 = &MEM[(void *)"MonoAssembly" + 1B];
        D.36787 = *D.36786;
        D.36788 = (int) D.36787;
        D.36789 = __s2 + 1;
        D.36790 = *D.36789;
        D.36791 = (int) D.36790;
        __result = D.36788 - D.36791;
        D.36792 = __s2_len > 1;
        D.36782 = __result == 0;
        D.36793 = D.36792 & D.36782;
        if (D.36793 != 0) goto <D.36794>; else goto <D.36795>;
        <D.36794>:
        D.36796 = &MEM[(void *)"MonoAssembly" + 2B];
        D.36797 = *D.36796;
        D.36798 = (int) D.36797;
        D.36799 = __s2 + 2;
        D.36800 = *D.36799;
        D.36801 = (int) D.36800;
        __result = D.36798 - D.36801;
        D.36802 = __s2_len > 2;
        D.36782 = __result == 0;
        D.36803 = D.36802 & D.36782;
        if (D.36803 != 0) goto <D.36804>; else goto <D.36805>;
        <D.36804>:
        D.36806 = &MEM[(void *)"MonoAssembly" + 3B];
        D.36807 = *D.36806;
        D.36808 = (int) D.36807;
        D.36809 = __s2 + 3;
        D.36810 = *D.36809;
        D.36811 = (int) D.36810;
        __result = D.36808 - D.36811;
        <D.36805>:
        <D.36795>:
        <D.36785>:
      }
      D.23990 = __result;
    }
    iftmp.472 = -D.23990;
    goto <D.36812>;
    <D.36775>:
    D.36038 = klass->name;
    iftmp.472 = __builtin_strcmp (D.36038, "MonoAssembly");
    <D.36812>:
    D.23991 = iftmp.472;
  }
  if (D.23991 == 0) goto <D.36729>; else goto <D.36730>;
  <D.36729>:
  token = 536870913;
  goto <D.36731>;
  <D.36730>:
  {
    gchar * msg;
    struct MonoException * ex;

    D.36813 = klass->name_space;
    D.36038 = klass->name;
    msg = monoeg_g_strdup_printf ("MetadataToken is not supported for type \'%s.%s\'", D.36813, D.36038);
    ex = mono_get_exception_not_implemented (msg);
    monoeg_g_free (msg);
    mono_raise_exception (ex);
  }
  <D.36731>:
  <D.36647>:
  <D.36553>:
  <D.36550>:
  <D.36506>:
  <D.36462>:
  <D.36225>:
  <D.36222>:
  <D.36175>:
  <D.36131>:
  <D.36086>:
  <D.36042>:
  D.36394 = token;
  return D.36394;
}


mono_reflection_create_custom_attr_data_args (struct MonoImage * image, struct MonoMethod * method, const guchar * data, guint32 len, struct MonoArray * * typed_args, struct MonoArray * * named_args, struct CattrNamedArg * * named_arg_info, struct MonoError * error)
{
  int D.36815;
  struct MonoClass * D.36818;
  const char * p.473;
  short unsigned int D.36823;
  struct MonoClass * D.36824;
  struct MonoMethodSignature * D.36825;
  short unsigned int D.36826;
  unsigned int D.36827;
  const char * p.474;
  struct MonoMethodSignature * D.36829;
  struct MonoType * D.36830;
  struct MonoObject * iftmp.475;
  struct MonoMethodSignature * D.36832;
  struct MonoType * D.36833;
  int D.36834;
  struct MonoMethodSignature * D.36837;
  struct MonoType * D.36838;
  struct MonoClass * D.36839;
  struct MonoMethodSignature * D.36841;
  struct MonoType * D.36842;
  int D.36843;
  struct MonoMethodSignature * D.36846;
  short unsigned int D.36847;
  unsigned int D.36848;
  const char * named.476;
  short unsigned int D.36850;
  struct MonoClass * D.36851;
  const char * named.477;
  unsigned int D.36853;
  const char * named.478;
  const char * named.479;
  const char * named.480;
  const char * named.481;
  const char * named.482;
  const char * named.483;
  unsigned int D.36864;
  sizetype type_len.484;
  const guchar * D.36866;
  const guchar * D.36867;
  unsigned int type_len.485;
  unsigned int D.36870;
  unsigned int named.486;
  int D.36873;
  unsigned int D.36874;
  unsigned int type_len.487;
  char * D.36876;
  const char * named.488;
  unsigned int D.36878;
  sizetype name_len.489;
  const guchar * D.36880;
  unsigned int name_len.490;
  unsigned int D.36883;
  int D.36885;
  unsigned int D.36886;
  unsigned int name_len.491;
  char * D.36888;
  const char * named.492;
  unsigned int D.36892;
  struct CattrNamedArg * D.36893;
  struct MonoType * D.36894;
  struct MonoObject * iftmp.493;
  int D.36896;
  struct MonoClass * D.36899;
  int D.36901;
  struct MonoType * iftmp.494;
  struct MonoMethod * D.36908;
  struct MonoMethodSignature * D.36911;
  struct MonoMethod * D.36913;
  struct MonoMethodSignature * D.36914;
  struct MonoMethodSignature * D.36915;
  short unsigned int D.36916;
  int D.36917;
  int D.36918;
  struct MonoObject * iftmp.495;
  int D.36920;
  struct MonoClass * D.36923;
  int D.36925;
  struct MonoArray * typedargs;
  struct MonoArray * namedargs;
  struct MonoClass * attrklass;
  struct MonoDomain * domain;
  const char * p;
  const char * named;
  guint32 i;
  guint32 j;
  guint32 num_named;
  struct CattrNamedArg * arginfo;
  void fail = <<< error >>>;

  try
    {
      p = data;
      arginfo = 0B;
      *typed_args = 0B;
      *named_args = 0B;
      *named_arg_info = 0B;
      mono_error_init (error);
      D.36815 = mono_verifier_verify_cattr_content (image, method, data, len, 0B);
      if (D.36815 == 0) goto <D.36816>; else goto <D.36817>;
      <D.36816>:
      mono_error_set_generic_error (error, "System.Reflection", "CustomAttributeFormatException", "Binary format of the specified custom attribute was invalid.");
      return;
      <D.36817>:
      D.36818 = method->klass;
      mono_class_init (D.36818);
      domain = mono_domain_get ();
      if (len <= 1) goto <D.36819>; else goto <D.36821>;
      <D.36821>:
      p.473 = p;
      D.36823 = mono_read16 (p.473);
      if (D.36823 != 1) goto <D.36819>; else goto <D.36820>;
      <D.36819>:
      return;
      <D.36820>:
      D.36824 = mono_get_object_class ();
      D.36825 = mono_method_signature (method);
      D.36826 = D.36825->param_count;
      D.36827 = (unsigned int) D.36826;
      typedargs = mono_array_new (domain, D.36824, D.36827);
      p.473 = p;
      p.474 = p.473 + 2;
      p = p.474;
      i = 0;
      goto <D.24254>;
      <D.24253>:
      {
        struct MonoObject * obj;
        void * val;

        D.36829 = mono_method_signature (method);
        D.36830 = D.36829->params[i];
        p.473 = p;
        val = load_cattr_value (image, D.36830, p.473, &p);
        D.36832 = mono_method_signature (method);
        D.36833 = D.36832->params[i];
        D.36834 = type_is_reference (D.36833);
        if (D.36834 == 0) goto <D.36835>; else goto <D.36836>;
        <D.36835>:
        D.36837 = mono_method_signature (method);
        D.36838 = D.36837->params[i];
        D.36839 = mono_class_from_mono_type (D.36838);
        iftmp.475 = mono_value_box (domain, D.36839, val);
        goto <D.36840>;
        <D.36836>:
        iftmp.475 = val;
        <D.36840>:
        obj = iftmp.475;
        {
          void * * __p;

          __p = mono_array_addr_with_size (typedargs, 4, i);
          mono_gc_wbarrier_set_arrayref (typedargs, __p, obj);
        }
        D.36841 = mono_method_signature (method);
        D.36842 = D.36841->params[i];
        D.36843 = type_is_reference (D.36842);
        if (D.36843 == 0) goto <D.36844>; else goto <D.36845>;
        <D.36844>:
        monoeg_g_free (val);
        <D.36845>:
      }
      i = i + 1;
      <D.24254>:
      D.36846 = mono_method_signature (method);
      D.36847 = D.36846->param_count;
      D.36848 = (unsigned int) D.36847;
      if (D.36848 > i) goto <D.24253>; else goto <D.24255>;
      <D.24255>:
      p.473 = p;
      named = p.473;
      named.476 = named;
      D.36850 = mono_read16 (named.476);
      num_named = (guint32) D.36850;
      D.36851 = mono_get_object_class ();
      namedargs = mono_array_new (domain, D.36851, num_named);
      named.476 = named;
      named.477 = named.476 + 2;
      named = named.477;
      attrklass = method->klass;
      D.36853 = num_named * 12;
      arginfo = monoeg_malloc0 (D.36853);
      *named_arg_info = arginfo;
      j = 0;
      goto <D.24273>;
      <D.24272>:
      {
        gint name_len;
        char * name;
        char named_type;
        char data_type;

        named.476 = named;
        named.478 = named.476;
        named.479 = named.478 + 1;
        named = named.479;
        named_type = *named.478;
        named.476 = named;
        named.480 = named.476;
        named.481 = named.480 + 1;
        named = named.481;
        data_type = *named.480;
        if (data_type == 29) goto <D.36858>; else goto <D.36859>;
        <D.36858>:
        named.476 = named;
        named.482 = named.476;
        named.483 = named.482 + 1;
        named = named.483;
        data_type = *named.482;
        <D.36859>:
        if (data_type == 85) goto <D.36862>; else goto <D.36863>;
        <D.36862>:
        {
          gint type_len;
          char * type_name;

          named.476 = named;
          D.36864 = mono_metadata_decode_blob_size (named.476, &named);
          type_len = (gint) D.36864;
          named.476 = named;
          type_len.484 = (sizetype) type_len;
          D.36866 = named.476 + type_len.484;
          D.36867 = data + len;
          if (D.36866 > D.36867) goto fail; else goto <D.36868>;
          <D.36868>:
          type_len.485 = (unsigned int) type_len;
          D.36870 = ~type_len.485;
          named.476 = named;
          named.486 = (unsigned int) named.476;
          if (D.36870 < named.486) goto fail; else goto <D.36872>;
          <D.36872>:
          D.36873 = type_len + 1;
          D.36874 = (unsigned int) D.36873;
          type_name = monoeg_malloc (D.36874);
          named.476 = named;
          type_len.487 = (unsigned int) type_len;
          memcpy (type_name, named.476, type_len.487);
          type_len.484 = (sizetype) type_len;
          D.36876 = type_name + type_len.484;
          *D.36876 = 0;
          named.476 = named;
          type_len.484 = (sizetype) type_len;
          named.488 = named.476 + type_len.484;
          named = named.488;
          monoeg_g_free (type_name);
        }
        <D.36863>:
        named.476 = named;
        D.36878 = mono_metadata_decode_blob_size (named.476, &named);
        name_len = (gint) D.36878;
        named.476 = named;
        name_len.489 = (sizetype) name_len;
        D.36880 = named.476 + name_len.489;
        D.36867 = data + len;
        if (D.36880 > D.36867) goto fail; else goto <D.36881>;
        <D.36881>:
        name_len.490 = (unsigned int) name_len;
        D.36883 = ~name_len.490;
        named.476 = named;
        named.486 = (unsigned int) named.476;
        if (D.36883 < named.486) goto fail; else goto <D.36884>;
        <D.36884>:
        D.36885 = name_len + 1;
        D.36886 = (unsigned int) D.36885;
        name = monoeg_malloc (D.36886);
        named.476 = named;
        name_len.491 = (unsigned int) name_len;
        memcpy (name, named.476, name_len.491);
        name_len.489 = (sizetype) name_len;
        D.36888 = name + name_len.489;
        *D.36888 = 0;
        named.476 = named;
        name_len.489 = (sizetype) name_len;
        named.492 = named.476 + name_len.489;
        named = named.492;
        if (named_type == 83) goto <D.36890>; else goto <D.36891>;
        <D.36890>:
        {
          struct MonoObject * obj;
          struct MonoClassField * field;
          void * val;

          field = mono_class_get_field_from_name (attrklass, name);
          D.36892 = j * 12;
          D.36893 = arginfo + D.36892;
          D.36894 = field->type;
          D.36893->type = D.36894;
          D.36892 = j * 12;
          D.36893 = arginfo + D.36892;
          D.36893->field = field;
          D.36894 = field->type;
          named.476 = named;
          val = load_cattr_value (image, D.36894, named.476, &named);
          D.36894 = field->type;
          D.36896 = type_is_reference (D.36894);
          if (D.36896 == 0) goto <D.36897>; else goto <D.36898>;
          <D.36897>:
          D.36894 = field->type;
          D.36899 = mono_class_from_mono_type (D.36894);
          iftmp.493 = mono_value_box (domain, D.36899, val);
          goto <D.36900>;
          <D.36898>:
          iftmp.493 = val;
          <D.36900>:
          obj = iftmp.493;
          {
            void * * __p;

            __p = mono_array_addr_with_size (namedargs, 4, j);
            mono_gc_wbarrier_set_arrayref (namedargs, __p, obj);
          }
          D.36894 = field->type;
          D.36901 = type_is_reference (D.36894);
          if (D.36901 == 0) goto <D.36902>; else goto <D.36903>;
          <D.36902>:
          monoeg_g_free (val);
          <D.36903>:
        }
        goto <D.36904>;
        <D.36891>:
        if (named_type == 84) goto <D.36905>; else goto <D.36906>;
        <D.36905>:
        {
          struct MonoObject * obj;
          struct MonoType * prop_type;
          struct MonoProperty * prop;
          void * val;

          prop = mono_class_get_property_from_name (attrklass, name);
          D.36908 = prop->get;
          if (D.36908 != 0B) goto <D.36909>; else goto <D.36910>;
          <D.36909>:
          D.36908 = prop->get;
          D.36911 = mono_method_signature (D.36908);
          iftmp.494 = D.36911->ret;
          goto <D.36912>;
          <D.36910>:
          D.36913 = prop->set;
          D.36914 = mono_method_signature (D.36913);
          D.36913 = prop->set;
          D.36915 = mono_method_signature (D.36913);
          D.36916 = D.36915->param_count;
          D.36917 = (int) D.36916;
          D.36918 = D.36917 + -1;
          iftmp.494 = D.36914->params[D.36918];
          <D.36912>:
          prop_type = iftmp.494;
          D.36892 = j * 12;
          D.36893 = arginfo + D.36892;
          D.36893->type = prop_type;
          D.36892 = j * 12;
          D.36893 = arginfo + D.36892;
          D.36893->prop = prop;
          named.476 = named;
          val = load_cattr_value (image, prop_type, named.476, &named);
          D.36920 = type_is_reference (prop_type);
          if (D.36920 == 0) goto <D.36921>; else goto <D.36922>;
          <D.36921>:
          D.36923 = mono_class_from_mono_type (prop_type);
          iftmp.495 = mono_value_box (domain, D.36923, val);
          goto <D.36924>;
          <D.36922>:
          iftmp.495 = val;
          <D.36924>:
          obj = iftmp.495;
          {
            void * * __p;

            __p = mono_array_addr_with_size (namedargs, 4, j);
            mono_gc_wbarrier_set_arrayref (namedargs, __p, obj);
          }
          D.36925 = type_is_reference (prop_type);
          if (D.36925 == 0) goto <D.36926>; else goto <D.36927>;
          <D.36926>:
          monoeg_g_free (val);
          <D.36927>:
        }
        <D.36906>:
        <D.36904>:
        monoeg_g_free (name);
      }
      j = j + 1;
      <D.24273>:
      if (j < num_named) goto <D.24272>; else goto <D.24274>;
      <D.24274>:
      *typed_args = typedargs;
      *named_args = namedargs;
      return;
      fail:
      mono_error_set_generic_error (error, "System.Reflection", "CustomAttributeFormatException", "Binary format of the specified custom attribute was invalid.");
      monoeg_g_free (arginfo);
      *named_arg_info = 0B;
    }
  finally
    {
      p = {CLOBBER};
      named = {CLOBBER};
    }
}


load_cattr_value (struct MonoImage * image, struct MonoType * t, const char * p, const char * * end)
{
  unsigned char D.36931;
  const char * p.496;
  char D.36933;
  const char * p.503;
  void * D.36935;
  short unsigned int D.36936;
  const char * p.508;
  unsigned int D.36938;
  const char * p.505;
  long long unsigned int D.36940;
  const char * p.511;
  long long unsigned int D.36942;
  double D.36943;
  struct MonoClass * D.36944;
  unsigned char D.36945;
  unsigned char D.36946;
  struct MonoType * D.36949;
  unsigned char D.36950;
  struct MonoImage * D.36951;
  int D.36952;
  int D.24043;
  int iftmp.497;
  int D.24042;
  const char[7] * D.36958;
  unsigned char D.36959;
  int D.36960;
  unsigned char D.36961;
  int D.36962;
  _Bool D.36963;
  _Bool D.36964;
  _Bool D.36965;
  const unsigned char * D.36968;
  unsigned char D.36969;
  int D.36970;
  const unsigned char * D.36971;
  unsigned char D.36972;
  int D.36973;
  _Bool D.36974;
  _Bool D.36975;
  const unsigned char * D.36978;
  unsigned char D.36979;
  int D.36980;
  const unsigned char * D.36981;
  unsigned char D.36982;
  int D.36983;
  _Bool D.36984;
  _Bool D.36985;
  const unsigned char * D.36988;
  unsigned char D.36989;
  int D.36990;
  const unsigned char * D.36991;
  unsigned char D.36992;
  int D.36993;
  const char * D.36995;
  int D.24052;
  int iftmp.498;
  int D.24051;
  const char[9] * D.37001;
  unsigned char D.37002;
  int D.37003;
  unsigned char D.37004;
  int D.37005;
  _Bool D.37006;
  _Bool D.37007;
  _Bool D.37008;
  const unsigned char * D.37011;
  unsigned char D.37012;
  int D.37013;
  const unsigned char * D.37014;
  unsigned char D.37015;
  int D.37016;
  _Bool D.37017;
  _Bool D.37018;
  const unsigned char * D.37021;
  unsigned char D.37022;
  int D.37023;
  const unsigned char * D.37024;
  unsigned char D.37025;
  int D.37026;
  _Bool D.37027;
  _Bool D.37028;
  const unsigned char * D.37031;
  unsigned char D.37032;
  int D.37033;
  const unsigned char * D.37034;
  unsigned char D.37035;
  int D.37036;
  const char * D.37038;
  long long unsigned int D.37041;
  const char * D.37042;
  unsigned int D.37045;
  sizetype slen.499;
  const char * p.504;
  struct MonoDomain * D.37048;
  unsigned int slen.500;
  unsigned int D.37052;
  int D.37053;
  unsigned int D.37054;
  char * D.37055;
  struct MonoDomain * D.37060;
  const char * p.501;
  const char * p.502;
  unsigned char D.37076;
  unsigned int D.37079;
  char * D.37080;
  char D.37084;
  int D.37088;
  struct MonoType * D.37089;
  struct MonoDomain * D.37090;
  unsigned char D.37091;
  unsigned char D.37092;
  _Bool D.37093;
  long int D.37094;
  long int D.37095;
  void * D.37098;
  int D.37099;
  unsigned int D.37100;
  struct MonoDomain * D.37103;
  unsigned char D.37104;
  unsigned char D.37107;
  unsigned char D.37108;
  struct MonoType * D.37111;
  unsigned char D.37112;
  const char * p.506;
  const char * p.507;
  long long unsigned int D.37115;
  double val.509;
  double val.510;
  struct MonoType * D.37118;
  int slen;
  int type;
  struct MonoClass * tklass;
  void handle_enum = <<< error >>>;
  void handle_type = <<< error >>>;

  D.36931 = t->type;
  type = (int) D.36931;
  tklass = t->data.klass;
  handle_enum:
  switch (type) <default: <D.24126>, case 2: <D.24015>, case 3: <D.24017>, case 4: <D.24014>, case 5: <D.24013>, case 6: <D.24019>, case 7: <D.24018>, case 8: <D.24025>, case 9: <D.24024>, case 10: <D.24028>, case 11: <D.24027>, case 12: <D.24023>, case 13: <D.24030>, case 14: <D.24055>, case 17: <D.24033>, case 18: <D.24056>, case 24: <D.24022>, case 25: <D.24021>, case 28: <D.24060>, case 29: <D.24072>>
  <D.24013>:
  <D.24014>:
  <D.24015>:
  {
    MonoBoolean * bval;

    bval = monoeg_malloc (1);
    p.496 = p;
    D.36933 = *p.496;
    *bval = D.36933;
    p.496 = p;
    p.503 = p.496 + 1;
    *end = p.503;
    D.36935 = bval;
    return D.36935;
  }
  <D.24017>:
  <D.24018>:
  <D.24019>:
  {
    guint16 * val;

    val = monoeg_malloc (2);
    p.496 = p;
    D.36936 = mono_read16 (p.496);
    *val = D.36936;
    p.496 = p;
    p.508 = p.496 + 2;
    *end = p.508;
    D.36935 = val;
    return D.36935;
  }
  <D.24021>:
  <D.24022>:
  <D.24023>:
  <D.24024>:
  <D.24025>:
  {
    guint32 * val;

    val = monoeg_malloc (4);
    p.496 = p;
    D.36938 = mono_read32 (p.496);
    *val = D.36938;
    p.496 = p;
    p.505 = p.496 + 4;
    *end = p.505;
    D.36935 = val;
    return D.36935;
  }
  <D.24027>:
  <D.24028>:
  {
    guint64 * val;

    val = monoeg_malloc (8);
    p.496 = p;
    D.36940 = mono_read64 (p.496);
    *val = D.36940;
    p.496 = p;
    p.511 = p.496 + 8;
    *end = p.511;
    D.36935 = val;
    return D.36935;
  }
  <D.24030>:
  {
    double * val;

    val = monoeg_malloc (8);
    {
      union mono_rdouble mf;

      try
        {
          p.496 = p;
          D.36942 = mono_read64 (p.496);
          mf.ival = D.36942;
          D.36943 = mf.fval;
          *val = D.36943;
        }
      finally
        {
          mf = {CLOBBER};
        }
    }
    p.496 = p;
    p.511 = p.496 + 8;
    *end = p.511;
    D.36935 = val;
    return D.36935;
  }
  <D.24033>:
  D.36944 = t->data.klass;
  D.36945 = BIT_FIELD_REF <*D.36944, 8, 160>;
  D.36946 = D.36945 & 16;
  if (D.36946 != 0) goto <D.36947>; else goto <D.36948>;
  <D.36947>:
  D.36944 = t->data.klass;
  D.36949 = mono_class_enum_basetype (D.36944);
  D.36950 = D.36949->type;
  type = (int) D.36950;
  goto handle_enum;
  <D.36948>:
  {
    struct MonoClass * k;

    k = t->data.klass;
    D.36951 = k->image;
    D.36952 = mono_is_corlib_image (D.36951);
    if (D.36952 != 0) goto <D.36953>; else goto <D.36954>;
    <D.36953>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = k->name_space;
        D.36958 = "System";
        D.36959 = MEM[(const unsigned char *)D.36958];
        D.36960 = (int) D.36959;
        D.36961 = *__s2;
        D.36962 = (int) D.36961;
        __result = D.36960 - D.36962;
        {
          D.36963 = __s2_len != 0;
          D.36964 = __result == 0;
          D.36965 = D.36963 & D.36964;
          if (D.36965 != 0) goto <D.36966>; else goto <D.36967>;
          <D.36966>:
          D.36968 = &MEM[(void *)"System" + 1B];
          D.36969 = *D.36968;
          D.36970 = (int) D.36969;
          D.36971 = __s2 + 1;
          D.36972 = *D.36971;
          D.36973 = (int) D.36972;
          __result = D.36970 - D.36973;
          D.36974 = __s2_len > 1;
          D.36964 = __result == 0;
          D.36975 = D.36974 & D.36964;
          if (D.36975 != 0) goto <D.36976>; else goto <D.36977>;
          <D.36976>:
          D.36978 = &MEM[(void *)"System" + 2B];
          D.36979 = *D.36978;
          D.36980 = (int) D.36979;
          D.36981 = __s2 + 2;
          D.36982 = *D.36981;
          D.36983 = (int) D.36982;
          __result = D.36980 - D.36983;
          D.36984 = __s2_len > 2;
          D.36964 = __result == 0;
          D.36985 = D.36984 & D.36964;
          if (D.36985 != 0) goto <D.36986>; else goto <D.36987>;
          <D.36986>:
          D.36988 = &MEM[(void *)"System" + 3B];
          D.36989 = *D.36988;
          D.36990 = (int) D.36989;
          D.36991 = __s2 + 3;
          D.36992 = *D.36991;
          D.36993 = (int) D.36992;
          __result = D.36990 - D.36993;
          <D.36987>:
          <D.36977>:
          <D.36967>:
        }
        D.24042 = __result;
      }
      iftmp.497 = -D.24042;
      goto <D.36994>;
      <D.36957>:
      D.36995 = k->name_space;
      iftmp.497 = __builtin_strcmp (D.36995, "System");
      <D.36994>:
      D.24043 = iftmp.497;
    }
    if (D.24043 == 0) goto <D.36996>; else goto <D.36997>;
    <D.36996>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = k->name;
        D.37001 = "DateTime";
        D.37002 = MEM[(const unsigned char *)D.37001];
        D.37003 = (int) D.37002;
        D.37004 = *__s2;
        D.37005 = (int) D.37004;
        __result = D.37003 - D.37005;
        {
          D.37006 = __s2_len != 0;
          D.37007 = __result == 0;
          D.37008 = D.37006 & D.37007;
          if (D.37008 != 0) goto <D.37009>; else goto <D.37010>;
          <D.37009>:
          D.37011 = &MEM[(void *)"DateTime" + 1B];
          D.37012 = *D.37011;
          D.37013 = (int) D.37012;
          D.37014 = __s2 + 1;
          D.37015 = *D.37014;
          D.37016 = (int) D.37015;
          __result = D.37013 - D.37016;
          D.37017 = __s2_len > 1;
          D.37007 = __result == 0;
          D.37018 = D.37017 & D.37007;
          if (D.37018 != 0) goto <D.37019>; else goto <D.37020>;
          <D.37019>:
          D.37021 = &MEM[(void *)"DateTime" + 2B];
          D.37022 = *D.37021;
          D.37023 = (int) D.37022;
          D.37024 = __s2 + 2;
          D.37025 = *D.37024;
          D.37026 = (int) D.37025;
          __result = D.37023 - D.37026;
          D.37027 = __s2_len > 2;
          D.37007 = __result == 0;
          D.37028 = D.37027 & D.37007;
          if (D.37028 != 0) goto <D.37029>; else goto <D.37030>;
          <D.37029>:
          D.37031 = &MEM[(void *)"DateTime" + 3B];
          D.37032 = *D.37031;
          D.37033 = (int) D.37032;
          D.37034 = __s2 + 3;
          D.37035 = *D.37034;
          D.37036 = (int) D.37035;
          __result = D.37033 - D.37036;
          <D.37030>:
          <D.37020>:
          <D.37010>:
        }
        D.24051 = __result;
      }
      iftmp.498 = -D.24051;
      goto <D.37037>;
      <D.37000>:
      D.37038 = k->name;
      iftmp.498 = __builtin_strcmp (D.37038, "DateTime");
      <D.37037>:
      D.24052 = iftmp.498;
    }
    if (D.24052 == 0) goto <D.37039>; else goto <D.37040>;
    <D.37039>:
    {
      guint64 * val;

      val = monoeg_malloc (8);
      p.496 = p;
      D.37041 = mono_read64 (p.496);
      *val = D.37041;
      p.496 = p;
      p.511 = p.496 + 8;
      *end = p.511;
      D.36935 = val;
      return D.36935;
    }
    <D.37040>:
    <D.36997>:
    <D.36954>:
  }
  D.36944 = t->data.klass;
  D.37042 = D.36944->name;
  monoeg_g_log (0B, 4, "generic valutype %s not handled in custom attr value decoding", D.37042);
  <D.24054>:
  goto <D.24054>;
  <D.24055>:
  p.496 = p;
  D.36933 = *p.496;
  if (D.36933 == 255) goto <D.37043>; else goto <D.37044>;
  <D.37043>:
  p.496 = p;
  p.503 = p.496 + 1;
  *end = p.503;
  D.36935 = 0B;
  return D.36935;
  <D.37044>:
  p.496 = p;
  D.37045 = mono_metadata_decode_value (p.496, &p);
  slen = (int) D.37045;
  p.496 = p;
  slen.499 = (sizetype) slen;
  p.504 = p.496 + slen.499;
  *end = p.504;
  D.37048 = mono_domain_get ();
  p.496 = p;
  slen.500 = (unsigned int) slen;
  D.36935 = mono_string_new_len (D.37048, p.496, slen.500);
  return D.36935;
  <D.24056>:
  {
    char * n;
    struct MonoType * t;

    p.496 = p;
    D.36933 = *p.496;
    if (D.36933 == 255) goto <D.37050>; else goto <D.37051>;
    <D.37050>:
    p.496 = p;
    p.503 = p.496 + 1;
    *end = p.503;
    D.36935 = 0B;
    return D.36935;
    <D.37051>:
    handle_type:
    p.496 = p;
    D.37052 = mono_metadata_decode_value (p.496, &p);
    slen = (int) D.37052;
    p.496 = p;
    D.37053 = slen + 1;
    D.37054 = (unsigned int) D.37053;
    n = monoeg_g_memdup (p.496, D.37054);
    slen.499 = (sizetype) slen;
    D.37055 = n + slen.499;
    *D.37055 = 0;
    t = mono_reflection_type_from_name (n, image);
    if (t == 0B) goto <D.37056>; else goto <D.37057>;
    <D.37056>:
    monoeg_g_log (0B, 16, "Cannot load type \'%s\'", n);
    <D.37057>:
    monoeg_g_free (n);
    p.496 = p;
    slen.499 = (sizetype) slen;
    p.504 = p.496 + slen.499;
    *end = p.504;
    if (t != 0B) goto <D.37058>; else goto <D.37059>;
    <D.37058>:
    D.37060 = mono_domain_get ();
    D.36935 = mono_type_get_object (D.37060, t);
    return D.36935;
    <D.37059>:
    D.36935 = 0B;
    return D.36935;
  }
  <D.24060>:
  {
    char subt;
    struct MonoObject * obj;
    struct MonoClass * subc;
    void * val;

    p.496 = p;
    p.501 = p.496;
    p.502 = p.501 + 1;
    p = p.502;
    subt = *p.501;
    subc = 0B;
    if (subt == 80) goto handle_type; else goto <D.37063>;
    <D.37063>:
    if (subt == 14) goto <D.37064>; else goto <D.37065>;
    <D.37064>:
    type = 14;
    goto handle_enum;
    <D.37065>:
    if (subt == 29) goto <D.37066>; else goto <D.37067>;
    <D.37066>:
    {
      struct MonoType simple_type;
      int etype;

      try
        {
          simple_type = {};
          p.496 = p;
          D.36933 = *p.496;
          etype = (int) D.36933;
          p.496 = p;
          p.503 = p.496 + 1;
          p = p.503;
          type = 29;
          if (etype == 80) goto <D.37068>; else goto <D.37069>;
          <D.37068>:
          tklass = mono_defaults.systemtype_class;
          goto <D.37070>;
          <D.37069>:
          if (etype == 85) goto <D.37071>; else goto <D.37072>;
          <D.37071>:
          p.496 = p;
          tklass = load_cattr_enum_type (image, p.496, &p);
          goto <D.37073>;
          <D.37072>:
          if (etype == 81) goto <D.37074>; else goto <D.37075>;
          <D.37074>:
          etype = 28;
          <D.37075>:
          D.37076 = (unsigned char) etype;
          simple_type.type = D.37076;
          tklass = mono_class_from_mono_type (&simple_type);
          <D.37073>:
          <D.37070>:
          goto handle_enum;
        }
      finally
        {
          simple_type = {CLOBBER};
        }
    }
    <D.37067>:
    if (subt == 85) goto <D.37077>; else goto <D.37078>;
    <D.37077>:
    {
      char * n;
      struct MonoType * t;

      p.496 = p;
      D.37079 = mono_metadata_decode_value (p.496, &p);
      slen = (int) D.37079;
      p.496 = p;
      D.37053 = slen + 1;
      D.37054 = (unsigned int) D.37053;
      n = monoeg_g_memdup (p.496, D.37054);
      slen.499 = (sizetype) slen;
      D.37080 = n + slen.499;
      *D.37080 = 0;
      t = mono_reflection_type_from_name (n, image);
      if (t == 0B) goto <D.37081>; else goto <D.37082>;
      <D.37081>:
      monoeg_g_log (0B, 4, "Cannot load type \'%s\'", n);
      <D.24069>:
      goto <D.24069>;
      <D.37082>:
      monoeg_g_free (n);
      p.496 = p;
      slen.499 = (sizetype) slen;
      p.504 = p.496 + slen.499;
      p = p.504;
      subc = mono_class_from_mono_type (t);
    }
    goto <D.37083>;
    <D.37078>:
    D.37084 = subt + 254;
    if (D.37084 <= 11) goto <D.37085>; else goto <D.37086>;
    <D.37085>:
    {
      struct MonoType simple_type;

      try
        {
          simple_type = {};
          simple_type.type = subt;
          subc = mono_class_from_mono_type (&simple_type);
        }
      finally
        {
          simple_type = {CLOBBER};
        }
    }
    goto <D.37087>;
    <D.37086>:
    D.37088 = (int) subt;
    monoeg_g_log (0B, 4, "Unknown type 0x%02x for object type encoding in custom attr", D.37088);
    <D.24071>:
    goto <D.24071>;
    <D.37087>:
    <D.37083>:
    D.37089 = &subc->byval_arg;
    p.496 = p;
    val = load_cattr_value (image, D.37089, p.496, end);
    D.37090 = mono_domain_get ();
    obj = mono_object_new (D.37090, subc);
    D.37091 = BIT_FIELD_REF <*subc, 8, 184>;
    D.37092 = D.37091 & 8;
    D.37093 = D.37092 != 0;
    D.37094 = (long int) D.37093;
    D.37095 = __builtin_expect (D.37094, 0);
    if (D.37095 != 0) goto <D.37096>; else goto <D.37097>;
    <D.37096>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 7953, "!subc->has_references");
    <D.37097>:
    D.37098 = obj + 8;
    D.37099 = mono_class_value_size (subc, 0B);
    D.37100 = (unsigned int) D.37099;
    mono_gc_memmove_atomic (D.37098, val, D.37100);
    monoeg_g_free (val);
    D.36935 = obj;
    return D.36935;
  }
  <D.24072>:
  {
    struct MonoArray * arr;
    guint32 i;
    guint32 alen;
    guint32 basetype;

    p.496 = p;
    alen = mono_read32 (p.496);
    p.496 = p;
    p.505 = p.496 + 4;
    p = p.505;
    if (alen == 4294967295) goto <D.37101>; else goto <D.37102>;
    <D.37101>:
    p.496 = p;
    *end = p.496;
    D.36935 = 0B;
    return D.36935;
    <D.37102>:
    D.37103 = mono_domain_get ();
    arr = mono_array_new (D.37103, tklass, alen);
    D.37104 = tklass->byval_arg.type;
    basetype = (guint32) D.37104;
    if (basetype == 17) goto <D.37105>; else goto <D.37106>;
    <D.37105>:
    D.37107 = BIT_FIELD_REF <*tklass, 8, 160>;
    D.37108 = D.37107 & 16;
    if (D.37108 != 0) goto <D.37109>; else goto <D.37110>;
    <D.37109>:
    D.37111 = mono_class_enum_basetype (tklass);
    D.37112 = D.37111->type;
    basetype = (guint32) D.37112;
    <D.37110>:
    <D.37106>:
    switch (basetype) <default: <D.24124>, case 2: <D.24079>, case 3: <D.24086>, case 4: <D.24078>, case 5: <D.24077>, case 6: <D.24088>, case 7: <D.24087>, case 8: <D.24096>, case 9: <D.24095>, case 10: <D.24110>, case 11: <D.24109>, case 12: <D.24094>, case 13: <D.24102>, case 14: <D.24118>, case 18: <D.24116>, case 28: <D.24117>>
    <D.24077>:
    <D.24078>:
    <D.24079>:
    i = 0;
    goto <D.24083>;
    <D.24082>:
    {
      MonoBoolean val;

      p.496 = p;
      p.506 = p.496;
      p.507 = p.506 + 1;
      p = p.507;
      val = *p.506;
      {
        MonoBoolean * __p;

        __p = mono_array_addr_with_size (arr, 1, i);
        *__p = val;
      }
    }
    i = i + 1;
    <D.24083>:
    if (i < alen) goto <D.24082>; else goto <D.24084>;
    <D.24084>:
    goto <D.24085>;
    <D.24086>:
    <D.24087>:
    <D.24088>:
    i = 0;
    goto <D.24092>;
    <D.24091>:
    {
      guint16 val;

      p.496 = p;
      val = mono_read16 (p.496);
      {
        guint16 * __p;

        __p = mono_array_addr_with_size (arr, 2, i);
        *__p = val;
      }
      p.496 = p;
      p.508 = p.496 + 2;
      p = p.508;
    }
    i = i + 1;
    <D.24092>:
    if (i < alen) goto <D.24091>; else goto <D.24093>;
    <D.24093>:
    goto <D.24085>;
    <D.24094>:
    <D.24095>:
    <D.24096>:
    i = 0;
    goto <D.24100>;
    <D.24099>:
    {
      guint32 val;

      p.496 = p;
      val = mono_read32 (p.496);
      {
        guint32 * __p;

        __p = mono_array_addr_with_size (arr, 4, i);
        *__p = val;
      }
      p.496 = p;
      p.505 = p.496 + 4;
      p = p.505;
    }
    i = i + 1;
    <D.24100>:
    if (i < alen) goto <D.24099>; else goto <D.24101>;
    <D.24101>:
    goto <D.24085>;
    <D.24102>:
    i = 0;
    goto <D.24107>;
    <D.24106>:
    {
      double val;

      try
        {
          {
            union mono_rdouble mf;

            try
              {
                p.496 = p;
                D.37115 = mono_read64 (p.496);
                mf.ival = D.37115;
                val.509 = mf.fval;
                val = val.509;
              }
            finally
              {
                mf = {CLOBBER};
              }
          }
          {
            double * __p;

            __p = mono_array_addr_with_size (arr, 8, i);
            val.510 = val;
            *__p = val.510;
          }
          p.496 = p;
          p.511 = p.496 + 8;
          p = p.511;
        }
      finally
        {
          val = {CLOBBER};
        }
    }
    i = i + 1;
    <D.24107>:
    if (i < alen) goto <D.24106>; else goto <D.24108>;
    <D.24108>:
    goto <D.24085>;
    <D.24109>:
    <D.24110>:
    i = 0;
    goto <D.24114>;
    <D.24113>:
    {
      guint64 val;

      p.496 = p;
      val = mono_read64 (p.496);
      {
        guint64 * __p;

        __p = mono_array_addr_with_size (arr, 8, i);
        *__p = val;
      }
      p.496 = p;
      p.511 = p.496 + 8;
      p = p.511;
    }
    i = i + 1;
    <D.24114>:
    if (i < alen) goto <D.24113>; else goto <D.24115>;
    <D.24115>:
    goto <D.24085>;
    <D.24116>:
    <D.24117>:
    <D.24118>:
    i = 0;
    goto <D.24122>;
    <D.24121>:
    {
      struct MonoObject * item;

      D.37118 = &tklass->byval_arg;
      p.496 = p;
      item = load_cattr_value (image, D.37118, p.496, &p);
      {
        void * * __p;

        __p = mono_array_addr_with_size (arr, 4, i);
        mono_gc_wbarrier_set_arrayref (arr, __p, item);
      }
    }
    i = i + 1;
    <D.24122>:
    if (i < alen) goto <D.24121>; else goto <D.24123>;
    <D.24123>:
    goto <D.24085>;
    <D.24124>:
    monoeg_g_log (0B, 4, "Type 0x%02x not handled in custom attr array decoding", basetype);
    <D.24125>:
    goto <D.24125>;
    <D.24085>:
    p.496 = p;
    *end = p.496;
    D.36935 = arr;
    return D.36935;
  }
  <D.24126>:
  monoeg_g_log (0B, 4, "Type 0x%02x not handled in custom attr value decoding", type);
  <D.24127>:
  goto <D.24127>;
  D.36935 = 0B;
  return D.36935;
}


load_cattr_enum_type (struct MonoImage * image, const char * p, const char * * end)
{
  const char * p.512;
  unsigned int D.37122;
  int D.37123;
  unsigned int D.37124;
  sizetype slen.513;
  char * D.37126;
  const char * p.514;
  struct MonoClass * D.37130;
  char * n;
  struct MonoType * t;
  int slen;

  p.512 = p;
  D.37122 = mono_metadata_decode_value (p.512, &p);
  slen = (int) D.37122;
  p.512 = p;
  D.37123 = slen + 1;
  D.37124 = (unsigned int) D.37123;
  n = monoeg_g_memdup (p.512, D.37124);
  slen.513 = (sizetype) slen;
  D.37126 = n + slen.513;
  *D.37126 = 0;
  t = mono_reflection_type_from_name (n, image);
  if (t == 0B) goto <D.37127>; else goto <D.37128>;
  <D.37127>:
  monoeg_g_log (0B, 4, "Cannot load type \'%s\'", n);
  <D.24002>:
  goto <D.24002>;
  <D.37128>:
  monoeg_g_free (n);
  p.512 = p;
  slen.513 = (sizetype) slen;
  p.514 = p.512 + slen.513;
  p = p.514;
  p.512 = p;
  *end = p.512;
  D.37130 = mono_class_from_mono_type (t);
  return D.37130;
}


type_is_reference (struct MonoType * type)
{
  unsigned char D.37132;
  int D.37133;
  gboolean D.37134;

  D.37132 = type->type;
  D.37133 = (int) D.37132;
  switch (D.37133) <default: <D.24164>, case 2: <D.24149>, case 3: <D.24150>, case 4: <D.24154>, case 5: <D.24153>, case 6: <D.24156>, case 7: <D.24155>, case 8: <D.24158>, case 9: <D.24157>, case 10: <D.24160>, case 11: <D.24159>, case 12: <D.24162>, case 13: <D.24161>, case 17: <D.24163>, case 24: <D.24152>, case 25: <D.24151>>
  <D.24149>:
  <D.24150>:
  <D.24151>:
  <D.24152>:
  <D.24153>:
  <D.24154>:
  <D.24155>:
  <D.24156>:
  <D.24157>:
  <D.24158>:
  <D.24159>:
  <D.24160>:
  <D.24161>:
  <D.24162>:
  <D.24163>:
  D.37134 = 0;
  return D.37134;
  <D.24164>:
  D.37134 = 1;
  return D.37134;
}


mono_reflection_resolve_custom_attribute_data (struct MonoReflectionMethod * ref_method, struct MonoReflectionAssembly * assembly, void * data, guint32 len, struct MonoArray * * ctor_args, struct MonoArray * * named_args)
{
  struct MonoAssembly * D.37138;
  struct MonoVTable * D.37139;
  struct MonoClass * D.37140;
  int D.37141;
  struct MonoException * D.37144;
  int D.37145;
  struct MonoLoaderError * D.37148;
  struct MonoLoaderError * D.37151;
  struct MonoException * D.37152;
  struct MonoArray * typedargs.515;
  struct MonoArray * namedargs.516;
  struct CattrNamedArg * arginfo.517;
  unsigned int i.518;
  char * D.37160;
  struct MonoMethodSignature * D.37161;
  struct MonoType * D.37162;
  struct MonoMethodSignature * D.37163;
  short unsigned int D.37164;
  int D.37165;
  char * D.37166;
  unsigned int i.519;
  unsigned int D.37168;
  struct CattrNamedArg * D.37169;
  struct MonoProperty * D.37170;
  struct MonoClassField * D.37174;
  struct MonoType * D.37175;
  unsigned int D.37176;
  struct MonoDomain * domain;
  struct MonoArray * typedargs;
  struct MonoArray * namedargs;
  struct MonoImage * image;
  struct MonoMethod * method;
  struct CattrNamedArg * arginfo;
  struct MonoError error;
  int i;

  try
    {
      arginfo = 0B;
      *ctor_args = 0B;
      *named_args = 0B;
      if (len == 0) goto <D.37136>; else goto <D.37137>;
      <D.37136>:
      return;
      <D.37137>:
      D.37138 = assembly->assembly;
      image = D.37138->image;
      method = ref_method->method;
      D.37139 = MEM[(struct MonoObject *)ref_method].vtable;
      domain = D.37139->domain;
      D.37140 = method->klass;
      D.37141 = mono_class_init (D.37140);
      if (D.37141 == 0) goto <D.37142>; else goto <D.37143>;
      <D.37142>:
      D.37140 = method->klass;
      D.37144 = mono_class_get_exception_for_failure (D.37140);
      mono_raise_exception (D.37144);
      <D.37143>:
      mono_reflection_create_custom_attr_data_args (image, method, data, len, &typedargs, &namedargs, &arginfo, &error);
      D.37145 = mono_error_ok (&error);
      if (D.37145 == 0) goto <D.37146>; else goto <D.37147>;
      <D.37146>:
      mono_error_raise_exception (&error);
      <D.37147>:
      D.37148 = mono_loader_get_last_error ();
      if (D.37148 != 0B) goto <D.37149>; else goto <D.37150>;
      <D.37149>:
      D.37151 = mono_loader_get_last_error ();
      D.37152 = mono_loader_error_prepare_exception (D.37151);
      mono_raise_exception (D.37152);
      <D.37150>:
      typedargs.515 = typedargs;
      if (typedargs.515 == 0B) goto <D.37153>; else goto <D.37156>;
      <D.37156>:
      namedargs.516 = namedargs;
      if (namedargs.516 == 0B) goto <D.37153>; else goto <D.37154>;
      <D.37153>:
      arginfo.517 = arginfo;
      monoeg_g_free (arginfo.517);
      return;
      <D.37154>:
      i = 0;
      goto <D.24295>;
      <D.24294>:
      {
        struct MonoObject * obj;
        struct MonoObject * typedarg;

        typedargs.515 = typedargs;
        i.518 = (unsigned int) i;
        D.37160 = mono_array_addr_with_size (typedargs.515, 4, i.518);
        obj = MEM[(struct MonoObject * *)D.37160];
        D.37161 = mono_method_signature (method);
        D.37162 = D.37161->params[i];
        typedarg = create_cattr_typed_arg (D.37162, obj);
        {
          void * * __p;

          typedargs.515 = typedargs;
          i.518 = (unsigned int) i;
          __p = mono_array_addr_with_size (typedargs.515, 4, i.518);
          typedargs.515 = typedargs;
          mono_gc_wbarrier_set_arrayref (typedargs.515, __p, typedarg);
        }
      }
      i = i + 1;
      <D.24295>:
      D.37163 = mono_method_signature (method);
      D.37164 = D.37163->param_count;
      D.37165 = (int) D.37164;
      if (D.37165 > i) goto <D.24294>; else goto <D.24296>;
      <D.24296>:
      i = 0;
      goto <D.24303>;
      <D.24302>:
      {
        struct MonoObject * obj;
        struct MonoObject * typedarg;
        struct MonoObject * namedarg;
        struct MonoObject * minfo;

        namedargs.516 = namedargs;
        i.518 = (unsigned int) i;
        D.37166 = mono_array_addr_with_size (namedargs.516, 4, i.518);
        obj = MEM[(struct MonoObject * *)D.37166];
        arginfo.517 = arginfo;
        i.519 = (unsigned int) i;
        D.37168 = i.519 * 12;
        D.37169 = arginfo.517 + D.37168;
        D.37170 = D.37169->prop;
        if (D.37170 != 0B) goto <D.37171>; else goto <D.37172>;
        <D.37171>:
        arginfo.517 = arginfo;
        i.519 = (unsigned int) i;
        D.37168 = i.519 * 12;
        D.37169 = arginfo.517 + D.37168;
        D.37170 = D.37169->prop;
        minfo = mono_property_get_object (domain, 0B, D.37170);
        goto <D.37173>;
        <D.37172>:
        arginfo.517 = arginfo;
        i.519 = (unsigned int) i;
        D.37168 = i.519 * 12;
        D.37169 = arginfo.517 + D.37168;
        D.37174 = D.37169->field;
        minfo = mono_field_get_object (domain, 0B, D.37174);
        <D.37173>:
        arginfo.517 = arginfo;
        i.519 = (unsigned int) i;
        D.37168 = i.519 * 12;
        D.37169 = arginfo.517 + D.37168;
        D.37175 = D.37169->type;
        typedarg = create_cattr_typed_arg (D.37175, obj);
        namedarg = create_cattr_named_arg (minfo, typedarg);
        {
          void * * __p;

          namedargs.516 = namedargs;
          i.518 = (unsigned int) i;
          __p = mono_array_addr_with_size (namedargs.516, 4, i.518);
          namedargs.516 = namedargs;
          mono_gc_wbarrier_set_arrayref (namedargs.516, __p, namedarg);
        }
      }
      i = i + 1;
      <D.24303>:
      i.518 = (unsigned int) i;
      namedargs.516 = namedargs;
      D.37176 = mono_array_length (namedargs.516);
      if (i.518 < D.37176) goto <D.24302>; else goto <D.24304>;
      <D.24304>:
      typedargs.515 = typedargs;
      *ctor_args = typedargs.515;
      namedargs.516 = namedargs;
      *named_args = namedargs.516;
      arginfo.517 = arginfo;
      monoeg_g_free (arginfo.517);
    }
  finally
    {
      typedargs = {CLOBBER};
      namedargs = {CLOBBER};
      arginfo = {CLOBBER};
      error = {CLOBBER};
    }
}


create_cattr_typed_arg (struct MonoType * t, struct MonoObject * val)
{
  struct MonoClass * klass.520;
  struct MonoImage * D.37183;
  struct MonoClass * klass.521;
  struct MonoMethod * ctor.522;
  struct MonoMethod * ctor.523;
  struct MonoDomain * D.37189;
  struct MonoReflectionType * D.37190;
  struct MonoDomain * D.37191;
  struct MonoObject * D.37192;
  static struct MonoClass * klass;
  static struct MonoMethod * ctor;
  struct MonoObject * retval;
  void * params[2];
  void * unboxed;

  try
    {
      klass.520 = klass;
      if (klass.520 == 0B) goto <D.37181>; else goto <D.37182>;
      <D.37181>:
      D.37183 = mono_defaults.corlib;
      klass.521 = mono_class_from_name (D.37183, "System.Reflection", "CustomAttributeTypedArgument");
      klass = klass.521;
      <D.37182>:
      ctor.522 = ctor;
      if (ctor.522 == 0B) goto <D.37186>; else goto <D.37187>;
      <D.37186>:
      klass.520 = klass;
      ctor.523 = mono_class_get_method_from_name (klass.520, ".ctor", 2);
      ctor = ctor.523;
      <D.37187>:
      D.37189 = mono_domain_get ();
      D.37190 = mono_type_get_object (D.37189, t);
      params[0] = D.37190;
      params[1] = val;
      D.37191 = mono_domain_get ();
      klass.520 = klass;
      retval = mono_object_new (D.37191, klass.520);
      unboxed = mono_object_unbox (retval);
      ctor.522 = ctor;
      mono_runtime_invoke (ctor.522, unboxed, &params, 0B);
      D.37192 = retval;
      return D.37192;
    }
  finally
    {
      params = {CLOBBER};
    }
}


create_cattr_named_arg (void * minfo, struct MonoObject * typedarg)
{
  struct MonoClass * klass.524;
  struct MonoImage * D.37198;
  struct MonoClass * klass.525;
  struct MonoMethod * ctor.526;
  struct MonoMethod * ctor.527;
  struct MonoDomain * D.37204;
  struct MonoObject * D.37205;
  static struct MonoClass * klass;
  static struct MonoMethod * ctor;
  struct MonoObject * retval;
  void * unboxed;
  void * params[2];

  try
    {
      klass.524 = klass;
      if (klass.524 == 0B) goto <D.37196>; else goto <D.37197>;
      <D.37196>:
      D.37198 = mono_defaults.corlib;
      klass.525 = mono_class_from_name (D.37198, "System.Reflection", "CustomAttributeNamedArgument");
      klass = klass.525;
      <D.37197>:
      ctor.526 = ctor;
      if (ctor.526 == 0B) goto <D.37201>; else goto <D.37202>;
      <D.37201>:
      klass.524 = klass;
      ctor.527 = mono_class_get_method_from_name (klass.524, ".ctor", 2);
      ctor = ctor.527;
      <D.37202>:
      params[0] = minfo;
      params[1] = typedarg;
      D.37204 = mono_domain_get ();
      klass.524 = klass;
      retval = mono_object_new (D.37204, klass.524);
      unboxed = mono_object_unbox (retval);
      ctor.526 = ctor;
      mono_runtime_invoke (ctor.526, unboxed, &params, 0B);
      D.37205 = retval;
      return D.37205;
    }
  finally
    {
      params = {CLOBBER};
    }
}


mono_custom_attrs_construct (struct MonoCustomAttrInfo * cinfo)
{
  struct MonoArray * D.37208;
  struct MonoError error;

  try
    {
      D.37208 = mono_custom_attrs_construct_by_type (cinfo, 0B, &error);
      return D.37208;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_custom_attrs_construct_by_type (struct MonoCustomAttrInfo * cinfo, struct MonoClass * attr_klass, struct MonoError * error)
{
  struct MonoMethod * D.37214;
  struct MonoClass * D.37215;
  int D.37216;
  int D.37217;
  struct MonoDomain * D.37218;
  struct MonoClass * D.24326;
  struct MonoClass * tmp_klass.528;
  struct MonoClass * D.37222;
  struct MonoClass * tmp_klass.529;
  _Bool D.37224;
  long int D.37225;
  long int D.37226;
  struct MonoVTable * D.37229;
  unsigned int n.530;
  struct MonoException * D.37233;
  int D.37237;
  struct MonoImage * D.37238;
  const mono_byte * D.37239;
  unsigned int D.37240;
  int D.37241;
  struct MonoArray * D.37244;
  struct MonoArray * result;
  struct MonoObject * attr;
  int i;
  int n;

  mono_error_init (error);
  n = 0;
  i = 0;
  goto <D.24323>;
  <D.24322>:
  if (attr_klass == 0B) goto <D.37211>; else goto <D.37213>;
  <D.37213>:
  D.37214 = cinfo->attrs[i].ctor;
  D.37215 = D.37214->klass;
  D.37216 = mono_class_is_assignable_from (attr_klass, D.37215);
  if (D.37216 != 0) goto <D.37211>; else goto <D.37212>;
  <D.37211>:
  n = n + 1;
  <D.37212>:
  i = i + 1;
  <D.24323>:
  D.37217 = cinfo->num_attrs;
  if (D.37217 > i) goto <D.24322>; else goto <D.24324>;
  <D.24324>:
  D.37218 = mono_domain_get ();
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.528 = tmp_klass;
      if (tmp_klass.528 == 0B) goto <D.37220>; else goto <D.37221>;
      <D.37220>:
      D.37222 = mono_defaults.attribute_class;
      tmp_klass.529 = mono_array_class_get (D.37222, 1);
      tmp_klass = tmp_klass.529;
      tmp_klass.528 = tmp_klass;
      D.37224 = tmp_klass.528 == 0B;
      D.37225 = (long int) D.37224;
      D.37226 = __builtin_expect (D.37225, 0);
      if (D.37226 != 0) goto <D.37227>; else goto <D.37228>;
      <D.37227>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 8491, "tmp_klass");
      <D.37228>:
      <D.37221>:
    }
    D.24326 = tmp_klass;
  }
  D.37229 = mono_class_vtable (D.37218, D.24326);
  n.530 = (unsigned int) n;
  result = mono_array_new_specific (D.37229, n.530);
  n = 0;
  i = 0;
  goto <D.24329>;
  <D.24328>:
  D.37214 = cinfo->attrs[i].ctor;
  if (D.37214 == 0B) goto <D.37231>; else goto <D.37232>;
  <D.37231>:
  D.37233 = mono_get_exception_type_load (0B, 0B);
  mono_raise_exception (D.37233);
  <D.37232>:
  if (attr_klass == 0B) goto <D.37234>; else goto <D.37236>;
  <D.37236>:
  D.37214 = cinfo->attrs[i].ctor;
  D.37215 = D.37214->klass;
  D.37237 = mono_class_is_assignable_from (attr_klass, D.37215);
  if (D.37237 != 0) goto <D.37234>; else goto <D.37235>;
  <D.37234>:
  D.37238 = cinfo->image;
  D.37214 = cinfo->attrs[i].ctor;
  D.37239 = cinfo->attrs[i].data;
  D.37240 = cinfo->attrs[i].data_size;
  attr = create_custom_attr (D.37238, D.37214, D.37239, D.37240, error);
  D.37241 = mono_error_ok (error);
  if (D.37241 == 0) goto <D.37242>; else goto <D.37243>;
  <D.37242>:
  D.37244 = result;
  return D.37244;
  <D.37243>:
  {
    void * * __p;

    n.530 = (unsigned int) n;
    __p = mono_array_addr_with_size (result, 4, n.530);
    mono_gc_wbarrier_set_arrayref (result, __p, attr);
  }
  n = n + 1;
  <D.37235>:
  i = i + 1;
  <D.24329>:
  D.37217 = cinfo->num_attrs;
  if (D.37217 > i) goto <D.24328>; else goto <D.24330>;
  <D.24330>:
  D.37244 = result;
  return D.37244;
}


create_custom_attr (struct MonoImage * image, struct MonoMethod * method, const guchar * data, guint32 len, struct MonoError * error)
{
  struct MonoClass * D.37246;
  int D.37247;
  struct MonoObject * D.37250;
  struct MonoDomain * D.37253;
  const char * p.531;
  short unsigned int D.37258;
  short unsigned int D.37259;
  unsigned int D.37263;
  unsigned int D.37264;
  const char * p.532;
  unsigned int D.37266;
  void * * D.37267;
  struct MonoMethodSignature * D.37268;
  struct MonoType * D.37269;
  void * D.37270;
  struct MonoMethodSignature * D.37271;
  short unsigned int D.37272;
  unsigned int D.37273;
  struct MonoDomain * D.37274;
  struct MonoMethodSignature * D.37275;
  const char * named.533;
  short unsigned int D.37277;
  const char * named.534;
  const char * named.535;
  const char * named.536;
  const char * named.537;
  const char * named.538;
  const char * named.539;
  const char * named.540;
  unsigned int D.37289;
  int D.37290;
  unsigned int D.37291;
  unsigned int type_len.541;
  sizetype type_len.542;
  char * D.37294;
  const char * named.543;
  unsigned int D.37296;
  int D.37297;
  unsigned int D.37298;
  unsigned int name_len.544;
  sizetype name_len.545;
  char * D.37301;
  const char * named.546;
  struct MonoVTable * D.37305;
  struct MonoClass * D.37306;
  struct MonoType * D.37307;
  int D.37308;
  struct MonoType * iftmp.547;
  struct MonoMethod * D.37315;
  struct MonoMethodSignature * D.37318;
  struct MonoMethod * D.37320;
  struct MonoMethodSignature * D.37321;
  struct MonoMethodSignature * D.37322;
  short unsigned int D.37323;
  int D.37324;
  int D.37325;
  void * D.37326;
  int D.37327;
  void * D.37330;
  const char * p;
  const char * named;
  guint32 i;
  guint32 j;
  guint32 num_named;
  struct MonoObject * attr;
  void * params_buf[32];
  void * * params;
  struct MonoMethodSignature * sig;

  try
    {
      p = data;
      mono_error_init (error);
      D.37246 = method->klass;
      mono_class_init (D.37246);
      D.37247 = mono_verifier_verify_cattr_content (image, method, data, len, 0B);
      if (D.37247 == 0) goto <D.37248>; else goto <D.37249>;
      <D.37248>:
      mono_error_set_generic_error (error, "System.Reflection", "CustomAttributeFormatException", "Binary format of the specified custom attribute was invalid.");
      D.37250 = 0B;
      return D.37250;
      <D.37249>:
      if (len == 0) goto <D.37251>; else goto <D.37252>;
      <D.37251>:
      D.37253 = mono_domain_get ();
      D.37246 = method->klass;
      attr = mono_object_new (D.37253, D.37246);
      mono_runtime_invoke (method, attr, 0B, 0B);
      D.37250 = attr;
      return D.37250;
      <D.37252>:
      if (len <= 1) goto <D.37254>; else goto <D.37256>;
      <D.37256>:
      p.531 = p;
      D.37258 = mono_read16 (p.531);
      if (D.37258 != 1) goto <D.37254>; else goto <D.37255>;
      <D.37254>:
      D.37250 = 0B;
      return D.37250;
      <D.37255>:
      sig = mono_method_signature (method);
      D.37259 = sig->param_count;
      if (D.37259 <= 31) goto <D.37260>; else goto <D.37261>;
      <D.37260>:
      params = &params_buf;
      goto <D.37262>;
      <D.37261>:
      D.37259 = sig->param_count;
      D.37263 = (unsigned int) D.37259;
      D.37264 = D.37263 * 4;
      params = mono_gc_alloc_fixed (D.37264, 0B);
      <D.37262>:
      p.531 = p;
      p.532 = p.531 + 2;
      p = p.532;
      i = 0;
      goto <D.24214>;
      <D.24213>:
      D.37266 = i * 4;
      D.37267 = params + D.37266;
      D.37268 = mono_method_signature (method);
      D.37269 = D.37268->params[i];
      p.531 = p;
      D.37270 = load_cattr_value (image, D.37269, p.531, &p);
      *D.37267 = D.37270;
      i = i + 1;
      <D.24214>:
      D.37271 = mono_method_signature (method);
      D.37272 = D.37271->param_count;
      D.37273 = (unsigned int) D.37272;
      if (D.37273 > i) goto <D.24213>; else goto <D.24215>;
      <D.24215>:
      p.531 = p;
      named = p.531;
      D.37274 = mono_domain_get ();
      D.37246 = method->klass;
      attr = mono_object_new (D.37274, D.37246);
      mono_runtime_invoke (method, attr, params, 0B);
      D.37275 = method->signature;
      free_param_data (D.37275, params);
      named.533 = named;
      D.37277 = mono_read16 (named.533);
      num_named = (guint32) D.37277;
      named.533 = named;
      named.534 = named.533 + 2;
      named = named.534;
      j = 0;
      goto <D.24228>;
      <D.24227>:
      {
        gint name_len;
        char * name;
        char named_type;
        char data_type;

        named.533 = named;
        named.535 = named.533;
        named.536 = named.535 + 1;
        named = named.536;
        named_type = *named.535;
        named.533 = named;
        named.537 = named.533;
        named.538 = named.537 + 1;
        named = named.538;
        data_type = *named.537;
        if (data_type == 29) goto <D.37283>; else goto <D.37284>;
        <D.37283>:
        named.533 = named;
        named.539 = named.533;
        named.540 = named.539 + 1;
        named = named.540;
        data_type = *named.539;
        <D.37284>:
        if (data_type == 85) goto <D.37287>; else goto <D.37288>;
        <D.37287>:
        {
          gint type_len;
          char * type_name;

          named.533 = named;
          D.37289 = mono_metadata_decode_blob_size (named.533, &named);
          type_len = (gint) D.37289;
          D.37290 = type_len + 1;
          D.37291 = (unsigned int) D.37290;
          type_name = monoeg_malloc (D.37291);
          named.533 = named;
          type_len.541 = (unsigned int) type_len;
          memcpy (type_name, named.533, type_len.541);
          type_len.542 = (sizetype) type_len;
          D.37294 = type_name + type_len.542;
          *D.37294 = 0;
          named.533 = named;
          type_len.542 = (sizetype) type_len;
          named.543 = named.533 + type_len.542;
          named = named.543;
          monoeg_g_free (type_name);
        }
        <D.37288>:
        named.533 = named;
        D.37296 = mono_metadata_decode_blob_size (named.533, &named);
        name_len = (gint) D.37296;
        D.37297 = name_len + 1;
        D.37298 = (unsigned int) D.37297;
        name = monoeg_malloc (D.37298);
        named.533 = named;
        name_len.544 = (unsigned int) name_len;
        memcpy (name, named.533, name_len.544);
        name_len.545 = (sizetype) name_len;
        D.37301 = name + name_len.545;
        *D.37301 = 0;
        named.533 = named;
        name_len.545 = (sizetype) name_len;
        named.546 = named.533 + name_len.545;
        named = named.546;
        if (named_type == 83) goto <D.37303>; else goto <D.37304>;
        <D.37303>:
        {
          struct MonoClassField * field;
          void * val;

          D.37305 = attr->vtable;
          D.37306 = D.37305->klass;
          field = mono_class_get_field_from_name (D.37306, name);
          D.37307 = field->type;
          named.533 = named;
          val = load_cattr_value (image, D.37307, named.533, &named);
          mono_field_set_value (attr, field, val);
          D.37307 = field->type;
          D.37308 = type_is_reference (D.37307);
          if (D.37308 == 0) goto <D.37309>; else goto <D.37310>;
          <D.37309>:
          monoeg_g_free (val);
          <D.37310>:
        }
        goto <D.37311>;
        <D.37304>:
        if (named_type == 84) goto <D.37312>; else goto <D.37313>;
        <D.37312>:
        {
          struct MonoProperty * prop;
          void * pparams[1];
          struct MonoType * prop_type;

          try
            {
              D.37305 = attr->vtable;
              D.37306 = D.37305->klass;
              prop = mono_class_get_property_from_name (D.37306, name);
              D.37315 = prop->get;
              if (D.37315 != 0B) goto <D.37316>; else goto <D.37317>;
              <D.37316>:
              D.37315 = prop->get;
              D.37318 = mono_method_signature (D.37315);
              iftmp.547 = D.37318->ret;
              goto <D.37319>;
              <D.37317>:
              D.37320 = prop->set;
              D.37321 = mono_method_signature (D.37320);
              D.37320 = prop->set;
              D.37322 = mono_method_signature (D.37320);
              D.37323 = D.37322->param_count;
              D.37324 = (int) D.37323;
              D.37325 = D.37324 + -1;
              iftmp.547 = D.37321->params[D.37325];
              <D.37319>:
              prop_type = iftmp.547;
              named.533 = named;
              D.37326 = load_cattr_value (image, prop_type, named.533, &named);
              pparams[0] = D.37326;
              mono_property_set_value (prop, attr, &pparams, 0B);
              D.37327 = type_is_reference (prop_type);
              if (D.37327 == 0) goto <D.37328>; else goto <D.37329>;
              <D.37328>:
              D.37330 = pparams[0];
              monoeg_g_free (D.37330);
              <D.37329>:
            }
          finally
            {
              pparams = {CLOBBER};
            }
        }
        <D.37313>:
        <D.37311>:
        monoeg_g_free (name);
      }
      j = j + 1;
      <D.24228>:
      if (j < num_named) goto <D.24227>; else goto <D.24229>;
      <D.24229>:
      if (&params_buf != params) goto <D.37331>; else goto <D.37332>;
      <D.37331>:
      mono_gc_free_fixed (params);
      <D.37332>:
      D.37250 = attr;
      return D.37250;
    }
  finally
    {
      p = {CLOBBER};
      named = {CLOBBER};
      params_buf = {CLOBBER};
    }
}


free_param_data (struct MonoMethodSignature * sig, void * * params)
{
  struct MonoType * D.37335;
  int D.37336;
  unsigned int i.548;
  unsigned int D.37340;
  void * * D.37341;
  void * D.37342;
  short unsigned int D.37343;
  int D.37344;
  int i;

  i = 0;
  goto <D.24171>;
  <D.24170>:
  D.37335 = sig->params[i];
  D.37336 = type_is_reference (D.37335);
  if (D.37336 == 0) goto <D.37337>; else goto <D.37338>;
  <D.37337>:
  i.548 = (unsigned int) i;
  D.37340 = i.548 * 4;
  D.37341 = params + D.37340;
  D.37342 = *D.37341;
  monoeg_g_free (D.37342);
  <D.37338>:
  i = i + 1;
  <D.24171>:
  D.37343 = sig->param_count;
  D.37344 = (int) D.37343;
  if (D.37344 > i) goto <D.24170>; else goto <D.24172>;
  <D.24172>:
}


mono_custom_attrs_from_index (struct MonoImage * image, guint32 idx)
{
  struct MonoCustomAttrInfo * D.37347;
  int i.549;
  unsigned int D.37349;
  void * i.550;
  <unnamed-unsigned:24> D.37352;
  unsigned int D.37353;
  unsigned int D.37356;
  unsigned int D.37357;
  int len.551;
  void * D.37359;
  int D.37360;
  unsigned int D.37361;
  unsigned int D.37362;
  struct MonoMethod * D.37363;
  struct MonoMethod * D.37364;
  char * D.37367;
  unsigned int D.37368;
  int D.37369;
  const char * data.552;
  const char * data.553;
  unsigned int D.37374;
  guint32 mtoken;
  guint32 i;
  guint32 len;
  guint32 cols[3];
  struct MonoTableInfo * ca;
  struct MonoCustomAttrInfo * ainfo;
  struct GList * tmp;
  struct GList * list;
  const char * data;

  try
    {
      list = 0B;
      ca = &image->tables[12];
      i = mono_metadata_custom_attrs_from_index (image, idx);
      if (i == 0) goto <D.37345>; else goto <D.37346>;
      <D.37345>:
      D.37347 = 0B;
      return D.37347;
      <D.37346>:
      i = i + 4294967295;
      goto <D.24360>;
      <D.24359>:
      i.549 = (int) i;
      D.37349 = mono_metadata_decode_row_col (ca, i.549, 0);
      if (D.37349 != idx) goto <D.24358>; else goto <D.37350>;
      <D.37350>:
      i.550 = (void *) i;
      list = monoeg_g_list_prepend (list, i.550);
      i = i + 1;
      <D.24360>:
      D.37352 = ca->rows;
      D.37353 = (unsigned int) D.37352;
      if (D.37353 > i) goto <D.24359>; else goto <D.24358>;
      <D.24358>:
      len = monoeg_g_list_length (list);
      if (len == 0) goto <D.37354>; else goto <D.37355>;
      <D.37354>:
      D.37347 = 0B;
      return D.37347;
      <D.37355>:
      D.37356 = len + 1;
      D.37357 = D.37356 * 12;
      ainfo = monoeg_malloc0 (D.37357);
      len.551 = (int) len;
      ainfo->num_attrs = len.551;
      ainfo->image = image;
      i = 0;
      tmp = list;
      goto <D.24367>;
      <D.24366>:
      D.37359 = tmp->data;
      D.37360 = (int) D.37359;
      mono_metadata_decode_row (ca, D.37360, &cols, 3);
      D.37361 = cols[1];
      mtoken = D.37361 >> 3;
      D.37361 = cols[1];
      D.37362 = D.37361 & 7;
      switch (D.37362) <default: <D.24364>, case 2: <D.24361>, case 3: <D.24363>>
      <D.24361>:
      mtoken = mtoken | 100663296;
      goto <D.24362>;
      <D.24363>:
      mtoken = mtoken | 167772160;
      goto <D.24362>;
      <D.24364>:
      D.37361 = cols[1];
      monoeg_g_log (0B, 4, "Unknown table for custom attr type %08x", D.37361);
      <D.24365>:
      goto <D.24365>;
      <D.24362>:
      D.37363 = mono_get_method (image, mtoken, 0B);
      ainfo->attrs[i].ctor = D.37363;
      D.37364 = ainfo->attrs[i].ctor;
      if (D.37364 == 0B) goto <D.37365>; else goto <D.37366>;
      <D.37365>:
      D.37367 = image->name;
      monoeg_g_log (0B, 16, "Can\'t find custom attr constructor image: %s mtoken: 0x%08x", D.37367, mtoken);
      monoeg_g_list_free (list);
      monoeg_g_free (ainfo);
      D.37347 = 0B;
      return D.37347;
      <D.37366>:
      D.37368 = cols[2];
      D.37369 = mono_verifier_verify_cattr_blob (image, D.37368, 0B);
      if (D.37369 == 0) goto <D.37370>; else goto <D.37371>;
      <D.37370>:
      D.37367 = image->name;
      monoeg_g_log (0B, 16, "Invalid custom attribute blob on image %s for index %x", D.37367, idx);
      monoeg_g_list_free (list);
      monoeg_g_free (ainfo);
      D.37347 = 0B;
      return D.37347;
      <D.37371>:
      D.37368 = cols[2];
      data.552 = mono_metadata_blob_heap (image, D.37368);
      data = data.552;
      data.553 = data;
      D.37374 = mono_metadata_decode_value (data.553, &data);
      ainfo->attrs[i].data_size = D.37374;
      data.553 = data;
      ainfo->attrs[i].data = data.553;
      i = i + 1;
      tmp = tmp->next;
      <D.24367>:
      if (i < len) goto <D.24366>; else goto <D.24368>;
      <D.24368>:
      monoeg_g_list_free (list);
      D.37347 = ainfo;
      return D.37347;
    }
  finally
    {
      cols = {CLOBBER};
      data = {CLOBBER};
    }
}


mono_custom_attrs_from_method (struct MonoMethod * method)
{
  unsigned char D.37377;
  unsigned char D.37378;
  unsigned char D.37383;
  struct MonoClass * D.37385;
  struct MonoImage * D.37386;
  unsigned char D.37387;
  unsigned char D.37388;
  struct MonoCustomAttrInfo * D.37389;
  unsigned int D.37390;
  guint32 idx;

  D.37377 = BIT_FIELD_REF <*method, 8, 168>;
  D.37378 = D.37377 & 16;
  if (D.37378 != 0) goto <D.37379>; else goto <D.37380>;
  <D.37379>:
  method = MEM[(struct MonoMethodInflated *)method].declaring;
  <D.37380>:
  D.37377 = BIT_FIELD_REF <*method, 8, 168>;
  D.37383 = D.37377 & 2;
  if (D.37383 != 0) goto <D.37381>; else goto <D.37384>;
  <D.37384>:
  D.37385 = method->klass;
  D.37386 = D.37385->image;
  D.37387 = BIT_FIELD_REF <*D.37386, 8, 128>;
  D.37388 = D.37387 & 8;
  if (D.37388 != 0) goto <D.37381>; else goto <D.37382>;
  <D.37381>:
  D.37385 = method->klass;
  D.37386 = D.37385->image;
  D.37389 = lookup_custom_attr (D.37386, method);
  return D.37389;
  <D.37382>:
  D.37390 = method->token;
  if (D.37390 == 0) goto <D.37391>; else goto <D.37392>;
  <D.37391>:
  D.37389 = 0B;
  return D.37389;
  <D.37392>:
  idx = mono_method_get_index (method);
  idx = idx << 5;
  idx = idx;
  D.37385 = method->klass;
  D.37386 = D.37385->image;
  D.37389 = mono_custom_attrs_from_index (D.37386, idx);
  return D.37389;
}


lookup_custom_attr (struct MonoImage * image, void * member)
{
  struct MonoCustomAttrInfo * D.37396;
  int D.37397;
  unsigned int D.37398;
  unsigned int D.37399;
  unsigned int D.37400;
  struct MonoCustomAttrInfo * res;

  res = mono_image_property_lookup (image, member, 4096);
  if (res == 0B) goto <D.37394>; else goto <D.37395>;
  <D.37394>:
  D.37396 = 0B;
  return D.37396;
  <D.37395>:
  D.37397 = res->num_attrs;
  D.37398 = (unsigned int) D.37397;
  D.37399 = D.37398 + 1;
  D.37400 = D.37399 * 12;
  res = monoeg_g_memdup (res, D.37400);
  res->cached = 0;
  D.37396 = res;
  return D.37396;
}


mono_custom_attrs_from_class (struct MonoClass * klass)
{
  struct MonoGenericClass * D.37402;
  struct MonoImage * D.37405;
  unsigned char D.37406;
  unsigned char D.37407;
  struct MonoCustomAttrInfo * D.37410;
  unsigned char D.37411;
  _Bool D.37412;
  _Bool D.37413;
  _Bool D.37414;
  int D.37417;
  unsigned int D.37418;
  unsigned int D.37420;
  guint32 idx;

  D.37402 = klass->generic_class;
  if (D.37402 != 0B) goto <D.37403>; else goto <D.37404>;
  <D.37403>:
  D.37402 = klass->generic_class;
  klass = D.37402->container_class;
  <D.37404>:
  D.37405 = klass->image;
  D.37406 = BIT_FIELD_REF <*D.37405, 8, 128>;
  D.37407 = D.37406 & 8;
  if (D.37407 != 0) goto <D.37408>; else goto <D.37409>;
  <D.37408>:
  D.37405 = klass->image;
  D.37410 = lookup_custom_attr (D.37405, klass);
  return D.37410;
  <D.37409>:
  D.37411 = klass->byval_arg.type;
  D.37412 = D.37411 == 19;
  D.37413 = D.37411 == 30;
  D.37414 = D.37412 | D.37413;
  if (D.37414 != 0) goto <D.37415>; else goto <D.37416>;
  <D.37415>:
  D.37417 = klass->sizes.generic_param_token;
  D.37418 = (unsigned int) D.37417;
  idx = D.37418 & 16777215;
  idx = idx << 5;
  idx = idx | 19;
  goto <D.37419>;
  <D.37416>:
  D.37420 = klass->type_token;
  idx = D.37420 & 16777215;
  idx = idx << 5;
  idx = idx | 3;
  <D.37419>:
  D.37405 = klass->image;
  D.37410 = mono_custom_attrs_from_index (D.37405, idx);
  return D.37410;
}


mono_custom_attrs_from_assembly (struct MonoAssembly * assembly)
{
  struct MonoImage * D.37422;
  unsigned char D.37423;
  unsigned char D.37424;
  struct MonoCustomAttrInfo * D.37427;
  guint32 idx;

  D.37422 = assembly->image;
  D.37423 = BIT_FIELD_REF <*D.37422, 8, 128>;
  D.37424 = D.37423 & 8;
  if (D.37424 != 0) goto <D.37425>; else goto <D.37426>;
  <D.37425>:
  D.37422 = assembly->image;
  D.37427 = lookup_custom_attr (D.37422, assembly);
  return D.37427;
  <D.37426>:
  idx = 1;
  idx = idx << 5;
  idx = idx | 14;
  D.37422 = assembly->image;
  D.37427 = mono_custom_attrs_from_index (D.37422, idx);
  return D.37427;
}


mono_custom_attrs_from_property (struct MonoClass * klass, struct MonoProperty * property)
{
  struct MonoImage * D.37429;
  unsigned char D.37430;
  unsigned char D.37431;
  struct MonoCustomAttrInfo * D.37434;
  guint32 idx;

  D.37429 = klass->image;
  D.37430 = BIT_FIELD_REF <*D.37429, 8, 128>;
  D.37431 = D.37430 & 8;
  if (D.37431 != 0) goto <D.37432>; else goto <D.37433>;
  <D.37432>:
  property = mono_metadata_get_corresponding_property_from_generic_type_definition (property);
  D.37429 = klass->image;
  D.37434 = lookup_custom_attr (D.37429, property);
  return D.37434;
  <D.37433>:
  idx = find_property_index (klass, property);
  idx = idx << 5;
  idx = idx | 9;
  D.37429 = klass->image;
  D.37434 = mono_custom_attrs_from_index (D.37429, idx);
  return D.37434;
}


find_property_index (struct MonoClass * klass, struct MonoProperty * property)
{
  struct MonoClassExt * D.37436;
  struct MonoProperty * D.37437;
  unsigned int i.554;
  unsigned int D.37439;
  struct MonoProperty * D.37440;
  guint32 D.37443;
  unsigned int D.37444;
  unsigned int i.555;
  unsigned int D.37446;
  unsigned int D.37447;
  int i;

  i = 0;
  goto <D.24187>;
  <D.24186>:
  D.37436 = klass->ext;
  D.37437 = D.37436->properties;
  i.554 = (unsigned int) i;
  D.37439 = i.554 * 20;
  D.37440 = D.37437 + D.37439;
  if (D.37440 == property) goto <D.37441>; else goto <D.37442>;
  <D.37441>:
  D.37436 = klass->ext;
  D.37444 = D.37436->property.first;
  i.555 = (unsigned int) i;
  D.37446 = D.37444 + i.555;
  D.37443 = D.37446 + 1;
  return D.37443;
  <D.37442>:
  i = i + 1;
  <D.24187>:
  i.555 = (unsigned int) i;
  D.37436 = klass->ext;
  D.37447 = D.37436->property.count;
  if (i.555 < D.37447) goto <D.24186>; else goto <D.24188>;
  <D.24188>:
  D.37443 = 0;
  return D.37443;
}


mono_custom_attrs_from_event (struct MonoClass * klass, struct MonoEvent * event)
{
  struct MonoImage * D.37449;
  unsigned char D.37450;
  unsigned char D.37451;
  struct MonoCustomAttrInfo * D.37454;
  guint32 idx;

  D.37449 = klass->image;
  D.37450 = BIT_FIELD_REF <*D.37449, 8, 128>;
  D.37451 = D.37450 & 8;
  if (D.37451 != 0) goto <D.37452>; else goto <D.37453>;
  <D.37452>:
  event = mono_metadata_get_corresponding_event_from_generic_type_definition (event);
  D.37449 = klass->image;
  D.37454 = lookup_custom_attr (D.37449, event);
  return D.37454;
  <D.37453>:
  idx = find_event_index (klass, event);
  idx = idx << 5;
  idx = idx | 10;
  D.37449 = klass->image;
  D.37454 = mono_custom_attrs_from_index (D.37449, idx);
  return D.37454;
}


find_event_index (struct MonoClass * klass, struct MonoEvent * event)
{
  struct MonoClassExt * D.37456;
  struct MonoEvent * D.37457;
  unsigned int i.556;
  unsigned int D.37459;
  struct MonoEvent * D.37460;
  guint32 D.37463;
  unsigned int D.37464;
  unsigned int i.557;
  unsigned int D.37466;
  unsigned int D.37467;
  int i;

  i = 0;
  goto <D.24195>;
  <D.24194>:
  D.37456 = klass->ext;
  D.37457 = D.37456->events;
  i.556 = (unsigned int) i;
  D.37459 = i.556 * 28;
  D.37460 = D.37457 + D.37459;
  if (D.37460 == event) goto <D.37461>; else goto <D.37462>;
  <D.37461>:
  D.37456 = klass->ext;
  D.37464 = D.37456->event.first;
  i.557 = (unsigned int) i;
  D.37466 = D.37464 + i.557;
  D.37463 = D.37466 + 1;
  return D.37463;
  <D.37462>:
  i = i + 1;
  <D.24195>:
  i.557 = (unsigned int) i;
  D.37456 = klass->ext;
  D.37467 = D.37456->event.count;
  if (i.557 < D.37467) goto <D.24194>; else goto <D.24196>;
  <D.24196>:
  D.37463 = 0;
  return D.37463;
}


mono_custom_attrs_from_field (struct MonoClass * klass, struct MonoClassField * field)
{
  struct MonoImage * D.37469;
  unsigned char D.37470;
  unsigned char D.37471;
  struct MonoCustomAttrInfo * D.37474;
  guint32 idx;

  D.37469 = klass->image;
  D.37470 = BIT_FIELD_REF <*D.37469, 8, 128>;
  D.37471 = D.37470 & 8;
  if (D.37471 != 0) goto <D.37472>; else goto <D.37473>;
  <D.37472>:
  field = mono_metadata_get_corresponding_field_from_generic_type_definition (field);
  D.37469 = klass->image;
  D.37474 = lookup_custom_attr (D.37469, field);
  return D.37474;
  <D.37473>:
  idx = find_field_index (klass, field);
  idx = idx << 5;
  idx = idx | 1;
  D.37469 = klass->image;
  D.37474 = mono_custom_attrs_from_index (D.37469, idx);
  return D.37474;
}


find_field_index (struct MonoClass * klass, struct MonoClassField * field)
{
  struct MonoClassField * D.37476;
  unsigned int i.558;
  unsigned int D.37478;
  struct MonoClassField * D.37479;
  guint32 D.37482;
  unsigned int D.37483;
  unsigned int i.559;
  unsigned int D.37485;
  unsigned int D.37486;
  int i;

  i = 0;
  goto <D.24179>;
  <D.24178>:
  D.37476 = klass->fields;
  i.558 = (unsigned int) i;
  D.37478 = i.558 * 16;
  D.37479 = D.37476 + D.37478;
  if (D.37479 == field) goto <D.37480>; else goto <D.37481>;
  <D.37480>:
  D.37483 = klass->field.first;
  i.559 = (unsigned int) i;
  D.37485 = D.37483 + i.559;
  D.37482 = D.37485 + 1;
  return D.37482;
  <D.37481>:
  i = i + 1;
  <D.24179>:
  i.559 = (unsigned int) i;
  D.37486 = klass->field.count;
  if (i.559 < D.37486) goto <D.24178>; else goto <D.24180>;
  <D.24180>:
  D.37482 = 0;
  return D.37482;
}


mono_custom_attrs_from_param (struct MonoMethod * method, guint32 param)
{
  unsigned char D.37488;
  unsigned char D.37489;
  struct MonoClass * D.37492;
  struct MonoImage * D.37493;
  unsigned char D.37494;
  unsigned char D.37495;
  struct GHashTable * D.37498;
  struct MonoCustomAttrInfo * * D.37502;
  struct MonoCustomAttrInfo * D.37503;
  unsigned int D.37504;
  struct MonoCustomAttrInfo * * D.37505;
  int D.37508;
  unsigned int D.37509;
  unsigned int D.37510;
  unsigned int D.37511;
  unsigned int size.560;
  unsigned int size.561;
  unsigned int D.37516;
  int D.37517;
  <unnamed-unsigned:24> D.37518;
  unsigned int D.37519;
  int D.37522;
  int D.37523;
  int method_index.562;
  unsigned int D.37526;
  int D.37527;
  struct MonoTableInfo * ca;
  guint32 i;
  guint32 idx;
  guint32 method_index;
  guint32 param_list;
  guint32 param_last;
  guint32 param_pos;
  guint32 found;
  struct MonoImage * image;
  struct MonoReflectionMethodAux * aux;

  D.37488 = BIT_FIELD_REF <*method, 8, 168>;
  D.37489 = D.37488 & 16;
  if (D.37489 != 0) goto <D.37490>; else goto <D.37491>;
  <D.37490>:
  method = MEM[(struct MonoMethodInflated *)method].declaring;
  <D.37491>:
  D.37492 = method->klass;
  D.37493 = D.37492->image;
  D.37494 = BIT_FIELD_REF <*D.37493, 8, 128>;
  D.37495 = D.37494 & 8;
  if (D.37495 != 0) goto <D.37496>; else goto <D.37497>;
  <D.37496>:
  {
    struct MonoCustomAttrInfo * res;
    struct MonoCustomAttrInfo * ainfo;
    int size;

    D.37492 = method->klass;
    D.37493 = D.37492->image;
    D.37498 = MEM[(struct MonoDynamicImage *)D.37493].method_aux_hash;
    aux = monoeg_g_hash_table_lookup (D.37498, method);
    if (aux == 0B) goto <D.37499>; else goto <D.37501>;
    <D.37501>:
    D.37502 = aux->param_cattr;
    if (D.37502 == 0B) goto <D.37499>; else goto <D.37500>;
    <D.37499>:
    D.37503 = 0B;
    return D.37503;
    <D.37500>:
    D.37502 = aux->param_cattr;
    D.37504 = param * 4;
    D.37505 = D.37502 + D.37504;
    ainfo = *D.37505;
    if (ainfo == 0B) goto <D.37506>; else goto <D.37507>;
    <D.37506>:
    D.37503 = 0B;
    return D.37503;
    <D.37507>:
    D.37508 = ainfo->num_attrs;
    D.37509 = (unsigned int) D.37508;
    D.37510 = D.37509 + 1;
    D.37511 = D.37510 * 12;
    size = (int) D.37511;
    size.560 = (unsigned int) size;
    res = monoeg_malloc0 (size.560);
    size.561 = (unsigned int) size;
    memcpy (res, ainfo, size.561);
    D.37503 = res;
    return D.37503;
  }
  <D.37497>:
  D.37492 = method->klass;
  image = D.37492->image;
  method_index = mono_method_get_index (method);
  if (method_index == 0) goto <D.37514>; else goto <D.37515>;
  <D.37514>:
  D.37503 = 0B;
  return D.37503;
  <D.37515>:
  ca = &image->tables[6];
  D.37516 = method_index + 4294967295;
  D.37517 = (int) D.37516;
  param_list = mono_metadata_decode_row_col (ca, D.37517, 5);
  D.37518 = ca->rows;
  D.37519 = (unsigned int) D.37518;
  if (D.37519 == method_index) goto <D.37520>; else goto <D.37521>;
  <D.37520>:
  ca = &image->tables[8];
  D.37518 = ca->rows;
  D.37522 = (int) D.37518;
  D.37523 = D.37522 + 1;
  param_last = (guint32) D.37523;
  goto <D.37524>;
  <D.37521>:
  method_index.562 = (int) method_index;
  param_last = mono_metadata_decode_row_col (ca, method_index.562, 5);
  ca = &image->tables[8];
  <D.37524>:
  found = 0;
  i = param_list;
  goto <D.24419>;
  <D.24418>:
  D.37526 = i + 4294967295;
  D.37527 = (int) D.37526;
  param_pos = mono_metadata_decode_row_col (ca, D.37527, 1);
  if (param_pos == param) goto <D.37528>; else goto <D.37529>;
  <D.37528>:
  found = 1;
  goto <D.24417>;
  <D.37529>:
  i = i + 1;
  <D.24419>:
  if (i < param_last) goto <D.24418>; else goto <D.24417>;
  <D.24417>:
  if (found == 0) goto <D.37530>; else goto <D.37531>;
  <D.37530>:
  D.37503 = 0B;
  return D.37503;
  <D.37531>:
  idx = i;
  idx = idx << 5;
  idx = idx | 4;
  D.37503 = mono_custom_attrs_from_index (image, idx);
  return D.37503;
}


mono_custom_attrs_has_attr (struct MonoCustomAttrInfo * ainfo, struct MonoClass * attr_klass)
{
  struct MonoMethod * D.37533;
  int D.37537;
  unsigned int D.37539;
  unsigned int D.37540;
  unsigned char D.37542;
  int D.37544;
  mono_bool D.37545;
  int D.37546;
  int i;
  struct MonoClass * klass;

  i = 0;
  goto <D.24427>;
  <D.24426>:
  D.37533 = ainfo->attrs[i].ctor;
  klass = D.37533->klass;
  D.37537 = mono_class_has_parent (klass, attr_klass);
  if (D.37537 != 0) goto <D.37534>; else goto <D.37538>;
  <D.37538>:
  D.37539 = attr_klass->flags;
  D.37540 = D.37539 & 32;
  if (D.37540 != 0) goto <D.37535>; else goto <D.37541>;
  <D.37541>:
  D.37542 = attr_klass->byval_arg.type;
  if (D.37542 == 19) goto <D.37535>; else goto <D.37543>;
  <D.37543>:
  D.37542 = attr_klass->byval_arg.type;
  if (D.37542 == 30) goto <D.37535>; else goto <D.37536>;
  <D.37535>:
  D.37544 = mono_class_is_assignable_from (attr_klass, klass);
  if (D.37544 != 0) goto <D.37534>; else goto <D.37536>;
  <D.37534>:
  D.37545 = 1;
  return D.37545;
  <D.37536>:
  i = i + 1;
  <D.24427>:
  D.37546 = ainfo->num_attrs;
  if (D.37546 > i) goto <D.24426>; else goto <D.24428>;
  <D.24428>:
  D.37545 = 0;
  return D.37545;
}


mono_class_has_parent (struct MonoClass * klass, struct MonoClass * parent)
{
  struct MonoClass * * D.37548;
  _Bool D.37549;
  long int D.37550;
  long int D.37551;
  struct MonoClass * * D.37554;
  _Bool D.37555;
  long int D.37556;
  long int D.37557;
  gboolean D.37560;

  D.37548 = klass->supertypes;
  D.37549 = D.37548 == 0B;
  D.37550 = (long int) D.37549;
  D.37551 = __builtin_expect (D.37550, 0);
  if (D.37551 != 0) goto <D.37552>; else goto <D.37553>;
  <D.37552>:
  mono_class_setup_supertypes (klass);
  <D.37553>:
  D.37554 = parent->supertypes;
  D.37555 = D.37554 == 0B;
  D.37556 = (long int) D.37555;
  D.37557 = __builtin_expect (D.37556, 0);
  if (D.37557 != 0) goto <D.37558>; else goto <D.37559>;
  <D.37558>:
  mono_class_setup_supertypes (parent);
  <D.37559>:
  D.37560 = mono_class_has_parent_fast (klass, parent);
  return D.37560;
}


mono_class_has_parent_fast (struct MonoClass * klass, struct MonoClass * parent)
{
  gboolean D.37562;
  int iftmp.563;
  short unsigned int D.37566;
  short unsigned int D.37567;
  struct MonoClass * * D.37569;
  sizetype D.37570;
  sizetype D.37571;
  sizetype D.37572;
  struct MonoClass * * D.37573;
  struct MonoClass * D.37574;

  D.37566 = klass->idepth;
  D.37567 = parent->idepth;
  if (D.37566 >= D.37567) goto <D.37568>; else goto <D.37564>;
  <D.37568>:
  D.37569 = klass->supertypes;
  D.37567 = parent->idepth;
  D.37570 = (sizetype) D.37567;
  D.37571 = D.37570 + 1073741823;
  D.37572 = D.37571 * 4;
  D.37573 = D.37569 + D.37572;
  D.37574 = *D.37573;
  if (D.37574 == parent) goto <D.37575>; else goto <D.37564>;
  <D.37575>:
  iftmp.563 = 1;
  goto <D.37565>;
  <D.37564>:
  iftmp.563 = 0;
  <D.37565>:
  D.37562 = iftmp.563;
  return D.37562;
}


mono_custom_attrs_get_attr (struct MonoCustomAttrInfo * ainfo, struct MonoClass * attr_klass)
{
  struct MonoMethod * D.37577;
  int D.37578;
  int D.37581;
  struct MonoObject * D.37584;
  unsigned int attr_index.564;
  char * D.37588;
  int i;
  int attr_index;
  struct MonoClass * klass;
  struct MonoArray * attrs;

  attr_index = -1;
  i = 0;
  goto <D.24439>;
  <D.24438>:
  D.37577 = ainfo->attrs[i].ctor;
  klass = D.37577->klass;
  D.37578 = mono_class_has_parent (klass, attr_klass);
  if (D.37578 != 0) goto <D.37579>; else goto <D.37580>;
  <D.37579>:
  attr_index = i;
  goto <D.24437>;
  <D.37580>:
  i = i + 1;
  <D.24439>:
  D.37581 = ainfo->num_attrs;
  if (D.37581 > i) goto <D.24438>; else goto <D.24437>;
  <D.24437>:
  if (attr_index == -1) goto <D.37582>; else goto <D.37583>;
  <D.37582>:
  D.37584 = 0B;
  return D.37584;
  <D.37583>:
  attrs = mono_custom_attrs_construct (ainfo);
  if (attrs != 0B) goto <D.37585>; else goto <D.37586>;
  <D.37585>:
  attr_index.564 = (unsigned int) attr_index;
  D.37588 = mono_array_addr_with_size (attrs, 4, attr_index.564);
  D.37584 = MEM[(struct MonoObject * *)D.37588];
  return D.37584;
  <D.37586>:
  D.37584 = 0B;
  return D.37584;
}


mono_reflection_get_custom_attrs_info (struct MonoObject * obj)
{
  struct MonoVTable * D.37590;
  struct MonoClass * D.37591;
  int D.24454;
  int iftmp.565;
  int D.24450;
  const char[9] * D.37601;
  unsigned char D.37602;
  int D.37603;
  unsigned char D.37604;
  int D.37605;
  _Bool D.37606;
  _Bool D.37607;
  _Bool D.37608;
  const unsigned char * D.37611;
  unsigned char D.37612;
  int D.37613;
  const unsigned char * D.37614;
  unsigned char D.37615;
  int D.37616;
  _Bool D.37617;
  _Bool D.37618;
  const unsigned char * D.37621;
  unsigned char D.37622;
  int D.37623;
  const unsigned char * D.37624;
  unsigned char D.37625;
  int D.37626;
  _Bool D.37627;
  _Bool D.37628;
  const unsigned char * D.37631;
  unsigned char D.37632;
  int D.37633;
  const unsigned char * D.37634;
  unsigned char D.37635;
  int D.37636;
  const char * D.37638;
  int D.24463;
  int iftmp.566;
  int D.24459;
  const char[13] * D.37643;
  unsigned char D.37644;
  int D.37645;
  unsigned char D.37646;
  int D.37647;
  _Bool D.37648;
  _Bool D.37649;
  _Bool D.37650;
  const unsigned char * D.37653;
  unsigned char D.37654;
  int D.37655;
  const unsigned char * D.37656;
  unsigned char D.37657;
  int D.37658;
  _Bool D.37659;
  _Bool D.37660;
  const unsigned char * D.37663;
  unsigned char D.37664;
  int D.37665;
  const unsigned char * D.37666;
  unsigned char D.37667;
  int D.37668;
  _Bool D.37669;
  _Bool D.37670;
  const unsigned char * D.37673;
  unsigned char D.37674;
  int D.37675;
  const unsigned char * D.37676;
  unsigned char D.37677;
  int D.37678;
  struct MonoAssembly * D.37680;
  int D.24473;
  int iftmp.567;
  int D.24469;
  const char[7] * D.37687;
  unsigned char D.37688;
  int D.37689;
  unsigned char D.37690;
  int D.37691;
  _Bool D.37692;
  _Bool D.37693;
  _Bool D.37694;
  const unsigned char * D.37697;
  unsigned char D.37698;
  int D.37699;
  const unsigned char * D.37700;
  unsigned char D.37701;
  int D.37702;
  _Bool D.37703;
  _Bool D.37704;
  const unsigned char * D.37707;
  unsigned char D.37708;
  int D.37709;
  const unsigned char * D.37710;
  unsigned char D.37711;
  int D.37712;
  _Bool D.37713;
  _Bool D.37714;
  const unsigned char * D.37717;
  unsigned char D.37718;
  int D.37719;
  const unsigned char * D.37720;
  unsigned char D.37721;
  int D.37722;
  int D.24482;
  int iftmp.568;
  int D.24478;
  const char[11] * D.37728;
  unsigned char D.37729;
  int D.37730;
  unsigned char D.37731;
  int D.37732;
  _Bool D.37733;
  _Bool D.37734;
  _Bool D.37735;
  const unsigned char * D.37738;
  unsigned char D.37739;
  int D.37740;
  const unsigned char * D.37741;
  unsigned char D.37742;
  int D.37743;
  _Bool D.37744;
  _Bool D.37745;
  const unsigned char * D.37748;
  unsigned char D.37749;
  int D.37750;
  const unsigned char * D.37751;
  unsigned char D.37752;
  int D.37753;
  _Bool D.37754;
  _Bool D.37755;
  const unsigned char * D.37758;
  unsigned char D.37759;
  int D.37760;
  const unsigned char * D.37761;
  unsigned char D.37762;
  int D.37763;
  struct MonoImage * D.37765;
  int D.24492;
  int iftmp.569;
  int D.24488;
  const char[13] * D.37769;
  unsigned char D.37770;
  int D.37771;
  unsigned char D.37772;
  int D.37773;
  _Bool D.37774;
  _Bool D.37775;
  _Bool D.37776;
  const unsigned char * D.37779;
  unsigned char D.37780;
  int D.37781;
  const unsigned char * D.37782;
  unsigned char D.37783;
  int D.37784;
  _Bool D.37785;
  _Bool D.37786;
  const unsigned char * D.37789;
  unsigned char D.37790;
  int D.37791;
  const unsigned char * D.37792;
  unsigned char D.37793;
  int D.37794;
  _Bool D.37795;
  _Bool D.37796;
  const unsigned char * D.37799;
  unsigned char D.37800;
  int D.37801;
  const unsigned char * D.37802;
  unsigned char D.37803;
  int D.37804;
  struct MonoProperty * D.37808;
  struct MonoClass * D.37809;
  int D.24502;
  int iftmp.570;
  int D.24498;
  const char[10] * D.37814;
  unsigned char D.37815;
  int D.37816;
  unsigned char D.37817;
  int D.37818;
  _Bool D.37819;
  _Bool D.37820;
  _Bool D.37821;
  const unsigned char * D.37824;
  unsigned char D.37825;
  int D.37826;
  const unsigned char * D.37827;
  unsigned char D.37828;
  int D.37829;
  _Bool D.37830;
  _Bool D.37831;
  const unsigned char * D.37834;
  unsigned char D.37835;
  int D.37836;
  const unsigned char * D.37837;
  unsigned char D.37838;
  int D.37839;
  _Bool D.37840;
  _Bool D.37841;
  const unsigned char * D.37844;
  unsigned char D.37845;
  int D.37846;
  const unsigned char * D.37847;
  unsigned char D.37848;
  int D.37849;
  struct MonoEvent * D.37853;
  struct MonoClass * D.37854;
  int D.24512;
  int iftmp.571;
  int D.24508;
  const char[10] * D.37859;
  unsigned char D.37860;
  int D.37861;
  unsigned char D.37862;
  int D.37863;
  _Bool D.37864;
  _Bool D.37865;
  _Bool D.37866;
  const unsigned char * D.37869;
  unsigned char D.37870;
  int D.37871;
  const unsigned char * D.37872;
  unsigned char D.37873;
  int D.37874;
  _Bool D.37875;
  _Bool D.37876;
  const unsigned char * D.37879;
  unsigned char D.37880;
  int D.37881;
  const unsigned char * D.37882;
  unsigned char D.37883;
  int D.37884;
  _Bool D.37885;
  _Bool D.37886;
  const unsigned char * D.37889;
  unsigned char D.37890;
  int D.37891;
  const unsigned char * D.37892;
  unsigned char D.37893;
  int D.37894;
  struct MonoClassField * D.37898;
  struct MonoClass * D.37899;
  int D.24522;
  int iftmp.572;
  int D.24518;
  const char[11] * D.37907;
  unsigned char D.37908;
  int D.37909;
  unsigned char D.37910;
  int D.37911;
  _Bool D.37912;
  _Bool D.37913;
  _Bool D.37914;
  const unsigned char * D.37917;
  unsigned char D.37918;
  int D.37919;
  const unsigned char * D.37920;
  unsigned char D.37921;
  int D.37922;
  _Bool D.37923;
  _Bool D.37924;
  const unsigned char * D.37927;
  unsigned char D.37928;
  int D.37929;
  const unsigned char * D.37930;
  unsigned char D.37931;
  int D.37932;
  _Bool D.37933;
  _Bool D.37934;
  const unsigned char * D.37937;
  unsigned char D.37938;
  int D.37939;
  const unsigned char * D.37940;
  unsigned char D.37941;
  int D.37942;
  int D.24531;
  int iftmp.573;
  int D.24527;
  const char[12] * D.37948;
  unsigned char D.37949;
  int D.37950;
  unsigned char D.37951;
  int D.37952;
  _Bool D.37953;
  _Bool D.37954;
  _Bool D.37955;
  const unsigned char * D.37958;
  unsigned char D.37959;
  int D.37960;
  const unsigned char * D.37961;
  unsigned char D.37962;
  int D.37963;
  _Bool D.37964;
  _Bool D.37965;
  const unsigned char * D.37968;
  unsigned char D.37969;
  int D.37970;
  const unsigned char * D.37971;
  unsigned char D.37972;
  int D.37973;
  _Bool D.37974;
  _Bool D.37975;
  const unsigned char * D.37978;
  unsigned char D.37979;
  int D.37980;
  const unsigned char * D.37981;
  unsigned char D.37982;
  int D.37983;
  struct MonoMethod * D.37985;
  int D.24541;
  int iftmp.574;
  int D.24537;
  const char[18] * D.37992;
  unsigned char D.37993;
  int D.37994;
  unsigned char D.37995;
  int D.37996;
  _Bool D.37997;
  _Bool D.37998;
  _Bool D.37999;
  const unsigned char * D.38002;
  unsigned char D.38003;
  int D.38004;
  const unsigned char * D.38005;
  unsigned char D.38006;
  int D.38007;
  _Bool D.38008;
  _Bool D.38009;
  const unsigned char * D.38012;
  unsigned char D.38013;
  int D.38014;
  const unsigned char * D.38015;
  unsigned char D.38016;
  int D.38017;
  _Bool D.38018;
  _Bool D.38019;
  const unsigned char * D.38022;
  unsigned char D.38023;
  int D.38024;
  const unsigned char * D.38025;
  unsigned char D.38026;
  int D.38027;
  int D.24550;
  int iftmp.575;
  int D.24546;
  const char[19] * D.38033;
  unsigned char D.38034;
  int D.38035;
  unsigned char D.38036;
  int D.38037;
  _Bool D.38038;
  _Bool D.38039;
  _Bool D.38040;
  const unsigned char * D.38043;
  unsigned char D.38044;
  int D.38045;
  const unsigned char * D.38046;
  unsigned char D.38047;
  int D.38048;
  _Bool D.38049;
  _Bool D.38050;
  const unsigned char * D.38053;
  unsigned char D.38054;
  int D.38055;
  const unsigned char * D.38056;
  unsigned char D.38057;
  int D.38058;
  _Bool D.38059;
  _Bool D.38060;
  const unsigned char * D.38063;
  unsigned char D.38064;
  int D.38065;
  const unsigned char * D.38066;
  unsigned char D.38067;
  int D.38068;
  struct MonoMethod * D.38070;
  int D.24560;
  int iftmp.576;
  int D.24556;
  const char[14] * D.38077;
  unsigned char D.38078;
  int D.38079;
  unsigned char D.38080;
  int D.38081;
  _Bool D.38082;
  _Bool D.38083;
  _Bool D.38084;
  const unsigned char * D.38087;
  unsigned char D.38088;
  int D.38089;
  const unsigned char * D.38090;
  unsigned char D.38091;
  int D.38092;
  _Bool D.38093;
  _Bool D.38094;
  const unsigned char * D.38097;
  unsigned char D.38098;
  int D.38099;
  const unsigned char * D.38100;
  unsigned char D.38101;
  int D.38102;
  _Bool D.38103;
  _Bool D.38104;
  const unsigned char * D.38107;
  unsigned char D.38108;
  int D.38109;
  const unsigned char * D.38110;
  unsigned char D.38111;
  int D.38112;
  int D.24569;
  int iftmp.577;
  int D.24565;
  const char[18] * D.38118;
  unsigned char D.38119;
  int D.38120;
  unsigned char D.38121;
  int D.38122;
  _Bool D.38123;
  _Bool D.38124;
  _Bool D.38125;
  const unsigned char * D.38128;
  unsigned char D.38129;
  int D.38130;
  const unsigned char * D.38131;
  unsigned char D.38132;
  int D.38133;
  _Bool D.38134;
  _Bool D.38135;
  const unsigned char * D.38138;
  unsigned char D.38139;
  int D.38140;
  const unsigned char * D.38141;
  unsigned char D.38142;
  int D.38143;
  _Bool D.38144;
  _Bool D.38145;
  const unsigned char * D.38148;
  unsigned char D.38149;
  int D.38150;
  const unsigned char * D.38151;
  unsigned char D.38152;
  int D.38153;
  struct MonoObject * D.38155;
  struct MonoVTable * D.38156;
  int D.38157;
  struct MonoMethod * D.38160;
  int D.38161;
  int D.38162;
  unsigned int D.38163;
  int D.38165;
  struct MonoProperty * D.38168;
  _Bool D.38171;
  long int D.38172;
  long int D.38173;
  int D.38177;
  int D.38181;
  struct MonoObject * D.38184;
  struct MonoVTable * D.38185;
  struct MonoClass * D.38186;
  int D.38187;
  int D.38191;
  char * D.38195;
  int D.24590;
  int iftmp.578;
  int D.24586;
  const char[16] * D.38200;
  unsigned char D.38201;
  int D.38202;
  unsigned char D.38203;
  int D.38204;
  _Bool D.38205;
  _Bool D.38206;
  _Bool D.38207;
  const unsigned char * D.38210;
  unsigned char D.38211;
  int D.38212;
  const unsigned char * D.38213;
  unsigned char D.38214;
  int D.38215;
  _Bool D.38216;
  _Bool D.38217;
  const unsigned char * D.38220;
  unsigned char D.38221;
  int D.38222;
  const unsigned char * D.38223;
  unsigned char D.38224;
  int D.38225;
  _Bool D.38226;
  _Bool D.38227;
  const unsigned char * D.38230;
  unsigned char D.38231;
  int D.38232;
  const unsigned char * D.38233;
  unsigned char D.38234;
  int D.38235;
  struct MonoAssembly * D.38239;
  struct MonoImage * D.38240;
  struct MonoArray * D.38241;
  int D.24600;
  int iftmp.579;
  int D.24596;
  const char[12] * D.38246;
  unsigned char D.38247;
  int D.38248;
  unsigned char D.38249;
  int D.38250;
  _Bool D.38251;
  _Bool D.38252;
  _Bool D.38253;
  const unsigned char * D.38256;
  unsigned char D.38257;
  int D.38258;
  const unsigned char * D.38259;
  unsigned char D.38260;
  int D.38261;
  _Bool D.38262;
  _Bool D.38263;
  const unsigned char * D.38266;
  unsigned char D.38267;
  int D.38268;
  const unsigned char * D.38269;
  unsigned char D.38270;
  int D.38271;
  _Bool D.38272;
  _Bool D.38273;
  const unsigned char * D.38276;
  unsigned char D.38277;
  int D.38278;
  const unsigned char * D.38279;
  unsigned char D.38280;
  int D.38281;
  struct MonoReflectionModuleBuilder * D.38285;
  struct MonoDynamicImage * D.38286;
  struct MonoImage * D.38287;
  struct MonoArray * D.38288;
  int D.24610;
  int iftmp.580;
  int D.24606;
  const char[14] * D.38293;
  unsigned char D.38294;
  int D.38295;
  unsigned char D.38296;
  int D.38297;
  _Bool D.38298;
  _Bool D.38299;
  _Bool D.38300;
  const unsigned char * D.38303;
  unsigned char D.38304;
  int D.38305;
  const unsigned char * D.38306;
  unsigned char D.38307;
  int D.38308;
  _Bool D.38309;
  _Bool D.38310;
  const unsigned char * D.38313;
  unsigned char D.38314;
  int D.38315;
  const unsigned char * D.38316;
  unsigned char D.38317;
  int D.38318;
  _Bool D.38319;
  _Bool D.38320;
  const unsigned char * D.38323;
  unsigned char D.38324;
  int D.38325;
  const unsigned char * D.38326;
  unsigned char D.38327;
  int D.38328;
  struct MonoDynamicImage * D.38332;
  struct MonoImage * D.38333;
  struct MonoArray * D.38334;
  int D.24620;
  int iftmp.581;
  int D.24616;
  const char[19] * D.38339;
  unsigned char D.38340;
  int D.38341;
  unsigned char D.38342;
  int D.38343;
  _Bool D.38344;
  _Bool D.38345;
  _Bool D.38346;
  const unsigned char * D.38349;
  unsigned char D.38350;
  int D.38351;
  const unsigned char * D.38352;
  unsigned char D.38353;
  int D.38354;
  _Bool D.38355;
  _Bool D.38356;
  const unsigned char * D.38359;
  unsigned char D.38360;
  int D.38361;
  const unsigned char * D.38362;
  unsigned char D.38363;
  int D.38364;
  _Bool D.38365;
  _Bool D.38366;
  const unsigned char * D.38369;
  unsigned char D.38370;
  int D.38371;
  const unsigned char * D.38372;
  unsigned char D.38373;
  int D.38374;
  struct MonoMethod * D.38378;
  struct MonoClass * D.38379;
  struct MonoImage * D.38380;
  struct MonoArray * D.38381;
  int D.24630;
  int iftmp.582;
  int D.24626;
  const char[14] * D.38386;
  unsigned char D.38387;
  int D.38388;
  unsigned char D.38389;
  int D.38390;
  _Bool D.38391;
  _Bool D.38392;
  _Bool D.38393;
  const unsigned char * D.38396;
  unsigned char D.38397;
  int D.38398;
  const unsigned char * D.38399;
  unsigned char D.38400;
  int D.38401;
  _Bool D.38402;
  _Bool D.38403;
  const unsigned char * D.38406;
  unsigned char D.38407;
  int D.38408;
  const unsigned char * D.38409;
  unsigned char D.38410;
  int D.38411;
  _Bool D.38412;
  _Bool D.38413;
  const unsigned char * D.38416;
  unsigned char D.38417;
  int D.38418;
  const unsigned char * D.38419;
  unsigned char D.38420;
  int D.38421;
  struct MonoMethod * D.38425;
  struct MonoClass * D.38426;
  struct MonoImage * D.38427;
  struct MonoArray * D.38428;
  int D.24640;
  int iftmp.583;
  int D.24636;
  const char[13] * D.38433;
  unsigned char D.38434;
  int D.38435;
  unsigned char D.38436;
  int D.38437;
  _Bool D.38438;
  _Bool D.38439;
  _Bool D.38440;
  const unsigned char * D.38443;
  unsigned char D.38444;
  int D.38445;
  const unsigned char * D.38446;
  unsigned char D.38447;
  int D.38448;
  _Bool D.38449;
  _Bool D.38450;
  const unsigned char * D.38453;
  unsigned char D.38454;
  int D.38455;
  const unsigned char * D.38456;
  unsigned char D.38457;
  int D.38458;
  _Bool D.38459;
  _Bool D.38460;
  const unsigned char * D.38463;
  unsigned char D.38464;
  int D.38465;
  const unsigned char * D.38466;
  unsigned char D.38467;
  int D.38468;
  struct MonoReflectionType * D.38472;
  struct MonoReflectionModuleBuilder * D.38473;
  struct MonoDynamicImage * D.38474;
  struct MonoImage * D.38475;
  struct MonoArray * D.38476;
  int D.24650;
  int iftmp.584;
  int D.24646;
  const char[17] * D.38481;
  unsigned char D.38482;
  int D.38483;
  unsigned char D.38484;
  int D.38485;
  _Bool D.38486;
  _Bool D.38487;
  _Bool D.38488;
  const unsigned char * D.38491;
  unsigned char D.38492;
  int D.38493;
  const unsigned char * D.38494;
  unsigned char D.38495;
  int D.38496;
  _Bool D.38497;
  _Bool D.38498;
  const unsigned char * D.38501;
  unsigned char D.38502;
  int D.38503;
  const unsigned char * D.38504;
  unsigned char D.38505;
  int D.38506;
  _Bool D.38507;
  _Bool D.38508;
  const unsigned char * D.38511;
  unsigned char D.38512;
  int D.38513;
  const unsigned char * D.38514;
  unsigned char D.38515;
  int D.38516;
  struct MonoReflectionType * D.38520;
  struct MonoCustomAttrInfo * D.38522;
  struct MonoClass * klass;
  struct MonoCustomAttrInfo * cinfo;

  cinfo = 0B;
  D.37590 = obj->vtable;
  klass = D.37590->klass;
  D.37591 = mono_defaults.monotype_class;
  if (D.37591 == klass) goto <D.37592>; else goto <D.37593>;
  <D.37592>:
  {
    struct MonoType * type;

    type = mono_reflection_type_get_handle (obj);
    klass = mono_class_from_mono_type (type);
    cinfo = mono_custom_attrs_from_class (klass);
  }
  goto <D.37594>;
  <D.37593>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 8;
    if (__s1_len <= 3) goto <D.37599>; else goto <D.37600>;
    <D.37599>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.37601 = "Assembly";
      D.37602 = MEM[(const unsigned char *)D.37601];
      D.37603 = (int) D.37602;
      D.37604 = *__s2;
      D.37605 = (int) D.37604;
      __result = D.37603 - D.37605;
      {
        D.37606 = __s1_len != 0;
        D.37607 = __result == 0;
        D.37608 = D.37606 & D.37607;
        if (D.37608 != 0) goto <D.37609>; else goto <D.37610>;
        <D.37609>:
        D.37611 = &MEM[(void *)"Assembly" + 1B];
        D.37612 = *D.37611;
        D.37613 = (int) D.37612;
        D.37614 = __s2 + 1;
        D.37615 = *D.37614;
        D.37616 = (int) D.37615;
        __result = D.37613 - D.37616;
        D.37617 = __s1_len > 1;
        D.37607 = __result == 0;
        D.37618 = D.37617 & D.37607;
        if (D.37618 != 0) goto <D.37619>; else goto <D.37620>;
        <D.37619>:
        D.37621 = &MEM[(void *)"Assembly" + 2B];
        D.37622 = *D.37621;
        D.37623 = (int) D.37622;
        D.37624 = __s2 + 2;
        D.37625 = *D.37624;
        D.37626 = (int) D.37625;
        __result = D.37623 - D.37626;
        D.37627 = __s1_len > 2;
        D.37607 = __result == 0;
        D.37628 = D.37627 & D.37607;
        if (D.37628 != 0) goto <D.37629>; else goto <D.37630>;
        <D.37629>:
        D.37631 = &MEM[(void *)"Assembly" + 3B];
        D.37632 = *D.37631;
        D.37633 = (int) D.37632;
        D.37634 = __s2 + 3;
        D.37635 = *D.37634;
        D.37636 = (int) D.37635;
        __result = D.37633 - D.37636;
        <D.37630>:
        <D.37620>:
        <D.37610>:
      }
      D.24450 = __result;
    }
    iftmp.565 = D.24450;
    goto <D.37637>;
    <D.37600>:
    D.37638 = klass->name;
    iftmp.565 = __builtin_strcmp ("Assembly", D.37638);
    <D.37637>:
    D.24454 = iftmp.565;
  }
  if (D.24454 == 0) goto <D.37595>; else goto <D.37639>;
  <D.37639>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 12;
    if (__s1_len <= 3) goto <D.37641>; else goto <D.37642>;
    <D.37641>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.37643 = "MonoAssembly";
      D.37644 = MEM[(const unsigned char *)D.37643];
      D.37645 = (int) D.37644;
      D.37646 = *__s2;
      D.37647 = (int) D.37646;
      __result = D.37645 - D.37647;
      {
        D.37648 = __s1_len != 0;
        D.37649 = __result == 0;
        D.37650 = D.37648 & D.37649;
        if (D.37650 != 0) goto <D.37651>; else goto <D.37652>;
        <D.37651>:
        D.37653 = &MEM[(void *)"MonoAssembly" + 1B];
        D.37654 = *D.37653;
        D.37655 = (int) D.37654;
        D.37656 = __s2 + 1;
        D.37657 = *D.37656;
        D.37658 = (int) D.37657;
        __result = D.37655 - D.37658;
        D.37659 = __s1_len > 1;
        D.37649 = __result == 0;
        D.37660 = D.37659 & D.37649;
        if (D.37660 != 0) goto <D.37661>; else goto <D.37662>;
        <D.37661>:
        D.37663 = &MEM[(void *)"MonoAssembly" + 2B];
        D.37664 = *D.37663;
        D.37665 = (int) D.37664;
        D.37666 = __s2 + 2;
        D.37667 = *D.37666;
        D.37668 = (int) D.37667;
        __result = D.37665 - D.37668;
        D.37669 = __s1_len > 2;
        D.37649 = __result == 0;
        D.37670 = D.37669 & D.37649;
        if (D.37670 != 0) goto <D.37671>; else goto <D.37672>;
        <D.37671>:
        D.37673 = &MEM[(void *)"MonoAssembly" + 3B];
        D.37674 = *D.37673;
        D.37675 = (int) D.37674;
        D.37676 = __s2 + 3;
        D.37677 = *D.37676;
        D.37678 = (int) D.37677;
        __result = D.37675 - D.37678;
        <D.37672>:
        <D.37662>:
        <D.37652>:
      }
      D.24459 = __result;
    }
    iftmp.566 = D.24459;
    goto <D.37679>;
    <D.37642>:
    D.37638 = klass->name;
    iftmp.566 = __builtin_strcmp ("MonoAssembly", D.37638);
    <D.37679>:
    D.24463 = iftmp.566;
  }
  if (D.24463 == 0) goto <D.37595>; else goto <D.37596>;
  <D.37595>:
  {
    struct MonoReflectionAssembly * rassembly;

    rassembly = obj;
    D.37680 = rassembly->assembly;
    cinfo = mono_custom_attrs_from_assembly (D.37680);
  }
  goto <D.37597>;
  <D.37596>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.37687 = "Module";
      D.37688 = MEM[(const unsigned char *)D.37687];
      D.37689 = (int) D.37688;
      D.37690 = *__s2;
      D.37691 = (int) D.37690;
      __result = D.37689 - D.37691;
      {
        D.37692 = __s1_len != 0;
        D.37693 = __result == 0;
        D.37694 = D.37692 & D.37693;
        if (D.37694 != 0) goto <D.37695>; else goto <D.37696>;
        <D.37695>:
        D.37697 = &MEM[(void *)"Module" + 1B];
        D.37698 = *D.37697;
        D.37699 = (int) D.37698;
        D.37700 = __s2 + 1;
        D.37701 = *D.37700;
        D.37702 = (int) D.37701;
        __result = D.37699 - D.37702;
        D.37703 = __s1_len > 1;
        D.37693 = __result == 0;
        D.37704 = D.37703 & D.37693;
        if (D.37704 != 0) goto <D.37705>; else goto <D.37706>;
        <D.37705>:
        D.37707 = &MEM[(void *)"Module" + 2B];
        D.37708 = *D.37707;
        D.37709 = (int) D.37708;
        D.37710 = __s2 + 2;
        D.37711 = *D.37710;
        D.37712 = (int) D.37711;
        __result = D.37709 - D.37712;
        D.37713 = __s1_len > 2;
        D.37693 = __result == 0;
        D.37714 = D.37713 & D.37693;
        if (D.37714 != 0) goto <D.37715>; else goto <D.37716>;
        <D.37715>:
        D.37717 = &MEM[(void *)"Module" + 3B];
        D.37718 = *D.37717;
        D.37719 = (int) D.37718;
        D.37720 = __s2 + 3;
        D.37721 = *D.37720;
        D.37722 = (int) D.37721;
        __result = D.37719 - D.37722;
        <D.37716>:
        <D.37706>:
        <D.37696>:
      }
      D.24469 = __result;
    }
    iftmp.567 = D.24469;
    goto <D.37723>;
    <D.37686>:
    D.37638 = klass->name;
    iftmp.567 = __builtin_strcmp ("Module", D.37638);
    <D.37723>:
    D.24473 = iftmp.567;
  }
  if (D.24473 == 0) goto <D.37681>; else goto <D.37724>;
  <D.37724>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 10;
    if (__s1_len <= 3) goto <D.37726>; else goto <D.37727>;
    <D.37726>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.37728 = "MonoModule";
      D.37729 = MEM[(const unsigned char *)D.37728];
      D.37730 = (int) D.37729;
      D.37731 = *__s2;
      D.37732 = (int) D.37731;
      __result = D.37730 - D.37732;
      {
        D.37733 = __s1_len != 0;
        D.37734 = __result == 0;
        D.37735 = D.37733 & D.37734;
        if (D.37735 != 0) goto <D.37736>; else goto <D.37737>;
        <D.37736>:
        D.37738 = &MEM[(void *)"MonoModule" + 1B];
        D.37739 = *D.37738;
        D.37740 = (int) D.37739;
        D.37741 = __s2 + 1;
        D.37742 = *D.37741;
        D.37743 = (int) D.37742;
        __result = D.37740 - D.37743;
        D.37744 = __s1_len > 1;
        D.37734 = __result == 0;
        D.37745 = D.37744 & D.37734;
        if (D.37745 != 0) goto <D.37746>; else goto <D.37747>;
        <D.37746>:
        D.37748 = &MEM[(void *)"MonoModule" + 2B];
        D.37749 = *D.37748;
        D.37750 = (int) D.37749;
        D.37751 = __s2 + 2;
        D.37752 = *D.37751;
        D.37753 = (int) D.37752;
        __result = D.37750 - D.37753;
        D.37754 = __s1_len > 2;
        D.37734 = __result == 0;
        D.37755 = D.37754 & D.37734;
        if (D.37755 != 0) goto <D.37756>; else goto <D.37757>;
        <D.37756>:
        D.37758 = &MEM[(void *)"MonoModule" + 3B];
        D.37759 = *D.37758;
        D.37760 = (int) D.37759;
        D.37761 = __s2 + 3;
        D.37762 = *D.37761;
        D.37763 = (int) D.37762;
        __result = D.37760 - D.37763;
        <D.37757>:
        <D.37747>:
        <D.37737>:
      }
      D.24478 = __result;
    }
    iftmp.568 = D.24478;
    goto <D.37764>;
    <D.37727>:
    D.37638 = klass->name;
    iftmp.568 = __builtin_strcmp ("MonoModule", D.37638);
    <D.37764>:
    D.24482 = iftmp.568;
  }
  if (D.24482 == 0) goto <D.37681>; else goto <D.37682>;
  <D.37681>:
  {
    struct MonoReflectionModule * module;

    module = obj;
    D.37765 = module->image;
    cinfo = mono_custom_attrs_from_module (D.37765);
  }
  goto <D.37683>;
  <D.37682>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 12;
    if (__s1_len <= 3) goto <D.37767>; else goto <D.37768>;
    <D.37767>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.37769 = "MonoProperty";
      D.37770 = MEM[(const unsigned char *)D.37769];
      D.37771 = (int) D.37770;
      D.37772 = *__s2;
      D.37773 = (int) D.37772;
      __result = D.37771 - D.37773;
      {
        D.37774 = __s1_len != 0;
        D.37775 = __result == 0;
        D.37776 = D.37774 & D.37775;
        if (D.37776 != 0) goto <D.37777>; else goto <D.37778>;
        <D.37777>:
        D.37779 = &MEM[(void *)"MonoProperty" + 1B];
        D.37780 = *D.37779;
        D.37781 = (int) D.37780;
        D.37782 = __s2 + 1;
        D.37783 = *D.37782;
        D.37784 = (int) D.37783;
        __result = D.37781 - D.37784;
        D.37785 = __s1_len > 1;
        D.37775 = __result == 0;
        D.37786 = D.37785 & D.37775;
        if (D.37786 != 0) goto <D.37787>; else goto <D.37788>;
        <D.37787>:
        D.37789 = &MEM[(void *)"MonoProperty" + 2B];
        D.37790 = *D.37789;
        D.37791 = (int) D.37790;
        D.37792 = __s2 + 2;
        D.37793 = *D.37792;
        D.37794 = (int) D.37793;
        __result = D.37791 - D.37794;
        D.37795 = __s1_len > 2;
        D.37775 = __result == 0;
        D.37796 = D.37795 & D.37775;
        if (D.37796 != 0) goto <D.37797>; else goto <D.37798>;
        <D.37797>:
        D.37799 = &MEM[(void *)"MonoProperty" + 3B];
        D.37800 = *D.37799;
        D.37801 = (int) D.37800;
        D.37802 = __s2 + 3;
        D.37803 = *D.37802;
        D.37804 = (int) D.37803;
        __result = D.37801 - D.37804;
        <D.37798>:
        <D.37788>:
        <D.37778>:
      }
      D.24488 = __result;
    }
    iftmp.569 = D.24488;
    goto <D.37805>;
    <D.37768>:
    D.37638 = klass->name;
    iftmp.569 = __builtin_strcmp ("MonoProperty", D.37638);
    <D.37805>:
    D.24492 = iftmp.569;
  }
  if (D.24492 == 0) goto <D.37806>; else goto <D.37807>;
  <D.37806>:
  {
    struct MonoReflectionProperty * rprop;

    rprop = obj;
    D.37808 = rprop->property;
    D.37809 = D.37808->parent;
    D.37808 = rprop->property;
    cinfo = mono_custom_attrs_from_property (D.37809, D.37808);
  }
  goto <D.37810>;
  <D.37807>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 9;
    if (__s1_len <= 3) goto <D.37812>; else goto <D.37813>;
    <D.37812>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.37814 = "MonoEvent";
      D.37815 = MEM[(const unsigned char *)D.37814];
      D.37816 = (int) D.37815;
      D.37817 = *__s2;
      D.37818 = (int) D.37817;
      __result = D.37816 - D.37818;
      {
        D.37819 = __s1_len != 0;
        D.37820 = __result == 0;
        D.37821 = D.37819 & D.37820;
        if (D.37821 != 0) goto <D.37822>; else goto <D.37823>;
        <D.37822>:
        D.37824 = &MEM[(void *)"MonoEvent" + 1B];
        D.37825 = *D.37824;
        D.37826 = (int) D.37825;
        D.37827 = __s2 + 1;
        D.37828 = *D.37827;
        D.37829 = (int) D.37828;
        __result = D.37826 - D.37829;
        D.37830 = __s1_len > 1;
        D.37820 = __result == 0;
        D.37831 = D.37830 & D.37820;
        if (D.37831 != 0) goto <D.37832>; else goto <D.37833>;
        <D.37832>:
        D.37834 = &MEM[(void *)"MonoEvent" + 2B];
        D.37835 = *D.37834;
        D.37836 = (int) D.37835;
        D.37837 = __s2 + 2;
        D.37838 = *D.37837;
        D.37839 = (int) D.37838;
        __result = D.37836 - D.37839;
        D.37840 = __s1_len > 2;
        D.37820 = __result == 0;
        D.37841 = D.37840 & D.37820;
        if (D.37841 != 0) goto <D.37842>; else goto <D.37843>;
        <D.37842>:
        D.37844 = &MEM[(void *)"MonoEvent" + 3B];
        D.37845 = *D.37844;
        D.37846 = (int) D.37845;
        D.37847 = __s2 + 3;
        D.37848 = *D.37847;
        D.37849 = (int) D.37848;
        __result = D.37846 - D.37849;
        <D.37843>:
        <D.37833>:
        <D.37823>:
      }
      D.24498 = __result;
    }
    iftmp.570 = D.24498;
    goto <D.37850>;
    <D.37813>:
    D.37638 = klass->name;
    iftmp.570 = __builtin_strcmp ("MonoEvent", D.37638);
    <D.37850>:
    D.24502 = iftmp.570;
  }
  if (D.24502 == 0) goto <D.37851>; else goto <D.37852>;
  <D.37851>:
  {
    struct MonoReflectionMonoEvent * revent;

    revent = obj;
    D.37853 = revent->event;
    D.37854 = D.37853->parent;
    D.37853 = revent->event;
    cinfo = mono_custom_attrs_from_event (D.37854, D.37853);
  }
  goto <D.37855>;
  <D.37852>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 9;
    if (__s1_len <= 3) goto <D.37857>; else goto <D.37858>;
    <D.37857>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.37859 = "MonoField";
      D.37860 = MEM[(const unsigned char *)D.37859];
      D.37861 = (int) D.37860;
      D.37862 = *__s2;
      D.37863 = (int) D.37862;
      __result = D.37861 - D.37863;
      {
        D.37864 = __s1_len != 0;
        D.37865 = __result == 0;
        D.37866 = D.37864 & D.37865;
        if (D.37866 != 0) goto <D.37867>; else goto <D.37868>;
        <D.37867>:
        D.37869 = &MEM[(void *)"MonoField" + 1B];
        D.37870 = *D.37869;
        D.37871 = (int) D.37870;
        D.37872 = __s2 + 1;
        D.37873 = *D.37872;
        D.37874 = (int) D.37873;
        __result = D.37871 - D.37874;
        D.37875 = __s1_len > 1;
        D.37865 = __result == 0;
        D.37876 = D.37875 & D.37865;
        if (D.37876 != 0) goto <D.37877>; else goto <D.37878>;
        <D.37877>:
        D.37879 = &MEM[(void *)"MonoField" + 2B];
        D.37880 = *D.37879;
        D.37881 = (int) D.37880;
        D.37882 = __s2 + 2;
        D.37883 = *D.37882;
        D.37884 = (int) D.37883;
        __result = D.37881 - D.37884;
        D.37885 = __s1_len > 2;
        D.37865 = __result == 0;
        D.37886 = D.37885 & D.37865;
        if (D.37886 != 0) goto <D.37887>; else goto <D.37888>;
        <D.37887>:
        D.37889 = &MEM[(void *)"MonoField" + 3B];
        D.37890 = *D.37889;
        D.37891 = (int) D.37890;
        D.37892 = __s2 + 3;
        D.37893 = *D.37892;
        D.37894 = (int) D.37893;
        __result = D.37891 - D.37894;
        <D.37888>:
        <D.37878>:
        <D.37868>:
      }
      D.24508 = __result;
    }
    iftmp.571 = D.24508;
    goto <D.37895>;
    <D.37858>:
    D.37638 = klass->name;
    iftmp.571 = __builtin_strcmp ("MonoField", D.37638);
    <D.37895>:
    D.24512 = iftmp.571;
  }
  if (D.24512 == 0) goto <D.37896>; else goto <D.37897>;
  <D.37896>:
  {
    struct MonoReflectionField * rfield;

    rfield = obj;
    D.37898 = rfield->field;
    D.37899 = D.37898->parent;
    D.37898 = rfield->field;
    cinfo = mono_custom_attrs_from_field (D.37899, D.37898);
  }
  goto <D.37900>;
  <D.37897>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 10;
    if (__s1_len <= 3) goto <D.37905>; else goto <D.37906>;
    <D.37905>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.37907 = "MonoMethod";
      D.37908 = MEM[(const unsigned char *)D.37907];
      D.37909 = (int) D.37908;
      D.37910 = *__s2;
      D.37911 = (int) D.37910;
      __result = D.37909 - D.37911;
      {
        D.37912 = __s1_len != 0;
        D.37913 = __result == 0;
        D.37914 = D.37912 & D.37913;
        if (D.37914 != 0) goto <D.37915>; else goto <D.37916>;
        <D.37915>:
        D.37917 = &MEM[(void *)"MonoMethod" + 1B];
        D.37918 = *D.37917;
        D.37919 = (int) D.37918;
        D.37920 = __s2 + 1;
        D.37921 = *D.37920;
        D.37922 = (int) D.37921;
        __result = D.37919 - D.37922;
        D.37923 = __s1_len > 1;
        D.37913 = __result == 0;
        D.37924 = D.37923 & D.37913;
        if (D.37924 != 0) goto <D.37925>; else goto <D.37926>;
        <D.37925>:
        D.37927 = &MEM[(void *)"MonoMethod" + 2B];
        D.37928 = *D.37927;
        D.37929 = (int) D.37928;
        D.37930 = __s2 + 2;
        D.37931 = *D.37930;
        D.37932 = (int) D.37931;
        __result = D.37929 - D.37932;
        D.37933 = __s1_len > 2;
        D.37913 = __result == 0;
        D.37934 = D.37933 & D.37913;
        if (D.37934 != 0) goto <D.37935>; else goto <D.37936>;
        <D.37935>:
        D.37937 = &MEM[(void *)"MonoMethod" + 3B];
        D.37938 = *D.37937;
        D.37939 = (int) D.37938;
        D.37940 = __s2 + 3;
        D.37941 = *D.37940;
        D.37942 = (int) D.37941;
        __result = D.37939 - D.37942;
        <D.37936>:
        <D.37926>:
        <D.37916>:
      }
      D.24518 = __result;
    }
    iftmp.572 = D.24518;
    goto <D.37943>;
    <D.37906>:
    D.37638 = klass->name;
    iftmp.572 = __builtin_strcmp ("MonoMethod", D.37638);
    <D.37943>:
    D.24522 = iftmp.572;
  }
  if (D.24522 == 0) goto <D.37901>; else goto <D.37944>;
  <D.37944>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 11;
    if (__s1_len <= 3) goto <D.37946>; else goto <D.37947>;
    <D.37946>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.37948 = "MonoCMethod";
      D.37949 = MEM[(const unsigned char *)D.37948];
      D.37950 = (int) D.37949;
      D.37951 = *__s2;
      D.37952 = (int) D.37951;
      __result = D.37950 - D.37952;
      {
        D.37953 = __s1_len != 0;
        D.37954 = __result == 0;
        D.37955 = D.37953 & D.37954;
        if (D.37955 != 0) goto <D.37956>; else goto <D.37957>;
        <D.37956>:
        D.37958 = &MEM[(void *)"MonoCMethod" + 1B];
        D.37959 = *D.37958;
        D.37960 = (int) D.37959;
        D.37961 = __s2 + 1;
        D.37962 = *D.37961;
        D.37963 = (int) D.37962;
        __result = D.37960 - D.37963;
        D.37964 = __s1_len > 1;
        D.37954 = __result == 0;
        D.37965 = D.37964 & D.37954;
        if (D.37965 != 0) goto <D.37966>; else goto <D.37967>;
        <D.37966>:
        D.37968 = &MEM[(void *)"MonoCMethod" + 2B];
        D.37969 = *D.37968;
        D.37970 = (int) D.37969;
        D.37971 = __s2 + 2;
        D.37972 = *D.37971;
        D.37973 = (int) D.37972;
        __result = D.37970 - D.37973;
        D.37974 = __s1_len > 2;
        D.37954 = __result == 0;
        D.37975 = D.37974 & D.37954;
        if (D.37975 != 0) goto <D.37976>; else goto <D.37977>;
        <D.37976>:
        D.37978 = &MEM[(void *)"MonoCMethod" + 3B];
        D.37979 = *D.37978;
        D.37980 = (int) D.37979;
        D.37981 = __s2 + 3;
        D.37982 = *D.37981;
        D.37983 = (int) D.37982;
        __result = D.37980 - D.37983;
        <D.37977>:
        <D.37967>:
        <D.37957>:
      }
      D.24527 = __result;
    }
    iftmp.573 = D.24527;
    goto <D.37984>;
    <D.37947>:
    D.37638 = klass->name;
    iftmp.573 = __builtin_strcmp ("MonoCMethod", D.37638);
    <D.37984>:
    D.24531 = iftmp.573;
  }
  if (D.24531 == 0) goto <D.37901>; else goto <D.37902>;
  <D.37901>:
  {
    struct MonoReflectionMethod * rmethod;

    rmethod = obj;
    D.37985 = rmethod->method;
    cinfo = mono_custom_attrs_from_method (D.37985);
  }
  goto <D.37903>;
  <D.37902>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 17;
    if (__s1_len <= 3) goto <D.37990>; else goto <D.37991>;
    <D.37990>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.37992 = "MonoGenericMethod";
      D.37993 = MEM[(const unsigned char *)D.37992];
      D.37994 = (int) D.37993;
      D.37995 = *__s2;
      D.37996 = (int) D.37995;
      __result = D.37994 - D.37996;
      {
        D.37997 = __s1_len != 0;
        D.37998 = __result == 0;
        D.37999 = D.37997 & D.37998;
        if (D.37999 != 0) goto <D.38000>; else goto <D.38001>;
        <D.38000>:
        D.38002 = &MEM[(void *)"MonoGenericMethod" + 1B];
        D.38003 = *D.38002;
        D.38004 = (int) D.38003;
        D.38005 = __s2 + 1;
        D.38006 = *D.38005;
        D.38007 = (int) D.38006;
        __result = D.38004 - D.38007;
        D.38008 = __s1_len > 1;
        D.37998 = __result == 0;
        D.38009 = D.38008 & D.37998;
        if (D.38009 != 0) goto <D.38010>; else goto <D.38011>;
        <D.38010>:
        D.38012 = &MEM[(void *)"MonoGenericMethod" + 2B];
        D.38013 = *D.38012;
        D.38014 = (int) D.38013;
        D.38015 = __s2 + 2;
        D.38016 = *D.38015;
        D.38017 = (int) D.38016;
        __result = D.38014 - D.38017;
        D.38018 = __s1_len > 2;
        D.37998 = __result == 0;
        D.38019 = D.38018 & D.37998;
        if (D.38019 != 0) goto <D.38020>; else goto <D.38021>;
        <D.38020>:
        D.38022 = &MEM[(void *)"MonoGenericMethod" + 3B];
        D.38023 = *D.38022;
        D.38024 = (int) D.38023;
        D.38025 = __s2 + 3;
        D.38026 = *D.38025;
        D.38027 = (int) D.38026;
        __result = D.38024 - D.38027;
        <D.38021>:
        <D.38011>:
        <D.38001>:
      }
      D.24537 = __result;
    }
    iftmp.574 = D.24537;
    goto <D.38028>;
    <D.37991>:
    D.37638 = klass->name;
    iftmp.574 = __builtin_strcmp ("MonoGenericMethod", D.37638);
    <D.38028>:
    D.24541 = iftmp.574;
  }
  if (D.24541 == 0) goto <D.37986>; else goto <D.38029>;
  <D.38029>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 18;
    if (__s1_len <= 3) goto <D.38031>; else goto <D.38032>;
    <D.38031>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.38033 = "MonoGenericCMethod";
      D.38034 = MEM[(const unsigned char *)D.38033];
      D.38035 = (int) D.38034;
      D.38036 = *__s2;
      D.38037 = (int) D.38036;
      __result = D.38035 - D.38037;
      {
        D.38038 = __s1_len != 0;
        D.38039 = __result == 0;
        D.38040 = D.38038 & D.38039;
        if (D.38040 != 0) goto <D.38041>; else goto <D.38042>;
        <D.38041>:
        D.38043 = &MEM[(void *)"MonoGenericCMethod" + 1B];
        D.38044 = *D.38043;
        D.38045 = (int) D.38044;
        D.38046 = __s2 + 1;
        D.38047 = *D.38046;
        D.38048 = (int) D.38047;
        __result = D.38045 - D.38048;
        D.38049 = __s1_len > 1;
        D.38039 = __result == 0;
        D.38050 = D.38049 & D.38039;
        if (D.38050 != 0) goto <D.38051>; else goto <D.38052>;
        <D.38051>:
        D.38053 = &MEM[(void *)"MonoGenericCMethod" + 2B];
        D.38054 = *D.38053;
        D.38055 = (int) D.38054;
        D.38056 = __s2 + 2;
        D.38057 = *D.38056;
        D.38058 = (int) D.38057;
        __result = D.38055 - D.38058;
        D.38059 = __s1_len > 2;
        D.38039 = __result == 0;
        D.38060 = D.38059 & D.38039;
        if (D.38060 != 0) goto <D.38061>; else goto <D.38062>;
        <D.38061>:
        D.38063 = &MEM[(void *)"MonoGenericCMethod" + 3B];
        D.38064 = *D.38063;
        D.38065 = (int) D.38064;
        D.38066 = __s2 + 3;
        D.38067 = *D.38066;
        D.38068 = (int) D.38067;
        __result = D.38065 - D.38068;
        <D.38062>:
        <D.38052>:
        <D.38042>:
      }
      D.24546 = __result;
    }
    iftmp.575 = D.24546;
    goto <D.38069>;
    <D.38032>:
    D.37638 = klass->name;
    iftmp.575 = __builtin_strcmp ("MonoGenericCMethod", D.37638);
    <D.38069>:
    D.24550 = iftmp.575;
  }
  if (D.24550 == 0) goto <D.37986>; else goto <D.37987>;
  <D.37986>:
  {
    struct MonoReflectionMethod * rmethod;

    rmethod = obj;
    D.38070 = rmethod->method;
    cinfo = mono_custom_attrs_from_method (D.38070);
  }
  goto <D.37988>;
  <D.37987>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 13;
    if (__s1_len <= 3) goto <D.38075>; else goto <D.38076>;
    <D.38075>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.38077 = "ParameterInfo";
      D.38078 = MEM[(const unsigned char *)D.38077];
      D.38079 = (int) D.38078;
      D.38080 = *__s2;
      D.38081 = (int) D.38080;
      __result = D.38079 - D.38081;
      {
        D.38082 = __s1_len != 0;
        D.38083 = __result == 0;
        D.38084 = D.38082 & D.38083;
        if (D.38084 != 0) goto <D.38085>; else goto <D.38086>;
        <D.38085>:
        D.38087 = &MEM[(void *)"ParameterInfo" + 1B];
        D.38088 = *D.38087;
        D.38089 = (int) D.38088;
        D.38090 = __s2 + 1;
        D.38091 = *D.38090;
        D.38092 = (int) D.38091;
        __result = D.38089 - D.38092;
        D.38093 = __s1_len > 1;
        D.38083 = __result == 0;
        D.38094 = D.38093 & D.38083;
        if (D.38094 != 0) goto <D.38095>; else goto <D.38096>;
        <D.38095>:
        D.38097 = &MEM[(void *)"ParameterInfo" + 2B];
        D.38098 = *D.38097;
        D.38099 = (int) D.38098;
        D.38100 = __s2 + 2;
        D.38101 = *D.38100;
        D.38102 = (int) D.38101;
        __result = D.38099 - D.38102;
        D.38103 = __s1_len > 2;
        D.38083 = __result == 0;
        D.38104 = D.38103 & D.38083;
        if (D.38104 != 0) goto <D.38105>; else goto <D.38106>;
        <D.38105>:
        D.38107 = &MEM[(void *)"ParameterInfo" + 3B];
        D.38108 = *D.38107;
        D.38109 = (int) D.38108;
        D.38110 = __s2 + 3;
        D.38111 = *D.38110;
        D.38112 = (int) D.38111;
        __result = D.38109 - D.38112;
        <D.38106>:
        <D.38096>:
        <D.38086>:
      }
      D.24556 = __result;
    }
    iftmp.576 = D.24556;
    goto <D.38113>;
    <D.38076>:
    D.37638 = klass->name;
    iftmp.576 = __builtin_strcmp ("ParameterInfo", D.37638);
    <D.38113>:
    D.24560 = iftmp.576;
  }
  if (D.24560 == 0) goto <D.38071>; else goto <D.38114>;
  <D.38114>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 17;
    if (__s1_len <= 3) goto <D.38116>; else goto <D.38117>;
    <D.38116>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.38118 = "MonoParameterInfo";
      D.38119 = MEM[(const unsigned char *)D.38118];
      D.38120 = (int) D.38119;
      D.38121 = *__s2;
      D.38122 = (int) D.38121;
      __result = D.38120 - D.38122;
      {
        D.38123 = __s1_len != 0;
        D.38124 = __result == 0;
        D.38125 = D.38123 & D.38124;
        if (D.38125 != 0) goto <D.38126>; else goto <D.38127>;
        <D.38126>:
        D.38128 = &MEM[(void *)"MonoParameterInfo" + 1B];
        D.38129 = *D.38128;
        D.38130 = (int) D.38129;
        D.38131 = __s2 + 1;
        D.38132 = *D.38131;
        D.38133 = (int) D.38132;
        __result = D.38130 - D.38133;
        D.38134 = __s1_len > 1;
        D.38124 = __result == 0;
        D.38135 = D.38134 & D.38124;
        if (D.38135 != 0) goto <D.38136>; else goto <D.38137>;
        <D.38136>:
        D.38138 = &MEM[(void *)"MonoParameterInfo" + 2B];
        D.38139 = *D.38138;
        D.38140 = (int) D.38139;
        D.38141 = __s2 + 2;
        D.38142 = *D.38141;
        D.38143 = (int) D.38142;
        __result = D.38140 - D.38143;
        D.38144 = __s1_len > 2;
        D.38124 = __result == 0;
        D.38145 = D.38144 & D.38124;
        if (D.38145 != 0) goto <D.38146>; else goto <D.38147>;
        <D.38146>:
        D.38148 = &MEM[(void *)"MonoParameterInfo" + 3B];
        D.38149 = *D.38148;
        D.38150 = (int) D.38149;
        D.38151 = __s2 + 3;
        D.38152 = *D.38151;
        D.38153 = (int) D.38152;
        __result = D.38150 - D.38153;
        <D.38147>:
        <D.38137>:
        <D.38127>:
      }
      D.24565 = __result;
    }
    iftmp.577 = D.24565;
    goto <D.38154>;
    <D.38117>:
    D.37638 = klass->name;
    iftmp.577 = __builtin_strcmp ("MonoParameterInfo", D.37638);
    <D.38154>:
    D.24569 = iftmp.577;
  }
  if (D.24569 == 0) goto <D.38071>; else goto <D.38072>;
  <D.38071>:
  {
    struct MonoReflectionParameter * param;
    struct MonoClass * member_class;

    param = obj;
    D.38155 = param->MemberImpl;
    D.38156 = D.38155->vtable;
    member_class = D.38156->klass;
    D.38157 = mono_class_is_reflection_method_or_constructor (member_class);
    if (D.38157 != 0) goto <D.38158>; else goto <D.38159>;
    <D.38158>:
    {
      struct MonoReflectionMethod * rmethod;

      rmethod = param->MemberImpl;
      D.38160 = rmethod->method;
      D.38161 = param->PositionImpl;
      D.38162 = D.38161 + 1;
      D.38163 = (unsigned int) D.38162;
      cinfo = mono_custom_attrs_from_param (D.38160, D.38163);
    }
    goto <D.38164>;
    <D.38159>:
    D.38165 = is_sr_mono_property (member_class);
    if (D.38165 != 0) goto <D.38166>; else goto <D.38167>;
    <D.38166>:
    {
      struct MonoReflectionProperty * prop;
      struct MonoMethod * method;

      prop = param->MemberImpl;
      D.38168 = prop->property;
      method = D.38168->get;
      if (method == 0B) goto <D.38169>; else goto <D.38170>;
      <D.38169>:
      D.38168 = prop->property;
      method = D.38168->set;
      <D.38170>:
      D.38171 = method == 0B;
      D.38172 = (long int) D.38171;
      D.38173 = __builtin_expect (D.38172, 0);
      if (D.38173 != 0) goto <D.38174>; else goto <D.38175>;
      <D.38174>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 8889, "method");
      <D.38175>:
      D.38161 = param->PositionImpl;
      D.38162 = D.38161 + 1;
      D.38163 = (unsigned int) D.38162;
      cinfo = mono_custom_attrs_from_param (method, D.38163);
    }
    goto <D.38176>;
    <D.38167>:
    D.38177 = is_sre_method_on_tb_inst (member_class);
    if (D.38177 != 0) goto <D.38178>; else goto <D.38179>;
    <D.38178>:
    {
      struct MonoMethod * method;

      D.38155 = param->MemberImpl;
      method = mono_reflection_method_on_tb_inst_get_handle (D.38155);
      D.38161 = param->PositionImpl;
      D.38162 = D.38161 + 1;
      D.38163 = (unsigned int) D.38162;
      cinfo = mono_custom_attrs_from_param (method, D.38163);
    }
    goto <D.38180>;
    <D.38179>:
    D.38181 = is_sre_ctor_on_tb_inst (member_class);
    if (D.38181 != 0) goto <D.38182>; else goto <D.38183>;
    <D.38182>:
    {
      struct MonoReflectionCtorOnTypeBuilderInst * c;
      struct MonoMethod * method;

      c = param->MemberImpl;
      method = 0B;
      D.38184 = c->cb;
      D.38185 = D.38184->vtable;
      D.38186 = D.38185->klass;
      D.38187 = is_sre_ctor_builder (D.38186);
      if (D.38187 != 0) goto <D.38188>; else goto <D.38189>;
      <D.38188>:
      D.38184 = c->cb;
      method = MEM[(struct MonoReflectionCtorBuilder *)D.38184].mhandle;
      goto <D.38190>;
      <D.38189>:
      D.38184 = c->cb;
      D.38185 = D.38184->vtable;
      D.38186 = D.38185->klass;
      D.38191 = is_sr_mono_cmethod (D.38186);
      if (D.38191 != 0) goto <D.38192>; else goto <D.38193>;
      <D.38192>:
      D.38184 = c->cb;
      method = MEM[(struct MonoReflectionMethod *)D.38184].method;
      goto <D.38194>;
      <D.38193>:
      D.38195 = mono_type_get_full_name (member_class);
      monoeg_g_log (0B, 4, "mono_reflection_get_custom_attrs_info:: can\'t handle a CTBI with base_method of type %s", D.38195);
      <D.24578>:
      goto <D.24578>;
      <D.38194>:
      <D.38190>:
      D.38161 = param->PositionImpl;
      D.38162 = D.38161 + 1;
      D.38163 = (unsigned int) D.38162;
      cinfo = mono_custom_attrs_from_param (method, D.38163);
    }
    goto <D.38196>;
    <D.38183>:
    {
      char * type_name;
      char * msg;
      struct MonoException * ex;

      type_name = mono_type_get_full_name (member_class);
      msg = monoeg_g_strdup_printf ("Custom attributes on a ParamInfo with member %s are not supported", type_name);
      ex = mono_get_exception_not_supported (msg);
      monoeg_g_free (type_name);
      monoeg_g_free (msg);
      mono_raise_exception (ex);
    }
    <D.38196>:
    <D.38180>:
    <D.38176>:
    <D.38164>:
  }
  goto <D.38073>;
  <D.38072>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 15;
    if (__s1_len <= 3) goto <D.38198>; else goto <D.38199>;
    <D.38198>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.38200 = "AssemblyBuilder";
      D.38201 = MEM[(const unsigned char *)D.38200];
      D.38202 = (int) D.38201;
      D.38203 = *__s2;
      D.38204 = (int) D.38203;
      __result = D.38202 - D.38204;
      {
        D.38205 = __s1_len != 0;
        D.38206 = __result == 0;
        D.38207 = D.38205 & D.38206;
        if (D.38207 != 0) goto <D.38208>; else goto <D.38209>;
        <D.38208>:
        D.38210 = &MEM[(void *)"AssemblyBuilder" + 1B];
        D.38211 = *D.38210;
        D.38212 = (int) D.38211;
        D.38213 = __s2 + 1;
        D.38214 = *D.38213;
        D.38215 = (int) D.38214;
        __result = D.38212 - D.38215;
        D.38216 = __s1_len > 1;
        D.38206 = __result == 0;
        D.38217 = D.38216 & D.38206;
        if (D.38217 != 0) goto <D.38218>; else goto <D.38219>;
        <D.38218>:
        D.38220 = &MEM[(void *)"AssemblyBuilder" + 2B];
        D.38221 = *D.38220;
        D.38222 = (int) D.38221;
        D.38223 = __s2 + 2;
        D.38224 = *D.38223;
        D.38225 = (int) D.38224;
        __result = D.38222 - D.38225;
        D.38226 = __s1_len > 2;
        D.38206 = __result == 0;
        D.38227 = D.38226 & D.38206;
        if (D.38227 != 0) goto <D.38228>; else goto <D.38229>;
        <D.38228>:
        D.38230 = &MEM[(void *)"AssemblyBuilder" + 3B];
        D.38231 = *D.38230;
        D.38232 = (int) D.38231;
        D.38233 = __s2 + 3;
        D.38234 = *D.38233;
        D.38235 = (int) D.38234;
        __result = D.38232 - D.38235;
        <D.38229>:
        <D.38219>:
        <D.38209>:
      }
      D.24586 = __result;
    }
    iftmp.578 = D.24586;
    goto <D.38236>;
    <D.38199>:
    D.37638 = klass->name;
    iftmp.578 = __builtin_strcmp ("AssemblyBuilder", D.37638);
    <D.38236>:
    D.24590 = iftmp.578;
  }
  if (D.24590 == 0) goto <D.38237>; else goto <D.38238>;
  <D.38237>:
  {
    struct MonoReflectionAssemblyBuilder * assemblyb;

    assemblyb = obj;
    D.38239 = assemblyb->assembly.assembly;
    D.38240 = D.38239->image;
    D.38241 = assemblyb->cattrs;
    cinfo = mono_custom_attrs_from_builders (0B, D.38240, D.38241);
  }
  goto <D.38242>;
  <D.38238>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 11;
    if (__s1_len <= 3) goto <D.38244>; else goto <D.38245>;
    <D.38244>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.38246 = "TypeBuilder";
      D.38247 = MEM[(const unsigned char *)D.38246];
      D.38248 = (int) D.38247;
      D.38249 = *__s2;
      D.38250 = (int) D.38249;
      __result = D.38248 - D.38250;
      {
        D.38251 = __s1_len != 0;
        D.38252 = __result == 0;
        D.38253 = D.38251 & D.38252;
        if (D.38253 != 0) goto <D.38254>; else goto <D.38255>;
        <D.38254>:
        D.38256 = &MEM[(void *)"TypeBuilder" + 1B];
        D.38257 = *D.38256;
        D.38258 = (int) D.38257;
        D.38259 = __s2 + 1;
        D.38260 = *D.38259;
        D.38261 = (int) D.38260;
        __result = D.38258 - D.38261;
        D.38262 = __s1_len > 1;
        D.38252 = __result == 0;
        D.38263 = D.38262 & D.38252;
        if (D.38263 != 0) goto <D.38264>; else goto <D.38265>;
        <D.38264>:
        D.38266 = &MEM[(void *)"TypeBuilder" + 2B];
        D.38267 = *D.38266;
        D.38268 = (int) D.38267;
        D.38269 = __s2 + 2;
        D.38270 = *D.38269;
        D.38271 = (int) D.38270;
        __result = D.38268 - D.38271;
        D.38272 = __s1_len > 2;
        D.38252 = __result == 0;
        D.38273 = D.38272 & D.38252;
        if (D.38273 != 0) goto <D.38274>; else goto <D.38275>;
        <D.38274>:
        D.38276 = &MEM[(void *)"TypeBuilder" + 3B];
        D.38277 = *D.38276;
        D.38278 = (int) D.38277;
        D.38279 = __s2 + 3;
        D.38280 = *D.38279;
        D.38281 = (int) D.38280;
        __result = D.38278 - D.38281;
        <D.38275>:
        <D.38265>:
        <D.38255>:
      }
      D.24596 = __result;
    }
    iftmp.579 = D.24596;
    goto <D.38282>;
    <D.38245>:
    D.37638 = klass->name;
    iftmp.579 = __builtin_strcmp ("TypeBuilder", D.37638);
    <D.38282>:
    D.24600 = iftmp.579;
  }
  if (D.24600 == 0) goto <D.38283>; else goto <D.38284>;
  <D.38283>:
  {
    struct MonoReflectionTypeBuilder * tb;

    tb = obj;
    D.38285 = tb->module;
    D.38286 = D.38285->dynamic_image;
    D.38287 = &D.38286->image;
    D.38288 = tb->cattrs;
    cinfo = mono_custom_attrs_from_builders (0B, D.38287, D.38288);
  }
  goto <D.38289>;
  <D.38284>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 13;
    if (__s1_len <= 3) goto <D.38291>; else goto <D.38292>;
    <D.38291>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.38293 = "ModuleBuilder";
      D.38294 = MEM[(const unsigned char *)D.38293];
      D.38295 = (int) D.38294;
      D.38296 = *__s2;
      D.38297 = (int) D.38296;
      __result = D.38295 - D.38297;
      {
        D.38298 = __s1_len != 0;
        D.38299 = __result == 0;
        D.38300 = D.38298 & D.38299;
        if (D.38300 != 0) goto <D.38301>; else goto <D.38302>;
        <D.38301>:
        D.38303 = &MEM[(void *)"ModuleBuilder" + 1B];
        D.38304 = *D.38303;
        D.38305 = (int) D.38304;
        D.38306 = __s2 + 1;
        D.38307 = *D.38306;
        D.38308 = (int) D.38307;
        __result = D.38305 - D.38308;
        D.38309 = __s1_len > 1;
        D.38299 = __result == 0;
        D.38310 = D.38309 & D.38299;
        if (D.38310 != 0) goto <D.38311>; else goto <D.38312>;
        <D.38311>:
        D.38313 = &MEM[(void *)"ModuleBuilder" + 2B];
        D.38314 = *D.38313;
        D.38315 = (int) D.38314;
        D.38316 = __s2 + 2;
        D.38317 = *D.38316;
        D.38318 = (int) D.38317;
        __result = D.38315 - D.38318;
        D.38319 = __s1_len > 2;
        D.38299 = __result == 0;
        D.38320 = D.38319 & D.38299;
        if (D.38320 != 0) goto <D.38321>; else goto <D.38322>;
        <D.38321>:
        D.38323 = &MEM[(void *)"ModuleBuilder" + 3B];
        D.38324 = *D.38323;
        D.38325 = (int) D.38324;
        D.38326 = __s2 + 3;
        D.38327 = *D.38326;
        D.38328 = (int) D.38327;
        __result = D.38325 - D.38328;
        <D.38322>:
        <D.38312>:
        <D.38302>:
      }
      D.24606 = __result;
    }
    iftmp.580 = D.24606;
    goto <D.38329>;
    <D.38292>:
    D.37638 = klass->name;
    iftmp.580 = __builtin_strcmp ("ModuleBuilder", D.37638);
    <D.38329>:
    D.24610 = iftmp.580;
  }
  if (D.24610 == 0) goto <D.38330>; else goto <D.38331>;
  <D.38330>:
  {
    struct MonoReflectionModuleBuilder * mb;

    mb = obj;
    D.38332 = mb->dynamic_image;
    D.38333 = &D.38332->image;
    D.38334 = mb->cattrs;
    cinfo = mono_custom_attrs_from_builders (0B, D.38333, D.38334);
  }
  goto <D.38335>;
  <D.38331>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 18;
    if (__s1_len <= 3) goto <D.38337>; else goto <D.38338>;
    <D.38337>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.38339 = "ConstructorBuilder";
      D.38340 = MEM[(const unsigned char *)D.38339];
      D.38341 = (int) D.38340;
      D.38342 = *__s2;
      D.38343 = (int) D.38342;
      __result = D.38341 - D.38343;
      {
        D.38344 = __s1_len != 0;
        D.38345 = __result == 0;
        D.38346 = D.38344 & D.38345;
        if (D.38346 != 0) goto <D.38347>; else goto <D.38348>;
        <D.38347>:
        D.38349 = &MEM[(void *)"ConstructorBuilder" + 1B];
        D.38350 = *D.38349;
        D.38351 = (int) D.38350;
        D.38352 = __s2 + 1;
        D.38353 = *D.38352;
        D.38354 = (int) D.38353;
        __result = D.38351 - D.38354;
        D.38355 = __s1_len > 1;
        D.38345 = __result == 0;
        D.38356 = D.38355 & D.38345;
        if (D.38356 != 0) goto <D.38357>; else goto <D.38358>;
        <D.38357>:
        D.38359 = &MEM[(void *)"ConstructorBuilder" + 2B];
        D.38360 = *D.38359;
        D.38361 = (int) D.38360;
        D.38362 = __s2 + 2;
        D.38363 = *D.38362;
        D.38364 = (int) D.38363;
        __result = D.38361 - D.38364;
        D.38365 = __s1_len > 2;
        D.38345 = __result == 0;
        D.38366 = D.38365 & D.38345;
        if (D.38366 != 0) goto <D.38367>; else goto <D.38368>;
        <D.38367>:
        D.38369 = &MEM[(void *)"ConstructorBuilder" + 3B];
        D.38370 = *D.38369;
        D.38371 = (int) D.38370;
        D.38372 = __s2 + 3;
        D.38373 = *D.38372;
        D.38374 = (int) D.38373;
        __result = D.38371 - D.38374;
        <D.38368>:
        <D.38358>:
        <D.38348>:
      }
      D.24616 = __result;
    }
    iftmp.581 = D.24616;
    goto <D.38375>;
    <D.38338>:
    D.37638 = klass->name;
    iftmp.581 = __builtin_strcmp ("ConstructorBuilder", D.37638);
    <D.38375>:
    D.24620 = iftmp.581;
  }
  if (D.24620 == 0) goto <D.38376>; else goto <D.38377>;
  <D.38376>:
  {
    struct MonoReflectionCtorBuilder * cb;

    cb = obj;
    D.38378 = cb->mhandle;
    D.38379 = D.38378->klass;
    D.38380 = D.38379->image;
    D.38381 = cb->cattrs;
    cinfo = mono_custom_attrs_from_builders (0B, D.38380, D.38381);
  }
  goto <D.38382>;
  <D.38377>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 13;
    if (__s1_len <= 3) goto <D.38384>; else goto <D.38385>;
    <D.38384>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.38386 = "MethodBuilder";
      D.38387 = MEM[(const unsigned char *)D.38386];
      D.38388 = (int) D.38387;
      D.38389 = *__s2;
      D.38390 = (int) D.38389;
      __result = D.38388 - D.38390;
      {
        D.38391 = __s1_len != 0;
        D.38392 = __result == 0;
        D.38393 = D.38391 & D.38392;
        if (D.38393 != 0) goto <D.38394>; else goto <D.38395>;
        <D.38394>:
        D.38396 = &MEM[(void *)"MethodBuilder" + 1B];
        D.38397 = *D.38396;
        D.38398 = (int) D.38397;
        D.38399 = __s2 + 1;
        D.38400 = *D.38399;
        D.38401 = (int) D.38400;
        __result = D.38398 - D.38401;
        D.38402 = __s1_len > 1;
        D.38392 = __result == 0;
        D.38403 = D.38402 & D.38392;
        if (D.38403 != 0) goto <D.38404>; else goto <D.38405>;
        <D.38404>:
        D.38406 = &MEM[(void *)"MethodBuilder" + 2B];
        D.38407 = *D.38406;
        D.38408 = (int) D.38407;
        D.38409 = __s2 + 2;
        D.38410 = *D.38409;
        D.38411 = (int) D.38410;
        __result = D.38408 - D.38411;
        D.38412 = __s1_len > 2;
        D.38392 = __result == 0;
        D.38413 = D.38412 & D.38392;
        if (D.38413 != 0) goto <D.38414>; else goto <D.38415>;
        <D.38414>:
        D.38416 = &MEM[(void *)"MethodBuilder" + 3B];
        D.38417 = *D.38416;
        D.38418 = (int) D.38417;
        D.38419 = __s2 + 3;
        D.38420 = *D.38419;
        D.38421 = (int) D.38420;
        __result = D.38418 - D.38421;
        <D.38415>:
        <D.38405>:
        <D.38395>:
      }
      D.24626 = __result;
    }
    iftmp.582 = D.24626;
    goto <D.38422>;
    <D.38385>:
    D.37638 = klass->name;
    iftmp.582 = __builtin_strcmp ("MethodBuilder", D.37638);
    <D.38422>:
    D.24630 = iftmp.582;
  }
  if (D.24630 == 0) goto <D.38423>; else goto <D.38424>;
  <D.38423>:
  {
    struct MonoReflectionMethodBuilder * mb;

    mb = obj;
    D.38425 = mb->mhandle;
    D.38426 = D.38425->klass;
    D.38427 = D.38426->image;
    D.38428 = mb->cattrs;
    cinfo = mono_custom_attrs_from_builders (0B, D.38427, D.38428);
  }
  goto <D.38429>;
  <D.38424>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 12;
    if (__s1_len <= 3) goto <D.38431>; else goto <D.38432>;
    <D.38431>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.38433 = "FieldBuilder";
      D.38434 = MEM[(const unsigned char *)D.38433];
      D.38435 = (int) D.38434;
      D.38436 = *__s2;
      D.38437 = (int) D.38436;
      __result = D.38435 - D.38437;
      {
        D.38438 = __s1_len != 0;
        D.38439 = __result == 0;
        D.38440 = D.38438 & D.38439;
        if (D.38440 != 0) goto <D.38441>; else goto <D.38442>;
        <D.38441>:
        D.38443 = &MEM[(void *)"FieldBuilder" + 1B];
        D.38444 = *D.38443;
        D.38445 = (int) D.38444;
        D.38446 = __s2 + 1;
        D.38447 = *D.38446;
        D.38448 = (int) D.38447;
        __result = D.38445 - D.38448;
        D.38449 = __s1_len > 1;
        D.38439 = __result == 0;
        D.38450 = D.38449 & D.38439;
        if (D.38450 != 0) goto <D.38451>; else goto <D.38452>;
        <D.38451>:
        D.38453 = &MEM[(void *)"FieldBuilder" + 2B];
        D.38454 = *D.38453;
        D.38455 = (int) D.38454;
        D.38456 = __s2 + 2;
        D.38457 = *D.38456;
        D.38458 = (int) D.38457;
        __result = D.38455 - D.38458;
        D.38459 = __s1_len > 2;
        D.38439 = __result == 0;
        D.38460 = D.38459 & D.38439;
        if (D.38460 != 0) goto <D.38461>; else goto <D.38462>;
        <D.38461>:
        D.38463 = &MEM[(void *)"FieldBuilder" + 3B];
        D.38464 = *D.38463;
        D.38465 = (int) D.38464;
        D.38466 = __s2 + 3;
        D.38467 = *D.38466;
        D.38468 = (int) D.38467;
        __result = D.38465 - D.38468;
        <D.38462>:
        <D.38452>:
        <D.38442>:
      }
      D.24636 = __result;
    }
    iftmp.583 = D.24636;
    goto <D.38469>;
    <D.38432>:
    D.37638 = klass->name;
    iftmp.583 = __builtin_strcmp ("FieldBuilder", D.37638);
    <D.38469>:
    D.24640 = iftmp.583;
  }
  if (D.24640 == 0) goto <D.38470>; else goto <D.38471>;
  <D.38470>:
  {
    struct MonoReflectionFieldBuilder * fb;

    fb = obj;
    D.38472 = fb->typeb;
    D.38473 = MEM[(struct MonoReflectionTypeBuilder *)D.38472].module;
    D.38474 = D.38473->dynamic_image;
    D.38475 = &D.38474->image;
    D.38476 = fb->cattrs;
    cinfo = mono_custom_attrs_from_builders (0B, D.38475, D.38476);
  }
  goto <D.38477>;
  <D.38471>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 16;
    if (__s1_len <= 3) goto <D.38479>; else goto <D.38480>;
    <D.38479>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = klass->name;
      D.38481 = "MonoGenericClass";
      D.38482 = MEM[(const unsigned char *)D.38481];
      D.38483 = (int) D.38482;
      D.38484 = *__s2;
      D.38485 = (int) D.38484;
      __result = D.38483 - D.38485;
      {
        D.38486 = __s1_len != 0;
        D.38487 = __result == 0;
        D.38488 = D.38486 & D.38487;
        if (D.38488 != 0) goto <D.38489>; else goto <D.38490>;
        <D.38489>:
        D.38491 = &MEM[(void *)"MonoGenericClass" + 1B];
        D.38492 = *D.38491;
        D.38493 = (int) D.38492;
        D.38494 = __s2 + 1;
        D.38495 = *D.38494;
        D.38496 = (int) D.38495;
        __result = D.38493 - D.38496;
        D.38497 = __s1_len > 1;
        D.38487 = __result == 0;
        D.38498 = D.38497 & D.38487;
        if (D.38498 != 0) goto <D.38499>; else goto <D.38500>;
        <D.38499>:
        D.38501 = &MEM[(void *)"MonoGenericClass" + 2B];
        D.38502 = *D.38501;
        D.38503 = (int) D.38502;
        D.38504 = __s2 + 2;
        D.38505 = *D.38504;
        D.38506 = (int) D.38505;
        __result = D.38503 - D.38506;
        D.38507 = __s1_len > 2;
        D.38487 = __result == 0;
        D.38508 = D.38507 & D.38487;
        if (D.38508 != 0) goto <D.38509>; else goto <D.38510>;
        <D.38509>:
        D.38511 = &MEM[(void *)"MonoGenericClass" + 3B];
        D.38512 = *D.38511;
        D.38513 = (int) D.38512;
        D.38514 = __s2 + 3;
        D.38515 = *D.38514;
        D.38516 = (int) D.38515;
        __result = D.38513 - D.38516;
        <D.38510>:
        <D.38500>:
        <D.38490>:
      }
      D.24646 = __result;
    }
    iftmp.584 = D.24646;
    goto <D.38517>;
    <D.38480>:
    D.37638 = klass->name;
    iftmp.584 = __builtin_strcmp ("MonoGenericClass", D.37638);
    <D.38517>:
    D.24650 = iftmp.584;
  }
  if (D.24650 == 0) goto <D.38518>; else goto <D.38519>;
  <D.38518>:
  {
    struct MonoReflectionGenericClass * gclass;

    gclass = obj;
    D.38520 = gclass->generic_type;
    cinfo = mono_reflection_get_custom_attrs_info (D.38520);
  }
  goto <D.38521>;
  <D.38519>:
  D.37638 = klass->name;
  monoeg_g_log (0B, 4, "get custom attrs not yet supported for %s", D.37638);
  <D.24652>:
  goto <D.24652>;
  <D.38521>:
  <D.38477>:
  <D.38429>:
  <D.38382>:
  <D.38335>:
  <D.38289>:
  <D.38242>:
  <D.38073>:
  <D.37988>:
  <D.37903>:
  <D.37900>:
  <D.37855>:
  <D.37810>:
  <D.37683>:
  <D.37597>:
  <D.37594>:
  D.38522 = cinfo;
  return D.38522;
}


mono_custom_attrs_from_module (struct MonoImage * image)
{
  unsigned char D.38524;
  unsigned char D.38525;
  struct MonoCustomAttrInfo * D.38528;
  guint32 idx;

  D.38524 = BIT_FIELD_REF <*image, 8, 128>;
  D.38525 = D.38524 & 8;
  if (D.38525 != 0) goto <D.38526>; else goto <D.38527>;
  <D.38526>:
  D.38528 = lookup_custom_attr (image, image);
  return D.38528;
  <D.38527>:
  idx = 1;
  idx = idx << 5;
  idx = idx | 7;
  D.38528 = mono_custom_attrs_from_index (image, idx);
  return D.38528;
}


is_sr_mono_property (struct MonoClass * class)
{
  struct MonoClass * cached_class.585;
  gboolean D.38533;
  _Bool D.38534;
  int D.38535;
  int D.25025;
  int iftmp.586;
  int D.25021;
  const char[13] * D.38541;
  unsigned char D.38542;
  int D.38543;
  unsigned char D.38544;
  int D.38545;
  _Bool D.38546;
  _Bool D.38547;
  _Bool D.38548;
  const unsigned char * D.38551;
  unsigned char D.38552;
  int D.38553;
  const unsigned char * D.38554;
  unsigned char D.38555;
  int D.38556;
  _Bool D.38557;
  _Bool D.38558;
  const unsigned char * D.38561;
  unsigned char D.38562;
  int D.38563;
  const unsigned char * D.38564;
  unsigned char D.38565;
  int D.38566;
  _Bool D.38567;
  _Bool D.38568;
  const unsigned char * D.38571;
  unsigned char D.38572;
  int D.38573;
  const unsigned char * D.38574;
  unsigned char D.38575;
  int D.38576;
  const char * D.38578;
  int D.25034;
  int iftmp.587;
  int D.25030;
  const char[18] * D.38584;
  unsigned char D.38585;
  int D.38586;
  unsigned char D.38587;
  int D.38588;
  _Bool D.38589;
  _Bool D.38590;
  _Bool D.38591;
  const unsigned char * D.38594;
  unsigned char D.38595;
  int D.38596;
  const unsigned char * D.38597;
  unsigned char D.38598;
  int D.38599;
  _Bool D.38600;
  _Bool D.38601;
  const unsigned char * D.38604;
  unsigned char D.38605;
  int D.38606;
  const unsigned char * D.38607;
  unsigned char D.38608;
  int D.38609;
  _Bool D.38610;
  _Bool D.38611;
  const unsigned char * D.38614;
  unsigned char D.38615;
  int D.38616;
  const unsigned char * D.38617;
  unsigned char D.38618;
  int D.38619;
  const char * D.38621;

  {
    static struct MonoClass * cached_class;

    cached_class.585 = cached_class;
    if (cached_class.585 != 0B) goto <D.38531>; else goto <D.38532>;
    <D.38531>:
    cached_class.585 = cached_class;
    D.38534 = cached_class.585 == class;
    D.38533 = (gboolean) D.38534;
    return D.38533;
    <D.38532>:
    D.38535 = is_corlib_type (class);
    if (D.38535 != 0) goto <D.38536>; else goto <D.38537>;
    <D.38536>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 12;
      if (__s1_len <= 3) goto <D.38539>; else goto <D.38540>;
      <D.38539>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.38541 = "MonoProperty";
        D.38542 = MEM[(const unsigned char *)D.38541];
        D.38543 = (int) D.38542;
        D.38544 = *__s2;
        D.38545 = (int) D.38544;
        __result = D.38543 - D.38545;
        {
          D.38546 = __s1_len != 0;
          D.38547 = __result == 0;
          D.38548 = D.38546 & D.38547;
          if (D.38548 != 0) goto <D.38549>; else goto <D.38550>;
          <D.38549>:
          D.38551 = &MEM[(void *)"MonoProperty" + 1B];
          D.38552 = *D.38551;
          D.38553 = (int) D.38552;
          D.38554 = __s2 + 1;
          D.38555 = *D.38554;
          D.38556 = (int) D.38555;
          __result = D.38553 - D.38556;
          D.38557 = __s1_len > 1;
          D.38547 = __result == 0;
          D.38558 = D.38557 & D.38547;
          if (D.38558 != 0) goto <D.38559>; else goto <D.38560>;
          <D.38559>:
          D.38561 = &MEM[(void *)"MonoProperty" + 2B];
          D.38562 = *D.38561;
          D.38563 = (int) D.38562;
          D.38564 = __s2 + 2;
          D.38565 = *D.38564;
          D.38566 = (int) D.38565;
          __result = D.38563 - D.38566;
          D.38567 = __s1_len > 2;
          D.38547 = __result == 0;
          D.38568 = D.38567 & D.38547;
          if (D.38568 != 0) goto <D.38569>; else goto <D.38570>;
          <D.38569>:
          D.38571 = &MEM[(void *)"MonoProperty" + 3B];
          D.38572 = *D.38571;
          D.38573 = (int) D.38572;
          D.38574 = __s2 + 3;
          D.38575 = *D.38574;
          D.38576 = (int) D.38575;
          __result = D.38573 - D.38576;
          <D.38570>:
          <D.38560>:
          <D.38550>:
        }
        D.25021 = __result;
      }
      iftmp.586 = D.25021;
      goto <D.38577>;
      <D.38540>:
      D.38578 = class->name;
      iftmp.586 = __builtin_strcmp ("MonoProperty", D.38578);
      <D.38577>:
      D.25025 = iftmp.586;
    }
    if (D.25025 == 0) goto <D.38579>; else goto <D.38580>;
    <D.38579>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 17;
      if (__s1_len <= 3) goto <D.38582>; else goto <D.38583>;
      <D.38582>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.38584 = "System.Reflection";
        D.38585 = MEM[(const unsigned char *)D.38584];
        D.38586 = (int) D.38585;
        D.38587 = *__s2;
        D.38588 = (int) D.38587;
        __result = D.38586 - D.38588;
        {
          D.38589 = __s1_len != 0;
          D.38590 = __result == 0;
          D.38591 = D.38589 & D.38590;
          if (D.38591 != 0) goto <D.38592>; else goto <D.38593>;
          <D.38592>:
          D.38594 = &MEM[(void *)"System.Reflection" + 1B];
          D.38595 = *D.38594;
          D.38596 = (int) D.38595;
          D.38597 = __s2 + 1;
          D.38598 = *D.38597;
          D.38599 = (int) D.38598;
          __result = D.38596 - D.38599;
          D.38600 = __s1_len > 1;
          D.38590 = __result == 0;
          D.38601 = D.38600 & D.38590;
          if (D.38601 != 0) goto <D.38602>; else goto <D.38603>;
          <D.38602>:
          D.38604 = &MEM[(void *)"System.Reflection" + 2B];
          D.38605 = *D.38604;
          D.38606 = (int) D.38605;
          D.38607 = __s2 + 2;
          D.38608 = *D.38607;
          D.38609 = (int) D.38608;
          __result = D.38606 - D.38609;
          D.38610 = __s1_len > 2;
          D.38590 = __result == 0;
          D.38611 = D.38610 & D.38590;
          if (D.38611 != 0) goto <D.38612>; else goto <D.38613>;
          <D.38612>:
          D.38614 = &MEM[(void *)"System.Reflection" + 3B];
          D.38615 = *D.38614;
          D.38616 = (int) D.38615;
          D.38617 = __s2 + 3;
          D.38618 = *D.38617;
          D.38619 = (int) D.38618;
          __result = D.38616 - D.38619;
          <D.38613>:
          <D.38603>:
          <D.38593>:
        }
        D.25030 = __result;
      }
      iftmp.587 = D.25030;
      goto <D.38620>;
      <D.38583>:
      D.38621 = class->name_space;
      iftmp.587 = __builtin_strcmp ("System.Reflection", D.38621);
      <D.38620>:
      D.25034 = iftmp.587;
    }
    if (D.25034 == 0) goto <D.38622>; else goto <D.38623>;
    <D.38622>:
    cached_class = class;
    D.38533 = 1;
    return D.38533;
    <D.38623>:
    <D.38580>:
    <D.38537>:
    D.38533 = 0;
    return D.38533;
  }
}


is_sre_method_on_tb_inst (struct MonoClass * class)
{
  struct MonoClass * cached_class.588;
  gboolean D.38628;
  _Bool D.38629;
  int D.38630;
  int D.24867;
  int iftmp.589;
  int D.24863;
  const char[24] * D.38636;
  unsigned char D.38637;
  int D.38638;
  unsigned char D.38639;
  int D.38640;
  _Bool D.38641;
  _Bool D.38642;
  _Bool D.38643;
  const unsigned char * D.38646;
  unsigned char D.38647;
  int D.38648;
  const unsigned char * D.38649;
  unsigned char D.38650;
  int D.38651;
  _Bool D.38652;
  _Bool D.38653;
  const unsigned char * D.38656;
  unsigned char D.38657;
  int D.38658;
  const unsigned char * D.38659;
  unsigned char D.38660;
  int D.38661;
  _Bool D.38662;
  _Bool D.38663;
  const unsigned char * D.38666;
  unsigned char D.38667;
  int D.38668;
  const unsigned char * D.38669;
  unsigned char D.38670;
  int D.38671;
  const char * D.38673;
  int D.24876;
  int iftmp.590;
  int D.24872;
  const char[23] * D.38679;
  unsigned char D.38680;
  int D.38681;
  unsigned char D.38682;
  int D.38683;
  _Bool D.38684;
  _Bool D.38685;
  _Bool D.38686;
  const unsigned char * D.38689;
  unsigned char D.38690;
  int D.38691;
  const unsigned char * D.38692;
  unsigned char D.38693;
  int D.38694;
  _Bool D.38695;
  _Bool D.38696;
  const unsigned char * D.38699;
  unsigned char D.38700;
  int D.38701;
  const unsigned char * D.38702;
  unsigned char D.38703;
  int D.38704;
  _Bool D.38705;
  _Bool D.38706;
  const unsigned char * D.38709;
  unsigned char D.38710;
  int D.38711;
  const unsigned char * D.38712;
  unsigned char D.38713;
  int D.38714;
  const char * D.38716;

  {
    static struct MonoClass * cached_class;

    cached_class.588 = cached_class;
    if (cached_class.588 != 0B) goto <D.38626>; else goto <D.38627>;
    <D.38626>:
    cached_class.588 = cached_class;
    D.38629 = cached_class.588 == class;
    D.38628 = (gboolean) D.38629;
    return D.38628;
    <D.38627>:
    D.38630 = is_corlib_type (class);
    if (D.38630 != 0) goto <D.38631>; else goto <D.38632>;
    <D.38631>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 23;
      if (__s1_len <= 3) goto <D.38634>; else goto <D.38635>;
      <D.38634>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.38636 = "MethodOnTypeBuilderInst";
        D.38637 = MEM[(const unsigned char *)D.38636];
        D.38638 = (int) D.38637;
        D.38639 = *__s2;
        D.38640 = (int) D.38639;
        __result = D.38638 - D.38640;
        {
          D.38641 = __s1_len != 0;
          D.38642 = __result == 0;
          D.38643 = D.38641 & D.38642;
          if (D.38643 != 0) goto <D.38644>; else goto <D.38645>;
          <D.38644>:
          D.38646 = &MEM[(void *)"MethodOnTypeBuilderInst" + 1B];
          D.38647 = *D.38646;
          D.38648 = (int) D.38647;
          D.38649 = __s2 + 1;
          D.38650 = *D.38649;
          D.38651 = (int) D.38650;
          __result = D.38648 - D.38651;
          D.38652 = __s1_len > 1;
          D.38642 = __result == 0;
          D.38653 = D.38652 & D.38642;
          if (D.38653 != 0) goto <D.38654>; else goto <D.38655>;
          <D.38654>:
          D.38656 = &MEM[(void *)"MethodOnTypeBuilderInst" + 2B];
          D.38657 = *D.38656;
          D.38658 = (int) D.38657;
          D.38659 = __s2 + 2;
          D.38660 = *D.38659;
          D.38661 = (int) D.38660;
          __result = D.38658 - D.38661;
          D.38662 = __s1_len > 2;
          D.38642 = __result == 0;
          D.38663 = D.38662 & D.38642;
          if (D.38663 != 0) goto <D.38664>; else goto <D.38665>;
          <D.38664>:
          D.38666 = &MEM[(void *)"MethodOnTypeBuilderInst" + 3B];
          D.38667 = *D.38666;
          D.38668 = (int) D.38667;
          D.38669 = __s2 + 3;
          D.38670 = *D.38669;
          D.38671 = (int) D.38670;
          __result = D.38668 - D.38671;
          <D.38665>:
          <D.38655>:
          <D.38645>:
        }
        D.24863 = __result;
      }
      iftmp.589 = D.24863;
      goto <D.38672>;
      <D.38635>:
      D.38673 = class->name;
      iftmp.589 = __builtin_strcmp ("MethodOnTypeBuilderInst", D.38673);
      <D.38672>:
      D.24867 = iftmp.589;
    }
    if (D.24867 == 0) goto <D.38674>; else goto <D.38675>;
    <D.38674>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 22;
      if (__s1_len <= 3) goto <D.38677>; else goto <D.38678>;
      <D.38677>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.38679 = "System.Reflection.Emit";
        D.38680 = MEM[(const unsigned char *)D.38679];
        D.38681 = (int) D.38680;
        D.38682 = *__s2;
        D.38683 = (int) D.38682;
        __result = D.38681 - D.38683;
        {
          D.38684 = __s1_len != 0;
          D.38685 = __result == 0;
          D.38686 = D.38684 & D.38685;
          if (D.38686 != 0) goto <D.38687>; else goto <D.38688>;
          <D.38687>:
          D.38689 = &MEM[(void *)"System.Reflection.Emit" + 1B];
          D.38690 = *D.38689;
          D.38691 = (int) D.38690;
          D.38692 = __s2 + 1;
          D.38693 = *D.38692;
          D.38694 = (int) D.38693;
          __result = D.38691 - D.38694;
          D.38695 = __s1_len > 1;
          D.38685 = __result == 0;
          D.38696 = D.38695 & D.38685;
          if (D.38696 != 0) goto <D.38697>; else goto <D.38698>;
          <D.38697>:
          D.38699 = &MEM[(void *)"System.Reflection.Emit" + 2B];
          D.38700 = *D.38699;
          D.38701 = (int) D.38700;
          D.38702 = __s2 + 2;
          D.38703 = *D.38702;
          D.38704 = (int) D.38703;
          __result = D.38701 - D.38704;
          D.38705 = __s1_len > 2;
          D.38685 = __result == 0;
          D.38706 = D.38705 & D.38685;
          if (D.38706 != 0) goto <D.38707>; else goto <D.38708>;
          <D.38707>:
          D.38709 = &MEM[(void *)"System.Reflection.Emit" + 3B];
          D.38710 = *D.38709;
          D.38711 = (int) D.38710;
          D.38712 = __s2 + 3;
          D.38713 = *D.38712;
          D.38714 = (int) D.38713;
          __result = D.38711 - D.38714;
          <D.38708>:
          <D.38698>:
          <D.38688>:
        }
        D.24872 = __result;
      }
      iftmp.590 = D.24872;
      goto <D.38715>;
      <D.38678>:
      D.38716 = class->name_space;
      iftmp.590 = __builtin_strcmp ("System.Reflection.Emit", D.38716);
      <D.38715>:
      D.24876 = iftmp.590;
    }
    if (D.24876 == 0) goto <D.38717>; else goto <D.38718>;
    <D.38717>:
    cached_class = class;
    D.38628 = 1;
    return D.38628;
    <D.38718>:
    <D.38675>:
    <D.38632>:
    D.38628 = 0;
    return D.38628;
  }
}


is_sre_ctor_on_tb_inst (struct MonoClass * class)
{
  struct MonoClass * cached_class.591;
  gboolean D.38723;
  _Bool D.38724;
  int D.38725;
  int D.24889;
  int iftmp.592;
  int D.24885;
  const char[29] * D.38731;
  unsigned char D.38732;
  int D.38733;
  unsigned char D.38734;
  int D.38735;
  _Bool D.38736;
  _Bool D.38737;
  _Bool D.38738;
  const unsigned char * D.38741;
  unsigned char D.38742;
  int D.38743;
  const unsigned char * D.38744;
  unsigned char D.38745;
  int D.38746;
  _Bool D.38747;
  _Bool D.38748;
  const unsigned char * D.38751;
  unsigned char D.38752;
  int D.38753;
  const unsigned char * D.38754;
  unsigned char D.38755;
  int D.38756;
  _Bool D.38757;
  _Bool D.38758;
  const unsigned char * D.38761;
  unsigned char D.38762;
  int D.38763;
  const unsigned char * D.38764;
  unsigned char D.38765;
  int D.38766;
  const char * D.38768;
  int D.24898;
  int iftmp.593;
  int D.24894;
  const char[23] * D.38774;
  unsigned char D.38775;
  int D.38776;
  unsigned char D.38777;
  int D.38778;
  _Bool D.38779;
  _Bool D.38780;
  _Bool D.38781;
  const unsigned char * D.38784;
  unsigned char D.38785;
  int D.38786;
  const unsigned char * D.38787;
  unsigned char D.38788;
  int D.38789;
  _Bool D.38790;
  _Bool D.38791;
  const unsigned char * D.38794;
  unsigned char D.38795;
  int D.38796;
  const unsigned char * D.38797;
  unsigned char D.38798;
  int D.38799;
  _Bool D.38800;
  _Bool D.38801;
  const unsigned char * D.38804;
  unsigned char D.38805;
  int D.38806;
  const unsigned char * D.38807;
  unsigned char D.38808;
  int D.38809;
  const char * D.38811;

  {
    static struct MonoClass * cached_class;

    cached_class.591 = cached_class;
    if (cached_class.591 != 0B) goto <D.38721>; else goto <D.38722>;
    <D.38721>:
    cached_class.591 = cached_class;
    D.38724 = cached_class.591 == class;
    D.38723 = (gboolean) D.38724;
    return D.38723;
    <D.38722>:
    D.38725 = is_corlib_type (class);
    if (D.38725 != 0) goto <D.38726>; else goto <D.38727>;
    <D.38726>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 28;
      if (__s1_len <= 3) goto <D.38729>; else goto <D.38730>;
      <D.38729>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.38731 = "ConstructorOnTypeBuilderInst";
        D.38732 = MEM[(const unsigned char *)D.38731];
        D.38733 = (int) D.38732;
        D.38734 = *__s2;
        D.38735 = (int) D.38734;
        __result = D.38733 - D.38735;
        {
          D.38736 = __s1_len != 0;
          D.38737 = __result == 0;
          D.38738 = D.38736 & D.38737;
          if (D.38738 != 0) goto <D.38739>; else goto <D.38740>;
          <D.38739>:
          D.38741 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 1B];
          D.38742 = *D.38741;
          D.38743 = (int) D.38742;
          D.38744 = __s2 + 1;
          D.38745 = *D.38744;
          D.38746 = (int) D.38745;
          __result = D.38743 - D.38746;
          D.38747 = __s1_len > 1;
          D.38737 = __result == 0;
          D.38748 = D.38747 & D.38737;
          if (D.38748 != 0) goto <D.38749>; else goto <D.38750>;
          <D.38749>:
          D.38751 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 2B];
          D.38752 = *D.38751;
          D.38753 = (int) D.38752;
          D.38754 = __s2 + 2;
          D.38755 = *D.38754;
          D.38756 = (int) D.38755;
          __result = D.38753 - D.38756;
          D.38757 = __s1_len > 2;
          D.38737 = __result == 0;
          D.38758 = D.38757 & D.38737;
          if (D.38758 != 0) goto <D.38759>; else goto <D.38760>;
          <D.38759>:
          D.38761 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 3B];
          D.38762 = *D.38761;
          D.38763 = (int) D.38762;
          D.38764 = __s2 + 3;
          D.38765 = *D.38764;
          D.38766 = (int) D.38765;
          __result = D.38763 - D.38766;
          <D.38760>:
          <D.38750>:
          <D.38740>:
        }
        D.24885 = __result;
      }
      iftmp.592 = D.24885;
      goto <D.38767>;
      <D.38730>:
      D.38768 = class->name;
      iftmp.592 = __builtin_strcmp ("ConstructorOnTypeBuilderInst", D.38768);
      <D.38767>:
      D.24889 = iftmp.592;
    }
    if (D.24889 == 0) goto <D.38769>; else goto <D.38770>;
    <D.38769>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 22;
      if (__s1_len <= 3) goto <D.38772>; else goto <D.38773>;
      <D.38772>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.38774 = "System.Reflection.Emit";
        D.38775 = MEM[(const unsigned char *)D.38774];
        D.38776 = (int) D.38775;
        D.38777 = *__s2;
        D.38778 = (int) D.38777;
        __result = D.38776 - D.38778;
        {
          D.38779 = __s1_len != 0;
          D.38780 = __result == 0;
          D.38781 = D.38779 & D.38780;
          if (D.38781 != 0) goto <D.38782>; else goto <D.38783>;
          <D.38782>:
          D.38784 = &MEM[(void *)"System.Reflection.Emit" + 1B];
          D.38785 = *D.38784;
          D.38786 = (int) D.38785;
          D.38787 = __s2 + 1;
          D.38788 = *D.38787;
          D.38789 = (int) D.38788;
          __result = D.38786 - D.38789;
          D.38790 = __s1_len > 1;
          D.38780 = __result == 0;
          D.38791 = D.38790 & D.38780;
          if (D.38791 != 0) goto <D.38792>; else goto <D.38793>;
          <D.38792>:
          D.38794 = &MEM[(void *)"System.Reflection.Emit" + 2B];
          D.38795 = *D.38794;
          D.38796 = (int) D.38795;
          D.38797 = __s2 + 2;
          D.38798 = *D.38797;
          D.38799 = (int) D.38798;
          __result = D.38796 - D.38799;
          D.38800 = __s1_len > 2;
          D.38780 = __result == 0;
          D.38801 = D.38800 & D.38780;
          if (D.38801 != 0) goto <D.38802>; else goto <D.38803>;
          <D.38802>:
          D.38804 = &MEM[(void *)"System.Reflection.Emit" + 3B];
          D.38805 = *D.38804;
          D.38806 = (int) D.38805;
          D.38807 = __s2 + 3;
          D.38808 = *D.38807;
          D.38809 = (int) D.38808;
          __result = D.38806 - D.38809;
          <D.38803>:
          <D.38793>:
          <D.38783>:
        }
        D.24894 = __result;
      }
      iftmp.593 = D.24894;
      goto <D.38810>;
      <D.38773>:
      D.38811 = class->name_space;
      iftmp.593 = __builtin_strcmp ("System.Reflection.Emit", D.38811);
      <D.38810>:
      D.24898 = iftmp.593;
    }
    if (D.24898 == 0) goto <D.38812>; else goto <D.38813>;
    <D.38812>:
    cached_class = class;
    D.38723 = 1;
    return D.38723;
    <D.38813>:
    <D.38770>:
    <D.38727>:
    D.38723 = 0;
    return D.38723;
  }
}


mono_reflection_get_custom_attrs_by_type (struct MonoObject * obj, struct MonoClass * attr_klass, struct MonoError * error)
{
  int D.38817;
  struct MonoLoaderError * D.38821;
  struct MonoArray * D.38824;
  struct MonoDomain * D.38825;
  struct MonoClass * D.24661;
  struct MonoClass * tmp_klass.594;
  struct MonoClass * D.38829;
  struct MonoClass * tmp_klass.595;
  _Bool D.38831;
  long int D.38832;
  long int D.38833;
  struct MonoVTable * D.38836;
  struct MonoArray * result;
  struct MonoCustomAttrInfo * cinfo;

  mono_error_init (error);
  cinfo = mono_reflection_get_custom_attrs_info (obj);
  if (cinfo != 0B) goto <D.38815>; else goto <D.38816>;
  <D.38815>:
  result = mono_custom_attrs_construct_by_type (cinfo, attr_klass, error);
  D.38817 = cinfo->cached;
  if (D.38817 == 0) goto <D.38818>; else goto <D.38819>;
  <D.38818>:
  mono_custom_attrs_free (cinfo);
  <D.38819>:
  goto <D.38820>;
  <D.38816>:
  D.38821 = mono_loader_get_last_error ();
  if (D.38821 != 0B) goto <D.38822>; else goto <D.38823>;
  <D.38822>:
  D.38824 = 0B;
  return D.38824;
  <D.38823>:
  D.38825 = mono_domain_get ();
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.594 = tmp_klass;
      if (tmp_klass.594 == 0B) goto <D.38827>; else goto <D.38828>;
      <D.38827>:
      D.38829 = mono_defaults.attribute_class;
      tmp_klass.595 = mono_array_class_get (D.38829, 1);
      tmp_klass = tmp_klass.595;
      tmp_klass.594 = tmp_klass;
      D.38831 = tmp_klass.594 == 0B;
      D.38832 = (long int) D.38831;
      D.38833 = __builtin_expect (D.38832, 0);
      if (D.38833 != 0) goto <D.38834>; else goto <D.38835>;
      <D.38834>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 8971, "tmp_klass");
      <D.38835>:
      <D.38828>:
    }
    D.24661 = tmp_klass;
  }
  D.38836 = mono_class_vtable (D.38825, D.24661);
  result = mono_array_new_specific (D.38836, 0);
  <D.38820>:
  D.38824 = result;
  return D.38824;
}


mono_reflection_get_custom_attrs (struct MonoObject * obj)
{
  struct MonoArray * D.38838;
  struct MonoError error;

  try
    {
      D.38838 = mono_reflection_get_custom_attrs_by_type (obj, 0B, &error);
      return D.38838;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_reflection_get_custom_attrs_data (struct MonoObject * obj)
{
  int D.38843;
  struct MonoDomain * D.38847;
  struct MonoClass * D.38848;
  struct MonoArray * D.38849;
  struct MonoArray * result;
  struct MonoCustomAttrInfo * cinfo;

  cinfo = mono_reflection_get_custom_attrs_info (obj);
  if (cinfo != 0B) goto <D.38841>; else goto <D.38842>;
  <D.38841>:
  result = mono_custom_attrs_data_construct (cinfo);
  D.38843 = cinfo->cached;
  if (D.38843 == 0) goto <D.38844>; else goto <D.38845>;
  <D.38844>:
  mono_custom_attrs_free (cinfo);
  <D.38845>:
  goto <D.38846>;
  <D.38842>:
  D.38847 = mono_domain_get ();
  D.38848 = mono_defaults.customattribute_data_class;
  result = mono_array_new (D.38847, D.38848, 0);
  <D.38846>:
  D.38849 = result;
  return D.38849;
}


mono_custom_attrs_data_construct (struct MonoCustomAttrInfo * cinfo)
{
  struct MonoDomain * D.38851;
  struct MonoClass * D.38852;
  int D.38853;
  unsigned int D.38854;
  struct MonoImage * D.38855;
  struct MonoCustomAttrEntry * D.38856;
  unsigned int i.596;
  struct MonoArray * D.38858;
  struct MonoArray * result;
  struct MonoObject * attr;
  int i;

  D.38851 = mono_domain_get ();
  D.38852 = mono_defaults.customattribute_data_class;
  D.38853 = cinfo->num_attrs;
  D.38854 = (unsigned int) D.38853;
  result = mono_array_new (D.38851, D.38852, D.38854);
  i = 0;
  goto <D.24343>;
  <D.24342>:
  D.38855 = cinfo->image;
  D.38856 = &cinfo->attrs[i];
  attr = create_custom_attr_data (D.38855, D.38856);
  {
    void * * __p;

    i.596 = (unsigned int) i;
    __p = mono_array_addr_with_size (result, 4, i.596);
    mono_gc_wbarrier_set_arrayref (result, __p, attr);
  }
  i = i + 1;
  <D.24343>:
  D.38853 = cinfo->num_attrs;
  if (D.38853 > i) goto <D.24342>; else goto <D.24344>;
  <D.24344>:
  D.38858 = result;
  return D.38858;
}


create_custom_attr_data (struct MonoImage * image, struct MonoCustomAttrEntry * cattr)
{
  struct MonoAssembly * D.38860;
  _Bool D.38861;
  long int D.38862;
  long int D.38863;
  struct MonoMethod * ctor.597;
  struct MonoClass * D.38869;
  struct MonoMethod * ctor.598;
  struct MonoMethod * D.38871;
  struct MonoReflectionMethod * D.38872;
  struct MonoReflectionAssembly * D.38873;
  const mono_byte * * D.38874;
  uint32_t * D.38875;
  struct MonoObject * D.38876;
  static struct MonoMethod * ctor;
  struct MonoDomain * domain;
  struct MonoObject * attr;
  void * params[4];

  try
    {
      D.38860 = image->assembly;
      D.38861 = D.38860 == 0B;
      D.38862 = (long int) D.38861;
      D.38863 = __builtin_expect (D.38862, 0);
      if (D.38863 != 0) goto <D.38864>; else goto <D.38865>;
      <D.38864>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 8461, "image->assembly");
      <D.38865>:
      ctor.597 = ctor;
      if (ctor.597 == 0B) goto <D.38867>; else goto <D.38868>;
      <D.38867>:
      D.38869 = mono_defaults.customattribute_data_class;
      ctor.598 = mono_class_get_method_from_name (D.38869, ".ctor", 4);
      ctor = ctor.598;
      <D.38868>:
      domain = mono_domain_get ();
      D.38869 = mono_defaults.customattribute_data_class;
      attr = mono_object_new (domain, D.38869);
      D.38871 = cattr->ctor;
      D.38872 = mono_method_get_object (domain, D.38871, 0B);
      params[0] = D.38872;
      D.38860 = image->assembly;
      D.38873 = mono_assembly_get_object (domain, D.38860);
      params[1] = D.38873;
      D.38874 = &cattr->data;
      params[2] = D.38874;
      D.38875 = &cattr->data_size;
      params[3] = D.38875;
      ctor.597 = ctor;
      mono_runtime_invoke (ctor.597, attr, &params, 0B);
      D.38876 = attr;
      return D.38876;
    }
  finally
    {
      params = {CLOBBER};
    }
}


mono_reflection_type_get_handle (struct MonoReflectionType * ref)
{
  struct MonoType * D.38881;
  struct MonoType * D.38882;
  int D.38885;
  int D.38891;
  struct MonoVTable * D.38894;
  int D.38895;
  struct MonoReflectionType * D.38898;
  _Bool D.38899;
  long int D.38900;
  long int D.38901;
  int D.38904;
  struct MonoClass * D.38907;
  struct MonoClass * D.38908;
  struct MonoClass * D.38910;
  unsigned int D.38911;
  struct MonoClass * D.38912;
  int D.38913;
  struct MonoReflectionType * D.38916;
  _Bool D.38917;
  long int D.38918;
  long int D.38919;
  struct MonoClass * D.38922;
  int D.38923;
  struct MonoReflectionType * D.38926;
  _Bool D.38927;
  long int D.38928;
  long int D.38929;
  struct MonoClass * D.38932;
  int D.38933;
  struct MonoArray * D.38936;
  unsigned int D.38937;
  unsigned int count.599;
  unsigned int D.38939;
  unsigned int i.600;
  char * D.38941;
  unsigned int i.601;
  unsigned int D.38943;
  struct MonoType * * D.38944;
  struct MonoType * D.38945;
  struct MonoType * D.38946;
  struct MonoReflectionType * D.38949;
  _Bool D.38950;
  long int D.38951;
  long int D.38952;
  struct MonoClass * D.38955;
  struct MonoType * D.38956;
  char * D.38957;
  struct MonoClass * class;

  if (ref == 0B) goto <D.38879>; else goto <D.38880>;
  <D.38879>:
  D.38881 = 0B;
  return D.38881;
  <D.38880>:
  D.38882 = ref->type;
  if (D.38882 != 0B) goto <D.38883>; else goto <D.38884>;
  <D.38883>:
  D.38881 = ref->type;
  return D.38881;
  <D.38884>:
  D.38885 = is_usertype (ref);
  if (D.38885 != 0) goto <D.38886>; else goto <D.38887>;
  <D.38886>:
  ref = mono_reflection_type_get_underlying_system_type (ref);
  if (ref == 0B) goto <D.38888>; else goto <D.38890>;
  <D.38890>:
  D.38891 = is_usertype (ref);
  if (D.38891 != 0) goto <D.38888>; else goto <D.38889>;
  <D.38888>:
  D.38881 = 0B;
  return D.38881;
  <D.38889>:
  D.38882 = ref->type;
  if (D.38882 != 0B) goto <D.38892>; else goto <D.38893>;
  <D.38892>:
  D.38881 = ref->type;
  return D.38881;
  <D.38893>:
  <D.38887>:
  D.38894 = MEM[(struct MonoObject *)ref].vtable;
  class = D.38894->klass;
  D.38895 = is_sre_array (class);
  if (D.38895 != 0) goto <D.38896>; else goto <D.38897>;
  <D.38896>:
  {
    struct MonoType * res;
    struct MonoReflectionArrayType * sre_array;
    struct MonoType * base;

    sre_array = ref;
    D.38898 = sre_array->element_type;
    base = mono_reflection_type_get_handle (D.38898);
    D.38899 = base == 0B;
    D.38900 = (long int) D.38899;
    D.38901 = __builtin_expect (D.38900, 0);
    if (D.38901 != 0) goto <D.38902>; else goto <D.38903>;
    <D.38902>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9133, "base");
    <D.38903>:
    D.38904 = sre_array->rank;
    if (D.38904 == 0) goto <D.38905>; else goto <D.38906>;
    <D.38905>:
    D.38907 = mono_class_from_mono_type (base);
    D.38908 = mono_array_class_get (D.38907, 1);
    res = &D.38908->byval_arg;
    goto <D.38909>;
    <D.38906>:
    D.38910 = mono_class_from_mono_type (base);
    D.38904 = sre_array->rank;
    D.38911 = (unsigned int) D.38904;
    D.38912 = mono_bounded_array_class_get (D.38910, D.38911, 1);
    res = &D.38912->byval_arg;
    <D.38909>:
    sre_array->type.type = res;
    D.38881 = res;
    return D.38881;
  }
  <D.38897>:
  D.38913 = is_sre_byref (class);
  if (D.38913 != 0) goto <D.38914>; else goto <D.38915>;
  <D.38914>:
  {
    struct MonoType * res;
    struct MonoReflectionDerivedType * sre_byref;
    struct MonoType * base;

    sre_byref = ref;
    D.38916 = sre_byref->element_type;
    base = mono_reflection_type_get_handle (D.38916);
    D.38917 = base == 0B;
    D.38918 = (long int) D.38917;
    D.38919 = __builtin_expect (D.38918, 0);
    if (D.38919 != 0) goto <D.38920>; else goto <D.38921>;
    <D.38920>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9144, "base");
    <D.38921>:
    D.38922 = mono_class_from_mono_type (base);
    res = &D.38922->this_arg;
    sre_byref->type.type = res;
    D.38881 = res;
    return D.38881;
  }
  <D.38915>:
  D.38923 = is_sre_pointer (class);
  if (D.38923 != 0) goto <D.38924>; else goto <D.38925>;
  <D.38924>:
  {
    struct MonoType * res;
    struct MonoReflectionDerivedType * sre_pointer;
    struct MonoType * base;

    sre_pointer = ref;
    D.38926 = sre_pointer->element_type;
    base = mono_reflection_type_get_handle (D.38926);
    D.38927 = base == 0B;
    D.38928 = (long int) D.38927;
    D.38929 = __builtin_expect (D.38928, 0);
    if (D.38929 != 0) goto <D.38930>; else goto <D.38931>;
    <D.38930>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9152, "base");
    <D.38931>:
    D.38932 = mono_ptr_class_get (base);
    res = &D.38932->byval_arg;
    sre_pointer->type.type = res;
    D.38881 = res;
    return D.38881;
  }
  <D.38925>:
  D.38933 = is_sre_generic_instance (class);
  if (D.38933 != 0) goto <D.38934>; else goto <D.38935>;
  <D.38934>:
  {
    struct MonoType * res;
    struct MonoType * * types;
    struct MonoReflectionGenericClass * gclass;
    int i;
    int count;

    gclass = ref;
    D.38936 = gclass->type_arguments;
    D.38937 = mono_array_length (D.38936);
    count = (int) D.38937;
    count.599 = (unsigned int) count;
    D.38939 = count.599 * 4;
    types = monoeg_malloc0 (D.38939);
    i = 0;
    goto <D.24919>;
    <D.24918>:
    {
      struct MonoReflectionType * t;

      D.38936 = gclass->type_arguments;
      i.600 = (unsigned int) i;
      D.38941 = mono_array_addr_with_size (D.38936, 4, i.600);
      t = MEM[(void * *)D.38941];
      i.601 = (unsigned int) i;
      D.38943 = i.601 * 4;
      D.38944 = types + D.38943;
      D.38945 = mono_reflection_type_get_handle (t);
      *D.38944 = D.38945;
      i.601 = (unsigned int) i;
      D.38943 = i.601 * 4;
      D.38944 = types + D.38943;
      D.38946 = *D.38944;
      if (D.38946 == 0B) goto <D.38947>; else goto <D.38948>;
      <D.38947>:
      monoeg_g_free (types);
      D.38881 = 0B;
      return D.38881;
      <D.38948>:
    }
    i = i + 1;
    <D.24919>:
    if (i < count) goto <D.24918>; else goto <D.24920>;
    <D.24920>:
    D.38949 = gclass->generic_type;
    res = mono_reflection_bind_generic_parameters (D.38949, count, types);
    monoeg_g_free (types);
    D.38950 = res == 0B;
    D.38951 = (long int) D.38950;
    D.38952 = __builtin_expect (D.38951, 0);
    if (D.38952 != 0) goto <D.38953>; else goto <D.38954>;
    <D.38953>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9174, "res");
    <D.38954>:
    gclass->type.type = res;
    D.38881 = res;
    return D.38881;
  }
  <D.38935>:
  D.38894 = MEM[(struct MonoObject *)ref].vtable;
  D.38955 = D.38894->klass;
  D.38956 = &D.38955->byval_arg;
  D.38957 = mono_type_full_name (D.38956);
  monoeg_g_log (0B, 4, "Cannot handle corlib user type %s", D.38957);
  <D.24921>:
  goto <D.24921>;
  D.38881 = 0B;
  return D.38881;
}


mono_reflection_create_unmanaged_type (struct MonoReflectionType * type)
{
  mono_reflection_type_get_handle (type);
}


mono_reflection_register_with_runtime (struct MonoReflectionType * type)
{
  struct MonoVTable * D.38959;
  struct MonoException * D.38962;
  union mono_mutex_t * D.38963;
  _Bool D.38966;
  long int D.38967;
  long int D.38968;
  struct MonoImage * D.38971;
  unsigned char D.38972;
  unsigned char D.38973;
  struct MonoGHashTable * D.38977;
  struct MonoGHashTable * D.38980;
  _Bool D.38983;
  long int D.38984;
  long int D.38985;
  struct MonoType * res;
  struct MonoDomain * domain;
  struct MonoClass * class;

  res = mono_reflection_type_get_handle (type);
  D.38959 = MEM[(struct MonoObject *)type].vtable;
  domain = D.38959->domain;
  if (res == 0B) goto <D.38960>; else goto <D.38961>;
  <D.38960>:
  D.38962 = mono_get_exception_argument (0B, "Invalid generic instantiation, one or more arguments are not proper user types");
  mono_raise_exception (D.38962);
  <D.38961>:
  class = mono_class_from_mono_type (res);
  mono_loader_lock ();
  {
    int ret;

    D.38963 = &domain->lock.mutex;
    ret = pthread_mutex_lock (D.38963);
    if (ret != 0) goto <D.38964>; else goto <D.38965>;
    <D.38964>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.38965>:
    D.38966 = ret != 0;
    D.38967 = (long int) D.38966;
    D.38968 = __builtin_expect (D.38967, 0);
    if (D.38968 != 0) goto <D.38969>; else goto <D.38970>;
    <D.38969>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9204, "ret == 0");
    <D.38970>:
  }
  D.38971 = class->image;
  D.38972 = BIT_FIELD_REF <*D.38971, 8, 128>;
  D.38973 = D.38972 & 8;
  if (D.38973 == 0) goto <D.38974>; else goto <D.38975>;
  <D.38974>:
  mono_class_setup_supertypes (class);
  goto <D.38976>;
  <D.38975>:
  D.38977 = domain->type_hash;
  if (D.38977 == 0B) goto <D.38978>; else goto <D.38979>;
  <D.38978>:
  D.38980 = mono_g_hash_table_new_type (mono_metadata_type_hash, mono_metadata_type_equal, 2);
  domain->type_hash = D.38980;
  <D.38979>:
  D.38977 = domain->type_hash;
  mono_g_hash_table_insert (D.38977, res, type);
  <D.38976>:
  {
    int ret;

    D.38963 = &domain->lock.mutex;
    ret = pthread_mutex_unlock (D.38963);
    if (ret != 0) goto <D.38981>; else goto <D.38982>;
    <D.38981>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.38982>:
    D.38983 = ret != 0;
    D.38984 = (long int) D.38983;
    D.38985 = __builtin_expect (D.38984, 0);
    if (D.38985 != 0) goto <D.38986>; else goto <D.38987>;
    <D.38986>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9214, "ret == 0");
    <D.38987>:
  }
  mono_loader_unlock ();
}


mono_class_is_reflection_method_or_constructor (struct MonoClass * class)
{
  gboolean D.38988;
  int iftmp.602;
  int D.38993;
  int D.38995;
  int D.38997;
  int D.38999;

  D.38993 = is_sr_mono_method (class);
  if (D.38993 != 0) goto <D.38990>; else goto <D.38994>;
  <D.38994>:
  D.38995 = is_sr_mono_cmethod (class);
  if (D.38995 != 0) goto <D.38990>; else goto <D.38996>;
  <D.38996>:
  D.38997 = is_sr_mono_generic_method (class);
  if (D.38997 != 0) goto <D.38990>; else goto <D.38998>;
  <D.38998>:
  D.38999 = is_sr_mono_generic_cmethod (class);
  if (D.38999 != 0) goto <D.38990>; else goto <D.38991>;
  <D.38990>:
  iftmp.602 = 1;
  goto <D.38992>;
  <D.38991>:
  iftmp.602 = 0;
  <D.38992>:
  D.38988 = iftmp.602;
  return D.38988;
}


is_sr_mono_generic_method (struct MonoClass * class)
{
  struct MonoClass * cached_class.603;
  gboolean D.39004;
  _Bool D.39005;
  int D.39006;
  int D.25091;
  int iftmp.604;
  int D.25087;
  const char[18] * D.39012;
  unsigned char D.39013;
  int D.39014;
  unsigned char D.39015;
  int D.39016;
  _Bool D.39017;
  _Bool D.39018;
  _Bool D.39019;
  const unsigned char * D.39022;
  unsigned char D.39023;
  int D.39024;
  const unsigned char * D.39025;
  unsigned char D.39026;
  int D.39027;
  _Bool D.39028;
  _Bool D.39029;
  const unsigned char * D.39032;
  unsigned char D.39033;
  int D.39034;
  const unsigned char * D.39035;
  unsigned char D.39036;
  int D.39037;
  _Bool D.39038;
  _Bool D.39039;
  const unsigned char * D.39042;
  unsigned char D.39043;
  int D.39044;
  const unsigned char * D.39045;
  unsigned char D.39046;
  int D.39047;
  const char * D.39049;
  int D.25100;
  int iftmp.605;
  int D.25096;
  const char[18] * D.39055;
  unsigned char D.39056;
  int D.39057;
  unsigned char D.39058;
  int D.39059;
  _Bool D.39060;
  _Bool D.39061;
  _Bool D.39062;
  const unsigned char * D.39065;
  unsigned char D.39066;
  int D.39067;
  const unsigned char * D.39068;
  unsigned char D.39069;
  int D.39070;
  _Bool D.39071;
  _Bool D.39072;
  const unsigned char * D.39075;
  unsigned char D.39076;
  int D.39077;
  const unsigned char * D.39078;
  unsigned char D.39079;
  int D.39080;
  _Bool D.39081;
  _Bool D.39082;
  const unsigned char * D.39085;
  unsigned char D.39086;
  int D.39087;
  const unsigned char * D.39088;
  unsigned char D.39089;
  int D.39090;
  const char * D.39092;

  {
    static struct MonoClass * cached_class;

    cached_class.603 = cached_class;
    if (cached_class.603 != 0B) goto <D.39002>; else goto <D.39003>;
    <D.39002>:
    cached_class.603 = cached_class;
    D.39005 = cached_class.603 == class;
    D.39004 = (gboolean) D.39005;
    return D.39004;
    <D.39003>:
    D.39006 = is_corlib_type (class);
    if (D.39006 != 0) goto <D.39007>; else goto <D.39008>;
    <D.39007>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 17;
      if (__s1_len <= 3) goto <D.39010>; else goto <D.39011>;
      <D.39010>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.39012 = "MonoGenericMethod";
        D.39013 = MEM[(const unsigned char *)D.39012];
        D.39014 = (int) D.39013;
        D.39015 = *__s2;
        D.39016 = (int) D.39015;
        __result = D.39014 - D.39016;
        {
          D.39017 = __s1_len != 0;
          D.39018 = __result == 0;
          D.39019 = D.39017 & D.39018;
          if (D.39019 != 0) goto <D.39020>; else goto <D.39021>;
          <D.39020>:
          D.39022 = &MEM[(void *)"MonoGenericMethod" + 1B];
          D.39023 = *D.39022;
          D.39024 = (int) D.39023;
          D.39025 = __s2 + 1;
          D.39026 = *D.39025;
          D.39027 = (int) D.39026;
          __result = D.39024 - D.39027;
          D.39028 = __s1_len > 1;
          D.39018 = __result == 0;
          D.39029 = D.39028 & D.39018;
          if (D.39029 != 0) goto <D.39030>; else goto <D.39031>;
          <D.39030>:
          D.39032 = &MEM[(void *)"MonoGenericMethod" + 2B];
          D.39033 = *D.39032;
          D.39034 = (int) D.39033;
          D.39035 = __s2 + 2;
          D.39036 = *D.39035;
          D.39037 = (int) D.39036;
          __result = D.39034 - D.39037;
          D.39038 = __s1_len > 2;
          D.39018 = __result == 0;
          D.39039 = D.39038 & D.39018;
          if (D.39039 != 0) goto <D.39040>; else goto <D.39041>;
          <D.39040>:
          D.39042 = &MEM[(void *)"MonoGenericMethod" + 3B];
          D.39043 = *D.39042;
          D.39044 = (int) D.39043;
          D.39045 = __s2 + 3;
          D.39046 = *D.39045;
          D.39047 = (int) D.39046;
          __result = D.39044 - D.39047;
          <D.39041>:
          <D.39031>:
          <D.39021>:
        }
        D.25087 = __result;
      }
      iftmp.604 = D.25087;
      goto <D.39048>;
      <D.39011>:
      D.39049 = class->name;
      iftmp.604 = __builtin_strcmp ("MonoGenericMethod", D.39049);
      <D.39048>:
      D.25091 = iftmp.604;
    }
    if (D.25091 == 0) goto <D.39050>; else goto <D.39051>;
    <D.39050>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 17;
      if (__s1_len <= 3) goto <D.39053>; else goto <D.39054>;
      <D.39053>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.39055 = "System.Reflection";
        D.39056 = MEM[(const unsigned char *)D.39055];
        D.39057 = (int) D.39056;
        D.39058 = *__s2;
        D.39059 = (int) D.39058;
        __result = D.39057 - D.39059;
        {
          D.39060 = __s1_len != 0;
          D.39061 = __result == 0;
          D.39062 = D.39060 & D.39061;
          if (D.39062 != 0) goto <D.39063>; else goto <D.39064>;
          <D.39063>:
          D.39065 = &MEM[(void *)"System.Reflection" + 1B];
          D.39066 = *D.39065;
          D.39067 = (int) D.39066;
          D.39068 = __s2 + 1;
          D.39069 = *D.39068;
          D.39070 = (int) D.39069;
          __result = D.39067 - D.39070;
          D.39071 = __s1_len > 1;
          D.39061 = __result == 0;
          D.39072 = D.39071 & D.39061;
          if (D.39072 != 0) goto <D.39073>; else goto <D.39074>;
          <D.39073>:
          D.39075 = &MEM[(void *)"System.Reflection" + 2B];
          D.39076 = *D.39075;
          D.39077 = (int) D.39076;
          D.39078 = __s2 + 2;
          D.39079 = *D.39078;
          D.39080 = (int) D.39079;
          __result = D.39077 - D.39080;
          D.39081 = __s1_len > 2;
          D.39061 = __result == 0;
          D.39082 = D.39081 & D.39061;
          if (D.39082 != 0) goto <D.39083>; else goto <D.39084>;
          <D.39083>:
          D.39085 = &MEM[(void *)"System.Reflection" + 3B];
          D.39086 = *D.39085;
          D.39087 = (int) D.39086;
          D.39088 = __s2 + 3;
          D.39089 = *D.39088;
          D.39090 = (int) D.39089;
          __result = D.39087 - D.39090;
          <D.39084>:
          <D.39074>:
          <D.39064>:
        }
        D.25096 = __result;
      }
      iftmp.605 = D.25096;
      goto <D.39091>;
      <D.39054>:
      D.39092 = class->name_space;
      iftmp.605 = __builtin_strcmp ("System.Reflection", D.39092);
      <D.39091>:
      D.25100 = iftmp.605;
    }
    if (D.25100 == 0) goto <D.39093>; else goto <D.39094>;
    <D.39093>:
    cached_class = class;
    D.39004 = 1;
    return D.39004;
    <D.39094>:
    <D.39051>:
    <D.39008>:
    D.39004 = 0;
    return D.39004;
  }
}


is_sr_mono_generic_cmethod (struct MonoClass * class)
{
  struct MonoClass * cached_class.606;
  gboolean D.39099;
  _Bool D.39100;
  int D.39101;
  int D.25113;
  int iftmp.607;
  int D.25109;
  const char[19] * D.39107;
  unsigned char D.39108;
  int D.39109;
  unsigned char D.39110;
  int D.39111;
  _Bool D.39112;
  _Bool D.39113;
  _Bool D.39114;
  const unsigned char * D.39117;
  unsigned char D.39118;
  int D.39119;
  const unsigned char * D.39120;
  unsigned char D.39121;
  int D.39122;
  _Bool D.39123;
  _Bool D.39124;
  const unsigned char * D.39127;
  unsigned char D.39128;
  int D.39129;
  const unsigned char * D.39130;
  unsigned char D.39131;
  int D.39132;
  _Bool D.39133;
  _Bool D.39134;
  const unsigned char * D.39137;
  unsigned char D.39138;
  int D.39139;
  const unsigned char * D.39140;
  unsigned char D.39141;
  int D.39142;
  const char * D.39144;
  int D.25122;
  int iftmp.608;
  int D.25118;
  const char[18] * D.39150;
  unsigned char D.39151;
  int D.39152;
  unsigned char D.39153;
  int D.39154;
  _Bool D.39155;
  _Bool D.39156;
  _Bool D.39157;
  const unsigned char * D.39160;
  unsigned char D.39161;
  int D.39162;
  const unsigned char * D.39163;
  unsigned char D.39164;
  int D.39165;
  _Bool D.39166;
  _Bool D.39167;
  const unsigned char * D.39170;
  unsigned char D.39171;
  int D.39172;
  const unsigned char * D.39173;
  unsigned char D.39174;
  int D.39175;
  _Bool D.39176;
  _Bool D.39177;
  const unsigned char * D.39180;
  unsigned char D.39181;
  int D.39182;
  const unsigned char * D.39183;
  unsigned char D.39184;
  int D.39185;
  const char * D.39187;

  {
    static struct MonoClass * cached_class;

    cached_class.606 = cached_class;
    if (cached_class.606 != 0B) goto <D.39097>; else goto <D.39098>;
    <D.39097>:
    cached_class.606 = cached_class;
    D.39100 = cached_class.606 == class;
    D.39099 = (gboolean) D.39100;
    return D.39099;
    <D.39098>:
    D.39101 = is_corlib_type (class);
    if (D.39101 != 0) goto <D.39102>; else goto <D.39103>;
    <D.39102>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 18;
      if (__s1_len <= 3) goto <D.39105>; else goto <D.39106>;
      <D.39105>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name;
        D.39107 = "MonoGenericCMethod";
        D.39108 = MEM[(const unsigned char *)D.39107];
        D.39109 = (int) D.39108;
        D.39110 = *__s2;
        D.39111 = (int) D.39110;
        __result = D.39109 - D.39111;
        {
          D.39112 = __s1_len != 0;
          D.39113 = __result == 0;
          D.39114 = D.39112 & D.39113;
          if (D.39114 != 0) goto <D.39115>; else goto <D.39116>;
          <D.39115>:
          D.39117 = &MEM[(void *)"MonoGenericCMethod" + 1B];
          D.39118 = *D.39117;
          D.39119 = (int) D.39118;
          D.39120 = __s2 + 1;
          D.39121 = *D.39120;
          D.39122 = (int) D.39121;
          __result = D.39119 - D.39122;
          D.39123 = __s1_len > 1;
          D.39113 = __result == 0;
          D.39124 = D.39123 & D.39113;
          if (D.39124 != 0) goto <D.39125>; else goto <D.39126>;
          <D.39125>:
          D.39127 = &MEM[(void *)"MonoGenericCMethod" + 2B];
          D.39128 = *D.39127;
          D.39129 = (int) D.39128;
          D.39130 = __s2 + 2;
          D.39131 = *D.39130;
          D.39132 = (int) D.39131;
          __result = D.39129 - D.39132;
          D.39133 = __s1_len > 2;
          D.39113 = __result == 0;
          D.39134 = D.39133 & D.39113;
          if (D.39134 != 0) goto <D.39135>; else goto <D.39136>;
          <D.39135>:
          D.39137 = &MEM[(void *)"MonoGenericCMethod" + 3B];
          D.39138 = *D.39137;
          D.39139 = (int) D.39138;
          D.39140 = __s2 + 3;
          D.39141 = *D.39140;
          D.39142 = (int) D.39141;
          __result = D.39139 - D.39142;
          <D.39136>:
          <D.39126>:
          <D.39116>:
        }
        D.25109 = __result;
      }
      iftmp.607 = D.25109;
      goto <D.39143>;
      <D.39106>:
      D.39144 = class->name;
      iftmp.607 = __builtin_strcmp ("MonoGenericCMethod", D.39144);
      <D.39143>:
      D.25113 = iftmp.607;
    }
    if (D.25113 == 0) goto <D.39145>; else goto <D.39146>;
    <D.39145>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 17;
      if (__s1_len <= 3) goto <D.39148>; else goto <D.39149>;
      <D.39148>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = class->name_space;
        D.39150 = "System.Reflection";
        D.39151 = MEM[(const unsigned char *)D.39150];
        D.39152 = (int) D.39151;
        D.39153 = *__s2;
        D.39154 = (int) D.39153;
        __result = D.39152 - D.39154;
        {
          D.39155 = __s1_len != 0;
          D.39156 = __result == 0;
          D.39157 = D.39155 & D.39156;
          if (D.39157 != 0) goto <D.39158>; else goto <D.39159>;
          <D.39158>:
          D.39160 = &MEM[(void *)"System.Reflection" + 1B];
          D.39161 = *D.39160;
          D.39162 = (int) D.39161;
          D.39163 = __s2 + 1;
          D.39164 = *D.39163;
          D.39165 = (int) D.39164;
          __result = D.39162 - D.39165;
          D.39166 = __s1_len > 1;
          D.39156 = __result == 0;
          D.39167 = D.39166 & D.39156;
          if (D.39167 != 0) goto <D.39168>; else goto <D.39169>;
          <D.39168>:
          D.39170 = &MEM[(void *)"System.Reflection" + 2B];
          D.39171 = *D.39170;
          D.39172 = (int) D.39171;
          D.39173 = __s2 + 2;
          D.39174 = *D.39173;
          D.39175 = (int) D.39174;
          __result = D.39172 - D.39175;
          D.39176 = __s1_len > 2;
          D.39156 = __result == 0;
          D.39177 = D.39176 & D.39156;
          if (D.39177 != 0) goto <D.39178>; else goto <D.39179>;
          <D.39178>:
          D.39180 = &MEM[(void *)"System.Reflection" + 3B];
          D.39181 = *D.39180;
          D.39182 = (int) D.39181;
          D.39183 = __s2 + 3;
          D.39184 = *D.39183;
          D.39185 = (int) D.39184;
          __result = D.39182 - D.39185;
          <D.39179>:
          <D.39169>:
          <D.39159>:
        }
        D.25118 = __result;
      }
      iftmp.608 = D.25118;
      goto <D.39186>;
      <D.39149>:
      D.39187 = class->name_space;
      iftmp.608 = __builtin_strcmp ("System.Reflection", D.39187);
      <D.39186>:
      D.25122 = iftmp.608;
    }
    if (D.25122 == 0) goto <D.39188>; else goto <D.39189>;
    <D.39188>:
    cached_class = class;
    D.39099 = 1;
    return D.39099;
    <D.39189>:
    <D.39146>:
    <D.39103>:
    D.39099 = 0;
    return D.39099;
  }
}


mono_reflection_get_custom_attrs_blob (struct MonoReflectionAssembly * assembly, struct MonoObject * ctor, struct MonoArray * ctorArgs, struct MonoArray * properties, struct MonoArray * propValues, struct MonoArray * fields, struct MonoArray * fieldValues)
{
  int D.25251;
  int iftmp.609;
  int D.25250;
  struct MonoVTable * D.39194;
  struct MonoClass * D.39195;
  const char[12] * D.39196;
  unsigned char D.39197;
  int D.39198;
  unsigned char D.39199;
  int D.39200;
  _Bool D.39201;
  _Bool D.39202;
  _Bool D.39203;
  const unsigned char * D.39206;
  unsigned char D.39207;
  int D.39208;
  const unsigned char * D.39209;
  unsigned char D.39210;
  int D.39211;
  _Bool D.39212;
  _Bool D.39213;
  const unsigned char * D.39216;
  unsigned char D.39217;
  int D.39218;
  const unsigned char * D.39219;
  unsigned char D.39220;
  int D.39221;
  _Bool D.39222;
  _Bool D.39223;
  const unsigned char * D.39226;
  unsigned char D.39227;
  int D.39228;
  const unsigned char * D.39229;
  unsigned char D.39230;
  int D.39231;
  const char * D.39233;
  struct MonoMethod * D.39237;
  unsigned int D.39238;
  short unsigned int D.39239;
  unsigned int D.39240;
  _Bool D.39241;
  long int D.39242;
  long int D.39243;
  unsigned int buflen.610;
  void * buffer.611;
  char * buffer.612;
  char * p.613;
  char * p.614;
  char * p.615;
  char * p.616;
  char * p.617;
  char * D.39254;
  struct MonoAssembly * D.39255;
  struct MonoType * D.39256;
  unsigned int D.39257;
  unsigned int D.39260;
  unsigned int D.39263;
  char * p.618;
  char * p.619;
  char D.39266;
  char * p.620;
  char * p.621;
  unsigned int D.39269;
  char D.39270;
  char * D.39273;
  char * p.622;
  char * p.623;
  struct MonoType * ptype.624;
  char * pname.625;
  char * D.39278;
  void * D.39279;
  unsigned int D.39280;
  char * D.39283;
  char * p.626;
  char * p.627;
  struct MonoType * ftype.628;
  char * fname.629;
  char * D.39288;
  void * D.39289;
  unsigned int D.39290;
  int p.630;
  int buffer.631;
  int D.39293;
  unsigned int buflen.632;
  _Bool D.39295;
  long int D.39296;
  long int D.39297;
  struct MonoDomain * D.39300;
  struct MonoClass * D.39301;
  char * p.633;
  int D.25275;
  int iftmp.634;
  int D.25274;
  unsigned char D.39306;
  int D.39307;
  _Bool D.39308;
  _Bool D.39309;
  _Bool D.39310;
  const unsigned char * D.39313;
  unsigned char D.39314;
  int D.39315;
  _Bool D.39316;
  _Bool D.39317;
  const unsigned char * D.39320;
  unsigned char D.39321;
  int D.39322;
  _Bool D.39323;
  _Bool D.39324;
  const unsigned char * D.39327;
  unsigned char D.39328;
  int D.39329;
  struct MonoArray * D.39333;
  struct MonoArray * result;
  struct MonoMethodSignature * sig;
  struct MonoObject * arg;
  char * buffer;
  char * p;
  guint32 buflen;
  guint32 i;

  try
    {
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.39194 = ctor->vtable;
          D.39195 = D.39194->klass;
          __s2 = D.39195->name;
          D.39196 = "MonoCMethod";
          D.39197 = MEM[(const unsigned char *)D.39196];
          D.39198 = (int) D.39197;
          D.39199 = *__s2;
          D.39200 = (int) D.39199;
          __result = D.39198 - D.39200;
          {
            D.39201 = __s2_len != 0;
            D.39202 = __result == 0;
            D.39203 = D.39201 & D.39202;
            if (D.39203 != 0) goto <D.39204>; else goto <D.39205>;
            <D.39204>:
            D.39206 = &MEM[(void *)"MonoCMethod" + 1B];
            D.39207 = *D.39206;
            D.39208 = (int) D.39207;
            D.39209 = __s2 + 1;
            D.39210 = *D.39209;
            D.39211 = (int) D.39210;
            __result = D.39208 - D.39211;
            D.39212 = __s2_len > 1;
            D.39202 = __result == 0;
            D.39213 = D.39212 & D.39202;
            if (D.39213 != 0) goto <D.39214>; else goto <D.39215>;
            <D.39214>:
            D.39216 = &MEM[(void *)"MonoCMethod" + 2B];
            D.39217 = *D.39216;
            D.39218 = (int) D.39217;
            D.39219 = __s2 + 2;
            D.39220 = *D.39219;
            D.39221 = (int) D.39220;
            __result = D.39218 - D.39221;
            D.39222 = __s2_len > 2;
            D.39202 = __result == 0;
            D.39223 = D.39222 & D.39202;
            if (D.39223 != 0) goto <D.39224>; else goto <D.39225>;
            <D.39224>:
            D.39226 = &MEM[(void *)"MonoCMethod" + 3B];
            D.39227 = *D.39226;
            D.39228 = (int) D.39227;
            D.39229 = __s2 + 3;
            D.39230 = *D.39229;
            D.39231 = (int) D.39230;
            __result = D.39228 - D.39231;
            <D.39225>:
            <D.39215>:
            <D.39205>:
          }
          D.25250 = __result;
        }
        iftmp.609 = -D.25250;
        goto <D.39232>;
        <D.39193>:
        D.39194 = ctor->vtable;
        D.39195 = D.39194->klass;
        D.39233 = D.39195->name;
        iftmp.609 = __builtin_strcmp (D.39233, "MonoCMethod");
        <D.39232>:
        D.25251 = iftmp.609;
      }
      if (D.25251 != 0) goto <D.39234>; else goto <D.39235>;
      <D.39234>:
      sig = ctor_builder_to_signature (0B, ctor);
      goto <D.39236>;
      <D.39235>:
      D.39237 = MEM[(struct MonoReflectionMethod *)ctor].method;
      sig = mono_method_signature (D.39237);
      <D.39236>:
      D.39238 = mono_array_length (ctorArgs);
      D.39239 = sig->param_count;
      D.39240 = (unsigned int) D.39239;
      D.39241 = D.39238 != D.39240;
      D.39242 = (long int) D.39241;
      D.39243 = __builtin_expect (D.39242, 0);
      if (D.39243 != 0) goto <D.39244>; else goto <D.39245>;
      <D.39244>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9719, "mono_array_length (ctorArgs) == sig->param_count");
      <D.39245>:
      buflen = 256;
      buflen.610 = buflen;
      buffer.611 = monoeg_malloc (buflen.610);
      buffer = buffer.611;
      buffer.612 = buffer;
      p = buffer.612;
      p.613 = p;
      p.614 = p.613;
      p.615 = p.614 + 1;
      p = p.615;
      *p.614 = 1;
      p.613 = p;
      p.616 = p.613;
      p.617 = p.616 + 1;
      p = p.617;
      *p.616 = 0;
      i = 0;
      goto <D.25253>;
      <D.25252>:
      D.39254 = mono_array_addr_with_size (ctorArgs, 4, i);
      arg = MEM[(struct MonoObject * *)D.39254];
      D.39255 = assembly->assembly;
      buffer.612 = buffer;
      p.613 = p;
      D.39256 = sig->params[i];
      encode_cattr_value (D.39255, buffer.612, p.613, &buffer, &p, &buflen, D.39256, arg, 0B);
      i = i + 1;
      <D.25253>:
      D.39239 = sig->param_count;
      D.39257 = (unsigned int) D.39239;
      if (D.39257 > i) goto <D.25252>; else goto <D.25254>;
      <D.25254>:
      i = 0;
      if (properties != 0B) goto <D.39258>; else goto <D.39259>;
      <D.39258>:
      D.39260 = mono_array_length (properties);
      i = D.39260 + i;
      <D.39259>:
      if (fields != 0B) goto <D.39261>; else goto <D.39262>;
      <D.39261>:
      D.39263 = mono_array_length (fields);
      i = D.39263 + i;
      <D.39262>:
      p.613 = p;
      p.618 = p.613;
      p.619 = p.618 + 1;
      p = p.619;
      D.39266 = (char) i;
      *p.618 = D.39266;
      p.613 = p;
      p.620 = p.613;
      p.621 = p.620 + 1;
      p = p.621;
      D.39269 = i >> 8;
      D.39270 = (char) D.39269;
      *p.620 = D.39270;
      if (properties != 0B) goto <D.39271>; else goto <D.39272>;
      <D.39271>:
      {
        struct MonoObject * prop;

        i = 0;
        goto <D.25259>;
        <D.25258>:
        {
          struct MonoType * ptype;
          char * pname;

          try
            {
              D.39273 = mono_array_addr_with_size (properties, 4, i);
              prop = MEM[(void * *)D.39273];
              get_prop_name_and_type (prop, &pname, &ptype);
              p.613 = p;
              p.622 = p.613;
              p.623 = p.622 + 1;
              p = p.623;
              *p.622 = 84;
              buffer.612 = buffer;
              p.613 = p;
              ptype.624 = ptype;
              pname.625 = pname;
              D.39278 = mono_array_addr_with_size (propValues, 4, i);
              D.39279 = MEM[(void * *)D.39278];
              encode_named_val (assembly, buffer.612, p.613, &buffer, &p, &buflen, ptype.624, pname.625, D.39279);
              pname.625 = pname;
              monoeg_g_free (pname.625);
            }
          finally
            {
              ptype = {CLOBBER};
              pname = {CLOBBER};
            }
        }
        i = i + 1;
        <D.25259>:
        D.39280 = mono_array_length (properties);
        if (D.39280 > i) goto <D.25258>; else goto <D.25260>;
        <D.25260>:
      }
      <D.39272>:
      if (fields != 0B) goto <D.39281>; else goto <D.39282>;
      <D.39281>:
      {
        struct MonoObject * field;

        i = 0;
        goto <D.25265>;
        <D.25264>:
        {
          struct MonoType * ftype;
          char * fname;

          try
            {
              D.39283 = mono_array_addr_with_size (fields, 4, i);
              field = MEM[(void * *)D.39283];
              get_field_name_and_type (field, &fname, &ftype);
              p.613 = p;
              p.626 = p.613;
              p.627 = p.626 + 1;
              p = p.627;
              *p.626 = 83;
              buffer.612 = buffer;
              p.613 = p;
              ftype.628 = ftype;
              fname.629 = fname;
              D.39288 = mono_array_addr_with_size (fieldValues, 4, i);
              D.39289 = MEM[(void * *)D.39288];
              encode_named_val (assembly, buffer.612, p.613, &buffer, &p, &buflen, ftype.628, fname.629, D.39289);
              fname.629 = fname;
              monoeg_g_free (fname.629);
            }
          finally
            {
              ftype = {CLOBBER};
              fname = {CLOBBER};
            }
        }
        i = i + 1;
        <D.25265>:
        D.39290 = mono_array_length (fields);
        if (D.39290 > i) goto <D.25264>; else goto <D.25266>;
        <D.25266>:
      }
      <D.39282>:
      p.613 = p;
      p.630 = (int) p.613;
      buffer.612 = buffer;
      buffer.631 = (int) buffer.612;
      D.39293 = p.630 - buffer.631;
      buflen.632 = (unsigned int) D.39293;
      buflen.610 = buflen;
      D.39295 = buflen.632 > buflen.610;
      D.39296 = (long int) D.39295;
      D.39297 = __builtin_expect (D.39296, 0);
      if (D.39297 != 0) goto <D.39298>; else goto <D.39299>;
      <D.39298>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9764, "p - buffer <= buflen");
      <D.39299>:
      p.613 = p;
      p.630 = (int) p.613;
      buffer.612 = buffer;
      buffer.631 = (int) buffer.612;
      D.39293 = p.630 - buffer.631;
      buflen.632 = (unsigned int) D.39293;
      buflen = buflen.632;
      D.39300 = mono_domain_get ();
      D.39301 = mono_defaults.byte_class;
      buflen.610 = buflen;
      result = mono_array_new (D.39300, D.39301, buflen.610);
      p.633 = mono_array_addr_with_size (result, 1, 0);
      p = p.633;
      p.613 = p;
      buffer.612 = buffer;
      buflen.610 = buflen;
      memcpy (p.613, buffer.612, buflen.610);
      buffer.612 = buffer;
      monoeg_g_free (buffer.612);
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.39194 = ctor->vtable;
          D.39195 = D.39194->klass;
          __s2 = D.39195->name;
          D.39196 = "MonoCMethod";
          D.39197 = MEM[(const unsigned char *)D.39196];
          D.39198 = (int) D.39197;
          D.39306 = *__s2;
          D.39307 = (int) D.39306;
          __result = D.39198 - D.39307;
          {
            D.39308 = __s2_len != 0;
            D.39309 = __result == 0;
            D.39310 = D.39308 & D.39309;
            if (D.39310 != 0) goto <D.39311>; else goto <D.39312>;
            <D.39311>:
            D.39206 = &MEM[(void *)"MonoCMethod" + 1B];
            D.39207 = *D.39206;
            D.39208 = (int) D.39207;
            D.39313 = __s2 + 1;
            D.39314 = *D.39313;
            D.39315 = (int) D.39314;
            __result = D.39208 - D.39315;
            D.39316 = __s2_len > 1;
            D.39309 = __result == 0;
            D.39317 = D.39316 & D.39309;
            if (D.39317 != 0) goto <D.39318>; else goto <D.39319>;
            <D.39318>:
            D.39216 = &MEM[(void *)"MonoCMethod" + 2B];
            D.39217 = *D.39216;
            D.39218 = (int) D.39217;
            D.39320 = __s2 + 2;
            D.39321 = *D.39320;
            D.39322 = (int) D.39321;
            __result = D.39218 - D.39322;
            D.39323 = __s2_len > 2;
            D.39309 = __result == 0;
            D.39324 = D.39323 & D.39309;
            if (D.39324 != 0) goto <D.39325>; else goto <D.39326>;
            <D.39325>:
            D.39226 = &MEM[(void *)"MonoCMethod" + 3B];
            D.39227 = *D.39226;
            D.39228 = (int) D.39227;
            D.39327 = __s2 + 3;
            D.39328 = *D.39327;
            D.39329 = (int) D.39328;
            __result = D.39228 - D.39329;
            <D.39326>:
            <D.39319>:
            <D.39312>:
          }
          D.25274 = __result;
        }
        iftmp.634 = -D.25274;
        goto <D.39330>;
        <D.39305>:
        D.39194 = ctor->vtable;
        D.39195 = D.39194->klass;
        D.39233 = D.39195->name;
        iftmp.634 = __builtin_strcmp (D.39233, "MonoCMethod");
        <D.39330>:
        D.25275 = iftmp.634;
      }
      if (D.25275 != 0) goto <D.39331>; else goto <D.39332>;
      <D.39331>:
      monoeg_g_free (sig);
      <D.39332>:
      D.39333 = result;
      return D.39333;
    }
  finally
    {
      buffer = {CLOBBER};
      p = {CLOBBER};
      buflen = {CLOBBER};
    }
}


encode_cattr_value (struct MonoAssembly * assembly, char * buffer, char * p, char * * retbuffer, char * * retp, guint32 * buflen, struct MonoType * type, struct MonoObject * arg, char * argval)
{
  char * p.635;
  int p.636;
  char * buffer.637;
  int buffer.638;
  int D.39340;
  int D.39341;
  unsigned int D.39342;
  unsigned int D.39343;
  unsigned int D.39346;
  sizetype D.39347;
  char * p.639;
  unsigned char D.39351;
  char * p.640;
  char * p.641;
  char D.39354;
  char * p.642;
  char * p.643;
  char * p.644;
  struct MonoClass * D.39358;
  unsigned char D.39359;
  unsigned char D.39360;
  struct MonoType * D.39363;
  unsigned char D.39364;
  const char * D.39365;
  char * p.645;
  char * p.646;
  unsigned int D.39370;
  unsigned int D.39371;
  unsigned int D.39372;
  unsigned int D.39375;
  char * p.647;
  char * p.648;
  char * p.649;
  char * p.650;
  struct MonoType * D.39382;
  unsigned int D.39383;
  unsigned int D.39384;
  unsigned int D.39387;
  char * p.651;
  char * p.652;
  char * p.653;
  char * p.654;
  char * p.655;
  char * p.656;
  char * p.657;
  char * p.658;
  char * p.659;
  char * p.660;
  unsigned int D.39400;
  char * p.661;
  char * p.662;
  char D.39403;
  char * p.663;
  char * p.664;
  int D.39406;
  char D.39407;
  char * p.665;
  char * p.666;
  int D.39410;
  char D.39411;
  char * p.667;
  char * p.668;
  unsigned int len.669;
  unsigned int D.39415;
  char D.39416;
  struct MonoVTable * D.39417;
  struct MonoClass * D.39418;
  struct MonoClass * D.39423;
  unsigned char D.39425;
  unsigned char D.39426;
  struct MonoType * D.39428;
  sizetype elsize.670;
  unsigned char D.39431;
  unsigned char D.39432;
  struct MonoType * D.39435;
  sizetype elsize.671;
  unsigned int i.672;
  char * D.39438;
  struct MonoObject * D.39439;
  char * p.673;
  char * p.674;
  char * p.675;
  char * p.676;
  struct MonoClass * D.39446;
  struct MonoObject * D.39447;
  char * p.677;
  char * p.678;
  unsigned char D.39452;
  unsigned char D.39453;
  char * p.679;
  char * p.680;
  struct MonoClass * D.39459;
  char * p.681;
  char * p.682;
  unsigned char D.39464;
  char * p.683;
  char * p.684;
  struct MonoClass * D.39469;
  unsigned char D.39470;
  char * p.685;
  char * p.686;
  char * p.687;
  char * p.688;
  struct MonoType * D.39478;
  unsigned char D.39479;
  unsigned char D.39480;
  char * p.689;
  char * p.690;
  char D.39485;
  struct MonoType * D.39486;
  unsigned int D.39487;
  unsigned int D.39488;
  unsigned int D.39491;
  char * p.691;
  char * p.692;
  struct MonoType * D.39494;
  unsigned char D.39495;
  MonoTypeEnum simple_type;
  void handle_enum = <<< error >>>;
  void handle_type = <<< error >>>;

  p.635 = p;
  p.636 = (int) p.635;
  buffer.637 = buffer;
  buffer.638 = (int) buffer.637;
  D.39340 = p.636 - buffer.638;
  D.39341 = D.39340 + 10;
  D.39342 = (unsigned int) D.39341;
  D.39343 = *buflen;
  if (D.39342 >= D.39343) goto <D.39344>; else goto <D.39345>;
  <D.39344>:
  {
    char * newbuf;

    D.39343 = *buflen;
    D.39346 = D.39343 * 2;
    *buflen = D.39346;
    buffer.637 = buffer;
    D.39343 = *buflen;
    newbuf = monoeg_realloc (buffer.637, D.39343);
    p.635 = p;
    p.636 = (int) p.635;
    buffer.637 = buffer;
    buffer.638 = (int) buffer.637;
    D.39340 = p.636 - buffer.638;
    D.39347 = (sizetype) D.39340;
    p.639 = newbuf + D.39347;
    p = p.639;
    buffer = newbuf;
  }
  <D.39345>:
  if (argval == 0B) goto <D.39349>; else goto <D.39350>;
  <D.39349>:
  argval = arg + 8;
  <D.39350>:
  D.39351 = type->type;
  simple_type = (MonoTypeEnum) D.39351;
  handle_enum:
  switch (simple_type) <default: <D.25203>, case 2: <D.25156>, case 3: <D.25160>, case 4: <D.25158>, case 5: <D.25157>, case 6: <D.25162>, case 7: <D.25161>, case 8: <D.25164>, case 9: <D.25163>, case 10: <D.25168>, case 11: <D.25167>, case 12: <D.25165>, case 13: <D.25166>, case 14: <D.25170>, case 17: <D.25169>, case 18: <D.25174>, case 28: <D.25197>, case 29: <D.25179>>
  <D.25156>:
  <D.25157>:
  <D.25158>:
  p.635 = p;
  p.640 = p.635;
  p.641 = p.640 + 1;
  p = p.641;
  D.39354 = *argval;
  *p.640 = D.39354;
  goto <D.25159>;
  <D.25160>:
  <D.25161>:
  <D.25162>:
  p.635 = p;
  swap_with_size (p.635, argval, 2, 1);
  p.635 = p;
  p.642 = p.635 + 2;
  p = p.642;
  goto <D.25159>;
  <D.25163>:
  <D.25164>:
  <D.25165>:
  p.635 = p;
  swap_with_size (p.635, argval, 4, 1);
  p.635 = p;
  p.643 = p.635 + 4;
  p = p.643;
  goto <D.25159>;
  <D.25166>:
  p.635 = p;
  swap_with_size (p.635, argval, 8, 1);
  p.635 = p;
  p.644 = p.635 + 8;
  p = p.644;
  goto <D.25159>;
  <D.25167>:
  <D.25168>:
  p.635 = p;
  swap_with_size (p.635, argval, 8, 1);
  p.635 = p;
  p.644 = p.635 + 8;
  p = p.644;
  goto <D.25159>;
  <D.25169>:
  D.39358 = type->data.klass;
  D.39359 = BIT_FIELD_REF <*D.39358, 8, 160>;
  D.39360 = D.39359 & 16;
  if (D.39360 != 0) goto <D.39361>; else goto <D.39362>;
  <D.39361>:
  D.39358 = type->data.klass;
  D.39363 = mono_class_enum_basetype (D.39358);
  D.39364 = D.39363->type;
  simple_type = (MonoTypeEnum) D.39364;
  goto handle_enum;
  <D.39362>:
  D.39358 = type->data.klass;
  D.39365 = D.39358->name;
  monoeg_g_log (0B, 16, "generic valutype %s not handled in custom attr value decoding", D.39365);
  goto <D.25159>;
  <D.25170>:
  {
    char * str;
    guint32 slen;

    if (arg == 0B) goto <D.39366>; else goto <D.39367>;
    <D.39366>:
    p.635 = p;
    p.645 = p.635;
    p.646 = p.645 + 1;
    p = p.646;
    *p.645 = 255;
    goto <D.25159>;
    <D.39367>:
    str = mono_string_to_utf8 (arg);
    slen = strlen (str);
    p.635 = p;
    p.636 = (int) p.635;
    buffer.637 = buffer;
    buffer.638 = (int) buffer.637;
    D.39340 = p.636 - buffer.638;
    D.39370 = (unsigned int) D.39340;
    D.39371 = D.39370 + slen;
    D.39372 = D.39371 + 10;
    D.39343 = *buflen;
    if (D.39372 >= D.39343) goto <D.39373>; else goto <D.39374>;
    <D.39373>:
    {
      char * newbuf;

      D.39343 = *buflen;
      D.39346 = D.39343 * 2;
      *buflen = D.39346;
      D.39343 = *buflen;
      D.39375 = D.39343 + slen;
      *buflen = D.39375;
      buffer.637 = buffer;
      D.39343 = *buflen;
      newbuf = monoeg_realloc (buffer.637, D.39343);
      p.635 = p;
      p.636 = (int) p.635;
      buffer.637 = buffer;
      buffer.638 = (int) buffer.637;
      D.39340 = p.636 - buffer.638;
      D.39347 = (sizetype) D.39340;
      p.647 = newbuf + D.39347;
      p = p.647;
      buffer = newbuf;
    }
    <D.39374>:
    p.635 = p;
    mono_metadata_encode_value (slen, p.635, &p);
    p.635 = p;
    memcpy (p.635, str, slen);
    p.635 = p;
    p.648 = p.635 + slen;
    p = p.648;
    monoeg_g_free (str);
    goto <D.25159>;
  }
  <D.25174>:
  {
    char * str;
    guint32 slen;

    if (arg == 0B) goto <D.39378>; else goto <D.39379>;
    <D.39378>:
    p.635 = p;
    p.649 = p.635;
    p.650 = p.649 + 1;
    p = p.650;
    *p.649 = 255;
    goto <D.25159>;
    <D.39379>:
    handle_type:
    D.39382 = mono_reflection_type_get_handle (arg);
    str = type_get_qualified_name (D.39382, 0B);
    slen = strlen (str);
    p.635 = p;
    p.636 = (int) p.635;
    buffer.637 = buffer;
    buffer.638 = (int) buffer.637;
    D.39340 = p.636 - buffer.638;
    D.39370 = (unsigned int) D.39340;
    D.39383 = D.39370 + slen;
    D.39384 = D.39383 + 10;
    D.39343 = *buflen;
    if (D.39384 >= D.39343) goto <D.39385>; else goto <D.39386>;
    <D.39385>:
    {
      char * newbuf;

      D.39343 = *buflen;
      D.39346 = D.39343 * 2;
      *buflen = D.39346;
      D.39343 = *buflen;
      D.39387 = D.39343 + slen;
      *buflen = D.39387;
      buffer.637 = buffer;
      D.39343 = *buflen;
      newbuf = monoeg_realloc (buffer.637, D.39343);
      p.635 = p;
      p.636 = (int) p.635;
      buffer.637 = buffer;
      buffer.638 = (int) buffer.637;
      D.39340 = p.636 - buffer.638;
      D.39347 = (sizetype) D.39340;
      p.651 = newbuf + D.39347;
      p = p.651;
      buffer = newbuf;
    }
    <D.39386>:
    p.635 = p;
    mono_metadata_encode_value (slen, p.635, &p);
    p.635 = p;
    memcpy (p.635, str, slen);
    p.635 = p;
    p.652 = p.635 + slen;
    p = p.652;
    monoeg_g_free (str);
    goto <D.25159>;
  }
  <D.25179>:
  {
    int len;
    int i;
    struct MonoClass * eclass;
    struct MonoClass * arg_eclass;

    if (arg == 0B) goto <D.39390>; else goto <D.39391>;
    <D.39390>:
    p.635 = p;
    p.653 = p.635;
    p.654 = p.653 + 1;
    p = p.654;
    *p.653 = 255;
    p.635 = p;
    p.655 = p.635;
    p.656 = p.655 + 1;
    p = p.656;
    *p.655 = 255;
    p.635 = p;
    p.657 = p.635;
    p.658 = p.657 + 1;
    p = p.658;
    *p.657 = 255;
    p.635 = p;
    p.659 = p.635;
    p.660 = p.659 + 1;
    p = p.660;
    *p.659 = 255;
    goto <D.25159>;
    <D.39391>:
    D.39400 = mono_array_length (arg);
    len = (int) D.39400;
    p.635 = p;
    p.661 = p.635;
    p.662 = p.661 + 1;
    p = p.662;
    D.39403 = (char) len;
    *p.661 = D.39403;
    p.635 = p;
    p.663 = p.635;
    p.664 = p.663 + 1;
    p = p.664;
    D.39406 = len >> 8;
    D.39407 = (char) D.39406;
    *p.663 = D.39407;
    p.635 = p;
    p.665 = p.635;
    p.666 = p.665 + 1;
    p = p.666;
    D.39410 = len >> 16;
    D.39411 = (char) D.39410;
    *p.665 = D.39411;
    p.635 = p;
    p.667 = p.635;
    p.668 = p.667 + 1;
    p = p.668;
    len.669 = (unsigned int) len;
    D.39415 = len.669 >> 24;
    D.39416 = (char) D.39415;
    *p.667 = D.39416;
    p.635 = p;
    *retp = p.635;
    buffer.637 = buffer;
    *retbuffer = buffer.637;
    eclass = type->data.klass;
    D.39417 = arg->vtable;
    D.39418 = D.39417->klass;
    arg_eclass = D.39418->element_class;
    if (eclass == 0B) goto <D.39419>; else goto <D.39420>;
    <D.39419>:
    eclass = mono_defaults.object_class;
    <D.39420>:
    D.39423 = mono_defaults.object_class;
    if (D.39423 == eclass) goto <D.39424>; else goto <D.39421>;
    <D.39424>:
    D.39425 = BIT_FIELD_REF <*arg_eclass, 8, 160>;
    D.39426 = D.39425 & 8;
    if (D.39426 != 0) goto <D.39427>; else goto <D.39421>;
    <D.39427>:
    {
      char * elptr;
      int elsize;

      elptr = mono_array_addr_with_size (arg, 1, 0);
      elsize = mono_class_array_element_size (arg_eclass);
      i = 0;
      goto <D.25187>;
      <D.25186>:
      buffer.637 = buffer;
      p.635 = p;
      D.39428 = &arg_eclass->byval_arg;
      encode_cattr_value (assembly, buffer.637, p.635, &buffer, &p, buflen, D.39428, 0B, elptr);
      elsize.670 = (sizetype) elsize;
      elptr = elptr + elsize.670;
      i = i + 1;
      <D.25187>:
      if (i < len) goto <D.25186>; else goto <D.25188>;
      <D.25188>:
    }
    goto <D.39422>;
    <D.39421>:
    D.39431 = BIT_FIELD_REF <*eclass, 8, 160>;
    D.39432 = D.39431 & 8;
    if (D.39432 != 0) goto <D.39433>; else goto <D.39430>;
    <D.39433>:
    D.39425 = BIT_FIELD_REF <*arg_eclass, 8, 160>;
    D.39426 = D.39425 & 8;
    if (D.39426 != 0) goto <D.39434>; else goto <D.39430>;
    <D.39434>:
    {
      char * elptr;
      int elsize;

      elptr = mono_array_addr_with_size (arg, 1, 0);
      elsize = mono_class_array_element_size (eclass);
      i = 0;
      goto <D.25192>;
      <D.25191>:
      buffer.637 = buffer;
      p.635 = p;
      D.39435 = &eclass->byval_arg;
      encode_cattr_value (assembly, buffer.637, p.635, &buffer, &p, buflen, D.39435, 0B, elptr);
      elsize.671 = (sizetype) elsize;
      elptr = elptr + elsize.671;
      i = i + 1;
      <D.25192>:
      if (i < len) goto <D.25191>; else goto <D.25193>;
      <D.25193>:
    }
    goto <D.25196>;
    <D.39430>:
    i = 0;
    goto <D.25195>;
    <D.25194>:
    buffer.637 = buffer;
    p.635 = p;
    D.39435 = &eclass->byval_arg;
    i.672 = (unsigned int) i;
    D.39438 = mono_array_addr_with_size (arg, 4, i.672);
    D.39439 = MEM[(struct MonoObject * *)D.39438];
    encode_cattr_value (assembly, buffer.637, p.635, &buffer, &p, buflen, D.39435, D.39439, 0B);
    i = i + 1;
    <D.25195>:
    if (i < len) goto <D.25194>; else goto <D.25196>;
    <D.25196>:
    <D.39422>:
    goto <D.25159>;
  }
  <D.25197>:
  {
    struct MonoClass * klass;
    char * str;
    guint32 slen;

    if (arg == 0B) goto <D.39440>; else goto <D.39441>;
    <D.39440>:
    p.635 = p;
    p.673 = p.635;
    p.674 = p.673 + 1;
    p = p.674;
    *p.673 = 14;
    p.635 = p;
    p.675 = p.635;
    p.676 = p.675 + 1;
    p = p.676;
    *p.675 = 255;
    goto <D.25159>;
    <D.39441>:
    D.39417 = arg->vtable;
    klass = D.39417->klass;
    D.39446 = mono_defaults.systemtype_class;
    D.39447 = mono_object_isinst (arg, D.39446);
    if (D.39447 != 0B) goto <D.39448>; else goto <D.39449>;
    <D.39448>:
    p.635 = p;
    p.677 = p.635;
    p.678 = p.677 + 1;
    p = p.678;
    *p.677 = 80;
    goto handle_type;
    <D.39449>:
    D.39452 = BIT_FIELD_REF <*klass, 8, 160>;
    D.39453 = D.39452 & 16;
    if (D.39453 != 0) goto <D.39454>; else goto <D.39455>;
    <D.39454>:
    p.635 = p;
    p.679 = p.635;
    p.680 = p.679 + 1;
    p = p.680;
    *p.679 = 85;
    goto <D.39458>;
    <D.39455>:
    D.39459 = mono_defaults.string_class;
    if (D.39459 == klass) goto <D.39460>; else goto <D.39461>;
    <D.39460>:
    simple_type = 14;
    p.635 = p;
    p.681 = p.635;
    p.682 = p.681 + 1;
    p = p.682;
    *p.681 = 14;
    goto handle_enum;
    <D.39461>:
    D.39464 = klass->rank;
    if (D.39464 == 1) goto <D.39465>; else goto <D.39466>;
    <D.39465>:
    p.635 = p;
    p.683 = p.635;
    p.684 = p.683 + 1;
    p = p.684;
    *p.683 = 29;
    D.39469 = klass->element_class;
    D.39470 = D.39469->byval_arg.type;
    if (D.39470 == 28) goto <D.39471>; else goto <D.39472>;
    <D.39471>:
    p.635 = p;
    p.685 = p.635;
    p.686 = p.685 + 1;
    p = p.686;
    *p.685 = 81;
    goto <D.39475>;
    <D.39472>:
    p.635 = p;
    p.687 = p.635;
    p.688 = p.687 + 1;
    p = p.688;
    D.39469 = klass->element_class;
    D.39470 = D.39469->byval_arg.type;
    *p.687 = D.39470;
    <D.39475>:
    buffer.637 = buffer;
    p.635 = p;
    D.39478 = &klass->byval_arg;
    encode_cattr_value (assembly, buffer.637, p.635, &buffer, &p, buflen, D.39478, arg, 0B);
    goto <D.25159>;
    <D.39466>:
    D.39479 = klass->byval_arg.type;
    D.39480 = D.39479 + 254;
    if (D.39480 <= 11) goto <D.39481>; else goto <D.39482>;
    <D.39481>:
    p.635 = p;
    p.689 = p.635;
    p.690 = p.689 + 1;
    p = p.690;
    D.39479 = klass->byval_arg.type;
    simple_type = (MonoTypeEnum) D.39479;
    D.39485 = (char) simple_type;
    *p.689 = D.39485;
    goto handle_enum;
    <D.39482>:
    monoeg_g_log (0B, 4, "unhandled type in custom attr");
    <D.25201>:
    goto <D.25201>;
    <D.39458>:
    D.39486 = mono_class_get_type (klass);
    str = type_get_qualified_name (D.39486, 0B);
    slen = strlen (str);
    p.635 = p;
    p.636 = (int) p.635;
    buffer.637 = buffer;
    buffer.638 = (int) buffer.637;
    D.39340 = p.636 - buffer.638;
    D.39370 = (unsigned int) D.39340;
    D.39487 = D.39370 + slen;
    D.39488 = D.39487 + 10;
    D.39343 = *buflen;
    if (D.39488 >= D.39343) goto <D.39489>; else goto <D.39490>;
    <D.39489>:
    {
      char * newbuf;

      D.39343 = *buflen;
      D.39346 = D.39343 * 2;
      *buflen = D.39346;
      D.39343 = *buflen;
      D.39491 = D.39343 + slen;
      *buflen = D.39491;
      buffer.637 = buffer;
      D.39343 = *buflen;
      newbuf = monoeg_realloc (buffer.637, D.39343);
      p.635 = p;
      p.636 = (int) p.635;
      buffer.637 = buffer;
      buffer.638 = (int) buffer.637;
      D.39340 = p.636 - buffer.638;
      D.39347 = (sizetype) D.39340;
      p.691 = newbuf + D.39347;
      p = p.691;
      buffer = newbuf;
    }
    <D.39490>:
    p.635 = p;
    mono_metadata_encode_value (slen, p.635, &p);
    p.635 = p;
    memcpy (p.635, str, slen);
    p.635 = p;
    p.692 = p.635 + slen;
    p = p.692;
    monoeg_g_free (str);
    D.39494 = mono_class_enum_basetype (klass);
    D.39495 = D.39494->type;
    simple_type = (MonoTypeEnum) D.39495;
    goto handle_enum;
  }
  <D.25203>:
  monoeg_g_log (0B, 4, "type 0x%02x not yet supported in custom attr encoder", simple_type);
  <D.25204>:
  goto <D.25204>;
  <D.25159>:
  p.635 = p;
  *retp = p.635;
  buffer.637 = buffer;
  *retbuffer = buffer.637;
}


swap_with_size (char * dest, const char * val, int len, int nelem)
{
  int D.39496;
  unsigned int D.39497;

  D.39496 = len * nelem;
  D.39497 = (unsigned int) D.39496;
  memcpy (dest, val, D.39497);
}


type_get_qualified_name (struct MonoType * type, struct MonoAssembly * ass)
{
  char * D.39500;
  struct MonoImage * D.39501;
  unsigned char D.39504;
  struct MonoGenericClass * D.39508;
  struct MonoGenericContainer * D.39510;
  struct MonoClass * klass;
  struct MonoAssembly * ta;

  klass = mono_class_from_mono_type (type);
  if (klass == 0B) goto <D.39498>; else goto <D.39499>;
  <D.39498>:
  D.39500 = mono_type_get_name_full (type, 1);
  return D.39500;
  <D.39499>:
  D.39501 = klass->image;
  ta = D.39501->assembly;
  D.39504 = ta->dynamic;
  if (D.39504 != 0) goto <D.39502>; else goto <D.39505>;
  <D.39505>:
  if (ta == ass) goto <D.39502>; else goto <D.39503>;
  <D.39502>:
  D.39508 = klass->generic_class;
  if (D.39508 != 0B) goto <D.39506>; else goto <D.39509>;
  <D.39509>:
  D.39510 = klass->generic_container;
  if (D.39510 != 0B) goto <D.39506>; else goto <D.39507>;
  <D.39506>:
  D.39500 = mono_type_get_name_full (type, 2);
  return D.39500;
  <D.39507>:
  D.39500 = mono_type_get_name_full (type, 1);
  return D.39500;
  <D.39503>:
  D.39500 = mono_type_get_name_full (type, 3);
  return D.39500;
}


get_prop_name_and_type (struct MonoObject * prop, char * * name, struct MonoType * * type)
{
  struct MonoVTable * D.39512;
  int D.24971;
  int iftmp.693;
  int D.24970;
  const char[16] * D.39516;
  unsigned char D.39517;
  int D.39518;
  unsigned char D.39519;
  int D.39520;
  _Bool D.39521;
  _Bool D.39522;
  _Bool D.39523;
  const unsigned char * D.39526;
  unsigned char D.39527;
  int D.39528;
  const unsigned char * D.39529;
  unsigned char D.39530;
  int D.39531;
  _Bool D.39532;
  _Bool D.39533;
  const unsigned char * D.39536;
  unsigned char D.39537;
  int D.39538;
  const unsigned char * D.39539;
  unsigned char D.39540;
  int D.39541;
  _Bool D.39542;
  _Bool D.39543;
  const unsigned char * D.39546;
  unsigned char D.39547;
  int D.39548;
  const unsigned char * D.39549;
  unsigned char D.39550;
  int D.39551;
  const char * D.39553;
  struct MonoString * D.39556;
  char * D.39557;
  struct MonoObject * D.39558;
  struct MonoType * D.39559;
  struct MonoProperty * D.39561;
  const char * D.39562;
  gchar * D.39563;
  struct MonoMethod * D.39564;
  struct MonoMethodSignature * D.39567;
  struct MonoType * D.39568;
  struct MonoMethod * D.39570;
  struct MonoMethodSignature * D.39571;
  struct MonoMethodSignature * D.39572;
  short unsigned int D.39573;
  int D.39574;
  int D.39575;
  struct MonoType * D.39576;
  struct MonoClass * klass;

  D.39512 = prop->vtable;
  klass = D.39512->klass;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.39516 = "PropertyBuilder";
      D.39517 = MEM[(const unsigned char *)D.39516];
      D.39518 = (int) D.39517;
      D.39519 = *__s2;
      D.39520 = (int) D.39519;
      __result = D.39518 - D.39520;
      {
        D.39521 = __s2_len != 0;
        D.39522 = __result == 0;
        D.39523 = D.39521 & D.39522;
        if (D.39523 != 0) goto <D.39524>; else goto <D.39525>;
        <D.39524>:
        D.39526 = &MEM[(void *)"PropertyBuilder" + 1B];
        D.39527 = *D.39526;
        D.39528 = (int) D.39527;
        D.39529 = __s2 + 1;
        D.39530 = *D.39529;
        D.39531 = (int) D.39530;
        __result = D.39528 - D.39531;
        D.39532 = __s2_len > 1;
        D.39522 = __result == 0;
        D.39533 = D.39532 & D.39522;
        if (D.39533 != 0) goto <D.39534>; else goto <D.39535>;
        <D.39534>:
        D.39536 = &MEM[(void *)"PropertyBuilder" + 2B];
        D.39537 = *D.39536;
        D.39538 = (int) D.39537;
        D.39539 = __s2 + 2;
        D.39540 = *D.39539;
        D.39541 = (int) D.39540;
        __result = D.39538 - D.39541;
        D.39542 = __s2_len > 2;
        D.39522 = __result == 0;
        D.39543 = D.39542 & D.39522;
        if (D.39543 != 0) goto <D.39544>; else goto <D.39545>;
        <D.39544>:
        D.39546 = &MEM[(void *)"PropertyBuilder" + 3B];
        D.39547 = *D.39546;
        D.39548 = (int) D.39547;
        D.39549 = __s2 + 3;
        D.39550 = *D.39549;
        D.39551 = (int) D.39550;
        __result = D.39548 - D.39551;
        <D.39545>:
        <D.39535>:
        <D.39525>:
      }
      D.24970 = __result;
    }
    iftmp.693 = -D.24970;
    goto <D.39552>;
    <D.39515>:
    D.39553 = klass->name;
    iftmp.693 = __builtin_strcmp (D.39553, "PropertyBuilder");
    <D.39552>:
    D.24971 = iftmp.693;
  }
  if (D.24971 == 0) goto <D.39554>; else goto <D.39555>;
  <D.39554>:
  {
    struct MonoReflectionPropertyBuilder * pb;

    pb = prop;
    D.39556 = pb->name;
    D.39557 = mono_string_to_utf8 (D.39556);
    *name = D.39557;
    D.39558 = pb->type;
    D.39559 = mono_reflection_type_get_handle (D.39558);
    *type = D.39559;
  }
  goto <D.39560>;
  <D.39555>:
  {
    struct MonoReflectionProperty * p;

    p = prop;
    D.39561 = p->property;
    D.39562 = D.39561->name;
    D.39563 = monoeg_strdup (D.39562);
    *name = D.39563;
    D.39561 = p->property;
    D.39564 = D.39561->get;
    if (D.39564 != 0B) goto <D.39565>; else goto <D.39566>;
    <D.39565>:
    D.39561 = p->property;
    D.39564 = D.39561->get;
    D.39567 = mono_method_signature (D.39564);
    D.39568 = D.39567->ret;
    *type = D.39568;
    goto <D.39569>;
    <D.39566>:
    D.39561 = p->property;
    D.39570 = D.39561->set;
    D.39571 = mono_method_signature (D.39570);
    D.39561 = p->property;
    D.39570 = D.39561->set;
    D.39572 = mono_method_signature (D.39570);
    D.39573 = D.39572->param_count;
    D.39574 = (int) D.39573;
    D.39575 = D.39574 + -1;
    D.39576 = D.39571->params[D.39575];
    *type = D.39576;
    <D.39569>:
  }
  <D.39560>:
}


get_field_name_and_type (struct MonoObject * field, char * * name, struct MonoType * * type)
{
  struct MonoVTable * D.39577;
  int D.24988;
  int iftmp.694;
  int D.24987;
  const char[13] * D.39581;
  unsigned char D.39582;
  int D.39583;
  unsigned char D.39584;
  int D.39585;
  _Bool D.39586;
  _Bool D.39587;
  _Bool D.39588;
  const unsigned char * D.39591;
  unsigned char D.39592;
  int D.39593;
  const unsigned char * D.39594;
  unsigned char D.39595;
  int D.39596;
  _Bool D.39597;
  _Bool D.39598;
  const unsigned char * D.39601;
  unsigned char D.39602;
  int D.39603;
  const unsigned char * D.39604;
  unsigned char D.39605;
  int D.39606;
  _Bool D.39607;
  _Bool D.39608;
  const unsigned char * D.39611;
  unsigned char D.39612;
  int D.39613;
  const unsigned char * D.39614;
  unsigned char D.39615;
  int D.39616;
  const char * D.39618;
  struct MonoString * D.39621;
  char * D.39622;
  struct MonoObject * D.39623;
  struct MonoType * D.39624;
  struct MonoClassField * D.39626;
  const char * D.39627;
  gchar * D.39628;
  struct MonoType * D.39629;
  struct MonoClass * klass;

  D.39577 = field->vtable;
  klass = D.39577->klass;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = klass->name;
      D.39581 = "FieldBuilder";
      D.39582 = MEM[(const unsigned char *)D.39581];
      D.39583 = (int) D.39582;
      D.39584 = *__s2;
      D.39585 = (int) D.39584;
      __result = D.39583 - D.39585;
      {
        D.39586 = __s2_len != 0;
        D.39587 = __result == 0;
        D.39588 = D.39586 & D.39587;
        if (D.39588 != 0) goto <D.39589>; else goto <D.39590>;
        <D.39589>:
        D.39591 = &MEM[(void *)"FieldBuilder" + 1B];
        D.39592 = *D.39591;
        D.39593 = (int) D.39592;
        D.39594 = __s2 + 1;
        D.39595 = *D.39594;
        D.39596 = (int) D.39595;
        __result = D.39593 - D.39596;
        D.39597 = __s2_len > 1;
        D.39587 = __result == 0;
        D.39598 = D.39597 & D.39587;
        if (D.39598 != 0) goto <D.39599>; else goto <D.39600>;
        <D.39599>:
        D.39601 = &MEM[(void *)"FieldBuilder" + 2B];
        D.39602 = *D.39601;
        D.39603 = (int) D.39602;
        D.39604 = __s2 + 2;
        D.39605 = *D.39604;
        D.39606 = (int) D.39605;
        __result = D.39603 - D.39606;
        D.39607 = __s2_len > 2;
        D.39587 = __result == 0;
        D.39608 = D.39607 & D.39587;
        if (D.39608 != 0) goto <D.39609>; else goto <D.39610>;
        <D.39609>:
        D.39611 = &MEM[(void *)"FieldBuilder" + 3B];
        D.39612 = *D.39611;
        D.39613 = (int) D.39612;
        D.39614 = __s2 + 3;
        D.39615 = *D.39614;
        D.39616 = (int) D.39615;
        __result = D.39613 - D.39616;
        <D.39610>:
        <D.39600>:
        <D.39590>:
      }
      D.24987 = __result;
    }
    iftmp.694 = -D.24987;
    goto <D.39617>;
    <D.39580>:
    D.39618 = klass->name;
    iftmp.694 = __builtin_strcmp (D.39618, "FieldBuilder");
    <D.39617>:
    D.24988 = iftmp.694;
  }
  if (D.24988 == 0) goto <D.39619>; else goto <D.39620>;
  <D.39619>:
  {
    struct MonoReflectionFieldBuilder * fb;

    fb = field;
    D.39621 = fb->name;
    D.39622 = mono_string_to_utf8 (D.39621);
    *name = D.39622;
    D.39623 = fb->type;
    D.39624 = mono_reflection_type_get_handle (D.39623);
    *type = D.39624;
  }
  goto <D.39625>;
  <D.39620>:
  {
    struct MonoReflectionField * f;

    f = field;
    D.39626 = f->field;
    D.39627 = mono_field_get_name (D.39626);
    D.39628 = monoeg_strdup (D.39627);
    *name = D.39628;
    D.39626 = f->field;
    D.39629 = D.39626->type;
    *type = D.39629;
  }
  <D.39625>:
}


encode_named_val (struct MonoReflectionAssembly * assembly, char * buffer, char * p, char * * retbuffer, char * * retp, guint32 * buflen, struct MonoType * type, char * name, struct MonoObject * value)
{
  unsigned char D.39632;
  struct MonoClass * D.39634;
  unsigned char D.39635;
  unsigned char D.39636;
  unsigned int D.39638;
  struct MonoType * D.39643;
  unsigned int D.39644;
  unsigned int D.39645;
  unsigned int len.695;
  unsigned int D.39647;
  char * p.696;
  int p.697;
  char * buffer.698;
  int buffer.699;
  int D.39652;
  int D.39653;
  int D.39654;
  unsigned int D.39655;
  unsigned int D.39656;
  unsigned int D.39659;
  unsigned int len.700;
  unsigned int D.39661;
  sizetype D.39662;
  char * p.701;
  unsigned int D.39664;
  unsigned int len.702;
  sizetype len.703;
  char * p.704;
  struct MonoAssembly * D.39668;
  int len;

  D.39632 = type->type;
  if (D.39632 == 17) goto <D.39633>; else goto <D.39630>;
  <D.39633>:
  D.39634 = type->data.klass;
  D.39635 = BIT_FIELD_REF <*D.39634, 8, 160>;
  D.39636 = D.39635 & 16;
  if (D.39636 != 0) goto <D.39637>; else goto <D.39630>;
  <D.39637>:
  {
    char * str;

    str = type_get_qualified_name (type, 0B);
    D.39638 = strlen (str);
    len = (int) D.39638;
    monoeg_g_free (str);
  }
  goto <D.39631>;
  <D.39630>:
  D.39632 = type->type;
  if (D.39632 == 29) goto <D.39641>; else goto <D.39639>;
  <D.39641>:
  D.39634 = type->data.klass;
  D.39635 = BIT_FIELD_REF <*D.39634, 8, 160>;
  D.39636 = D.39635 & 16;
  if (D.39636 != 0) goto <D.39642>; else goto <D.39639>;
  <D.39642>:
  {
    char * str;

    D.39634 = type->data.klass;
    D.39643 = &D.39634->byval_arg;
    str = type_get_qualified_name (D.39643, 0B);
    D.39644 = strlen (str);
    len = (int) D.39644;
    monoeg_g_free (str);
  }
  goto <D.39640>;
  <D.39639>:
  len = 0;
  <D.39640>:
  <D.39631>:
  D.39645 = strlen (name);
  len.695 = (unsigned int) len;
  D.39647 = D.39645 + len.695;
  len = (int) D.39647;
  p.696 = p;
  p.697 = (int) p.696;
  buffer.698 = buffer;
  buffer.699 = (int) buffer.698;
  D.39652 = p.697 - buffer.699;
  D.39653 = D.39652 + 20;
  D.39654 = D.39653 + len;
  D.39655 = (unsigned int) D.39654;
  D.39656 = *buflen;
  if (D.39655 >= D.39656) goto <D.39657>; else goto <D.39658>;
  <D.39657>:
  {
    char * newbuf;

    D.39656 = *buflen;
    D.39659 = D.39656 * 2;
    *buflen = D.39659;
    D.39656 = *buflen;
    len.700 = (unsigned int) len;
    D.39661 = D.39656 + len.700;
    *buflen = D.39661;
    buffer.698 = buffer;
    D.39656 = *buflen;
    newbuf = monoeg_realloc (buffer.698, D.39656);
    p.696 = p;
    p.697 = (int) p.696;
    buffer.698 = buffer;
    buffer.699 = (int) buffer.698;
    D.39652 = p.697 - buffer.699;
    D.39662 = (sizetype) D.39652;
    p.701 = newbuf + D.39662;
    p = p.701;
    buffer = newbuf;
  }
  <D.39658>:
  p.696 = p;
  encode_field_or_prop_type (type, p.696, &p);
  D.39664 = strlen (name);
  len = (int) D.39664;
  len.702 = (unsigned int) len;
  p.696 = p;
  mono_metadata_encode_value (len.702, p.696, &p);
  p.696 = p;
  len.695 = (unsigned int) len;
  memcpy (p.696, name, len.695);
  p.696 = p;
  len.703 = (sizetype) len;
  p.704 = p.696 + len.703;
  p = p.704;
  D.39668 = assembly->assembly;
  buffer.698 = buffer;
  p.696 = p;
  encode_cattr_value (D.39668, buffer.698, p.696, &buffer, &p, buflen, type, value, 0B);
  p.696 = p;
  *retp = p.696;
  buffer.698 = buffer;
  *retbuffer = buffer.698;
}


encode_field_or_prop_type (struct MonoType * type, char * p, char * * retp)
{
  unsigned char D.39671;
  struct MonoClass * D.39673;
  unsigned char D.39674;
  unsigned char D.39675;
  unsigned int D.39677;
  char * p.705;
  char * p.706;
  char * p.707;
  unsigned int slen.708;
  unsigned int slen.709;
  sizetype slen.710;
  char * p.711;
  char * p.712;
  char * p.713;
  char * p.714;
  char * p.715;
  unsigned int D.39695;
  struct MonoType * D.39698;

  D.39671 = type->type;
  if (D.39671 == 17) goto <D.39672>; else goto <D.39669>;
  <D.39672>:
  D.39673 = type->data.klass;
  D.39674 = BIT_FIELD_REF <*D.39673, 8, 160>;
  D.39675 = D.39674 & 16;
  if (D.39675 != 0) goto <D.39676>; else goto <D.39669>;
  <D.39676>:
  {
    char * str;
    int slen;

    str = type_get_qualified_name (type, 0B);
    D.39677 = strlen (str);
    slen = (int) D.39677;
    p.705 = p;
    p.706 = p.705;
    p.707 = p.706 + 1;
    p = p.707;
    *p.706 = 85;
    slen.708 = (unsigned int) slen;
    p.705 = p;
    mono_metadata_encode_value (slen.708, p.705, &p);
    p.705 = p;
    slen.709 = (unsigned int) slen;
    memcpy (p.705, str, slen.709);
    p.705 = p;
    slen.710 = (sizetype) slen;
    p.711 = p.705 + slen.710;
    p = p.711;
    monoeg_g_free (str);
  }
  goto <D.39670>;
  <D.39669>:
  D.39671 = type->type;
  if (D.39671 == 28) goto <D.39685>; else goto <D.39686>;
  <D.39685>:
  p.705 = p;
  p.712 = p.705;
  p.713 = p.712 + 1;
  p = p.713;
  *p.712 = 81;
  goto <D.39689>;
  <D.39686>:
  D.39671 = type->type;
  if (D.39671 == 18) goto <D.39690>; else goto <D.39691>;
  <D.39690>:
  p.705 = p;
  p.714 = p.705;
  p.715 = p.714 + 1;
  p = p.715;
  *p.714 = 80;
  goto <D.39694>;
  <D.39691>:
  D.39671 = type->type;
  D.39695 = (unsigned int) D.39671;
  p.705 = p;
  mono_metadata_encode_value (D.39695, p.705, &p);
  D.39671 = type->type;
  if (D.39671 == 29) goto <D.39696>; else goto <D.39697>;
  <D.39696>:
  D.39673 = type->data.klass;
  D.39698 = &D.39673->byval_arg;
  p.705 = p;
  encode_field_or_prop_type (D.39698, p.705, &p);
  <D.39697>:
  <D.39694>:
  <D.39689>:
  <D.39670>:
  p.705 = p;
  *retp = p.705;
}


mono_reflection_setup_internal_class (struct MonoReflectionTypeBuilder * tb)
{
  struct MonoObject * D.39699;
  struct MonoReflectionType * D.39700;
  int D.25290;
  int iftmp.716;
  int D.25289;
  struct MonoVTable * D.39706;
  struct MonoClass * D.39707;
  const char[12] * D.39708;
  unsigned char D.39709;
  int D.39710;
  unsigned char D.39711;
  int D.39712;
  _Bool D.39713;
  _Bool D.39714;
  _Bool D.39715;
  const unsigned char * D.39718;
  unsigned char D.39719;
  int D.39720;
  const unsigned char * D.39721;
  unsigned char D.39722;
  int D.39723;
  _Bool D.39724;
  _Bool D.39725;
  const unsigned char * D.39728;
  unsigned char D.39729;
  int D.39730;
  const unsigned char * D.39731;
  unsigned char D.39732;
  int D.39733;
  _Bool D.39734;
  _Bool D.39735;
  const unsigned char * D.39738;
  unsigned char D.39739;
  int D.39740;
  const unsigned char * D.39741;
  unsigned char D.39742;
  int D.39743;
  const char * D.39745;
  struct MonoType * D.39748;
  struct MonoType * D.39750;
  struct MonoType * D.39752;
  struct MonoReflectionModuleBuilder * D.39755;
  struct MonoDynamicImage * D.39756;
  struct MonoImage * D.39757;
  struct MonoImage * D.39758;
  struct MonoString * D.39759;
  char * D.39760;
  int D.39761;
  struct MonoString * D.39763;
  char * D.39764;
  int D.39765;
  unsigned int D.39767;
  unsigned int D.39768;
  unsigned int D.39769;
  void * D.39770;
  struct MonoReflectionType * D.39773;
  const char * D.39776;
  const char * D.39777;
  void * D.39779;
  _Bool D.39780;
  long int D.39781;
  long int D.39782;
  struct MonoGHashTable * D.39785;
  void * D.39786;
  int D.25300;
  int iftmp.717;
  int D.25299;
  const char[7] * D.39793;
  unsigned char D.39794;
  int D.39795;
  unsigned char D.39796;
  int D.39797;
  _Bool D.39798;
  _Bool D.39799;
  _Bool D.39800;
  const unsigned char * D.39803;
  unsigned char D.39804;
  int D.39805;
  const unsigned char * D.39806;
  unsigned char D.39807;
  int D.39808;
  _Bool D.39809;
  _Bool D.39810;
  const unsigned char * D.39813;
  unsigned char D.39814;
  int D.39815;
  const unsigned char * D.39816;
  unsigned char D.39817;
  int D.39818;
  _Bool D.39819;
  _Bool D.39820;
  const unsigned char * D.39823;
  unsigned char D.39824;
  int D.39825;
  const unsigned char * D.39826;
  unsigned char D.39827;
  int D.39828;
  int D.25309;
  int iftmp.718;
  int D.25308;
  const char[7] * D.39835;
  unsigned char D.39836;
  int D.39837;
  unsigned char D.39838;
  int D.39839;
  _Bool D.39840;
  _Bool D.39841;
  _Bool D.39842;
  const unsigned char * D.39845;
  unsigned char D.39846;
  int D.39847;
  const unsigned char * D.39848;
  unsigned char D.39849;
  int D.39850;
  _Bool D.39851;
  _Bool D.39852;
  const unsigned char * D.39855;
  unsigned char D.39856;
  int D.39857;
  const unsigned char * D.39858;
  unsigned char D.39859;
  int D.39860;
  _Bool D.39861;
  _Bool D.39862;
  const unsigned char * D.39865;
  unsigned char D.39866;
  int D.39867;
  const unsigned char * D.39868;
  unsigned char D.39869;
  int D.39870;
  struct MonoClass * D.39874;
  int D.25319;
  int iftmp.719;
  int D.25318;
  const char[10] * D.39882;
  unsigned char D.39883;
  int D.39884;
  unsigned char D.39885;
  int D.39886;
  _Bool D.39887;
  _Bool D.39888;
  _Bool D.39889;
  const unsigned char * D.39892;
  unsigned char D.39893;
  int D.39894;
  const unsigned char * D.39895;
  unsigned char D.39896;
  int D.39897;
  _Bool D.39898;
  _Bool D.39899;
  const unsigned char * D.39902;
  unsigned char D.39903;
  int D.39904;
  const unsigned char * D.39905;
  unsigned char D.39906;
  int D.39907;
  _Bool D.39908;
  _Bool D.39909;
  const unsigned char * D.39912;
  unsigned char D.39913;
  int D.39914;
  const unsigned char * D.39915;
  unsigned char D.39916;
  int D.39917;
  int D.25328;
  int iftmp.720;
  int D.25327;
  unsigned char D.39923;
  int D.39924;
  _Bool D.39925;
  _Bool D.39926;
  _Bool D.39927;
  const unsigned char * D.39930;
  unsigned char D.39931;
  int D.39932;
  _Bool D.39933;
  _Bool D.39934;
  const unsigned char * D.39937;
  unsigned char D.39938;
  int D.39939;
  _Bool D.39940;
  _Bool D.39941;
  const unsigned char * D.39944;
  unsigned char D.39945;
  int D.39946;
  int D.25337;
  int iftmp.721;
  int D.25336;
  unsigned char D.39951;
  int D.39952;
  _Bool D.39953;
  _Bool D.39954;
  _Bool D.39955;
  const unsigned char * D.39958;
  unsigned char D.39959;
  int D.39960;
  _Bool D.39961;
  _Bool D.39962;
  const unsigned char * D.39965;
  unsigned char D.39966;
  int D.39967;
  _Bool D.39968;
  _Bool D.39969;
  const unsigned char * D.39972;
  unsigned char D.39973;
  int D.39974;
  int D.25346;
  int iftmp.722;
  int D.25345;
  unsigned char D.39980;
  int D.39981;
  _Bool D.39982;
  _Bool D.39983;
  _Bool D.39984;
  const unsigned char * D.39987;
  unsigned char D.39988;
  int D.39989;
  _Bool D.39990;
  _Bool D.39991;
  const unsigned char * D.39994;
  unsigned char D.39995;
  int D.39996;
  _Bool D.39997;
  _Bool D.39998;
  const unsigned char * D.40001;
  unsigned char D.40002;
  int D.40003;
  int D.25355;
  int iftmp.723;
  int D.25354;
  const char[5] * D.40008;
  unsigned char D.40009;
  int D.40010;
  unsigned char D.40011;
  int D.40012;
  _Bool D.40013;
  _Bool D.40014;
  _Bool D.40015;
  const unsigned char * D.40018;
  unsigned char D.40019;
  int D.40020;
  const unsigned char * D.40021;
  unsigned char D.40022;
  int D.40023;
  _Bool D.40024;
  _Bool D.40025;
  const unsigned char * D.40028;
  unsigned char D.40029;
  int D.40030;
  const unsigned char * D.40031;
  unsigned char D.40032;
  int D.40033;
  _Bool D.40034;
  _Bool D.40035;
  const unsigned char * D.40038;
  unsigned char D.40039;
  int D.40040;
  const unsigned char * D.40041;
  unsigned char D.40042;
  int D.40043;
  int D.25364;
  int iftmp.724;
  int D.25363;
  unsigned char D.40049;
  int D.40050;
  _Bool D.40051;
  _Bool D.40052;
  _Bool D.40053;
  const unsigned char * D.40056;
  unsigned char D.40057;
  int D.40058;
  _Bool D.40059;
  _Bool D.40060;
  const unsigned char * D.40063;
  unsigned char D.40064;
  int D.40065;
  _Bool D.40066;
  _Bool D.40067;
  const unsigned char * D.40070;
  unsigned char D.40071;
  int D.40072;
  struct MonoType * D.40074;
  struct MonoType * D.40077;
  _Bool D.40078;
  long int D.40079;
  long int D.40080;
  struct MonoType * D.40083;
  struct MonoClass * D.40084;
  struct MonoError error;
  struct MonoClass * klass;
  struct MonoClass * parent;
  void failure = <<< error >>>;

  try
    {
      D.39699 = tb->parent;
      D.39700 = mono_reflection_type_resolve_user_types (D.39699);
      tb->parent = D.39700;
      mono_loader_lock ();
      D.39699 = tb->parent;
      if (D.39699 != 0B) goto <D.39701>; else goto <D.39702>;
      <D.39701>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.39699 = tb->parent;
          D.39706 = D.39699->vtable;
          D.39707 = D.39706->klass;
          __s2 = D.39707->name;
          D.39708 = "TypeBuilder";
          D.39709 = MEM[(const unsigned char *)D.39708];
          D.39710 = (int) D.39709;
          D.39711 = *__s2;
          D.39712 = (int) D.39711;
          __result = D.39710 - D.39712;
          {
            D.39713 = __s2_len != 0;
            D.39714 = __result == 0;
            D.39715 = D.39713 & D.39714;
            if (D.39715 != 0) goto <D.39716>; else goto <D.39717>;
            <D.39716>:
            D.39718 = &MEM[(void *)"TypeBuilder" + 1B];
            D.39719 = *D.39718;
            D.39720 = (int) D.39719;
            D.39721 = __s2 + 1;
            D.39722 = *D.39721;
            D.39723 = (int) D.39722;
            __result = D.39720 - D.39723;
            D.39724 = __s2_len > 1;
            D.39714 = __result == 0;
            D.39725 = D.39724 & D.39714;
            if (D.39725 != 0) goto <D.39726>; else goto <D.39727>;
            <D.39726>:
            D.39728 = &MEM[(void *)"TypeBuilder" + 2B];
            D.39729 = *D.39728;
            D.39730 = (int) D.39729;
            D.39731 = __s2 + 2;
            D.39732 = *D.39731;
            D.39733 = (int) D.39732;
            __result = D.39730 - D.39733;
            D.39734 = __s2_len > 2;
            D.39714 = __result == 0;
            D.39735 = D.39734 & D.39714;
            if (D.39735 != 0) goto <D.39736>; else goto <D.39737>;
            <D.39736>:
            D.39738 = &MEM[(void *)"TypeBuilder" + 3B];
            D.39739 = *D.39738;
            D.39740 = (int) D.39739;
            D.39741 = __s2 + 3;
            D.39742 = *D.39741;
            D.39743 = (int) D.39742;
            __result = D.39740 - D.39743;
            <D.39737>:
            <D.39727>:
            <D.39717>:
          }
          D.25289 = __result;
        }
        iftmp.716 = -D.25289;
        goto <D.39744>;
        <D.39705>:
        D.39699 = tb->parent;
        D.39706 = D.39699->vtable;
        D.39707 = D.39706->klass;
        D.39745 = D.39707->name;
        iftmp.716 = __builtin_strcmp (D.39745, "TypeBuilder");
        <D.39744>:
        D.25290 = iftmp.716;
      }
      if (D.25290 == 0) goto <D.39746>; else goto <D.39747>;
      <D.39746>:
      D.39699 = tb->parent;
      D.39748 = mono_reflection_type_get_handle (D.39699);
      parent = D.39748->data.klass;
      goto <D.39749>;
      <D.39747>:
      D.39699 = tb->parent;
      D.39750 = mono_reflection_type_get_handle (D.39699);
      parent = mono_class_from_mono_type (D.39750);
      <D.39749>:
      goto <D.39751>;
      <D.39702>:
      parent = 0B;
      <D.39751>:
      D.39752 = tb->type.type;
      if (D.39752 != 0B) goto <D.39753>; else goto <D.39754>;
      <D.39753>:
      D.39752 = tb->type.type;
      klass = mono_class_from_mono_type (D.39752);
      klass->parent = 0B;
      klass->supertypes = 0B;
      mono_class_setup_parent (klass, parent);
      mono_class_setup_mono_type (klass);
      mono_loader_unlock ();
      return;
      <D.39754>:
      D.39755 = tb->module;
      D.39756 = D.39755->dynamic_image;
      D.39757 = &D.39756->image;
      klass = mono_image_alloc0 (D.39757, 164);
      D.39755 = tb->module;
      D.39756 = D.39755->dynamic_image;
      D.39757 = &D.39756->image;
      klass->image = D.39757;
      klass->inited = 1;
      D.39758 = klass->image;
      D.39759 = tb->name;
      D.39760 = mono_string_to_utf8_image (D.39758, D.39759, &error);
      klass->name = D.39760;
      D.39761 = mono_error_ok (&error);
      if (D.39761 == 0) goto failure; else goto <D.39762>;
      <D.39762>:
      D.39758 = klass->image;
      D.39763 = tb->nspace;
      D.39764 = mono_string_to_utf8_image (D.39758, D.39763, &error);
      klass->name_space = D.39764;
      D.39765 = mono_error_ok (&error);
      if (D.39765 == 0) goto failure; else goto <D.39766>;
      <D.39766>:
      D.39767 = tb->table_idx;
      D.39768 = D.39767 | 33554432;
      klass->type_token = D.39768;
      D.39769 = tb->attrs;
      klass->flags = D.39769;
      mono_profiler_class_event (klass, 0);
      klass->element_class = klass;
      D.39770 = mono_class_get_ref_info (klass);
      if (D.39770 == 0B) goto <D.39771>; else goto <D.39772>;
      <D.39771>:
      mono_class_set_ref_info (klass, tb);
      D.39773 = tb->nesting_type;
      if (D.39773 == 0B) goto <D.39774>; else goto <D.39775>;
      <D.39774>:
      D.39758 = klass->image;
      D.39776 = klass->name_space;
      D.39777 = klass->name;
      D.39767 = tb->table_idx;
      mono_image_add_to_name_cache (D.39758, D.39776, D.39777, D.39767);
      <D.39775>:
      mono_image_append_class_to_reflection_info_set (klass);
      goto <D.39778>;
      <D.39772>:
      D.39779 = mono_class_get_ref_info (klass);
      D.39780 = D.39779 != tb;
      D.39781 = (long int) D.39780;
      D.39782 = __builtin_expect (D.39781, 0);
      if (D.39782 != 0) goto <D.39783>; else goto <D.39784>;
      <D.39783>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9854, "mono_class_get_ref_info (klass) == tb");
      <D.39784>:
      <D.39778>:
      D.39755 = tb->module;
      D.39756 = D.39755->dynamic_image;
      D.39785 = D.39756->tokens;
      D.39767 = tb->table_idx;
      D.39768 = D.39767 | 33554432;
      D.39786 = (void *) D.39768;
      mono_g_hash_table_insert (D.39785, D.39786, tb);
      if (parent != 0B) goto <D.39787>; else goto <D.39788>;
      <D.39787>:
      mono_class_setup_parent (klass, parent);
      goto <D.39789>;
      <D.39788>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = klass->name;
          D.39793 = "Object";
          D.39794 = MEM[(const unsigned char *)D.39793];
          D.39795 = (int) D.39794;
          D.39796 = *__s2;
          D.39797 = (int) D.39796;
          __result = D.39795 - D.39797;
          {
            D.39798 = __s2_len != 0;
            D.39799 = __result == 0;
            D.39800 = D.39798 & D.39799;
            if (D.39800 != 0) goto <D.39801>; else goto <D.39802>;
            <D.39801>:
            D.39803 = &MEM[(void *)"Object" + 1B];
            D.39804 = *D.39803;
            D.39805 = (int) D.39804;
            D.39806 = __s2 + 1;
            D.39807 = *D.39806;
            D.39808 = (int) D.39807;
            __result = D.39805 - D.39808;
            D.39809 = __s2_len > 1;
            D.39799 = __result == 0;
            D.39810 = D.39809 & D.39799;
            if (D.39810 != 0) goto <D.39811>; else goto <D.39812>;
            <D.39811>:
            D.39813 = &MEM[(void *)"Object" + 2B];
            D.39814 = *D.39813;
            D.39815 = (int) D.39814;
            D.39816 = __s2 + 2;
            D.39817 = *D.39816;
            D.39818 = (int) D.39817;
            __result = D.39815 - D.39818;
            D.39819 = __s2_len > 2;
            D.39799 = __result == 0;
            D.39820 = D.39819 & D.39799;
            if (D.39820 != 0) goto <D.39821>; else goto <D.39822>;
            <D.39821>:
            D.39823 = &MEM[(void *)"Object" + 3B];
            D.39824 = *D.39823;
            D.39825 = (int) D.39824;
            D.39826 = __s2 + 3;
            D.39827 = *D.39826;
            D.39828 = (int) D.39827;
            __result = D.39825 - D.39828;
            <D.39822>:
            <D.39812>:
            <D.39802>:
          }
          D.25299 = __result;
        }
        iftmp.717 = -D.25299;
        goto <D.39829>;
        <D.39792>:
        D.39777 = klass->name;
        iftmp.717 = __builtin_strcmp (D.39777, "Object");
        <D.39829>:
        D.25300 = iftmp.717;
      }
      if (D.25300 == 0) goto <D.39830>; else goto <D.39831>;
      <D.39830>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = klass->name_space;
          D.39835 = "System";
          D.39836 = MEM[(const unsigned char *)D.39835];
          D.39837 = (int) D.39836;
          D.39838 = *__s2;
          D.39839 = (int) D.39838;
          __result = D.39837 - D.39839;
          {
            D.39840 = __s2_len != 0;
            D.39841 = __result == 0;
            D.39842 = D.39840 & D.39841;
            if (D.39842 != 0) goto <D.39843>; else goto <D.39844>;
            <D.39843>:
            D.39845 = &MEM[(void *)"System" + 1B];
            D.39846 = *D.39845;
            D.39847 = (int) D.39846;
            D.39848 = __s2 + 1;
            D.39849 = *D.39848;
            D.39850 = (int) D.39849;
            __result = D.39847 - D.39850;
            D.39851 = __s2_len > 1;
            D.39841 = __result == 0;
            D.39852 = D.39851 & D.39841;
            if (D.39852 != 0) goto <D.39853>; else goto <D.39854>;
            <D.39853>:
            D.39855 = &MEM[(void *)"System" + 2B];
            D.39856 = *D.39855;
            D.39857 = (int) D.39856;
            D.39858 = __s2 + 2;
            D.39859 = *D.39858;
            D.39860 = (int) D.39859;
            __result = D.39857 - D.39860;
            D.39861 = __s2_len > 2;
            D.39841 = __result == 0;
            D.39862 = D.39861 & D.39841;
            if (D.39862 != 0) goto <D.39863>; else goto <D.39864>;
            <D.39863>:
            D.39865 = &MEM[(void *)"System" + 3B];
            D.39866 = *D.39865;
            D.39867 = (int) D.39866;
            D.39868 = __s2 + 3;
            D.39869 = *D.39868;
            D.39870 = (int) D.39869;
            __result = D.39867 - D.39870;
            <D.39864>:
            <D.39854>:
            <D.39844>:
          }
          D.25308 = __result;
        }
        iftmp.718 = -D.25308;
        goto <D.39871>;
        <D.39834>:
        D.39776 = klass->name_space;
        iftmp.718 = __builtin_strcmp (D.39776, "System");
        <D.39871>:
        D.25309 = iftmp.718;
      }
      if (D.25309 == 0) goto <D.39872>; else goto <D.39873>;
      <D.39872>:
      {
        const char * old_n;

        old_n = klass->name;
        klass->name = "BuildingObject";
        D.39874 = mono_defaults.object_class;
        mono_class_setup_parent (klass, D.39874);
        klass->name = old_n;
      }
      <D.39873>:
      <D.39831>:
      <D.39789>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = klass->name;
          D.39882 = "ValueType";
          D.39883 = MEM[(const unsigned char *)D.39882];
          D.39884 = (int) D.39883;
          D.39885 = *__s2;
          D.39886 = (int) D.39885;
          __result = D.39884 - D.39886;
          {
            D.39887 = __s2_len != 0;
            D.39888 = __result == 0;
            D.39889 = D.39887 & D.39888;
            if (D.39889 != 0) goto <D.39890>; else goto <D.39891>;
            <D.39890>:
            D.39892 = &MEM[(void *)"ValueType" + 1B];
            D.39893 = *D.39892;
            D.39894 = (int) D.39893;
            D.39895 = __s2 + 1;
            D.39896 = *D.39895;
            D.39897 = (int) D.39896;
            __result = D.39894 - D.39897;
            D.39898 = __s2_len > 1;
            D.39888 = __result == 0;
            D.39899 = D.39898 & D.39888;
            if (D.39899 != 0) goto <D.39900>; else goto <D.39901>;
            <D.39900>:
            D.39902 = &MEM[(void *)"ValueType" + 2B];
            D.39903 = *D.39902;
            D.39904 = (int) D.39903;
            D.39905 = __s2 + 2;
            D.39906 = *D.39905;
            D.39907 = (int) D.39906;
            __result = D.39904 - D.39907;
            D.39908 = __s2_len > 2;
            D.39888 = __result == 0;
            D.39909 = D.39908 & D.39888;
            if (D.39909 != 0) goto <D.39910>; else goto <D.39911>;
            <D.39910>:
            D.39912 = &MEM[(void *)"ValueType" + 3B];
            D.39913 = *D.39912;
            D.39914 = (int) D.39913;
            D.39915 = __s2 + 3;
            D.39916 = *D.39915;
            D.39917 = (int) D.39916;
            __result = D.39914 - D.39917;
            <D.39911>:
            <D.39901>:
            <D.39891>:
          }
          D.25318 = __result;
        }
        iftmp.719 = -D.25318;
        goto <D.39918>;
        <D.39881>:
        D.39777 = klass->name;
        iftmp.719 = __builtin_strcmp (D.39777, "ValueType");
        <D.39918>:
        D.25319 = iftmp.719;
      }
      if (D.25319 == 0) goto <D.39919>; else goto <D.39875>;
      <D.39919>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = klass->name_space;
          D.39835 = "System";
          D.39836 = MEM[(const unsigned char *)D.39835];
          D.39837 = (int) D.39836;
          D.39923 = *__s2;
          D.39924 = (int) D.39923;
          __result = D.39837 - D.39924;
          {
            D.39925 = __s2_len != 0;
            D.39926 = __result == 0;
            D.39927 = D.39925 & D.39926;
            if (D.39927 != 0) goto <D.39928>; else goto <D.39929>;
            <D.39928>:
            D.39845 = &MEM[(void *)"System" + 1B];
            D.39846 = *D.39845;
            D.39847 = (int) D.39846;
            D.39930 = __s2 + 1;
            D.39931 = *D.39930;
            D.39932 = (int) D.39931;
            __result = D.39847 - D.39932;
            D.39933 = __s2_len > 1;
            D.39926 = __result == 0;
            D.39934 = D.39933 & D.39926;
            if (D.39934 != 0) goto <D.39935>; else goto <D.39936>;
            <D.39935>:
            D.39855 = &MEM[(void *)"System" + 2B];
            D.39856 = *D.39855;
            D.39857 = (int) D.39856;
            D.39937 = __s2 + 2;
            D.39938 = *D.39937;
            D.39939 = (int) D.39938;
            __result = D.39857 - D.39939;
            D.39940 = __s2_len > 2;
            D.39926 = __result == 0;
            D.39941 = D.39940 & D.39926;
            if (D.39941 != 0) goto <D.39942>; else goto <D.39943>;
            <D.39942>:
            D.39865 = &MEM[(void *)"System" + 3B];
            D.39866 = *D.39865;
            D.39867 = (int) D.39866;
            D.39944 = __s2 + 3;
            D.39945 = *D.39944;
            D.39946 = (int) D.39945;
            __result = D.39867 - D.39946;
            <D.39943>:
            <D.39936>:
            <D.39929>:
          }
          D.25327 = __result;
        }
        iftmp.720 = -D.25327;
        goto <D.39947>;
        <D.39922>:
        D.39776 = klass->name_space;
        iftmp.720 = __builtin_strcmp (D.39776, "System");
        <D.39947>:
        D.25328 = iftmp.720;
      }
      if (D.25328 == 0) goto <D.39876>; else goto <D.39875>;
      <D.39875>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = klass->name;
          D.39793 = "Object";
          D.39794 = MEM[(const unsigned char *)D.39793];
          D.39795 = (int) D.39794;
          D.39951 = *__s2;
          D.39952 = (int) D.39951;
          __result = D.39795 - D.39952;
          {
            D.39953 = __s2_len != 0;
            D.39954 = __result == 0;
            D.39955 = D.39953 & D.39954;
            if (D.39955 != 0) goto <D.39956>; else goto <D.39957>;
            <D.39956>:
            D.39803 = &MEM[(void *)"Object" + 1B];
            D.39804 = *D.39803;
            D.39805 = (int) D.39804;
            D.39958 = __s2 + 1;
            D.39959 = *D.39958;
            D.39960 = (int) D.39959;
            __result = D.39805 - D.39960;
            D.39961 = __s2_len > 1;
            D.39954 = __result == 0;
            D.39962 = D.39961 & D.39954;
            if (D.39962 != 0) goto <D.39963>; else goto <D.39964>;
            <D.39963>:
            D.39813 = &MEM[(void *)"Object" + 2B];
            D.39814 = *D.39813;
            D.39815 = (int) D.39814;
            D.39965 = __s2 + 2;
            D.39966 = *D.39965;
            D.39967 = (int) D.39966;
            __result = D.39815 - D.39967;
            D.39968 = __s2_len > 2;
            D.39954 = __result == 0;
            D.39969 = D.39968 & D.39954;
            if (D.39969 != 0) goto <D.39970>; else goto <D.39971>;
            <D.39970>:
            D.39823 = &MEM[(void *)"Object" + 3B];
            D.39824 = *D.39823;
            D.39825 = (int) D.39824;
            D.39972 = __s2 + 3;
            D.39973 = *D.39972;
            D.39974 = (int) D.39973;
            __result = D.39825 - D.39974;
            <D.39971>:
            <D.39964>:
            <D.39957>:
          }
          D.25336 = __result;
        }
        iftmp.721 = -D.25336;
        goto <D.39975>;
        <D.39950>:
        D.39777 = klass->name;
        iftmp.721 = __builtin_strcmp (D.39777, "Object");
        <D.39975>:
        D.25337 = iftmp.721;
      }
      if (D.25337 == 0) goto <D.39976>; else goto <D.39877>;
      <D.39976>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = klass->name_space;
          D.39835 = "System";
          D.39836 = MEM[(const unsigned char *)D.39835];
          D.39837 = (int) D.39836;
          D.39980 = *__s2;
          D.39981 = (int) D.39980;
          __result = D.39837 - D.39981;
          {
            D.39982 = __s2_len != 0;
            D.39983 = __result == 0;
            D.39984 = D.39982 & D.39983;
            if (D.39984 != 0) goto <D.39985>; else goto <D.39986>;
            <D.39985>:
            D.39845 = &MEM[(void *)"System" + 1B];
            D.39846 = *D.39845;
            D.39847 = (int) D.39846;
            D.39987 = __s2 + 1;
            D.39988 = *D.39987;
            D.39989 = (int) D.39988;
            __result = D.39847 - D.39989;
            D.39990 = __s2_len > 1;
            D.39983 = __result == 0;
            D.39991 = D.39990 & D.39983;
            if (D.39991 != 0) goto <D.39992>; else goto <D.39993>;
            <D.39992>:
            D.39855 = &MEM[(void *)"System" + 2B];
            D.39856 = *D.39855;
            D.39857 = (int) D.39856;
            D.39994 = __s2 + 2;
            D.39995 = *D.39994;
            D.39996 = (int) D.39995;
            __result = D.39857 - D.39996;
            D.39997 = __s2_len > 2;
            D.39983 = __result == 0;
            D.39998 = D.39997 & D.39983;
            if (D.39998 != 0) goto <D.39999>; else goto <D.40000>;
            <D.39999>:
            D.39865 = &MEM[(void *)"System" + 3B];
            D.39866 = *D.39865;
            D.39867 = (int) D.39866;
            D.40001 = __s2 + 3;
            D.40002 = *D.40001;
            D.40003 = (int) D.40002;
            __result = D.39867 - D.40003;
            <D.40000>:
            <D.39993>:
            <D.39986>:
          }
          D.25345 = __result;
        }
        iftmp.722 = -D.25345;
        goto <D.40004>;
        <D.39979>:
        D.39776 = klass->name_space;
        iftmp.722 = __builtin_strcmp (D.39776, "System");
        <D.40004>:
        D.25346 = iftmp.722;
      }
      if (D.25346 == 0) goto <D.39876>; else goto <D.39877>;
      <D.39877>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = klass->name;
          D.40008 = "Enum";
          D.40009 = MEM[(const unsigned char *)D.40008];
          D.40010 = (int) D.40009;
          D.40011 = *__s2;
          D.40012 = (int) D.40011;
          __result = D.40010 - D.40012;
          {
            D.40013 = __s2_len != 0;
            D.40014 = __result == 0;
            D.40015 = D.40013 & D.40014;
            if (D.40015 != 0) goto <D.40016>; else goto <D.40017>;
            <D.40016>:
            D.40018 = &MEM[(void *)"Enum" + 1B];
            D.40019 = *D.40018;
            D.40020 = (int) D.40019;
            D.40021 = __s2 + 1;
            D.40022 = *D.40021;
            D.40023 = (int) D.40022;
            __result = D.40020 - D.40023;
            D.40024 = __s2_len > 1;
            D.40014 = __result == 0;
            D.40025 = D.40024 & D.40014;
            if (D.40025 != 0) goto <D.40026>; else goto <D.40027>;
            <D.40026>:
            D.40028 = &MEM[(void *)"Enum" + 2B];
            D.40029 = *D.40028;
            D.40030 = (int) D.40029;
            D.40031 = __s2 + 2;
            D.40032 = *D.40031;
            D.40033 = (int) D.40032;
            __result = D.40030 - D.40033;
            D.40034 = __s2_len > 2;
            D.40014 = __result == 0;
            D.40035 = D.40034 & D.40014;
            if (D.40035 != 0) goto <D.40036>; else goto <D.40037>;
            <D.40036>:
            D.40038 = &MEM[(void *)"Enum" + 3B];
            D.40039 = *D.40038;
            D.40040 = (int) D.40039;
            D.40041 = __s2 + 3;
            D.40042 = *D.40041;
            D.40043 = (int) D.40042;
            __result = D.40040 - D.40043;
            <D.40037>:
            <D.40027>:
            <D.40017>:
          }
          D.25354 = __result;
        }
        iftmp.723 = -D.25354;
        goto <D.40044>;
        <D.40007>:
        D.39777 = klass->name;
        iftmp.723 = __builtin_strcmp (D.39777, "Enum");
        <D.40044>:
        D.25355 = iftmp.723;
      }
      if (D.25355 == 0) goto <D.40045>; else goto <D.39878>;
      <D.40045>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = klass->name_space;
          D.39835 = "System";
          D.39836 = MEM[(const unsigned char *)D.39835];
          D.39837 = (int) D.39836;
          D.40049 = *__s2;
          D.40050 = (int) D.40049;
          __result = D.39837 - D.40050;
          {
            D.40051 = __s2_len != 0;
            D.40052 = __result == 0;
            D.40053 = D.40051 & D.40052;
            if (D.40053 != 0) goto <D.40054>; else goto <D.40055>;
            <D.40054>:
            D.39845 = &MEM[(void *)"System" + 1B];
            D.39846 = *D.39845;
            D.39847 = (int) D.39846;
            D.40056 = __s2 + 1;
            D.40057 = *D.40056;
            D.40058 = (int) D.40057;
            __result = D.39847 - D.40058;
            D.40059 = __s2_len > 1;
            D.40052 = __result == 0;
            D.40060 = D.40059 & D.40052;
            if (D.40060 != 0) goto <D.40061>; else goto <D.40062>;
            <D.40061>:
            D.39855 = &MEM[(void *)"System" + 2B];
            D.39856 = *D.39855;
            D.39857 = (int) D.39856;
            D.40063 = __s2 + 2;
            D.40064 = *D.40063;
            D.40065 = (int) D.40064;
            __result = D.39857 - D.40065;
            D.40066 = __s2_len > 2;
            D.40052 = __result == 0;
            D.40067 = D.40066 & D.40052;
            if (D.40067 != 0) goto <D.40068>; else goto <D.40069>;
            <D.40068>:
            D.39865 = &MEM[(void *)"System" + 3B];
            D.39866 = *D.39865;
            D.39867 = (int) D.39866;
            D.40070 = __s2 + 3;
            D.40071 = *D.40070;
            D.40072 = (int) D.40071;
            __result = D.39867 - D.40072;
            <D.40069>:
            <D.40062>:
            <D.40055>:
          }
          D.25363 = __result;
        }
        iftmp.724 = -D.25363;
        goto <D.40073>;
        <D.40048>:
        D.39776 = klass->name_space;
        iftmp.724 = __builtin_strcmp (D.39776, "System");
        <D.40073>:
        D.25364 = iftmp.724;
      }
      if (D.25364 == 0) goto <D.39876>; else goto <D.39878>;
      <D.39876>:
      klass->instance_size = 8;
      klass->size_inited = 1;
      mono_class_setup_vtable_general (klass, 0B, 0, 0B);
      <D.39878>:
      mono_class_setup_mono_type (klass);
      mono_class_setup_supertypes (klass);
      D.40074 = &klass->byval_arg;
      tb->type.type = D.40074;
      D.39773 = tb->nesting_type;
      if (D.39773 != 0B) goto <D.40075>; else goto <D.40076>;
      <D.40075>:
      D.39773 = tb->nesting_type;
      D.40077 = D.39773->type;
      D.40078 = D.40077 == 0B;
      D.40079 = (long int) D.40078;
      D.40080 = __builtin_expect (D.40079, 0);
      if (D.40080 != 0) goto <D.40081>; else goto <D.40082>;
      <D.40081>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9889, "tb->nesting_type->type");
      <D.40082>:
      D.39773 = tb->nesting_type;
      D.40083 = mono_reflection_type_get_handle (D.39773);
      D.40084 = mono_class_from_mono_type (D.40083);
      klass->nested_in = D.40084;
      <D.40076>:
      mono_profiler_class_loaded (klass, 0);
      mono_loader_unlock ();
      return;
      failure:
      mono_loader_unlock ();
      mono_error_raise_exception (&error);
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_reflection_setup_generic_class (struct MonoReflectionTypeBuilder * tb)
{

}


mono_reflection_create_generic_class (struct MonoReflectionTypeBuilder * tb)
{
  struct MonoType * D.40088;
  int iftmp.725;
  struct MonoArray * D.40090;
  unsigned int D.40093;
  struct MonoGenericContainer * D.40097;
  int iftmp.726;
  struct MonoGenericContainer * D.40103;
  struct MonoClass * D.40105;
  _Bool D.40106;
  long int D.40107;
  long int D.40108;
  struct MonoImage * D.40111;
  void * D.40112;
  <unnamed-signed:31> D.40113;
  unsigned int count.727;
  unsigned int D.40115;
  void * D.40116;
  unsigned int i.728;
  char * D.40118;
  struct MonoType * D.40119;
  struct MonoGenericParamFull * D.40120;
  unsigned int i.729;
  unsigned int D.40122;
  struct MonoGenericParamFull * D.40123;
  unsigned int D.40124;
  short unsigned int D.40125;
  struct MonoGenericContainer * D.40126;
  _Bool D.40127;
  long int D.40128;
  long int D.40129;
  struct MonoGenericInst * D.40132;
  struct MonoClass * klass;
  int count;
  int i;

  D.40088 = tb->type.type;
  klass = mono_class_from_mono_type (D.40088);
  D.40090 = tb->generic_params;
  if (D.40090 != 0B) goto <D.40091>; else goto <D.40092>;
  <D.40091>:
  D.40090 = tb->generic_params;
  D.40093 = mono_array_length (D.40090);
  iftmp.725 = (int) D.40093;
  goto <D.40094>;
  <D.40092>:
  iftmp.725 = 0;
  <D.40094>:
  count = iftmp.725;
  D.40097 = klass->generic_container;
  if (D.40097 != 0B) goto <D.40095>; else goto <D.40098>;
  <D.40098>:
  if (count == 0) goto <D.40095>; else goto <D.40096>;
  <D.40095>:
  return;
  <D.40096>:
  D.40103 = tb->generic_container;
  if (D.40103 == 0B) goto <D.40100>; else goto <D.40104>;
  <D.40104>:
  D.40103 = tb->generic_container;
  D.40105 = D.40103->owner.klass;
  if (D.40105 != klass) goto <D.40100>; else goto <D.40101>;
  <D.40100>:
  iftmp.726 = 1;
  goto <D.40102>;
  <D.40101>:
  iftmp.726 = 0;
  <D.40102>:
  D.40106 = iftmp.726 != 0;
  D.40107 = (long int) D.40106;
  D.40108 = __builtin_expect (D.40107, 0);
  if (D.40108 != 0) goto <D.40109>; else goto <D.40110>;
  <D.40109>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9937, "tb->generic_container && (tb->generic_container->owner.klass == klass)");
  <D.40110>:
  D.40111 = klass->image;
  D.40112 = mono_image_alloc0 (D.40111, 28);
  klass->generic_container = D.40112;
  D.40097 = klass->generic_container;
  D.40097->owner.klass = klass;
  D.40097 = klass->generic_container;
  D.40113 = (<unnamed-signed:31>) count;
  D.40097->type_argc = D.40113;
  D.40097 = klass->generic_container;
  D.40111 = klass->image;
  count.727 = (unsigned int) count;
  D.40115 = count.727 * 32;
  D.40116 = mono_image_alloc0 (D.40111, D.40115);
  D.40097->type_params = D.40116;
  klass->is_generic = 1;
  i = 0;
  goto <D.25377>;
  <D.25376>:
  {
    struct MonoReflectionGenericParam * gparam;
    struct MonoGenericParamFull * param;

    D.40090 = tb->generic_params;
    i.728 = (unsigned int) i;
    D.40118 = mono_array_addr_with_size (D.40090, 4, i.728);
    gparam = MEM[(void * *)D.40118];
    D.40119 = mono_reflection_type_get_handle (gparam);
    param = D.40119->data.generic_param;
    D.40097 = klass->generic_container;
    D.40120 = D.40097->type_params;
    i.729 = (unsigned int) i;
    D.40122 = i.729 * 32;
    D.40123 = D.40120 + D.40122;
    *D.40123 = *param;
    D.40097 = klass->generic_container;
    D.40120 = D.40097->type_params;
    i.729 = (unsigned int) i;
    D.40122 = i.729 * 32;
    D.40123 = D.40120 + D.40122;
    D.40097 = klass->generic_container;
    D.40123->param.owner = D.40097;
    D.40097 = klass->generic_container;
    D.40120 = D.40097->type_params;
    i.729 = (unsigned int) i;
    D.40122 = i.729 * 32;
    D.40123 = D.40120 + D.40122;
    D.40123->info.pklass = 0B;
    D.40097 = klass->generic_container;
    D.40120 = D.40097->type_params;
    i.729 = (unsigned int) i;
    D.40122 = i.729 * 32;
    D.40123 = D.40120 + D.40122;
    D.40124 = gparam->attrs;
    D.40125 = (short unsigned int) D.40124;
    D.40123->info.flags = D.40125;
    D.40097 = klass->generic_container;
    D.40120 = D.40097->type_params;
    i.729 = (unsigned int) i;
    D.40122 = i.729 * 32;
    D.40123 = D.40120 + D.40122;
    D.40126 = D.40123->param.owner;
    D.40127 = D.40126 == 0B;
    D.40128 = (long int) D.40127;
    D.40129 = __builtin_expect (D.40128, 0);
    if (D.40129 != 0) goto <D.40130>; else goto <D.40131>;
    <D.40130>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9956, "klass->generic_container->type_params [i].param.owner");
    <D.40131>:
  }
  i = i + 1;
  <D.25377>:
  if (i < count) goto <D.25376>; else goto <D.25378>;
  <D.25378>:
  D.40097 = klass->generic_container;
  D.40097 = klass->generic_container;
  D.40132 = mono_get_shared_generic_inst (D.40097);
  D.40097->context.class_inst = D.40132;
}


mono_reflection_create_internal_class (struct MonoReflectionTypeBuilder * tb)
{
  struct MonoType * D.40134;
  unsigned char D.40135;
  unsigned char D.40136;
  struct MonoType * D.40139;
  struct MonoArray * D.40142;
  _Bool D.40143;
  long int D.40144;
  long int D.40145;
  unsigned int D.40148;
  _Bool D.40149;
  long int D.40150;
  long int D.40151;
  char * D.40154;
  struct MonoObject * D.40155;
  struct MonoType * D.40156;
  int D.40157;
  struct MonoClass * D.40160;
  struct MonoClass * D.40161;
  struct MonoClass * D.40164;
  int D.40165;
  struct MonoClass * klass;

  D.40134 = tb->type.type;
  klass = mono_class_from_mono_type (D.40134);
  mono_loader_lock ();
  D.40135 = BIT_FIELD_REF <*klass, 8, 160>;
  D.40136 = D.40135 & 16;
  if (D.40136 != 0) goto <D.40137>; else goto <D.40138>;
  <D.40137>:
  D.40139 = mono_class_enum_basetype (klass);
  if (D.40139 == 0B) goto <D.40140>; else goto <D.40141>;
  <D.40140>:
  {
    struct MonoReflectionFieldBuilder * fb;
    struct MonoClass * ec;
    struct MonoType * enum_basetype;

    D.40142 = tb->fields;
    D.40143 = D.40142 == 0B;
    D.40144 = (long int) D.40143;
    D.40145 = __builtin_expect (D.40144, 0);
    if (D.40145 != 0) goto <D.40146>; else goto <D.40147>;
    <D.40146>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9983, "tb->fields != NULL");
    <D.40147>:
    D.40142 = tb->fields;
    D.40148 = mono_array_length (D.40142);
    D.40149 = D.40148 == 0;
    D.40150 = (long int) D.40149;
    D.40151 = __builtin_expect (D.40150, 0);
    if (D.40151 != 0) goto <D.40152>; else goto <D.40153>;
    <D.40152>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 9984, "mono_array_length (tb->fields) >= 1");
    <D.40153>:
    D.40142 = tb->fields;
    D.40154 = mono_array_addr_with_size (D.40142, 4, 0);
    fb = MEM[(struct MonoReflectionFieldBuilder * *)D.40154];
    D.40155 = fb->type;
    D.40156 = mono_reflection_type_get_handle (D.40155);
    D.40157 = mono_type_is_valid_enum_basetype (D.40156);
    if (D.40157 == 0) goto <D.40158>; else goto <D.40159>;
    <D.40158>:
    mono_loader_unlock ();
    return;
    <D.40159>:
    D.40155 = fb->type;
    enum_basetype = mono_reflection_type_get_handle (D.40155);
    D.40160 = mono_class_from_mono_type (enum_basetype);
    klass->element_class = D.40160;
    D.40161 = klass->element_class;
    if (D.40161 == 0B) goto <D.40162>; else goto <D.40163>;
    <D.40162>:
    D.40164 = mono_class_from_mono_type (enum_basetype);
    klass->element_class = D.40164;
    <D.40163>:
    ec = default_class_from_mono_type (enum_basetype);
    D.40165 = ec->instance_size;
    klass->instance_size = D.40165;
    klass->size_inited = 1;
    mono_class_setup_vtable_general (klass, 0B, 0, 0B);
  }
  <D.40141>:
  <D.40138>:
  mono_loader_unlock ();
}


default_class_from_mono_type (struct MonoType * type)
{
  unsigned char D.40167;
  int D.40168;
  struct MonoClass * D.40169;

  D.40167 = type->type;
  D.40168 = (int) D.40167;
  switch (D.40168) <default: <D.21004>, case 1: <D.20988>, case 2: <D.20989>, case 3: <D.20990>, case 4: <D.20991>, case 5: <D.20992>, case 6: <D.20993>, case 7: <D.20994>, case 8: <D.20995>, case 9: <D.20996>, case 10: <D.20999>, case 11: <D.21000>, case 12: <D.21001>, case 13: <D.21002>, case 14: <D.21003>, case 24: <D.20997>, case 25: <D.20998>, case 28: <D.20987>>
  <D.20987>:
  D.40169 = mono_defaults.object_class;
  return D.40169;
  <D.20988>:
  D.40169 = mono_defaults.void_class;
  return D.40169;
  <D.20989>:
  D.40169 = mono_defaults.boolean_class;
  return D.40169;
  <D.20990>:
  D.40169 = mono_defaults.char_class;
  return D.40169;
  <D.20991>:
  D.40169 = mono_defaults.sbyte_class;
  return D.40169;
  <D.20992>:
  D.40169 = mono_defaults.byte_class;
  return D.40169;
  <D.20993>:
  D.40169 = mono_defaults.int16_class;
  return D.40169;
  <D.20994>:
  D.40169 = mono_defaults.uint16_class;
  return D.40169;
  <D.20995>:
  D.40169 = mono_defaults.int32_class;
  return D.40169;
  <D.20996>:
  D.40169 = mono_defaults.uint32_class;
  return D.40169;
  <D.20997>:
  D.40169 = mono_defaults.int_class;
  return D.40169;
  <D.20998>:
  D.40169 = mono_defaults.uint_class;
  return D.40169;
  <D.20999>:
  D.40169 = mono_defaults.int64_class;
  return D.40169;
  <D.21000>:
  D.40169 = mono_defaults.uint64_class;
  return D.40169;
  <D.21001>:
  D.40169 = mono_defaults.single_class;
  return D.40169;
  <D.21002>:
  D.40169 = mono_defaults.double_class;
  return D.40169;
  <D.21003>:
  D.40169 = mono_defaults.string_class;
  return D.40169;
  <D.21004>:
  D.40167 = type->type;
  D.40168 = (int) D.40167;
  monoeg_g_log (0B, 16, "default_class_from_mono_type: implement me 0x%02x\n", D.40168);
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 616);
  D.40169 = 0B;
  return D.40169;
}


mono_reflection_marshal_as_attribute_from_marshal_spec (struct MonoDomain * domain, struct MonoClass * klass, struct MonoMarshalSpec * spec)
{
  struct MonoClass * System_Reflection_Emit_MarshalAsAttribute.730;
  struct MonoImage * D.40174;
  struct MonoClass * System_Reflection_Emit_MarshalAsAttribute.731;
  _Bool D.40176;
  long int D.40177;
  long int D.40178;
  <unnamed type> D.40181;
  unsigned int D.40182;
  <unnamed type> D.40183;
  int D.40184;
  short int D.40185;
  char * D.40188;
  struct MonoImage * D.40191;
  struct MonoReflectionType * * D.40194;
  struct MonoReflectionType * D.40195;
  struct MonoString * * D.40196;
  struct MonoString * D.40197;
  char * D.40198;
  struct MonoString * * D.40201;
  struct MonoString * D.40202;
  struct MonoReflectionMarshalAsAttribute * D.40203;
  static struct MonoClass * System_Reflection_Emit_MarshalAsAttribute;
  struct MonoReflectionMarshalAsAttribute * minfo;
  struct MonoType * mtype;

  System_Reflection_Emit_MarshalAsAttribute.730 = System_Reflection_Emit_MarshalAsAttribute;
  if (System_Reflection_Emit_MarshalAsAttribute.730 == 0B) goto <D.40172>; else goto <D.40173>;
  <D.40172>:
  D.40174 = mono_defaults.corlib;
  System_Reflection_Emit_MarshalAsAttribute.731 = mono_class_from_name (D.40174, "System.Runtime.InteropServices", "MarshalAsAttribute");
  System_Reflection_Emit_MarshalAsAttribute = System_Reflection_Emit_MarshalAsAttribute.731;
  System_Reflection_Emit_MarshalAsAttribute.730 = System_Reflection_Emit_MarshalAsAttribute;
  D.40176 = System_Reflection_Emit_MarshalAsAttribute.730 == 0B;
  D.40177 = (long int) D.40176;
  D.40178 = __builtin_expect (D.40177, 0);
  if (D.40178 != 0) goto <D.40179>; else goto <D.40180>;
  <D.40179>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10070, "System_Reflection_Emit_MarshalAsAttribute");
  <D.40180>:
  <D.40173>:
  System_Reflection_Emit_MarshalAsAttribute.730 = System_Reflection_Emit_MarshalAsAttribute;
  minfo = mono_object_new (domain, System_Reflection_Emit_MarshalAsAttribute.730);
  D.40181 = spec->native;
  minfo->utype = D.40181;
  D.40182 = minfo->utype;
  switch (D.40182) <default: <D.25411>, case 23: <D.25408>, case 30: <D.25409>, case 42: <D.25406>, case 44: <D.25410>>
  <D.25406>:
  D.40183 = spec->data.array_data.elem_type;
  minfo->array_subtype = D.40183;
  D.40184 = spec->data.array_data.num_elem;
  minfo->size_const = D.40184;
  D.40185 = spec->data.array_data.param_num;
  if (D.40185 != -1) goto <D.40186>; else goto <D.40187>;
  <D.40186>:
  D.40185 = spec->data.array_data.param_num;
  minfo->size_param_index = D.40185;
  <D.40187>:
  goto <D.25407>;
  <D.25408>:
  <D.25409>:
  D.40184 = spec->data.array_data.num_elem;
  minfo->size_const = D.40184;
  goto <D.25407>;
  <D.25410>:
  D.40188 = spec->data.custom_data.custom_name;
  if (D.40188 != 0B) goto <D.40189>; else goto <D.40190>;
  <D.40189>:
  D.40188 = spec->data.custom_data.custom_name;
  D.40191 = klass->image;
  mtype = mono_reflection_type_from_name (D.40188, D.40191);
  if (mtype != 0B) goto <D.40192>; else goto <D.40193>;
  <D.40192>:
  D.40194 = &minfo->marshal_type_ref;
  D.40195 = mono_type_get_object (domain, mtype);
  mono_gc_wbarrier_set_field (minfo, D.40194, D.40195);
  <D.40193>:
  D.40196 = &minfo->marshal_type;
  D.40188 = spec->data.custom_data.custom_name;
  D.40197 = mono_string_new (domain, D.40188);
  mono_gc_wbarrier_set_field (minfo, D.40196, D.40197);
  <D.40190>:
  D.40198 = spec->data.custom_data.cookie;
  if (D.40198 != 0B) goto <D.40199>; else goto <D.40200>;
  <D.40199>:
  D.40201 = &minfo->marshal_cookie;
  D.40198 = spec->data.custom_data.cookie;
  D.40202 = mono_string_new (domain, D.40198);
  mono_gc_wbarrier_set_field (minfo, D.40201, D.40202);
  <D.40200>:
  goto <D.25407>;
  <D.25411>:
  goto <D.25407>;
  <D.25407>:
  D.40203 = minfo;
  return D.40203;
}


mono_reflection_bind_generic_parameters (struct MonoReflectionType * type, int type_argc, struct MonoType * * types)
{
  struct MonoVTable * D.40206;
  struct MonoClass * D.40207;
  int D.40208;
  int D.40212;
  struct MonoVTable * D.40215;
  struct MonoClass * D.40216;
  int D.40217;
  struct MonoGenericContainer * D.40222;
  struct MonoType * D.40225;
  struct MonoGenericContainer * D.40226;
  struct MonoType * D.40229;
  unsigned char D.40230;
  unsigned char D.40231;
  struct MonoClass * klass;
  struct MonoReflectionTypeBuilder * tb;
  gboolean is_dynamic;
  struct MonoDomain * domain;
  struct MonoClass * geninst;

  tb = 0B;
  is_dynamic = 0;
  mono_loader_lock ();
  D.40206 = MEM[(struct MonoObject *)type].vtable;
  domain = D.40206->domain;
  D.40206 = MEM[(struct MonoObject *)type].vtable;
  D.40207 = D.40206->klass;
  D.40208 = is_sre_type_builder (D.40207);
  if (D.40208 != 0) goto <D.40209>; else goto <D.40210>;
  <D.40209>:
  tb = type;
  is_dynamic = 1;
  goto <D.40211>;
  <D.40210>:
  D.40206 = MEM[(struct MonoObject *)type].vtable;
  D.40207 = D.40206->klass;
  D.40212 = is_sre_generic_instance (D.40207);
  if (D.40212 != 0) goto <D.40213>; else goto <D.40214>;
  <D.40213>:
  {
    struct MonoReflectionGenericClass * rgi;
    struct MonoReflectionType * gtd;

    rgi = type;
    gtd = rgi->generic_type;
    D.40215 = MEM[(struct MonoObject *)gtd].vtable;
    D.40216 = D.40215->klass;
    D.40217 = is_sre_type_builder (D.40216);
    if (D.40217 != 0) goto <D.40218>; else goto <D.40219>;
    <D.40218>:
    tb = gtd;
    is_dynamic = 1;
    <D.40219>:
  }
  <D.40214>:
  <D.40211>:
  if (tb != 0B) goto <D.40220>; else goto <D.40221>;
  <D.40220>:
  D.40222 = tb->generic_container;
  if (D.40222 != 0B) goto <D.40223>; else goto <D.40224>;
  <D.40223>:
  mono_reflection_create_generic_class (tb);
  <D.40224>:
  <D.40221>:
  D.40225 = mono_reflection_type_get_handle (type);
  klass = mono_class_from_mono_type (D.40225);
  D.40226 = klass->generic_container;
  if (D.40226 == 0B) goto <D.40227>; else goto <D.40228>;
  <D.40227>:
  mono_loader_unlock ();
  D.40229 = 0B;
  return D.40229;
  <D.40228>:
  D.40230 = BIT_FIELD_REF <*klass, 8, 160>;
  D.40231 = D.40230 & 128;
  if (D.40231 != 0) goto <D.40232>; else goto <D.40233>;
  <D.40232>:
  tb = mono_class_get_ref_info (klass);
  is_dynamic = 1;
  <D.40233>:
  mono_loader_unlock ();
  geninst = mono_class_bind_generic_parameters (klass, type_argc, types, is_dynamic);
  D.40229 = &geninst->byval_arg;
  return D.40229;
}


mono_class_bind_generic_parameters (struct MonoClass * klass, int type_argc, struct MonoType * * types, gboolean is_dynamic)
{
  struct MonoGenericContainer * D.40235;
  _Bool D.40236;
  long int D.40237;
  long int D.40238;
  struct MonoClass * D.40241;
  struct MonoGenericClass * gclass;
  struct MonoGenericInst * inst;

  D.40235 = klass->generic_container;
  D.40236 = D.40235 == 0B;
  D.40237 = (long int) D.40236;
  D.40238 = __builtin_expect (D.40237, 0);
  if (D.40238 != 0) goto <D.40239>; else goto <D.40240>;
  <D.40239>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10507, "klass->generic_container");
  <D.40240>:
  inst = mono_metadata_get_generic_inst (type_argc, types);
  gclass = mono_metadata_lookup_generic_class (klass, inst, is_dynamic);
  D.40241 = mono_generic_class_get_class (gclass);
  return D.40241;
}


mono_reflection_bind_generic_method_parameters (struct MonoReflectionMethod * rmethod, struct MonoArray * types)
{
  int D.25537;
  int iftmp.732;
  int D.25536;
  struct MonoVTable * D.40246;
  struct MonoClass * D.40247;
  const char[14] * D.40248;
  unsigned char D.40249;
  int D.40250;
  unsigned char D.40251;
  int D.40252;
  _Bool D.40253;
  _Bool D.40254;
  _Bool D.40255;
  const unsigned char * D.40258;
  unsigned char D.40259;
  int D.40260;
  const unsigned char * D.40261;
  unsigned char D.40262;
  int D.40263;
  _Bool D.40264;
  _Bool D.40265;
  const unsigned char * D.40268;
  unsigned char D.40269;
  int D.40270;
  const unsigned char * D.40271;
  unsigned char D.40272;
  int D.40273;
  _Bool D.40274;
  _Bool D.40275;
  const unsigned char * D.40278;
  unsigned char D.40279;
  int D.40280;
  const unsigned char * D.40281;
  unsigned char D.40282;
  int D.40283;
  const char * D.40285;
  struct MonoType * D.40288;
  unsigned char D.40290;
  unsigned char D.40291;
  struct MonoMethodSignature * D.40294;
  short unsigned int D.40295;
  unsigned int count.733;
  unsigned int D.40297;
  struct MonoReflectionMethod * D.40300;
  unsigned int count.734;
  unsigned int D.40302;
  unsigned int i.735;
  char * D.40304;
  unsigned int i.736;
  unsigned int D.40306;
  struct MonoType * * D.40307;
  struct MonoType * D.40308;
  struct MonoGenericInst * iftmp.737;
  struct MonoGenericClass * D.40310;
  struct MonoClass * D.40314;
  struct MonoImage * D.40315;
  unsigned char D.40316;
  unsigned char D.40317;
  struct MonoGHashTable * D.40320;
  int D.40321;
  struct MonoException * D.40324;
  struct MonoVTable * D.40325;
  struct MonoDomain * D.40326;
  struct MonoClass * klass;
  struct MonoMethod * method;
  struct MonoMethod * inflated;
  struct MonoMethodInflated * imethod;
  struct MonoGenericContext tmp_context;
  struct MonoGenericInst * ginst;
  struct MonoType * * type_argv;
  int count;
  int i;

  try
    {
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.40246 = rmethod->object.vtable;
          D.40247 = D.40246->klass;
          __s2 = D.40247->name;
          D.40248 = "MethodBuilder";
          D.40249 = MEM[(const unsigned char *)D.40248];
          D.40250 = (int) D.40249;
          D.40251 = *__s2;
          D.40252 = (int) D.40251;
          __result = D.40250 - D.40252;
          {
            D.40253 = __s2_len != 0;
            D.40254 = __result == 0;
            D.40255 = D.40253 & D.40254;
            if (D.40255 != 0) goto <D.40256>; else goto <D.40257>;
            <D.40256>:
            D.40258 = &MEM[(void *)"MethodBuilder" + 1B];
            D.40259 = *D.40258;
            D.40260 = (int) D.40259;
            D.40261 = __s2 + 1;
            D.40262 = *D.40261;
            D.40263 = (int) D.40262;
            __result = D.40260 - D.40263;
            D.40264 = __s2_len > 1;
            D.40254 = __result == 0;
            D.40265 = D.40264 & D.40254;
            if (D.40265 != 0) goto <D.40266>; else goto <D.40267>;
            <D.40266>:
            D.40268 = &MEM[(void *)"MethodBuilder" + 2B];
            D.40269 = *D.40268;
            D.40270 = (int) D.40269;
            D.40271 = __s2 + 2;
            D.40272 = *D.40271;
            D.40273 = (int) D.40272;
            __result = D.40270 - D.40273;
            D.40274 = __s2_len > 2;
            D.40254 = __result == 0;
            D.40275 = D.40274 & D.40254;
            if (D.40275 != 0) goto <D.40276>; else goto <D.40277>;
            <D.40276>:
            D.40278 = &MEM[(void *)"MethodBuilder" + 3B];
            D.40279 = *D.40278;
            D.40280 = (int) D.40279;
            D.40281 = __s2 + 3;
            D.40282 = *D.40281;
            D.40283 = (int) D.40282;
            __result = D.40280 - D.40283;
            <D.40277>:
            <D.40267>:
            <D.40257>:
          }
          D.25536 = __result;
        }
        iftmp.732 = -D.25536;
        goto <D.40284>;
        <D.40245>:
        D.40246 = rmethod->object.vtable;
        D.40247 = D.40246->klass;
        D.40285 = D.40247->name;
        iftmp.732 = __builtin_strcmp (D.40285, "MethodBuilder");
        <D.40284>:
        D.25537 = iftmp.732;
      }
      if (D.25537 == 0) goto <D.40286>; else goto <D.40287>;
      <D.40286>:
      {
        struct MonoReflectionMethodBuilder * mb;
        struct MonoReflectionTypeBuilder * tb;
        struct MonoClass * klass;

        mb = 0B;
        mb = rmethod;
        tb = mb->type;
        D.40288 = mono_reflection_type_get_handle (tb);
        klass = mono_class_from_mono_type (D.40288);
        method = methodbuilder_to_mono_method (klass, mb);
      }
      goto <D.40289>;
      <D.40287>:
      method = rmethod->method;
      <D.40289>:
      klass = method->klass;
      D.40290 = BIT_FIELD_REF <*method, 8, 168>;
      D.40291 = D.40290 & 16;
      if (D.40291 != 0) goto <D.40292>; else goto <D.40293>;
      <D.40292>:
      method = MEM[(struct MonoMethodInflated *)method].declaring;
      <D.40293>:
      D.40294 = mono_method_signature (method);
      D.40295 = D.40294->generic_param_count;
      count = (int) D.40295;
      count.733 = (unsigned int) count;
      D.40297 = mono_array_length (types);
      if (count.733 != D.40297) goto <D.40298>; else goto <D.40299>;
      <D.40298>:
      D.40300 = 0B;
      return D.40300;
      <D.40299>:
      count.734 = (unsigned int) count;
      D.40302 = count.734 * 4;
      type_argv = monoeg_malloc0 (D.40302);
      i = 0;
      goto <D.25543>;
      <D.25542>:
      {
        struct MonoReflectionType * garg;

        i.735 = (unsigned int) i;
        D.40304 = mono_array_addr_with_size (types, 4, i.735);
        garg = MEM[(void * *)D.40304];
        i.736 = (unsigned int) i;
        D.40306 = i.736 * 4;
        D.40307 = type_argv + D.40306;
        D.40308 = mono_reflection_type_get_handle (garg);
        *D.40307 = D.40308;
      }
      i = i + 1;
      <D.25543>:
      if (i < count) goto <D.25542>; else goto <D.25544>;
      <D.25544>:
      ginst = mono_metadata_get_generic_inst (count, type_argv);
      monoeg_g_free (type_argv);
      D.40310 = klass->generic_class;
      if (D.40310 != 0B) goto <D.40311>; else goto <D.40312>;
      <D.40311>:
      D.40310 = klass->generic_class;
      iftmp.737 = D.40310->context.class_inst;
      goto <D.40313>;
      <D.40312>:
      iftmp.737 = 0B;
      <D.40313>:
      tmp_context.class_inst = iftmp.737;
      tmp_context.method_inst = ginst;
      inflated = mono_class_inflate_generic_method (method, &tmp_context);
      imethod = inflated;
      D.40314 = method->klass;
      D.40315 = D.40314->image;
      D.40316 = BIT_FIELD_REF <*D.40315, 8, 128>;
      D.40317 = D.40316 & 8;
      if (D.40317 != 0) goto <D.40318>; else goto <D.40319>;
      <D.40318>:
      {
        struct MonoDynamicImage * image;

        D.40314 = method->klass;
        image = D.40314->image;
        mono_image_lock (image);
        D.40320 = image->generic_def_objects;
        mono_g_hash_table_insert (D.40320, imethod, rmethod);
        mono_image_unlock (image);
      }
      <D.40319>:
      D.40321 = mono_verifier_is_method_valid_generic_instantiation (inflated);
      if (D.40321 == 0) goto <D.40322>; else goto <D.40323>;
      <D.40322>:
      D.40324 = mono_get_exception_argument ("typeArguments", "Invalid generic arguments");
      mono_raise_exception (D.40324);
      <D.40323>:
      D.40325 = MEM[(struct MonoObject *)rmethod].vtable;
      D.40326 = D.40325->domain;
      D.40300 = mono_method_get_object (D.40326, inflated, 0B);
      return D.40300;
    }
  finally
    {
      tmp_context = {CLOBBER};
    }
}


mono_reflection_generic_class_initialize (struct MonoReflectionGenericClass * type, struct MonoArray * fields)
{
  unsigned char D.40329;
  _Bool D.40330;
  long int D.40331;
  long int D.40332;
  unsigned char D.40335;
  unsigned char D.40336;
  unsigned int D.40339;
  int iftmp.738;
  unsigned int D.40345;
  struct MonoImageSet * D.40347;
  int D.40348;
  unsigned int D.40349;
  unsigned int D.40350;
  void * D.40351;
  unsigned int D.40352;
  void * D.40353;
  void * D.40354;
  unsigned int i.739;
  char * D.40356;
  int D.25625;
  int iftmp.740;
  int D.25624;
  struct MonoVTable * D.40360;
  struct MonoClass * D.40361;
  const char[13] * D.40362;
  unsigned char D.40363;
  int D.40364;
  unsigned char D.40365;
  int D.40366;
  _Bool D.40367;
  _Bool D.40368;
  _Bool D.40369;
  const unsigned char * D.40372;
  unsigned char D.40373;
  int D.40374;
  const unsigned char * D.40375;
  unsigned char D.40376;
  int D.40377;
  _Bool D.40378;
  _Bool D.40379;
  const unsigned char * D.40382;
  unsigned char D.40383;
  int D.40384;
  const unsigned char * D.40385;
  unsigned char D.40386;
  int D.40387;
  _Bool D.40388;
  _Bool D.40389;
  const unsigned char * D.40392;
  unsigned char D.40393;
  int D.40394;
  const unsigned char * D.40395;
  unsigned char D.40396;
  int D.40397;
  const char * D.40399;
  int D.25634;
  int iftmp.741;
  int D.25633;
  const char[10] * D.40406;
  unsigned char D.40407;
  int D.40408;
  unsigned char D.40409;
  int D.40410;
  _Bool D.40411;
  _Bool D.40412;
  _Bool D.40413;
  const unsigned char * D.40416;
  unsigned char D.40417;
  int D.40418;
  const unsigned char * D.40419;
  unsigned char D.40420;
  int D.40421;
  _Bool D.40422;
  _Bool D.40423;
  const unsigned char * D.40426;
  unsigned char D.40427;
  int D.40428;
  const unsigned char * D.40429;
  unsigned char D.40430;
  int D.40431;
  _Bool D.40432;
  _Bool D.40433;
  const unsigned char * D.40436;
  unsigned char D.40437;
  int D.40438;
  const unsigned char * D.40439;
  unsigned char D.40440;
  int D.40441;
  struct MonoClassField * D.40446;
  unsigned int i.742;
  unsigned int D.40448;
  struct MonoClassField * D.40449;
  struct MonoType * D.40450;
  struct MonoGenericContext * D.40451;
  struct MonoType * D.40452;
  struct MonoType * * D.40453;
  unsigned int D.40454;
  struct MonoType * * D.40455;
  int D.40456;
  struct MonoObject * * D.40461;
  char * D.40462;
  void * D.40463;
  struct MonoObject * * D.40464;
  const char * D.40468;
  char * D.40469;
  struct MonoGenericClass * gclass;
  struct MonoDynamicGenericClass * dgclass;
  struct MonoClass * klass;
  struct MonoClass * gklass;
  struct MonoType * gtype;
  int i;

  gtype = mono_reflection_type_get_handle (type);
  klass = mono_class_from_mono_type (gtype);
  D.40329 = gtype->type;
  D.40330 = D.40329 != 21;
  D.40331 = (long int) D.40330;
  D.40332 = __builtin_expect (D.40331, 0);
  if (D.40332 != 0) goto <D.40333>; else goto <D.40334>;
  <D.40333>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10682, "gtype->type == MONO_TYPE_GENERICINST");
  <D.40334>:
  gclass = gtype->data.generic_class;
  D.40335 = BIT_FIELD_REF <*gclass, 8, 96>;
  D.40336 = D.40335 & 1;
  if (D.40336 == 0) goto <D.40337>; else goto <D.40338>;
  <D.40337>:
  return;
  <D.40338>:
  dgclass = gclass;
  D.40339 = dgclass->initialized;
  if (D.40339 != 0) goto <D.40340>; else goto <D.40341>;
  <D.40340>:
  return;
  <D.40341>:
  gklass = gclass->container_class;
  mono_class_init (gklass);
  if (fields != 0B) goto <D.40343>; else goto <D.40344>;
  <D.40343>:
  D.40345 = mono_array_length (fields);
  iftmp.738 = (int) D.40345;
  goto <D.40346>;
  <D.40344>:
  iftmp.738 = 0;
  <D.40346>:
  dgclass->count_fields = iftmp.738;
  D.40347 = gclass->owner;
  D.40348 = dgclass->count_fields;
  D.40349 = (unsigned int) D.40348;
  D.40350 = D.40349 * 16;
  D.40351 = mono_image_set_alloc0 (D.40347, D.40350);
  dgclass->fields = D.40351;
  D.40347 = gclass->owner;
  D.40348 = dgclass->count_fields;
  D.40349 = (unsigned int) D.40348;
  D.40352 = D.40349 * 4;
  D.40353 = mono_image_set_alloc0 (D.40347, D.40352);
  dgclass->field_objects = D.40353;
  D.40347 = gclass->owner;
  D.40348 = dgclass->count_fields;
  D.40349 = (unsigned int) D.40348;
  D.40352 = D.40349 * 4;
  D.40354 = mono_image_set_alloc0 (D.40347, D.40352);
  dgclass->field_generic_types = D.40354;
  i = 0;
  goto <D.25636>;
  <D.25635>:
  {
    struct MonoObject * obj;
    struct MonoClassField * field;
    struct MonoClassField * inflated_field;

    i.739 = (unsigned int) i;
    D.40356 = mono_array_addr_with_size (fields, 4, i.739);
    obj = MEM[(void * *)D.40356];
    inflated_field = 0B;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        D.40360 = obj->vtable;
        D.40361 = D.40360->klass;
        __s2 = D.40361->name;
        D.40362 = "FieldBuilder";
        D.40363 = MEM[(const unsigned char *)D.40362];
        D.40364 = (int) D.40363;
        D.40365 = *__s2;
        D.40366 = (int) D.40365;
        __result = D.40364 - D.40366;
        {
          D.40367 = __s2_len != 0;
          D.40368 = __result == 0;
          D.40369 = D.40367 & D.40368;
          if (D.40369 != 0) goto <D.40370>; else goto <D.40371>;
          <D.40370>:
          D.40372 = &MEM[(void *)"FieldBuilder" + 1B];
          D.40373 = *D.40372;
          D.40374 = (int) D.40373;
          D.40375 = __s2 + 1;
          D.40376 = *D.40375;
          D.40377 = (int) D.40376;
          __result = D.40374 - D.40377;
          D.40378 = __s2_len > 1;
          D.40368 = __result == 0;
          D.40379 = D.40378 & D.40368;
          if (D.40379 != 0) goto <D.40380>; else goto <D.40381>;
          <D.40380>:
          D.40382 = &MEM[(void *)"FieldBuilder" + 2B];
          D.40383 = *D.40382;
          D.40384 = (int) D.40383;
          D.40385 = __s2 + 2;
          D.40386 = *D.40385;
          D.40387 = (int) D.40386;
          __result = D.40384 - D.40387;
          D.40388 = __s2_len > 2;
          D.40368 = __result == 0;
          D.40389 = D.40388 & D.40368;
          if (D.40389 != 0) goto <D.40390>; else goto <D.40391>;
          <D.40390>:
          D.40392 = &MEM[(void *)"FieldBuilder" + 3B];
          D.40393 = *D.40392;
          D.40394 = (int) D.40393;
          D.40395 = __s2 + 3;
          D.40396 = *D.40395;
          D.40397 = (int) D.40396;
          __result = D.40394 - D.40397;
          <D.40391>:
          <D.40381>:
          <D.40371>:
        }
        D.25624 = __result;
      }
      iftmp.740 = -D.25624;
      goto <D.40398>;
      <D.40359>:
      D.40360 = obj->vtable;
      D.40361 = D.40360->klass;
      D.40399 = D.40361->name;
      iftmp.740 = __builtin_strcmp (D.40399, "FieldBuilder");
      <D.40398>:
      D.25625 = iftmp.740;
    }
    if (D.25625 == 0) goto <D.40400>; else goto <D.40401>;
    <D.40400>:
    field = fieldbuilder_to_mono_class_field (klass, obj);
    inflated_field = field;
    goto <D.40402>;
    <D.40401>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        D.40360 = obj->vtable;
        D.40361 = D.40360->klass;
        __s2 = D.40361->name;
        D.40406 = "MonoField";
        D.40407 = MEM[(const unsigned char *)D.40406];
        D.40408 = (int) D.40407;
        D.40409 = *__s2;
        D.40410 = (int) D.40409;
        __result = D.40408 - D.40410;
        {
          D.40411 = __s2_len != 0;
          D.40412 = __result == 0;
          D.40413 = D.40411 & D.40412;
          if (D.40413 != 0) goto <D.40414>; else goto <D.40415>;
          <D.40414>:
          D.40416 = &MEM[(void *)"MonoField" + 1B];
          D.40417 = *D.40416;
          D.40418 = (int) D.40417;
          D.40419 = __s2 + 1;
          D.40420 = *D.40419;
          D.40421 = (int) D.40420;
          __result = D.40418 - D.40421;
          D.40422 = __s2_len > 1;
          D.40412 = __result == 0;
          D.40423 = D.40422 & D.40412;
          if (D.40423 != 0) goto <D.40424>; else goto <D.40425>;
          <D.40424>:
          D.40426 = &MEM[(void *)"MonoField" + 2B];
          D.40427 = *D.40426;
          D.40428 = (int) D.40427;
          D.40429 = __s2 + 2;
          D.40430 = *D.40429;
          D.40431 = (int) D.40430;
          __result = D.40428 - D.40431;
          D.40432 = __s2_len > 2;
          D.40412 = __result == 0;
          D.40433 = D.40432 & D.40412;
          if (D.40433 != 0) goto <D.40434>; else goto <D.40435>;
          <D.40434>:
          D.40436 = &MEM[(void *)"MonoField" + 3B];
          D.40437 = *D.40436;
          D.40438 = (int) D.40437;
          D.40439 = __s2 + 3;
          D.40440 = *D.40439;
          D.40441 = (int) D.40440;
          __result = D.40438 - D.40441;
          <D.40435>:
          <D.40425>:
          <D.40415>:
        }
        D.25633 = __result;
      }
      iftmp.741 = -D.25633;
      goto <D.40442>;
      <D.40405>:
      D.40360 = obj->vtable;
      D.40361 = D.40360->klass;
      D.40399 = D.40361->name;
      iftmp.741 = __builtin_strcmp (D.40399, "MonoField");
      <D.40442>:
      D.25634 = iftmp.741;
    }
    if (D.25634 == 0) goto <D.40443>; else goto <D.40444>;
    <D.40443>:
    field = MEM[(struct MonoReflectionField *)obj].field;
    goto <D.40445>;
    <D.40444>:
    field = 0B;
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 10712);
    <D.40445>:
    <D.40402>:
    D.40446 = dgclass->fields;
    i.742 = (unsigned int) i;
    D.40448 = i.742 * 16;
    D.40449 = D.40446 + D.40448;
    *D.40449 = *field;
    D.40446 = dgclass->fields;
    i.742 = (unsigned int) i;
    D.40448 = i.742 * 16;
    D.40449 = D.40446 + D.40448;
    D.40449->parent = klass;
    D.40446 = dgclass->fields;
    i.742 = (unsigned int) i;
    D.40448 = i.742 * 16;
    D.40449 = D.40446 + D.40448;
    D.40450 = field->type;
    D.40451 = mono_generic_class_get_context (dgclass);
    D.40452 = mono_class_inflate_generic_type (D.40450, D.40451);
    D.40449->type = D.40452;
    D.40453 = dgclass->field_generic_types;
    i.742 = (unsigned int) i;
    D.40454 = i.742 * 4;
    D.40455 = D.40453 + D.40454;
    D.40450 = field->type;
    *D.40455 = D.40450;
    D.40456 = mono_gc_is_moving ();
    if (D.40456 != 0) goto <D.40457>; else goto <D.40458>;
    <D.40457>:
    if (0 != 0) goto <D.40459>; else goto <D.40460>;
    <D.40459>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10720, "sizeof (dgclass->field_objects [i]) == sizeof (MonoObject*)");
    <D.40460>:
    D.40461 = dgclass->field_objects;
    i.742 = (unsigned int) i;
    D.40454 = i.742 * 4;
    D.40462 = D.40461 + D.40454;
    D.40463 = mono_gc_make_root_descr_all_refs (1);
    mono_gc_register_root (D.40462, 4, D.40463);
    <D.40458>:
    D.40461 = dgclass->field_objects;
    i.742 = (unsigned int) i;
    D.40454 = i.742 * 4;
    D.40464 = D.40461 + D.40454;
    *D.40464 = obj;
    if (inflated_field != 0B) goto <D.40465>; else goto <D.40466>;
    <D.40465>:
    monoeg_g_free (inflated_field);
    goto <D.40467>;
    <D.40466>:
    D.40446 = dgclass->fields;
    i.742 = (unsigned int) i;
    D.40448 = i.742 * 16;
    D.40449 = D.40446 + D.40448;
    D.40347 = gclass->owner;
    D.40446 = dgclass->fields;
    i.742 = (unsigned int) i;
    D.40448 = i.742 * 16;
    D.40449 = D.40446 + D.40448;
    D.40468 = D.40449->name;
    D.40469 = mono_image_set_strdup (D.40347, D.40468);
    D.40449->name = D.40469;
    <D.40467>:
  }
  i = i + 1;
  <D.25636>:
  D.40348 = dgclass->count_fields;
  if (D.40348 > i) goto <D.25635>; else goto <D.25637>;
  <D.25637>:
  dgclass->initialized = 1;
}


fieldbuilder_to_mono_class_field (struct MonoClass * klass, struct MonoReflectionFieldBuilder * fb)
{
  struct MonoImage * D.40471;
  struct MonoString * D.40472;
  char * D.40473;
  int D.40474;
  _Bool D.40475;
  long int D.40476;
  long int D.40477;
  unsigned int D.40483;
  struct MonoArray * D.40485;
  struct MonoArray * D.40487;
  struct MonoObject * D.40488;
  struct MonoType * D.40489;
  struct MonoType * D.40490;
  struct MonoType * D.40491;
  short unsigned int D.40492;
  unsigned char D.40493;
  unsigned char D.40494;
  _Bool D.40495;
  long int D.40496;
  long int D.40497;
  struct MonoType * D.40500;
  struct MonoType * D.40501;
  int D.40502;
  struct MonoArray * D.40505;
  struct MonoClassField * D.40506;
  struct MonoClassField * field;
  struct MonoType * custom;
  struct MonoError error;

  try
    {
      field = monoeg_malloc0 (16);
      D.40471 = klass->image;
      D.40472 = fb->name;
      D.40473 = mono_string_to_utf8_image (D.40471, D.40472, &error);
      field->name = D.40473;
      D.40474 = mono_error_ok (&error);
      D.40475 = D.40474 == 0;
      D.40476 = (long int) D.40475;
      D.40477 = __builtin_expect (D.40476, 0);
      if (D.40477 != 0) goto <D.40478>; else goto <D.40479>;
      <D.40478>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10427, "mono_error_ok (&error)");
      <D.40479>:
      D.40483 = fb->attrs;
      if (D.40483 != 0) goto <D.40480>; else goto <D.40484>;
      <D.40484>:
      D.40485 = fb->modreq;
      if (D.40485 != 0B) goto <D.40480>; else goto <D.40486>;
      <D.40486>:
      D.40487 = fb->modopt;
      if (D.40487 != 0B) goto <D.40480>; else goto <D.40481>;
      <D.40480>:
      D.40488 = fb->type;
      D.40489 = mono_reflection_type_get_handle (D.40488);
      D.40490 = mono_metadata_type_dup (0B, D.40489);
      field->type = D.40490;
      D.40491 = field->type;
      D.40483 = fb->attrs;
      D.40492 = (short unsigned int) D.40483;
      D.40491->attrs = D.40492;
      D.40471 = klass->image;
      D.40493 = BIT_FIELD_REF <*D.40471, 8, 128>;
      D.40494 = D.40493 & 8;
      D.40495 = D.40494 == 0;
      D.40496 = (long int) D.40495;
      D.40497 = __builtin_expect (D.40496, 0);
      if (D.40497 != 0) goto <D.40498>; else goto <D.40499>;
      <D.40498>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10432, "klass->image->dynamic");
      <D.40499>:
      D.40471 = klass->image;
      D.40491 = field->type;
      D.40485 = fb->modreq;
      D.40487 = fb->modopt;
      custom = add_custom_modifiers (D.40471, D.40491, D.40485, D.40487);
      D.40491 = field->type;
      monoeg_g_free (D.40491);
      D.40471 = klass->image;
      D.40500 = mono_metadata_type_dup (D.40471, custom);
      field->type = D.40500;
      monoeg_g_free (custom);
      goto <D.40482>;
      <D.40481>:
      D.40488 = fb->type;
      D.40501 = mono_reflection_type_get_handle (D.40488);
      field->type = D.40501;
      <D.40482>:
      D.40502 = fb->offset;
      if (D.40502 != -1) goto <D.40503>; else goto <D.40504>;
      <D.40503>:
      D.40502 = fb->offset;
      field->offset = D.40502;
      <D.40504>:
      field->parent = klass;
      D.40471 = klass->image;
      D.40505 = fb->cattrs;
      mono_save_custom_attrs (D.40471, field, D.40505);
      D.40506 = field;
      return D.40506;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_reflection_free_dynamic_generic_class (struct MonoGenericClass * gclass)
{
  unsigned char D.40509;
  unsigned char D.40510;
  _Bool D.40511;
  long int D.40512;
  long int D.40513;
  struct MonoClassField * D.40516;
  unsigned int i.743;
  unsigned int D.40518;
  struct MonoType * D.40519;
  int D.40520;
  struct MonoObject * * D.40523;
  unsigned int D.40524;
  char * D.40525;
  int D.40526;
  struct MonoDynamicGenericClass * dgclass;
  int i;

  D.40509 = BIT_FIELD_REF <*gclass, 8, 96>;
  D.40510 = D.40509 & 1;
  D.40511 = D.40510 == 0;
  D.40512 = (long int) D.40511;
  D.40513 = __builtin_expect (D.40512, 0);
  if (D.40513 != 0) goto <D.40514>; else goto <D.40515>;
  <D.40514>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10739, "gclass->is_dynamic");
  <D.40515>:
  dgclass = gclass;
  i = 0;
  goto <D.25645>;
  <D.25644>:
  {
    struct MonoClassField * field;

    D.40516 = dgclass->fields;
    i.743 = (unsigned int) i;
    D.40518 = i.743 * 16;
    field = D.40516 + D.40518;
    D.40519 = field->type;
    mono_metadata_free_type (D.40519);
    D.40520 = mono_gc_is_moving ();
    if (D.40520 != 0) goto <D.40521>; else goto <D.40522>;
    <D.40521>:
    D.40523 = dgclass->field_objects;
    i.743 = (unsigned int) i;
    D.40524 = i.743 * 4;
    D.40525 = D.40523 + D.40524;
    mono_gc_deregister_root (D.40525);
    <D.40522>:
  }
  i = i + 1;
  <D.25645>:
  D.40526 = dgclass->count_fields;
  if (D.40526 > i) goto <D.25644>; else goto <D.25646>;
  <D.25646>:
}


mono_reflection_get_dynamic_overrides (struct MonoClass * klass, struct MonoMethod * * * overrides, int * num_overrides)
{
  struct MonoImage * D.40527;
  unsigned char D.40528;
  unsigned char D.40529;
  _Bool D.40530;
  long int D.40531;
  long int D.40532;
  void * D.40535;
  int D.25723;
  int iftmp.744;
  int D.25722;
  void * D.40541;
  struct MonoVTable * D.40542;
  struct MonoClass * D.40543;
  const char[12] * D.40544;
  unsigned char D.40545;
  int D.40546;
  unsigned char D.40547;
  int D.40548;
  _Bool D.40549;
  _Bool D.40550;
  _Bool D.40551;
  const unsigned char * D.40554;
  unsigned char D.40555;
  int D.40556;
  const unsigned char * D.40557;
  unsigned char D.40558;
  int D.40559;
  _Bool D.40560;
  _Bool D.40561;
  const unsigned char * D.40564;
  unsigned char D.40565;
  int D.40566;
  const unsigned char * D.40567;
  unsigned char D.40568;
  int D.40569;
  _Bool D.40570;
  _Bool D.40571;
  const unsigned char * D.40574;
  unsigned char D.40575;
  int D.40576;
  const unsigned char * D.40577;
  unsigned char D.40578;
  int D.40579;
  void * D.40581;
  struct MonoVTable * D.40582;
  struct MonoClass * D.40583;
  const char * D.40584;
  _Bool D.40585;
  long int D.40586;
  long int D.40587;
  struct MonoArray * D.40590;
  unsigned int i.745;
  char * D.40594;
  struct MonoArray * D.40595;
  unsigned int D.40598;
  unsigned int onum.746;
  unsigned int D.40600;
  int D.40601;
  unsigned int onum.747;
  unsigned int D.40605;
  void * D.40606;
  char * D.40607;
  struct MonoArray * D.40608;
  unsigned int j.748;
  char * D.40612;
  struct MonoMethod * * D.40613;
  struct MonoMethod * * D.40614;
  struct MonoMethod * D.40615;
  sizetype onum.749;
  sizetype D.40617;
  sizetype D.40618;
  struct MonoMethod * * D.40619;
  struct MonoMethod * D.40620;
  _Bool D.40621;
  long int D.40622;
  long int D.40623;
  unsigned int D.40626;
  struct MonoReflectionTypeBuilder * tb;
  int i;
  int j;
  int onum;
  struct MonoReflectionMethod * m;

  *overrides = 0B;
  *num_overrides = 0;
  D.40527 = klass->image;
  D.40528 = BIT_FIELD_REF <*D.40527, 8, 128>;
  D.40529 = D.40528 & 8;
  D.40530 = D.40529 == 0;
  D.40531 = (long int) D.40530;
  D.40532 = __builtin_expect (D.40531, 0);
  if (D.40532 != 0) goto <D.40533>; else goto <D.40534>;
  <D.40533>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10948, "klass->image->dynamic");
  <D.40534>:
  D.40535 = mono_class_get_ref_info (klass);
  if (D.40535 == 0B) goto <D.40536>; else goto <D.40537>;
  <D.40536>:
  return;
  <D.40537>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.40541 = mono_class_get_ref_info (klass);
      D.40542 = MEM[(struct MonoObject *)D.40541].vtable;
      D.40543 = D.40542->klass;
      __s2 = D.40543->name;
      D.40544 = "TypeBuilder";
      D.40545 = MEM[(const unsigned char *)D.40544];
      D.40546 = (int) D.40545;
      D.40547 = *__s2;
      D.40548 = (int) D.40547;
      __result = D.40546 - D.40548;
      {
        D.40549 = __s2_len != 0;
        D.40550 = __result == 0;
        D.40551 = D.40549 & D.40550;
        if (D.40551 != 0) goto <D.40552>; else goto <D.40553>;
        <D.40552>:
        D.40554 = &MEM[(void *)"TypeBuilder" + 1B];
        D.40555 = *D.40554;
        D.40556 = (int) D.40555;
        D.40557 = __s2 + 1;
        D.40558 = *D.40557;
        D.40559 = (int) D.40558;
        __result = D.40556 - D.40559;
        D.40560 = __s2_len > 1;
        D.40550 = __result == 0;
        D.40561 = D.40560 & D.40550;
        if (D.40561 != 0) goto <D.40562>; else goto <D.40563>;
        <D.40562>:
        D.40564 = &MEM[(void *)"TypeBuilder" + 2B];
        D.40565 = *D.40564;
        D.40566 = (int) D.40565;
        D.40567 = __s2 + 2;
        D.40568 = *D.40567;
        D.40569 = (int) D.40568;
        __result = D.40566 - D.40569;
        D.40570 = __s2_len > 2;
        D.40550 = __result == 0;
        D.40571 = D.40570 & D.40550;
        if (D.40571 != 0) goto <D.40572>; else goto <D.40573>;
        <D.40572>:
        D.40574 = &MEM[(void *)"TypeBuilder" + 3B];
        D.40575 = *D.40574;
        D.40576 = (int) D.40575;
        D.40577 = __s2 + 3;
        D.40578 = *D.40577;
        D.40579 = (int) D.40578;
        __result = D.40576 - D.40579;
        <D.40573>:
        <D.40563>:
        <D.40553>:
      }
      D.25722 = __result;
    }
    iftmp.744 = -D.25722;
    goto <D.40580>;
    <D.40540>:
    D.40581 = mono_class_get_ref_info (klass);
    D.40582 = MEM[(struct MonoObject *)D.40581].vtable;
    D.40583 = D.40582->klass;
    D.40584 = D.40583->name;
    iftmp.744 = __builtin_strcmp (D.40584, "TypeBuilder");
    <D.40580>:
    D.25723 = iftmp.744;
  }
  D.40585 = D.25723 != 0;
  D.40586 = (long int) D.40585;
  D.40587 = __builtin_expect (D.40586, 0);
  if (D.40587 != 0) goto <D.40588>; else goto <D.40589>;
  <D.40588>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10953, "strcmp (((MonoObject*)mono_class_get_ref_info (klass))->vtable->klass->name, \"TypeBuilder\") == 0");
  <D.40589>:
  tb = mono_class_get_ref_info (klass);
  onum = 0;
  D.40590 = tb->methods;
  if (D.40590 != 0B) goto <D.40591>; else goto <D.40592>;
  <D.40591>:
  i = 0;
  goto <D.25726>;
  <D.25725>:
  {
    struct MonoReflectionMethodBuilder * mb;

    D.40590 = tb->methods;
    i.745 = (unsigned int) i;
    D.40594 = mono_array_addr_with_size (D.40590, 4, i.745);
    mb = MEM[(struct MonoReflectionMethodBuilder * *)D.40594];
    D.40595 = mb->override_methods;
    if (D.40595 != 0B) goto <D.40596>; else goto <D.40597>;
    <D.40596>:
    D.40595 = mb->override_methods;
    D.40598 = mono_array_length (D.40595);
    onum.746 = (unsigned int) onum;
    D.40600 = D.40598 + onum.746;
    onum = (int) D.40600;
    <D.40597>:
  }
  i = i + 1;
  <D.25726>:
  D.40601 = tb->num_methods;
  if (D.40601 > i) goto <D.25725>; else goto <D.25727>;
  <D.25727>:
  <D.40592>:
  if (onum != 0) goto <D.40602>; else goto <D.40603>;
  <D.40602>:
  onum.747 = (unsigned int) onum;
  D.40605 = onum.747 * 8;
  D.40606 = monoeg_malloc0 (D.40605);
  *overrides = D.40606;
  onum = 0;
  i = 0;
  goto <D.25733>;
  <D.25732>:
  {
    struct MonoReflectionMethodBuilder * mb;

    D.40590 = tb->methods;
    i.745 = (unsigned int) i;
    D.40607 = mono_array_addr_with_size (D.40590, 4, i.745);
    mb = MEM[(struct MonoReflectionMethodBuilder * *)D.40607];
    D.40608 = mb->override_methods;
    if (D.40608 != 0B) goto <D.40609>; else goto <D.40610>;
    <D.40609>:
    j = 0;
    goto <D.25730>;
    <D.25729>:
    D.40608 = mb->override_methods;
    j.748 = (unsigned int) j;
    D.40612 = mono_array_addr_with_size (D.40608, 4, j.748);
    m = MEM[(struct MonoReflectionMethod * *)D.40612];
    D.40613 = *overrides;
    onum.747 = (unsigned int) onum;
    D.40605 = onum.747 * 8;
    D.40614 = D.40613 + D.40605;
    D.40615 = mono_reflection_method_get_handle (m);
    *D.40614 = D.40615;
    D.40613 = *overrides;
    onum.749 = (sizetype) onum;
    D.40617 = onum.749 * 8;
    D.40618 = D.40617 + 4;
    D.40619 = D.40613 + D.40618;
    D.40620 = mb->mhandle;
    *D.40619 = D.40620;
    D.40620 = mb->mhandle;
    D.40621 = D.40620 == 0B;
    D.40622 = (long int) D.40621;
    D.40623 = __builtin_expect (D.40622, 0);
    if (D.40623 != 0) goto <D.40624>; else goto <D.40625>;
    <D.40624>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 10981, "mb->mhandle");
    <D.40625>:
    onum = onum + 1;
    j = j + 1;
    <D.25730>:
    j.748 = (unsigned int) j;
    D.40608 = mb->override_methods;
    D.40626 = mono_array_length (D.40608);
    if (j.748 < D.40626) goto <D.25729>; else goto <D.25731>;
    <D.25731>:
    <D.40610>:
  }
  i = i + 1;
  <D.25733>:
  D.40601 = tb->num_methods;
  if (D.40601 > i) goto <D.25732>; else goto <D.25734>;
  <D.25734>:
  <D.40603>:
  *num_overrides = onum;
}


mono_reflection_method_get_handle (struct MonoObject * method)
{
  struct MonoVTable * D.40628;
  int D.40631;
  int D.40633;
  struct MonoMethod * D.40634;
  int D.40635;
  int D.40638;
  struct MonoArray * D.40641;
  struct MonoReflectionType * D.40645;
  struct MonoObject * D.40646;
  struct MonoVTable * D.40647;
  struct MonoClass * D.40648;
  int D.40649;
  int D.40653;
  char * D.40657;
  const char * D.40658;
  const char * D.40659;
  struct MonoClass * class;

  D.40628 = method->vtable;
  class = D.40628->klass;
  D.40631 = is_sr_mono_method (class);
  if (D.40631 != 0) goto <D.40629>; else goto <D.40632>;
  <D.40632>:
  D.40633 = is_sr_mono_generic_method (class);
  if (D.40633 != 0) goto <D.40629>; else goto <D.40630>;
  <D.40629>:
  {
    struct MonoReflectionMethod * sr_method;

    sr_method = method;
    D.40634 = sr_method->method;
    return D.40634;
  }
  <D.40630>:
  D.40635 = is_sre_method_builder (class);
  if (D.40635 != 0) goto <D.40636>; else goto <D.40637>;
  <D.40636>:
  {
    struct MonoReflectionMethodBuilder * mb;

    mb = method;
    D.40634 = mb->mhandle;
    return D.40634;
  }
  <D.40637>:
  D.40638 = is_sre_method_on_tb_inst (class);
  if (D.40638 != 0) goto <D.40639>; else goto <D.40640>;
  <D.40639>:
  {
    struct MonoReflectionMethodOnTypeBuilderInst * m;
    struct MonoMethod * result;

    m = method;
    D.40641 = m->method_args;
    if (D.40641 != 0B) goto <D.40642>; else goto <D.40643>;
    <D.40642>:
    result = mono_reflection_method_on_tb_inst_get_handle (m);
    goto <D.40644>;
    <D.40643>:
    {
      struct MonoType * type;
      struct MonoClass * inflated_klass;
      struct MonoMethod * mono_method;

      D.40645 = m->inst;
      type = mono_reflection_type_get_handle (D.40645);
      inflated_klass = mono_class_from_mono_type (type);
      D.40646 = m->mb;
      D.40647 = D.40646->vtable;
      D.40648 = D.40647->klass;
      D.40649 = is_sre_method_builder (D.40648);
      if (D.40649 != 0) goto <D.40650>; else goto <D.40651>;
      <D.40650>:
      D.40646 = m->mb;
      mono_method = MEM[(struct MonoReflectionMethodBuilder *)D.40646].mhandle;
      goto <D.40652>;
      <D.40651>:
      D.40646 = m->mb;
      D.40647 = D.40646->vtable;
      D.40648 = D.40647->klass;
      D.40653 = is_sr_mono_method (D.40648);
      if (D.40653 != 0) goto <D.40654>; else goto <D.40655>;
      <D.40654>:
      D.40646 = m->mb;
      mono_method = MEM[(struct MonoReflectionMethod *)D.40646].method;
      goto <D.40656>;
      <D.40655>:
      D.40646 = m->mb;
      D.40647 = D.40646->vtable;
      D.40648 = D.40647->klass;
      D.40657 = mono_type_get_full_name (D.40648);
      monoeg_g_log (0B, 4, "resolve_object:: can\'t handle a MTBI with base_method of type %s", D.40657);
      <D.25703>:
      goto <D.25703>;
      <D.40656>:
      <D.40652>:
      D.40646 = m->mb;
      result = inflate_mono_method (inflated_klass, mono_method, D.40646);
    }
    <D.40644>:
    D.40634 = result;
    return D.40634;
  }
  <D.40640>:
  D.40658 = class->name_space;
  D.40659 = class->name;
  monoeg_g_log (0B, 4, "Can\'t handle methods of type %s:%s", D.40658, D.40659);
  <D.25704>:
  goto <D.25704>;
  D.40634 = 0B;
  return D.40634;
}


mono_reflection_event_builder_get_event_info (struct MonoReflectionTypeBuilder * tb, struct MonoReflectionEventBuilder * eb)
{
  struct MonoType * D.40661;
  unsigned int D.40662;
  struct MonoString * D.40663;
  char * D.40664;
  struct MonoReflectionMethodBuilder * D.40665;
  struct MonoMethod * D.40668;
  struct MonoReflectionMethodBuilder * D.40669;
  struct MonoMethod * D.40672;
  struct MonoReflectionMethodBuilder * D.40673;
  struct MonoMethod * D.40676;
  struct MonoArray * D.40677;
  unsigned int D.40680;
  unsigned int D.40681;
  unsigned int D.40682;
  void * D.40683;
  unsigned int j.750;
  char * D.40685;
  struct MonoMethod * * D.40686;
  unsigned int j.751;
  unsigned int D.40688;
  struct MonoMethod * * D.40689;
  struct MonoMethod * D.40690;
  unsigned int D.40691;
  struct MonoReflectionEvent * D.40692;
  struct MonoVTable * D.40693;
  struct MonoDomain * D.40694;
  struct MonoEvent * event;
  struct MonoClass * klass;

  event = monoeg_malloc0 (28);
  D.40661 = mono_reflection_type_get_handle (tb);
  klass = mono_class_from_mono_type (D.40661);
  event->parent = klass;
  D.40662 = eb->attrs;
  event->attrs = D.40662;
  D.40663 = eb->name;
  D.40664 = mono_string_to_utf8 (D.40663);
  event->name = D.40664;
  D.40665 = eb->add_method;
  if (D.40665 != 0B) goto <D.40666>; else goto <D.40667>;
  <D.40666>:
  D.40665 = eb->add_method;
  D.40668 = D.40665->mhandle;
  event->add = D.40668;
  <D.40667>:
  D.40669 = eb->remove_method;
  if (D.40669 != 0B) goto <D.40670>; else goto <D.40671>;
  <D.40670>:
  D.40669 = eb->remove_method;
  D.40672 = D.40669->mhandle;
  event->remove = D.40672;
  <D.40671>:
  D.40673 = eb->raise_method;
  if (D.40673 != 0B) goto <D.40674>; else goto <D.40675>;
  <D.40674>:
  D.40673 = eb->raise_method;
  D.40676 = D.40673->mhandle;
  event->raise = D.40676;
  <D.40675>:
  D.40677 = eb->other_methods;
  if (D.40677 != 0B) goto <D.40678>; else goto <D.40679>;
  <D.40678>:
  {
    int j;

    D.40677 = eb->other_methods;
    D.40680 = mono_array_length (D.40677);
    D.40681 = D.40680 + 1;
    D.40682 = D.40681 * 4;
    D.40683 = monoeg_malloc0 (D.40682);
    event->other = D.40683;
    j = 0;
    goto <D.25784>;
    <D.25783>:
    {
      struct MonoReflectionMethodBuilder * mb;

      D.40677 = eb->other_methods;
      j.750 = (unsigned int) j;
      D.40685 = mono_array_addr_with_size (D.40677, 4, j.750);
      mb = MEM[(struct MonoReflectionMethodBuilder * *)D.40685];
      D.40686 = event->other;
      j.751 = (unsigned int) j;
      D.40688 = j.751 * 4;
      D.40689 = D.40686 + D.40688;
      D.40690 = mb->mhandle;
      *D.40689 = D.40690;
    }
    j = j + 1;
    <D.25784>:
    j.750 = (unsigned int) j;
    D.40677 = eb->other_methods;
    D.40691 = mono_array_length (D.40677);
    if (j.750 < D.40691) goto <D.25783>; else goto <D.25785>;
    <D.25785>:
  }
  <D.40679>:
  D.40693 = MEM[(struct MonoObject *)tb].vtable;
  D.40694 = D.40693->domain;
  D.40692 = mono_event_get_object (D.40694, klass, event);
  return D.40692;
}


mono_reflection_create_runtime_class (struct MonoReflectionTypeBuilder * tb)
{
  struct MonoVTable * D.40696;
  struct MonoType * D.40697;
  struct MonoObject * D.40698;
  struct MonoReflectionType * D.40699;
  struct MonoArray * D.40700;
  struct MonoArray * D.40701;
  unsigned int i.752;
  char * D.40705;
  struct MonoObject * D.40708;
  struct MonoReflectionType * D.40709;
  struct MonoArray * D.40710;
  struct MonoArray * D.40711;
  struct MonoReflectionMarshal * D.40712;
  struct MonoObject * D.40715;
  struct MonoReflectionType * D.40718;
  unsigned int D.40719;
  struct MonoArray * D.40720;
  char * D.40723;
  struct MonoObject * D.40726;
  struct MonoReflectionType * D.40727;
  struct MonoArray * D.40728;
  struct MonoArray * D.40729;
  struct MonoArray * D.40730;
  struct MonoArray * D.40731;
  unsigned int j.753;
  char * D.40735;
  struct MonoArray * D.40736;
  unsigned int D.40737;
  struct MonoArray * D.40738;
  char * D.40741;
  struct MonoArray * D.40742;
  unsigned int D.40743;
  unsigned int D.40744;
  struct MonoArray * D.40745;
  char * D.40748;
  struct MonoArray * D.40751;
  struct MonoArray * D.40752;
  char * D.40755;
  struct MonoArray * D.40756;
  unsigned int D.40757;
  struct MonoArray * D.40758;
  char * D.40761;
  struct MonoArray * D.40762;
  unsigned int D.40763;
  unsigned int D.40764;
  struct MonoImage * D.40765;
  struct MonoArray * D.40766;
  union mono_mutex_t * D.40767;
  _Bool D.40770;
  long int D.40771;
  long int D.40772;
  unsigned char D.40775;
  unsigned char D.40776;
  _Bool D.40781;
  long int D.40782;
  long int D.40783;
  struct MonoReflectionType * D.40786;
  struct MonoDomain * D.40787;
  struct MonoType * D.40788;
  unsigned int D.40789;
  struct MonoClass * D.40790;
  unsigned char D.40791;
  struct MonoArray * D.40794;
  char * D.40797;
  struct MonoClassExt * D.40798;
  struct GList * D.40799;
  struct MonoType * D.40800;
  struct MonoClass * D.40801;
  struct GList * D.40802;
  unsigned int D.40803;
  unsigned char D.40806;
  unsigned char D.40807;
  int D.40810;
  unsigned char D.40811;
  <unnamed-unsigned:1> D.40812;
  unsigned char D.40813;
  <unnamed-unsigned:1> D.40814;
  unsigned char D.40815;
  unsigned char D.40816;
  <unnamed-unsigned:1> D.40817;
  int D.40819;
  int D.40821;
  int D.40823;
  struct MonoGHashTable * D.40825;
  struct MonoGenericContainer * D.40828;
  _Bool D.40833;
  long int D.40834;
  long int D.40835;
  int D.40840;
  struct MonoString * D.40843;
  struct MonoException * D.40844;
  _Bool D.40845;
  long int D.40846;
  long int D.40847;
  _Bool D.40852;
  long int D.40853;
  long int D.40854;
  struct MonoError error;
  struct MonoClass * klass;
  struct MonoDomain * domain;
  struct MonoReflectionType * res;
  int i;
  int j;
  void failure = <<< error >>>;

  try
    {
      D.40696 = MEM[(struct MonoObject *)tb].vtable;
      domain = D.40696->domain;
      D.40697 = tb->type.type;
      klass = mono_class_from_mono_type (D.40697);
      D.40698 = tb->parent;
      D.40699 = mono_reflection_type_resolve_user_types (D.40698);
      tb->parent = D.40699;
      D.40700 = tb->interfaces;
      check_array_for_usertypes (D.40700);
      D.40701 = tb->fields;
      if (D.40701 != 0B) goto <D.40702>; else goto <D.40703>;
      <D.40702>:
      i = 0;
      goto <D.25830>;
      <D.25829>:
      {
        struct MonoReflectionFieldBuilder * fb;

        D.40701 = tb->fields;
        i.752 = (unsigned int) i;
        D.40705 = mono_array_addr_with_size (D.40701, 4, i.752);
        fb = MEM[(void * *)D.40705];
        if (fb != 0B) goto <D.40706>; else goto <D.40707>;
        <D.40706>:
        D.40708 = fb->type;
        D.40709 = mono_reflection_type_resolve_user_types (D.40708);
        fb->type = D.40709;
        D.40710 = fb->modreq;
        check_array_for_usertypes (D.40710);
        D.40711 = fb->modopt;
        check_array_for_usertypes (D.40711);
        D.40712 = fb->marshal_info;
        if (D.40712 != 0B) goto <D.40713>; else goto <D.40714>;
        <D.40713>:
        D.40712 = fb->marshal_info;
        D.40715 = D.40712->marshaltyperef;
        if (D.40715 != 0B) goto <D.40716>; else goto <D.40717>;
        <D.40716>:
        D.40712 = fb->marshal_info;
        D.40712 = fb->marshal_info;
        D.40715 = D.40712->marshaltyperef;
        D.40718 = mono_reflection_type_resolve_user_types (D.40715);
        D.40712->marshaltyperef = D.40718;
        <D.40717>:
        <D.40714>:
        <D.40707>:
      }
      i = i + 1;
      <D.25830>:
      i.752 = (unsigned int) i;
      D.40701 = tb->fields;
      D.40719 = mono_array_length (D.40701);
      if (i.752 < D.40719) goto <D.25829>; else goto <D.25831>;
      <D.25831>:
      <D.40703>:
      D.40720 = tb->methods;
      if (D.40720 != 0B) goto <D.40721>; else goto <D.40722>;
      <D.40721>:
      i = 0;
      goto <D.25840>;
      <D.25839>:
      {
        struct MonoReflectionMethodBuilder * mb;

        D.40720 = tb->methods;
        i.752 = (unsigned int) i;
        D.40723 = mono_array_addr_with_size (D.40720, 4, i.752);
        mb = MEM[(void * *)D.40723];
        if (mb != 0B) goto <D.40724>; else goto <D.40725>;
        <D.40724>:
        D.40726 = mb->rtype;
        D.40727 = mono_reflection_type_resolve_user_types (D.40726);
        mb->rtype = D.40727;
        D.40728 = mb->return_modreq;
        check_array_for_usertypes (D.40728);
        D.40729 = mb->return_modopt;
        check_array_for_usertypes (D.40729);
        D.40730 = mb->parameters;
        check_array_for_usertypes (D.40730);
        D.40731 = mb->param_modreq;
        if (D.40731 != 0B) goto <D.40732>; else goto <D.40733>;
        <D.40732>:
        j = 0;
        goto <D.25834>;
        <D.25833>:
        D.40731 = mb->param_modreq;
        j.753 = (unsigned int) j;
        D.40735 = mono_array_addr_with_size (D.40731, 4, j.753);
        D.40736 = MEM[(struct MonoArray * *)D.40735];
        check_array_for_usertypes (D.40736);
        j = j + 1;
        <D.25834>:
        j.753 = (unsigned int) j;
        D.40731 = mb->param_modreq;
        D.40737 = mono_array_length (D.40731);
        if (j.753 < D.40737) goto <D.25833>; else goto <D.25835>;
        <D.25835>:
        <D.40733>:
        D.40738 = mb->param_modopt;
        if (D.40738 != 0B) goto <D.40739>; else goto <D.40740>;
        <D.40739>:
        j = 0;
        goto <D.25837>;
        <D.25836>:
        D.40738 = mb->param_modopt;
        j.753 = (unsigned int) j;
        D.40741 = mono_array_addr_with_size (D.40738, 4, j.753);
        D.40742 = MEM[(struct MonoArray * *)D.40741];
        check_array_for_usertypes (D.40742);
        j = j + 1;
        <D.25837>:
        j.753 = (unsigned int) j;
        D.40738 = mb->param_modopt;
        D.40743 = mono_array_length (D.40738);
        if (j.753 < D.40743) goto <D.25836>; else goto <D.25838>;
        <D.25838>:
        <D.40740>:
        <D.40725>:
      }
      i = i + 1;
      <D.25840>:
      i.752 = (unsigned int) i;
      D.40720 = tb->methods;
      D.40744 = mono_array_length (D.40720);
      if (i.752 < D.40744) goto <D.25839>; else goto <D.25841>;
      <D.25841>:
      <D.40722>:
      D.40745 = tb->ctors;
      if (D.40745 != 0B) goto <D.40746>; else goto <D.40747>;
      <D.40746>:
      i = 0;
      goto <D.25850>;
      <D.25849>:
      {
        struct MonoReflectionCtorBuilder * mb;

        D.40745 = tb->ctors;
        i.752 = (unsigned int) i;
        D.40748 = mono_array_addr_with_size (D.40745, 4, i.752);
        mb = MEM[(void * *)D.40748];
        if (mb != 0B) goto <D.40749>; else goto <D.40750>;
        <D.40749>:
        D.40751 = mb->parameters;
        check_array_for_usertypes (D.40751);
        D.40752 = mb->param_modreq;
        if (D.40752 != 0B) goto <D.40753>; else goto <D.40754>;
        <D.40753>:
        j = 0;
        goto <D.25844>;
        <D.25843>:
        D.40752 = mb->param_modreq;
        j.753 = (unsigned int) j;
        D.40755 = mono_array_addr_with_size (D.40752, 4, j.753);
        D.40756 = MEM[(struct MonoArray * *)D.40755];
        check_array_for_usertypes (D.40756);
        j = j + 1;
        <D.25844>:
        j.753 = (unsigned int) j;
        D.40752 = mb->param_modreq;
        D.40757 = mono_array_length (D.40752);
        if (j.753 < D.40757) goto <D.25843>; else goto <D.25845>;
        <D.25845>:
        <D.40754>:
        D.40758 = mb->param_modopt;
        if (D.40758 != 0B) goto <D.40759>; else goto <D.40760>;
        <D.40759>:
        j = 0;
        goto <D.25847>;
        <D.25846>:
        D.40758 = mb->param_modopt;
        j.753 = (unsigned int) j;
        D.40761 = mono_array_addr_with_size (D.40758, 4, j.753);
        D.40762 = MEM[(struct MonoArray * *)D.40761];
        check_array_for_usertypes (D.40762);
        j = j + 1;
        <D.25847>:
        j.753 = (unsigned int) j;
        D.40758 = mb->param_modopt;
        D.40763 = mono_array_length (D.40758);
        if (j.753 < D.40763) goto <D.25846>; else goto <D.25848>;
        <D.25848>:
        <D.40760>:
        <D.40750>:
      }
      i = i + 1;
      <D.25850>:
      i.752 = (unsigned int) i;
      D.40745 = tb->ctors;
      D.40764 = mono_array_length (D.40745);
      if (i.752 < D.40764) goto <D.25849>; else goto <D.25851>;
      <D.25851>:
      <D.40747>:
      D.40765 = klass->image;
      D.40766 = tb->cattrs;
      mono_save_custom_attrs (D.40765, klass, D.40766);
      mono_loader_lock ();
      {
        int ret;

        D.40767 = &domain->lock.mutex;
        ret = pthread_mutex_lock (D.40767);
        if (ret != 0) goto <D.40768>; else goto <D.40769>;
        <D.40768>:
        monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
        <D.40769>:
        D.40770 = ret != 0;
        D.40771 = (long int) D.40770;
        D.40772 = __builtin_expect (D.40771, 0);
        if (D.40772 != 0) goto <D.40773>; else goto <D.40774>;
        <D.40773>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11312, "ret == 0");
        <D.40774>:
      }
      D.40775 = BIT_FIELD_REF <*klass, 8, 160>;
      D.40776 = D.40775 & 128;
      if (D.40776 != 0) goto <D.40777>; else goto <D.40778>;
      <D.40777>:
      {
        int ret;

        D.40767 = &domain->lock.mutex;
        ret = pthread_mutex_unlock (D.40767);
        if (ret != 0) goto <D.40779>; else goto <D.40780>;
        <D.40779>:
        monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
        <D.40780>:
        D.40781 = ret != 0;
        D.40782 = (long int) D.40781;
        D.40783 = __builtin_expect (D.40782, 0);
        if (D.40783 != 0) goto <D.40784>; else goto <D.40785>;
        <D.40784>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11314, "ret == 0");
        <D.40785>:
      }
      mono_loader_unlock ();
      D.40696 = MEM[(struct MonoObject *)tb].vtable;
      D.40787 = D.40696->domain;
      D.40788 = &klass->byval_arg;
      D.40786 = mono_type_get_object (D.40787, D.40788);
      return D.40786;
      <D.40778>:
      D.40789 = tb->attrs;
      klass->flags = D.40789;
      klass->has_cctor = 1;
      klass->has_finalize = 1;
      klass->has_finalize_inited = 1;
      klass->supertypes = 0B;
      D.40790 = klass->parent;
      mono_class_setup_parent (klass, D.40790);
      mono_class_setup_mono_type (klass);
      D.40775 = BIT_FIELD_REF <*klass, 8, 160>;
      D.40791 = D.40775 & 16;
      if (D.40791 == 0) goto <D.40792>; else goto <D.40793>;
      <D.40792>:
      ensure_runtime_vtable (klass);
      <D.40793>:
      D.40794 = tb->subtypes;
      if (D.40794 != 0B) goto <D.40795>; else goto <D.40796>;
      <D.40795>:
      i = 0;
      goto <D.25856>;
      <D.25855>:
      {
        struct MonoReflectionTypeBuilder * subtb;

        D.40794 = tb->subtypes;
        i.752 = (unsigned int) i;
        D.40797 = mono_array_addr_with_size (D.40794, 4, i.752);
        subtb = MEM[(struct MonoReflectionTypeBuilder * *)D.40797];
        mono_class_alloc_ext (klass);
        D.40798 = klass->ext;
        D.40765 = klass->image;
        D.40798 = klass->ext;
        D.40799 = D.40798->nested_classes;
        D.40800 = mono_reflection_type_get_handle (subtb);
        D.40801 = mono_class_from_mono_type (D.40800);
        D.40802 = g_list_prepend_image (D.40765, D.40799, D.40801);
        D.40798->nested_classes = D.40802;
      }
      i = i + 1;
      <D.25856>:
      i.752 = (unsigned int) i;
      D.40794 = tb->subtypes;
      D.40803 = mono_array_length (D.40794);
      if (i.752 < D.40803) goto <D.25855>; else goto <D.25857>;
      <D.25857>:
      <D.40796>:
      klass->nested_classes_inited = 1;
      D.40790 = klass->parent;
      if (D.40790 != 0B) goto <D.40804>; else goto <D.40805>;
      <D.40804>:
      D.40790 = klass->parent;
      D.40806 = BIT_FIELD_REF <*D.40790, 8, 160>;
      D.40807 = D.40806 & 4;
      if (D.40807 == 0) goto <D.40808>; else goto <D.40809>;
      <D.40808>:
      D.40790 = klass->parent;
      mono_class_init (D.40790);
      <D.40809>:
      D.40790 = klass->parent;
      D.40810 = D.40790->instance_size;
      klass->instance_size = D.40810;
      klass->sizes.class_size = 0;
      D.40790 = klass->parent;
      D.40811 = D.40790->min_align;
      klass->min_align = D.40811;
      D.40812 = klass->has_references;
      D.40813 = (unsigned char) D.40812;
      D.40790 = klass->parent;
      D.40814 = D.40790->has_references;
      D.40815 = (unsigned char) D.40814;
      D.40816 = D.40813 | D.40815;
      D.40817 = (<unnamed-unsigned:1>) D.40816;
      klass->has_references = D.40817;
      goto <D.40818>;
      <D.40805>:
      klass->instance_size = 8;
      klass->min_align = 1;
      <D.40818>:
      typebuilder_setup_fields (klass, &error);
      D.40819 = mono_error_ok (&error);
      if (D.40819 == 0) goto failure; else goto <D.40820>;
      <D.40820>:
      typebuilder_setup_properties (klass, &error);
      D.40821 = mono_error_ok (&error);
      if (D.40821 == 0) goto failure; else goto <D.40822>;
      <D.40822>:
      typebuilder_setup_events (klass, &error);
      D.40823 = mono_error_ok (&error);
      if (D.40823 == 0) goto failure; else goto <D.40824>;
      <D.40824>:
      klass->wastypebuilder = 1;
      D.40825 = domain->type_hash;
      if (D.40825 != 0B) goto <D.40826>; else goto <D.40827>;
      <D.40826>:
      D.40828 = klass->generic_container;
      if (D.40828 != 0B) goto <D.40829>; else goto <D.40830>;
      <D.40829>:
      D.40825 = domain->type_hash;
      mono_g_hash_table_foreach_remove (D.40825, remove_instantiations_of_and_ensure_contents, klass);
      <D.40830>:
      <D.40827>:
      {
        int ret;

        D.40767 = &domain->lock.mutex;
        ret = pthread_mutex_unlock (D.40767);
        if (ret != 0) goto <D.40831>; else goto <D.40832>;
        <D.40831>:
        monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
        <D.40832>:
        D.40833 = ret != 0;
        D.40834 = (long int) D.40833;
        D.40835 = __builtin_expect (D.40834, 0);
        if (D.40835 != 0) goto <D.40836>; else goto <D.40837>;
        <D.40836>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11398, "ret == 0");
        <D.40837>:
      }
      mono_loader_unlock ();
      D.40775 = BIT_FIELD_REF <*klass, 8, 160>;
      D.40791 = D.40775 & 16;
      if (D.40791 != 0) goto <D.40838>; else goto <D.40839>;
      <D.40838>:
      D.40840 = mono_class_is_valid_enum (klass);
      if (D.40840 == 0) goto <D.40841>; else goto <D.40842>;
      <D.40841>:
      mono_class_set_failure (klass, 7, 0B);
      D.40843 = tb->name;
      D.40844 = mono_get_exception_type_load (D.40843, 0B);
      mono_raise_exception (D.40844);
      <D.40842>:
      <D.40839>:
      D.40696 = MEM[(struct MonoObject *)tb].vtable;
      D.40787 = D.40696->domain;
      D.40788 = &klass->byval_arg;
      res = mono_type_get_object (D.40787, D.40788);
      D.40845 = res == tb;
      D.40846 = (long int) D.40845;
      D.40847 = __builtin_expect (D.40846, 0);
      if (D.40847 != 0) goto <D.40848>; else goto <D.40849>;
      <D.40848>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11407, "res != (MonoReflectionType*)tb");
      <D.40849>:
      D.40786 = res;
      return D.40786;
      failure:
      mono_class_set_failure (klass, 7, 0B);
      klass->wastypebuilder = 1;
      {
        int ret;

        D.40767 = &domain->lock.mutex;
        ret = pthread_mutex_unlock (D.40767);
        if (ret != 0) goto <D.40850>; else goto <D.40851>;
        <D.40850>:
        monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
        <D.40851>:
        D.40852 = ret != 0;
        D.40853 = (long int) D.40852;
        D.40854 = __builtin_expect (D.40853, 0);
        if (D.40854 != 0) goto <D.40855>; else goto <D.40856>;
        <D.40855>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11414, "ret == 0");
        <D.40856>:
      }
      mono_loader_unlock ();
      mono_error_raise_exception (&error);
      D.40786 = 0B;
      return D.40786;
    }
  finally
    {
      error = {CLOBBER};
    }
}


remove_instantiations_of_and_ensure_contents (void * key, void * value, void * user_data)
{
  unsigned char D.40860;
  struct MonoGenericClass * D.40862;
  struct MonoClass * D.40863;
  struct MonoClass * D.40865;
  gboolean D.40866;
  struct MonoType * type;
  struct MonoClass * klass;

  type = key;
  klass = user_data;
  D.40860 = type->type;
  if (D.40860 == 21) goto <D.40861>; else goto <D.40859>;
  <D.40861>:
  D.40862 = type->data.generic_class;
  D.40863 = D.40862->container_class;
  if (D.40863 == klass) goto <D.40864>; else goto <D.40859>;
  <D.40864>:
  D.40865 = mono_class_from_mono_type (type);
  fix_partial_generic_class (D.40865);
  D.40866 = 1;
  return D.40866;
  <D.40859>:
  D.40866 = 0;
  return D.40866;
}


fix_partial_generic_class (struct MonoClass * klass)
{
  struct MonoGenericClass * D.40868;
  unsigned char D.40869;
  unsigned char D.40870;
  struct MonoClass * D.40873;
  struct MonoClass * D.40874;
  struct MonoType * D.40877;
  struct MonoGenericContext * D.40878;
  int D.40879;
  unsigned char D.40885;
  unsigned char D.40886;
  unsigned int D.40889;
  unsigned int D.40892;
  unsigned int D.40893;
  struct MonoImage * D.40896;
  unsigned int D.40897;
  unsigned int D.40898;
  void * D.40899;
  struct MonoMethod * * D.40900;
  unsigned int i.754;
  unsigned int D.40902;
  struct MonoMethod * * D.40903;
  struct MonoMethod * * D.40904;
  struct MonoMethod * * D.40905;
  struct MonoMethod * D.40906;
  struct MonoGenericContext * D.40907;
  struct MonoMethod * D.40908;
  unsigned int i.755;
  short unsigned int D.40910;
  short unsigned int D.40913;
  unsigned int D.40916;
  unsigned int D.40917;
  void * D.40918;
  struct MonoClass * * D.40919;
  struct MonoClass * * D.40920;
  struct MonoClass * D.40921;
  struct MonoType * D.40922;
  struct MonoGenericContext * D.40923;
  struct MonoClass * * D.40924;
  struct MonoClass * * D.40925;
  struct MonoClass * D.40926;
  struct MonoClass * D.40927;
  int D.40928;
  unsigned int D.40929;
  unsigned int D.40930;
  unsigned int D.40933;
  void * D.40934;
  struct MonoClassField * D.40935;
  unsigned int D.40936;
  struct MonoClassField * D.40937;
  struct MonoClassField * D.40938;
  struct MonoClassField * D.40939;
  struct MonoType * D.40940;
  struct MonoGenericContext * D.40941;
  struct MonoType * D.40942;
  struct MonoClass * gklass;
  struct MonoDynamicGenericClass * dgclass;
  int i;

  D.40868 = klass->generic_class;
  gklass = D.40868->container_class;
  D.40869 = BIT_FIELD_REF <*klass, 8, 160>;
  D.40870 = D.40869 & 128;
  if (D.40870 != 0) goto <D.40871>; else goto <D.40872>;
  <D.40871>:
  return;
  <D.40872>:
  dgclass = klass->generic_class;
  D.40873 = klass->parent;
  D.40874 = gklass->parent;
  if (D.40873 != D.40874) goto <D.40875>; else goto <D.40876>;
  <D.40875>:
  {
    struct MonoError error;
    struct MonoType * parent_type;

    try
      {
        D.40874 = gklass->parent;
        D.40877 = &D.40874->byval_arg;
        D.40868 = klass->generic_class;
        D.40878 = &D.40868->context;
        parent_type = mono_class_inflate_generic_type_checked (D.40877, D.40878, &error);
        D.40879 = mono_error_ok (&error);
        if (D.40879 != 0) goto <D.40880>; else goto <D.40881>;
        <D.40880>:
        {
          struct MonoClass * parent;

          parent = mono_class_from_mono_type (parent_type);
          mono_metadata_free_type (parent_type);
          D.40873 = klass->parent;
          if (D.40873 != parent) goto <D.40882>; else goto <D.40883>;
          <D.40882>:
          klass->supertypes = 0B;
          mono_class_setup_parent (klass, parent);
          <D.40883>:
        }
        goto <D.40884>;
        <D.40881>:
        mono_class_set_failure (klass, 7, 0B);
        mono_error_cleanup (&error);
        D.40885 = BIT_FIELD_REF <*gklass, 8, 160>;
        D.40886 = D.40885 & 128;
        if (D.40886 != 0) goto <D.40887>; else goto <D.40888>;
        <D.40887>:
        klass->wastypebuilder = 1;
        <D.40888>:
        return;
        <D.40884>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.40876>:
  D.40889 = dgclass->initialized;
  if (D.40889 == 0) goto <D.40890>; else goto <D.40891>;
  <D.40890>:
  return;
  <D.40891>:
  D.40892 = klass->method.count;
  D.40893 = gklass->method.count;
  if (D.40892 != D.40893) goto <D.40894>; else goto <D.40895>;
  <D.40894>:
  D.40893 = gklass->method.count;
  klass->method.count = D.40893;
  D.40896 = klass->image;
  D.40892 = klass->method.count;
  D.40897 = D.40892 + 1;
  D.40898 = D.40897 * 4;
  D.40899 = mono_image_alloc (D.40896, D.40898);
  klass->methods = D.40899;
  i = 0;
  goto <D.25657>;
  <D.25656>:
  D.40900 = klass->methods;
  i.754 = (unsigned int) i;
  D.40902 = i.754 * 4;
  D.40903 = D.40900 + D.40902;
  D.40904 = gklass->methods;
  i.754 = (unsigned int) i;
  D.40902 = i.754 * 4;
  D.40905 = D.40904 + D.40902;
  D.40906 = *D.40905;
  D.40907 = mono_class_get_context (klass);
  D.40908 = mono_class_inflate_generic_method_full (D.40906, klass, D.40907);
  *D.40903 = D.40908;
  i = i + 1;
  <D.25657>:
  i.755 = (unsigned int) i;
  D.40892 = klass->method.count;
  if (i.755 < D.40892) goto <D.25656>; else goto <D.25658>;
  <D.25658>:
  <D.40895>:
  D.40910 = klass->interface_count;
  if (D.40910 != 0) goto <D.40911>; else goto <D.40912>;
  <D.40911>:
  D.40910 = klass->interface_count;
  D.40913 = gklass->interface_count;
  if (D.40910 != D.40913) goto <D.40914>; else goto <D.40915>;
  <D.40914>:
  D.40913 = gklass->interface_count;
  klass->interface_count = D.40913;
  D.40896 = klass->image;
  D.40913 = gklass->interface_count;
  D.40916 = (unsigned int) D.40913;
  D.40917 = D.40916 * 4;
  D.40918 = mono_image_alloc (D.40896, D.40917);
  klass->interfaces = D.40918;
  klass->interfaces_packed = 0B;
  i = 0;
  goto <D.25661>;
  <D.25660>:
  {
    struct MonoType * iface_type;

    D.40919 = gklass->interfaces;
    i.754 = (unsigned int) i;
    D.40902 = i.754 * 4;
    D.40920 = D.40919 + D.40902;
    D.40921 = *D.40920;
    D.40922 = &D.40921->byval_arg;
    D.40923 = mono_class_get_context (klass);
    iface_type = mono_class_inflate_generic_type (D.40922, D.40923);
    D.40924 = klass->interfaces;
    i.754 = (unsigned int) i;
    D.40902 = i.754 * 4;
    D.40925 = D.40924 + D.40902;
    D.40926 = mono_class_from_mono_type (iface_type);
    *D.40925 = D.40926;
    mono_metadata_free_type (iface_type);
    D.40924 = klass->interfaces;
    i.754 = (unsigned int) i;
    D.40902 = i.754 * 4;
    D.40925 = D.40924 + D.40902;
    D.40927 = *D.40925;
    ensure_runtime_vtable (D.40927);
  }
  i = i + 1;
  <D.25661>:
  D.40913 = gklass->interface_count;
  D.40928 = (int) D.40913;
  if (D.40928 > i) goto <D.25660>; else goto <D.25662>;
  <D.25662>:
  klass->interfaces_inited = 1;
  <D.40915>:
  <D.40912>:
  D.40929 = klass->field.count;
  D.40930 = gklass->field.count;
  if (D.40929 != D.40930) goto <D.40931>; else goto <D.40932>;
  <D.40931>:
  D.40930 = gklass->field.count;
  klass->field.count = D.40930;
  D.40896 = klass->image;
  D.40929 = klass->field.count;
  D.40933 = D.40929 * 16;
  D.40934 = image_g_malloc0 (D.40896, D.40933);
  klass->fields = D.40934;
  i = 0;
  goto <D.25664>;
  <D.25663>:
  D.40935 = klass->fields;
  i.754 = (unsigned int) i;
  D.40936 = i.754 * 16;
  D.40937 = D.40935 + D.40936;
  D.40938 = gklass->fields;
  i.754 = (unsigned int) i;
  D.40936 = i.754 * 16;
  D.40939 = D.40938 + D.40936;
  *D.40937 = *D.40939;
  D.40935 = klass->fields;
  i.754 = (unsigned int) i;
  D.40936 = i.754 * 16;
  D.40937 = D.40935 + D.40936;
  D.40937->parent = klass;
  D.40935 = klass->fields;
  i.754 = (unsigned int) i;
  D.40936 = i.754 * 16;
  D.40937 = D.40935 + D.40936;
  D.40938 = gklass->fields;
  i.754 = (unsigned int) i;
  D.40936 = i.754 * 16;
  D.40939 = D.40938 + D.40936;
  D.40940 = D.40939->type;
  D.40941 = mono_class_get_context (klass);
  D.40942 = mono_class_inflate_generic_type (D.40940, D.40941);
  D.40937->type = D.40942;
  i = i + 1;
  <D.25664>:
  i.755 = (unsigned int) i;
  D.40929 = klass->field.count;
  if (i.755 < D.40929) goto <D.25663>; else goto <D.25665>;
  <D.25665>:
  <D.40932>:
  D.40885 = BIT_FIELD_REF <*gklass, 8, 160>;
  D.40886 = D.40885 & 128;
  if (D.40886 != 0) goto <D.40943>; else goto <D.40944>;
  <D.40943>:
  klass->wastypebuilder = 1;
  <D.40944>:
  return;
}


check_array_for_usertypes (struct MonoArray * arr)
{
  unsigned int i.756;
  char * D.40951;
  unsigned int D.40952;
  int i;

  if (arr == 0B) goto <D.40948>; else goto <D.40949>;
  <D.40948>:
  return;
  <D.40949>:
  i = 0;
  goto <D.25817>;
  <D.25816>:
  {
    struct MonoReflectionType * __type;

    i.756 = (unsigned int) i;
    D.40951 = mono_array_addr_with_size (arr, 4, i.756);
    __type = MEM[(struct MonoReflectionType * *)D.40951];
    __type = mono_reflection_type_resolve_user_types (__type);
    {
      struct MonoReflectionType * * __p;

      i.756 = (unsigned int) i;
      __p = mono_array_addr_with_size (arr, 4, i.756);
      *__p = __type;
    }
  }
  i = i + 1;
  <D.25817>:
  i.756 = (unsigned int) i;
  D.40952 = mono_array_length (arr);
  if (i.756 < D.40952) goto <D.25816>; else goto <D.25818>;
  <D.25818>:
}


ensure_runtime_vtable (struct MonoClass * klass)
{
  struct MonoImage * D.40957;
  unsigned char D.40958;
  unsigned char D.40959;
  struct MonoGenericClass * D.40962;
  unsigned char D.40963;
  unsigned char D.40964;
  struct MonoClass * D.40965;
  int iftmp.757;
  struct MonoArray * D.40971;
  unsigned int D.40974;
  int D.40976;
  unsigned int num.758;
  unsigned int num.759;
  unsigned int D.40979;
  void * D.40980;
  int iftmp.760;
  unsigned int D.40984;
  struct MonoMethod * * D.40986;
  unsigned int i.761;
  unsigned int D.40988;
  struct MonoMethod * * D.40989;
  unsigned int i.762;
  char * D.40991;
  struct MonoReflectionCtorBuilder * D.40992;
  struct MonoMethod * D.40993;
  int j.763;
  unsigned int j.764;
  unsigned int D.40996;
  struct MonoMethod * * D.40997;
  struct MonoArray * D.40998;
  char * D.40999;
  struct MonoReflectionMethodBuilder * D.41000;
  struct MonoMethod * D.41001;
  struct MonoArray * D.41002;
  unsigned int D.41005;
  short unsigned int D.41006;
  short unsigned int D.41007;
  unsigned int D.41008;
  unsigned int D.41009;
  void * D.41010;
  char * D.41011;
  void * D.41012;
  struct MonoClass * * D.41013;
  struct MonoClass * * D.41014;
  struct MonoClass * D.41015;
  struct MonoClass * D.41016;
  int D.41017;
  unsigned int D.41021;
  unsigned int D.41022;
  short unsigned int D.41025;
  int D.41026;
  int D.41027;
  int slot_num.765;
  short int D.41031;
  unsigned int i.766;
  unsigned int D.41033;
  struct MonoReflectionTypeBuilder * tb;
  int i;
  int num;
  int j;

  tb = mono_class_get_ref_info (klass);
  D.40957 = klass->image;
  D.40958 = BIT_FIELD_REF <*D.40957, 8, 128>;
  D.40959 = D.40958 & 8;
  if (D.40959 == 0) goto <D.40954>; else goto <D.40960>;
  <D.40960>:
  if (tb == 0B) goto <D.40961>; else goto <D.40955>;
  <D.40961>:
  D.40962 = klass->generic_class;
  if (D.40962 == 0B) goto <D.40954>; else goto <D.40955>;
  <D.40955>:
  D.40963 = BIT_FIELD_REF <*klass, 8, 160>;
  D.40964 = D.40963 & 128;
  if (D.40964 != 0) goto <D.40954>; else goto <D.40956>;
  <D.40954>:
  return;
  <D.40956>:
  D.40965 = klass->parent;
  if (D.40965 != 0B) goto <D.40966>; else goto <D.40967>;
  <D.40966>:
  D.40965 = klass->parent;
  ensure_runtime_vtable (D.40965);
  <D.40967>:
  if (tb != 0B) goto <D.40968>; else goto <D.40969>;
  <D.40968>:
  D.40971 = tb->ctors;
  if (D.40971 != 0B) goto <D.40972>; else goto <D.40973>;
  <D.40972>:
  D.40971 = tb->ctors;
  D.40974 = mono_array_length (D.40971);
  iftmp.757 = (int) D.40974;
  goto <D.40975>;
  <D.40973>:
  iftmp.757 = 0;
  <D.40975>:
  num = iftmp.757;
  D.40976 = tb->num_methods;
  num = D.40976 + num;
  num.758 = (unsigned int) num;
  klass->method.count = num.758;
  D.40957 = klass->image;
  num.759 = (unsigned int) num;
  D.40979 = num.759 * 4;
  D.40980 = mono_image_alloc (D.40957, D.40979);
  klass->methods = D.40980;
  D.40971 = tb->ctors;
  if (D.40971 != 0B) goto <D.40982>; else goto <D.40983>;
  <D.40982>:
  D.40971 = tb->ctors;
  D.40984 = mono_array_length (D.40971);
  iftmp.760 = (int) D.40984;
  goto <D.40985>;
  <D.40983>:
  iftmp.760 = 0;
  <D.40985>:
  num = iftmp.760;
  i = 0;
  goto <D.25678>;
  <D.25677>:
  D.40986 = klass->methods;
  i.761 = (unsigned int) i;
  D.40988 = i.761 * 4;
  D.40989 = D.40986 + D.40988;
  D.40971 = tb->ctors;
  i.762 = (unsigned int) i;
  D.40991 = mono_array_addr_with_size (D.40971, 4, i.762);
  D.40992 = MEM[(struct MonoReflectionCtorBuilder * *)D.40991];
  D.40993 = ctorbuilder_to_mono_method (klass, D.40992);
  *D.40989 = D.40993;
  i = i + 1;
  <D.25678>:
  if (i < num) goto <D.25677>; else goto <D.25679>;
  <D.25679>:
  num = tb->num_methods;
  j = i;
  i = 0;
  goto <D.25681>;
  <D.25680>:
  D.40986 = klass->methods;
  j.763 = j;
  j = j.763 + 1;
  j.764 = (unsigned int) j.763;
  D.40996 = j.764 * 4;
  D.40997 = D.40986 + D.40996;
  D.40998 = tb->methods;
  i.762 = (unsigned int) i;
  D.40999 = mono_array_addr_with_size (D.40998, 4, i.762);
  D.41000 = MEM[(struct MonoReflectionMethodBuilder * *)D.40999];
  D.41001 = methodbuilder_to_mono_method (klass, D.41000);
  *D.40997 = D.41001;
  i = i + 1;
  <D.25681>:
  if (i < num) goto <D.25680>; else goto <D.25682>;
  <D.25682>:
  D.41002 = tb->interfaces;
  if (D.41002 != 0B) goto <D.41003>; else goto <D.41004>;
  <D.41003>:
  D.41002 = tb->interfaces;
  D.41005 = mono_array_length (D.41002);
  D.41006 = (short unsigned int) D.41005;
  klass->interface_count = D.41006;
  D.40957 = klass->image;
  D.41007 = klass->interface_count;
  D.41008 = (unsigned int) D.41007;
  D.41009 = D.41008 * 4;
  D.41010 = mono_image_alloc (D.40957, D.41009);
  klass->interfaces = D.41010;
  i = 0;
  goto <D.25685>;
  <D.25684>:
  {
    struct MonoType * iface;

    D.41002 = tb->interfaces;
    i.762 = (unsigned int) i;
    D.41011 = mono_array_addr_with_size (D.41002, 4, i.762);
    D.41012 = MEM[(void * *)D.41011];
    iface = mono_reflection_type_get_handle (D.41012);
    D.41013 = klass->interfaces;
    i.761 = (unsigned int) i;
    D.40988 = i.761 * 4;
    D.41014 = D.41013 + D.40988;
    D.41015 = mono_class_from_mono_type (iface);
    *D.41014 = D.41015;
    D.41013 = klass->interfaces;
    i.761 = (unsigned int) i;
    D.40988 = i.761 * 4;
    D.41014 = D.41013 + D.40988;
    D.41016 = *D.41014;
    ensure_runtime_vtable (D.41016);
  }
  i = i + 1;
  <D.25685>:
  D.41007 = klass->interface_count;
  D.41017 = (int) D.41007;
  if (D.41017 > i) goto <D.25684>; else goto <D.25686>;
  <D.25686>:
  klass->interfaces_inited = 1;
  <D.41004>:
  goto <D.41018>;
  <D.40969>:
  D.40962 = klass->generic_class;
  if (D.40962 != 0B) goto <D.41019>; else goto <D.41020>;
  <D.41019>:
  ensure_generic_class_runtime_vtable (klass);
  <D.41020>:
  <D.41018>:
  D.41021 = klass->flags;
  D.41022 = D.41021 & 32;
  if (D.41022 != 0) goto <D.41023>; else goto <D.41024>;
  <D.41023>:
  {
    int slot_num;

    slot_num = 0;
    i = 0;
    goto <D.25690>;
    <D.25689>:
    {
      struct MonoMethod * im;

      D.40986 = klass->methods;
      i.761 = (unsigned int) i;
      D.40988 = i.761 * 4;
      D.40989 = D.40986 + D.40988;
      im = *D.40989;
      D.41025 = im->flags;
      D.41026 = (int) D.41025;
      D.41027 = D.41026 & 16;
      if (D.41027 == 0) goto <D.41028>; else goto <D.41029>;
      <D.41028>:
      slot_num.765 = slot_num;
      slot_num = slot_num.765 + 1;
      D.41031 = (short int) slot_num.765;
      im->slot = D.41031;
      <D.41029>:
    }
    i = i + 1;
    <D.25690>:
    i.766 = (unsigned int) i;
    D.41033 = klass->method.count;
    if (i.766 < D.41033) goto <D.25689>; else goto <D.25691>;
    <D.25691>:
    klass->interfaces_packed = 0B;
    mono_class_setup_interface_offsets (klass);
    mono_class_setup_interface_id (klass);
  }
  <D.41024>:
}


ensure_generic_class_runtime_vtable (struct MonoClass * klass)
{
  struct MonoGenericClass * D.41035;
  struct MonoClass * gklass;

  D.41035 = klass->generic_class;
  gklass = D.41035->container_class;
  ensure_runtime_vtable (gklass);
  fix_partial_generic_class (klass);
}


typebuilder_setup_fields (struct MonoClass * klass, struct MonoError * error)
{
  int D.41036;
  unsigned int D.41037;
  int D.41038;
  int D.41041;
  unsigned int D.41042;
  unsigned int D.41043;
  const char * D.41046;
  unsigned char D.41047;
  <unnamed-unsigned:4> D.41048;
  int D.41049;
  int D.41050;
  unsigned int D.41051;
  unsigned int D.41054;
  unsigned int D.41055;
  int D.41056;
  unsigned int D.41057;
  void * D.41058;
  struct MonoClassExt * D.41059;
  unsigned int D.41060;
  void * D.41061;
  struct MonoArray * D.41062;
  unsigned int i.767;
  char * D.41064;
  struct MonoClassField * D.41065;
  unsigned int i.768;
  unsigned int D.41067;
  struct MonoString * D.41068;
  char * D.41069;
  int D.41070;
  unsigned int D.41073;
  struct MonoImage * D.41076;
  struct MonoObject * D.41077;
  struct MonoType * D.41078;
  struct MonoType * D.41079;
  struct MonoType * D.41080;
  short unsigned int D.41081;
  struct MonoType * D.41083;
  unsigned int D.41084;
  struct MonoFieldDefaultValue * D.41089;
  unsigned int D.41090;
  struct MonoFieldDefaultValue * D.41091;
  int D.41092;
  struct MonoArray * D.41095;
  unsigned char D.41096;
  unsigned char D.41097;
  short unsigned int D.41100;
  int D.41101;
  int D.41102;
  struct MonoClass * D.41105;
  struct MonoClass * D.41106;
  struct MonoObject * D.41107;
  short unsigned int D.41110;
  MonoTypeEnum * D.41111;
  char * D.41112;
  const char * p2.769;
  int p2.770;
  int p.771;
  int D.41116;
  unsigned int D.41117;
  void * D.41118;
  const char * D.41119;
  unsigned int i.772;
  struct MonoReflectionTypeBuilder * tb;
  struct MonoReflectionFieldBuilder * fb;
  struct MonoClassField * field;
  struct MonoImage * image;
  const char * p;
  const char * p2;
  int i;
  guint32 len;
  guint32 idx;
  guint32 real_size;

  try
    {
      tb = mono_class_get_ref_info (klass);
      image = klass->image;
      real_size = 0;
      D.41036 = tb->num_fields;
      D.41037 = (unsigned int) D.41036;
      klass->field.count = D.41037;
      klass->field.first = 0;
      mono_error_init (error);
      D.41038 = tb->class_size;
      if (D.41038 != 0) goto <D.41039>; else goto <D.41040>;
      <D.41039>:
      D.41041 = tb->packing_size;
      D.41042 = (unsigned int) D.41041;
      D.41043 = D.41042 & 4294967280;
      if (D.41043 != 0) goto <D.41044>; else goto <D.41045>;
      <D.41044>:
      {
        char * err_msg;

        D.41046 = klass->name;
        D.41041 = tb->packing_size;
        err_msg = monoeg_g_strdup_printf ("Could not load struct \'%s\' with packing size %d >= 16", D.41046, D.41041);
        mono_class_set_failure (klass, 7, err_msg);
        return;
      }
      <D.41045>:
      D.41041 = tb->packing_size;
      D.41047 = (unsigned char) D.41041;
      D.41048 = (<unnamed-unsigned:4>) D.41047;
      klass->packing_size = D.41048;
      D.41049 = klass->instance_size;
      D.41038 = tb->class_size;
      D.41050 = D.41049 + D.41038;
      real_size = (guint32) D.41050;
      <D.41040>:
      D.41051 = klass->field.count;
      if (D.41051 == 0) goto <D.41052>; else goto <D.41053>;
      <D.41052>:
      D.41049 = klass->instance_size;
      D.41054 = (unsigned int) D.41049;
      D.41055 = MAX_EXPR <D.41054, real_size>;
      D.41056 = (int) D.41055;
      klass->instance_size = D.41056;
      return;
      <D.41053>:
      D.41051 = klass->field.count;
      D.41057 = D.41051 * 16;
      D.41058 = image_g_malloc0 (image, D.41057);
      klass->fields = D.41058;
      mono_class_alloc_ext (klass);
      D.41059 = klass->ext;
      D.41051 = klass->field.count;
      D.41060 = D.41051 * 8;
      D.41061 = image_g_malloc0 (image, D.41060);
      D.41059->field_def_values = D.41061;
      klass->size_inited = 1;
      i = 0;
      goto <D.25756>;
      <D.25755>:
      {
        struct MonoArray * rva_data;

        D.41062 = tb->fields;
        i.767 = (unsigned int) i;
        D.41064 = mono_array_addr_with_size (D.41062, 4, i.767);
        fb = MEM[(void * *)D.41064];
        D.41065 = klass->fields;
        i.768 = (unsigned int) i;
        D.41067 = i.768 * 16;
        field = D.41065 + D.41067;
        D.41068 = fb->name;
        D.41069 = mono_string_to_utf8_image (image, D.41068, error);
        field->name = D.41069;
        D.41070 = mono_error_ok (error);
        if (D.41070 == 0) goto <D.41071>; else goto <D.41072>;
        <D.41071>:
        return;
        <D.41072>:
        D.41073 = fb->attrs;
        if (D.41073 != 0) goto <D.41074>; else goto <D.41075>;
        <D.41074>:
        D.41076 = klass->image;
        D.41077 = fb->type;
        D.41078 = mono_reflection_type_get_handle (D.41077);
        D.41079 = mono_metadata_type_dup (D.41076, D.41078);
        field->type = D.41079;
        D.41080 = field->type;
        D.41073 = fb->attrs;
        D.41081 = (short unsigned int) D.41073;
        D.41080->attrs = D.41081;
        goto <D.41082>;
        <D.41075>:
        D.41077 = fb->type;
        D.41083 = mono_reflection_type_get_handle (D.41077);
        field->type = D.41083;
        <D.41082>:
        D.41073 = fb->attrs;
        D.41084 = D.41073 & 256;
        if (D.41084 != 0) goto <D.41085>; else goto <D.41086>;
        <D.41085>:
        rva_data = fb->rva_data;
        if (rva_data != 0B) goto <D.41087>; else goto <D.41088>;
        <D.41087>:
        {
          char * base;
          size_t size;
          char * data;

          base = mono_array_addr_with_size (rva_data, 1, 0);
          size = mono_array_length (rva_data);
          D.41076 = klass->image;
          data = mono_image_alloc (D.41076, size);
          memcpy (data, base, size);
          D.41059 = klass->ext;
          D.41089 = D.41059->field_def_values;
          i.768 = (unsigned int) i;
          D.41090 = i.768 * 8;
          D.41091 = D.41089 + D.41090;
          D.41091->data = data;
        }
        <D.41088>:
        <D.41086>:
        D.41092 = fb->offset;
        if (D.41092 != -1) goto <D.41093>; else goto <D.41094>;
        <D.41093>:
        D.41092 = fb->offset;
        field->offset = D.41092;
        <D.41094>:
        field->parent = klass;
        fb->handle = field;
        D.41076 = klass->image;
        D.41095 = fb->cattrs;
        mono_save_custom_attrs (D.41076, field, D.41095);
        D.41096 = BIT_FIELD_REF <*klass, 8, 160>;
        D.41097 = D.41096 & 16;
        if (D.41097 != 0) goto <D.41098>; else goto <D.41099>;
        <D.41098>:
        D.41080 = field->type;
        D.41100 = D.41080->attrs;
        D.41101 = (int) D.41100;
        D.41102 = D.41101 & 16;
        if (D.41102 == 0) goto <D.41103>; else goto <D.41104>;
        <D.41103>:
        D.41080 = field->type;
        D.41105 = mono_class_from_mono_type (D.41080);
        klass->element_class = D.41105;
        D.41106 = klass->element_class;
        klass->cast_class = D.41106;
        <D.41104>:
        <D.41099>:
        D.41107 = fb->def_value;
        if (D.41107 != 0B) goto <D.41108>; else goto <D.41109>;
        <D.41108>:
        {
          struct MonoDynamicImage * assembly;

          assembly = klass->image;
          D.41080 = field->type;
          D.41080 = field->type;
          D.41100 = D.41080->attrs;
          D.41110 = D.41100 | 32768;
          D.41080->attrs = D.41110;
          D.41107 = fb->def_value;
          D.41059 = klass->ext;
          D.41089 = D.41059->field_def_values;
          i.768 = (unsigned int) i;
          D.41090 = i.768 * 8;
          D.41091 = D.41089 + D.41090;
          D.41111 = &D.41091->def_type;
          idx = encode_constant (assembly, D.41107, D.41111);
          D.41112 = assembly->blob.data;
          p = D.41112 + idx;
          len = mono_metadata_decode_blob_size (p, &p2);
          p2.769 = p2;
          p2.770 = (int) p2.769;
          p.771 = (int) p;
          D.41116 = p2.770 - p.771;
          D.41117 = (unsigned int) D.41116;
          len = D.41117 + len;
          D.41059 = klass->ext;
          D.41089 = D.41059->field_def_values;
          i.768 = (unsigned int) i;
          D.41090 = i.768 * 8;
          D.41091 = D.41089 + D.41090;
          D.41118 = mono_image_alloc (image, len);
          D.41091->data = D.41118;
          D.41059 = klass->ext;
          D.41089 = D.41059->field_def_values;
          i.768 = (unsigned int) i;
          D.41090 = i.768 * 8;
          D.41091 = D.41089 + D.41090;
          D.41119 = D.41091->data;
          memcpy (D.41119, p, len);
        }
        <D.41109>:
      }
      i = i + 1;
      <D.25756>:
      i.772 = (unsigned int) i;
      D.41051 = klass->field.count;
      if (i.772 < D.41051) goto <D.25755>; else goto <D.25757>;
      <D.25757>:
      D.41049 = klass->instance_size;
      D.41054 = (unsigned int) D.41049;
      D.41055 = MAX_EXPR <D.41054, real_size>;
      D.41056 = (int) D.41055;
      klass->instance_size = D.41056;
      mono_class_layout_fields (klass);
    }
  finally
    {
      p2 = {CLOBBER};
    }
}


typebuilder_setup_properties (struct MonoClass * klass, struct MonoError * error)
{
  struct MonoClassExt * D.41124;
  void * D.41127;
  uintptr_t iftmp.773;
  struct MonoArray * D.41129;
  unsigned int D.41133;
  unsigned int D.41134;
  unsigned int i.774;
  char * D.41136;
  unsigned int i.775;
  unsigned int D.41138;
  struct MonoProperty * D.41139;
  unsigned int D.41140;
  struct MonoString * D.41141;
  char * D.41142;
  int D.41143;
  struct MonoReflectionMethodBuilder * D.41146;
  struct MonoMethod * D.41149;
  struct MonoReflectionMethodBuilder * D.41150;
  struct MonoMethod * D.41153;
  struct MonoImage * D.41154;
  void * D.41155;
  struct MonoArray * D.41156;
  struct MonoObject * D.41157;
  struct MonoFieldDefaultValue * D.41160;
  unsigned int D.41163;
  void * D.41164;
  unsigned int D.41165;
  unsigned int D.41166;
  unsigned int D.41167;
  struct MonoFieldDefaultValue * D.41168;
  MonoTypeEnum * D.41169;
  char * D.41170;
  const char * p2.776;
  int p2.777;
  int p.778;
  int D.41174;
  unsigned int D.41175;
  void * D.41176;
  const char * D.41177;
  unsigned int i.779;
  struct MonoReflectionTypeBuilder * tb;
  struct MonoReflectionPropertyBuilder * pb;
  struct MonoImage * image;
  struct MonoProperty * properties;
  int i;

  tb = mono_class_get_ref_info (klass);
  image = klass->image;
  mono_error_init (error);
  D.41124 = klass->ext;
  if (D.41124 == 0B) goto <D.41125>; else goto <D.41126>;
  <D.41125>:
  D.41127 = image_g_malloc0 (image, 40);
  klass->ext = D.41127;
  <D.41126>:
  D.41124 = klass->ext;
  D.41129 = tb->properties;
  if (D.41129 != 0B) goto <D.41130>; else goto <D.41131>;
  <D.41130>:
  D.41129 = tb->properties;
  iftmp.773 = mono_array_length (D.41129);
  goto <D.41132>;
  <D.41131>:
  iftmp.773 = 0;
  <D.41132>:
  D.41124->property.count = iftmp.773;
  D.41124 = klass->ext;
  D.41124->property.first = 0;
  D.41124 = klass->ext;
  D.41133 = D.41124->property.count;
  D.41134 = D.41133 * 20;
  properties = image_g_malloc0 (image, D.41134);
  D.41124 = klass->ext;
  D.41124->properties = properties;
  i = 0;
  goto <D.25773>;
  <D.25772>:
  D.41129 = tb->properties;
  i.774 = (unsigned int) i;
  D.41136 = mono_array_addr_with_size (D.41129, 4, i.774);
  pb = MEM[(struct MonoReflectionPropertyBuilder * *)D.41136];
  i.775 = (unsigned int) i;
  D.41138 = i.775 * 20;
  D.41139 = properties + D.41138;
  D.41139->parent = klass;
  i.775 = (unsigned int) i;
  D.41138 = i.775 * 20;
  D.41139 = properties + D.41138;
  D.41140 = pb->attrs;
  D.41139->attrs = D.41140;
  i.775 = (unsigned int) i;
  D.41138 = i.775 * 20;
  D.41139 = properties + D.41138;
  D.41141 = pb->name;
  D.41142 = mono_string_to_utf8_image (image, D.41141, error);
  D.41139->name = D.41142;
  D.41143 = mono_error_ok (error);
  if (D.41143 == 0) goto <D.41144>; else goto <D.41145>;
  <D.41144>:
  return;
  <D.41145>:
  D.41146 = pb->get_method;
  if (D.41146 != 0B) goto <D.41147>; else goto <D.41148>;
  <D.41147>:
  i.775 = (unsigned int) i;
  D.41138 = i.775 * 20;
  D.41139 = properties + D.41138;
  D.41146 = pb->get_method;
  D.41149 = D.41146->mhandle;
  D.41139->get = D.41149;
  <D.41148>:
  D.41150 = pb->set_method;
  if (D.41150 != 0B) goto <D.41151>; else goto <D.41152>;
  <D.41151>:
  i.775 = (unsigned int) i;
  D.41138 = i.775 * 20;
  D.41139 = properties + D.41138;
  D.41150 = pb->set_method;
  D.41153 = D.41150->mhandle;
  D.41139->set = D.41153;
  <D.41152>:
  D.41154 = klass->image;
  i.775 = (unsigned int) i;
  D.41138 = i.775 * 20;
  D.41155 = properties + D.41138;
  D.41156 = pb->cattrs;
  mono_save_custom_attrs (D.41154, D.41155, D.41156);
  D.41157 = pb->def_value;
  if (D.41157 != 0B) goto <D.41158>; else goto <D.41159>;
  <D.41158>:
  {
    guint32 len;
    guint32 idx;
    const char * p;
    const char * p2;
    struct MonoDynamicImage * assembly;

    try
      {
        assembly = klass->image;
        D.41124 = klass->ext;
        D.41160 = D.41124->prop_def_values;
        if (D.41160 == 0B) goto <D.41161>; else goto <D.41162>;
        <D.41161>:
        D.41124 = klass->ext;
        D.41124 = klass->ext;
        D.41133 = D.41124->property.count;
        D.41163 = D.41133 * 8;
        D.41164 = image_g_malloc0 (image, D.41163);
        D.41124->prop_def_values = D.41164;
        <D.41162>:
        i.775 = (unsigned int) i;
        D.41138 = i.775 * 20;
        D.41139 = properties + D.41138;
        i.775 = (unsigned int) i;
        D.41138 = i.775 * 20;
        D.41139 = properties + D.41138;
        D.41165 = D.41139->attrs;
        D.41166 = D.41165 | 4096;
        D.41139->attrs = D.41166;
        D.41157 = pb->def_value;
        D.41124 = klass->ext;
        D.41160 = D.41124->prop_def_values;
        i.775 = (unsigned int) i;
        D.41167 = i.775 * 8;
        D.41168 = D.41160 + D.41167;
        D.41169 = &D.41168->def_type;
        idx = encode_constant (assembly, D.41157, D.41169);
        D.41170 = assembly->blob.data;
        p = D.41170 + idx;
        len = mono_metadata_decode_blob_size (p, &p2);
        p2.776 = p2;
        p2.777 = (int) p2.776;
        p.778 = (int) p;
        D.41174 = p2.777 - p.778;
        D.41175 = (unsigned int) D.41174;
        len = D.41175 + len;
        D.41124 = klass->ext;
        D.41160 = D.41124->prop_def_values;
        i.775 = (unsigned int) i;
        D.41167 = i.775 * 8;
        D.41168 = D.41160 + D.41167;
        D.41176 = mono_image_alloc (image, len);
        D.41168->data = D.41176;
        D.41124 = klass->ext;
        D.41160 = D.41124->prop_def_values;
        i.775 = (unsigned int) i;
        D.41167 = i.775 * 8;
        D.41168 = D.41160 + D.41167;
        D.41177 = D.41168->data;
        memcpy (D.41177, p, len);
      }
    finally
      {
        p2 = {CLOBBER};
      }
  }
  <D.41159>:
  i = i + 1;
  <D.25773>:
  i.779 = (unsigned int) i;
  D.41124 = klass->ext;
  D.41133 = D.41124->property.count;
  if (i.779 < D.41133) goto <D.25772>; else goto <D.25774>;
  <D.25774>:
}


typebuilder_setup_events (struct MonoClass * klass, struct MonoError * error)
{
  struct MonoClassExt * D.41180;
  void * D.41183;
  uintptr_t iftmp.780;
  struct MonoArray * D.41185;
  unsigned int D.41189;
  unsigned int D.41190;
  unsigned int i.781;
  char * D.41192;
  unsigned int i.782;
  unsigned int D.41194;
  struct MonoEvent * D.41195;
  unsigned int D.41196;
  struct MonoString * D.41197;
  char * D.41198;
  int D.41199;
  struct MonoReflectionMethodBuilder * D.41202;
  struct MonoMethod * D.41205;
  struct MonoReflectionMethodBuilder * D.41206;
  struct MonoMethod * D.41209;
  struct MonoReflectionMethodBuilder * D.41210;
  struct MonoMethod * D.41213;
  struct MonoArray * D.41214;
  unsigned int D.41217;
  unsigned int D.41218;
  unsigned int D.41219;
  void * D.41220;
  unsigned int j.783;
  char * D.41222;
  struct MonoMethod * * D.41223;
  unsigned int j.784;
  unsigned int D.41225;
  struct MonoMethod * * D.41226;
  struct MonoMethod * D.41227;
  unsigned int D.41228;
  struct MonoImage * D.41229;
  void * D.41230;
  struct MonoArray * D.41231;
  unsigned int i.785;
  struct MonoReflectionTypeBuilder * tb;
  struct MonoReflectionEventBuilder * eb;
  struct MonoImage * image;
  struct MonoEvent * events;
  int i;

  tb = mono_class_get_ref_info (klass);
  image = klass->image;
  mono_error_init (error);
  D.41180 = klass->ext;
  if (D.41180 == 0B) goto <D.41181>; else goto <D.41182>;
  <D.41181>:
  D.41183 = image_g_malloc0 (image, 40);
  klass->ext = D.41183;
  <D.41182>:
  D.41180 = klass->ext;
  D.41185 = tb->events;
  if (D.41185 != 0B) goto <D.41186>; else goto <D.41187>;
  <D.41186>:
  D.41185 = tb->events;
  iftmp.780 = mono_array_length (D.41185);
  goto <D.41188>;
  <D.41187>:
  iftmp.780 = 0;
  <D.41188>:
  D.41180->event.count = iftmp.780;
  D.41180 = klass->ext;
  D.41180->event.first = 0;
  D.41180 = klass->ext;
  D.41189 = D.41180->event.count;
  D.41190 = D.41189 * 28;
  events = image_g_malloc0 (image, D.41190);
  D.41180 = klass->ext;
  D.41180->events = events;
  i = 0;
  goto <D.25801>;
  <D.25800>:
  D.41185 = tb->events;
  i.781 = (unsigned int) i;
  D.41192 = mono_array_addr_with_size (D.41185, 4, i.781);
  eb = MEM[(struct MonoReflectionEventBuilder * *)D.41192];
  i.782 = (unsigned int) i;
  D.41194 = i.782 * 28;
  D.41195 = events + D.41194;
  D.41195->parent = klass;
  i.782 = (unsigned int) i;
  D.41194 = i.782 * 28;
  D.41195 = events + D.41194;
  D.41196 = eb->attrs;
  D.41195->attrs = D.41196;
  i.782 = (unsigned int) i;
  D.41194 = i.782 * 28;
  D.41195 = events + D.41194;
  D.41197 = eb->name;
  D.41198 = mono_string_to_utf8_image (image, D.41197, error);
  D.41195->name = D.41198;
  D.41199 = mono_error_ok (error);
  if (D.41199 == 0) goto <D.41200>; else goto <D.41201>;
  <D.41200>:
  return;
  <D.41201>:
  D.41202 = eb->add_method;
  if (D.41202 != 0B) goto <D.41203>; else goto <D.41204>;
  <D.41203>:
  i.782 = (unsigned int) i;
  D.41194 = i.782 * 28;
  D.41195 = events + D.41194;
  D.41202 = eb->add_method;
  D.41205 = D.41202->mhandle;
  D.41195->add = D.41205;
  <D.41204>:
  D.41206 = eb->remove_method;
  if (D.41206 != 0B) goto <D.41207>; else goto <D.41208>;
  <D.41207>:
  i.782 = (unsigned int) i;
  D.41194 = i.782 * 28;
  D.41195 = events + D.41194;
  D.41206 = eb->remove_method;
  D.41209 = D.41206->mhandle;
  D.41195->remove = D.41209;
  <D.41208>:
  D.41210 = eb->raise_method;
  if (D.41210 != 0B) goto <D.41211>; else goto <D.41212>;
  <D.41211>:
  i.782 = (unsigned int) i;
  D.41194 = i.782 * 28;
  D.41195 = events + D.41194;
  D.41210 = eb->raise_method;
  D.41213 = D.41210->mhandle;
  D.41195->raise = D.41213;
  <D.41212>:
  D.41214 = eb->other_methods;
  if (D.41214 != 0B) goto <D.41215>; else goto <D.41216>;
  <D.41215>:
  {
    int j;

    i.782 = (unsigned int) i;
    D.41194 = i.782 * 28;
    D.41195 = events + D.41194;
    D.41214 = eb->other_methods;
    D.41217 = mono_array_length (D.41214);
    D.41218 = D.41217 + 1;
    D.41219 = D.41218 * 4;
    D.41220 = image_g_malloc0 (image, D.41219);
    D.41195->other = D.41220;
    j = 0;
    goto <D.25798>;
    <D.25797>:
    {
      struct MonoReflectionMethodBuilder * mb;

      D.41214 = eb->other_methods;
      j.783 = (unsigned int) j;
      D.41222 = mono_array_addr_with_size (D.41214, 4, j.783);
      mb = MEM[(struct MonoReflectionMethodBuilder * *)D.41222];
      i.782 = (unsigned int) i;
      D.41194 = i.782 * 28;
      D.41195 = events + D.41194;
      D.41223 = D.41195->other;
      j.784 = (unsigned int) j;
      D.41225 = j.784 * 4;
      D.41226 = D.41223 + D.41225;
      D.41227 = mb->mhandle;
      *D.41226 = D.41227;
    }
    j = j + 1;
    <D.25798>:
    j.783 = (unsigned int) j;
    D.41214 = eb->other_methods;
    D.41228 = mono_array_length (D.41214);
    if (j.783 < D.41228) goto <D.25797>; else goto <D.25799>;
    <D.25799>:
  }
  <D.41216>:
  D.41229 = klass->image;
  i.782 = (unsigned int) i;
  D.41194 = i.782 * 28;
  D.41230 = events + D.41194;
  D.41231 = eb->cattrs;
  mono_save_custom_attrs (D.41229, D.41230, D.41231);
  i = i + 1;
  <D.25801>:
  i.785 = (unsigned int) i;
  D.41180 = klass->ext;
  D.41189 = D.41180->event.count;
  if (i.785 < D.41189) goto <D.25800>; else goto <D.25802>;
  <D.25802>:
}


mono_reflection_initialize_generic_parameter (struct MonoReflectionGenericParam * gparam)
{
  struct MonoReflectionTypeBuilder * D.41234;
  struct MonoReflectionModuleBuilder * D.41235;
  struct MonoDynamicImage * D.41236;
  struct MonoString * D.41237;
  char * D.41238;
  int D.41239;
  _Bool D.41240;
  long int D.41241;
  long int D.41242;
  unsigned int D.41245;
  short unsigned int D.41246;
  struct MonoReflectionMethodBuilder * D.41247;
  struct MonoGenericContainer * D.41250;
  struct MonoType * D.41253;
  struct MonoImage * D.41254;
  void * D.41255;
  struct MonoGenericContainer * D.41259;
  struct MonoType * D.41262;
  struct MonoImage * D.41263;
  void * D.41264;
  _Bool D.41265;
  int D.41266;
  struct MonoType * D.41267;
  struct MonoGenericParamFull * param;
  struct MonoImage * image;
  struct MonoClass * pklass;
  struct MonoError error;

  try
    {
      D.41234 = gparam->tbuilder;
      D.41235 = D.41234->module;
      D.41236 = D.41235->dynamic_image;
      image = &D.41236->image;
      param = mono_image_alloc0 (image, 32);
      D.41237 = gparam->name;
      D.41238 = mono_string_to_utf8_image (image, D.41237, &error);
      param->info.name = D.41238;
      D.41239 = mono_error_ok (&error);
      D.41240 = D.41239 == 0;
      D.41241 = (long int) D.41240;
      D.41242 = __builtin_expect (D.41241, 0);
      if (D.41242 != 0) goto <D.41243>; else goto <D.41244>;
      <D.41243>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11435, "mono_error_ok (&error)");
      <D.41244>:
      D.41245 = gparam->index;
      D.41246 = (short unsigned int) D.41245;
      param->param.num = D.41246;
      D.41247 = gparam->mbuilder;
      if (D.41247 != 0B) goto <D.41248>; else goto <D.41249>;
      <D.41248>:
      D.41247 = gparam->mbuilder;
      D.41250 = D.41247->generic_container;
      if (D.41250 == 0B) goto <D.41251>; else goto <D.41252>;
      <D.41251>:
      {
        struct MonoReflectionTypeBuilder * tb;
        struct MonoClass * klass;

        D.41247 = gparam->mbuilder;
        tb = D.41247->type;
        D.41253 = mono_reflection_type_get_handle (tb);
        klass = mono_class_from_mono_type (D.41253);
        D.41247 = gparam->mbuilder;
        D.41254 = klass->image;
        D.41255 = mono_image_alloc0 (D.41254, 28);
        D.41247->generic_container = D.41255;
        D.41247 = gparam->mbuilder;
        D.41250 = D.41247->generic_container;
        D.41250->is_method = -1;
        D.41247 = gparam->mbuilder;
        D.41250 = D.41247->generic_container;
        D.41254 = klass->image;
        D.41250->image = D.41254;
      }
      <D.41252>:
      D.41247 = gparam->mbuilder;
      D.41250 = D.41247->generic_container;
      param->param.owner = D.41250;
      goto <D.41256>;
      <D.41249>:
      D.41234 = gparam->tbuilder;
      if (D.41234 != 0B) goto <D.41257>; else goto <D.41258>;
      <D.41257>:
      D.41234 = gparam->tbuilder;
      D.41259 = D.41234->generic_container;
      if (D.41259 == 0B) goto <D.41260>; else goto <D.41261>;
      <D.41260>:
      {
        struct MonoClass * klass;

        D.41234 = gparam->tbuilder;
        D.41262 = mono_reflection_type_get_handle (D.41234);
        klass = mono_class_from_mono_type (D.41262);
        D.41234 = gparam->tbuilder;
        D.41263 = klass->image;
        D.41264 = mono_image_alloc0 (D.41263, 28);
        D.41234->generic_container = D.41264;
        D.41234 = gparam->tbuilder;
        D.41259 = D.41234->generic_container;
        D.41259->owner.klass = klass;
      }
      <D.41261>:
      D.41234 = gparam->tbuilder;
      D.41259 = D.41234->generic_container;
      param->param.owner = D.41259;
      <D.41258>:
      <D.41256>:
      D.41247 = gparam->mbuilder;
      D.41265 = D.41247 != 0B;
      D.41266 = (int) D.41265;
      pklass = mono_class_from_generic_parameter (param, image, D.41266);
      D.41267 = &pklass->byval_arg;
      gparam->type.type = D.41267;
      mono_class_set_ref_info (pklass, gparam);
      mono_image_append_class_to_reflection_info_set (pklass);
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_reflection_sighelper_get_signature_local (struct MonoReflectionSigHelper * sig)
{
  struct MonoDynamicImage * iftmp.786;
  uintptr_t iftmp.787;
  struct MonoArray * D.41273;
  char * D.41279;
  char * D.41280;
  int D.41281;
  char * D.41282;
  int D.41283;
  int D.41284;
  struct MonoDomain * D.41285;
  struct MonoClass * D.41286;
  char * D.41287;
  struct MonoArray * D.41288;
  struct MonoReflectionModuleBuilder * module;
  struct MonoDynamicImage * assembly;
  guint32 na;
  guint32 buflen;
  guint32 i;
  struct MonoArray * result;
  struct SigBuffer buf;

  try
    {
      module = sig->module;
      if (module != 0B) goto <D.41269>; else goto <D.41270>;
      <D.41269>:
      iftmp.786 = module->dynamic_image;
      goto <D.41271>;
      <D.41270>:
      iftmp.786 = 0B;
      <D.41271>:
      assembly = iftmp.786;
      D.41273 = sig->arguments;
      if (D.41273 != 0B) goto <D.41274>; else goto <D.41275>;
      <D.41274>:
      D.41273 = sig->arguments;
      iftmp.787 = mono_array_length (D.41273);
      goto <D.41276>;
      <D.41275>:
      iftmp.787 = 0;
      <D.41276>:
      na = iftmp.787;
      D.41273 = sig->arguments;
      check_array_for_usertypes (D.41273);
      sigbuffer_init (&buf, 32);
      sigbuffer_add_value (&buf, 7);
      sigbuffer_add_value (&buf, na);
      if (assembly != 0B) goto <D.41277>; else goto <D.41278>;
      <D.41277>:
      i = 0;
      goto <D.25883>;
      <D.25882>:
      {
        struct MonoReflectionType * type;

        D.41273 = sig->arguments;
        D.41279 = mono_array_addr_with_size (D.41273, 4, i);
        type = MEM[(struct MonoReflectionType * *)D.41279];
        encode_reflection_type (assembly, type, &buf);
      }
      i = i + 1;
      <D.25883>:
      if (i < na) goto <D.25882>; else goto <D.25884>;
      <D.25884>:
      <D.41278>:
      D.41280 = buf.p;
      D.41281 = (int) D.41280;
      D.41282 = buf.buf;
      D.41283 = (int) D.41282;
      D.41284 = D.41281 - D.41283;
      buflen = (guint32) D.41284;
      D.41285 = mono_domain_get ();
      D.41286 = mono_defaults.byte_class;
      result = mono_array_new (D.41285, D.41286, buflen);
      D.41287 = mono_array_addr_with_size (result, 1, 0);
      D.41282 = buf.buf;
      memcpy (D.41287, D.41282, buflen);
      sigbuffer_free (&buf);
      D.41288 = result;
      return D.41288;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


mono_reflection_sighelper_get_signature_field (struct MonoReflectionSigHelper * sig)
{
  struct MonoReflectionModuleBuilder * D.41291;
  uintptr_t iftmp.788;
  struct MonoArray * D.41293;
  char * D.41297;
  char * D.41298;
  int D.41299;
  char * D.41300;
  int D.41301;
  int D.41302;
  struct MonoDomain * D.41303;
  struct MonoClass * D.41304;
  char * D.41305;
  struct MonoArray * D.41306;
  struct MonoDynamicImage * assembly;
  guint32 na;
  guint32 buflen;
  guint32 i;
  struct MonoArray * result;
  struct SigBuffer buf;

  try
    {
      D.41291 = sig->module;
      assembly = D.41291->dynamic_image;
      D.41293 = sig->arguments;
      if (D.41293 != 0B) goto <D.41294>; else goto <D.41295>;
      <D.41294>:
      D.41293 = sig->arguments;
      iftmp.788 = mono_array_length (D.41293);
      goto <D.41296>;
      <D.41295>:
      iftmp.788 = 0;
      <D.41296>:
      na = iftmp.788;
      D.41293 = sig->arguments;
      check_array_for_usertypes (D.41293);
      sigbuffer_init (&buf, 32);
      sigbuffer_add_value (&buf, 6);
      i = 0;
      goto <D.25896>;
      <D.25895>:
      {
        struct MonoReflectionType * type;

        D.41293 = sig->arguments;
        D.41297 = mono_array_addr_with_size (D.41293, 4, i);
        type = MEM[(struct MonoReflectionType * *)D.41297];
        encode_reflection_type (assembly, type, &buf);
      }
      i = i + 1;
      <D.25896>:
      if (i < na) goto <D.25895>; else goto <D.25897>;
      <D.25897>:
      D.41298 = buf.p;
      D.41299 = (int) D.41298;
      D.41300 = buf.buf;
      D.41301 = (int) D.41300;
      D.41302 = D.41299 - D.41301;
      buflen = (guint32) D.41302;
      D.41303 = mono_domain_get ();
      D.41304 = mono_defaults.byte_class;
      result = mono_array_new (D.41303, D.41304, buflen);
      D.41305 = mono_array_addr_with_size (result, 1, 0);
      D.41300 = buf.buf;
      memcpy (D.41305, D.41300, buflen);
      sigbuffer_free (&buf);
      D.41306 = result;
      return D.41306;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


mono_reflection_create_dynamic_method (struct MonoReflectionDynamicMethod * mb)
{
  int D.41309;
  struct MonoException * D.41312;
  struct MonoReferenceQueue * dynamic_method_queue.789;
  int D.41318;
  unsigned int D.41319;
  int D.41320;
  unsigned int D.41321;
  unsigned int D.41322;
  void * D.41323;
  struct MonoArray * D.41324;
  unsigned int i.790;
  char * D.41326;
  int D.25929;
  int iftmp.791;
  int D.25928;
  struct MonoVTable * D.41330;
  struct MonoClass * D.41331;
  const char[14] * D.41332;
  unsigned char D.41333;
  int D.41334;
  unsigned char D.41335;
  int D.41336;
  _Bool D.41337;
  _Bool D.41338;
  _Bool D.41339;
  const unsigned char * D.41342;
  unsigned char D.41343;
  int D.41344;
  const unsigned char * D.41345;
  unsigned char D.41346;
  int D.41347;
  _Bool D.41348;
  _Bool D.41349;
  const unsigned char * D.41352;
  unsigned char D.41353;
  int D.41354;
  const unsigned char * D.41355;
  unsigned char D.41356;
  int D.41357;
  _Bool D.41358;
  _Bool D.41359;
  const unsigned char * D.41362;
  unsigned char D.41363;
  int D.41364;
  const unsigned char * D.41365;
  unsigned char D.41366;
  int D.41367;
  const char * D.41369;
  struct MonoMethod * D.41372;
  struct GSList * D.41376;
  struct GSList * D.41377;
  struct MonoClass * handle_class.792;
  struct MonoReflectionModule * D.41380;
  struct MonoImage * D.41381;
  <unnamed type> D.41385;
  struct MonoClass * handle_class.793;
  void * * D.41391;
  unsigned int i.794;
  unsigned int D.41393;
  void * * D.41394;
  sizetype i.795;
  sizetype D.41396;
  sizetype D.41397;
  void * * D.41398;
  struct MonoClass * iftmp.796;
  struct MonoReflectionType * D.41400;
  struct MonoType * D.41403;
  struct MonoDomain * D.41405;
  int D.41406;
  struct MonoMethod * D.41409;
  _Bool D.41410;
  long int D.41411;
  long int D.41412;
  void * * D.41415;
  void * D.41416;
  sizetype D.41419;
  sizetype D.41420;
  void * * D.41421;
  void * D.41422;
  struct MonoMethod * D.41425;
  void * D.41426;
  unsigned int D.41427;
  struct GSList * D.41428;
  struct MonoReferenceQueue * queue;
  struct MonoMethod * handle;
  struct DynamicMethodReleaseData * release_data;
  struct ReflectionMethodBuilder rmb;
  struct MonoMethodSignature * sig;
  struct MonoClass * klass;
  struct GSList * l;
  int i;

  try
    {
      D.41309 = mono_runtime_is_shutting_down ();
      if (D.41309 != 0) goto <D.41310>; else goto <D.41311>;
      <D.41310>:
      D.41312 = mono_get_exception_invalid_operation ("");
      mono_raise_exception (D.41312);
      <D.41311>:
      queue = dynamic_method_queue;
      if (queue == 0B) goto <D.41313>; else goto <D.41314>;
      <D.41313>:
      mono_loader_lock ();
      queue = dynamic_method_queue;
      if (queue == 0B) goto <D.41315>; else goto <D.41316>;
      <D.41315>:
      dynamic_method_queue.789 = mono_gc_reference_queue_new (free_dynamic_method);
      dynamic_method_queue = dynamic_method_queue.789;
      queue = dynamic_method_queue;
      <D.41316>:
      mono_loader_unlock ();
      <D.41314>:
      sig = dynamic_method_to_signature (mb);
      reflection_methodbuilder_from_dynamic_method (&rmb, mb);
      D.41318 = mb->nrefs;
      D.41319 = (unsigned int) D.41318;
      rmb.nrefs = D.41319;
      D.41318 = mb->nrefs;
      D.41320 = D.41318 + 1;
      D.41321 = (unsigned int) D.41320;
      D.41322 = D.41321 * 4;
      D.41323 = monoeg_malloc0 (D.41322);
      rmb.refs = D.41323;
      i = 0;
      goto <D.25933>;
      <D.25932>:
      {
        struct MonoClass * handle_class;
        void * ref;
        struct MonoObject * obj;

        try
          {
            D.41324 = mb->refs;
            i.790 = (unsigned int) i;
            D.41326 = mono_array_addr_with_size (D.41324, 4, i.790);
            obj = MEM[(struct MonoObject * *)D.41326];
            {
              size_t __s1_len;
              size_t __s2_len;

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

                D.41330 = obj->vtable;
                D.41331 = D.41330->klass;
                __s2 = D.41331->name;
                D.41332 = "DynamicMethod";
                D.41333 = MEM[(const unsigned char *)D.41332];
                D.41334 = (int) D.41333;
                D.41335 = *__s2;
                D.41336 = (int) D.41335;
                __result = D.41334 - D.41336;
                {
                  D.41337 = __s2_len != 0;
                  D.41338 = __result == 0;
                  D.41339 = D.41337 & D.41338;
                  if (D.41339 != 0) goto <D.41340>; else goto <D.41341>;
                  <D.41340>:
                  D.41342 = &MEM[(void *)"DynamicMethod" + 1B];
                  D.41343 = *D.41342;
                  D.41344 = (int) D.41343;
                  D.41345 = __s2 + 1;
                  D.41346 = *D.41345;
                  D.41347 = (int) D.41346;
                  __result = D.41344 - D.41347;
                  D.41348 = __s2_len > 1;
                  D.41338 = __result == 0;
                  D.41349 = D.41348 & D.41338;
                  if (D.41349 != 0) goto <D.41350>; else goto <D.41351>;
                  <D.41350>:
                  D.41352 = &MEM[(void *)"DynamicMethod" + 2B];
                  D.41353 = *D.41352;
                  D.41354 = (int) D.41353;
                  D.41355 = __s2 + 2;
                  D.41356 = *D.41355;
                  D.41357 = (int) D.41356;
                  __result = D.41354 - D.41357;
                  D.41358 = __s2_len > 2;
                  D.41338 = __result == 0;
                  D.41359 = D.41358 & D.41338;
                  if (D.41359 != 0) goto <D.41360>; else goto <D.41361>;
                  <D.41360>:
                  D.41362 = &MEM[(void *)"DynamicMethod" + 3B];
                  D.41363 = *D.41362;
                  D.41364 = (int) D.41363;
                  D.41365 = __s2 + 3;
                  D.41366 = *D.41365;
                  D.41367 = (int) D.41366;
                  __result = D.41364 - D.41367;
                  <D.41361>:
                  <D.41351>:
                  <D.41341>:
                }
                D.25928 = __result;
              }
              iftmp.791 = -D.25928;
              goto <D.41368>;
              <D.41329>:
              D.41330 = obj->vtable;
              D.41331 = D.41330->klass;
              D.41369 = D.41331->name;
              iftmp.791 = __builtin_strcmp (D.41369, "DynamicMethod");
              <D.41368>:
              D.25929 = iftmp.791;
            }
            if (D.25929 == 0) goto <D.41370>; else goto <D.41371>;
            <D.41370>:
            {
              struct MonoReflectionDynamicMethod * method;

              method = obj;
              D.41372 = method->mhandle;
              if (D.41372 != 0B) goto <D.41373>; else goto <D.41374>;
              <D.41373>:
              ref = method->mhandle;
              goto <D.41375>;
              <D.41374>:
              ref = method;
              D.41376 = method->referenced_by;
              D.41377 = monoeg_g_slist_append (D.41376, mb);
              method->referenced_by = D.41377;
              <D.41375>:
              handle_class.792 = mono_defaults.methodhandle_class;
              handle_class = handle_class.792;
            }
            goto <D.41379>;
            <D.41371>:
            {
              struct MonoException * ex;

              ex = 0B;
              D.41380 = mb->module;
              D.41381 = D.41380->image;
              ref = resolve_object (D.41381, obj, &handle_class, 0B);
              if (ref == 0B) goto <D.41382>; else goto <D.41383>;
              <D.41382>:
              ex = mono_get_exception_type_load (0B, 0B);
              goto <D.41384>;
              <D.41383>:
              D.41385 = mono_security_get_mode ();
              if (D.41385 == 1) goto <D.41386>; else goto <D.41387>;
              <D.41386>:
              handle_class.793 = handle_class;
              ex = mono_security_core_clr_ensure_dynamic_method_resolved_object (ref, handle_class.793);
              <D.41387>:
              <D.41384>:
              if (ex != 0B) goto <D.41389>; else goto <D.41390>;
              <D.41389>:
              D.41391 = rmb.refs;
              monoeg_g_free (D.41391);
              mono_raise_exception (ex);
              return;
              <D.41390>:
            }
            <D.41379>:
            D.41391 = rmb.refs;
            i.794 = (unsigned int) i;
            D.41393 = i.794 * 4;
            D.41394 = D.41391 + D.41393;
            *D.41394 = ref;
            D.41391 = rmb.refs;
            i.795 = (sizetype) i;
            D.41396 = i.795 + 1;
            D.41397 = D.41396 * 4;
            D.41398 = D.41391 + D.41397;
            handle_class.793 = handle_class;
            *D.41398 = handle_class.793;
          }
        finally
          {
            handle_class = {CLOBBER};
          }
      }
      i = i + 2;
      <D.25933>:
      D.41318 = mb->nrefs;
      if (D.41318 > i) goto <D.25932>; else goto <D.25934>;
      <D.25934>:
      D.41400 = mb->owner;
      if (D.41400 != 0B) goto <D.41401>; else goto <D.41402>;
      <D.41401>:
      D.41400 = mb->owner;
      D.41403 = mono_reflection_type_get_handle (D.41400);
      iftmp.796 = mono_class_from_mono_type (D.41403);
      goto <D.41404>;
      <D.41402>:
      iftmp.796 = mono_defaults.object_class;
      <D.41404>:
      klass = iftmp.796;
      handle = reflection_methodbuilder_to_mono_method (klass, &rmb, sig);
      mb->mhandle = handle;
      release_data = monoeg_malloc (8);
      release_data->handle = handle;
      D.41405 = mono_object_get_domain (mb);
      release_data->domain = D.41405;
      D.41406 = mono_gc_reference_queue_add (queue, mb, release_data);
      if (D.41406 == 0) goto <D.41407>; else goto <D.41408>;
      <D.41407>:
      monoeg_g_free (release_data);
      <D.41408>:
      l = mb->referenced_by;
      goto <D.25942>;
      <D.25941>:
      {
        struct MonoReflectionDynamicMethod * method;
        struct MonoMethodWrapper * wrapper;
        void * * data;

        method = l->data;
        wrapper = method->mhandle;
        D.41409 = method->mhandle;
        D.41410 = D.41409 == 0B;
        D.41411 = (long int) D.41410;
        D.41412 = __builtin_expect (D.41411, 0);
        if (D.41412 != 0) goto <D.41413>; else goto <D.41414>;
        <D.41413>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11637, "method->mhandle");
        <D.41414>:
        data = wrapper->method_data;
        i = 0;
        goto <D.25939>;
        <D.25938>:
        i.795 = (sizetype) i;
        D.41396 = i.795 + 1;
        D.41397 = D.41396 * 4;
        D.41415 = data + D.41397;
        D.41416 = *D.41415;
        if (D.41416 == mb) goto <D.41417>; else goto <D.41418>;
        <D.41417>:
        i.795 = (sizetype) i;
        D.41419 = i.795 + 2;
        D.41420 = D.41419 * 4;
        D.41421 = data + D.41420;
        D.41422 = *D.41421;
        handle_class.792 = mono_defaults.methodhandle_class;
        if (D.41422 == handle_class.792) goto <D.41423>; else goto <D.41424>;
        <D.41423>:
        i.795 = (sizetype) i;
        D.41396 = i.795 + 1;
        D.41397 = D.41396 * 4;
        D.41415 = data + D.41397;
        D.41425 = mb->mhandle;
        *D.41415 = D.41425;
        <D.41424>:
        <D.41418>:
        i = i + 2;
        <D.25939>:
        i.794 = (unsigned int) i;
        D.41426 = *data;
        D.41427 = (unsigned int) D.41426;
        if (i.794 < D.41427) goto <D.25938>; else goto <D.25940>;
        <D.25940>:
      }
      l = l->next;
      <D.25942>:
      if (l != 0B) goto <D.25941>; else goto <D.25943>;
      <D.25943>:
      D.41428 = mb->referenced_by;
      monoeg_g_slist_free (D.41428);
      D.41391 = rmb.refs;
      monoeg_g_free (D.41391);
      mb->ilgen = 0B;
    }
  finally
    {
      rmb = {CLOBBER};
    }
}


free_dynamic_method (void * dynamic_method)
{
  struct MonoDomain * D.41434;
  struct MonoMethod * D.41435;
  struct DynamicMethodReleaseData * data;

  data = dynamic_method;
  D.41434 = data->domain;
  D.41435 = data->handle;
  mono_runtime_free_method (D.41434, D.41435);
  monoeg_g_free (data);
}


dynamic_method_to_signature (struct MonoReflectionDynamicMethod * method)
{
  struct MonoArray * D.41436;
  unsigned int D.41437;
  unsigned int D.41438;
  _Bool D.41439;
  struct MonoType * iftmp.797;
  struct MonoReflectionType * D.41441;
  struct MonoClass * D.41445;
  struct MonoMethodSignature * D.41446;
  struct MonoMethodSignature * sig;

  D.41436 = method->parameters;
  sig = parameters_to_signature (0B, D.41436);
  D.41437 = method->attrs;
  D.41438 = D.41437 & 16;
  D.41439 = D.41438 == 0;
  sig->hasthis = D.41439;
  D.41441 = method->rtype;
  if (D.41441 != 0B) goto <D.41442>; else goto <D.41443>;
  <D.41442>:
  D.41441 = method->rtype;
  iftmp.797 = mono_reflection_type_get_handle (D.41441);
  goto <D.41444>;
  <D.41443>:
  D.41445 = mono_defaults.void_class;
  iftmp.797 = &D.41445->byval_arg;
  <D.41444>:
  sig->ret = iftmp.797;
  sig->generic_param_count = 0;
  D.41446 = sig;
  return D.41446;
}


reflection_methodbuilder_from_dynamic_method (struct ReflectionMethodBuilder * rmb, struct MonoReflectionDynamicMethod * mb)
{
  struct MonoReflectionILGen * D.41448;
  struct MonoReflectionType * D.41449;
  struct MonoArray * D.41450;
  unsigned int D.41451;
  unsigned int D.41452;
  struct MonoReflectionType * D.41453;
  struct MonoString * D.41454;
  unsigned char D.41455;
  unsigned char D.41456;
  struct MonoMethod * D.41457;

  memset (rmb, 0, 112);
  D.41448 = mb->ilgen;
  rmb->ilgen = D.41448;
  D.41449 = mb->rtype;
  rmb->rtype = D.41449;
  D.41450 = mb->parameters;
  rmb->parameters = D.41450;
  rmb->generic_params = 0B;
  rmb->generic_container = 0B;
  rmb->opt_types = 0B;
  rmb->pinfo = 0B;
  D.41451 = mb->attrs;
  rmb->attrs = D.41451;
  rmb->iattrs = 0;
  D.41452 = mb->call_conv;
  rmb->call_conv = D.41452;
  rmb->code = 0B;
  D.41453 = mb->owner;
  rmb->type = D.41453;
  D.41454 = mb->name;
  rmb->name = D.41454;
  rmb->table_idx = 0B;
  D.41455 = mb->init_locals;
  rmb->init_locals = D.41455;
  D.41456 = mb->skip_visibility;
  rmb->skip_visibility = D.41456;
  rmb->return_modreq = 0B;
  rmb->return_modopt = 0B;
  rmb->param_modreq = 0B;
  rmb->param_modopt = 0B;
  rmb->permissions = 0B;
  D.41457 = mb->mhandle;
  rmb->mhandle = D.41457;
  rmb->nrefs = 0;
  rmb->refs = 0B;
}


resolve_object (struct MonoImage * image, struct MonoObject * obj, struct MonoClass * * handle_class, struct MonoGenericContext * context)
{
  int D.25989;
  int iftmp.798;
  int D.25988;
  struct MonoVTable * D.41461;
  struct MonoClass * D.41462;
  const char[7] * D.41463;
  unsigned char D.41464;
  int D.41465;
  unsigned char D.41466;
  int D.41467;
  _Bool D.41468;
  _Bool D.41469;
  _Bool D.41470;
  const unsigned char * D.41473;
  unsigned char D.41474;
  int D.41475;
  const unsigned char * D.41476;
  unsigned char D.41477;
  int D.41478;
  _Bool D.41479;
  _Bool D.41480;
  const unsigned char * D.41483;
  unsigned char D.41484;
  int D.41485;
  const unsigned char * D.41486;
  unsigned char D.41487;
  int D.41488;
  _Bool D.41489;
  _Bool D.41490;
  const unsigned char * D.41493;
  unsigned char D.41494;
  int D.41495;
  const unsigned char * D.41496;
  unsigned char D.41497;
  int D.41498;
  const char * D.41500;
  struct MonoClass * D.41503;
  _Bool D.41504;
  long int D.41505;
  long int D.41506;
  int D.25998;
  int iftmp.799;
  int D.25997;
  const char[9] * D.41513;
  unsigned char D.41514;
  int D.41515;
  unsigned char D.41516;
  int D.41517;
  _Bool D.41518;
  _Bool D.41519;
  _Bool D.41520;
  const unsigned char * D.41523;
  unsigned char D.41524;
  int D.41525;
  const unsigned char * D.41526;
  unsigned char D.41527;
  int D.41528;
  _Bool D.41529;
  _Bool D.41530;
  const unsigned char * D.41533;
  unsigned char D.41534;
  int D.41535;
  const unsigned char * D.41536;
  unsigned char D.41537;
  int D.41538;
  _Bool D.41539;
  _Bool D.41540;
  const unsigned char * D.41543;
  unsigned char D.41544;
  int D.41545;
  const unsigned char * D.41546;
  unsigned char D.41547;
  int D.41548;
  int D.41552;
  struct MonoException * D.41555;
  struct MonoClass * D.41559;
  int D.26010;
  int iftmp.800;
  int D.26009;
  const char[11] * D.41569;
  unsigned char D.41570;
  int D.41571;
  unsigned char D.41572;
  int D.41573;
  _Bool D.41574;
  _Bool D.41575;
  _Bool D.41576;
  const unsigned char * D.41579;
  unsigned char D.41580;
  int D.41581;
  const unsigned char * D.41582;
  unsigned char D.41583;
  int D.41584;
  _Bool D.41585;
  _Bool D.41586;
  const unsigned char * D.41589;
  unsigned char D.41590;
  int D.41591;
  const unsigned char * D.41592;
  unsigned char D.41593;
  int D.41594;
  _Bool D.41595;
  _Bool D.41596;
  const unsigned char * D.41599;
  unsigned char D.41600;
  int D.41601;
  const unsigned char * D.41602;
  unsigned char D.41603;
  int D.41604;
  int D.26019;
  int iftmp.801;
  int D.26018;
  const char[12] * D.41610;
  unsigned char D.41611;
  int D.41612;
  unsigned char D.41613;
  int D.41614;
  _Bool D.41615;
  _Bool D.41616;
  _Bool D.41617;
  const unsigned char * D.41620;
  unsigned char D.41621;
  int D.41622;
  const unsigned char * D.41623;
  unsigned char D.41624;
  int D.41625;
  _Bool D.41626;
  _Bool D.41627;
  const unsigned char * D.41630;
  unsigned char D.41631;
  int D.41632;
  const unsigned char * D.41633;
  unsigned char D.41634;
  int D.41635;
  _Bool D.41636;
  _Bool D.41637;
  const unsigned char * D.41640;
  unsigned char D.41641;
  int D.41642;
  const unsigned char * D.41643;
  unsigned char D.41644;
  int D.41645;
  int D.26028;
  int iftmp.802;
  int D.26027;
  const char[19] * D.41651;
  unsigned char D.41652;
  int D.41653;
  unsigned char D.41654;
  int D.41655;
  _Bool D.41656;
  _Bool D.41657;
  _Bool D.41658;
  const unsigned char * D.41661;
  unsigned char D.41662;
  int D.41663;
  const unsigned char * D.41664;
  unsigned char D.41665;
  int D.41666;
  _Bool D.41667;
  _Bool D.41668;
  const unsigned char * D.41671;
  unsigned char D.41672;
  int D.41673;
  const unsigned char * D.41674;
  unsigned char D.41675;
  int D.41676;
  _Bool D.41677;
  _Bool D.41678;
  const unsigned char * D.41681;
  unsigned char D.41682;
  int D.41683;
  const unsigned char * D.41684;
  unsigned char D.41685;
  int D.41686;
  int D.26037;
  int iftmp.803;
  int D.26036;
  const char[18] * D.41692;
  unsigned char D.41693;
  int D.41694;
  unsigned char D.41695;
  int D.41696;
  _Bool D.41697;
  _Bool D.41698;
  _Bool D.41699;
  const unsigned char * D.41702;
  unsigned char D.41703;
  int D.41704;
  const unsigned char * D.41705;
  unsigned char D.41706;
  int D.41707;
  _Bool D.41708;
  _Bool D.41709;
  const unsigned char * D.41712;
  unsigned char D.41713;
  int D.41714;
  const unsigned char * D.41715;
  unsigned char D.41716;
  int D.41717;
  _Bool D.41718;
  _Bool D.41719;
  const unsigned char * D.41722;
  unsigned char D.41723;
  int D.41724;
  const unsigned char * D.41725;
  unsigned char D.41726;
  int D.41727;
  struct MonoClass * D.41731;
  int D.26046;
  int iftmp.804;
  int D.26045;
  const char[14] * D.41737;
  unsigned char D.41738;
  int D.41739;
  unsigned char D.41740;
  int D.41741;
  _Bool D.41742;
  _Bool D.41743;
  _Bool D.41744;
  const unsigned char * D.41747;
  unsigned char D.41748;
  int D.41749;
  const unsigned char * D.41750;
  unsigned char D.41751;
  int D.41752;
  _Bool D.41753;
  _Bool D.41754;
  const unsigned char * D.41757;
  unsigned char D.41758;
  int D.41759;
  const unsigned char * D.41760;
  unsigned char D.41761;
  int D.41762;
  _Bool D.41763;
  _Bool D.41764;
  const unsigned char * D.41767;
  unsigned char D.41768;
  int D.41769;
  const unsigned char * D.41770;
  unsigned char D.41771;
  int D.41772;
  struct MonoDomain * D.41778;
  int D.26057;
  int iftmp.805;
  int D.26056;
  const char[19] * D.41785;
  unsigned char D.41786;
  int D.41787;
  unsigned char D.41788;
  int D.41789;
  _Bool D.41790;
  _Bool D.41791;
  _Bool D.41792;
  const unsigned char * D.41795;
  unsigned char D.41796;
  int D.41797;
  const unsigned char * D.41798;
  unsigned char D.41799;
  int D.41800;
  _Bool D.41801;
  _Bool D.41802;
  const unsigned char * D.41805;
  unsigned char D.41806;
  int D.41807;
  const unsigned char * D.41808;
  unsigned char D.41809;
  int D.41810;
  _Bool D.41811;
  _Bool D.41812;
  const unsigned char * D.41815;
  unsigned char D.41816;
  int D.41817;
  const unsigned char * D.41818;
  unsigned char D.41819;
  int D.41820;
  struct MonoDomain * D.41826;
  int D.26068;
  int iftmp.806;
  int D.26067;
  const char[10] * D.41833;
  unsigned char D.41834;
  int D.41835;
  unsigned char D.41836;
  int D.41837;
  _Bool D.41838;
  _Bool D.41839;
  _Bool D.41840;
  const unsigned char * D.41843;
  unsigned char D.41844;
  int D.41845;
  const unsigned char * D.41846;
  unsigned char D.41847;
  int D.41848;
  _Bool D.41849;
  _Bool D.41850;
  const unsigned char * D.41853;
  unsigned char D.41854;
  int D.41855;
  const unsigned char * D.41856;
  unsigned char D.41857;
  int D.41858;
  _Bool D.41859;
  _Bool D.41860;
  const unsigned char * D.41863;
  unsigned char D.41864;
  int D.41865;
  const unsigned char * D.41866;
  unsigned char D.41867;
  int D.41868;
  struct MonoClass * D.41872;
  struct MonoType * D.41875;
  int D.26082;
  const char * D.41876;
  const char * D.41877;
  int iftmp.807;
  int D.26094;
  _Bool D.41884;
  long int D.41885;
  long int D.41886;
  struct MonoClass * D.41890;
  int D.26103;
  int iftmp.808;
  int D.26102;
  const char[13] * D.41897;
  unsigned char D.41898;
  int D.41899;
  unsigned char D.41900;
  int D.41901;
  _Bool D.41902;
  _Bool D.41903;
  _Bool D.41904;
  const unsigned char * D.41907;
  unsigned char D.41908;
  int D.41909;
  const unsigned char * D.41910;
  unsigned char D.41911;
  int D.41912;
  _Bool D.41913;
  _Bool D.41914;
  const unsigned char * D.41917;
  unsigned char D.41918;
  int D.41919;
  const unsigned char * D.41920;
  unsigned char D.41921;
  int D.41922;
  _Bool D.41923;
  _Bool D.41924;
  const unsigned char * D.41927;
  unsigned char D.41928;
  int D.41929;
  const unsigned char * D.41930;
  unsigned char D.41931;
  int D.41932;
  struct MonoDomain * D.41938;
  struct MonoClassField * D.41939;
  struct MonoClass * D.41942;
  struct MonoGenericContainer * D.41943;
  struct MonoType * D.41946;
  const char * D.41947;
  int D.26117;
  int iftmp.809;
  int D.26116;
  const char[12] * D.41954;
  unsigned char D.41955;
  int D.41956;
  unsigned char D.41957;
  int D.41958;
  _Bool D.41959;
  _Bool D.41960;
  _Bool D.41961;
  const unsigned char * D.41964;
  unsigned char D.41965;
  int D.41966;
  const unsigned char * D.41967;
  unsigned char D.41968;
  int D.41969;
  _Bool D.41970;
  _Bool D.41971;
  const unsigned char * D.41974;
  unsigned char D.41975;
  int D.41976;
  const unsigned char * D.41977;
  unsigned char D.41978;
  int D.41979;
  _Bool D.41980;
  _Bool D.41981;
  const unsigned char * D.41984;
  unsigned char D.41985;
  int D.41986;
  const unsigned char * D.41987;
  unsigned char D.41988;
  int D.41989;
  unsigned char D.41993;
  unsigned char D.41994;
  struct MonoDomain * D.41998;
  int D.26129;
  int iftmp.810;
  int D.26128;
  const char[16] * D.42005;
  unsigned char D.42006;
  int D.42007;
  unsigned char D.42008;
  int D.42009;
  _Bool D.42010;
  _Bool D.42011;
  _Bool D.42012;
  const unsigned char * D.42015;
  unsigned char D.42016;
  int D.42017;
  const unsigned char * D.42018;
  unsigned char D.42019;
  int D.42020;
  _Bool D.42021;
  _Bool D.42022;
  const unsigned char * D.42025;
  unsigned char D.42026;
  int D.42027;
  const unsigned char * D.42028;
  unsigned char D.42029;
  int D.42030;
  _Bool D.42031;
  _Bool D.42032;
  const unsigned char * D.42035;
  unsigned char D.42036;
  int D.42037;
  const unsigned char * D.42038;
  unsigned char D.42039;
  int D.42040;
  struct MonoArray * D.42044;
  unsigned int D.42047;
  unsigned int nargs.811;
  unsigned int D.42050;
  unsigned int D.42051;
  _Bool D.42052;
  unsigned int D.42053;
  _Bool D.42054;
  unsigned int D.42055;
  unsigned char D.42058;
  unsigned char D.42059;
  <unnamed-unsigned:6> D.42060;
  unsigned int D.42062;
  short unsigned int D.42066;
  struct MonoReflectionType * D.42067;
  struct MonoType * D.42068;
  unsigned int i.812;
  char * D.42070;
  void * D.42071;
  struct MonoType * D.42072;
  int D.26145;
  int iftmp.813;
  int D.26144;
  const char[14] * D.42077;
  unsigned char D.42078;
  int D.42079;
  unsigned char D.42080;
  int D.42081;
  _Bool D.42082;
  _Bool D.42083;
  _Bool D.42084;
  const unsigned char * D.42087;
  unsigned char D.42088;
  int D.42089;
  const unsigned char * D.42090;
  unsigned char D.42091;
  int D.42092;
  _Bool D.42093;
  _Bool D.42094;
  const unsigned char * D.42097;
  unsigned char D.42098;
  int D.42099;
  const unsigned char * D.42100;
  unsigned char D.42101;
  int D.42102;
  _Bool D.42103;
  _Bool D.42104;
  const unsigned char * D.42107;
  unsigned char D.42108;
  int D.42109;
  const unsigned char * D.42110;
  unsigned char D.42111;
  int D.42112;
  struct MonoMethod * D.42116;
  _Bool D.42117;
  long int D.42118;
  long int D.42119;
  int D.26155;
  int iftmp.814;
  int D.26154;
  const char[28] * D.42126;
  unsigned char D.42127;
  int D.42128;
  unsigned char D.42129;
  int D.42130;
  _Bool D.42131;
  _Bool D.42132;
  _Bool D.42133;
  const unsigned char * D.42136;
  unsigned char D.42137;
  int D.42138;
  const unsigned char * D.42139;
  unsigned char D.42140;
  int D.42141;
  _Bool D.42142;
  _Bool D.42143;
  const unsigned char * D.42146;
  unsigned char D.42147;
  int D.42148;
  const unsigned char * D.42149;
  unsigned char D.42150;
  int D.42151;
  _Bool D.42152;
  _Bool D.42153;
  const unsigned char * D.42156;
  unsigned char D.42157;
  int D.42158;
  const unsigned char * D.42159;
  unsigned char D.42160;
  int D.42161;
  int D.26165;
  int iftmp.815;
  int D.26164;
  const char[17] * D.42171;
  unsigned char D.42172;
  int D.42173;
  unsigned char D.42174;
  int D.42175;
  _Bool D.42176;
  _Bool D.42177;
  _Bool D.42178;
  const unsigned char * D.42181;
  unsigned char D.42182;
  int D.42183;
  const unsigned char * D.42184;
  unsigned char D.42185;
  int D.42186;
  _Bool D.42187;
  _Bool D.42188;
  const unsigned char * D.42191;
  unsigned char D.42192;
  int D.42193;
  const unsigned char * D.42194;
  unsigned char D.42195;
  int D.42196;
  _Bool D.42197;
  _Bool D.42198;
  const unsigned char * D.42201;
  unsigned char D.42202;
  int D.42203;
  const unsigned char * D.42204;
  unsigned char D.42205;
  int D.42206;
  int D.26175;
  int iftmp.816;
  int D.26174;
  const char[23] * D.42216;
  unsigned char D.42217;
  int D.42218;
  unsigned char D.42219;
  int D.42220;
  _Bool D.42221;
  _Bool D.42222;
  _Bool D.42223;
  const unsigned char * D.42226;
  unsigned char D.42227;
  int D.42228;
  const unsigned char * D.42229;
  unsigned char D.42230;
  int D.42231;
  _Bool D.42232;
  _Bool D.42233;
  const unsigned char * D.42236;
  unsigned char D.42237;
  int D.42238;
  const unsigned char * D.42239;
  unsigned char D.42240;
  int D.42241;
  _Bool D.42242;
  _Bool D.42243;
  const unsigned char * D.42246;
  unsigned char D.42247;
  int D.42248;
  const unsigned char * D.42249;
  unsigned char D.42250;
  int D.42251;
  struct MonoObject * D.42255;
  struct MonoVTable * D.42256;
  struct MonoClass * D.42257;
  int D.42258;
  int D.42262;
  char * D.42266;
  struct MonoReflectionGenericClass * D.42267;
  struct MonoType * D.42268;
  const char * D.42269;
  struct MonoClass * D.42270;
  int D.26189;
  int iftmp.817;
  int D.26188;
  const char[29] * D.42277;
  unsigned char D.42278;
  int D.42279;
  unsigned char D.42280;
  int D.42281;
  _Bool D.42282;
  _Bool D.42283;
  _Bool D.42284;
  const unsigned char * D.42287;
  unsigned char D.42288;
  int D.42289;
  const unsigned char * D.42290;
  unsigned char D.42291;
  int D.42292;
  _Bool D.42293;
  _Bool D.42294;
  const unsigned char * D.42297;
  unsigned char D.42298;
  int D.42299;
  const unsigned char * D.42300;
  unsigned char D.42301;
  int D.42302;
  _Bool D.42303;
  _Bool D.42304;
  const unsigned char * D.42307;
  unsigned char D.42308;
  int D.42309;
  const unsigned char * D.42310;
  unsigned char D.42311;
  int D.42312;
  struct MonoReflectionGenericClass * D.42316;
  struct MonoType * D.42317;
  struct MonoObject * D.42318;
  struct MonoVTable * D.42319;
  struct MonoClass * D.42320;
  int D.42321;
  int D.42325;
  char * D.42329;
  int D.26203;
  int iftmp.818;
  int D.26202;
  const char[24] * D.42334;
  unsigned char D.42335;
  int D.42336;
  unsigned char D.42337;
  int D.42338;
  _Bool D.42339;
  _Bool D.42340;
  _Bool D.42341;
  const unsigned char * D.42344;
  unsigned char D.42345;
  int D.42346;
  const unsigned char * D.42347;
  unsigned char D.42348;
  int D.42349;
  _Bool D.42350;
  _Bool D.42351;
  const unsigned char * D.42354;
  unsigned char D.42355;
  int D.42356;
  const unsigned char * D.42357;
  unsigned char D.42358;
  int D.42359;
  _Bool D.42360;
  _Bool D.42361;
  const unsigned char * D.42364;
  unsigned char D.42365;
  int D.42366;
  const unsigned char * D.42367;
  unsigned char D.42368;
  int D.42369;
  struct MonoArray * D.42373;
  struct MonoReflectionType * D.42379;
  struct MonoType * D.42380;
  struct MonoObject * D.42381;
  struct MonoVTable * D.42382;
  struct MonoClass * D.42383;
  int D.42384;
  int D.42388;
  char * D.42392;
  int D.26217;
  int iftmp.819;
  int D.26216;
  const char[16] * D.42397;
  unsigned char D.42398;
  int D.42399;
  unsigned char D.42400;
  int D.42401;
  _Bool D.42402;
  _Bool D.42403;
  _Bool D.42404;
  const unsigned char * D.42407;
  unsigned char D.42408;
  int D.42409;
  const unsigned char * D.42410;
  unsigned char D.42411;
  int D.42412;
  _Bool D.42413;
  _Bool D.42414;
  const unsigned char * D.42417;
  unsigned char D.42418;
  int D.42419;
  const unsigned char * D.42420;
  unsigned char D.42421;
  int D.42422;
  _Bool D.42423;
  _Bool D.42424;
  const unsigned char * D.42427;
  unsigned char D.42428;
  int D.42429;
  const unsigned char * D.42430;
  unsigned char D.42431;
  int D.42432;
  struct MonoReflectionType * D.42436;
  struct MonoString * D.42437;
  int D.26232;
  const char * D.42438;
  _Bool D.42440;
  long int D.42441;
  long int D.42442;
  struct MonoClass * D.42449;
  int D.42450;
  struct MonoClass * D.42452;
  int D.42453;
  struct MonoClass * D.42455;
  int D.42456;
  void * D.42460;
  void * result;

  result = 0B;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41463 = "String";
      D.41464 = MEM[(const unsigned char *)D.41463];
      D.41465 = (int) D.41464;
      D.41466 = *__s2;
      D.41467 = (int) D.41466;
      __result = D.41465 - D.41467;
      {
        D.41468 = __s2_len != 0;
        D.41469 = __result == 0;
        D.41470 = D.41468 & D.41469;
        if (D.41470 != 0) goto <D.41471>; else goto <D.41472>;
        <D.41471>:
        D.41473 = &MEM[(void *)"String" + 1B];
        D.41474 = *D.41473;
        D.41475 = (int) D.41474;
        D.41476 = __s2 + 1;
        D.41477 = *D.41476;
        D.41478 = (int) D.41477;
        __result = D.41475 - D.41478;
        D.41479 = __s2_len > 1;
        D.41469 = __result == 0;
        D.41480 = D.41479 & D.41469;
        if (D.41480 != 0) goto <D.41481>; else goto <D.41482>;
        <D.41481>:
        D.41483 = &MEM[(void *)"String" + 2B];
        D.41484 = *D.41483;
        D.41485 = (int) D.41484;
        D.41486 = __s2 + 2;
        D.41487 = *D.41486;
        D.41488 = (int) D.41487;
        __result = D.41485 - D.41488;
        D.41489 = __s2_len > 2;
        D.41469 = __result == 0;
        D.41490 = D.41489 & D.41469;
        if (D.41490 != 0) goto <D.41491>; else goto <D.41492>;
        <D.41491>:
        D.41493 = &MEM[(void *)"String" + 3B];
        D.41494 = *D.41493;
        D.41495 = (int) D.41494;
        D.41496 = __s2 + 3;
        D.41497 = *D.41496;
        D.41498 = (int) D.41497;
        __result = D.41495 - D.41498;
        <D.41492>:
        <D.41482>:
        <D.41472>:
      }
      D.25988 = __result;
    }
    iftmp.798 = -D.25988;
    goto <D.41499>;
    <D.41460>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.798 = __builtin_strcmp (D.41500, "String");
    <D.41499>:
    D.25989 = iftmp.798;
  }
  if (D.25989 == 0) goto <D.41501>; else goto <D.41502>;
  <D.41501>:
  result = mono_string_intern (obj);
  D.41503 = mono_defaults.string_class;
  *handle_class = D.41503;
  D.41504 = result == 0B;
  D.41505 = (long int) D.41504;
  D.41506 = __builtin_expect (D.41505, 0);
  if (D.41506 != 0) goto <D.41507>; else goto <D.41508>;
  <D.41507>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11751, "result");
  <D.41508>:
  goto <D.41509>;
  <D.41502>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41513 = "MonoType";
      D.41514 = MEM[(const unsigned char *)D.41513];
      D.41515 = (int) D.41514;
      D.41516 = *__s2;
      D.41517 = (int) D.41516;
      __result = D.41515 - D.41517;
      {
        D.41518 = __s2_len != 0;
        D.41519 = __result == 0;
        D.41520 = D.41518 & D.41519;
        if (D.41520 != 0) goto <D.41521>; else goto <D.41522>;
        <D.41521>:
        D.41523 = &MEM[(void *)"MonoType" + 1B];
        D.41524 = *D.41523;
        D.41525 = (int) D.41524;
        D.41526 = __s2 + 1;
        D.41527 = *D.41526;
        D.41528 = (int) D.41527;
        __result = D.41525 - D.41528;
        D.41529 = __s2_len > 1;
        D.41519 = __result == 0;
        D.41530 = D.41529 & D.41519;
        if (D.41530 != 0) goto <D.41531>; else goto <D.41532>;
        <D.41531>:
        D.41533 = &MEM[(void *)"MonoType" + 2B];
        D.41534 = *D.41533;
        D.41535 = (int) D.41534;
        D.41536 = __s2 + 2;
        D.41537 = *D.41536;
        D.41538 = (int) D.41537;
        __result = D.41535 - D.41538;
        D.41539 = __s2_len > 2;
        D.41519 = __result == 0;
        D.41540 = D.41539 & D.41519;
        if (D.41540 != 0) goto <D.41541>; else goto <D.41542>;
        <D.41541>:
        D.41543 = &MEM[(void *)"MonoType" + 3B];
        D.41544 = *D.41543;
        D.41545 = (int) D.41544;
        D.41546 = __s2 + 3;
        D.41547 = *D.41546;
        D.41548 = (int) D.41547;
        __result = D.41545 - D.41548;
        <D.41542>:
        <D.41532>:
        <D.41522>:
      }
      D.25997 = __result;
    }
    iftmp.799 = -D.25997;
    goto <D.41549>;
    <D.41512>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.799 = __builtin_strcmp (D.41500, "MonoType");
    <D.41549>:
    D.25998 = iftmp.799;
  }
  if (D.25998 == 0) goto <D.41550>; else goto <D.41551>;
  <D.41550>:
  {
    struct MonoType * type;
    struct MonoClass * mc;

    type = mono_reflection_type_get_handle (obj);
    mc = mono_class_from_mono_type (type);
    D.41552 = mono_class_init (mc);
    if (D.41552 == 0) goto <D.41553>; else goto <D.41554>;
    <D.41553>:
    D.41555 = mono_class_get_exception_for_failure (mc);
    mono_raise_exception (D.41555);
    <D.41554>:
    if (context != 0B) goto <D.41556>; else goto <D.41557>;
    <D.41556>:
    {
      struct MonoType * inflated;

      inflated = mono_class_inflate_generic_type (type, context);
      result = mono_class_from_mono_type (inflated);
      mono_metadata_free_type (inflated);
    }
    goto <D.41558>;
    <D.41557>:
    result = mono_class_from_mono_type (type);
    <D.41558>:
    D.41559 = mono_defaults.typehandle_class;
    *handle_class = D.41559;
    D.41504 = result == 0B;
    D.41505 = (long int) D.41504;
    D.41506 = __builtin_expect (D.41505, 0);
    if (D.41506 != 0) goto <D.41560>; else goto <D.41561>;
    <D.41560>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11766, "result");
    <D.41561>:
  }
  goto <D.41562>;
  <D.41551>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41569 = "MonoMethod";
      D.41570 = MEM[(const unsigned char *)D.41569];
      D.41571 = (int) D.41570;
      D.41572 = *__s2;
      D.41573 = (int) D.41572;
      __result = D.41571 - D.41573;
      {
        D.41574 = __s2_len != 0;
        D.41575 = __result == 0;
        D.41576 = D.41574 & D.41575;
        if (D.41576 != 0) goto <D.41577>; else goto <D.41578>;
        <D.41577>:
        D.41579 = &MEM[(void *)"MonoMethod" + 1B];
        D.41580 = *D.41579;
        D.41581 = (int) D.41580;
        D.41582 = __s2 + 1;
        D.41583 = *D.41582;
        D.41584 = (int) D.41583;
        __result = D.41581 - D.41584;
        D.41585 = __s2_len > 1;
        D.41575 = __result == 0;
        D.41586 = D.41585 & D.41575;
        if (D.41586 != 0) goto <D.41587>; else goto <D.41588>;
        <D.41587>:
        D.41589 = &MEM[(void *)"MonoMethod" + 2B];
        D.41590 = *D.41589;
        D.41591 = (int) D.41590;
        D.41592 = __s2 + 2;
        D.41593 = *D.41592;
        D.41594 = (int) D.41593;
        __result = D.41591 - D.41594;
        D.41595 = __s2_len > 2;
        D.41575 = __result == 0;
        D.41596 = D.41595 & D.41575;
        if (D.41596 != 0) goto <D.41597>; else goto <D.41598>;
        <D.41597>:
        D.41599 = &MEM[(void *)"MonoMethod" + 3B];
        D.41600 = *D.41599;
        D.41601 = (int) D.41600;
        D.41602 = __s2 + 3;
        D.41603 = *D.41602;
        D.41604 = (int) D.41603;
        __result = D.41601 - D.41604;
        <D.41598>:
        <D.41588>:
        <D.41578>:
      }
      D.26009 = __result;
    }
    iftmp.800 = -D.26009;
    goto <D.41605>;
    <D.41568>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.800 = __builtin_strcmp (D.41500, "MonoMethod");
    <D.41605>:
    D.26010 = iftmp.800;
  }
  if (D.26010 == 0) goto <D.41563>; else goto <D.41606>;
  <D.41606>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41610 = "MonoCMethod";
      D.41611 = MEM[(const unsigned char *)D.41610];
      D.41612 = (int) D.41611;
      D.41613 = *__s2;
      D.41614 = (int) D.41613;
      __result = D.41612 - D.41614;
      {
        D.41615 = __s2_len != 0;
        D.41616 = __result == 0;
        D.41617 = D.41615 & D.41616;
        if (D.41617 != 0) goto <D.41618>; else goto <D.41619>;
        <D.41618>:
        D.41620 = &MEM[(void *)"MonoCMethod" + 1B];
        D.41621 = *D.41620;
        D.41622 = (int) D.41621;
        D.41623 = __s2 + 1;
        D.41624 = *D.41623;
        D.41625 = (int) D.41624;
        __result = D.41622 - D.41625;
        D.41626 = __s2_len > 1;
        D.41616 = __result == 0;
        D.41627 = D.41626 & D.41616;
        if (D.41627 != 0) goto <D.41628>; else goto <D.41629>;
        <D.41628>:
        D.41630 = &MEM[(void *)"MonoCMethod" + 2B];
        D.41631 = *D.41630;
        D.41632 = (int) D.41631;
        D.41633 = __s2 + 2;
        D.41634 = *D.41633;
        D.41635 = (int) D.41634;
        __result = D.41632 - D.41635;
        D.41636 = __s2_len > 2;
        D.41616 = __result == 0;
        D.41637 = D.41636 & D.41616;
        if (D.41637 != 0) goto <D.41638>; else goto <D.41639>;
        <D.41638>:
        D.41640 = &MEM[(void *)"MonoCMethod" + 3B];
        D.41641 = *D.41640;
        D.41642 = (int) D.41641;
        D.41643 = __s2 + 3;
        D.41644 = *D.41643;
        D.41645 = (int) D.41644;
        __result = D.41642 - D.41645;
        <D.41639>:
        <D.41629>:
        <D.41619>:
      }
      D.26018 = __result;
    }
    iftmp.801 = -D.26018;
    goto <D.41646>;
    <D.41609>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.801 = __builtin_strcmp (D.41500, "MonoCMethod");
    <D.41646>:
    D.26019 = iftmp.801;
  }
  if (D.26019 == 0) goto <D.41563>; else goto <D.41647>;
  <D.41647>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41651 = "MonoGenericCMethod";
      D.41652 = MEM[(const unsigned char *)D.41651];
      D.41653 = (int) D.41652;
      D.41654 = *__s2;
      D.41655 = (int) D.41654;
      __result = D.41653 - D.41655;
      {
        D.41656 = __s2_len != 0;
        D.41657 = __result == 0;
        D.41658 = D.41656 & D.41657;
        if (D.41658 != 0) goto <D.41659>; else goto <D.41660>;
        <D.41659>:
        D.41661 = &MEM[(void *)"MonoGenericCMethod" + 1B];
        D.41662 = *D.41661;
        D.41663 = (int) D.41662;
        D.41664 = __s2 + 1;
        D.41665 = *D.41664;
        D.41666 = (int) D.41665;
        __result = D.41663 - D.41666;
        D.41667 = __s2_len > 1;
        D.41657 = __result == 0;
        D.41668 = D.41667 & D.41657;
        if (D.41668 != 0) goto <D.41669>; else goto <D.41670>;
        <D.41669>:
        D.41671 = &MEM[(void *)"MonoGenericCMethod" + 2B];
        D.41672 = *D.41671;
        D.41673 = (int) D.41672;
        D.41674 = __s2 + 2;
        D.41675 = *D.41674;
        D.41676 = (int) D.41675;
        __result = D.41673 - D.41676;
        D.41677 = __s2_len > 2;
        D.41657 = __result == 0;
        D.41678 = D.41677 & D.41657;
        if (D.41678 != 0) goto <D.41679>; else goto <D.41680>;
        <D.41679>:
        D.41681 = &MEM[(void *)"MonoGenericCMethod" + 3B];
        D.41682 = *D.41681;
        D.41683 = (int) D.41682;
        D.41684 = __s2 + 3;
        D.41685 = *D.41684;
        D.41686 = (int) D.41685;
        __result = D.41683 - D.41686;
        <D.41680>:
        <D.41670>:
        <D.41660>:
      }
      D.26027 = __result;
    }
    iftmp.802 = -D.26027;
    goto <D.41687>;
    <D.41650>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.802 = __builtin_strcmp (D.41500, "MonoGenericCMethod");
    <D.41687>:
    D.26028 = iftmp.802;
  }
  if (D.26028 == 0) goto <D.41563>; else goto <D.41688>;
  <D.41688>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41692 = "MonoGenericMethod";
      D.41693 = MEM[(const unsigned char *)D.41692];
      D.41694 = (int) D.41693;
      D.41695 = *__s2;
      D.41696 = (int) D.41695;
      __result = D.41694 - D.41696;
      {
        D.41697 = __s2_len != 0;
        D.41698 = __result == 0;
        D.41699 = D.41697 & D.41698;
        if (D.41699 != 0) goto <D.41700>; else goto <D.41701>;
        <D.41700>:
        D.41702 = &MEM[(void *)"MonoGenericMethod" + 1B];
        D.41703 = *D.41702;
        D.41704 = (int) D.41703;
        D.41705 = __s2 + 1;
        D.41706 = *D.41705;
        D.41707 = (int) D.41706;
        __result = D.41704 - D.41707;
        D.41708 = __s2_len > 1;
        D.41698 = __result == 0;
        D.41709 = D.41708 & D.41698;
        if (D.41709 != 0) goto <D.41710>; else goto <D.41711>;
        <D.41710>:
        D.41712 = &MEM[(void *)"MonoGenericMethod" + 2B];
        D.41713 = *D.41712;
        D.41714 = (int) D.41713;
        D.41715 = __s2 + 2;
        D.41716 = *D.41715;
        D.41717 = (int) D.41716;
        __result = D.41714 - D.41717;
        D.41718 = __s2_len > 2;
        D.41698 = __result == 0;
        D.41719 = D.41718 & D.41698;
        if (D.41719 != 0) goto <D.41720>; else goto <D.41721>;
        <D.41720>:
        D.41722 = &MEM[(void *)"MonoGenericMethod" + 3B];
        D.41723 = *D.41722;
        D.41724 = (int) D.41723;
        D.41725 = __s2 + 3;
        D.41726 = *D.41725;
        D.41727 = (int) D.41726;
        __result = D.41724 - D.41727;
        <D.41721>:
        <D.41711>:
        <D.41701>:
      }
      D.26036 = __result;
    }
    iftmp.803 = -D.26036;
    goto <D.41728>;
    <D.41691>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.803 = __builtin_strcmp (D.41500, "MonoGenericMethod");
    <D.41728>:
    D.26037 = iftmp.803;
  }
  if (D.26037 == 0) goto <D.41563>; else goto <D.41564>;
  <D.41563>:
  result = MEM[(struct MonoReflectionMethod *)obj].method;
  if (context != 0B) goto <D.41729>; else goto <D.41730>;
  <D.41729>:
  result = mono_class_inflate_generic_method (result, context);
  <D.41730>:
  D.41731 = mono_defaults.methodhandle_class;
  *handle_class = D.41731;
  D.41504 = result == 0B;
  D.41505 = (long int) D.41504;
  D.41506 = __builtin_expect (D.41505, 0);
  if (D.41506 != 0) goto <D.41732>; else goto <D.41733>;
  <D.41732>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11775, "result");
  <D.41733>:
  goto <D.41565>;
  <D.41564>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41737 = "MethodBuilder";
      D.41738 = MEM[(const unsigned char *)D.41737];
      D.41739 = (int) D.41738;
      D.41740 = *__s2;
      D.41741 = (int) D.41740;
      __result = D.41739 - D.41741;
      {
        D.41742 = __s2_len != 0;
        D.41743 = __result == 0;
        D.41744 = D.41742 & D.41743;
        if (D.41744 != 0) goto <D.41745>; else goto <D.41746>;
        <D.41745>:
        D.41747 = &MEM[(void *)"MethodBuilder" + 1B];
        D.41748 = *D.41747;
        D.41749 = (int) D.41748;
        D.41750 = __s2 + 1;
        D.41751 = *D.41750;
        D.41752 = (int) D.41751;
        __result = D.41749 - D.41752;
        D.41753 = __s2_len > 1;
        D.41743 = __result == 0;
        D.41754 = D.41753 & D.41743;
        if (D.41754 != 0) goto <D.41755>; else goto <D.41756>;
        <D.41755>:
        D.41757 = &MEM[(void *)"MethodBuilder" + 2B];
        D.41758 = *D.41757;
        D.41759 = (int) D.41758;
        D.41760 = __s2 + 2;
        D.41761 = *D.41760;
        D.41762 = (int) D.41761;
        __result = D.41759 - D.41762;
        D.41763 = __s2_len > 2;
        D.41743 = __result == 0;
        D.41764 = D.41763 & D.41743;
        if (D.41764 != 0) goto <D.41765>; else goto <D.41766>;
        <D.41765>:
        D.41767 = &MEM[(void *)"MethodBuilder" + 3B];
        D.41768 = *D.41767;
        D.41769 = (int) D.41768;
        D.41770 = __s2 + 3;
        D.41771 = *D.41770;
        D.41772 = (int) D.41771;
        __result = D.41769 - D.41772;
        <D.41766>:
        <D.41756>:
        <D.41746>:
      }
      D.26045 = __result;
    }
    iftmp.804 = -D.26045;
    goto <D.41773>;
    <D.41736>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.804 = __builtin_strcmp (D.41500, "MethodBuilder");
    <D.41773>:
    D.26046 = iftmp.804;
  }
  if (D.26046 == 0) goto <D.41774>; else goto <D.41775>;
  <D.41774>:
  {
    struct MonoReflectionMethodBuilder * mb;

    mb = obj;
    result = mb->mhandle;
    if (result == 0B) goto <D.41776>; else goto <D.41777>;
    <D.41776>:
    {
      struct MonoReflectionTypeBuilder * tb;

      tb = mb->type;
      D.41778 = mono_domain_get ();
      mono_domain_try_type_resolve (D.41778, 0B, tb);
      result = mb->mhandle;
    }
    <D.41777>:
    if (context != 0B) goto <D.41779>; else goto <D.41780>;
    <D.41779>:
    result = mono_class_inflate_generic_method (result, context);
    <D.41780>:
    D.41731 = mono_defaults.methodhandle_class;
    *handle_class = D.41731;
  }
  goto <D.41781>;
  <D.41775>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41785 = "ConstructorBuilder";
      D.41786 = MEM[(const unsigned char *)D.41785];
      D.41787 = (int) D.41786;
      D.41788 = *__s2;
      D.41789 = (int) D.41788;
      __result = D.41787 - D.41789;
      {
        D.41790 = __s2_len != 0;
        D.41791 = __result == 0;
        D.41792 = D.41790 & D.41791;
        if (D.41792 != 0) goto <D.41793>; else goto <D.41794>;
        <D.41793>:
        D.41795 = &MEM[(void *)"ConstructorBuilder" + 1B];
        D.41796 = *D.41795;
        D.41797 = (int) D.41796;
        D.41798 = __s2 + 1;
        D.41799 = *D.41798;
        D.41800 = (int) D.41799;
        __result = D.41797 - D.41800;
        D.41801 = __s2_len > 1;
        D.41791 = __result == 0;
        D.41802 = D.41801 & D.41791;
        if (D.41802 != 0) goto <D.41803>; else goto <D.41804>;
        <D.41803>:
        D.41805 = &MEM[(void *)"ConstructorBuilder" + 2B];
        D.41806 = *D.41805;
        D.41807 = (int) D.41806;
        D.41808 = __s2 + 2;
        D.41809 = *D.41808;
        D.41810 = (int) D.41809;
        __result = D.41807 - D.41810;
        D.41811 = __s2_len > 2;
        D.41791 = __result == 0;
        D.41812 = D.41811 & D.41791;
        if (D.41812 != 0) goto <D.41813>; else goto <D.41814>;
        <D.41813>:
        D.41815 = &MEM[(void *)"ConstructorBuilder" + 3B];
        D.41816 = *D.41815;
        D.41817 = (int) D.41816;
        D.41818 = __s2 + 3;
        D.41819 = *D.41818;
        D.41820 = (int) D.41819;
        __result = D.41817 - D.41820;
        <D.41814>:
        <D.41804>:
        <D.41794>:
      }
      D.26056 = __result;
    }
    iftmp.805 = -D.26056;
    goto <D.41821>;
    <D.41784>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.805 = __builtin_strcmp (D.41500, "ConstructorBuilder");
    <D.41821>:
    D.26057 = iftmp.805;
  }
  if (D.26057 == 0) goto <D.41822>; else goto <D.41823>;
  <D.41822>:
  {
    struct MonoReflectionCtorBuilder * cb;

    cb = obj;
    result = cb->mhandle;
    if (result == 0B) goto <D.41824>; else goto <D.41825>;
    <D.41824>:
    {
      struct MonoReflectionTypeBuilder * tb;

      tb = cb->type;
      D.41826 = mono_domain_get ();
      mono_domain_try_type_resolve (D.41826, 0B, tb);
      result = cb->mhandle;
    }
    <D.41825>:
    if (context != 0B) goto <D.41827>; else goto <D.41828>;
    <D.41827>:
    result = mono_class_inflate_generic_method (result, context);
    <D.41828>:
    D.41731 = mono_defaults.methodhandle_class;
    *handle_class = D.41731;
  }
  goto <D.41829>;
  <D.41823>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41833 = "MonoField";
      D.41834 = MEM[(const unsigned char *)D.41833];
      D.41835 = (int) D.41834;
      D.41836 = *__s2;
      D.41837 = (int) D.41836;
      __result = D.41835 - D.41837;
      {
        D.41838 = __s2_len != 0;
        D.41839 = __result == 0;
        D.41840 = D.41838 & D.41839;
        if (D.41840 != 0) goto <D.41841>; else goto <D.41842>;
        <D.41841>:
        D.41843 = &MEM[(void *)"MonoField" + 1B];
        D.41844 = *D.41843;
        D.41845 = (int) D.41844;
        D.41846 = __s2 + 1;
        D.41847 = *D.41846;
        D.41848 = (int) D.41847;
        __result = D.41845 - D.41848;
        D.41849 = __s2_len > 1;
        D.41839 = __result == 0;
        D.41850 = D.41849 & D.41839;
        if (D.41850 != 0) goto <D.41851>; else goto <D.41852>;
        <D.41851>:
        D.41853 = &MEM[(void *)"MonoField" + 2B];
        D.41854 = *D.41853;
        D.41855 = (int) D.41854;
        D.41856 = __s2 + 2;
        D.41857 = *D.41856;
        D.41858 = (int) D.41857;
        __result = D.41855 - D.41858;
        D.41859 = __s2_len > 2;
        D.41839 = __result == 0;
        D.41860 = D.41859 & D.41839;
        if (D.41860 != 0) goto <D.41861>; else goto <D.41862>;
        <D.41861>:
        D.41863 = &MEM[(void *)"MonoField" + 3B];
        D.41864 = *D.41863;
        D.41865 = (int) D.41864;
        D.41866 = __s2 + 3;
        D.41867 = *D.41866;
        D.41868 = (int) D.41867;
        __result = D.41865 - D.41868;
        <D.41862>:
        <D.41852>:
        <D.41842>:
      }
      D.26067 = __result;
    }
    iftmp.806 = -D.26067;
    goto <D.41869>;
    <D.41832>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.806 = __builtin_strcmp (D.41500, "MonoField");
    <D.41869>:
    D.26068 = iftmp.806;
  }
  if (D.26068 == 0) goto <D.41870>; else goto <D.41871>;
  <D.41870>:
  {
    struct MonoClassField * field;

    field = MEM[(struct MonoReflectionField *)obj].field;
    D.41872 = field->parent;
    ensure_complete_type (D.41872);
    if (context != 0B) goto <D.41873>; else goto <D.41874>;
    <D.41873>:
    {
      struct MonoType * inflated;
      struct MonoClass * class;
      struct MonoClassField * inflated_field;
      void * iter;

      try
        {
          D.41872 = field->parent;
          D.41875 = &D.41872->byval_arg;
          inflated = mono_class_inflate_generic_type (D.41875, context);
          class = mono_class_from_mono_type (inflated);
          iter = 0B;
          mono_metadata_free_type (inflated);
          goto <D.26085>;
          <D.26084>:
          {
            size_t __s1_len;
            size_t __s2_len;

            D.41876 = field->name;
            D.41877 = inflated_field->name;
            D.26082 = __builtin_strcmp (D.41876, D.41877);
          }
          if (D.26082 == 0) goto <D.26083>; else goto <D.41878>;
          <D.41878>:
          <D.26085>:
          inflated_field = mono_class_get_fields (class, &iter);
          if (inflated_field != 0B) goto <D.26084>; else goto <D.26083>;
          <D.26083>:
          if (inflated_field == 0B) goto <D.41880>; else goto <D.41883>;
          <D.41883>:
          {
            size_t __s1_len;
            size_t __s2_len;

            D.41876 = field->name;
            D.41877 = inflated_field->name;
            D.26094 = __builtin_strcmp (D.41876, D.41877);
          }
          if (D.26094 != 0) goto <D.41880>; else goto <D.41881>;
          <D.41880>:
          iftmp.807 = 1;
          goto <D.41882>;
          <D.41881>:
          iftmp.807 = 0;
          <D.41882>:
          D.41884 = iftmp.807 != 0;
          D.41885 = (long int) D.41884;
          D.41886 = __builtin_expect (D.41885, 0);
          if (D.41886 != 0) goto <D.41887>; else goto <D.41888>;
          <D.41887>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11825, "inflated_field && !strcmp (field->name, inflated_field->name)");
          <D.41888>:
          result = inflated_field;
        }
      finally
        {
          iter = {CLOBBER};
        }
    }
    goto <D.41889>;
    <D.41874>:
    result = field;
    <D.41889>:
    D.41890 = mono_defaults.fieldhandle_class;
    *handle_class = D.41890;
    D.41504 = result == 0B;
    D.41505 = (long int) D.41504;
    D.41506 = __builtin_expect (D.41505, 0);
    if (D.41506 != 0) goto <D.41891>; else goto <D.41892>;
    <D.41891>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11831, "result");
    <D.41892>:
  }
  goto <D.41893>;
  <D.41871>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41897 = "FieldBuilder";
      D.41898 = MEM[(const unsigned char *)D.41897];
      D.41899 = (int) D.41898;
      D.41900 = *__s2;
      D.41901 = (int) D.41900;
      __result = D.41899 - D.41901;
      {
        D.41902 = __s2_len != 0;
        D.41903 = __result == 0;
        D.41904 = D.41902 & D.41903;
        if (D.41904 != 0) goto <D.41905>; else goto <D.41906>;
        <D.41905>:
        D.41907 = &MEM[(void *)"FieldBuilder" + 1B];
        D.41908 = *D.41907;
        D.41909 = (int) D.41908;
        D.41910 = __s2 + 1;
        D.41911 = *D.41910;
        D.41912 = (int) D.41911;
        __result = D.41909 - D.41912;
        D.41913 = __s2_len > 1;
        D.41903 = __result == 0;
        D.41914 = D.41913 & D.41903;
        if (D.41914 != 0) goto <D.41915>; else goto <D.41916>;
        <D.41915>:
        D.41917 = &MEM[(void *)"FieldBuilder" + 2B];
        D.41918 = *D.41917;
        D.41919 = (int) D.41918;
        D.41920 = __s2 + 2;
        D.41921 = *D.41920;
        D.41922 = (int) D.41921;
        __result = D.41919 - D.41922;
        D.41923 = __s2_len > 2;
        D.41903 = __result == 0;
        D.41924 = D.41923 & D.41903;
        if (D.41924 != 0) goto <D.41925>; else goto <D.41926>;
        <D.41925>:
        D.41927 = &MEM[(void *)"FieldBuilder" + 3B];
        D.41928 = *D.41927;
        D.41929 = (int) D.41928;
        D.41930 = __s2 + 3;
        D.41931 = *D.41930;
        D.41932 = (int) D.41931;
        __result = D.41929 - D.41932;
        <D.41926>:
        <D.41916>:
        <D.41906>:
      }
      D.26102 = __result;
    }
    iftmp.808 = -D.26102;
    goto <D.41933>;
    <D.41896>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.808 = __builtin_strcmp (D.41500, "FieldBuilder");
    <D.41933>:
    D.26103 = iftmp.808;
  }
  if (D.26103 == 0) goto <D.41934>; else goto <D.41935>;
  <D.41934>:
  {
    struct MonoReflectionFieldBuilder * fb;

    fb = obj;
    result = fb->handle;
    if (result == 0B) goto <D.41936>; else goto <D.41937>;
    <D.41936>:
    {
      struct MonoReflectionTypeBuilder * tb;

      tb = fb->typeb;
      D.41938 = mono_domain_get ();
      mono_domain_try_type_resolve (D.41938, 0B, tb);
      result = fb->handle;
    }
    <D.41937>:
    D.41939 = fb->handle;
    if (D.41939 != 0B) goto <D.41940>; else goto <D.41941>;
    <D.41940>:
    D.41939 = fb->handle;
    D.41942 = D.41939->parent;
    D.41943 = D.41942->generic_container;
    if (D.41943 != 0B) goto <D.41944>; else goto <D.41945>;
    <D.41944>:
    {
      struct MonoClass * klass;
      struct MonoType * type;
      struct MonoClass * inflated;

      D.41939 = fb->handle;
      klass = D.41939->parent;
      D.41946 = &klass->byval_arg;
      type = mono_class_inflate_generic_type (D.41946, context);
      inflated = mono_class_from_mono_type (type);
      D.41939 = fb->handle;
      D.41947 = mono_field_get_name (D.41939);
      result = mono_class_get_field_from_name (inflated, D.41947);
      D.41504 = result == 0B;
      D.41505 = (long int) D.41504;
      D.41506 = __builtin_expect (D.41505, 0);
      if (D.41506 != 0) goto <D.41948>; else goto <D.41949>;
      <D.41948>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11849, "result");
      <D.41949>:
      mono_metadata_free_type (type);
    }
    <D.41945>:
    <D.41941>:
    D.41890 = mono_defaults.fieldhandle_class;
    *handle_class = D.41890;
  }
  goto <D.41950>;
  <D.41935>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.41954 = "TypeBuilder";
      D.41955 = MEM[(const unsigned char *)D.41954];
      D.41956 = (int) D.41955;
      D.41957 = *__s2;
      D.41958 = (int) D.41957;
      __result = D.41956 - D.41958;
      {
        D.41959 = __s2_len != 0;
        D.41960 = __result == 0;
        D.41961 = D.41959 & D.41960;
        if (D.41961 != 0) goto <D.41962>; else goto <D.41963>;
        <D.41962>:
        D.41964 = &MEM[(void *)"TypeBuilder" + 1B];
        D.41965 = *D.41964;
        D.41966 = (int) D.41965;
        D.41967 = __s2 + 1;
        D.41968 = *D.41967;
        D.41969 = (int) D.41968;
        __result = D.41966 - D.41969;
        D.41970 = __s2_len > 1;
        D.41960 = __result == 0;
        D.41971 = D.41970 & D.41960;
        if (D.41971 != 0) goto <D.41972>; else goto <D.41973>;
        <D.41972>:
        D.41974 = &MEM[(void *)"TypeBuilder" + 2B];
        D.41975 = *D.41974;
        D.41976 = (int) D.41975;
        D.41977 = __s2 + 2;
        D.41978 = *D.41977;
        D.41979 = (int) D.41978;
        __result = D.41976 - D.41979;
        D.41980 = __s2_len > 2;
        D.41960 = __result == 0;
        D.41981 = D.41980 & D.41960;
        if (D.41981 != 0) goto <D.41982>; else goto <D.41983>;
        <D.41982>:
        D.41984 = &MEM[(void *)"TypeBuilder" + 3B];
        D.41985 = *D.41984;
        D.41986 = (int) D.41985;
        D.41987 = __s2 + 3;
        D.41988 = *D.41987;
        D.41989 = (int) D.41988;
        __result = D.41986 - D.41989;
        <D.41983>:
        <D.41973>:
        <D.41963>:
      }
      D.26116 = __result;
    }
    iftmp.809 = -D.26116;
    goto <D.41990>;
    <D.41953>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.809 = __builtin_strcmp (D.41500, "TypeBuilder");
    <D.41990>:
    D.26117 = iftmp.809;
  }
  if (D.26117 == 0) goto <D.41991>; else goto <D.41992>;
  <D.41991>:
  {
    struct MonoReflectionTypeBuilder * tb;
    struct MonoType * type;
    struct MonoClass * klass;

    tb = obj;
    type = mono_reflection_type_get_handle (tb);
    klass = type->data.klass;
    D.41993 = BIT_FIELD_REF <*klass, 8, 160>;
    D.41994 = D.41993 & 128;
    if (D.41994 != 0) goto <D.41995>; else goto <D.41996>;
    <D.41995>:
    result = klass;
    goto <D.41997>;
    <D.41996>:
    D.41998 = mono_domain_get ();
    mono_domain_try_type_resolve (D.41998, 0B, tb);
    result = type->data.klass;
    D.41504 = result == 0B;
    D.41505 = (long int) D.41504;
    D.41506 = __builtin_expect (D.41505, 0);
    if (D.41506 != 0) goto <D.41999>; else goto <D.42000>;
    <D.41999>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11866, "result");
    <D.42000>:
    <D.41997>:
    D.41559 = mono_defaults.typehandle_class;
    *handle_class = D.41559;
  }
  goto <D.42001>;
  <D.41992>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.42005 = "SignatureHelper";
      D.42006 = MEM[(const unsigned char *)D.42005];
      D.42007 = (int) D.42006;
      D.42008 = *__s2;
      D.42009 = (int) D.42008;
      __result = D.42007 - D.42009;
      {
        D.42010 = __s2_len != 0;
        D.42011 = __result == 0;
        D.42012 = D.42010 & D.42011;
        if (D.42012 != 0) goto <D.42013>; else goto <D.42014>;
        <D.42013>:
        D.42015 = &MEM[(void *)"SignatureHelper" + 1B];
        D.42016 = *D.42015;
        D.42017 = (int) D.42016;
        D.42018 = __s2 + 1;
        D.42019 = *D.42018;
        D.42020 = (int) D.42019;
        __result = D.42017 - D.42020;
        D.42021 = __s2_len > 1;
        D.42011 = __result == 0;
        D.42022 = D.42021 & D.42011;
        if (D.42022 != 0) goto <D.42023>; else goto <D.42024>;
        <D.42023>:
        D.42025 = &MEM[(void *)"SignatureHelper" + 2B];
        D.42026 = *D.42025;
        D.42027 = (int) D.42026;
        D.42028 = __s2 + 2;
        D.42029 = *D.42028;
        D.42030 = (int) D.42029;
        __result = D.42027 - D.42030;
        D.42031 = __s2_len > 2;
        D.42011 = __result == 0;
        D.42032 = D.42031 & D.42011;
        if (D.42032 != 0) goto <D.42033>; else goto <D.42034>;
        <D.42033>:
        D.42035 = &MEM[(void *)"SignatureHelper" + 3B];
        D.42036 = *D.42035;
        D.42037 = (int) D.42036;
        D.42038 = __s2 + 3;
        D.42039 = *D.42038;
        D.42040 = (int) D.42039;
        __result = D.42037 - D.42040;
        <D.42034>:
        <D.42024>:
        <D.42014>:
      }
      D.26128 = __result;
    }
    iftmp.810 = -D.26128;
    goto <D.42041>;
    <D.42004>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.810 = __builtin_strcmp (D.41500, "SignatureHelper");
    <D.42041>:
    D.26129 = iftmp.810;
  }
  if (D.26129 == 0) goto <D.42042>; else goto <D.42043>;
  <D.42042>:
  {
    struct MonoReflectionSigHelper * helper;
    struct MonoMethodSignature * sig;
    int nargs;
    int i;

    helper = obj;
    D.42044 = helper->arguments;
    if (D.42044 != 0B) goto <D.42045>; else goto <D.42046>;
    <D.42045>:
    D.42044 = helper->arguments;
    D.42047 = mono_array_length (D.42044);
    nargs = (int) D.42047;
    goto <D.42048>;
    <D.42046>:
    nargs = 0;
    <D.42048>:
    nargs.811 = (unsigned int) nargs;
    sig = mono_metadata_signature_alloc (image, nargs.811);
    D.42050 = helper->call_conv;
    D.42051 = D.42050 & 64;
    D.42052 = D.42051 != 0;
    sig->explicit_this = D.42052;
    D.42050 = helper->call_conv;
    D.42053 = D.42050 & 32;
    D.42054 = D.42053 != 0;
    sig->hasthis = D.42054;
    D.42055 = helper->unmanaged_call_conv;
    if (D.42055 != 0) goto <D.42056>; else goto <D.42057>;
    <D.42056>:
    D.42055 = helper->unmanaged_call_conv;
    D.42058 = (unsigned char) D.42055;
    D.42059 = D.42058 + 255;
    D.42060 = (<unnamed-unsigned:6>) D.42059;
    sig->call_convention = D.42060;
    sig->pinvoke = 1;
    goto <D.42061>;
    <D.42057>:
    D.42050 = helper->call_conv;
    D.42062 = D.42050 & 2;
    if (D.42062 != 0) goto <D.42063>; else goto <D.42064>;
    <D.42063>:
    sig->call_convention = 5;
    goto <D.42065>;
    <D.42064>:
    sig->call_convention = 0;
    <D.42065>:
    <D.42061>:
    D.42066 = (short unsigned int) nargs;
    sig->param_count = D.42066;
    D.42067 = helper->return_type;
    D.42068 = D.42067->type;
    sig->ret = D.42068;
    i = 0;
    goto <D.26135>;
    <D.26134>:
    D.42044 = helper->arguments;
    i.812 = (unsigned int) i;
    D.42070 = mono_array_addr_with_size (D.42044, 4, i.812);
    D.42071 = MEM[(void * *)D.42070];
    D.42072 = mono_reflection_type_get_handle (D.42071);
    sig->params[i] = D.42072;
    i = i + 1;
    <D.26135>:
    if (i < nargs) goto <D.26134>; else goto <D.26136>;
    <D.26136>:
    result = sig;
    *handle_class = 0B;
  }
  goto <D.42073>;
  <D.42043>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.42077 = "DynamicMethod";
      D.42078 = MEM[(const unsigned char *)D.42077];
      D.42079 = (int) D.42078;
      D.42080 = *__s2;
      D.42081 = (int) D.42080;
      __result = D.42079 - D.42081;
      {
        D.42082 = __s2_len != 0;
        D.42083 = __result == 0;
        D.42084 = D.42082 & D.42083;
        if (D.42084 != 0) goto <D.42085>; else goto <D.42086>;
        <D.42085>:
        D.42087 = &MEM[(void *)"DynamicMethod" + 1B];
        D.42088 = *D.42087;
        D.42089 = (int) D.42088;
        D.42090 = __s2 + 1;
        D.42091 = *D.42090;
        D.42092 = (int) D.42091;
        __result = D.42089 - D.42092;
        D.42093 = __s2_len > 1;
        D.42083 = __result == 0;
        D.42094 = D.42093 & D.42083;
        if (D.42094 != 0) goto <D.42095>; else goto <D.42096>;
        <D.42095>:
        D.42097 = &MEM[(void *)"DynamicMethod" + 2B];
        D.42098 = *D.42097;
        D.42099 = (int) D.42098;
        D.42100 = __s2 + 2;
        D.42101 = *D.42100;
        D.42102 = (int) D.42101;
        __result = D.42099 - D.42102;
        D.42103 = __s2_len > 2;
        D.42083 = __result == 0;
        D.42104 = D.42103 & D.42083;
        if (D.42104 != 0) goto <D.42105>; else goto <D.42106>;
        <D.42105>:
        D.42107 = &MEM[(void *)"DynamicMethod" + 3B];
        D.42108 = *D.42107;
        D.42109 = (int) D.42108;
        D.42110 = __s2 + 3;
        D.42111 = *D.42110;
        D.42112 = (int) D.42111;
        __result = D.42109 - D.42112;
        <D.42106>:
        <D.42096>:
        <D.42086>:
      }
      D.26144 = __result;
    }
    iftmp.813 = -D.26144;
    goto <D.42113>;
    <D.42076>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.813 = __builtin_strcmp (D.41500, "DynamicMethod");
    <D.42113>:
    D.26145 = iftmp.813;
  }
  if (D.26145 == 0) goto <D.42114>; else goto <D.42115>;
  <D.42114>:
  {
    struct MonoReflectionDynamicMethod * method;

    method = obj;
    D.42116 = method->mhandle;
    D.42117 = D.42116 == 0B;
    D.42118 = (long int) D.42117;
    D.42119 = __builtin_expect (D.42118, 0);
    if (D.42119 != 0) goto <D.42120>; else goto <D.42121>;
    <D.42120>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11903, "method->mhandle");
    <D.42121>:
    result = method->mhandle;
    D.41731 = mono_defaults.methodhandle_class;
    *handle_class = D.41731;
  }
  goto <D.42122>;
  <D.42115>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.42126 = "GenericTypeParameterBuilder";
      D.42127 = MEM[(const unsigned char *)D.42126];
      D.42128 = (int) D.42127;
      D.42129 = *__s2;
      D.42130 = (int) D.42129;
      __result = D.42128 - D.42130;
      {
        D.42131 = __s2_len != 0;
        D.42132 = __result == 0;
        D.42133 = D.42131 & D.42132;
        if (D.42133 != 0) goto <D.42134>; else goto <D.42135>;
        <D.42134>:
        D.42136 = &MEM[(void *)"GenericTypeParameterBuilder" + 1B];
        D.42137 = *D.42136;
        D.42138 = (int) D.42137;
        D.42139 = __s2 + 1;
        D.42140 = *D.42139;
        D.42141 = (int) D.42140;
        __result = D.42138 - D.42141;
        D.42142 = __s2_len > 1;
        D.42132 = __result == 0;
        D.42143 = D.42142 & D.42132;
        if (D.42143 != 0) goto <D.42144>; else goto <D.42145>;
        <D.42144>:
        D.42146 = &MEM[(void *)"GenericTypeParameterBuilder" + 2B];
        D.42147 = *D.42146;
        D.42148 = (int) D.42147;
        D.42149 = __s2 + 2;
        D.42150 = *D.42149;
        D.42151 = (int) D.42150;
        __result = D.42148 - D.42151;
        D.42152 = __s2_len > 2;
        D.42132 = __result == 0;
        D.42153 = D.42152 & D.42132;
        if (D.42153 != 0) goto <D.42154>; else goto <D.42155>;
        <D.42154>:
        D.42156 = &MEM[(void *)"GenericTypeParameterBuilder" + 3B];
        D.42157 = *D.42156;
        D.42158 = (int) D.42157;
        D.42159 = __s2 + 3;
        D.42160 = *D.42159;
        D.42161 = (int) D.42160;
        __result = D.42158 - D.42161;
        <D.42155>:
        <D.42145>:
        <D.42135>:
      }
      D.26154 = __result;
    }
    iftmp.814 = -D.26154;
    goto <D.42162>;
    <D.42125>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.814 = __builtin_strcmp (D.41500, "GenericTypeParameterBuilder");
    <D.42162>:
    D.26155 = iftmp.814;
  }
  if (D.26155 == 0) goto <D.42163>; else goto <D.42164>;
  <D.42163>:
  {
    struct MonoType * type;

    type = mono_reflection_type_get_handle (obj);
    type = mono_class_inflate_generic_type (type, context);
    result = mono_class_from_mono_type (type);
    D.41559 = mono_defaults.typehandle_class;
    *handle_class = D.41559;
    D.41504 = result == 0B;
    D.41505 = (long int) D.41504;
    D.41506 = __builtin_expect (D.41505, 0);
    if (D.41506 != 0) goto <D.42165>; else goto <D.42166>;
    <D.42165>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11911, "result");
    <D.42166>:
    mono_metadata_free_type (type);
  }
  goto <D.42167>;
  <D.42164>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.42171 = "MonoGenericClass";
      D.42172 = MEM[(const unsigned char *)D.42171];
      D.42173 = (int) D.42172;
      D.42174 = *__s2;
      D.42175 = (int) D.42174;
      __result = D.42173 - D.42175;
      {
        D.42176 = __s2_len != 0;
        D.42177 = __result == 0;
        D.42178 = D.42176 & D.42177;
        if (D.42178 != 0) goto <D.42179>; else goto <D.42180>;
        <D.42179>:
        D.42181 = &MEM[(void *)"MonoGenericClass" + 1B];
        D.42182 = *D.42181;
        D.42183 = (int) D.42182;
        D.42184 = __s2 + 1;
        D.42185 = *D.42184;
        D.42186 = (int) D.42185;
        __result = D.42183 - D.42186;
        D.42187 = __s2_len > 1;
        D.42177 = __result == 0;
        D.42188 = D.42187 & D.42177;
        if (D.42188 != 0) goto <D.42189>; else goto <D.42190>;
        <D.42189>:
        D.42191 = &MEM[(void *)"MonoGenericClass" + 2B];
        D.42192 = *D.42191;
        D.42193 = (int) D.42192;
        D.42194 = __s2 + 2;
        D.42195 = *D.42194;
        D.42196 = (int) D.42195;
        __result = D.42193 - D.42196;
        D.42197 = __s2_len > 2;
        D.42177 = __result == 0;
        D.42198 = D.42197 & D.42177;
        if (D.42198 != 0) goto <D.42199>; else goto <D.42200>;
        <D.42199>:
        D.42201 = &MEM[(void *)"MonoGenericClass" + 3B];
        D.42202 = *D.42201;
        D.42203 = (int) D.42202;
        D.42204 = __s2 + 3;
        D.42205 = *D.42204;
        D.42206 = (int) D.42205;
        __result = D.42203 - D.42206;
        <D.42200>:
        <D.42190>:
        <D.42180>:
      }
      D.26164 = __result;
    }
    iftmp.815 = -D.26164;
    goto <D.42207>;
    <D.42170>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.815 = __builtin_strcmp (D.41500, "MonoGenericClass");
    <D.42207>:
    D.26165 = iftmp.815;
  }
  if (D.26165 == 0) goto <D.42208>; else goto <D.42209>;
  <D.42208>:
  {
    struct MonoType * type;

    type = mono_reflection_type_get_handle (obj);
    type = mono_class_inflate_generic_type (type, context);
    result = mono_class_from_mono_type (type);
    D.41559 = mono_defaults.typehandle_class;
    *handle_class = D.41559;
    D.41504 = result == 0B;
    D.41505 = (long int) D.41504;
    D.41506 = __builtin_expect (D.41505, 0);
    if (D.41506 != 0) goto <D.42210>; else goto <D.42211>;
    <D.42210>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11918, "result");
    <D.42211>:
    mono_metadata_free_type (type);
  }
  goto <D.42212>;
  <D.42209>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.42216 = "FieldOnTypeBuilderInst";
      D.42217 = MEM[(const unsigned char *)D.42216];
      D.42218 = (int) D.42217;
      D.42219 = *__s2;
      D.42220 = (int) D.42219;
      __result = D.42218 - D.42220;
      {
        D.42221 = __s2_len != 0;
        D.42222 = __result == 0;
        D.42223 = D.42221 & D.42222;
        if (D.42223 != 0) goto <D.42224>; else goto <D.42225>;
        <D.42224>:
        D.42226 = &MEM[(void *)"FieldOnTypeBuilderInst" + 1B];
        D.42227 = *D.42226;
        D.42228 = (int) D.42227;
        D.42229 = __s2 + 1;
        D.42230 = *D.42229;
        D.42231 = (int) D.42230;
        __result = D.42228 - D.42231;
        D.42232 = __s2_len > 1;
        D.42222 = __result == 0;
        D.42233 = D.42232 & D.42222;
        if (D.42233 != 0) goto <D.42234>; else goto <D.42235>;
        <D.42234>:
        D.42236 = &MEM[(void *)"FieldOnTypeBuilderInst" + 2B];
        D.42237 = *D.42236;
        D.42238 = (int) D.42237;
        D.42239 = __s2 + 2;
        D.42240 = *D.42239;
        D.42241 = (int) D.42240;
        __result = D.42238 - D.42241;
        D.42242 = __s2_len > 2;
        D.42222 = __result == 0;
        D.42243 = D.42242 & D.42222;
        if (D.42243 != 0) goto <D.42244>; else goto <D.42245>;
        <D.42244>:
        D.42246 = &MEM[(void *)"FieldOnTypeBuilderInst" + 3B];
        D.42247 = *D.42246;
        D.42248 = (int) D.42247;
        D.42249 = __s2 + 3;
        D.42250 = *D.42249;
        D.42251 = (int) D.42250;
        __result = D.42248 - D.42251;
        <D.42245>:
        <D.42235>:
        <D.42225>:
      }
      D.26174 = __result;
    }
    iftmp.816 = -D.26174;
    goto <D.42252>;
    <D.42215>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.816 = __builtin_strcmp (D.41500, "FieldOnTypeBuilderInst");
    <D.42252>:
    D.26175 = iftmp.816;
  }
  if (D.26175 == 0) goto <D.42253>; else goto <D.42254>;
  <D.42253>:
  {
    struct MonoReflectionFieldOnTypeBuilderInst * f;
    struct MonoClass * inflated;
    struct MonoType * type;
    struct MonoClassField * field;

    f = obj;
    D.42255 = f->fb;
    D.42256 = D.42255->vtable;
    D.42257 = D.42256->klass;
    D.42258 = is_sre_field_builder (D.42257);
    if (D.42258 != 0) goto <D.42259>; else goto <D.42260>;
    <D.42259>:
    D.42255 = f->fb;
    field = MEM[(struct MonoReflectionFieldBuilder *)D.42255].handle;
    goto <D.42261>;
    <D.42260>:
    D.42255 = f->fb;
    D.42256 = D.42255->vtable;
    D.42257 = D.42256->klass;
    D.42262 = is_sr_mono_field (D.42257);
    if (D.42262 != 0) goto <D.42263>; else goto <D.42264>;
    <D.42263>:
    D.42255 = f->fb;
    field = MEM[(struct MonoReflectionField *)D.42255].field;
    goto <D.42265>;
    <D.42264>:
    D.42255 = f->fb;
    D.42256 = D.42255->vtable;
    D.42257 = D.42256->klass;
    D.42266 = mono_type_get_full_name (D.42257);
    monoeg_g_log (0B, 4, "resolve_object:: can\'t handle a FTBI with base_method of type %s", D.42266);
    <D.26180>:
    goto <D.26180>;
    <D.42265>:
    <D.42261>:
    D.42267 = f->inst;
    D.42268 = mono_reflection_type_get_handle (D.42267);
    type = mono_class_inflate_generic_type (D.42268, context);
    inflated = mono_class_from_mono_type (type);
    D.42269 = mono_field_get_name (field);
    field = mono_class_get_field_from_name (inflated, D.42269);
    result = field;
    D.42270 = field->parent;
    ensure_complete_type (D.42270);
    D.41504 = result == 0B;
    D.41505 = (long int) D.41504;
    D.41506 = __builtin_expect (D.41505, 0);
    if (D.41506 != 0) goto <D.42271>; else goto <D.42272>;
    <D.42271>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11938, "result");
    <D.42272>:
    mono_metadata_free_type (type);
    D.41890 = mono_defaults.fieldhandle_class;
    *handle_class = D.41890;
  }
  goto <D.42273>;
  <D.42254>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.42277 = "ConstructorOnTypeBuilderInst";
      D.42278 = MEM[(const unsigned char *)D.42277];
      D.42279 = (int) D.42278;
      D.42280 = *__s2;
      D.42281 = (int) D.42280;
      __result = D.42279 - D.42281;
      {
        D.42282 = __s2_len != 0;
        D.42283 = __result == 0;
        D.42284 = D.42282 & D.42283;
        if (D.42284 != 0) goto <D.42285>; else goto <D.42286>;
        <D.42285>:
        D.42287 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 1B];
        D.42288 = *D.42287;
        D.42289 = (int) D.42288;
        D.42290 = __s2 + 1;
        D.42291 = *D.42290;
        D.42292 = (int) D.42291;
        __result = D.42289 - D.42292;
        D.42293 = __s2_len > 1;
        D.42283 = __result == 0;
        D.42294 = D.42293 & D.42283;
        if (D.42294 != 0) goto <D.42295>; else goto <D.42296>;
        <D.42295>:
        D.42297 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 2B];
        D.42298 = *D.42297;
        D.42299 = (int) D.42298;
        D.42300 = __s2 + 2;
        D.42301 = *D.42300;
        D.42302 = (int) D.42301;
        __result = D.42299 - D.42302;
        D.42303 = __s2_len > 2;
        D.42283 = __result == 0;
        D.42304 = D.42303 & D.42283;
        if (D.42304 != 0) goto <D.42305>; else goto <D.42306>;
        <D.42305>:
        D.42307 = &MEM[(void *)"ConstructorOnTypeBuilderInst" + 3B];
        D.42308 = *D.42307;
        D.42309 = (int) D.42308;
        D.42310 = __s2 + 3;
        D.42311 = *D.42310;
        D.42312 = (int) D.42311;
        __result = D.42309 - D.42312;
        <D.42306>:
        <D.42296>:
        <D.42286>:
      }
      D.26188 = __result;
    }
    iftmp.817 = -D.26188;
    goto <D.42313>;
    <D.42276>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.817 = __builtin_strcmp (D.41500, "ConstructorOnTypeBuilderInst");
    <D.42313>:
    D.26189 = iftmp.817;
  }
  if (D.26189 == 0) goto <D.42314>; else goto <D.42315>;
  <D.42314>:
  {
    struct MonoReflectionCtorOnTypeBuilderInst * c;
    struct MonoType * type;
    struct MonoClass * inflated_klass;
    struct MonoMethod * method;

    c = obj;
    D.42316 = c->inst;
    D.42317 = mono_reflection_type_get_handle (D.42316);
    type = mono_class_inflate_generic_type (D.42317, context);
    inflated_klass = mono_class_from_mono_type (type);
    D.42318 = c->cb;
    D.42319 = D.42318->vtable;
    D.42320 = D.42319->klass;
    D.42321 = is_sre_ctor_builder (D.42320);
    if (D.42321 != 0) goto <D.42322>; else goto <D.42323>;
    <D.42322>:
    D.42318 = c->cb;
    method = MEM[(struct MonoReflectionCtorBuilder *)D.42318].mhandle;
    goto <D.42324>;
    <D.42323>:
    D.42318 = c->cb;
    D.42319 = D.42318->vtable;
    D.42320 = D.42319->klass;
    D.42325 = is_sr_mono_cmethod (D.42320);
    if (D.42325 != 0) goto <D.42326>; else goto <D.42327>;
    <D.42326>:
    D.42318 = c->cb;
    method = MEM[(struct MonoReflectionMethod *)D.42318].method;
    goto <D.42328>;
    <D.42327>:
    D.42318 = c->cb;
    D.42319 = D.42318->vtable;
    D.42320 = D.42319->klass;
    D.42329 = mono_type_get_full_name (D.42320);
    monoeg_g_log (0B, 4, "resolve_object:: can\'t handle a CTBI with base_method of type %s", D.42329);
    <D.26194>:
    goto <D.26194>;
    <D.42328>:
    <D.42324>:
    D.42318 = c->cb;
    result = inflate_mono_method (inflated_klass, method, D.42318);
    D.41731 = mono_defaults.methodhandle_class;
    *handle_class = D.41731;
    mono_metadata_free_type (type);
  }
  goto <D.42330>;
  <D.42315>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.42334 = "MethodOnTypeBuilderInst";
      D.42335 = MEM[(const unsigned char *)D.42334];
      D.42336 = (int) D.42335;
      D.42337 = *__s2;
      D.42338 = (int) D.42337;
      __result = D.42336 - D.42338;
      {
        D.42339 = __s2_len != 0;
        D.42340 = __result == 0;
        D.42341 = D.42339 & D.42340;
        if (D.42341 != 0) goto <D.42342>; else goto <D.42343>;
        <D.42342>:
        D.42344 = &MEM[(void *)"MethodOnTypeBuilderInst" + 1B];
        D.42345 = *D.42344;
        D.42346 = (int) D.42345;
        D.42347 = __s2 + 1;
        D.42348 = *D.42347;
        D.42349 = (int) D.42348;
        __result = D.42346 - D.42349;
        D.42350 = __s2_len > 1;
        D.42340 = __result == 0;
        D.42351 = D.42350 & D.42340;
        if (D.42351 != 0) goto <D.42352>; else goto <D.42353>;
        <D.42352>:
        D.42354 = &MEM[(void *)"MethodOnTypeBuilderInst" + 2B];
        D.42355 = *D.42354;
        D.42356 = (int) D.42355;
        D.42357 = __s2 + 2;
        D.42358 = *D.42357;
        D.42359 = (int) D.42358;
        __result = D.42356 - D.42359;
        D.42360 = __s2_len > 2;
        D.42340 = __result == 0;
        D.42361 = D.42360 & D.42340;
        if (D.42361 != 0) goto <D.42362>; else goto <D.42363>;
        <D.42362>:
        D.42364 = &MEM[(void *)"MethodOnTypeBuilderInst" + 3B];
        D.42365 = *D.42364;
        D.42366 = (int) D.42365;
        D.42367 = __s2 + 3;
        D.42368 = *D.42367;
        D.42369 = (int) D.42368;
        __result = D.42366 - D.42369;
        <D.42363>:
        <D.42353>:
        <D.42343>:
      }
      D.26202 = __result;
    }
    iftmp.818 = -D.26202;
    goto <D.42370>;
    <D.42333>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.818 = __builtin_strcmp (D.41500, "MethodOnTypeBuilderInst");
    <D.42370>:
    D.26203 = iftmp.818;
  }
  if (D.26203 == 0) goto <D.42371>; else goto <D.42372>;
  <D.42371>:
  {
    struct MonoReflectionMethodOnTypeBuilderInst * m;

    m = obj;
    D.42373 = m->method_args;
    if (D.42373 != 0B) goto <D.42374>; else goto <D.42375>;
    <D.42374>:
    result = mono_reflection_method_on_tb_inst_get_handle (m);
    if (context != 0B) goto <D.42376>; else goto <D.42377>;
    <D.42376>:
    result = mono_class_inflate_generic_method (result, context);
    <D.42377>:
    goto <D.42378>;
    <D.42375>:
    {
      struct MonoType * type;
      struct MonoClass * inflated_klass;
      struct MonoMethod * method;

      D.42379 = m->inst;
      D.42380 = mono_reflection_type_get_handle (D.42379);
      type = mono_class_inflate_generic_type (D.42380, context);
      inflated_klass = mono_class_from_mono_type (type);
      D.42381 = m->mb;
      D.42382 = D.42381->vtable;
      D.42383 = D.42382->klass;
      D.42384 = is_sre_method_builder (D.42383);
      if (D.42384 != 0) goto <D.42385>; else goto <D.42386>;
      <D.42385>:
      D.42381 = m->mb;
      method = MEM[(struct MonoReflectionMethodBuilder *)D.42381].mhandle;
      goto <D.42387>;
      <D.42386>:
      D.42381 = m->mb;
      D.42382 = D.42381->vtable;
      D.42383 = D.42382->klass;
      D.42388 = is_sr_mono_method (D.42383);
      if (D.42388 != 0) goto <D.42389>; else goto <D.42390>;
      <D.42389>:
      D.42381 = m->mb;
      method = MEM[(struct MonoReflectionMethod *)D.42381].method;
      goto <D.42391>;
      <D.42390>:
      D.42381 = m->mb;
      D.42382 = D.42381->vtable;
      D.42383 = D.42382->klass;
      D.42392 = mono_type_get_full_name (D.42383);
      monoeg_g_log (0B, 4, "resolve_object:: can\'t handle a MTBI with base_method of type %s", D.42392);
      <D.26208>:
      goto <D.26208>;
      <D.42391>:
      <D.42387>:
      D.42381 = m->mb;
      result = inflate_mono_method (inflated_klass, method, D.42381);
      mono_metadata_free_type (type);
    }
    <D.42378>:
    D.41731 = mono_defaults.methodhandle_class;
    *handle_class = D.41731;
  }
  goto <D.42393>;
  <D.42372>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.41461 = obj->vtable;
      D.41462 = D.41461->klass;
      __s2 = D.41462->name;
      D.42397 = "MonoArrayMethod";
      D.42398 = MEM[(const unsigned char *)D.42397];
      D.42399 = (int) D.42398;
      D.42400 = *__s2;
      D.42401 = (int) D.42400;
      __result = D.42399 - D.42401;
      {
        D.42402 = __s2_len != 0;
        D.42403 = __result == 0;
        D.42404 = D.42402 & D.42403;
        if (D.42404 != 0) goto <D.42405>; else goto <D.42406>;
        <D.42405>:
        D.42407 = &MEM[(void *)"MonoArrayMethod" + 1B];
        D.42408 = *D.42407;
        D.42409 = (int) D.42408;
        D.42410 = __s2 + 1;
        D.42411 = *D.42410;
        D.42412 = (int) D.42411;
        __result = D.42409 - D.42412;
        D.42413 = __s2_len > 1;
        D.42403 = __result == 0;
        D.42414 = D.42413 & D.42403;
        if (D.42414 != 0) goto <D.42415>; else goto <D.42416>;
        <D.42415>:
        D.42417 = &MEM[(void *)"MonoArrayMethod" + 2B];
        D.42418 = *D.42417;
        D.42419 = (int) D.42418;
        D.42420 = __s2 + 2;
        D.42421 = *D.42420;
        D.42422 = (int) D.42421;
        __result = D.42419 - D.42422;
        D.42423 = __s2_len > 2;
        D.42403 = __result == 0;
        D.42424 = D.42423 & D.42403;
        if (D.42424 != 0) goto <D.42425>; else goto <D.42426>;
        <D.42425>:
        D.42427 = &MEM[(void *)"MonoArrayMethod" + 3B];
        D.42428 = *D.42427;
        D.42429 = (int) D.42428;
        D.42430 = __s2 + 3;
        D.42431 = *D.42430;
        D.42432 = (int) D.42431;
        __result = D.42429 - D.42432;
        <D.42426>:
        <D.42416>:
        <D.42406>:
      }
      D.26216 = __result;
    }
    iftmp.819 = -D.26216;
    goto <D.42433>;
    <D.42396>:
    D.41461 = obj->vtable;
    D.41462 = D.41461->klass;
    D.41500 = D.41462->name;
    iftmp.819 = __builtin_strcmp (D.41500, "MonoArrayMethod");
    <D.42433>:
    D.26217 = iftmp.819;
  }
  if (D.26217 == 0) goto <D.42434>; else goto <D.42435>;
  <D.42434>:
  {
    struct MonoReflectionArrayMethod * m;
    struct MonoType * mtype;
    struct MonoClass * klass;
    struct MonoMethod * method;
    void * iter;
    char * name;

    try
      {
        m = obj;
        D.42436 = m->parent;
        mtype = mono_reflection_type_get_handle (D.42436);
        klass = mono_class_from_mono_type (mtype);
        D.42437 = m->name;
        name = mono_string_to_utf8 (D.42437);
        iter = 0B;
        goto <D.26235>;
        <D.26234>:
        {
          size_t __s1_len;
          size_t __s2_len;

          D.42438 = method->name;
          D.26232 = __builtin_strcmp (D.42438, name);
        }
        if (D.26232 == 0) goto <D.26233>; else goto <D.42439>;
        <D.42439>:
        <D.26235>:
        method = mono_class_get_methods (klass, &iter);
        if (method != 0B) goto <D.26234>; else goto <D.26233>;
        <D.26233>:
        monoeg_g_free (name);
        D.42440 = method == 0B;
        D.42441 = (long int) D.42440;
        D.42442 = __builtin_expect (D.42441, 0);
        if (D.42442 != 0) goto <D.42443>; else goto <D.42444>;
        <D.42443>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 12001, "method");
        <D.42444>:
        result = method;
        D.41731 = mono_defaults.methodhandle_class;
        *handle_class = D.41731;
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  goto <D.42445>;
  <D.42435>:
  D.42449 = mono_object_get_class (obj);
  D.42450 = is_sre_array (D.42449);
  if (D.42450 != 0) goto <D.42446>; else goto <D.42451>;
  <D.42451>:
  D.42452 = mono_object_get_class (obj);
  D.42453 = is_sre_byref (D.42452);
  if (D.42453 != 0) goto <D.42446>; else goto <D.42454>;
  <D.42454>:
  D.42455 = mono_object_get_class (obj);
  D.42456 = is_sre_pointer (D.42455);
  if (D.42456 != 0) goto <D.42446>; else goto <D.42447>;
  <D.42446>:
  {
    struct MonoReflectionType * ref_type;
    struct MonoType * type;

    ref_type = obj;
    type = mono_reflection_type_get_handle (ref_type);
    if (context != 0B) goto <D.42457>; else goto <D.42458>;
    <D.42457>:
    {
      struct MonoType * inflated;

      inflated = mono_class_inflate_generic_type (type, context);
      result = mono_class_from_mono_type (inflated);
      mono_metadata_free_type (inflated);
    }
    goto <D.42459>;
    <D.42458>:
    result = mono_class_from_mono_type (type);
    <D.42459>:
    D.41559 = mono_defaults.typehandle_class;
    *handle_class = D.41559;
  }
  goto <D.42448>;
  <D.42447>:
  D.41461 = obj->vtable;
  D.41462 = D.41461->klass;
  D.41500 = D.41462->name;
  monoeg_g_print ("%s\n", D.41500);
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 12022);
  <D.42448>:
  <D.42445>:
  <D.42393>:
  <D.42330>:
  <D.42273>:
  <D.42212>:
  <D.42167>:
  <D.42122>:
  <D.42073>:
  <D.42001>:
  <D.41950>:
  <D.41893>:
  <D.41829>:
  <D.41781>:
  <D.41565>:
  <D.41562>:
  <D.41509>:
  D.42460 = result;
  return D.42460;
}


ensure_complete_type (struct MonoClass * klass)
{
  struct MonoImage * D.42462;
  unsigned char D.42463;
  unsigned char D.42464;
  unsigned char D.42467;
  unsigned char D.42468;
  void * D.42471;
  struct MonoDomain * D.42474;
  struct MonoGenericClass * D.42475;
  struct MonoType * D.42478;
  struct MonoClass * D.42479;
  <unnamed-unsigned:22> D.42480;
  int D.42481;

  D.42462 = klass->image;
  D.42463 = BIT_FIELD_REF <*D.42462, 8, 128>;
  D.42464 = D.42463 & 8;
  if (D.42464 != 0) goto <D.42465>; else goto <D.42466>;
  <D.42465>:
  D.42467 = BIT_FIELD_REF <*klass, 8, 160>;
  D.42468 = D.42467 & 128;
  if (D.42468 == 0) goto <D.42469>; else goto <D.42470>;
  <D.42469>:
  D.42471 = mono_class_get_ref_info (klass);
  if (D.42471 != 0B) goto <D.42472>; else goto <D.42473>;
  <D.42472>:
  {
    struct MonoReflectionTypeBuilder * tb;

    tb = mono_class_get_ref_info (klass);
    D.42474 = mono_domain_get ();
    mono_domain_try_type_resolve (D.42474, 0B, tb);
  }
  <D.42473>:
  <D.42470>:
  <D.42466>:
  D.42475 = klass->generic_class;
  if (D.42475 != 0B) goto <D.42476>; else goto <D.42477>;
  <D.42476>:
  {
    struct MonoGenericInst * inst;
    int i;

    D.42475 = klass->generic_class;
    inst = D.42475->context.class_inst;
    i = 0;
    goto <D.25972>;
    <D.25971>:
    D.42478 = inst->type_argv[i];
    D.42479 = mono_class_from_mono_type (D.42478);
    ensure_complete_type (D.42479);
    i = i + 1;
    <D.25972>:
    D.42480 = inst->type_argc;
    D.42481 = (int) D.42480;
    if (D.42481 > i) goto <D.25971>; else goto <D.25973>;
    <D.25973>:
  }
  <D.42477>:
}


mono_reflection_is_valid_dynamic_token (struct MonoDynamicImage * image, guint32 token)
{
  gboolean D.42482;
  struct MonoGHashTable * D.42483;
  const void * token.820;
  void * D.42485;
  _Bool D.42486;

  D.42483 = image->tokens;
  token.820 = (const void *) token;
  D.42485 = mono_g_hash_table_lookup (D.42483, token.820);
  D.42486 = D.42485 != 0B;
  D.42482 = (gboolean) D.42486;
  return D.42482;
}


mono_reflection_lookup_signature (struct MonoImage * image, struct MonoMethod * method, guint32 token)
{
  unsigned char D.42488;
  unsigned char D.42489;
  _Bool D.42490;
  long int D.42491;
  long int D.42492;
  struct GHashTable * D.42495;
  const void * token.821;
  struct MonoMethodSignature * D.42499;
  struct MonoMethodSignature * sig;

  D.42488 = BIT_FIELD_REF <*image, 8, 128>;
  D.42489 = D.42488 & 8;
  D.42490 = D.42489 == 0;
  D.42491 = (long int) D.42490;
  D.42492 = __builtin_expect (D.42491, 0);
  if (D.42492 != 0) goto <D.42493>; else goto <D.42494>;
  <D.42493>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 11672, "image->dynamic");
  <D.42494>:
  D.42495 = MEM[(struct MonoDynamicImage *)image].vararg_aux_hash;
  token.821 = (const void *) token;
  sig = monoeg_g_hash_table_lookup (D.42495, token.821);
  if (sig != 0B) goto <D.42497>; else goto <D.42498>;
  <D.42497>:
  D.42499 = sig;
  return D.42499;
  <D.42498>:
  D.42499 = mono_method_signature (method);
  return D.42499;
}


mono_reflection_lookup_dynamic_token (struct MonoImage * image, guint32 token, gboolean valid_token, struct MonoClass * * handle_class, struct MonoGenericContext * context)
{
  struct MonoGHashTable * D.42501;
  const void * token.822;
  void * D.42507;
  struct MonoDynamicImage * assembly;
  struct MonoObject * obj;
  struct MonoClass * klass;

  try
    {
      assembly = image;
      mono_loader_lock ();
      D.42501 = assembly->tokens;
      token.822 = (const void *) token;
      obj = mono_g_hash_table_lookup (D.42501, token.822);
      mono_loader_unlock ();
      if (obj == 0B) goto <D.42503>; else goto <D.42504>;
      <D.42503>:
      if (valid_token != 0) goto <D.42505>; else goto <D.42506>;
      <D.42505>:
      monoeg_g_log (0B, 4, "Could not find required dynamic token 0x%08x", token);
      <D.25964>:
      goto <D.25964>;
      <D.42506>:
      D.42507 = 0B;
      return D.42507;
      <D.42504>:
      if (handle_class == 0B) goto <D.42508>; else goto <D.42509>;
      <D.42508>:
      handle_class = &klass;
      <D.42509>:
      D.42507 = resolve_object (image, obj, handle_class, context);
      return D.42507;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


mono_declsec_flags_from_method (struct MonoMethod * method)
{
  short unsigned int D.42512;
  int D.42513;
  int D.42514;
  uint32_t D.42517;
  struct MonoClass * D.42518;
  struct MonoImage * D.42519;

  D.42512 = method->flags;
  D.42513 = (int) D.42512;
  D.42514 = D.42513 & 16384;
  if (D.42514 != 0) goto <D.42515>; else goto <D.42516>;
  <D.42515>:
  {
    guint32 idx;

    idx = mono_method_get_index (method);
    idx = idx << 2;
    idx = idx | 1;
    D.42518 = method->klass;
    D.42519 = D.42518->image;
    D.42517 = mono_declsec_get_flags (D.42519, idx);
    return D.42517;
  }
  <D.42516>:
  D.42517 = 0;
  return D.42517;
}


mono_declsec_get_flags (struct MonoImage * image, guint32 token)
{
  unsigned int D.42521;
  guint32 D.42524;
  unsigned int D.42525;
  unsigned int D.42527;
  unsigned int D.42530;
  <unnamed-unsigned:24> D.42532;
  int D.42533;
  int index;
  struct MonoTableInfo * t;
  guint32 result;
  guint32 action;
  int i;

  D.42521 = mono_metadata_declsec_from_index (image, token);
  index = (int) D.42521;
  t = &image->tables[14];
  result = 0;
  if (index < 0) goto <D.42522>; else goto <D.42523>;
  <D.42522>:
  D.42524 = 0;
  return D.42524;
  <D.42523>:
  i = index;
  goto <D.26252>;
  <D.26251>:
  {
    guint32 cols[3];

    try
      {
        mono_metadata_decode_row (t, i, &cols, 3);
        D.42525 = cols[1];
        if (D.42525 != token) goto <D.26250>; else goto <D.42526>;
        <D.42526>:
        action = cols[0];
        D.42527 = action + 4294967295;
        if (D.42527 <= 17) goto <D.42528>; else goto <D.42529>;
        <D.42528>:
        D.42530 = declsec_flags_map[action];
        result = D.42530 | result;
        goto <D.42531>;
        <D.42529>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "reflection.c", 12239);
        <D.42531>:
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  i = i + 1;
  <D.26252>:
  D.42532 = t->rows;
  D.42533 = (int) D.42532;
  if (D.42533 > i) goto <D.26251>; else goto <D.26250>;
  <D.26250>:
  D.42524 = result;
  return D.42524;
}


mono_declsec_flags_from_class (struct MonoClass * klass)
{
  unsigned int D.42537;
  unsigned int D.42538;
  struct MonoClassExt * D.42543;
  unsigned int D.42545;
  unsigned int D.42546;
  struct MonoImage * D.42547;
  unsigned int D.42548;
  uint32_t D.42549;

  D.42537 = klass->flags;
  D.42538 = D.42537 & 262144;
  if (D.42538 != 0) goto <D.42539>; else goto <D.42540>;
  <D.42539>:
  D.42543 = klass->ext;
  if (D.42543 == 0B) goto <D.42541>; else goto <D.42544>;
  <D.42544>:
  D.42543 = klass->ext;
  D.42545 = D.42543->declsec_flags;
  if (D.42545 == 0) goto <D.42541>; else goto <D.42542>;
  <D.42541>:
  {
    guint32 idx;

    D.42546 = klass->type_token;
    idx = D.42546 & 16777215;
    idx = idx << 2;
    idx = idx;
    mono_loader_lock ();
    mono_class_alloc_ext (klass);
    mono_loader_unlock ();
    D.42543 = klass->ext;
    D.42547 = klass->image;
    D.42548 = mono_declsec_get_flags (D.42547, idx);
    D.42543->declsec_flags = D.42548;
  }
  <D.42542>:
  D.42543 = klass->ext;
  D.42549 = D.42543->declsec_flags;
  return D.42549;
  <D.42540>:
  D.42549 = 0;
  return D.42549;
}


mono_declsec_flags_from_assembly (struct MonoAssembly * assembly)
{
  uint32_t D.42551;
  struct MonoImage * D.42552;
  guint32 idx;

  idx = 1;
  idx = idx << 2;
  idx = idx | 2;
  D.42552 = assembly->image;
  D.42551 = mono_declsec_get_flags (D.42552, idx);
  return D.42551;
}


mono_declsec_get_demands (struct MonoMethod * method, struct MonoDeclSecurityActions * demands)
{
  struct MonoClass * D.42554;
  struct MonoImage * D.42555;
  unsigned int D.42556;
  unsigned int D.42557;
  MonoBoolean D.42560;
  unsigned char D.42561;
  unsigned char D.42562;
  _Bool D.42563;
  _Bool D.42564;
  _Bool D.42565;
  short unsigned int D.42570;
  int D.42571;
  int D.42572;
  unsigned int D.42575;
  unsigned char D.42580;
  guint32 mask;
  MonoBoolean result;
  guint32 flags;

  mask = 135170;
  result = 0;
  D.42554 = method->klass;
  D.42555 = D.42554->image;
  D.42556 = BIT_FIELD_REF <*D.42555, 32, 2176>;
  D.42557 = D.42556 & 16777215;
  if (D.42557 == 0) goto <D.42558>; else goto <D.42559>;
  <D.42558>:
  D.42560 = 0;
  return D.42560;
  <D.42559>:
  D.42561 = BIT_FIELD_REF <*method, 8, 160>;
  D.42562 = D.42561 & 124;
  D.42563 = D.42562 == 24;
  D.42564 = D.42562 == 28;
  D.42565 = D.42563 | D.42564;
  if (D.42565 != 0) goto <D.42566>; else goto <D.42567>;
  <D.42566>:
  method = mono_marshal_method_from_wrapper (method);
  if (method == 0B) goto <D.42568>; else goto <D.42569>;
  <D.42568>:
  D.42560 = 0;
  return D.42560;
  <D.42569>:
  <D.42567>:
  D.42570 = method->flags;
  D.42571 = (int) D.42570;
  D.42572 = D.42571 & 16384;
  if (D.42572 != 0) goto <D.42573>; else goto <D.42574>;
  <D.42573>:
  D.42554 = method->klass;
  mono_class_init (D.42554);
  memset (demands, 0, 36);
  result = mono_declsec_get_method_demands_params (method, demands, 2, 13, 18);
  <D.42574>:
  D.42554 = method->klass;
  flags = mono_declsec_flags_from_class (D.42554);
  D.42575 = flags & mask;
  if (D.42575 != 0) goto <D.42576>; else goto <D.42577>;
  <D.42576>:
  if (result == 0) goto <D.42578>; else goto <D.42579>;
  <D.42578>:
  D.42554 = method->klass;
  mono_class_init (D.42554);
  memset (demands, 0, 36);
  <D.42579>:
  D.42554 = method->klass;
  D.42580 = mono_declsec_get_class_demands_params (D.42554, demands, 2, 13, 18);
  result = D.42580 | result;
  <D.42577>:
  D.42560 = result;
  return D.42560;
}


mono_declsec_get_method_demands_params (struct MonoMethod * method, struct MonoDeclSecurityActions * demands, guint32 id_std, guint32 id_noncas, guint32 id_choice)
{
  MonoBoolean D.42582;
  struct MonoClass * D.42583;
  struct MonoImage * D.42584;
  guint32 idx;

  idx = mono_method_get_index (method);
  idx = idx << 2;
  idx = idx | 1;
  D.42583 = method->klass;
  D.42584 = D.42583->image;
  D.42582 = fill_actions_from_index (D.42584, idx, demands, id_std, id_noncas, id_choice);
  return D.42582;
}


fill_actions_from_index (struct MonoImage * image, guint32 token, struct MonoDeclSecurityActions * actions, guint32 id_std, guint32 id_noncas, guint32 id_choice)
{
  unsigned int D.42586;
  unsigned int D.42587;
  MonoBoolean D.42590;
  unsigned int D.42591;
  char * D.42594;
  unsigned int D.42597;
  const char * blob.823;
  const char * blob.824;
  char * D.42600;
  unsigned int D.42601;
  char * D.42605;
  const char * blob.825;
  const char * blob.826;
  char * D.42610;
  unsigned int D.42611;
  char * D.42615;
  const char * blob.827;
  const char * blob.828;
  char * D.42620;
  unsigned int D.42621;
  <unnamed-unsigned:24> D.42622;
  int D.42623;
  MonoBoolean result;
  struct MonoTableInfo * t;
  guint32 cols[3];
  int index;
  int i;

  try
    {
      result = 0;
      D.42586 = mono_metadata_declsec_from_index (image, token);
      index = (int) D.42586;
      t = &image->tables[14];
      i = index;
      goto <D.26282>;
      <D.26281>:
      mono_metadata_decode_row (t, i, &cols, 3);
      D.42587 = cols[1];
      if (D.42587 != token) goto <D.42588>; else goto <D.42589>;
      <D.42588>:
      D.42590 = result;
      return D.42590;
      <D.42589>:
      D.42591 = cols[0];
      if (D.42591 == id_std) goto <D.42592>; else goto <D.42593>;
      <D.42592>:
      D.42594 = actions->demand.blob;
      if (D.42594 == 0B) goto <D.42595>; else goto <D.42596>;
      <D.42595>:
      {
        const char * blob;

        try
          {
            D.42597 = cols[2];
            blob.823 = mono_metadata_blob_heap (image, D.42597);
            blob = blob.823;
            D.42597 = cols[2];
            actions->demand.index = D.42597;
            blob.824 = blob;
            D.42600 = blob.824 + 2;
            actions->demand.blob = D.42600;
            blob.824 = blob;
            D.42601 = mono_metadata_decode_blob_size (blob.824, &blob);
            actions->demand.size = D.42601;
            result = 1;
          }
        finally
          {
            blob = {CLOBBER};
          }
      }
      <D.42596>:
      goto <D.42602>;
      <D.42593>:
      D.42591 = cols[0];
      if (D.42591 == id_noncas) goto <D.42603>; else goto <D.42604>;
      <D.42603>:
      D.42605 = actions->noncasdemand.blob;
      if (D.42605 == 0B) goto <D.42606>; else goto <D.42607>;
      <D.42606>:
      {
        const char * blob;

        try
          {
            D.42597 = cols[2];
            blob.825 = mono_metadata_blob_heap (image, D.42597);
            blob = blob.825;
            D.42597 = cols[2];
            actions->noncasdemand.index = D.42597;
            blob.826 = blob;
            D.42610 = blob.826 + 2;
            actions->noncasdemand.blob = D.42610;
            blob.826 = blob;
            D.42611 = mono_metadata_decode_blob_size (blob.826, &blob);
            actions->noncasdemand.size = D.42611;
            result = 1;
          }
        finally
          {
            blob = {CLOBBER};
          }
      }
      <D.42607>:
      goto <D.42612>;
      <D.42604>:
      D.42591 = cols[0];
      if (D.42591 == id_choice) goto <D.42613>; else goto <D.42614>;
      <D.42613>:
      D.42615 = actions->demandchoice.blob;
      if (D.42615 == 0B) goto <D.42616>; else goto <D.42617>;
      <D.42616>:
      {
        const char * blob;

        try
          {
            D.42597 = cols[2];
            blob.827 = mono_metadata_blob_heap (image, D.42597);
            blob = blob.827;
            D.42597 = cols[2];
            actions->demandchoice.index = D.42597;
            blob.828 = blob;
            D.42620 = blob.828 + 2;
            actions->demandchoice.blob = D.42620;
            blob.828 = blob;
            D.42621 = mono_metadata_decode_blob_size (blob.828, &blob);
            actions->demandchoice.size = D.42621;
            result = 1;
          }
        finally
          {
            blob = {CLOBBER};
          }
      }
      <D.42617>:
      <D.42614>:
      <D.42612>:
      <D.42602>:
      i = i + 1;
      <D.26282>:
      D.42622 = t->rows;
      D.42623 = (int) D.42622;
      if (D.42623 > i) goto <D.26281>; else goto <D.26283>;
      <D.26283>:
      D.42590 = result;
      return D.42590;
    }
  finally
    {
      cols = {CLOBBER};
    }
}


mono_declsec_get_class_demands_params (struct MonoClass * klass, struct MonoDeclSecurityActions * demands, guint32 id_std, guint32 id_noncas, guint32 id_choice)
{
  unsigned int D.42626;
  MonoBoolean D.42627;
  struct MonoImage * D.42628;
  guint32 idx;

  D.42626 = klass->type_token;
  idx = D.42626 & 16777215;
  idx = idx << 2;
  idx = idx;
  D.42628 = klass->image;
  D.42627 = fill_actions_from_index (D.42628, idx, demands, id_std, id_noncas, id_choice);
  return D.42627;
}


mono_declsec_get_linkdemands (struct MonoMethod * method, struct MonoDeclSecurityActions * klass, struct MonoDeclSecurityActions * cmethod)
{
  struct MonoClass * D.42630;
  struct MonoImage * D.42631;
  unsigned int D.42632;
  unsigned int D.42633;
  MonoBoolean D.42636;
  unsigned char D.42637;
  unsigned char D.42638;
  _Bool D.42639;
  _Bool D.42640;
  _Bool D.42641;
  short unsigned int D.42646;
  int D.42647;
  int D.42648;
  unsigned int D.42651;
  unsigned char D.42654;
  MonoBoolean result;
  guint32 flags;

  result = 0;
  D.42630 = method->klass;
  D.42631 = D.42630->image;
  D.42632 = BIT_FIELD_REF <*D.42631, 32, 2176>;
  D.42633 = D.42632 & 16777215;
  if (D.42633 == 0) goto <D.42634>; else goto <D.42635>;
  <D.42634>:
  D.42636 = 0;
  return D.42636;
  <D.42635>:
  D.42637 = BIT_FIELD_REF <*method, 8, 160>;
  D.42638 = D.42637 & 124;
  D.42639 = D.42638 == 24;
  D.42640 = D.42638 == 28;
  D.42641 = D.42639 | D.42640;
  if (D.42641 != 0) goto <D.42642>; else goto <D.42643>;
  <D.42642>:
  method = mono_marshal_method_from_wrapper (method);
  if (method == 0B) goto <D.42644>; else goto <D.42645>;
  <D.42644>:
  D.42636 = 0;
  return D.42636;
  <D.42645>:
  <D.42643>:
  memset (cmethod, 0, 36);
  memset (klass, 0, 36);
  D.42646 = method->flags;
  D.42647 = (int) D.42646;
  D.42648 = D.42647 & 16384;
  if (D.42648 != 0) goto <D.42649>; else goto <D.42650>;
  <D.42649>:
  D.42630 = method->klass;
  mono_class_init (D.42630);
  result = mono_declsec_get_method_demands_params (method, cmethod, 6, 14, 16);
  <D.42650>:
  D.42630 = method->klass;
  flags = mono_declsec_flags_from_class (D.42630);
  D.42651 = flags & 40992;
  if (D.42651 != 0) goto <D.42652>; else goto <D.42653>;
  <D.42652>:
  D.42630 = method->klass;
  mono_class_init (D.42630);
  D.42630 = method->klass;
  D.42654 = mono_declsec_get_class_demands_params (D.42630, klass, 6, 14, 16);
  result = D.42654 | result;
  <D.42653>:
  D.42636 = result;
  return D.42636;
}


mono_declsec_get_inheritdemands_class (struct MonoClass * klass, struct MonoDeclSecurityActions * demands)
{
  struct MonoImage * D.42656;
  unsigned int D.42657;
  unsigned int D.42658;
  MonoBoolean D.42661;
  unsigned int D.42662;
  unsigned char D.42665;
  MonoBoolean result;
  guint32 flags;

  result = 0;
  D.42656 = klass->image;
  D.42657 = BIT_FIELD_REF <*D.42656, 32, 2176>;
  D.42658 = D.42657 & 16777215;
  if (D.42658 == 0) goto <D.42659>; else goto <D.42660>;
  <D.42659>:
  D.42661 = 0;
  return D.42661;
  <D.42660>:
  flags = mono_declsec_flags_from_class (klass);
  D.42662 = flags & 81984;
  if (D.42662 != 0) goto <D.42663>; else goto <D.42664>;
  <D.42663>:
  mono_class_init (klass);
  memset (demands, 0, 36);
  D.42665 = mono_declsec_get_class_demands_params (klass, demands, 7, 15, 17);
  result = D.42665 | result;
  <D.42664>:
  D.42661 = result;
  return D.42661;
}


mono_declsec_get_inheritdemands_method (struct MonoMethod * method, struct MonoDeclSecurityActions * demands)
{
  struct MonoClass * D.42667;
  struct MonoImage * D.42668;
  unsigned int D.42669;
  unsigned int D.42670;
  MonoBoolean D.42673;
  unsigned char D.42674;
  unsigned char D.42675;
  _Bool D.42676;
  _Bool D.42677;
  _Bool D.42678;
  short unsigned int D.42683;
  int D.42684;
  int D.42685;

  D.42667 = method->klass;
  D.42668 = D.42667->image;
  D.42669 = BIT_FIELD_REF <*D.42668, 32, 2176>;
  D.42670 = D.42669 & 16777215;
  if (D.42670 == 0) goto <D.42671>; else goto <D.42672>;
  <D.42671>:
  D.42673 = 0;
  return D.42673;
  <D.42672>:
  D.42674 = BIT_FIELD_REF <*method, 8, 160>;
  D.42675 = D.42674 & 124;
  D.42676 = D.42675 == 24;
  D.42677 = D.42675 == 28;
  D.42678 = D.42676 | D.42677;
  if (D.42678 != 0) goto <D.42679>; else goto <D.42680>;
  <D.42679>:
  method = mono_marshal_method_from_wrapper (method);
  if (method == 0B) goto <D.42681>; else goto <D.42682>;
  <D.42681>:
  D.42673 = 0;
  return D.42673;
  <D.42682>:
  <D.42680>:
  D.42683 = method->flags;
  D.42684 = (int) D.42683;
  D.42685 = D.42684 & 16384;
  if (D.42685 != 0) goto <D.42686>; else goto <D.42687>;
  <D.42686>:
  D.42667 = method->klass;
  mono_class_init (D.42667);
  memset (demands, 0, 36);
  D.42673 = mono_declsec_get_method_demands_params (method, demands, 7, 15, 17);
  return D.42673;
  <D.42687>:
  D.42673 = 0;
  return D.42673;
}


mono_declsec_get_method_action (struct MonoMethod * method, guint32 action, struct MonoDeclSecurityEntry * entry)
{
  short unsigned int D.42689;
  int D.42690;
  int D.42691;
  MonoBoolean D.42694;
  struct MonoClass * D.42695;
  struct MonoImage * D.42696;

  D.42689 = method->flags;
  D.42690 = (int) D.42689;
  D.42691 = D.42690 & 16384;
  if (D.42691 != 0) goto <D.42692>; else goto <D.42693>;
  <D.42692>:
  {
    guint32 idx;

    idx = mono_method_get_index (method);
    idx = idx << 2;
    idx = idx | 1;
    D.42695 = method->klass;
    D.42696 = D.42695->image;
    D.42694 = get_declsec_action (D.42696, idx, action, entry);
    return D.42694;
  }
  <D.42693>:
  D.42694 = 0;
  return D.42694;
}


get_declsec_action (struct MonoImage * image, guint32 token, guint32 action, struct MonoDeclSecurityEntry * entry)
{
  unsigned int D.42698;
  MonoBoolean D.42701;
  unsigned int D.42702;
  unsigned int D.42705;
  unsigned int D.42708;
  const char * metadata.829;
  const char * metadata.830;
  char * D.42711;
  unsigned int D.42712;
  <unnamed-unsigned:24> D.42713;
  int D.42714;
  guint32 cols[3];
  struct MonoTableInfo * t;
  int i;
  int index;

  try
    {
      D.42698 = mono_metadata_declsec_from_index (image, token);
      index = (int) D.42698;
      if (index == -1) goto <D.42699>; else goto <D.42700>;
      <D.42699>:
      D.42701 = 0;
      return D.42701;
      <D.42700>:
      t = &image->tables[14];
      i = index;
      goto <D.26336>;
      <D.26335>:
      mono_metadata_decode_row (t, i, &cols, 3);
      D.42702 = cols[1];
      if (D.42702 != token) goto <D.42703>; else goto <D.42704>;
      <D.42703>:
      D.42701 = 0;
      return D.42701;
      <D.42704>:
      D.42705 = cols[0];
      if (D.42705 == action) goto <D.42706>; else goto <D.42707>;
      <D.42706>:
      {
        const char * metadata;

        try
          {
            D.42708 = cols[2];
            metadata.829 = mono_metadata_blob_heap (image, D.42708);
            metadata = metadata.829;
            metadata.830 = metadata;
            D.42711 = metadata.830 + 2;
            entry->blob = D.42711;
            metadata.830 = metadata;
            D.42712 = mono_metadata_decode_blob_size (metadata.830, &metadata);
            entry->size = D.42712;
            D.42701 = 1;
            return D.42701;
          }
        finally
          {
            metadata = {CLOBBER};
          }
      }
      <D.42707>:
      i = i + 1;
      <D.26336>:
      D.42713 = t->rows;
      D.42714 = (int) D.42713;
      if (D.42714 > i) goto <D.26335>; else goto <D.26337>;
      <D.26337>:
      D.42701 = 0;
      return D.42701;
    }
  finally
    {
      cols = {CLOBBER};
    }
}


mono_declsec_get_class_action (struct MonoClass * klass, guint32 action, struct MonoDeclSecurityEntry * entry)
{
  unsigned int D.42718;
  unsigned int D.42719;
  unsigned int D.42722;
  MonoBoolean D.42723;
  struct MonoImage * D.42724;
  guint32 flags;

  flags = mono_declsec_flags_from_class (klass);
  D.42718 = declsec_flags_map[action];
  D.42719 = D.42718 & flags;
  if (D.42719 != 0) goto <D.42720>; else goto <D.42721>;
  <D.42720>:
  {
    guint32 idx;

    D.42722 = klass->type_token;
    idx = D.42722 & 16777215;
    idx = idx << 2;
    idx = idx;
    D.42724 = klass->image;
    D.42723 = get_declsec_action (D.42724, idx, action, entry);
    return D.42723;
  }
  <D.42721>:
  D.42723 = 0;
  return D.42723;
}


mono_declsec_get_assembly_action (struct MonoAssembly * assembly, guint32 action, struct MonoDeclSecurityEntry * entry)
{
  MonoBoolean D.42726;
  struct MonoImage * D.42727;
  guint32 idx;

  idx = 1;
  idx = idx << 2;
  idx = idx | 2;
  D.42727 = assembly->image;
  D.42726 = get_declsec_action (D.42727, idx, action, entry);
  return D.42726;
}


mono_reflection_call_is_assignable_to (struct MonoClass * klass, struct MonoClass * oklass)
{
  struct MonoClass * System_Reflection_Emit_TypeBuilder.831;
  struct MonoImage * D.42732;
  struct MonoClass * System_Reflection_Emit_TypeBuilder.832;
  _Bool D.42734;
  long int D.42735;
  long int D.42736;
  struct MonoMethod * method.833;
  struct MonoMethod * method.834;
  _Bool D.42743;
  long int D.42744;
  long int D.42745;
  void * D.42748;
  _Bool D.42749;
  long int D.42750;
  long int D.42751;
  int D.26374;
  int iftmp.835;
  int D.26373;
  void * D.42757;
  struct MonoVTable * D.42758;
  struct MonoClass * D.42759;
  const char[12] * D.42760;
  unsigned char D.42761;
  int D.42762;
  unsigned char D.42763;
  int D.42764;
  _Bool D.42765;
  _Bool D.42766;
  _Bool D.42767;
  const unsigned char * D.42770;
  unsigned char D.42771;
  int D.42772;
  const unsigned char * D.42773;
  unsigned char D.42774;
  int D.42775;
  _Bool D.42776;
  _Bool D.42777;
  const unsigned char * D.42780;
  unsigned char D.42781;
  int D.42782;
  const unsigned char * D.42783;
  unsigned char D.42784;
  int D.42785;
  _Bool D.42786;
  _Bool D.42787;
  const unsigned char * D.42790;
  unsigned char D.42791;
  int D.42792;
  const unsigned char * D.42793;
  unsigned char D.42794;
  int D.42795;
  void * D.42797;
  struct MonoVTable * D.42798;
  struct MonoClass * D.42799;
  const char * D.42800;
  _Bool D.42801;
  long int D.42802;
  long int D.42803;
  struct MonoDomain * D.42806;
  struct MonoType * D.42807;
  struct MonoReflectionType * D.42808;
  void * D.42809;
  struct MonoObject * exc.836;
  gboolean D.42813;
  void * D.42814;
  unsigned char D.42815;
  struct MonoObject * res;
  struct MonoObject * exc;
  void * params[1];
  static struct MonoClass * System_Reflection_Emit_TypeBuilder = 0B;
  static struct MonoMethod * method = 0B;

  try
    {
      System_Reflection_Emit_TypeBuilder.831 = System_Reflection_Emit_TypeBuilder;
      if (System_Reflection_Emit_TypeBuilder.831 == 0B) goto <D.42730>; else goto <D.42731>;
      <D.42730>:
      D.42732 = mono_defaults.corlib;
      System_Reflection_Emit_TypeBuilder.832 = mono_class_from_name (D.42732, "System.Reflection.Emit", "TypeBuilder");
      System_Reflection_Emit_TypeBuilder = System_Reflection_Emit_TypeBuilder.832;
      System_Reflection_Emit_TypeBuilder.831 = System_Reflection_Emit_TypeBuilder;
      D.42734 = System_Reflection_Emit_TypeBuilder.831 == 0B;
      D.42735 = (long int) D.42734;
      D.42736 = __builtin_expect (D.42735, 0);
      if (D.42736 != 0) goto <D.42737>; else goto <D.42738>;
      <D.42737>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 12621, "System_Reflection_Emit_TypeBuilder");
      <D.42738>:
      <D.42731>:
      method.833 = method;
      if (method.833 == 0B) goto <D.42740>; else goto <D.42741>;
      <D.42740>:
      System_Reflection_Emit_TypeBuilder.831 = System_Reflection_Emit_TypeBuilder;
      method.834 = mono_class_get_method_from_name (System_Reflection_Emit_TypeBuilder.831, "IsAssignableTo", 1);
      method = method.834;
      method.833 = method;
      D.42743 = method.833 == 0B;
      D.42744 = (long int) D.42743;
      D.42745 = __builtin_expect (D.42744, 0);
      if (D.42745 != 0) goto <D.42746>; else goto <D.42747>;
      <D.42746>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 12625, "method");
      <D.42747>:
      <D.42741>:
      D.42748 = mono_class_get_ref_info (klass);
      D.42749 = D.42748 == 0B;
      D.42750 = (long int) D.42749;
      D.42751 = __builtin_expect (D.42750, 0);
      if (D.42751 != 0) goto <D.42752>; else goto <D.42753>;
      <D.42752>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 12632, "mono_class_get_ref_info (klass)");
      <D.42753>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.42757 = mono_class_get_ref_info (klass);
          D.42758 = MEM[(struct MonoObject *)D.42757].vtable;
          D.42759 = D.42758->klass;
          __s2 = D.42759->name;
          D.42760 = "TypeBuilder";
          D.42761 = MEM[(const unsigned char *)D.42760];
          D.42762 = (int) D.42761;
          D.42763 = *__s2;
          D.42764 = (int) D.42763;
          __result = D.42762 - D.42764;
          {
            D.42765 = __s2_len != 0;
            D.42766 = __result == 0;
            D.42767 = D.42765 & D.42766;
            if (D.42767 != 0) goto <D.42768>; else goto <D.42769>;
            <D.42768>:
            D.42770 = &MEM[(void *)"TypeBuilder" + 1B];
            D.42771 = *D.42770;
            D.42772 = (int) D.42771;
            D.42773 = __s2 + 1;
            D.42774 = *D.42773;
            D.42775 = (int) D.42774;
            __result = D.42772 - D.42775;
            D.42776 = __s2_len > 1;
            D.42766 = __result == 0;
            D.42777 = D.42776 & D.42766;
            if (D.42777 != 0) goto <D.42778>; else goto <D.42779>;
            <D.42778>:
            D.42780 = &MEM[(void *)"TypeBuilder" + 2B];
            D.42781 = *D.42780;
            D.42782 = (int) D.42781;
            D.42783 = __s2 + 2;
            D.42784 = *D.42783;
            D.42785 = (int) D.42784;
            __result = D.42782 - D.42785;
            D.42786 = __s2_len > 2;
            D.42766 = __result == 0;
            D.42787 = D.42786 & D.42766;
            if (D.42787 != 0) goto <D.42788>; else goto <D.42789>;
            <D.42788>:
            D.42790 = &MEM[(void *)"TypeBuilder" + 3B];
            D.42791 = *D.42790;
            D.42792 = (int) D.42791;
            D.42793 = __s2 + 3;
            D.42794 = *D.42793;
            D.42795 = (int) D.42794;
            __result = D.42792 - D.42795;
            <D.42789>:
            <D.42779>:
            <D.42769>:
          }
          D.26373 = __result;
        }
        iftmp.835 = -D.26373;
        goto <D.42796>;
        <D.42756>:
        D.42797 = mono_class_get_ref_info (klass);
        D.42798 = MEM[(struct MonoObject *)D.42797].vtable;
        D.42799 = D.42798->klass;
        D.42800 = D.42799->name;
        iftmp.835 = __builtin_strcmp (D.42800, "TypeBuilder");
        <D.42796>:
        D.26374 = iftmp.835;
      }
      D.42801 = D.26374 != 0;
      D.42802 = (long int) D.42801;
      D.42803 = __builtin_expect (D.42802, 0);
      if (D.42803 != 0) goto <D.42804>; else goto <D.42805>;
      <D.42804>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 12633, "!strcmp (((MonoObject*)(mono_class_get_ref_info (klass)))->vtable->klass->name, \"TypeBuilder\")");
      <D.42805>:
      D.42806 = mono_domain_get ();
      D.42807 = &oklass->byval_arg;
      D.42808 = mono_type_get_object (D.42806, D.42807);
      params[0] = D.42808;
      method.833 = method;
      D.42809 = mono_class_get_ref_info (klass);
      res = mono_runtime_invoke (method.833, D.42809, &params, &exc);
      exc.836 = exc;
      if (exc.836 != 0B) goto <D.42811>; else goto <D.42812>;
      <D.42811>:
      D.42813 = 0;
      return D.42813;
      <D.42812>:
      D.42814 = mono_object_unbox (res);
      D.42815 = MEM[(MonoBoolean *)D.42814];
      D.42813 = (gboolean) D.42815;
      return D.42813;
    }
  finally
    {
      exc = {CLOBBER};
      params = {CLOBBER};
    }
}


mono_reflection_type_get_type (struct MonoReflectionType * reftype)
{
  _Bool D.42818;
  long int D.42819;
  long int D.42820;
  struct MonoType * D.42823;

  D.42818 = reftype == 0B;
  D.42819 = (long int) D.42818;
  D.42820 = __builtin_expect (D.42819, 0);
  if (D.42820 != 0) goto <D.42821>; else goto <D.42822>;
  <D.42821>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "reflection.c", 12653, "reftype");
  <D.42822>:
  D.42823 = mono_reflection_type_get_handle (reftype);
  return D.42823;
}


