invalid_documents ()
{
  gchar * D.5132;

  {
    char * r;

    r = markup_test ("<1>");
    if (r == 0B) goto <D.5130>; else goto <D.5131>;
    <D.5130>:
    D.5132 = FAILED ("Failed on test \"<1>\"");
    return D.5132;
    <D.5131>:
    monoeg_g_free (r);
  }
  {
    char * r;

    r = markup_test ("<a<");
    if (r == 0B) goto <D.5133>; else goto <D.5134>;
    <D.5133>:
    D.5132 = FAILED ("Failed on test \"<a<\"");
    return D.5132;
    <D.5134>:
    monoeg_g_free (r);
  }
  {
    char * r;

    r = markup_test ("</a>");
    if (r == 0B) goto <D.5135>; else goto <D.5136>;
    <D.5135>:
    D.5132 = FAILED ("Failed on test \"</a>\"");
    return D.5132;
    <D.5136>:
    monoeg_g_free (r);
  }
  {
    char * r;

    r = markup_test ("<a b>");
    if (r == 0B) goto <D.5137>; else goto <D.5138>;
    <D.5137>:
    D.5132 = FAILED ("Failed on test \"<a b>\"");
    return D.5132;
    <D.5138>:
    monoeg_g_free (r);
  }
  {
    char * r;

    r = markup_test ("<a b=>");
    if (r == 0B) goto <D.5139>; else goto <D.5140>;
    <D.5139>:
    D.5132 = FAILED ("Failed on test \"<a b=>\"");
    return D.5132;
    <D.5140>:
    monoeg_g_free (r);
  }
  {
    char * r;

    r = markup_test ("<a b=c>");
    if (r == 0B) goto <D.5141>; else goto <D.5142>;
    <D.5141>:
    D.5132 = FAILED ("Failed on test \"<a b=c>\"");
    return D.5132;
    <D.5142>:
    monoeg_g_free (r);
  }
  D.5132 = 0B;
  return D.5132;
}


markup_test (const char * s)
{
  long unsigned int D.5144;
  long int D.5145;
  struct GError * error.0;
  gchar * D.5149;
  char * D.5150;
  struct GMarkupParser * parser;
  struct GMarkupParseContext * context;
  struct GError * error;

  try
    {
      parser = monoeg_malloc0 (40);
      error = 0B;
      context = monoeg_g_markup_parse_context_new (parser, 0, 0B, 0B);
      D.5144 = strlen (s);
      D.5145 = (long int) D.5144;
      monoeg_g_markup_parse_context_parse (context, s, D.5145, &error);
      monoeg_g_markup_parse_context_free (context);
      error.0 = error;
      if (error.0 != 0B) goto <D.5147>; else goto <D.5148>;
      <D.5147>:
      {
        char * msg;

        error.0 = error;
        D.5149 = error.0->message;
        msg = monoeg_strdup (D.5149);
        error.0 = error;
        monoeg_g_error_free (error.0);
        monoeg_g_free (parser);
        D.5150 = msg;
        return D.5150;
      }
      <D.5148>:
      monoeg_g_free (parser);
      D.5150 = 0B;
      return D.5150;
    }
  finally
    {
      error = {CLOBBER};
    }
}


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

  if (str != 0B) goto <D.5153>; else goto <D.5154>;
  <D.5153>:
  D.5155 = __strdup (str);
  return D.5155;
  <D.5154>:
  D.5155 = 0B;
  return D.5155;
}


valid_documents ()
{
  gchar * D.5159;

  {
    char * r;

    r = markup_test ("<a>");
    if (r != 0B) goto <D.5157>; else goto <D.5158>;
    <D.5157>:
    D.5159 = FAILED ("Could not parse valid \"<a>\"");
    return D.5159;
    <D.5158>:
  }
  {
    char * r;

    r = markup_test ("<a a=\"b\">");
    if (r != 0B) goto <D.5160>; else goto <D.5161>;
    <D.5160>:
    D.5159 = FAILED ("Could not parse valid \"<a a=\\\"b\\\">\"");
    return D.5159;
    <D.5161>:
  }
  D.5159 = 0B;
  return D.5159;
}


domain_test (char * text)
{
  long unsigned int D.5163;
  long int D.5164;
  int D.5165;
  struct AppConfigInfo * D.5168;
  struct AppConfigInfo * app_config;
  struct GMarkupParseContext * context;

  app_config = monoeg_malloc0 (24);
  context = monoeg_g_markup_parse_context_new (&mono_parser, 0, app_config, 0B);
  D.5163 = strlen (text);
  D.5164 = (long int) D.5163;
  D.5165 = monoeg_g_markup_parse_context_parse (context, text, D.5164, 0B);
  if (D.5165 != 0) goto <D.5166>; else goto <D.5167>;
  <D.5166>:
  monoeg_g_markup_parse_context_end_parse (context, 0B);
  <D.5167>:
  monoeg_g_markup_parse_context_free (context);
  D.5168 = app_config;
  return D.5168;
}


end_element (struct GMarkupParseContext * context, const gchar * element_name, void * user_data, struct GError * * error)
{
  int D.5052;
  int iftmp.1;
  int D.5051;
  char[14] * D.5173;
  unsigned char D.5174;
  int D.5175;
  unsigned char D.5176;
  int D.5177;
  _Bool D.5178;
  _Bool D.5179;
  _Bool D.5180;
  const unsigned char * D.5183;
  unsigned char D.5184;
  int D.5185;
  const unsigned char * D.5186;
  unsigned char D.5187;
  int D.5188;
  _Bool D.5189;
  _Bool D.5190;
  const unsigned char * D.5193;
  unsigned char D.5194;
  int D.5195;
  const unsigned char * D.5196;
  unsigned char D.5197;
  int D.5198;
  _Bool D.5199;
  _Bool D.5200;
  const unsigned char * D.5203;
  unsigned char D.5204;
  int D.5205;
  const unsigned char * D.5206;
  unsigned char D.5207;
  int D.5208;
  int D.5212;
  int D.5213;
  int D.5061;
  int iftmp.2;
  int D.5060;
  char[8] * D.5218;
  unsigned char D.5219;
  int D.5220;
  unsigned char D.5221;
  int D.5222;
  _Bool D.5223;
  _Bool D.5224;
  _Bool D.5225;
  const unsigned char * D.5228;
  unsigned char D.5229;
  int D.5230;
  const unsigned char * D.5231;
  unsigned char D.5232;
  int D.5233;
  _Bool D.5234;
  _Bool D.5235;
  const unsigned char * D.5238;
  unsigned char D.5239;
  int D.5240;
  const unsigned char * D.5241;
  unsigned char D.5242;
  int D.5243;
  _Bool D.5244;
  _Bool D.5245;
  const unsigned char * D.5248;
  unsigned char D.5249;
  int D.5250;
  const unsigned char * D.5251;
  unsigned char D.5252;
  int D.5253;
  int D.5257;
  int D.5258;
  struct AppConfigInfo * app_config;

  app_config = user_data;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.5173 = "configuration";
      D.5174 = MEM[(const unsigned char *)D.5173];
      D.5175 = (int) D.5174;
      D.5176 = *__s2;
      D.5177 = (int) D.5176;
      __result = D.5175 - D.5177;
      {
        D.5178 = __s2_len != 0;
        D.5179 = __result == 0;
        D.5180 = D.5178 & D.5179;
        if (D.5180 != 0) goto <D.5181>; else goto <D.5182>;
        <D.5181>:
        D.5183 = &MEM[(void *)"configuration" + 1B];
        D.5184 = *D.5183;
        D.5185 = (int) D.5184;
        D.5186 = __s2 + 1;
        D.5187 = *D.5186;
        D.5188 = (int) D.5187;
        __result = D.5185 - D.5188;
        D.5189 = __s2_len > 1;
        D.5179 = __result == 0;
        D.5190 = D.5189 & D.5179;
        if (D.5190 != 0) goto <D.5191>; else goto <D.5192>;
        <D.5191>:
        D.5193 = &MEM[(void *)"configuration" + 2B];
        D.5194 = *D.5193;
        D.5195 = (int) D.5194;
        D.5196 = __s2 + 2;
        D.5197 = *D.5196;
        D.5198 = (int) D.5197;
        __result = D.5195 - D.5198;
        D.5199 = __s2_len > 2;
        D.5179 = __result == 0;
        D.5200 = D.5199 & D.5179;
        if (D.5200 != 0) goto <D.5201>; else goto <D.5202>;
        <D.5201>:
        D.5203 = &MEM[(void *)"configuration" + 3B];
        D.5204 = *D.5203;
        D.5205 = (int) D.5204;
        D.5206 = __s2 + 3;
        D.5207 = *D.5206;
        D.5208 = (int) D.5207;
        __result = D.5205 - D.5208;
        <D.5202>:
        <D.5192>:
        <D.5182>:
      }
      D.5051 = __result;
    }
    iftmp.1 = -D.5051;
    goto <D.5209>;
    <D.5172>:
    iftmp.1 = __builtin_strcmp (element_name, "configuration");
    <D.5209>:
    D.5052 = iftmp.1;
  }
  if (D.5052 == 0) goto <D.5210>; else goto <D.5211>;
  <D.5210>:
  D.5212 = app_config->configuration_count;
  D.5213 = D.5212 + -1;
  app_config->configuration_count = D.5213;
  goto <D.5214>;
  <D.5211>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.5218 = "startup";
      D.5219 = MEM[(const unsigned char *)D.5218];
      D.5220 = (int) D.5219;
      D.5221 = *__s2;
      D.5222 = (int) D.5221;
      __result = D.5220 - D.5222;
      {
        D.5223 = __s2_len != 0;
        D.5224 = __result == 0;
        D.5225 = D.5223 & D.5224;
        if (D.5225 != 0) goto <D.5226>; else goto <D.5227>;
        <D.5226>:
        D.5228 = &MEM[(void *)"startup" + 1B];
        D.5229 = *D.5228;
        D.5230 = (int) D.5229;
        D.5231 = __s2 + 1;
        D.5232 = *D.5231;
        D.5233 = (int) D.5232;
        __result = D.5230 - D.5233;
        D.5234 = __s2_len > 1;
        D.5224 = __result == 0;
        D.5235 = D.5234 & D.5224;
        if (D.5235 != 0) goto <D.5236>; else goto <D.5237>;
        <D.5236>:
        D.5238 = &MEM[(void *)"startup" + 2B];
        D.5239 = *D.5238;
        D.5240 = (int) D.5239;
        D.5241 = __s2 + 2;
        D.5242 = *D.5241;
        D.5243 = (int) D.5242;
        __result = D.5240 - D.5243;
        D.5244 = __s2_len > 2;
        D.5224 = __result == 0;
        D.5245 = D.5244 & D.5224;
        if (D.5245 != 0) goto <D.5246>; else goto <D.5247>;
        <D.5246>:
        D.5248 = &MEM[(void *)"startup" + 3B];
        D.5249 = *D.5248;
        D.5250 = (int) D.5249;
        D.5251 = __s2 + 3;
        D.5252 = *D.5251;
        D.5253 = (int) D.5252;
        __result = D.5250 - D.5253;
        <D.5247>:
        <D.5237>:
        <D.5227>:
      }
      D.5060 = __result;
    }
    iftmp.2 = -D.5060;
    goto <D.5254>;
    <D.5217>:
    iftmp.2 = __builtin_strcmp (element_name, "startup");
    <D.5254>:
    D.5061 = iftmp.2;
  }
  if (D.5061 == 0) goto <D.5255>; else goto <D.5256>;
  <D.5255>:
  D.5257 = app_config->startup_count;
  D.5258 = D.5257 + -1;
  app_config->startup_count = D.5258;
  <D.5256>:
  <D.5214>:
}


start_element (struct GMarkupParseContext * context, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values, void * user_data, struct GError * * error)
{
  int D.5008;
  int iftmp.3;
  int D.5007;
  char[14] * D.5262;
  unsigned char D.5263;
  int D.5264;
  unsigned char D.5265;
  int D.5266;
  _Bool D.5267;
  _Bool D.5268;
  _Bool D.5269;
  const unsigned char * D.5272;
  unsigned char D.5273;
  int D.5274;
  const unsigned char * D.5275;
  unsigned char D.5276;
  int D.5277;
  _Bool D.5278;
  _Bool D.5279;
  const unsigned char * D.5282;
  unsigned char D.5283;
  int D.5284;
  const unsigned char * D.5285;
  unsigned char D.5286;
  int D.5287;
  _Bool D.5288;
  _Bool D.5289;
  const unsigned char * D.5292;
  unsigned char D.5293;
  int D.5294;
  const unsigned char * D.5295;
  unsigned char D.5296;
  int D.5297;
  int D.5301;
  int D.5302;
  int D.5017;
  int iftmp.4;
  int D.5016;
  char[8] * D.5306;
  unsigned char D.5307;
  int D.5308;
  unsigned char D.5309;
  int D.5310;
  _Bool D.5311;
  _Bool D.5312;
  _Bool D.5313;
  const unsigned char * D.5316;
  unsigned char D.5317;
  int D.5318;
  const unsigned char * D.5319;
  unsigned char D.5320;
  int D.5321;
  _Bool D.5322;
  _Bool D.5323;
  const unsigned char * D.5326;
  unsigned char D.5327;
  int D.5328;
  const unsigned char * D.5329;
  unsigned char D.5330;
  int D.5331;
  _Bool D.5332;
  _Bool D.5333;
  const unsigned char * D.5336;
  unsigned char D.5337;
  int D.5338;
  const unsigned char * D.5339;
  unsigned char D.5340;
  int D.5341;
  int D.5345;
  int D.5346;
  signed long D.5347;
  long unsigned int D.5348;
  long unsigned int D.5349;
  int D.5026;
  int iftmp.5;
  int D.5025;
  char[16] * D.5355;
  unsigned char D.5356;
  int D.5357;
  unsigned char D.5358;
  int D.5359;
  _Bool D.5360;
  _Bool D.5361;
  _Bool D.5362;
  const unsigned char * D.5365;
  unsigned char D.5366;
  int D.5367;
  const unsigned char * D.5368;
  unsigned char D.5369;
  int D.5370;
  _Bool D.5371;
  _Bool D.5372;
  const unsigned char * D.5375;
  unsigned char D.5376;
  int D.5377;
  const unsigned char * D.5378;
  unsigned char D.5379;
  int D.5380;
  _Bool D.5381;
  _Bool D.5382;
  const unsigned char * D.5385;
  unsigned char D.5386;
  int D.5387;
  const unsigned char * D.5388;
  unsigned char D.5389;
  int D.5390;
  char * D.5394;
  int D.5035;
  int iftmp.6;
  int D.5034;
  char[17] * D.5399;
  unsigned char D.5400;
  int D.5401;
  unsigned char D.5402;
  int D.5403;
  _Bool D.5404;
  _Bool D.5405;
  _Bool D.5406;
  const unsigned char * D.5409;
  unsigned char D.5410;
  int D.5411;
  const unsigned char * D.5412;
  unsigned char D.5413;
  int D.5414;
  _Bool D.5415;
  _Bool D.5416;
  const unsigned char * D.5419;
  unsigned char D.5420;
  int D.5421;
  const unsigned char * D.5422;
  unsigned char D.5423;
  int D.5424;
  _Bool D.5425;
  _Bool D.5426;
  const unsigned char * D.5429;
  unsigned char D.5430;
  int D.5431;
  const unsigned char * D.5432;
  unsigned char D.5433;
  int D.5434;
  struct GSList * D.5438;
  struct GSList * D.5439;
  struct AppConfigInfo * app_config;

  app_config = user_data;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.5262 = "configuration";
      D.5263 = MEM[(const unsigned char *)D.5262];
      D.5264 = (int) D.5263;
      D.5265 = *__s2;
      D.5266 = (int) D.5265;
      __result = D.5264 - D.5266;
      {
        D.5267 = __s2_len != 0;
        D.5268 = __result == 0;
        D.5269 = D.5267 & D.5268;
        if (D.5269 != 0) goto <D.5270>; else goto <D.5271>;
        <D.5270>:
        D.5272 = &MEM[(void *)"configuration" + 1B];
        D.5273 = *D.5272;
        D.5274 = (int) D.5273;
        D.5275 = __s2 + 1;
        D.5276 = *D.5275;
        D.5277 = (int) D.5276;
        __result = D.5274 - D.5277;
        D.5278 = __s2_len > 1;
        D.5268 = __result == 0;
        D.5279 = D.5278 & D.5268;
        if (D.5279 != 0) goto <D.5280>; else goto <D.5281>;
        <D.5280>:
        D.5282 = &MEM[(void *)"configuration" + 2B];
        D.5283 = *D.5282;
        D.5284 = (int) D.5283;
        D.5285 = __s2 + 2;
        D.5286 = *D.5285;
        D.5287 = (int) D.5286;
        __result = D.5284 - D.5287;
        D.5288 = __s2_len > 2;
        D.5268 = __result == 0;
        D.5289 = D.5288 & D.5268;
        if (D.5289 != 0) goto <D.5290>; else goto <D.5291>;
        <D.5290>:
        D.5292 = &MEM[(void *)"configuration" + 3B];
        D.5293 = *D.5292;
        D.5294 = (int) D.5293;
        D.5295 = __s2 + 3;
        D.5296 = *D.5295;
        D.5297 = (int) D.5296;
        __result = D.5294 - D.5297;
        <D.5291>:
        <D.5281>:
        <D.5271>:
      }
      D.5007 = __result;
    }
    iftmp.3 = -D.5007;
    goto <D.5298>;
    <D.5261>:
    iftmp.3 = __builtin_strcmp (element_name, "configuration");
    <D.5298>:
    D.5008 = iftmp.3;
  }
  if (D.5008 == 0) goto <D.5299>; else goto <D.5300>;
  <D.5299>:
  D.5301 = app_config->configuration_count;
  D.5302 = D.5301 + 1;
  app_config->configuration_count = D.5302;
  return;
  <D.5300>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.5306 = "startup";
      D.5307 = MEM[(const unsigned char *)D.5306];
      D.5308 = (int) D.5307;
      D.5309 = *__s2;
      D.5310 = (int) D.5309;
      __result = D.5308 - D.5310;
      {
        D.5311 = __s2_len != 0;
        D.5312 = __result == 0;
        D.5313 = D.5311 & D.5312;
        if (D.5313 != 0) goto <D.5314>; else goto <D.5315>;
        <D.5314>:
        D.5316 = &MEM[(void *)"startup" + 1B];
        D.5317 = *D.5316;
        D.5318 = (int) D.5317;
        D.5319 = __s2 + 1;
        D.5320 = *D.5319;
        D.5321 = (int) D.5320;
        __result = D.5318 - D.5321;
        D.5322 = __s2_len > 1;
        D.5312 = __result == 0;
        D.5323 = D.5322 & D.5312;
        if (D.5323 != 0) goto <D.5324>; else goto <D.5325>;
        <D.5324>:
        D.5326 = &MEM[(void *)"startup" + 2B];
        D.5327 = *D.5326;
        D.5328 = (int) D.5327;
        D.5329 = __s2 + 2;
        D.5330 = *D.5329;
        D.5331 = (int) D.5330;
        __result = D.5328 - D.5331;
        D.5332 = __s2_len > 2;
        D.5312 = __result == 0;
        D.5333 = D.5332 & D.5312;
        if (D.5333 != 0) goto <D.5334>; else goto <D.5335>;
        <D.5334>:
        D.5336 = &MEM[(void *)"startup" + 3B];
        D.5337 = *D.5336;
        D.5338 = (int) D.5337;
        D.5339 = __s2 + 3;
        D.5340 = *D.5339;
        D.5341 = (int) D.5340;
        __result = D.5338 - D.5341;
        <D.5335>:
        <D.5325>:
        <D.5315>:
      }
      D.5016 = __result;
    }
    iftmp.4 = -D.5016;
    goto <D.5342>;
    <D.5305>:
    iftmp.4 = __builtin_strcmp (element_name, "startup");
    <D.5342>:
    D.5017 = iftmp.4;
  }
  if (D.5017 == 0) goto <D.5343>; else goto <D.5344>;
  <D.5343>:
  D.5345 = app_config->startup_count;
  D.5346 = D.5345 + 1;
  app_config->startup_count = D.5346;
  return;
  <D.5344>:
  D.5347 = BIT_FIELD_REF <*app_config, 64, 128>;
  D.5348 = (long unsigned int) D.5347;
  D.5349 = D.5348;
  if (D.5349 != 4294967297) goto <D.5350>; else goto <D.5351>;
  <D.5350>:
  return;
  <D.5351>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.5355 = "requiredRuntime";
      D.5356 = MEM[(const unsigned char *)D.5355];
      D.5357 = (int) D.5356;
      D.5358 = *__s2;
      D.5359 = (int) D.5358;
      __result = D.5357 - D.5359;
      {
        D.5360 = __s2_len != 0;
        D.5361 = __result == 0;
        D.5362 = D.5360 & D.5361;
        if (D.5362 != 0) goto <D.5363>; else goto <D.5364>;
        <D.5363>:
        D.5365 = &MEM[(void *)"requiredRuntime" + 1B];
        D.5366 = *D.5365;
        D.5367 = (int) D.5366;
        D.5368 = __s2 + 1;
        D.5369 = *D.5368;
        D.5370 = (int) D.5369;
        __result = D.5367 - D.5370;
        D.5371 = __s2_len > 1;
        D.5361 = __result == 0;
        D.5372 = D.5371 & D.5361;
        if (D.5372 != 0) goto <D.5373>; else goto <D.5374>;
        <D.5373>:
        D.5375 = &MEM[(void *)"requiredRuntime" + 2B];
        D.5376 = *D.5375;
        D.5377 = (int) D.5376;
        D.5378 = __s2 + 2;
        D.5379 = *D.5378;
        D.5380 = (int) D.5379;
        __result = D.5377 - D.5380;
        D.5381 = __s2_len > 2;
        D.5361 = __result == 0;
        D.5382 = D.5381 & D.5361;
        if (D.5382 != 0) goto <D.5383>; else goto <D.5384>;
        <D.5383>:
        D.5385 = &MEM[(void *)"requiredRuntime" + 3B];
        D.5386 = *D.5385;
        D.5387 = (int) D.5386;
        D.5388 = __s2 + 3;
        D.5389 = *D.5388;
        D.5390 = (int) D.5389;
        __result = D.5387 - D.5390;
        <D.5384>:
        <D.5374>:
        <D.5364>:
      }
      D.5025 = __result;
    }
    iftmp.5 = -D.5025;
    goto <D.5391>;
    <D.5354>:
    iftmp.5 = __builtin_strcmp (element_name, "requiredRuntime");
    <D.5391>:
    D.5026 = iftmp.5;
  }
  if (D.5026 == 0) goto <D.5392>; else goto <D.5393>;
  <D.5392>:
  D.5394 = get_attribute_value (attribute_names, attribute_values, "version");
  app_config->required_runtime = D.5394;
  goto <D.5395>;
  <D.5393>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.5399 = "supportedRuntime";
      D.5400 = MEM[(const unsigned char *)D.5399];
      D.5401 = (int) D.5400;
      D.5402 = *__s2;
      D.5403 = (int) D.5402;
      __result = D.5401 - D.5403;
      {
        D.5404 = __s2_len != 0;
        D.5405 = __result == 0;
        D.5406 = D.5404 & D.5405;
        if (D.5406 != 0) goto <D.5407>; else goto <D.5408>;
        <D.5407>:
        D.5409 = &MEM[(void *)"supportedRuntime" + 1B];
        D.5410 = *D.5409;
        D.5411 = (int) D.5410;
        D.5412 = __s2 + 1;
        D.5413 = *D.5412;
        D.5414 = (int) D.5413;
        __result = D.5411 - D.5414;
        D.5415 = __s2_len > 1;
        D.5405 = __result == 0;
        D.5416 = D.5415 & D.5405;
        if (D.5416 != 0) goto <D.5417>; else goto <D.5418>;
        <D.5417>:
        D.5419 = &MEM[(void *)"supportedRuntime" + 2B];
        D.5420 = *D.5419;
        D.5421 = (int) D.5420;
        D.5422 = __s2 + 2;
        D.5423 = *D.5422;
        D.5424 = (int) D.5423;
        __result = D.5421 - D.5424;
        D.5425 = __s2_len > 2;
        D.5405 = __result == 0;
        D.5426 = D.5425 & D.5405;
        if (D.5426 != 0) goto <D.5427>; else goto <D.5428>;
        <D.5427>:
        D.5429 = &MEM[(void *)"supportedRuntime" + 3B];
        D.5430 = *D.5429;
        D.5431 = (int) D.5430;
        D.5432 = __s2 + 3;
        D.5433 = *D.5432;
        D.5434 = (int) D.5433;
        __result = D.5431 - D.5434;
        <D.5428>:
        <D.5418>:
        <D.5408>:
      }
      D.5034 = __result;
    }
    iftmp.6 = -D.5034;
    goto <D.5435>;
    <D.5398>:
    iftmp.6 = __builtin_strcmp (element_name, "supportedRuntime");
    <D.5435>:
    D.5035 = iftmp.6;
  }
  if (D.5035 == 0) goto <D.5436>; else goto <D.5437>;
  <D.5436>:
  {
    char * version;

    version = get_attribute_value (attribute_names, attribute_values, "version");
    D.5438 = app_config->supported_runtimes;
    D.5439 = monoeg_g_slist_append (D.5438, version);
    app_config->supported_runtimes = D.5439;
  }
  <D.5437>:
  <D.5395>:
}


get_attribute_value (const gchar * * attribute_names, const gchar * * attribute_values, const char * att_name)
{
  int D.4987;
  long unsigned int D.5441;
  long unsigned int D.5442;
  const gchar * * D.5443;
  const gchar * D.5444;
  char * D.5447;
  const gchar * * D.5448;
  const gchar * D.5449;
  int n;

  n = 0;
  goto <D.4989>;
  <D.4988>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.5441 = (long unsigned int) n;
    D.5442 = D.5441 * 8;
    D.5443 = attribute_names + D.5442;
    D.5444 = *D.5443;
    D.4987 = __builtin_strcmp (D.5444, att_name);
  }
  if (D.4987 == 0) goto <D.5445>; else goto <D.5446>;
  <D.5445>:
  D.5441 = (long unsigned int) n;
  D.5442 = D.5441 * 8;
  D.5448 = attribute_values + D.5442;
  D.5449 = *D.5448;
  D.5447 = monoeg_strdup (D.5449);
  return D.5447;
  <D.5446>:
  n = n + 1;
  <D.4989>:
  D.5441 = (long unsigned int) n;
  D.5442 = D.5441 * 8;
  D.5443 = attribute_names + D.5442;
  D.5444 = *D.5443;
  if (D.5444 != 0B) goto <D.4988>; else goto <D.4990>;
  <D.4990>:
  D.5447 = 0B;
  return D.5447;
}


domain_free (struct AppConfigInfo * info)
{
  char * D.5451;
  void * D.5454;
  struct GSList * D.5455;
  struct GSList * l;

  D.5451 = info->required_runtime;
  if (D.5451 != 0B) goto <D.5452>; else goto <D.5453>;
  <D.5452>:
  D.5451 = info->required_runtime;
  monoeg_g_free (D.5451);
  <D.5453>:
  l = info->supported_runtimes;
  goto <D.5073>;
  <D.5072>:
  D.5454 = l->data;
  monoeg_g_free (D.5454);
  l = l->next;
  <D.5073>:
  if (l != 0B) goto <D.5072>; else goto <D.5074>;
  <D.5074>:
  D.5455 = info->supported_runtimes;
  monoeg_g_slist_free (D.5455);
  monoeg_g_free (info);
}


mono_domain ()
{
  char * D.5456;
  gchar * D.5459;
  int D.5087;
  int iftmp.7;
  int D.5086;
  char[3] * D.5463;
  unsigned char D.5464;
  int D.5465;
  unsigned char D.5466;
  int D.5467;
  _Bool D.5468;
  _Bool D.5469;
  _Bool D.5470;
  const unsigned char * D.5473;
  unsigned char D.5474;
  int D.5475;
  const unsigned char * D.5476;
  unsigned char D.5477;
  int D.5478;
  _Bool D.5479;
  _Bool D.5480;
  const unsigned char * D.5483;
  unsigned char D.5484;
  int D.5485;
  const unsigned char * D.5486;
  unsigned char D.5487;
  int D.5488;
  _Bool D.5489;
  _Bool D.5490;
  const unsigned char * D.5493;
  unsigned char D.5494;
  int D.5495;
  const unsigned char * D.5496;
  unsigned char D.5497;
  int D.5498;
  int D.5096;
  int iftmp.8;
  int D.5095;
  unsigned char D.5507;
  int D.5508;
  _Bool D.5509;
  _Bool D.5510;
  _Bool D.5511;
  const unsigned char * D.5514;
  unsigned char D.5515;
  int D.5516;
  _Bool D.5517;
  _Bool D.5518;
  const unsigned char * D.5521;
  unsigned char D.5522;
  int D.5523;
  _Bool D.5524;
  _Bool D.5525;
  const unsigned char * D.5528;
  unsigned char D.5529;
  int D.5530;
  int D.5105;
  int iftmp.9;
  int D.5104;
  struct GSList * D.5537;
  unsigned char D.5538;
  int D.5539;
  _Bool D.5540;
  _Bool D.5541;
  _Bool D.5542;
  const unsigned char * D.5545;
  unsigned char D.5546;
  int D.5547;
  _Bool D.5548;
  _Bool D.5549;
  const unsigned char * D.5552;
  unsigned char D.5553;
  int D.5554;
  _Bool D.5555;
  _Bool D.5556;
  const unsigned char * D.5559;
  unsigned char D.5560;
  int D.5561;
  void * D.5563;
  struct GSList * D.5566;
  int D.5114;
  int iftmp.10;
  int D.5113;
  char[3] * D.5572;
  unsigned char D.5573;
  int D.5574;
  unsigned char D.5575;
  int D.5576;
  _Bool D.5577;
  _Bool D.5578;
  _Bool D.5579;
  const unsigned char * D.5582;
  unsigned char D.5583;
  int D.5584;
  const unsigned char * D.5585;
  unsigned char D.5586;
  int D.5587;
  _Bool D.5588;
  _Bool D.5589;
  const unsigned char * D.5592;
  unsigned char D.5593;
  int D.5594;
  const unsigned char * D.5595;
  unsigned char D.5596;
  int D.5597;
  _Bool D.5598;
  _Bool D.5599;
  const unsigned char * D.5602;
  unsigned char D.5603;
  int D.5604;
  const unsigned char * D.5605;
  unsigned char D.5606;
  int D.5607;
  void * D.5609;
  struct GSList * D.5612;
  struct AppConfigInfo * info;

  info = domain_test ("<configuration><!--hello--><startup><!--world--><requiredRuntime version=\"v1\"><!--r--></requiredRuntime></startup></configuration>");
  D.5456 = info->required_runtime;
  if (D.5456 == 0B) goto <D.5457>; else goto <D.5458>;
  <D.5457>:
  D.5459 = FAILED ("No required runtime section");
  return D.5459;
  <D.5458>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = info->required_runtime;
      D.5463 = "v1";
      D.5464 = MEM[(const unsigned char *)D.5463];
      D.5465 = (int) D.5464;
      D.5466 = *__s2;
      D.5467 = (int) D.5466;
      __result = D.5465 - D.5467;
      {
        D.5468 = __s2_len != 0;
        D.5469 = __result == 0;
        D.5470 = D.5468 & D.5469;
        if (D.5470 != 0) goto <D.5471>; else goto <D.5472>;
        <D.5471>:
        D.5473 = &MEM[(void *)"v1" + 1B];
        D.5474 = *D.5473;
        D.5475 = (int) D.5474;
        D.5476 = __s2 + 1;
        D.5477 = *D.5476;
        D.5478 = (int) D.5477;
        __result = D.5475 - D.5478;
        D.5479 = __s2_len > 1;
        D.5469 = __result == 0;
        D.5480 = D.5479 & D.5469;
        if (D.5480 != 0) goto <D.5481>; else goto <D.5482>;
        <D.5481>:
        D.5483 = &MEM[(void *)"v1" + 2B];
        D.5484 = *D.5483;
        D.5485 = (int) D.5484;
        D.5486 = __s2 + 2;
        D.5487 = *D.5486;
        D.5488 = (int) D.5487;
        __result = D.5485 - D.5488;
        D.5489 = __s2_len > 2;
        D.5469 = __result == 0;
        D.5490 = D.5489 & D.5469;
        if (D.5490 != 0) goto <D.5491>; else goto <D.5492>;
        <D.5491>:
        D.5493 = &MEM[(void *)"v1" + 3B];
        D.5494 = *D.5493;
        D.5495 = (int) D.5494;
        D.5496 = __s2 + 3;
        D.5497 = *D.5496;
        D.5498 = (int) D.5497;
        __result = D.5495 - D.5498;
        <D.5492>:
        <D.5482>:
        <D.5472>:
      }
      D.5086 = __result;
    }
    iftmp.7 = -D.5086;
    goto <D.5499>;
    <D.5462>:
    D.5456 = info->required_runtime;
    iftmp.7 = __builtin_strcmp (D.5456, "v1");
    <D.5499>:
    D.5087 = iftmp.7;
  }
  if (D.5087 != 0) goto <D.5500>; else goto <D.5501>;
  <D.5500>:
  D.5456 = info->required_runtime;
  D.5459 = FAILED ("Got a runtime version %s, expected v1", D.5456);
  return D.5459;
  <D.5501>:
  domain_free (info);
  info = domain_test ("<configuration><startup><requiredRuntime version=\"v1\"/><!--comment--></configuration><!--end-->");
  D.5456 = info->required_runtime;
  if (D.5456 == 0B) goto <D.5502>; else goto <D.5503>;
  <D.5502>:
  D.5459 = FAILED ("No required runtime section on auto-close section");
  return D.5459;
  <D.5503>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = info->required_runtime;
      D.5463 = "v1";
      D.5464 = MEM[(const unsigned char *)D.5463];
      D.5465 = (int) D.5464;
      D.5507 = *__s2;
      D.5508 = (int) D.5507;
      __result = D.5465 - D.5508;
      {
        D.5509 = __s2_len != 0;
        D.5510 = __result == 0;
        D.5511 = D.5509 & D.5510;
        if (D.5511 != 0) goto <D.5512>; else goto <D.5513>;
        <D.5512>:
        D.5473 = &MEM[(void *)"v1" + 1B];
        D.5474 = *D.5473;
        D.5475 = (int) D.5474;
        D.5514 = __s2 + 1;
        D.5515 = *D.5514;
        D.5516 = (int) D.5515;
        __result = D.5475 - D.5516;
        D.5517 = __s2_len > 1;
        D.5510 = __result == 0;
        D.5518 = D.5517 & D.5510;
        if (D.5518 != 0) goto <D.5519>; else goto <D.5520>;
        <D.5519>:
        D.5483 = &MEM[(void *)"v1" + 2B];
        D.5484 = *D.5483;
        D.5485 = (int) D.5484;
        D.5521 = __s2 + 2;
        D.5522 = *D.5521;
        D.5523 = (int) D.5522;
        __result = D.5485 - D.5523;
        D.5524 = __s2_len > 2;
        D.5510 = __result == 0;
        D.5525 = D.5524 & D.5510;
        if (D.5525 != 0) goto <D.5526>; else goto <D.5527>;
        <D.5526>:
        D.5493 = &MEM[(void *)"v1" + 3B];
        D.5494 = *D.5493;
        D.5495 = (int) D.5494;
        D.5528 = __s2 + 3;
        D.5529 = *D.5528;
        D.5530 = (int) D.5529;
        __result = D.5495 - D.5530;
        <D.5527>:
        <D.5520>:
        <D.5513>:
      }
      D.5095 = __result;
    }
    iftmp.8 = -D.5095;
    goto <D.5531>;
    <D.5506>:
    D.5456 = info->required_runtime;
    iftmp.8 = __builtin_strcmp (D.5456, "v1");
    <D.5531>:
    D.5096 = iftmp.8;
  }
  if (D.5096 != 0) goto <D.5532>; else goto <D.5533>;
  <D.5532>:
  D.5456 = info->required_runtime;
  D.5459 = FAILED ("Got a runtime version %s, expected v1", D.5456);
  return D.5459;
  <D.5533>:
  domain_free (info);
  info = domain_test ("<!--start--><configuration><startup><supportedRuntime version=\"v1\"/><!--middle--><supportedRuntime version=\"v2\"/></startup></configuration>");
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.5537 = info->supported_runtimes;
      __s2 = D.5537->data;
      D.5463 = "v1";
      D.5464 = MEM[(const unsigned char *)D.5463];
      D.5465 = (int) D.5464;
      D.5538 = *__s2;
      D.5539 = (int) D.5538;
      __result = D.5465 - D.5539;
      {
        D.5540 = __s2_len != 0;
        D.5541 = __result == 0;
        D.5542 = D.5540 & D.5541;
        if (D.5542 != 0) goto <D.5543>; else goto <D.5544>;
        <D.5543>:
        D.5473 = &MEM[(void *)"v1" + 1B];
        D.5474 = *D.5473;
        D.5475 = (int) D.5474;
        D.5545 = __s2 + 1;
        D.5546 = *D.5545;
        D.5547 = (int) D.5546;
        __result = D.5475 - D.5547;
        D.5548 = __s2_len > 1;
        D.5541 = __result == 0;
        D.5549 = D.5548 & D.5541;
        if (D.5549 != 0) goto <D.5550>; else goto <D.5551>;
        <D.5550>:
        D.5483 = &MEM[(void *)"v1" + 2B];
        D.5484 = *D.5483;
        D.5485 = (int) D.5484;
        D.5552 = __s2 + 2;
        D.5553 = *D.5552;
        D.5554 = (int) D.5553;
        __result = D.5485 - D.5554;
        D.5555 = __s2_len > 2;
        D.5541 = __result == 0;
        D.5556 = D.5555 & D.5541;
        if (D.5556 != 0) goto <D.5557>; else goto <D.5558>;
        <D.5557>:
        D.5493 = &MEM[(void *)"v1" + 3B];
        D.5494 = *D.5493;
        D.5495 = (int) D.5494;
        D.5559 = __s2 + 3;
        D.5560 = *D.5559;
        D.5561 = (int) D.5560;
        __result = D.5495 - D.5561;
        <D.5558>:
        <D.5551>:
        <D.5544>:
      }
      D.5104 = __result;
    }
    iftmp.9 = -D.5104;
    goto <D.5562>;
    <D.5536>:
    D.5537 = info->supported_runtimes;
    D.5563 = D.5537->data;
    iftmp.9 = __builtin_strcmp (D.5563, "v1");
    <D.5562>:
    D.5105 = iftmp.9;
  }
  if (D.5105 == 0) goto <D.5564>; else goto <D.5565>;
  <D.5564>:
  D.5537 = info->supported_runtimes;
  D.5566 = D.5537->next;
  if (D.5566 == 0B) goto <D.5567>; else goto <D.5568>;
  <D.5567>:
  D.5459 = FAILED ("Expected 2 supported runtimes");
  return D.5459;
  <D.5568>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.5537 = info->supported_runtimes;
      D.5566 = D.5537->next;
      __s2 = D.5566->data;
      D.5572 = "v2";
      D.5573 = MEM[(const unsigned char *)D.5572];
      D.5574 = (int) D.5573;
      D.5575 = *__s2;
      D.5576 = (int) D.5575;
      __result = D.5574 - D.5576;
      {
        D.5577 = __s2_len != 0;
        D.5578 = __result == 0;
        D.5579 = D.5577 & D.5578;
        if (D.5579 != 0) goto <D.5580>; else goto <D.5581>;
        <D.5580>:
        D.5582 = &MEM[(void *)"v2" + 1B];
        D.5583 = *D.5582;
        D.5584 = (int) D.5583;
        D.5585 = __s2 + 1;
        D.5586 = *D.5585;
        D.5587 = (int) D.5586;
        __result = D.5584 - D.5587;
        D.5588 = __s2_len > 1;
        D.5578 = __result == 0;
        D.5589 = D.5588 & D.5578;
        if (D.5589 != 0) goto <D.5590>; else goto <D.5591>;
        <D.5590>:
        D.5592 = &MEM[(void *)"v2" + 2B];
        D.5593 = *D.5592;
        D.5594 = (int) D.5593;
        D.5595 = __s2 + 2;
        D.5596 = *D.5595;
        D.5597 = (int) D.5596;
        __result = D.5594 - D.5597;
        D.5598 = __s2_len > 2;
        D.5578 = __result == 0;
        D.5599 = D.5598 & D.5578;
        if (D.5599 != 0) goto <D.5600>; else goto <D.5601>;
        <D.5600>:
        D.5602 = &MEM[(void *)"v2" + 3B];
        D.5603 = *D.5602;
        D.5604 = (int) D.5603;
        D.5605 = __s2 + 3;
        D.5606 = *D.5605;
        D.5607 = (int) D.5606;
        __result = D.5604 - D.5607;
        <D.5601>:
        <D.5591>:
        <D.5581>:
      }
      D.5113 = __result;
    }
    iftmp.10 = -D.5113;
    goto <D.5608>;
    <D.5571>:
    D.5537 = info->supported_runtimes;
    D.5566 = D.5537->next;
    D.5609 = D.5566->data;
    iftmp.10 = __builtin_strcmp (D.5609, "v2");
    <D.5608>:
    D.5114 = iftmp.10;
  }
  if (D.5114 != 0) goto <D.5610>; else goto <D.5611>;
  <D.5610>:
  D.5537 = info->supported_runtimes;
  D.5566 = D.5537->next;
  D.5609 = D.5566->data;
  D.5459 = FAILED ("Expected v1, v2, got %s", D.5609);
  return D.5459;
  <D.5611>:
  D.5537 = info->supported_runtimes;
  D.5566 = D.5537->next;
  D.5612 = D.5566->next;
  if (D.5612 != 0B) goto <D.5613>; else goto <D.5614>;
  <D.5613>:
  D.5459 = FAILED ("Expected v1, v2, got more");
  return D.5459;
  <D.5614>:
  goto <D.5615>;
  <D.5565>:
  D.5537 = info->supported_runtimes;
  D.5563 = D.5537->data;
  D.5459 = FAILED ("Expected `v1\', got %s", D.5563);
  return D.5459;
  <D.5615>:
  domain_free (info);
  D.5459 = 0B;
  return D.5459;
}


mcs_config ()
{
  gchar * D.5617;

  D.5617 = markup_test ("<configuration>\r\n  <system.diagnostics>\r\n    <trace autoflush=\"true\" indentsize=\"4\">\r\n      <listeners>\r\n        <add name=\"compilerLogListener\" type=\"System.Diagnostics.TextWriterTraceListener,System\"/>      </listeners>    </trace>   </system.diagnostics> </configuration>");
  return D.5617;
}


xml_parse ()
{
  gchar * D.5619;

  D.5619 = markup_test ("<?xml version=\"1.0\" encoding=\"utf-8\"?><a></a>");
  return D.5619;
}


machine_config ()
{
  int D.5621;
  gchar * D.5624;
  char * data.11;
  char * data;
  gsize size;

  try
    {
      D.5621 = monoeg_g_file_get_contents ("../../data/net_1_1/machine.config", &data, &size, 0B);
      if (D.5621 != 0) goto <D.5622>; else goto <D.5623>;
      <D.5622>:
      data.11 = data;
      D.5624 = markup_test (data.11);
      return D.5624;
      <D.5623>:
      printf ("Ignoring this test\n");
      D.5624 = 0B;
      return D.5624;
    }
  finally
    {
      data = {CLOBBER};
      size = {CLOBBER};
    }
}


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

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


markup_tests_init ()
{
  struct Test * D.5630;

  D.5630 = &markup_tests;
  return D.5630;
}


