mono_config_cleanup ()
{
  struct GHashTable * config_handlers.0;
  char * mono_cfg_dir_allocated.1;

  config_handlers.0 = config_handlers;
  if (config_handlers.0 != 0B) goto <D.16318>; else goto <D.16319>;
  <D.16318>:
  config_handlers.0 = config_handlers;
  monoeg_g_hash_table_destroy (config_handlers.0);
  <D.16319>:
  mono_cfg_dir_allocated.1 = mono_cfg_dir_allocated;
  monoeg_g_free (mono_cfg_dir_allocated.1);
}


mono_config_parse_memory (const char * buffer)
{
  unsigned int D.16321;
  struct ParseState state;

  try
    {
      state = {};
      state.user_data = "<buffer>";
      D.16321 = strlen (buffer);
      mono_config_parse_xml_with_context (&state, buffer, D.16321);
    }
  finally
    {
      state = {CLOBBER};
    }
}


mono_config_parse_xml_with_context (struct ParseState * state, const char * text, gsize len)
{
  int inited.2;
  int len.3;
  int D.16326;
  struct GMarkupParseContext * context;

  inited.2 = inited;
  if (inited.2 == 0) goto <D.16323>; else goto <D.16324>;
  <D.16323>:
  mono_config_init ();
  <D.16324>:
  context = monoeg_g_markup_parse_context_new (&mono_parser, 0, state, 0B);
  len.3 = (int) len;
  D.16326 = monoeg_g_markup_parse_context_parse (context, text, len.3, 0B);
  if (D.16326 != 0) goto <D.16327>; else goto <D.16328>;
  <D.16327>:
  monoeg_g_markup_parse_context_end_parse (context, 0B);
  <D.16328>:
  monoeg_g_markup_parse_context_free (context);
}


parse_error (struct GMarkupParseContext * context, struct GError * error, void * user_data)
{
  const gchar * iftmp.4;
  void * D.16333;
  const gchar * iftmp.5;
  gchar * D.16339;
  struct ParseState * state;
  const gchar * msg;
  const gchar * filename;

  state = user_data;
  if (state != 0B) goto <D.16332>; else goto <D.16330>;
  <D.16332>:
  D.16333 = state->user_data;
  if (D.16333 != 0B) goto <D.16334>; else goto <D.16330>;
  <D.16334>:
  iftmp.4 = state->user_data;
  goto <D.16331>;
  <D.16330>:
  iftmp.4 = "<unknown>";
  <D.16331>:
  filename = iftmp.4;
  if (error != 0B) goto <D.16338>; else goto <D.16336>;
  <D.16338>:
  D.16339 = error->message;
  if (D.16339 != 0B) goto <D.16340>; else goto <D.16336>;
  <D.16340>:
  iftmp.5 = error->message;
  goto <D.16337>;
  <D.16336>:
  iftmp.5 = "";
  <D.16337>:
  msg = iftmp.5;
  monoeg_g_log (0B, 16, "Error parsing %s: %s", filename, msg);
}


passthrough (struct GMarkupParseContext * context, const gchar * text, gsize text_len, void * user_data, struct GError * * error)
{

}


parse_text (struct GMarkupParseContext * context, const gchar * text, gsize text_len, void * user_data, struct GError * * error)
{
  struct MonoParseHandler * D.16341;
  void (*<T27f5>) (void *, const char *, gsize) D.16344;
  void * D.16347;
  struct ParseState * state;

  state = user_data;
  D.16341 = state->current;
  if (D.16341 != 0B) goto <D.16342>; else goto <D.16343>;
  <D.16342>:
  D.16341 = state->current;
  D.16344 = D.16341->text;
  if (D.16344 != 0B) goto <D.16345>; else goto <D.16346>;
  <D.16345>:
  D.16341 = state->current;
  D.16344 = D.16341->text;
  D.16347 = state->user_data;
  D.16344 (D.16347, text, text_len);
  <D.16346>:
  <D.16343>:
}


end_element (struct GMarkupParseContext * context, const gchar * element_name, void * user_data, struct GError * * error)
{
  struct MonoParseHandler * D.16348;
  void (*<T27f9>) (void *, const char *) D.16351;
  void * D.16354;
  int D.15828;
  const char * D.16355;
  void (*<Tb27>) (void *) D.16358;
  struct ParseState * state;

  state = user_data;
  D.16348 = state->current;
  if (D.16348 != 0B) goto <D.16349>; else goto <D.16350>;
  <D.16349>:
  D.16348 = state->current;
  D.16351 = D.16348->end;
  if (D.16351 != 0B) goto <D.16352>; else goto <D.16353>;
  <D.16352>:
  D.16348 = state->current;
  D.16351 = D.16348->end;
  D.16354 = state->user_data;
  D.16351 (D.16354, element_name);
  <D.16353>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.16348 = state->current;
    D.16355 = D.16348->element_name;
    D.15828 = __builtin_strcmp (D.16355, element_name);
  }
  if (D.15828 == 0) goto <D.16356>; else goto <D.16357>;
  <D.16356>:
  D.16348 = state->current;
  D.16358 = D.16348->finish;
  if (D.16358 != 0B) goto <D.16359>; else goto <D.16360>;
  <D.16359>:
  D.16348 = state->current;
  D.16358 = D.16348->finish;
  D.16354 = state->user_data;
  D.16358 (D.16354);
  <D.16360>:
  state->current = 0B;
  state->user_data = 0B;
  <D.16357>:
  <D.16350>:
}


start_element (struct GMarkupParseContext * context, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values, void * user_data, struct GError * * error)
{
  struct MonoParseHandler * D.16361;
  struct GHashTable * config_handlers.6;
  void * D.16365;
  void * (*<T27ed>) (struct MonoImage *) D.16368;
  struct MonoImage * D.16371;
  void * D.16372;
  void (*<T27f1>) (void *, const gchar *, const gchar * *, const gchar * *) D.16375;
  void * D.16378;
  struct ParseState * state;

  state = user_data;
  D.16361 = state->current;
  if (D.16361 == 0B) goto <D.16362>; else goto <D.16363>;
  <D.16362>:
  config_handlers.6 = config_handlers;
  D.16365 = monoeg_g_hash_table_lookup (config_handlers.6, element_name);
  state->current = D.16365;
  D.16361 = state->current;
  if (D.16361 != 0B) goto <D.16366>; else goto <D.16367>;
  <D.16366>:
  D.16361 = state->current;
  D.16368 = D.16361->init;
  if (D.16368 != 0B) goto <D.16369>; else goto <D.16370>;
  <D.16369>:
  D.16361 = state->current;
  D.16368 = D.16361->init;
  D.16371 = state->assembly;
  D.16372 = D.16368 (D.16371);
  state->user_data = D.16372;
  <D.16370>:
  <D.16367>:
  <D.16363>:
  D.16361 = state->current;
  if (D.16361 != 0B) goto <D.16373>; else goto <D.16374>;
  <D.16373>:
  D.16361 = state->current;
  D.16375 = D.16361->start;
  if (D.16375 != 0B) goto <D.16376>; else goto <D.16377>;
  <D.16376>:
  D.16361 = state->current;
  D.16375 = D.16361->start;
  D.16378 = state->user_data;
  D.16375 (D.16378, element_name, attribute_names, attribute_values);
  <D.16377>:
  <D.16374>:
}


mono_config_init ()
{
  struct GHashTable * config_handlers.7;
  const char * D.16380;
  struct GHashTable * config_handlers.8;
  const char * D.16382;

  inited = 1;
  config_handlers.7 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  config_handlers = config_handlers.7;
  D.16380 = "dllmap";
  config_handlers.8 = config_handlers;
  monoeg_g_hash_table_insert_replace (config_handlers.8, D.16380, &dllmap_handler, 0);
  D.16382 = "legacyUnhandledExceptionPolicy";
  config_handlers.8 = config_handlers;
  monoeg_g_hash_table_insert_replace (config_handlers.8, D.16382, &legacyUEP_handler, 0);
}


legacyUEP_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.16035;
  int iftmp.9;
  int D.16034;
  const char[31] * D.16386;
  unsigned char D.16387;
  int D.16388;
  unsigned char D.16389;
  int D.16390;
  _Bool D.16391;
  _Bool D.16392;
  _Bool D.16393;
  const unsigned char * D.16396;
  unsigned char D.16397;
  int D.16398;
  const unsigned char * D.16399;
  unsigned char D.16400;
  int D.16401;
  _Bool D.16402;
  _Bool D.16403;
  const unsigned char * D.16406;
  unsigned char D.16407;
  int D.16408;
  const unsigned char * D.16409;
  unsigned char D.16410;
  int D.16411;
  _Bool D.16412;
  _Bool D.16413;
  const unsigned char * D.16416;
  unsigned char D.16417;
  int D.16418;
  const unsigned char * D.16419;
  unsigned char D.16420;
  int D.16421;
  const gchar * D.16425;
  int D.16044;
  int iftmp.10;
  int D.16043;
  const char[8] * D.16431;
  unsigned char D.16432;
  int D.16433;
  unsigned char D.16434;
  int D.16435;
  _Bool D.16436;
  _Bool D.16437;
  _Bool D.16438;
  const unsigned char * D.16441;
  unsigned char D.16442;
  int D.16443;
  const unsigned char * D.16444;
  unsigned char D.16445;
  int D.16446;
  _Bool D.16447;
  _Bool D.16448;
  const unsigned char * D.16451;
  unsigned char D.16452;
  int D.16453;
  const unsigned char * D.16454;
  unsigned char D.16455;
  int D.16456;
  _Bool D.16457;
  _Bool D.16458;
  const unsigned char * D.16461;
  unsigned char D.16462;
  int D.16463;
  const unsigned char * D.16464;
  unsigned char D.16465;
  int D.16466;
  int D.16053;
  int iftmp.11;
  int D.16052;
  const char[2] * D.16475;
  unsigned char D.16476;
  int D.16477;
  unsigned char D.16478;
  int D.16479;
  _Bool D.16480;
  _Bool D.16481;
  _Bool D.16482;
  const unsigned char * D.16485;
  unsigned char D.16486;
  int D.16487;
  const unsigned char * D.16488;
  unsigned char D.16489;
  int D.16490;
  _Bool D.16491;
  _Bool D.16492;
  const unsigned char * D.16495;
  unsigned char D.16496;
  int D.16497;
  const unsigned char * D.16498;
  unsigned char D.16499;
  int D.16500;
  _Bool D.16501;
  _Bool D.16502;
  const unsigned char * D.16505;
  unsigned char D.16506;
  int D.16507;
  const unsigned char * D.16508;
  unsigned char D.16509;
  int D.16510;
  const gchar * D.16512;
  int D.16514;

  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.16386 = "legacyUnhandledExceptionPolicy";
      D.16387 = MEM[(const unsigned char *)D.16386];
      D.16388 = (int) D.16387;
      D.16389 = *__s2;
      D.16390 = (int) D.16389;
      __result = D.16388 - D.16390;
      {
        D.16391 = __s2_len != 0;
        D.16392 = __result == 0;
        D.16393 = D.16391 & D.16392;
        if (D.16393 != 0) goto <D.16394>; else goto <D.16395>;
        <D.16394>:
        D.16396 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 1B];
        D.16397 = *D.16396;
        D.16398 = (int) D.16397;
        D.16399 = __s2 + 1;
        D.16400 = *D.16399;
        D.16401 = (int) D.16400;
        __result = D.16398 - D.16401;
        D.16402 = __s2_len > 1;
        D.16392 = __result == 0;
        D.16403 = D.16402 & D.16392;
        if (D.16403 != 0) goto <D.16404>; else goto <D.16405>;
        <D.16404>:
        D.16406 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 2B];
        D.16407 = *D.16406;
        D.16408 = (int) D.16407;
        D.16409 = __s2 + 2;
        D.16410 = *D.16409;
        D.16411 = (int) D.16410;
        __result = D.16408 - D.16411;
        D.16412 = __s2_len > 2;
        D.16392 = __result == 0;
        D.16413 = D.16412 & D.16392;
        if (D.16413 != 0) goto <D.16414>; else goto <D.16415>;
        <D.16414>:
        D.16416 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 3B];
        D.16417 = *D.16416;
        D.16418 = (int) D.16417;
        D.16419 = __s2 + 3;
        D.16420 = *D.16419;
        D.16421 = (int) D.16420;
        __result = D.16418 - D.16421;
        <D.16415>:
        <D.16405>:
        <D.16395>:
      }
      D.16034 = __result;
    }
    iftmp.9 = -D.16034;
    goto <D.16422>;
    <D.16385>:
    iftmp.9 = __builtin_strcmp (element_name, "legacyUnhandledExceptionPolicy");
    <D.16422>:
    D.16035 = iftmp.9;
  }
  if (D.16035 == 0) goto <D.16423>; else goto <D.16424>;
  <D.16423>:
  D.16425 = *attribute_names;
  if (D.16425 != 0B) goto <D.16426>; else goto <D.16427>;
  <D.16426>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = *attribute_names;
      D.16431 = "enabled";
      D.16432 = MEM[(const unsigned char *)D.16431];
      D.16433 = (int) D.16432;
      D.16434 = *__s2;
      D.16435 = (int) D.16434;
      __result = D.16433 - D.16435;
      {
        D.16436 = __s2_len != 0;
        D.16437 = __result == 0;
        D.16438 = D.16436 & D.16437;
        if (D.16438 != 0) goto <D.16439>; else goto <D.16440>;
        <D.16439>:
        D.16441 = &MEM[(void *)"enabled" + 1B];
        D.16442 = *D.16441;
        D.16443 = (int) D.16442;
        D.16444 = __s2 + 1;
        D.16445 = *D.16444;
        D.16446 = (int) D.16445;
        __result = D.16443 - D.16446;
        D.16447 = __s2_len > 1;
        D.16437 = __result == 0;
        D.16448 = D.16447 & D.16437;
        if (D.16448 != 0) goto <D.16449>; else goto <D.16450>;
        <D.16449>:
        D.16451 = &MEM[(void *)"enabled" + 2B];
        D.16452 = *D.16451;
        D.16453 = (int) D.16452;
        D.16454 = __s2 + 2;
        D.16455 = *D.16454;
        D.16456 = (int) D.16455;
        __result = D.16453 - D.16456;
        D.16457 = __s2_len > 2;
        D.16437 = __result == 0;
        D.16458 = D.16457 & D.16437;
        if (D.16458 != 0) goto <D.16459>; else goto <D.16460>;
        <D.16459>:
        D.16461 = &MEM[(void *)"enabled" + 3B];
        D.16462 = *D.16461;
        D.16463 = (int) D.16462;
        D.16464 = __s2 + 3;
        D.16465 = *D.16464;
        D.16466 = (int) D.16465;
        __result = D.16463 - D.16466;
        <D.16460>:
        <D.16450>:
        <D.16440>:
      }
      D.16043 = __result;
    }
    iftmp.10 = -D.16043;
    goto <D.16467>;
    <D.16430>:
    D.16425 = *attribute_names;
    iftmp.10 = __builtin_strcmp (D.16425, "enabled");
    <D.16467>:
    D.16044 = iftmp.10;
  }
  if (D.16044 == 0) goto <D.16468>; else goto <D.16469>;
  <D.16468>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = *attribute_values;
      D.16475 = "1";
      D.16476 = MEM[(const unsigned char *)D.16475];
      D.16477 = (int) D.16476;
      D.16478 = *__s2;
      D.16479 = (int) D.16478;
      __result = D.16477 - D.16479;
      {
        D.16480 = __s2_len != 0;
        D.16481 = __result == 0;
        D.16482 = D.16480 & D.16481;
        if (D.16482 != 0) goto <D.16483>; else goto <D.16484>;
        <D.16483>:
        D.16485 = &MEM[(void *)"1" + 1B];
        D.16486 = *D.16485;
        D.16487 = (int) D.16486;
        D.16488 = __s2 + 1;
        D.16489 = *D.16488;
        D.16490 = (int) D.16489;
        __result = D.16487 - D.16490;
        D.16491 = __s2_len > 1;
        D.16481 = __result == 0;
        D.16492 = D.16491 & D.16481;
        if (D.16492 != 0) goto <D.16493>; else goto <D.16494>;
        <D.16493>:
        D.16495 = &MEM[(void *)"1" + 2B];
        D.16496 = *D.16495;
        D.16497 = (int) D.16496;
        D.16498 = __s2 + 2;
        D.16499 = *D.16498;
        D.16500 = (int) D.16499;
        __result = D.16497 - D.16500;
        D.16501 = __s2_len > 2;
        D.16481 = __result == 0;
        D.16502 = D.16501 & D.16481;
        if (D.16502 != 0) goto <D.16503>; else goto <D.16504>;
        <D.16503>:
        D.16505 = &MEM[(void *)"1" + 3B];
        D.16506 = *D.16505;
        D.16507 = (int) D.16506;
        D.16508 = __s2 + 3;
        D.16509 = *D.16508;
        D.16510 = (int) D.16509;
        __result = D.16507 - D.16510;
        <D.16504>:
        <D.16494>:
        <D.16484>:
      }
      D.16052 = __result;
    }
    iftmp.11 = -D.16052;
    goto <D.16511>;
    <D.16474>:
    D.16512 = *attribute_values;
    iftmp.11 = __builtin_strcmp (D.16512, "1");
    <D.16511>:
    D.16053 = iftmp.11;
  }
  if (D.16053 == 0) goto <D.16470>; else goto <D.16513>;
  <D.16513>:
  D.16512 = *attribute_values;
  D.16514 = monoeg_ascii_strcasecmp (D.16512, "true");
  if (D.16514 == 0) goto <D.16470>; else goto <D.16471>;
  <D.16470>:
  mono_runtime_unhandled_exception_policy_set (0);
  <D.16471>:
  <D.16469>:
  <D.16427>:
  <D.16424>:
}


dllmap_finish (void * user_data)
{
  char * D.16515;
  char * D.16516;
  struct DllInfo * info;

  info = user_data;
  D.16515 = info->dll;
  monoeg_g_free (D.16515);
  D.16516 = info->target;
  monoeg_g_free (D.16516);
  monoeg_g_free (info);
}


dllmap_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.15897;
  int iftmp.12;
  int D.15896;
  const char[7] * D.16520;
  unsigned char D.16521;
  int D.16522;
  unsigned char D.16523;
  int D.16524;
  _Bool D.16525;
  _Bool D.16526;
  _Bool D.16527;
  const unsigned char * D.16530;
  unsigned char D.16531;
  int D.16532;
  const unsigned char * D.16533;
  unsigned char D.16534;
  int D.16535;
  _Bool D.16536;
  _Bool D.16537;
  const unsigned char * D.16540;
  unsigned char D.16541;
  int D.16542;
  const unsigned char * D.16543;
  unsigned char D.16544;
  int D.16545;
  _Bool D.16546;
  _Bool D.16547;
  const unsigned char * D.16550;
  unsigned char D.16551;
  int D.16552;
  const unsigned char * D.16553;
  unsigned char D.16554;
  int D.16555;
  char * D.16559;
  char * D.16560;
  int D.15906;
  int iftmp.13;
  int D.15905;
  unsigned int i.14;
  unsigned int D.16565;
  const gchar * * D.16566;
  const char[4] * D.16567;
  unsigned char D.16568;
  int D.16569;
  unsigned char D.16570;
  int D.16571;
  _Bool D.16572;
  _Bool D.16573;
  _Bool D.16574;
  const unsigned char * D.16577;
  unsigned char D.16578;
  int D.16579;
  const unsigned char * D.16580;
  unsigned char D.16581;
  int D.16582;
  _Bool D.16583;
  _Bool D.16584;
  const unsigned char * D.16587;
  unsigned char D.16588;
  int D.16589;
  const unsigned char * D.16590;
  unsigned char D.16591;
  int D.16592;
  _Bool D.16593;
  _Bool D.16594;
  const unsigned char * D.16597;
  unsigned char D.16598;
  int D.16599;
  const unsigned char * D.16600;
  unsigned char D.16601;
  int D.16602;
  const gchar * D.16604;
  const gchar * * D.16607;
  const gchar * D.16608;
  gchar * D.16609;
  int D.15915;
  int iftmp.15;
  int D.15914;
  const char[7] * D.16614;
  unsigned char D.16615;
  int D.16616;
  unsigned char D.16617;
  int D.16618;
  _Bool D.16619;
  _Bool D.16620;
  _Bool D.16621;
  const unsigned char * D.16624;
  unsigned char D.16625;
  int D.16626;
  const unsigned char * D.16627;
  unsigned char D.16628;
  int D.16629;
  _Bool D.16630;
  _Bool D.16631;
  const unsigned char * D.16634;
  unsigned char D.16635;
  int D.16636;
  const unsigned char * D.16637;
  unsigned char D.16638;
  int D.16639;
  _Bool D.16640;
  _Bool D.16641;
  const unsigned char * D.16644;
  unsigned char D.16645;
  int D.16646;
  const unsigned char * D.16647;
  unsigned char D.16648;
  int D.16649;
  gchar * D.16653;
  int D.15924;
  int iftmp.16;
  int D.15923;
  const char[3] * D.16660;
  unsigned char D.16661;
  int D.16662;
  unsigned char D.16663;
  int D.16664;
  _Bool D.16665;
  _Bool D.16666;
  _Bool D.16667;
  const unsigned char * D.16670;
  unsigned char D.16671;
  int D.16672;
  const unsigned char * D.16673;
  unsigned char D.16674;
  int D.16675;
  _Bool D.16676;
  _Bool D.16677;
  const unsigned char * D.16680;
  unsigned char D.16681;
  int D.16682;
  const unsigned char * D.16683;
  unsigned char D.16684;
  int D.16685;
  _Bool D.16686;
  _Bool D.16687;
  const unsigned char * D.16690;
  unsigned char D.16691;
  int D.16692;
  const unsigned char * D.16693;
  unsigned char D.16694;
  int D.16695;
  int D.16698;
  int D.15933;
  int iftmp.17;
  int D.15932;
  const char[4] * D.16705;
  unsigned char D.16706;
  int D.16707;
  unsigned char D.16708;
  int D.16709;
  _Bool D.16710;
  _Bool D.16711;
  _Bool D.16712;
  const unsigned char * D.16715;
  unsigned char D.16716;
  int D.16717;
  const unsigned char * D.16718;
  unsigned char D.16719;
  int D.16720;
  _Bool D.16721;
  _Bool D.16722;
  const unsigned char * D.16725;
  unsigned char D.16726;
  int D.16727;
  const unsigned char * D.16728;
  unsigned char D.16729;
  int D.16730;
  _Bool D.16731;
  _Bool D.16732;
  const unsigned char * D.16735;
  unsigned char D.16736;
  int D.16737;
  const unsigned char * D.16738;
  unsigned char D.16739;
  int D.16740;
  int D.16743;
  int D.15942;
  int iftmp.18;
  int D.15941;
  const char[9] * D.16748;
  unsigned char D.16749;
  int D.16750;
  unsigned char D.16751;
  int D.16752;
  _Bool D.16753;
  _Bool D.16754;
  _Bool D.16755;
  const unsigned char * D.16758;
  unsigned char D.16759;
  int D.16760;
  const unsigned char * D.16761;
  unsigned char D.16762;
  int D.16763;
  _Bool D.16764;
  _Bool D.16765;
  const unsigned char * D.16768;
  unsigned char D.16769;
  int D.16770;
  const unsigned char * D.16771;
  unsigned char D.16772;
  int D.16773;
  _Bool D.16774;
  _Bool D.16775;
  const unsigned char * D.16778;
  unsigned char D.16779;
  int D.16780;
  const unsigned char * D.16781;
  unsigned char D.16782;
  int D.16783;
  int D.16787;
  int D.16790;
  struct MonoImage * D.16793;
  int D.15954;
  int iftmp.19;
  int D.15953;
  const char[9] * D.16798;
  unsigned char D.16799;
  int D.16800;
  unsigned char D.16801;
  int D.16802;
  _Bool D.16803;
  _Bool D.16804;
  _Bool D.16805;
  const unsigned char * D.16808;
  unsigned char D.16809;
  int D.16810;
  const unsigned char * D.16811;
  unsigned char D.16812;
  int D.16813;
  _Bool D.16814;
  _Bool D.16815;
  const unsigned char * D.16818;
  unsigned char D.16819;
  int D.16820;
  const unsigned char * D.16821;
  unsigned char D.16822;
  int D.16823;
  _Bool D.16824;
  _Bool D.16825;
  const unsigned char * D.16828;
  unsigned char D.16829;
  int D.16830;
  const unsigned char * D.16831;
  unsigned char D.16832;
  int D.16833;
  int D.15967;
  int iftmp.20;
  int D.15966;
  unsigned char D.16840;
  int D.16841;
  _Bool D.16842;
  _Bool D.16843;
  _Bool D.16844;
  const unsigned char * D.16847;
  unsigned char D.16848;
  int D.16849;
  _Bool D.16850;
  _Bool D.16851;
  const unsigned char * D.16854;
  unsigned char D.16855;
  int D.16856;
  _Bool D.16857;
  _Bool D.16858;
  const unsigned char * D.16861;
  unsigned char D.16862;
  int D.16863;
  int D.15976;
  int iftmp.21;
  int D.15975;
  unsigned char D.16871;
  int D.16872;
  _Bool D.16873;
  _Bool D.16874;
  _Bool D.16875;
  const unsigned char * D.16878;
  unsigned char D.16879;
  int D.16880;
  _Bool D.16881;
  _Bool D.16882;
  const unsigned char * D.16885;
  unsigned char D.16886;
  int D.16887;
  _Bool D.16888;
  _Bool D.16889;
  const unsigned char * D.16892;
  unsigned char D.16893;
  int D.16894;
  int D.15985;
  int iftmp.22;
  int D.15984;
  const char[5] * D.16902;
  unsigned char D.16903;
  int D.16904;
  unsigned char D.16905;
  int D.16906;
  _Bool D.16907;
  _Bool D.16908;
  _Bool D.16909;
  const unsigned char * D.16912;
  unsigned char D.16913;
  int D.16914;
  const unsigned char * D.16915;
  unsigned char D.16916;
  int D.16917;
  _Bool D.16918;
  _Bool D.16919;
  const unsigned char * D.16922;
  unsigned char D.16923;
  int D.16924;
  const unsigned char * D.16925;
  unsigned char D.16926;
  int D.16927;
  _Bool D.16928;
  _Bool D.16929;
  const unsigned char * D.16932;
  unsigned char D.16933;
  int D.16934;
  const unsigned char * D.16935;
  unsigned char D.16936;
  int D.16937;
  int D.15994;
  int iftmp.23;
  int D.15993;
  unsigned char D.16947;
  int D.16948;
  _Bool D.16949;
  _Bool D.16950;
  _Bool D.16951;
  const unsigned char * D.16954;
  unsigned char D.16955;
  int D.16956;
  _Bool D.16957;
  _Bool D.16958;
  const unsigned char * D.16961;
  unsigned char D.16962;
  int D.16963;
  _Bool D.16964;
  _Bool D.16965;
  const unsigned char * D.16968;
  unsigned char D.16969;
  int D.16970;
  int D.16973;
  int D.16003;
  int iftmp.24;
  int D.16002;
  unsigned char D.16980;
  int D.16981;
  _Bool D.16982;
  _Bool D.16983;
  _Bool D.16984;
  const unsigned char * D.16987;
  unsigned char D.16988;
  int D.16989;
  _Bool D.16990;
  _Bool D.16991;
  const unsigned char * D.16994;
  unsigned char D.16995;
  int D.16996;
  _Bool D.16997;
  _Bool D.16998;
  const unsigned char * D.17001;
  unsigned char D.17002;
  int D.17003;
  int D.17006;
  int D.16012;
  int iftmp.25;
  int D.16011;
  unsigned char D.17011;
  int D.17012;
  _Bool D.17013;
  _Bool D.17014;
  _Bool D.17015;
  const unsigned char * D.17018;
  unsigned char D.17019;
  int D.17020;
  _Bool D.17021;
  _Bool D.17022;
  const unsigned char * D.17025;
  unsigned char D.17026;
  int D.17027;
  _Bool D.17028;
  _Bool D.17029;
  const unsigned char * D.17032;
  unsigned char D.17033;
  int D.17034;
  int D.17038;
  int D.17043;
  int i;
  struct DllInfo * info;

  info = user_data;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.16520 = "dllmap";
      D.16521 = MEM[(const unsigned char *)D.16520];
      D.16522 = (int) D.16521;
      D.16523 = *__s2;
      D.16524 = (int) D.16523;
      __result = D.16522 - D.16524;
      {
        D.16525 = __s2_len != 0;
        D.16526 = __result == 0;
        D.16527 = D.16525 & D.16526;
        if (D.16527 != 0) goto <D.16528>; else goto <D.16529>;
        <D.16528>:
        D.16530 = &MEM[(void *)"dllmap" + 1B];
        D.16531 = *D.16530;
        D.16532 = (int) D.16531;
        D.16533 = __s2 + 1;
        D.16534 = *D.16533;
        D.16535 = (int) D.16534;
        __result = D.16532 - D.16535;
        D.16536 = __s2_len > 1;
        D.16526 = __result == 0;
        D.16537 = D.16536 & D.16526;
        if (D.16537 != 0) goto <D.16538>; else goto <D.16539>;
        <D.16538>:
        D.16540 = &MEM[(void *)"dllmap" + 2B];
        D.16541 = *D.16540;
        D.16542 = (int) D.16541;
        D.16543 = __s2 + 2;
        D.16544 = *D.16543;
        D.16545 = (int) D.16544;
        __result = D.16542 - D.16545;
        D.16546 = __s2_len > 2;
        D.16526 = __result == 0;
        D.16547 = D.16546 & D.16526;
        if (D.16547 != 0) goto <D.16548>; else goto <D.16549>;
        <D.16548>:
        D.16550 = &MEM[(void *)"dllmap" + 3B];
        D.16551 = *D.16550;
        D.16552 = (int) D.16551;
        D.16553 = __s2 + 3;
        D.16554 = *D.16553;
        D.16555 = (int) D.16554;
        __result = D.16552 - D.16555;
        <D.16549>:
        <D.16539>:
        <D.16529>:
      }
      D.15896 = __result;
    }
    iftmp.12 = -D.15896;
    goto <D.16556>;
    <D.16519>:
    iftmp.12 = __builtin_strcmp (element_name, "dllmap");
    <D.16556>:
    D.15897 = iftmp.12;
  }
  if (D.15897 == 0) goto <D.16557>; else goto <D.16558>;
  <D.16557>:
  D.16559 = info->dll;
  monoeg_g_free (D.16559);
  D.16560 = info->target;
  monoeg_g_free (D.16560);
  info->target = 0B;
  D.16560 = info->target;
  info->dll = D.16560;
  info->ignore = 0;
  i = 0;
  goto <D.15944>;
  <D.15943>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      __s2 = *D.16566;
      D.16567 = "dll";
      D.16568 = MEM[(const unsigned char *)D.16567];
      D.16569 = (int) D.16568;
      D.16570 = *__s2;
      D.16571 = (int) D.16570;
      __result = D.16569 - D.16571;
      {
        D.16572 = __s2_len != 0;
        D.16573 = __result == 0;
        D.16574 = D.16572 & D.16573;
        if (D.16574 != 0) goto <D.16575>; else goto <D.16576>;
        <D.16575>:
        D.16577 = &MEM[(void *)"dll" + 1B];
        D.16578 = *D.16577;
        D.16579 = (int) D.16578;
        D.16580 = __s2 + 1;
        D.16581 = *D.16580;
        D.16582 = (int) D.16581;
        __result = D.16579 - D.16582;
        D.16583 = __s2_len > 1;
        D.16573 = __result == 0;
        D.16584 = D.16583 & D.16573;
        if (D.16584 != 0) goto <D.16585>; else goto <D.16586>;
        <D.16585>:
        D.16587 = &MEM[(void *)"dll" + 2B];
        D.16588 = *D.16587;
        D.16589 = (int) D.16588;
        D.16590 = __s2 + 2;
        D.16591 = *D.16590;
        D.16592 = (int) D.16591;
        __result = D.16589 - D.16592;
        D.16593 = __s2_len > 2;
        D.16573 = __result == 0;
        D.16594 = D.16593 & D.16573;
        if (D.16594 != 0) goto <D.16595>; else goto <D.16596>;
        <D.16595>:
        D.16597 = &MEM[(void *)"dll" + 3B];
        D.16598 = *D.16597;
        D.16599 = (int) D.16598;
        D.16600 = __s2 + 3;
        D.16601 = *D.16600;
        D.16602 = (int) D.16601;
        __result = D.16599 - D.16602;
        <D.16596>:
        <D.16586>:
        <D.16576>:
      }
      D.15905 = __result;
    }
    iftmp.13 = -D.15905;
    goto <D.16603>;
    <D.16563>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16566 = attribute_names + D.16565;
    D.16604 = *D.16566;
    iftmp.13 = __builtin_strcmp (D.16604, "dll");
    <D.16603>:
    D.15906 = iftmp.13;
  }
  if (D.15906 == 0) goto <D.16605>; else goto <D.16606>;
  <D.16605>:
  i.14 = (unsigned int) i;
  D.16565 = i.14 * 4;
  D.16607 = attribute_values + D.16565;
  D.16608 = *D.16607;
  D.16609 = monoeg_strdup (D.16608);
  info->dll = D.16609;
  goto <D.16610>;
  <D.16606>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      __s2 = *D.16566;
      D.16614 = "target";
      D.16615 = MEM[(const unsigned char *)D.16614];
      D.16616 = (int) D.16615;
      D.16617 = *__s2;
      D.16618 = (int) D.16617;
      __result = D.16616 - D.16618;
      {
        D.16619 = __s2_len != 0;
        D.16620 = __result == 0;
        D.16621 = D.16619 & D.16620;
        if (D.16621 != 0) goto <D.16622>; else goto <D.16623>;
        <D.16622>:
        D.16624 = &MEM[(void *)"target" + 1B];
        D.16625 = *D.16624;
        D.16626 = (int) D.16625;
        D.16627 = __s2 + 1;
        D.16628 = *D.16627;
        D.16629 = (int) D.16628;
        __result = D.16626 - D.16629;
        D.16630 = __s2_len > 1;
        D.16620 = __result == 0;
        D.16631 = D.16630 & D.16620;
        if (D.16631 != 0) goto <D.16632>; else goto <D.16633>;
        <D.16632>:
        D.16634 = &MEM[(void *)"target" + 2B];
        D.16635 = *D.16634;
        D.16636 = (int) D.16635;
        D.16637 = __s2 + 2;
        D.16638 = *D.16637;
        D.16639 = (int) D.16638;
        __result = D.16636 - D.16639;
        D.16640 = __s2_len > 2;
        D.16620 = __result == 0;
        D.16641 = D.16640 & D.16620;
        if (D.16641 != 0) goto <D.16642>; else goto <D.16643>;
        <D.16642>:
        D.16644 = &MEM[(void *)"target" + 3B];
        D.16645 = *D.16644;
        D.16646 = (int) D.16645;
        D.16647 = __s2 + 3;
        D.16648 = *D.16647;
        D.16649 = (int) D.16648;
        __result = D.16646 - D.16649;
        <D.16643>:
        <D.16633>:
        <D.16623>:
      }
      D.15914 = __result;
    }
    iftmp.15 = -D.15914;
    goto <D.16650>;
    <D.16613>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16566 = attribute_names + D.16565;
    D.16604 = *D.16566;
    iftmp.15 = __builtin_strcmp (D.16604, "target");
    <D.16650>:
    D.15915 = iftmp.15;
  }
  if (D.15915 == 0) goto <D.16651>; else goto <D.16652>;
  <D.16651>:
  i.14 = (unsigned int) i;
  D.16565 = i.14 * 4;
  D.16607 = attribute_values + D.16565;
  D.16608 = *D.16607;
  D.16653 = monoeg_strdup (D.16608);
  info->target = D.16653;
  goto <D.16654>;
  <D.16652>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      __s2 = *D.16566;
      D.16660 = "os";
      D.16661 = MEM[(const unsigned char *)D.16660];
      D.16662 = (int) D.16661;
      D.16663 = *__s2;
      D.16664 = (int) D.16663;
      __result = D.16662 - D.16664;
      {
        D.16665 = __s2_len != 0;
        D.16666 = __result == 0;
        D.16667 = D.16665 & D.16666;
        if (D.16667 != 0) goto <D.16668>; else goto <D.16669>;
        <D.16668>:
        D.16670 = &MEM[(void *)"os" + 1B];
        D.16671 = *D.16670;
        D.16672 = (int) D.16671;
        D.16673 = __s2 + 1;
        D.16674 = *D.16673;
        D.16675 = (int) D.16674;
        __result = D.16672 - D.16675;
        D.16676 = __s2_len > 1;
        D.16666 = __result == 0;
        D.16677 = D.16676 & D.16666;
        if (D.16677 != 0) goto <D.16678>; else goto <D.16679>;
        <D.16678>:
        D.16680 = &MEM[(void *)"os" + 2B];
        D.16681 = *D.16680;
        D.16682 = (int) D.16681;
        D.16683 = __s2 + 2;
        D.16684 = *D.16683;
        D.16685 = (int) D.16684;
        __result = D.16682 - D.16685;
        D.16686 = __s2_len > 2;
        D.16666 = __result == 0;
        D.16687 = D.16686 & D.16666;
        if (D.16687 != 0) goto <D.16688>; else goto <D.16689>;
        <D.16688>:
        D.16690 = &MEM[(void *)"os" + 3B];
        D.16691 = *D.16690;
        D.16692 = (int) D.16691;
        D.16693 = __s2 + 3;
        D.16694 = *D.16693;
        D.16695 = (int) D.16694;
        __result = D.16692 - D.16695;
        <D.16689>:
        <D.16679>:
        <D.16669>:
      }
      D.15923 = __result;
    }
    iftmp.16 = -D.15923;
    goto <D.16696>;
    <D.16659>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16566 = attribute_names + D.16565;
    D.16604 = *D.16566;
    iftmp.16 = __builtin_strcmp (D.16604, "os");
    <D.16696>:
    D.15924 = iftmp.16;
  }
  if (D.15924 == 0) goto <D.16697>; else goto <D.16655>;
  <D.16697>:
  i.14 = (unsigned int) i;
  D.16565 = i.14 * 4;
  D.16607 = attribute_values + D.16565;
  D.16608 = *D.16607;
  D.16698 = arch_matches ("linux", D.16608);
  if (D.16698 == 0) goto <D.16699>; else goto <D.16655>;
  <D.16699>:
  info->ignore = 1;
  goto <D.16656>;
  <D.16655>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      __s2 = *D.16566;
      D.16705 = "cpu";
      D.16706 = MEM[(const unsigned char *)D.16705];
      D.16707 = (int) D.16706;
      D.16708 = *__s2;
      D.16709 = (int) D.16708;
      __result = D.16707 - D.16709;
      {
        D.16710 = __s2_len != 0;
        D.16711 = __result == 0;
        D.16712 = D.16710 & D.16711;
        if (D.16712 != 0) goto <D.16713>; else goto <D.16714>;
        <D.16713>:
        D.16715 = &MEM[(void *)"cpu" + 1B];
        D.16716 = *D.16715;
        D.16717 = (int) D.16716;
        D.16718 = __s2 + 1;
        D.16719 = *D.16718;
        D.16720 = (int) D.16719;
        __result = D.16717 - D.16720;
        D.16721 = __s2_len > 1;
        D.16711 = __result == 0;
        D.16722 = D.16721 & D.16711;
        if (D.16722 != 0) goto <D.16723>; else goto <D.16724>;
        <D.16723>:
        D.16725 = &MEM[(void *)"cpu" + 2B];
        D.16726 = *D.16725;
        D.16727 = (int) D.16726;
        D.16728 = __s2 + 2;
        D.16729 = *D.16728;
        D.16730 = (int) D.16729;
        __result = D.16727 - D.16730;
        D.16731 = __s2_len > 2;
        D.16711 = __result == 0;
        D.16732 = D.16731 & D.16711;
        if (D.16732 != 0) goto <D.16733>; else goto <D.16734>;
        <D.16733>:
        D.16735 = &MEM[(void *)"cpu" + 3B];
        D.16736 = *D.16735;
        D.16737 = (int) D.16736;
        D.16738 = __s2 + 3;
        D.16739 = *D.16738;
        D.16740 = (int) D.16739;
        __result = D.16737 - D.16740;
        <D.16734>:
        <D.16724>:
        <D.16714>:
      }
      D.15932 = __result;
    }
    iftmp.17 = -D.15932;
    goto <D.16741>;
    <D.16704>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16566 = attribute_names + D.16565;
    D.16604 = *D.16566;
    iftmp.17 = __builtin_strcmp (D.16604, "cpu");
    <D.16741>:
    D.15933 = iftmp.17;
  }
  if (D.15933 == 0) goto <D.16742>; else goto <D.16700>;
  <D.16742>:
  i.14 = (unsigned int) i;
  D.16565 = i.14 * 4;
  D.16607 = attribute_values + D.16565;
  D.16608 = *D.16607;
  D.16743 = arch_matches ("x86", D.16608);
  if (D.16743 == 0) goto <D.16744>; else goto <D.16700>;
  <D.16744>:
  info->ignore = 1;
  goto <D.16701>;
  <D.16700>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      __s2 = *D.16566;
      D.16748 = "wordsize";
      D.16749 = MEM[(const unsigned char *)D.16748];
      D.16750 = (int) D.16749;
      D.16751 = *__s2;
      D.16752 = (int) D.16751;
      __result = D.16750 - D.16752;
      {
        D.16753 = __s2_len != 0;
        D.16754 = __result == 0;
        D.16755 = D.16753 & D.16754;
        if (D.16755 != 0) goto <D.16756>; else goto <D.16757>;
        <D.16756>:
        D.16758 = &MEM[(void *)"wordsize" + 1B];
        D.16759 = *D.16758;
        D.16760 = (int) D.16759;
        D.16761 = __s2 + 1;
        D.16762 = *D.16761;
        D.16763 = (int) D.16762;
        __result = D.16760 - D.16763;
        D.16764 = __s2_len > 1;
        D.16754 = __result == 0;
        D.16765 = D.16764 & D.16754;
        if (D.16765 != 0) goto <D.16766>; else goto <D.16767>;
        <D.16766>:
        D.16768 = &MEM[(void *)"wordsize" + 2B];
        D.16769 = *D.16768;
        D.16770 = (int) D.16769;
        D.16771 = __s2 + 2;
        D.16772 = *D.16771;
        D.16773 = (int) D.16772;
        __result = D.16770 - D.16773;
        D.16774 = __s2_len > 2;
        D.16754 = __result == 0;
        D.16775 = D.16774 & D.16754;
        if (D.16775 != 0) goto <D.16776>; else goto <D.16777>;
        <D.16776>:
        D.16778 = &MEM[(void *)"wordsize" + 3B];
        D.16779 = *D.16778;
        D.16780 = (int) D.16779;
        D.16781 = __s2 + 3;
        D.16782 = *D.16781;
        D.16783 = (int) D.16782;
        __result = D.16780 - D.16783;
        <D.16777>:
        <D.16767>:
        <D.16757>:
      }
      D.15941 = __result;
    }
    iftmp.18 = -D.15941;
    goto <D.16784>;
    <D.16747>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16566 = attribute_names + D.16565;
    D.16604 = *D.16566;
    iftmp.18 = __builtin_strcmp (D.16604, "wordsize");
    <D.16784>:
    D.15942 = iftmp.18;
  }
  if (D.15942 == 0) goto <D.16785>; else goto <D.16786>;
  <D.16785>:
  i.14 = (unsigned int) i;
  D.16565 = i.14 * 4;
  D.16607 = attribute_values + D.16565;
  D.16608 = *D.16607;
  D.16787 = arch_matches ("32", D.16608);
  if (D.16787 == 0) goto <D.16788>; else goto <D.16789>;
  <D.16788>:
  info->ignore = 1;
  <D.16789>:
  <D.16786>:
  <D.16701>:
  <D.16656>:
  <D.16654>:
  <D.16610>:
  i = i + 1;
  <D.15944>:
  i.14 = (unsigned int) i;
  D.16565 = i.14 * 4;
  D.16566 = attribute_names + D.16565;
  D.16604 = *D.16566;
  if (D.16604 != 0B) goto <D.15943>; else goto <D.15945>;
  <D.15945>:
  D.16790 = info->ignore;
  if (D.16790 == 0) goto <D.16791>; else goto <D.16792>;
  <D.16791>:
  D.16560 = info->target;
  D.16559 = info->dll;
  D.16793 = info->assembly;
  mono_dllmap_insert (D.16793, D.16559, 0B, D.16560, 0B);
  <D.16792>:
  goto <D.16794>;
  <D.16558>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.16798 = "dllentry";
      D.16799 = MEM[(const unsigned char *)D.16798];
      D.16800 = (int) D.16799;
      D.16801 = *__s2;
      D.16802 = (int) D.16801;
      __result = D.16800 - D.16802;
      {
        D.16803 = __s2_len != 0;
        D.16804 = __result == 0;
        D.16805 = D.16803 & D.16804;
        if (D.16805 != 0) goto <D.16806>; else goto <D.16807>;
        <D.16806>:
        D.16808 = &MEM[(void *)"dllentry" + 1B];
        D.16809 = *D.16808;
        D.16810 = (int) D.16809;
        D.16811 = __s2 + 1;
        D.16812 = *D.16811;
        D.16813 = (int) D.16812;
        __result = D.16810 - D.16813;
        D.16814 = __s2_len > 1;
        D.16804 = __result == 0;
        D.16815 = D.16814 & D.16804;
        if (D.16815 != 0) goto <D.16816>; else goto <D.16817>;
        <D.16816>:
        D.16818 = &MEM[(void *)"dllentry" + 2B];
        D.16819 = *D.16818;
        D.16820 = (int) D.16819;
        D.16821 = __s2 + 2;
        D.16822 = *D.16821;
        D.16823 = (int) D.16822;
        __result = D.16820 - D.16823;
        D.16824 = __s2_len > 2;
        D.16804 = __result == 0;
        D.16825 = D.16824 & D.16804;
        if (D.16825 != 0) goto <D.16826>; else goto <D.16827>;
        <D.16826>:
        D.16828 = &MEM[(void *)"dllentry" + 3B];
        D.16829 = *D.16828;
        D.16830 = (int) D.16829;
        D.16831 = __s2 + 3;
        D.16832 = *D.16831;
        D.16833 = (int) D.16832;
        __result = D.16830 - D.16833;
        <D.16827>:
        <D.16817>:
        <D.16807>:
      }
      D.15953 = __result;
    }
    iftmp.19 = -D.15953;
    goto <D.16834>;
    <D.16797>:
    iftmp.19 = __builtin_strcmp (element_name, "dllentry");
    <D.16834>:
    D.15954 = iftmp.19;
  }
  if (D.15954 == 0) goto <D.16835>; else goto <D.16836>;
  <D.16835>:
  {
    const char * name;
    const char * target;
    const char * dll;
    int ignore;

    name = 0B;
    target = 0B;
    dll = 0B;
    ignore = 0;
    i = 0;
    goto <D.16014>;
    <D.16013>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.16565 = i.14 * 4;
        D.16566 = attribute_names + D.16565;
        __s2 = *D.16566;
        D.16567 = "dll";
        D.16568 = MEM[(const unsigned char *)D.16567];
        D.16569 = (int) D.16568;
        D.16840 = *__s2;
        D.16841 = (int) D.16840;
        __result = D.16569 - D.16841;
        {
          D.16842 = __s2_len != 0;
          D.16843 = __result == 0;
          D.16844 = D.16842 & D.16843;
          if (D.16844 != 0) goto <D.16845>; else goto <D.16846>;
          <D.16845>:
          D.16577 = &MEM[(void *)"dll" + 1B];
          D.16578 = *D.16577;
          D.16579 = (int) D.16578;
          D.16847 = __s2 + 1;
          D.16848 = *D.16847;
          D.16849 = (int) D.16848;
          __result = D.16579 - D.16849;
          D.16850 = __s2_len > 1;
          D.16843 = __result == 0;
          D.16851 = D.16850 & D.16843;
          if (D.16851 != 0) goto <D.16852>; else goto <D.16853>;
          <D.16852>:
          D.16587 = &MEM[(void *)"dll" + 2B];
          D.16588 = *D.16587;
          D.16589 = (int) D.16588;
          D.16854 = __s2 + 2;
          D.16855 = *D.16854;
          D.16856 = (int) D.16855;
          __result = D.16589 - D.16856;
          D.16857 = __s2_len > 2;
          D.16843 = __result == 0;
          D.16858 = D.16857 & D.16843;
          if (D.16858 != 0) goto <D.16859>; else goto <D.16860>;
          <D.16859>:
          D.16597 = &MEM[(void *)"dll" + 3B];
          D.16598 = *D.16597;
          D.16599 = (int) D.16598;
          D.16861 = __s2 + 3;
          D.16862 = *D.16861;
          D.16863 = (int) D.16862;
          __result = D.16599 - D.16863;
          <D.16860>:
          <D.16853>:
          <D.16846>:
        }
        D.15966 = __result;
      }
      iftmp.20 = -D.15966;
      goto <D.16864>;
      <D.16839>:
      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      D.16604 = *D.16566;
      iftmp.20 = __builtin_strcmp (D.16604, "dll");
      <D.16864>:
      D.15967 = iftmp.20;
    }
    if (D.15967 == 0) goto <D.16865>; else goto <D.16866>;
    <D.16865>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16607 = attribute_values + D.16565;
    dll = *D.16607;
    goto <D.16867>;
    <D.16866>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.16565 = i.14 * 4;
        D.16566 = attribute_names + D.16565;
        __s2 = *D.16566;
        D.16614 = "target";
        D.16615 = MEM[(const unsigned char *)D.16614];
        D.16616 = (int) D.16615;
        D.16871 = *__s2;
        D.16872 = (int) D.16871;
        __result = D.16616 - D.16872;
        {
          D.16873 = __s2_len != 0;
          D.16874 = __result == 0;
          D.16875 = D.16873 & D.16874;
          if (D.16875 != 0) goto <D.16876>; else goto <D.16877>;
          <D.16876>:
          D.16624 = &MEM[(void *)"target" + 1B];
          D.16625 = *D.16624;
          D.16626 = (int) D.16625;
          D.16878 = __s2 + 1;
          D.16879 = *D.16878;
          D.16880 = (int) D.16879;
          __result = D.16626 - D.16880;
          D.16881 = __s2_len > 1;
          D.16874 = __result == 0;
          D.16882 = D.16881 & D.16874;
          if (D.16882 != 0) goto <D.16883>; else goto <D.16884>;
          <D.16883>:
          D.16634 = &MEM[(void *)"target" + 2B];
          D.16635 = *D.16634;
          D.16636 = (int) D.16635;
          D.16885 = __s2 + 2;
          D.16886 = *D.16885;
          D.16887 = (int) D.16886;
          __result = D.16636 - D.16887;
          D.16888 = __s2_len > 2;
          D.16874 = __result == 0;
          D.16889 = D.16888 & D.16874;
          if (D.16889 != 0) goto <D.16890>; else goto <D.16891>;
          <D.16890>:
          D.16644 = &MEM[(void *)"target" + 3B];
          D.16645 = *D.16644;
          D.16646 = (int) D.16645;
          D.16892 = __s2 + 3;
          D.16893 = *D.16892;
          D.16894 = (int) D.16893;
          __result = D.16646 - D.16894;
          <D.16891>:
          <D.16884>:
          <D.16877>:
        }
        D.15975 = __result;
      }
      iftmp.21 = -D.15975;
      goto <D.16895>;
      <D.16870>:
      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      D.16604 = *D.16566;
      iftmp.21 = __builtin_strcmp (D.16604, "target");
      <D.16895>:
      D.15976 = iftmp.21;
    }
    if (D.15976 == 0) goto <D.16896>; else goto <D.16897>;
    <D.16896>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16607 = attribute_values + D.16565;
    target = *D.16607;
    goto <D.16898>;
    <D.16897>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.16565 = i.14 * 4;
        D.16566 = attribute_names + D.16565;
        __s2 = *D.16566;
        D.16902 = "name";
        D.16903 = MEM[(const unsigned char *)D.16902];
        D.16904 = (int) D.16903;
        D.16905 = *__s2;
        D.16906 = (int) D.16905;
        __result = D.16904 - D.16906;
        {
          D.16907 = __s2_len != 0;
          D.16908 = __result == 0;
          D.16909 = D.16907 & D.16908;
          if (D.16909 != 0) goto <D.16910>; else goto <D.16911>;
          <D.16910>:
          D.16912 = &MEM[(void *)"name" + 1B];
          D.16913 = *D.16912;
          D.16914 = (int) D.16913;
          D.16915 = __s2 + 1;
          D.16916 = *D.16915;
          D.16917 = (int) D.16916;
          __result = D.16914 - D.16917;
          D.16918 = __s2_len > 1;
          D.16908 = __result == 0;
          D.16919 = D.16918 & D.16908;
          if (D.16919 != 0) goto <D.16920>; else goto <D.16921>;
          <D.16920>:
          D.16922 = &MEM[(void *)"name" + 2B];
          D.16923 = *D.16922;
          D.16924 = (int) D.16923;
          D.16925 = __s2 + 2;
          D.16926 = *D.16925;
          D.16927 = (int) D.16926;
          __result = D.16924 - D.16927;
          D.16928 = __s2_len > 2;
          D.16908 = __result == 0;
          D.16929 = D.16928 & D.16908;
          if (D.16929 != 0) goto <D.16930>; else goto <D.16931>;
          <D.16930>:
          D.16932 = &MEM[(void *)"name" + 3B];
          D.16933 = *D.16932;
          D.16934 = (int) D.16933;
          D.16935 = __s2 + 3;
          D.16936 = *D.16935;
          D.16937 = (int) D.16936;
          __result = D.16934 - D.16937;
          <D.16931>:
          <D.16921>:
          <D.16911>:
        }
        D.15984 = __result;
      }
      iftmp.22 = -D.15984;
      goto <D.16938>;
      <D.16901>:
      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      D.16604 = *D.16566;
      iftmp.22 = __builtin_strcmp (D.16604, "name");
      <D.16938>:
      D.15985 = iftmp.22;
    }
    if (D.15985 == 0) goto <D.16939>; else goto <D.16940>;
    <D.16939>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16607 = attribute_values + D.16565;
    name = *D.16607;
    goto <D.16941>;
    <D.16940>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.16565 = i.14 * 4;
        D.16566 = attribute_names + D.16565;
        __s2 = *D.16566;
        D.16660 = "os";
        D.16661 = MEM[(const unsigned char *)D.16660];
        D.16662 = (int) D.16661;
        D.16947 = *__s2;
        D.16948 = (int) D.16947;
        __result = D.16662 - D.16948;
        {
          D.16949 = __s2_len != 0;
          D.16950 = __result == 0;
          D.16951 = D.16949 & D.16950;
          if (D.16951 != 0) goto <D.16952>; else goto <D.16953>;
          <D.16952>:
          D.16670 = &MEM[(void *)"os" + 1B];
          D.16671 = *D.16670;
          D.16672 = (int) D.16671;
          D.16954 = __s2 + 1;
          D.16955 = *D.16954;
          D.16956 = (int) D.16955;
          __result = D.16672 - D.16956;
          D.16957 = __s2_len > 1;
          D.16950 = __result == 0;
          D.16958 = D.16957 & D.16950;
          if (D.16958 != 0) goto <D.16959>; else goto <D.16960>;
          <D.16959>:
          D.16680 = &MEM[(void *)"os" + 2B];
          D.16681 = *D.16680;
          D.16682 = (int) D.16681;
          D.16961 = __s2 + 2;
          D.16962 = *D.16961;
          D.16963 = (int) D.16962;
          __result = D.16682 - D.16963;
          D.16964 = __s2_len > 2;
          D.16950 = __result == 0;
          D.16965 = D.16964 & D.16950;
          if (D.16965 != 0) goto <D.16966>; else goto <D.16967>;
          <D.16966>:
          D.16690 = &MEM[(void *)"os" + 3B];
          D.16691 = *D.16690;
          D.16692 = (int) D.16691;
          D.16968 = __s2 + 3;
          D.16969 = *D.16968;
          D.16970 = (int) D.16969;
          __result = D.16692 - D.16970;
          <D.16967>:
          <D.16960>:
          <D.16953>:
        }
        D.15993 = __result;
      }
      iftmp.23 = -D.15993;
      goto <D.16971>;
      <D.16946>:
      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      D.16604 = *D.16566;
      iftmp.23 = __builtin_strcmp (D.16604, "os");
      <D.16971>:
      D.15994 = iftmp.23;
    }
    if (D.15994 == 0) goto <D.16972>; else goto <D.16942>;
    <D.16972>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16607 = attribute_values + D.16565;
    D.16608 = *D.16607;
    D.16973 = arch_matches ("linux", D.16608);
    if (D.16973 == 0) goto <D.16974>; else goto <D.16942>;
    <D.16974>:
    ignore = 1;
    goto <D.16943>;
    <D.16942>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.16565 = i.14 * 4;
        D.16566 = attribute_names + D.16565;
        __s2 = *D.16566;
        D.16705 = "cpu";
        D.16706 = MEM[(const unsigned char *)D.16705];
        D.16707 = (int) D.16706;
        D.16980 = *__s2;
        D.16981 = (int) D.16980;
        __result = D.16707 - D.16981;
        {
          D.16982 = __s2_len != 0;
          D.16983 = __result == 0;
          D.16984 = D.16982 & D.16983;
          if (D.16984 != 0) goto <D.16985>; else goto <D.16986>;
          <D.16985>:
          D.16715 = &MEM[(void *)"cpu" + 1B];
          D.16716 = *D.16715;
          D.16717 = (int) D.16716;
          D.16987 = __s2 + 1;
          D.16988 = *D.16987;
          D.16989 = (int) D.16988;
          __result = D.16717 - D.16989;
          D.16990 = __s2_len > 1;
          D.16983 = __result == 0;
          D.16991 = D.16990 & D.16983;
          if (D.16991 != 0) goto <D.16992>; else goto <D.16993>;
          <D.16992>:
          D.16725 = &MEM[(void *)"cpu" + 2B];
          D.16726 = *D.16725;
          D.16727 = (int) D.16726;
          D.16994 = __s2 + 2;
          D.16995 = *D.16994;
          D.16996 = (int) D.16995;
          __result = D.16727 - D.16996;
          D.16997 = __s2_len > 2;
          D.16983 = __result == 0;
          D.16998 = D.16997 & D.16983;
          if (D.16998 != 0) goto <D.16999>; else goto <D.17000>;
          <D.16999>:
          D.16735 = &MEM[(void *)"cpu" + 3B];
          D.16736 = *D.16735;
          D.16737 = (int) D.16736;
          D.17001 = __s2 + 3;
          D.17002 = *D.17001;
          D.17003 = (int) D.17002;
          __result = D.16737 - D.17003;
          <D.17000>:
          <D.16993>:
          <D.16986>:
        }
        D.16002 = __result;
      }
      iftmp.24 = -D.16002;
      goto <D.17004>;
      <D.16979>:
      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      D.16604 = *D.16566;
      iftmp.24 = __builtin_strcmp (D.16604, "cpu");
      <D.17004>:
      D.16003 = iftmp.24;
    }
    if (D.16003 == 0) goto <D.17005>; else goto <D.16975>;
    <D.17005>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16607 = attribute_values + D.16565;
    D.16608 = *D.16607;
    D.17006 = arch_matches ("x86", D.16608);
    if (D.17006 == 0) goto <D.17007>; else goto <D.16975>;
    <D.17007>:
    ignore = 1;
    goto <D.16976>;
    <D.16975>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        i.14 = (unsigned int) i;
        D.16565 = i.14 * 4;
        D.16566 = attribute_names + D.16565;
        __s2 = *D.16566;
        D.16748 = "wordsize";
        D.16749 = MEM[(const unsigned char *)D.16748];
        D.16750 = (int) D.16749;
        D.17011 = *__s2;
        D.17012 = (int) D.17011;
        __result = D.16750 - D.17012;
        {
          D.17013 = __s2_len != 0;
          D.17014 = __result == 0;
          D.17015 = D.17013 & D.17014;
          if (D.17015 != 0) goto <D.17016>; else goto <D.17017>;
          <D.17016>:
          D.16758 = &MEM[(void *)"wordsize" + 1B];
          D.16759 = *D.16758;
          D.16760 = (int) D.16759;
          D.17018 = __s2 + 1;
          D.17019 = *D.17018;
          D.17020 = (int) D.17019;
          __result = D.16760 - D.17020;
          D.17021 = __s2_len > 1;
          D.17014 = __result == 0;
          D.17022 = D.17021 & D.17014;
          if (D.17022 != 0) goto <D.17023>; else goto <D.17024>;
          <D.17023>:
          D.16768 = &MEM[(void *)"wordsize" + 2B];
          D.16769 = *D.16768;
          D.16770 = (int) D.16769;
          D.17025 = __s2 + 2;
          D.17026 = *D.17025;
          D.17027 = (int) D.17026;
          __result = D.16770 - D.17027;
          D.17028 = __s2_len > 2;
          D.17014 = __result == 0;
          D.17029 = D.17028 & D.17014;
          if (D.17029 != 0) goto <D.17030>; else goto <D.17031>;
          <D.17030>:
          D.16778 = &MEM[(void *)"wordsize" + 3B];
          D.16779 = *D.16778;
          D.16780 = (int) D.16779;
          D.17032 = __s2 + 3;
          D.17033 = *D.17032;
          D.17034 = (int) D.17033;
          __result = D.16780 - D.17034;
          <D.17031>:
          <D.17024>:
          <D.17017>:
        }
        D.16011 = __result;
      }
      iftmp.25 = -D.16011;
      goto <D.17035>;
      <D.17010>:
      i.14 = (unsigned int) i;
      D.16565 = i.14 * 4;
      D.16566 = attribute_names + D.16565;
      D.16604 = *D.16566;
      iftmp.25 = __builtin_strcmp (D.16604, "wordsize");
      <D.17035>:
      D.16012 = iftmp.25;
    }
    if (D.16012 == 0) goto <D.17036>; else goto <D.17037>;
    <D.17036>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16607 = attribute_values + D.16565;
    D.16608 = *D.16607;
    D.17038 = arch_matches ("32", D.16608);
    if (D.17038 == 0) goto <D.17039>; else goto <D.17040>;
    <D.17039>:
    ignore = 1;
    <D.17040>:
    <D.17037>:
    <D.16976>:
    <D.16943>:
    <D.16941>:
    <D.16898>:
    <D.16867>:
    i = i + 1;
    <D.16014>:
    i.14 = (unsigned int) i;
    D.16565 = i.14 * 4;
    D.16566 = attribute_names + D.16565;
    D.16604 = *D.16566;
    if (D.16604 != 0B) goto <D.16013>; else goto <D.16015>;
    <D.16015>:
    if (dll == 0B) goto <D.17041>; else goto <D.17042>;
    <D.17041>:
    dll = info->dll;
    <D.17042>:
    D.16790 = info->ignore;
    D.17043 = D.16790 | ignore;
    if (D.17043 == 0) goto <D.17044>; else goto <D.17045>;
    <D.17044>:
    D.16559 = info->dll;
    D.16793 = info->assembly;
    mono_dllmap_insert (D.16793, D.16559, name, dll, target);
    <D.17045>:
  }
  <D.16836>:
  <D.16794>:
}


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

  if (str != 0B) goto <D.17046>; else goto <D.17047>;
  <D.17046>:
  D.17048 = __strdup (str);
  return D.17048;
  <D.17047>:
  D.17048 = 0B;
  return D.17048;
}


arch_matches (const char * arch, const char * value)
{
  char D.17050;
  int D.17053;
  const char * D.17054;
  int D.17055;
  _Bool D.17056;
  int D.15867;
  char * D.17057;
  char * * splitted;
  char * * p;
  int found;

  found = 0;
  D.17050 = *value;
  if (D.17050 == 33) goto <D.17051>; else goto <D.17052>;
  <D.17051>:
  D.17054 = value + 1;
  D.17055 = arch_matches (arch, D.17054);
  D.17056 = D.17055 == 0;
  D.17053 = (int) D.17056;
  return D.17053;
  <D.17052>:
  splitted = monoeg_g_strsplit (value, ",", 0);
  p = splitted;
  goto <D.15870>;
  <D.15869>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.17057 = *p;
    D.15867 = __builtin_strcmp (arch, D.17057);
  }
  if (D.15867 == 0) goto <D.17058>; else goto <D.17059>;
  <D.17058>:
  found = 1;
  goto <D.15868>;
  <D.17059>:
  p = p + 4;
  <D.15870>:
  D.17057 = *p;
  if (D.17057 != 0B) goto <D.15869>; else goto <D.15868>;
  <D.15868>:
  monoeg_g_strfreev (splitted);
  D.17053 = found;
  return D.17053;
}


dllmap_init (struct MonoImage * assembly)
{
  void * D.17061;
  struct DllInfo * info;

  info = monoeg_malloc0 (16);
  info->assembly = assembly;
  D.17061 = info;
  return D.17061;
}


mono_register_config_for_assembly (const char * assembly_name, const char * config_xml)
{
  struct BundledConfig * bundled_configs.26;
  struct BundledConfig * bconfig;

  bconfig = monoeg_malloc0 (12);
  bconfig->aname = assembly_name;
  bconfig->config_xml = config_xml;
  bundled_configs.26 = bundled_configs;
  bconfig->next = bundled_configs.26;
  bundled_configs = bconfig;
}


mono_config_string_for_assembly_file (const char * filename)
{
  const char * D.17064;
  int D.16113;
  const char * D.17069;
  struct BundledConfig * bconfig;

  bconfig = bundled_configs;
  goto <D.16115>;
  <D.16114>:
  D.17064 = bconfig->aname;
  if (D.17064 != 0B) goto <D.17065>; else goto <D.17066>;
  <D.17065>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.17064 = bconfig->aname;
    D.16113 = __builtin_strcmp (D.17064, filename);
  }
  if (D.16113 == 0) goto <D.17067>; else goto <D.17068>;
  <D.17067>:
  D.17069 = bconfig->config_xml;
  return D.17069;
  <D.17068>:
  <D.17066>:
  bconfig = bconfig->next;
  <D.16115>:
  if (bconfig != 0B) goto <D.16114>; else goto <D.16116>;
  <D.16116>:
  D.17069 = 0B;
  return D.17069;
}


mono_config_for_assembly (struct MonoImage * assembly)
{
  const char * D.17071;
  unsigned int D.17074;
  const char * D.17075;
  const char * D.17076;
  const char * D.17077;
  int D.17078;
  struct ParseState state;
  int got_it;
  int i;
  char * aname;
  char * cfg;
  char * cfg_name;
  const char * bundled_config;
  const char * home;

  try
    {
      state = {};
      got_it = 0;
      state.assembly = assembly;
      D.17071 = assembly->module_name;
      bundled_config = mono_config_string_for_assembly_file (D.17071);
      if (bundled_config != 0B) goto <D.17072>; else goto <D.17073>;
      <D.17072>:
      state.user_data = "<bundled>";
      D.17074 = strlen (bundled_config);
      mono_config_parse_xml_with_context (&state, bundled_config, D.17074);
      <D.17073>:
      D.17075 = mono_image_get_filename (assembly);
      cfg_name = monoeg_g_strdup_printf ("%s.config", D.17075);
      mono_config_parse_file_with_context (&state, cfg_name);
      monoeg_g_free (cfg_name);
      D.17076 = mono_image_get_name (assembly);
      cfg_name = monoeg_g_strdup_printf ("%s.config", D.17076);
      home = monoeg_g_get_home_dir ();
      i = 0;
      goto <D.16130>;
      <D.16129>:
      D.17077 = mono_get_config_dir ();
      cfg = monoeg_g_build_path ("/", D.17077, "mono", "assemblies", aname, cfg_name, 0B);
      D.17078 = mono_config_parse_file_with_context (&state, cfg);
      got_it = D.17078 + got_it;
      monoeg_g_free (cfg);
      monoeg_g_free (aname);
      if (got_it != 0) goto <D.16128>; else goto <D.17079>;
      <D.17079>:
      i = i + 1;
      <D.16130>:
      aname = get_assembly_filename (assembly, i);
      if (aname != 0B) goto <D.16129>; else goto <D.16128>;
      <D.16128>:
      monoeg_g_free (cfg_name);
    }
  finally
    {
      state = {CLOBBER};
    }
}


mono_config_parse_file_with_context (struct ParseState * state, const char * filename)
{
  int D.17080;
  int D.17083;
  unsigned int len.27;
  gchar * text.28;
  char D.17088;
  gchar * D.17091;
  char D.17092;
  gchar * D.17095;
  char D.17096;
  void * D.17099;
  unsigned int offset.29;
  unsigned int D.17103;
  sizetype offset.30;
  const char * D.17105;
  gchar * text;
  gsize len;
  gint offset;

  try
    {
      mono_trace (64, 16, "Config attempting to parse: \'%s\'.", filename);
      D.17080 = monoeg_g_file_get_contents (filename, &text, &len, 0B);
      if (D.17080 == 0) goto <D.17081>; else goto <D.17082>;
      <D.17081>:
      D.17083 = 0;
      return D.17083;
      <D.17082>:
      offset = 0;
      len.27 = len;
      if (len.27 > 3) goto <D.17085>; else goto <D.17086>;
      <D.17085>:
      text.28 = text;
      D.17088 = *text.28;
      if (D.17088 == -17) goto <D.17089>; else goto <D.17090>;
      <D.17089>:
      text.28 = text;
      D.17091 = text.28 + 1;
      D.17092 = *D.17091;
      if (D.17092 == -69) goto <D.17093>; else goto <D.17094>;
      <D.17093>:
      text.28 = text;
      D.17095 = text.28 + 2;
      D.17096 = *D.17095;
      if (D.17096 == -65) goto <D.17097>; else goto <D.17098>;
      <D.17097>:
      offset = 3;
      <D.17098>:
      <D.17094>:
      <D.17090>:
      <D.17086>:
      D.17099 = state->user_data;
      if (D.17099 == 0B) goto <D.17100>; else goto <D.17101>;
      <D.17100>:
      state->user_data = filename;
      <D.17101>:
      len.27 = len;
      offset.29 = (unsigned int) offset;
      D.17103 = len.27 - offset.29;
      text.28 = text;
      offset.30 = (sizetype) offset;
      D.17105 = text.28 + offset.30;
      mono_config_parse_xml_with_context (state, D.17105, D.17103);
      text.28 = text;
      monoeg_g_free (text.28);
      D.17083 = 1;
      return D.17083;
    }
  finally
    {
      text = {CLOBBER};
      len = {CLOBBER};
    }
}


get_assembly_filename (struct MonoImage * image, int state)
{
  char * D.17108;
  const char * D.17109;

  switch (state) <default: <D.16088>, case 0: <D.16087>>
  <D.16087>:
  D.17109 = mono_image_get_name (image);
  D.17108 = monoeg_strdup (D.17109);
  return D.17108;
  <D.16088>:
  D.17108 = 0B;
  return D.17108;
}


mono_config_parse (const char * filename)
{
  const char * D.17115;
  const char * home;
  char * mono_cfg;
  char * user_cfg;

  if (filename != 0B) goto <D.17111>; else goto <D.17112>;
  <D.17111>:
  mono_config_parse_file (filename);
  return;
  <D.17112>:
  home = monoeg_g_getenv ("MONO_CONFIG");
  if (home != 0B) goto <D.17113>; else goto <D.17114>;
  <D.17113>:
  mono_config_parse_file (home);
  return;
  <D.17114>:
  D.17115 = mono_get_config_dir ();
  mono_cfg = monoeg_g_build_path ("/", D.17115, "mono", "config", 0B);
  mono_config_parse_file (mono_cfg);
  monoeg_g_free (mono_cfg);
  home = monoeg_g_get_home_dir ();
  user_cfg = monoeg_g_strconcat (home, "/", ".mono/config", 0B);
  mono_config_parse_file (user_cfg);
  monoeg_g_free (user_cfg);
}


mono_config_parse_file (const char * filename)
{
  struct ParseState state;

  try
    {
      state = {};
      state.user_data = filename;
      mono_config_parse_file_with_context (&state, filename);
    }
  finally
    {
      state = {CLOBBER};
    }
}


mono_set_config_dir (const char * dir)
{
  const gchar * mono_cfg_dir.31;
  const char * mono_cfg_dir.32;
  gchar * mono_cfg_dir_allocated.33;
  char * mono_cfg_dir_allocated.34;

  mono_cfg_dir.31 = monoeg_g_getenv ("MONO_CFG_DIR");
  mono_cfg_dir = mono_cfg_dir.31;
  mono_cfg_dir.32 = mono_cfg_dir;
  if (mono_cfg_dir.32 == 0B) goto <D.17119>; else goto <D.17120>;
  <D.17119>:
  mono_cfg_dir_allocated.33 = monoeg_strdup (dir);
  mono_cfg_dir_allocated = mono_cfg_dir_allocated.33;
  mono_cfg_dir_allocated.34 = mono_cfg_dir_allocated;
  mono_cfg_dir = mono_cfg_dir_allocated.34;
  <D.17120>:
}


mono_get_config_dir ()
{
  const char * mono_cfg_dir.35;
  const char * D.17126;

  mono_cfg_dir.35 = mono_cfg_dir;
  if (mono_cfg_dir.35 == 0B) goto <D.17124>; else goto <D.17125>;
  <D.17124>:
  mono_set_dirs (0B, 0B);
  <D.17125>:
  D.17126 = mono_cfg_dir;
  return D.17126;
}


mono_register_machine_config (const char * config_xml)
{
  bundled_machine_config = config_xml;
}


mono_get_machine_config ()
{
  const char * D.17128;

  D.17128 = bundled_machine_config;
  return D.17128;
}


mono_config_parse_publisher_policy (const gchar * filename, struct MonoAssemblyBindingInfo * info)
{
  struct ParserUserData user_data;
  struct ParseState state;

  try
    {
      user_data.info = info;
      user_data.info_parsed = 0B;
      user_data.user_data = 0B;
      state.current = &publisher_policy_parser;
      state.user_data = &user_data;
      state.assembly = 0B;
      state.inited = 1;
      mono_config_parse_file_with_context (&state, filename);
    }
  finally
    {
      user_data = {CLOBBER};
      state = {CLOBBER};
    }
}


publisher_policy_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.16180;
  int iftmp.36;
  int D.16179;
  const char[18] * D.17133;
  unsigned char D.17134;
  int D.17135;
  unsigned char D.17136;
  int D.17137;
  _Bool D.17138;
  _Bool D.17139;
  _Bool D.17140;
  const unsigned char * D.17143;
  unsigned char D.17144;
  int D.17145;
  const unsigned char * D.17146;
  unsigned char D.17147;
  int D.17148;
  _Bool D.17149;
  _Bool D.17150;
  const unsigned char * D.17153;
  unsigned char D.17154;
  int D.17155;
  const unsigned char * D.17156;
  unsigned char D.17157;
  int D.17158;
  _Bool D.17159;
  _Bool D.17160;
  const unsigned char * D.17163;
  unsigned char D.17164;
  int D.17165;
  const unsigned char * D.17166;
  unsigned char D.17167;
  int D.17168;
  struct AssemblyVersionSet * D.17172;
  struct AssemblyVersionSet * D.17173;
  struct AssemblyVersionSet * D.17174;
  int D.16189;
  int iftmp.37;
  int D.16188;
  const char[17] * D.17178;
  unsigned char D.17179;
  int D.17180;
  unsigned char D.17181;
  int D.17182;
  _Bool D.17183;
  _Bool D.17184;
  _Bool D.17185;
  const unsigned char * D.17188;
  unsigned char D.17189;
  int D.17190;
  const unsigned char * D.17191;
  unsigned char D.17192;
  int D.17193;
  _Bool D.17194;
  _Bool D.17195;
  const unsigned char * D.17198;
  unsigned char D.17199;
  int D.17200;
  const unsigned char * D.17201;
  unsigned char D.17202;
  int D.17203;
  _Bool D.17204;
  _Bool D.17205;
  const unsigned char * D.17208;
  unsigned char D.17209;
  int D.17210;
  const unsigned char * D.17211;
  unsigned char D.17212;
  int D.17213;
  unsigned int n.38;
  unsigned int D.17218;
  const gchar * * D.17219;
  int D.16199;
  int iftmp.39;
  int D.16198;
  const char[5] * D.17223;
  unsigned char D.17224;
  int D.17225;
  unsigned char D.17226;
  int D.17227;
  _Bool D.17228;
  _Bool D.17229;
  _Bool D.17230;
  const unsigned char * D.17233;
  unsigned char D.17234;
  int D.17235;
  const unsigned char * D.17236;
  unsigned char D.17237;
  int D.17238;
  _Bool D.17239;
  _Bool D.17240;
  const unsigned char * D.17243;
  unsigned char D.17244;
  int D.17245;
  const unsigned char * D.17246;
  unsigned char D.17247;
  int D.17248;
  _Bool D.17249;
  _Bool D.17250;
  const unsigned char * D.17253;
  unsigned char D.17254;
  int D.17255;
  const unsigned char * D.17256;
  unsigned char D.17257;
  int D.17258;
  const gchar * * D.17262;
  const gchar * D.17263;
  gchar * D.17264;
  int D.16208;
  int iftmp.40;
  int D.16207;
  const char[15] * D.17269;
  unsigned char D.17270;
  int D.17271;
  unsigned char D.17272;
  int D.17273;
  _Bool D.17274;
  _Bool D.17275;
  _Bool D.17276;
  const unsigned char * D.17279;
  unsigned char D.17280;
  int D.17281;
  const unsigned char * D.17282;
  unsigned char D.17283;
  int D.17284;
  _Bool D.17285;
  _Bool D.17286;
  const unsigned char * D.17289;
  unsigned char D.17290;
  int D.17291;
  const unsigned char * D.17292;
  unsigned char D.17293;
  int D.17294;
  _Bool D.17295;
  _Bool D.17296;
  const unsigned char * D.17299;
  unsigned char D.17300;
  int D.17301;
  const unsigned char * D.17302;
  unsigned char D.17303;
  int D.17304;
  unsigned int D.17308;
  guchar[17] * D.17311;
  int D.16217;
  int iftmp.41;
  int D.16216;
  const char[8] * D.17316;
  unsigned char D.17317;
  int D.17318;
  unsigned char D.17319;
  int D.17320;
  _Bool D.17321;
  _Bool D.17322;
  _Bool D.17323;
  const unsigned char * D.17326;
  unsigned char D.17327;
  int D.17328;
  const unsigned char * D.17329;
  unsigned char D.17330;
  int D.17331;
  _Bool D.17332;
  _Bool D.17333;
  const unsigned char * D.17336;
  unsigned char D.17337;
  int D.17338;
  const unsigned char * D.17339;
  unsigned char D.17340;
  int D.17341;
  _Bool D.17342;
  _Bool D.17343;
  const unsigned char * D.17346;
  unsigned char D.17347;
  int D.17348;
  const unsigned char * D.17349;
  unsigned char D.17350;
  int D.17351;
  int D.16226;
  int iftmp.42;
  int D.16225;
  const char[8] * D.17358;
  unsigned char D.17359;
  int D.17360;
  unsigned char D.17361;
  int D.17362;
  _Bool D.17363;
  _Bool D.17364;
  _Bool D.17365;
  const unsigned char * D.17368;
  unsigned char D.17369;
  int D.17370;
  const unsigned char * D.17371;
  unsigned char D.17372;
  int D.17373;
  _Bool D.17374;
  _Bool D.17375;
  const unsigned char * D.17378;
  unsigned char D.17379;
  int D.17380;
  const unsigned char * D.17381;
  unsigned char D.17382;
  int D.17383;
  _Bool D.17384;
  _Bool D.17385;
  const unsigned char * D.17388;
  unsigned char D.17389;
  int D.17390;
  const unsigned char * D.17391;
  unsigned char D.17392;
  int D.17393;
  gchar * D.17397;
  gchar * D.17399;
  const gchar * D.17400;
  int D.16238;
  int iftmp.43;
  int D.16237;
  const char[16] * D.17405;
  unsigned char D.17406;
  int D.17407;
  unsigned char D.17408;
  int D.17409;
  _Bool D.17410;
  _Bool D.17411;
  _Bool D.17412;
  const unsigned char * D.17415;
  unsigned char D.17416;
  int D.17417;
  const unsigned char * D.17418;
  unsigned char D.17419;
  int D.17420;
  _Bool D.17421;
  _Bool D.17422;
  const unsigned char * D.17425;
  unsigned char D.17426;
  int D.17427;
  const unsigned char * D.17428;
  unsigned char D.17429;
  int D.17430;
  _Bool D.17431;
  _Bool D.17432;
  const unsigned char * D.17435;
  unsigned char D.17436;
  int D.17437;
  const unsigned char * D.17438;
  unsigned char D.17439;
  int D.17440;
  int D.16248;
  int iftmp.44;
  int D.16247;
  const char[11] * D.17447;
  unsigned char D.17448;
  int D.17449;
  unsigned char D.17450;
  int D.17451;
  _Bool D.17452;
  _Bool D.17453;
  _Bool D.17454;
  const unsigned char * D.17457;
  unsigned char D.17458;
  int D.17459;
  const unsigned char * D.17460;
  unsigned char D.17461;
  int D.17462;
  _Bool D.17463;
  _Bool D.17464;
  const unsigned char * D.17467;
  unsigned char D.17468;
  int D.17469;
  const unsigned char * D.17470;
  unsigned char D.17471;
  int D.17472;
  _Bool D.17473;
  _Bool D.17474;
  const unsigned char * D.17477;
  unsigned char D.17478;
  int D.17479;
  const unsigned char * D.17480;
  unsigned char D.17481;
  int D.17482;
  int D.16264;
  int iftmp.45;
  int D.16263;
  const char[1] * D.17489;
  unsigned char D.17490;
  int D.17491;
  unsigned char D.17492;
  int D.17493;
  _Bool D.17494;
  _Bool D.17495;
  _Bool D.17496;
  const unsigned char * D.17499;
  unsigned char D.17500;
  int D.17501;
  const unsigned char * D.17502;
  unsigned char D.17503;
  int D.17504;
  _Bool D.17505;
  _Bool D.17506;
  const unsigned char * D.17509;
  unsigned char D.17510;
  int D.17511;
  const unsigned char * D.17512;
  unsigned char D.17513;
  int D.17514;
  _Bool D.17515;
  _Bool D.17516;
  const unsigned char * D.17519;
  unsigned char D.17520;
  int D.17521;
  const unsigned char * D.17522;
  unsigned char D.17523;
  int D.17524;
  unsigned char D.17526;
  gchar * D.17529;
  int iftmp.46;
  gchar * D.17531;
  gchar * * numbers.47;
  gchar * D.17535;
  int iftmp.48;
  gchar * * numbers.49;
  gchar * D.17541;
  int iftmp.50;
  gchar * * numbers.51;
  gchar * D.17547;
  int iftmp.52;
  _Bool D.17555;
  _Bool D.17556;
  _Bool D.17557;
  _Bool D.17559;
  _Bool D.17560;
  _Bool D.17561;
  short unsigned int D.17562;
  short unsigned int D.17563;
  short unsigned int D.17564;
  short unsigned int D.17565;
  gchar * * D.17566;
  gchar * D.17567;
  int iftmp.53;
  gchar * * numbers.54;
  gchar * D.17574;
  int iftmp.55;
  gchar * * numbers.56;
  gchar * D.17580;
  int iftmp.57;
  gchar * * numbers.58;
  gchar * D.17586;
  int iftmp.59;
  int D.16274;
  int iftmp.60;
  int D.16273;
  const char[11] * D.17599;
  unsigned char D.17600;
  int D.17601;
  unsigned char D.17602;
  int D.17603;
  _Bool D.17604;
  _Bool D.17605;
  _Bool D.17606;
  const unsigned char * D.17609;
  unsigned char D.17610;
  int D.17611;
  const unsigned char * D.17612;
  unsigned char D.17613;
  int D.17614;
  _Bool D.17615;
  _Bool D.17616;
  const unsigned char * D.17619;
  unsigned char D.17620;
  int D.17621;
  const unsigned char * D.17622;
  unsigned char D.17623;
  int D.17624;
  _Bool D.17625;
  _Bool D.17626;
  const unsigned char * D.17629;
  unsigned char D.17630;
  int D.17631;
  const unsigned char * D.17632;
  unsigned char D.17633;
  int D.17634;
  int D.16285;
  int iftmp.61;
  int D.16284;
  unsigned char D.17641;
  int D.17642;
  _Bool D.17643;
  _Bool D.17644;
  _Bool D.17645;
  const unsigned char * D.17648;
  unsigned char D.17649;
  int D.17650;
  _Bool D.17651;
  _Bool D.17652;
  const unsigned char * D.17655;
  unsigned char D.17656;
  int D.17657;
  _Bool D.17658;
  _Bool D.17659;
  const unsigned char * D.17662;
  unsigned char D.17663;
  int D.17664;
  guint16 iftmp.62;
  gchar * D.17669;
  gchar * * numbers.63;
  gchar * D.17673;
  int D.17674;
  guint16 iftmp.64;
  gchar * * numbers.65;
  gchar * D.17680;
  int D.17681;
  guint16 iftmp.66;
  gchar * * numbers.67;
  gchar * D.17687;
  int D.17688;
  guint16 iftmp.68;
  int D.17693;
  struct ParserUserData * pud;
  struct MonoAssemblyBindingInfo * info;
  int n;

  pud = user_data;
  info = pud->info;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.17133 = "dependentAssembly";
      D.17134 = MEM[(const unsigned char *)D.17133];
      D.17135 = (int) D.17134;
      D.17136 = *__s2;
      D.17137 = (int) D.17136;
      __result = D.17135 - D.17137;
      {
        D.17138 = __s2_len != 0;
        D.17139 = __result == 0;
        D.17140 = D.17138 & D.17139;
        if (D.17140 != 0) goto <D.17141>; else goto <D.17142>;
        <D.17141>:
        D.17143 = &MEM[(void *)"dependentAssembly" + 1B];
        D.17144 = *D.17143;
        D.17145 = (int) D.17144;
        D.17146 = __s2 + 1;
        D.17147 = *D.17146;
        D.17148 = (int) D.17147;
        __result = D.17145 - D.17148;
        D.17149 = __s2_len > 1;
        D.17139 = __result == 0;
        D.17150 = D.17149 & D.17139;
        if (D.17150 != 0) goto <D.17151>; else goto <D.17152>;
        <D.17151>:
        D.17153 = &MEM[(void *)"dependentAssembly" + 2B];
        D.17154 = *D.17153;
        D.17155 = (int) D.17154;
        D.17156 = __s2 + 2;
        D.17157 = *D.17156;
        D.17158 = (int) D.17157;
        __result = D.17155 - D.17158;
        D.17159 = __s2_len > 2;
        D.17139 = __result == 0;
        D.17160 = D.17159 & D.17139;
        if (D.17160 != 0) goto <D.17161>; else goto <D.17162>;
        <D.17161>:
        D.17163 = &MEM[(void *)"dependentAssembly" + 3B];
        D.17164 = *D.17163;
        D.17165 = (int) D.17164;
        D.17166 = __s2 + 3;
        D.17167 = *D.17166;
        D.17168 = (int) D.17167;
        __result = D.17165 - D.17168;
        <D.17162>:
        <D.17152>:
        <D.17142>:
      }
      D.16179 = __result;
    }
    iftmp.36 = -D.16179;
    goto <D.17169>;
    <D.17132>:
    iftmp.36 = __builtin_strcmp (element_name, "dependentAssembly");
    <D.17169>:
    D.16180 = iftmp.36;
  }
  if (D.16180 == 0) goto <D.17170>; else goto <D.17171>;
  <D.17170>:
  info->name = 0B;
  info->culture = 0B;
  info->has_old_version_bottom = 0;
  info->has_old_version_top = 0;
  info->has_new_version = 0;
  info->is_valid = 0;
  D.17172 = &info->old_version_bottom;
  memset (D.17172, 0, 8);
  D.17173 = &info->old_version_top;
  memset (D.17173, 0, 8);
  D.17174 = &info->new_version;
  memset (D.17174, 0, 8);
  <D.17171>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.17178 = "assemblyIdentity";
      D.17179 = MEM[(const unsigned char *)D.17178];
      D.17180 = (int) D.17179;
      D.17181 = *__s2;
      D.17182 = (int) D.17181;
      __result = D.17180 - D.17182;
      {
        D.17183 = __s2_len != 0;
        D.17184 = __result == 0;
        D.17185 = D.17183 & D.17184;
        if (D.17185 != 0) goto <D.17186>; else goto <D.17187>;
        <D.17186>:
        D.17188 = &MEM[(void *)"assemblyIdentity" + 1B];
        D.17189 = *D.17188;
        D.17190 = (int) D.17189;
        D.17191 = __s2 + 1;
        D.17192 = *D.17191;
        D.17193 = (int) D.17192;
        __result = D.17190 - D.17193;
        D.17194 = __s2_len > 1;
        D.17184 = __result == 0;
        D.17195 = D.17194 & D.17184;
        if (D.17195 != 0) goto <D.17196>; else goto <D.17197>;
        <D.17196>:
        D.17198 = &MEM[(void *)"assemblyIdentity" + 2B];
        D.17199 = *D.17198;
        D.17200 = (int) D.17199;
        D.17201 = __s2 + 2;
        D.17202 = *D.17201;
        D.17203 = (int) D.17202;
        __result = D.17200 - D.17203;
        D.17204 = __s2_len > 2;
        D.17184 = __result == 0;
        D.17205 = D.17204 & D.17184;
        if (D.17205 != 0) goto <D.17206>; else goto <D.17207>;
        <D.17206>:
        D.17208 = &MEM[(void *)"assemblyIdentity" + 3B];
        D.17209 = *D.17208;
        D.17210 = (int) D.17209;
        D.17211 = __s2 + 3;
        D.17212 = *D.17211;
        D.17213 = (int) D.17212;
        __result = D.17210 - D.17213;
        <D.17207>:
        <D.17197>:
        <D.17187>:
      }
      D.16188 = __result;
    }
    iftmp.37 = -D.16188;
    goto <D.17214>;
    <D.17177>:
    iftmp.37 = __builtin_strcmp (element_name, "assemblyIdentity");
    <D.17214>:
    D.16189 = iftmp.37;
  }
  if (D.16189 == 0) goto <D.17215>; else goto <D.17216>;
  <D.17215>:
  n = 0;
  goto <D.16228>;
  <D.16227>:
  {
    const gchar * attribute_name;

    n.38 = (unsigned int) n;
    D.17218 = n.38 * 4;
    D.17219 = attribute_names + D.17218;
    attribute_name = *D.17219;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.17223 = "name";
        D.17224 = MEM[(const unsigned char *)D.17223];
        D.17225 = (int) D.17224;
        D.17226 = *__s2;
        D.17227 = (int) D.17226;
        __result = D.17225 - D.17227;
        {
          D.17228 = __s2_len != 0;
          D.17229 = __result == 0;
          D.17230 = D.17228 & D.17229;
          if (D.17230 != 0) goto <D.17231>; else goto <D.17232>;
          <D.17231>:
          D.17233 = &MEM[(void *)"name" + 1B];
          D.17234 = *D.17233;
          D.17235 = (int) D.17234;
          D.17236 = __s2 + 1;
          D.17237 = *D.17236;
          D.17238 = (int) D.17237;
          __result = D.17235 - D.17238;
          D.17239 = __s2_len > 1;
          D.17229 = __result == 0;
          D.17240 = D.17239 & D.17229;
          if (D.17240 != 0) goto <D.17241>; else goto <D.17242>;
          <D.17241>:
          D.17243 = &MEM[(void *)"name" + 2B];
          D.17244 = *D.17243;
          D.17245 = (int) D.17244;
          D.17246 = __s2 + 2;
          D.17247 = *D.17246;
          D.17248 = (int) D.17247;
          __result = D.17245 - D.17248;
          D.17249 = __s2_len > 2;
          D.17229 = __result == 0;
          D.17250 = D.17249 & D.17229;
          if (D.17250 != 0) goto <D.17251>; else goto <D.17252>;
          <D.17251>:
          D.17253 = &MEM[(void *)"name" + 3B];
          D.17254 = *D.17253;
          D.17255 = (int) D.17254;
          D.17256 = __s2 + 3;
          D.17257 = *D.17256;
          D.17258 = (int) D.17257;
          __result = D.17255 - D.17258;
          <D.17252>:
          <D.17242>:
          <D.17232>:
        }
        D.16198 = __result;
      }
      iftmp.39 = -D.16198;
      goto <D.17259>;
      <D.17222>:
      iftmp.39 = __builtin_strcmp (attribute_name, "name");
      <D.17259>:
      D.16199 = iftmp.39;
    }
    if (D.16199 == 0) goto <D.17260>; else goto <D.17261>;
    <D.17260>:
    n.38 = (unsigned int) n;
    D.17218 = n.38 * 4;
    D.17262 = attribute_values + D.17218;
    D.17263 = *D.17262;
    D.17264 = monoeg_strdup (D.17263);
    info->name = D.17264;
    goto <D.17265>;
    <D.17261>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.17269 = "publicKeyToken";
        D.17270 = MEM[(const unsigned char *)D.17269];
        D.17271 = (int) D.17270;
        D.17272 = *__s2;
        D.17273 = (int) D.17272;
        __result = D.17271 - D.17273;
        {
          D.17274 = __s2_len != 0;
          D.17275 = __result == 0;
          D.17276 = D.17274 & D.17275;
          if (D.17276 != 0) goto <D.17277>; else goto <D.17278>;
          <D.17277>:
          D.17279 = &MEM[(void *)"publicKeyToken" + 1B];
          D.17280 = *D.17279;
          D.17281 = (int) D.17280;
          D.17282 = __s2 + 1;
          D.17283 = *D.17282;
          D.17284 = (int) D.17283;
          __result = D.17281 - D.17284;
          D.17285 = __s2_len > 1;
          D.17275 = __result == 0;
          D.17286 = D.17285 & D.17275;
          if (D.17286 != 0) goto <D.17287>; else goto <D.17288>;
          <D.17287>:
          D.17289 = &MEM[(void *)"publicKeyToken" + 2B];
          D.17290 = *D.17289;
          D.17291 = (int) D.17290;
          D.17292 = __s2 + 2;
          D.17293 = *D.17292;
          D.17294 = (int) D.17293;
          __result = D.17291 - D.17294;
          D.17295 = __s2_len > 2;
          D.17275 = __result == 0;
          D.17296 = D.17295 & D.17275;
          if (D.17296 != 0) goto <D.17297>; else goto <D.17298>;
          <D.17297>:
          D.17299 = &MEM[(void *)"publicKeyToken" + 3B];
          D.17300 = *D.17299;
          D.17301 = (int) D.17300;
          D.17302 = __s2 + 3;
          D.17303 = *D.17302;
          D.17304 = (int) D.17303;
          __result = D.17301 - D.17304;
          <D.17298>:
          <D.17288>:
          <D.17278>:
        }
        D.16207 = __result;
      }
      iftmp.40 = -D.16207;
      goto <D.17305>;
      <D.17268>:
      iftmp.40 = __builtin_strcmp (attribute_name, "publicKeyToken");
      <D.17305>:
      D.16208 = iftmp.40;
    }
    if (D.16208 == 0) goto <D.17306>; else goto <D.17307>;
    <D.17306>:
    n.38 = (unsigned int) n;
    D.17218 = n.38 * 4;
    D.17262 = attribute_values + D.17218;
    D.17263 = *D.17262;
    D.17308 = strlen (D.17263);
    if (D.17308 == 16) goto <D.17309>; else goto <D.17310>;
    <D.17309>:
    n.38 = (unsigned int) n;
    D.17218 = n.38 * 4;
    D.17262 = attribute_values + D.17218;
    D.17263 = *D.17262;
    D.17311 = &info->public_key_token;
    monoeg_g_strlcpy (D.17311, D.17263, 17);
    <D.17310>:
    goto <D.17312>;
    <D.17307>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.17316 = "culture";
        D.17317 = MEM[(const unsigned char *)D.17316];
        D.17318 = (int) D.17317;
        D.17319 = *__s2;
        D.17320 = (int) D.17319;
        __result = D.17318 - D.17320;
        {
          D.17321 = __s2_len != 0;
          D.17322 = __result == 0;
          D.17323 = D.17321 & D.17322;
          if (D.17323 != 0) goto <D.17324>; else goto <D.17325>;
          <D.17324>:
          D.17326 = &MEM[(void *)"culture" + 1B];
          D.17327 = *D.17326;
          D.17328 = (int) D.17327;
          D.17329 = __s2 + 1;
          D.17330 = *D.17329;
          D.17331 = (int) D.17330;
          __result = D.17328 - D.17331;
          D.17332 = __s2_len > 1;
          D.17322 = __result == 0;
          D.17333 = D.17332 & D.17322;
          if (D.17333 != 0) goto <D.17334>; else goto <D.17335>;
          <D.17334>:
          D.17336 = &MEM[(void *)"culture" + 2B];
          D.17337 = *D.17336;
          D.17338 = (int) D.17337;
          D.17339 = __s2 + 2;
          D.17340 = *D.17339;
          D.17341 = (int) D.17340;
          __result = D.17338 - D.17341;
          D.17342 = __s2_len > 2;
          D.17322 = __result == 0;
          D.17343 = D.17342 & D.17322;
          if (D.17343 != 0) goto <D.17344>; else goto <D.17345>;
          <D.17344>:
          D.17346 = &MEM[(void *)"culture" + 3B];
          D.17347 = *D.17346;
          D.17348 = (int) D.17347;
          D.17349 = __s2 + 3;
          D.17350 = *D.17349;
          D.17351 = (int) D.17350;
          __result = D.17348 - D.17351;
          <D.17345>:
          <D.17335>:
          <D.17325>:
        }
        D.16216 = __result;
      }
      iftmp.41 = -D.16216;
      goto <D.17352>;
      <D.17315>:
      iftmp.41 = __builtin_strcmp (attribute_name, "culture");
      <D.17352>:
      D.16217 = iftmp.41;
    }
    if (D.16217 == 0) goto <D.17353>; else goto <D.17354>;
    <D.17353>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        n.38 = (unsigned int) n;
        D.17218 = n.38 * 4;
        D.17262 = attribute_values + D.17218;
        __s2 = *D.17262;
        D.17358 = "neutral";
        D.17359 = MEM[(const unsigned char *)D.17358];
        D.17360 = (int) D.17359;
        D.17361 = *__s2;
        D.17362 = (int) D.17361;
        __result = D.17360 - D.17362;
        {
          D.17363 = __s2_len != 0;
          D.17364 = __result == 0;
          D.17365 = D.17363 & D.17364;
          if (D.17365 != 0) goto <D.17366>; else goto <D.17367>;
          <D.17366>:
          D.17368 = &MEM[(void *)"neutral" + 1B];
          D.17369 = *D.17368;
          D.17370 = (int) D.17369;
          D.17371 = __s2 + 1;
          D.17372 = *D.17371;
          D.17373 = (int) D.17372;
          __result = D.17370 - D.17373;
          D.17374 = __s2_len > 1;
          D.17364 = __result == 0;
          D.17375 = D.17374 & D.17364;
          if (D.17375 != 0) goto <D.17376>; else goto <D.17377>;
          <D.17376>:
          D.17378 = &MEM[(void *)"neutral" + 2B];
          D.17379 = *D.17378;
          D.17380 = (int) D.17379;
          D.17381 = __s2 + 2;
          D.17382 = *D.17381;
          D.17383 = (int) D.17382;
          __result = D.17380 - D.17383;
          D.17384 = __s2_len > 2;
          D.17364 = __result == 0;
          D.17385 = D.17384 & D.17364;
          if (D.17385 != 0) goto <D.17386>; else goto <D.17387>;
          <D.17386>:
          D.17388 = &MEM[(void *)"neutral" + 3B];
          D.17389 = *D.17388;
          D.17390 = (int) D.17389;
          D.17391 = __s2 + 3;
          D.17392 = *D.17391;
          D.17393 = (int) D.17392;
          __result = D.17390 - D.17393;
          <D.17387>:
          <D.17377>:
          <D.17367>:
        }
        D.16225 = __result;
      }
      iftmp.42 = -D.16225;
      goto <D.17394>;
      <D.17357>:
      n.38 = (unsigned int) n;
      D.17218 = n.38 * 4;
      D.17262 = attribute_values + D.17218;
      D.17263 = *D.17262;
      iftmp.42 = __builtin_strcmp (D.17263, "neutral");
      <D.17394>:
      D.16226 = iftmp.42;
    }
    if (D.16226 == 0) goto <D.17395>; else goto <D.17396>;
    <D.17395>:
    D.17397 = monoeg_strdup ("");
    info->culture = D.17397;
    goto <D.17398>;
    <D.17396>:
    n.38 = (unsigned int) n;
    D.17218 = n.38 * 4;
    D.17262 = attribute_values + D.17218;
    D.17263 = *D.17262;
    D.17399 = monoeg_strdup (D.17263);
    info->culture = D.17399;
    <D.17398>:
    <D.17354>:
    <D.17312>:
    <D.17265>:
  }
  n = n + 1;
  <D.16228>:
  n.38 = (unsigned int) n;
  D.17218 = n.38 * 4;
  D.17219 = attribute_names + D.17218;
  D.17400 = *D.17219;
  if (D.17400 != 0B) goto <D.16227>; else goto <D.16229>;
  <D.16229>:
  goto <D.17401>;
  <D.17216>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.17405 = "bindingRedirect";
      D.17406 = MEM[(const unsigned char *)D.17405];
      D.17407 = (int) D.17406;
      D.17408 = *__s2;
      D.17409 = (int) D.17408;
      __result = D.17407 - D.17409;
      {
        D.17410 = __s2_len != 0;
        D.17411 = __result == 0;
        D.17412 = D.17410 & D.17411;
        if (D.17412 != 0) goto <D.17413>; else goto <D.17414>;
        <D.17413>:
        D.17415 = &MEM[(void *)"bindingRedirect" + 1B];
        D.17416 = *D.17415;
        D.17417 = (int) D.17416;
        D.17418 = __s2 + 1;
        D.17419 = *D.17418;
        D.17420 = (int) D.17419;
        __result = D.17417 - D.17420;
        D.17421 = __s2_len > 1;
        D.17411 = __result == 0;
        D.17422 = D.17421 & D.17411;
        if (D.17422 != 0) goto <D.17423>; else goto <D.17424>;
        <D.17423>:
        D.17425 = &MEM[(void *)"bindingRedirect" + 2B];
        D.17426 = *D.17425;
        D.17427 = (int) D.17426;
        D.17428 = __s2 + 2;
        D.17429 = *D.17428;
        D.17430 = (int) D.17429;
        __result = D.17427 - D.17430;
        D.17431 = __s2_len > 2;
        D.17411 = __result == 0;
        D.17432 = D.17431 & D.17411;
        if (D.17432 != 0) goto <D.17433>; else goto <D.17434>;
        <D.17433>:
        D.17435 = &MEM[(void *)"bindingRedirect" + 3B];
        D.17436 = *D.17435;
        D.17437 = (int) D.17436;
        D.17438 = __s2 + 3;
        D.17439 = *D.17438;
        D.17440 = (int) D.17439;
        __result = D.17437 - D.17440;
        <D.17434>:
        <D.17424>:
        <D.17414>:
      }
      D.16237 = __result;
    }
    iftmp.43 = -D.16237;
    goto <D.17441>;
    <D.17404>:
    iftmp.43 = __builtin_strcmp (element_name, "bindingRedirect");
    <D.17441>:
    D.16238 = iftmp.43;
  }
  if (D.16238 == 0) goto <D.17442>; else goto <D.17443>;
  <D.17442>:
  n = 0;
  goto <D.16287>;
  <D.16286>:
  {
    const gchar * attribute_name;

    n.38 = (unsigned int) n;
    D.17218 = n.38 * 4;
    D.17219 = attribute_names + D.17218;
    attribute_name = *D.17219;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.17447 = "oldVersion";
        D.17448 = MEM[(const unsigned char *)D.17447];
        D.17449 = (int) D.17448;
        D.17450 = *__s2;
        D.17451 = (int) D.17450;
        __result = D.17449 - D.17451;
        {
          D.17452 = __s2_len != 0;
          D.17453 = __result == 0;
          D.17454 = D.17452 & D.17453;
          if (D.17454 != 0) goto <D.17455>; else goto <D.17456>;
          <D.17455>:
          D.17457 = &MEM[(void *)"oldVersion" + 1B];
          D.17458 = *D.17457;
          D.17459 = (int) D.17458;
          D.17460 = __s2 + 1;
          D.17461 = *D.17460;
          D.17462 = (int) D.17461;
          __result = D.17459 - D.17462;
          D.17463 = __s2_len > 1;
          D.17453 = __result == 0;
          D.17464 = D.17463 & D.17453;
          if (D.17464 != 0) goto <D.17465>; else goto <D.17466>;
          <D.17465>:
          D.17467 = &MEM[(void *)"oldVersion" + 2B];
          D.17468 = *D.17467;
          D.17469 = (int) D.17468;
          D.17470 = __s2 + 2;
          D.17471 = *D.17470;
          D.17472 = (int) D.17471;
          __result = D.17469 - D.17472;
          D.17473 = __s2_len > 2;
          D.17453 = __result == 0;
          D.17474 = D.17473 & D.17453;
          if (D.17474 != 0) goto <D.17475>; else goto <D.17476>;
          <D.17475>:
          D.17477 = &MEM[(void *)"oldVersion" + 3B];
          D.17478 = *D.17477;
          D.17479 = (int) D.17478;
          D.17480 = __s2 + 3;
          D.17481 = *D.17480;
          D.17482 = (int) D.17481;
          __result = D.17479 - D.17482;
          <D.17476>:
          <D.17466>:
          <D.17456>:
        }
        D.16247 = __result;
      }
      iftmp.44 = -D.16247;
      goto <D.17483>;
      <D.17446>:
      iftmp.44 = __builtin_strcmp (attribute_name, "oldVersion");
      <D.17483>:
      D.16248 = iftmp.44;
    }
    if (D.16248 == 0) goto <D.17484>; else goto <D.17485>;
    <D.17484>:
    {
      gchar * * numbers;
      gchar * * version;
      gchar * * versions;
      gint major;
      gint minor;
      gint build;
      gint revision;

      {
        size_t __s1_len;
        size_t __s2_len;

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

          n.38 = (unsigned int) n;
          D.17218 = n.38 * 4;
          D.17262 = attribute_values + D.17218;
          __s2 = *D.17262;
          D.17489 = "";
          D.17490 = MEM[(const unsigned char *)D.17489];
          D.17491 = (int) D.17490;
          D.17492 = *__s2;
          D.17493 = (int) D.17492;
          __result = D.17491 - D.17493;
          {
            D.17494 = __s2_len != 0;
            D.17495 = __result == 0;
            D.17496 = D.17494 & D.17495;
            if (D.17496 != 0) goto <D.17497>; else goto <D.17498>;
            <D.17497>:
            D.17499 = &MEM[(void *)"" + 1B];
            D.17500 = *D.17499;
            D.17501 = (int) D.17500;
            D.17502 = __s2 + 1;
            D.17503 = *D.17502;
            D.17504 = (int) D.17503;
            __result = D.17501 - D.17504;
            D.17505 = __s2_len > 1;
            D.17495 = __result == 0;
            D.17506 = D.17505 & D.17495;
            if (D.17506 != 0) goto <D.17507>; else goto <D.17508>;
            <D.17507>:
            D.17509 = &MEM[(void *)"" + 2B];
            D.17510 = *D.17509;
            D.17511 = (int) D.17510;
            D.17512 = __s2 + 2;
            D.17513 = *D.17512;
            D.17514 = (int) D.17513;
            __result = D.17511 - D.17514;
            D.17515 = __s2_len > 2;
            D.17495 = __result == 0;
            D.17516 = D.17515 & D.17495;
            if (D.17516 != 0) goto <D.17517>; else goto <D.17518>;
            <D.17517>:
            D.17519 = &MEM[(void *)"" + 3B];
            D.17520 = *D.17519;
            D.17521 = (int) D.17520;
            D.17522 = __s2 + 3;
            D.17523 = *D.17522;
            D.17524 = (int) D.17523;
            __result = D.17521 - D.17524;
            <D.17518>:
            <D.17508>:
            <D.17498>:
          }
          D.16263 = __result;
        }
        iftmp.45 = -D.16263;
        goto <D.17525>;
        <D.17488>:
        n.38 = (unsigned int) n;
        D.17218 = n.38 * 4;
        D.17262 = attribute_values + D.17218;
        D.17263 = *D.17262;
        D.17526 = MEM[(const unsigned char * {ref-all})D.17263];
        iftmp.45 = (int) D.17526;
        <D.17525>:
        D.16264 = iftmp.45;
      }
      if (D.16264 == 0) goto <D.17527>; else goto <D.17528>;
      <D.17527>:
      return;
      <D.17528>:
      n.38 = (unsigned int) n;
      D.17218 = n.38 * 4;
      D.17262 = attribute_values + D.17218;
      D.17263 = *D.17262;
      versions = monoeg_g_strsplit (D.17263, "-", 2);
      D.17529 = *versions;
      version = monoeg_g_strsplit (D.17529, ".", 4);
      numbers = version;
      D.17531 = *numbers;
      if (D.17531 != 0B) goto <D.17532>; else goto <D.17533>;
      <D.17532>:
      numbers.47 = numbers;
      numbers = numbers.47 + 4;
      D.17535 = *numbers.47;
      iftmp.46 = atoi (D.17535);
      goto <D.17536>;
      <D.17533>:
      iftmp.46 = -1;
      <D.17536>:
      major = iftmp.46;
      D.17531 = *numbers;
      if (D.17531 != 0B) goto <D.17538>; else goto <D.17539>;
      <D.17538>:
      numbers.49 = numbers;
      numbers = numbers.49 + 4;
      D.17541 = *numbers.49;
      iftmp.48 = atoi (D.17541);
      goto <D.17542>;
      <D.17539>:
      iftmp.48 = -1;
      <D.17542>:
      minor = iftmp.48;
      D.17531 = *numbers;
      if (D.17531 != 0B) goto <D.17544>; else goto <D.17545>;
      <D.17544>:
      numbers.51 = numbers;
      numbers = numbers.51 + 4;
      D.17547 = *numbers.51;
      iftmp.50 = atoi (D.17547);
      goto <D.17548>;
      <D.17545>:
      iftmp.50 = -1;
      <D.17548>:
      build = iftmp.50;
      D.17531 = *numbers;
      if (D.17531 != 0B) goto <D.17550>; else goto <D.17551>;
      <D.17550>:
      D.17531 = *numbers;
      iftmp.52 = atoi (D.17531);
      goto <D.17552>;
      <D.17551>:
      iftmp.52 = -1;
      <D.17552>:
      revision = iftmp.52;
      monoeg_g_strfreev (version);
      D.17555 = major < 0;
      D.17556 = minor < 0;
      D.17557 = D.17555 | D.17556;
      if (D.17557 != 0) goto <D.17553>; else goto <D.17558>;
      <D.17558>:
      D.17559 = build < 0;
      D.17560 = revision < 0;
      D.17561 = D.17559 | D.17560;
      if (D.17561 != 0) goto <D.17553>; else goto <D.17554>;
      <D.17553>:
      monoeg_g_strfreev (versions);
      return;
      <D.17554>:
      D.17562 = (short unsigned int) major;
      info->old_version_bottom.major = D.17562;
      D.17563 = (short unsigned int) minor;
      info->old_version_bottom.minor = D.17563;
      D.17564 = (short unsigned int) build;
      info->old_version_bottom.build = D.17564;
      D.17565 = (short unsigned int) revision;
      info->old_version_bottom.revision = D.17565;
      info->has_old_version_bottom = 1;
      D.17566 = versions + 4;
      D.17567 = *D.17566;
      if (D.17567 == 0B) goto <D.17568>; else goto <D.17569>;
      <D.17568>:
      monoeg_g_strfreev (versions);
      // predicted unlikely by continue predictor.
      goto <D.16265>;
      <D.17569>:
      D.17566 = versions + 4;
      D.17567 = *D.17566;
      version = monoeg_g_strsplit (D.17567, ".", 4);
      numbers = version;
      D.17531 = *numbers;
      if (D.17531 != 0B) goto <D.17571>; else goto <D.17572>;
      <D.17571>:
      numbers.54 = numbers;
      numbers = numbers.54 + 4;
      D.17574 = *numbers.54;
      iftmp.53 = atoi (D.17574);
      goto <D.17575>;
      <D.17572>:
      iftmp.53 = -1;
      <D.17575>:
      major = iftmp.53;
      D.17531 = *numbers;
      if (D.17531 != 0B) goto <D.17577>; else goto <D.17578>;
      <D.17577>:
      numbers.56 = numbers;
      numbers = numbers.56 + 4;
      D.17580 = *numbers.56;
      iftmp.55 = atoi (D.17580);
      goto <D.17581>;
      <D.17578>:
      iftmp.55 = -1;
      <D.17581>:
      minor = iftmp.55;
      D.17531 = *numbers;
      if (D.17531 != 0B) goto <D.17583>; else goto <D.17584>;
      <D.17583>:
      numbers.58 = numbers;
      numbers = numbers.58 + 4;
      D.17586 = *numbers.58;
      iftmp.57 = atoi (D.17586);
      goto <D.17587>;
      <D.17584>:
      iftmp.57 = -1;
      <D.17587>:
      build = iftmp.57;
      D.17531 = *numbers;
      if (D.17531 != 0B) goto <D.17589>; else goto <D.17590>;
      <D.17589>:
      D.17531 = *numbers;
      iftmp.59 = atoi (D.17531);
      goto <D.17591>;
      <D.17590>:
      iftmp.59 = 1;
      <D.17591>:
      revision = iftmp.59;
      monoeg_g_strfreev (version);
      D.17555 = major < 0;
      D.17556 = minor < 0;
      D.17557 = D.17555 | D.17556;
      if (D.17557 != 0) goto <D.17592>; else goto <D.17594>;
      <D.17594>:
      D.17559 = build < 0;
      D.17560 = revision < 0;
      D.17561 = D.17559 | D.17560;
      if (D.17561 != 0) goto <D.17592>; else goto <D.17593>;
      <D.17592>:
      monoeg_g_strfreev (versions);
      return;
      <D.17593>:
      D.17562 = (short unsigned int) major;
      info->old_version_top.major = D.17562;
      D.17563 = (short unsigned int) minor;
      info->old_version_top.minor = D.17563;
      D.17564 = (short unsigned int) build;
      info->old_version_top.build = D.17564;
      D.17565 = (short unsigned int) revision;
      info->old_version_top.revision = D.17565;
      info->has_old_version_top = 1;
      monoeg_g_strfreev (versions);
    }
    goto <D.17595>;
    <D.17485>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.17599 = "newVersion";
        D.17600 = MEM[(const unsigned char *)D.17599];
        D.17601 = (int) D.17600;
        D.17602 = *__s2;
        D.17603 = (int) D.17602;
        __result = D.17601 - D.17603;
        {
          D.17604 = __s2_len != 0;
          D.17605 = __result == 0;
          D.17606 = D.17604 & D.17605;
          if (D.17606 != 0) goto <D.17607>; else goto <D.17608>;
          <D.17607>:
          D.17609 = &MEM[(void *)"newVersion" + 1B];
          D.17610 = *D.17609;
          D.17611 = (int) D.17610;
          D.17612 = __s2 + 1;
          D.17613 = *D.17612;
          D.17614 = (int) D.17613;
          __result = D.17611 - D.17614;
          D.17615 = __s2_len > 1;
          D.17605 = __result == 0;
          D.17616 = D.17615 & D.17605;
          if (D.17616 != 0) goto <D.17617>; else goto <D.17618>;
          <D.17617>:
          D.17619 = &MEM[(void *)"newVersion" + 2B];
          D.17620 = *D.17619;
          D.17621 = (int) D.17620;
          D.17622 = __s2 + 2;
          D.17623 = *D.17622;
          D.17624 = (int) D.17623;
          __result = D.17621 - D.17624;
          D.17625 = __s2_len > 2;
          D.17605 = __result == 0;
          D.17626 = D.17625 & D.17605;
          if (D.17626 != 0) goto <D.17627>; else goto <D.17628>;
          <D.17627>:
          D.17629 = &MEM[(void *)"newVersion" + 3B];
          D.17630 = *D.17629;
          D.17631 = (int) D.17630;
          D.17632 = __s2 + 3;
          D.17633 = *D.17632;
          D.17634 = (int) D.17633;
          __result = D.17631 - D.17634;
          <D.17628>:
          <D.17618>:
          <D.17608>:
        }
        D.16273 = __result;
      }
      iftmp.60 = -D.16273;
      goto <D.17635>;
      <D.17598>:
      iftmp.60 = __builtin_strcmp (attribute_name, "newVersion");
      <D.17635>:
      D.16274 = iftmp.60;
    }
    if (D.16274 == 0) goto <D.17636>; else goto <D.17637>;
    <D.17636>:
    {
      gchar * * numbers;
      gchar * * version;

      {
        size_t __s1_len;
        size_t __s2_len;

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

          n.38 = (unsigned int) n;
          D.17218 = n.38 * 4;
          D.17262 = attribute_values + D.17218;
          __s2 = *D.17262;
          D.17489 = "";
          D.17490 = MEM[(const unsigned char *)D.17489];
          D.17491 = (int) D.17490;
          D.17641 = *__s2;
          D.17642 = (int) D.17641;
          __result = D.17491 - D.17642;
          {
            D.17643 = __s2_len != 0;
            D.17644 = __result == 0;
            D.17645 = D.17643 & D.17644;
            if (D.17645 != 0) goto <D.17646>; else goto <D.17647>;
            <D.17646>:
            D.17499 = &MEM[(void *)"" + 1B];
            D.17500 = *D.17499;
            D.17501 = (int) D.17500;
            D.17648 = __s2 + 1;
            D.17649 = *D.17648;
            D.17650 = (int) D.17649;
            __result = D.17501 - D.17650;
            D.17651 = __s2_len > 1;
            D.17644 = __result == 0;
            D.17652 = D.17651 & D.17644;
            if (D.17652 != 0) goto <D.17653>; else goto <D.17654>;
            <D.17653>:
            D.17509 = &MEM[(void *)"" + 2B];
            D.17510 = *D.17509;
            D.17511 = (int) D.17510;
            D.17655 = __s2 + 2;
            D.17656 = *D.17655;
            D.17657 = (int) D.17656;
            __result = D.17511 - D.17657;
            D.17658 = __s2_len > 2;
            D.17644 = __result == 0;
            D.17659 = D.17658 & D.17644;
            if (D.17659 != 0) goto <D.17660>; else goto <D.17661>;
            <D.17660>:
            D.17519 = &MEM[(void *)"" + 3B];
            D.17520 = *D.17519;
            D.17521 = (int) D.17520;
            D.17662 = __s2 + 3;
            D.17663 = *D.17662;
            D.17664 = (int) D.17663;
            __result = D.17521 - D.17664;
            <D.17661>:
            <D.17654>:
            <D.17647>:
          }
          D.16284 = __result;
        }
        iftmp.61 = -D.16284;
        goto <D.17665>;
        <D.17640>:
        n.38 = (unsigned int) n;
        D.17218 = n.38 * 4;
        D.17262 = attribute_values + D.17218;
        D.17263 = *D.17262;
        D.17526 = MEM[(const unsigned char * {ref-all})D.17263];
        iftmp.61 = (int) D.17526;
        <D.17665>:
        D.16285 = iftmp.61;
      }
      if (D.16285 == 0) goto <D.17666>; else goto <D.17667>;
      <D.17666>:
      return;
      <D.17667>:
      n.38 = (unsigned int) n;
      D.17218 = n.38 * 4;
      D.17262 = attribute_values + D.17218;
      D.17263 = *D.17262;
      version = monoeg_g_strsplit (D.17263, ".", 4);
      numbers = version;
      D.17669 = *numbers;
      if (D.17669 != 0B) goto <D.17670>; else goto <D.17671>;
      <D.17670>:
      numbers.63 = numbers;
      numbers = numbers.63 + 4;
      D.17673 = *numbers.63;
      D.17674 = atoi (D.17673);
      iftmp.62 = (guint16) D.17674;
      goto <D.17675>;
      <D.17671>:
      iftmp.62 = 65535;
      <D.17675>:
      info->new_version.major = iftmp.62;
      D.17669 = *numbers;
      if (D.17669 != 0B) goto <D.17677>; else goto <D.17678>;
      <D.17677>:
      numbers.65 = numbers;
      numbers = numbers.65 + 4;
      D.17680 = *numbers.65;
      D.17681 = atoi (D.17680);
      iftmp.64 = (guint16) D.17681;
      goto <D.17682>;
      <D.17678>:
      iftmp.64 = 65535;
      <D.17682>:
      info->new_version.minor = iftmp.64;
      D.17669 = *numbers;
      if (D.17669 != 0B) goto <D.17684>; else goto <D.17685>;
      <D.17684>:
      numbers.67 = numbers;
      numbers = numbers.67 + 4;
      D.17687 = *numbers.67;
      D.17688 = atoi (D.17687);
      iftmp.66 = (guint16) D.17688;
      goto <D.17689>;
      <D.17685>:
      iftmp.66 = 65535;
      <D.17689>:
      info->new_version.build = iftmp.66;
      D.17669 = *numbers;
      if (D.17669 != 0B) goto <D.17691>; else goto <D.17692>;
      <D.17691>:
      D.17669 = *numbers;
      D.17693 = atoi (D.17669);
      iftmp.68 = (guint16) D.17693;
      goto <D.17694>;
      <D.17692>:
      iftmp.68 = 65535;
      <D.17694>:
      info->new_version.revision = iftmp.68;
      info->has_new_version = 1;
      monoeg_g_strfreev (version);
    }
    <D.17637>:
    <D.17595>:
  }
  <D.16265>:
  n = n + 1;
  <D.16287>:
  n.38 = (unsigned int) n;
  D.17218 = n.38 * 4;
  D.17219 = attribute_names + D.17218;
  D.17400 = *D.17219;
  if (D.17400 != 0B) goto <D.16286>; else goto <D.16288>;
  <D.16288>:
  <D.17443>:
  <D.17401>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.17698;
  int D.17703;
  void * D.17705;
  unsigned int D.17706;

  D.17698 = __builtin_constant_p (__len);
  if (D.17698 != 0) goto <D.17699>; else goto <D.17700>;
  <D.17699>:
  if (__len == 0) goto <D.17701>; else goto <D.17702>;
  <D.17701>:
  D.17703 = __builtin_constant_p (__ch);
  if (D.17703 == 0) goto <D.17696>; else goto <D.17704>;
  <D.17704>:
  if (__ch != 0) goto <D.17696>; else goto <D.17697>;
  <D.17696>:
  __warn_memset_zero_len ();
  D.17705 = __dest;
  return D.17705;
  <D.17697>:
  <D.17702>:
  <D.17700>:
  D.17706 = __builtin_object_size (__dest, 0);
  D.17705 = __builtin___memset_chk (__dest, __ch, __len, D.17706);
  return D.17705;
}


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

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


mono_config_parse_assembly_bindings (const char * filename, int amajor, int aminor, void * user_data, void (*<T1b88>) (struct MonoAssemblyBindingInfo *, void *) infocb)
{
  struct MonoAssemblyBindingInfo info;
  struct ParserUserData pud;
  struct ParseState state;

  try
    {
      info.major = amajor;
      info.minor = aminor;
      pud.info = &info;
      pud.info_parsed = infocb;
      pud.user_data = user_data;
      state.current = &config_assemblybinding_parser;
      state.user_data = &pud;
      state.assembly = 0B;
      state.inited = 1;
      mono_config_parse_file_with_context (&state, filename);
    }
  finally
    {
      info = {CLOBBER};
      pud = {CLOBBER};
      state = {CLOBBER};
    }
}


assembly_binding_end (void * user_data, const char * element_name)
{
  int D.16162;
  int iftmp.69;
  int D.16161;
  const char[18] * D.17713;
  unsigned char D.17714;
  int D.17715;
  unsigned char D.17716;
  int D.17717;
  _Bool D.17718;
  _Bool D.17719;
  _Bool D.17720;
  const unsigned char * D.17723;
  unsigned char D.17724;
  int D.17725;
  const unsigned char * D.17726;
  unsigned char D.17727;
  int D.17728;
  _Bool D.17729;
  _Bool D.17730;
  const unsigned char * D.17733;
  unsigned char D.17734;
  int D.17735;
  const unsigned char * D.17736;
  unsigned char D.17737;
  int D.17738;
  _Bool D.17739;
  _Bool D.17740;
  const unsigned char * D.17743;
  unsigned char D.17744;
  int D.17745;
  const unsigned char * D.17746;
  unsigned char D.17747;
  int D.17748;
  void (*<T1b88>) (struct MonoAssemblyBindingInfo *, void *) D.17752;
  struct MonoAssemblyBindingInfo * D.17755;
  void * D.17758;
  char * D.17759;
  char * D.17760;
  struct ParserUserData * pud;

  pud = user_data;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.17713 = "dependentAssembly";
      D.17714 = MEM[(const unsigned char *)D.17713];
      D.17715 = (int) D.17714;
      D.17716 = *__s2;
      D.17717 = (int) D.17716;
      __result = D.17715 - D.17717;
      {
        D.17718 = __s2_len != 0;
        D.17719 = __result == 0;
        D.17720 = D.17718 & D.17719;
        if (D.17720 != 0) goto <D.17721>; else goto <D.17722>;
        <D.17721>:
        D.17723 = &MEM[(void *)"dependentAssembly" + 1B];
        D.17724 = *D.17723;
        D.17725 = (int) D.17724;
        D.17726 = __s2 + 1;
        D.17727 = *D.17726;
        D.17728 = (int) D.17727;
        __result = D.17725 - D.17728;
        D.17729 = __s2_len > 1;
        D.17719 = __result == 0;
        D.17730 = D.17729 & D.17719;
        if (D.17730 != 0) goto <D.17731>; else goto <D.17732>;
        <D.17731>:
        D.17733 = &MEM[(void *)"dependentAssembly" + 2B];
        D.17734 = *D.17733;
        D.17735 = (int) D.17734;
        D.17736 = __s2 + 2;
        D.17737 = *D.17736;
        D.17738 = (int) D.17737;
        __result = D.17735 - D.17738;
        D.17739 = __s2_len > 2;
        D.17719 = __result == 0;
        D.17740 = D.17739 & D.17719;
        if (D.17740 != 0) goto <D.17741>; else goto <D.17742>;
        <D.17741>:
        D.17743 = &MEM[(void *)"dependentAssembly" + 3B];
        D.17744 = *D.17743;
        D.17745 = (int) D.17744;
        D.17746 = __s2 + 3;
        D.17747 = *D.17746;
        D.17748 = (int) D.17747;
        __result = D.17745 - D.17748;
        <D.17742>:
        <D.17732>:
        <D.17722>:
      }
      D.16161 = __result;
    }
    iftmp.69 = -D.16161;
    goto <D.17749>;
    <D.17712>:
    iftmp.69 = __builtin_strcmp (element_name, "dependentAssembly");
    <D.17749>:
    D.16162 = iftmp.69;
  }
  if (D.16162 == 0) goto <D.17750>; else goto <D.17751>;
  <D.17750>:
  D.17752 = pud->info_parsed;
  if (D.17752 != 0B) goto <D.17753>; else goto <D.17754>;
  <D.17753>:
  D.17755 = pud->info;
  if (D.17755 != 0B) goto <D.17756>; else goto <D.17757>;
  <D.17756>:
  D.17752 = pud->info_parsed;
  D.17758 = pud->user_data;
  D.17755 = pud->info;
  D.17752 (D.17755, D.17758);
  D.17755 = pud->info;
  D.17759 = D.17755->name;
  monoeg_g_free (D.17759);
  D.17755 = pud->info;
  D.17760 = D.17755->culture;
  monoeg_g_free (D.17760);
  <D.17757>:
  <D.17754>:
  <D.17751>:
}


mono_config_set_server_mode (mono_bool server_mode)
{
  mono_server_mode = server_mode;
}


mono_config_is_server_mode ()
{
  mono_bool D.17761;

  D.17761 = mono_server_mode;
  return D.17761;
}


