#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct tint_array_wrapper {
  int arr[10];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
  int k = 0;
  int i = 0;
  int j = 0;
  int i_1 = 0;
  int const x_262 = *(from);
  k = x_262;
  int const x_263 = *(from);
  i = x_263;
  int const x_264 = *(mid);
  j = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
  while (true) {
    int const x_270 = i;
    int const x_271 = *(mid);
    int const x_273 = j;
    int const x_274 = *(to);
    if (((x_270 <= x_271) & (x_273 <= x_274))) {
    } else {
      break;
    }
    int const x_278 = i;
    int const x_280 = (*(tint_symbol_5)).arr[x_278];
    int const x_281 = j;
    int const x_283 = (*(tint_symbol_5)).arr[x_281];
    if ((x_280 < x_283)) {
      int const x_288 = k;
      k = as_type<int>((as_type<uint>(x_288) + as_type<uint>(1)));
      int const x_290 = i;
      i = as_type<int>((as_type<uint>(x_290) + as_type<uint>(1)));
      int const x_293 = (*(tint_symbol_5)).arr[x_290];
      (*(tint_symbol_6)).arr[x_288] = x_293;
    } else {
      int const x_295 = k;
      k = as_type<int>((as_type<uint>(x_295) + as_type<uint>(1)));
      int const x_297 = j;
      j = as_type<int>((as_type<uint>(x_297) + as_type<uint>(1)));
      int const x_300 = (*(tint_symbol_5)).arr[x_297];
      (*(tint_symbol_6)).arr[x_295] = x_300;
    }
  }
  while (true) {
    int const x_306 = i;
    int const x_308 = i;
    int const x_309 = *(mid);
    if (((x_306 < 10) & (x_308 <= x_309))) {
    } else {
      break;
    }
    int const x_313 = k;
    k = as_type<int>((as_type<uint>(x_313) + as_type<uint>(1)));
    int const x_315 = i;
    i = as_type<int>((as_type<uint>(x_315) + as_type<uint>(1)));
    int const x_318 = (*(tint_symbol_5)).arr[x_315];
    (*(tint_symbol_6)).arr[x_313] = x_318;
  }
  int const x_320 = *(from);
  i_1 = x_320;
  while (true) {
    int const x_325 = i_1;
    int const x_326 = *(to);
    if ((x_325 <= x_326)) {
    } else {
      break;
    }
    int const x_329 = i_1;
    int const x_330 = i_1;
    int const x_332 = (*(tint_symbol_6)).arr[x_330];
    (*(tint_symbol_5)).arr[x_329] = x_332;
    {
      int const x_334 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_334) + as_type<uint>(1)));
    }
  }
  return;
}

void mergeSort_(thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8) {
  int low = 0;
  int high = 0;
  int m = 0;
  int i_2 = 0;
  int from_1 = 0;
  int mid_1 = 0;
  int to_1 = 0;
  int param = 0;
  int param_1 = 0;
  int param_2 = 0;
  low = 0;
  high = 9;
  m = 1;
  while (true) {
    int const x_341 = m;
    int const x_342 = high;
    if ((x_341 <= x_342)) {
    } else {
      break;
    }
    int const x_345 = low;
    i_2 = x_345;
    while (true) {
      int const x_350 = i_2;
      int const x_351 = high;
      if ((x_350 < x_351)) {
      } else {
        break;
      }
      int const x_354 = i_2;
      from_1 = x_354;
      int const x_355 = i_2;
      int const x_356 = m;
      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_355) + as_type<uint>(x_356)))) - as_type<uint>(1)));
      int const x_359 = i_2;
      int const x_360 = m;
      int const x_364 = high;
      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_359) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_360))))))) - as_type<uint>(1))), x_364);
      int const x_366 = from_1;
      param = x_366;
      int const x_367 = mid_1;
      param_1 = x_367;
      int const x_368 = to_1;
      param_2 = x_368;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_7, tint_symbol_8);
      {
        int const x_370 = m;
        int const x_372 = i_2;
        i_2 = as_type<int>((as_type<uint>(x_372) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_370))))));
      }
    }
    {
      int const x_374 = m;
      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_374)));
    }
  }
  return;
}

void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
  int i_3 = 0;
  int j_1 = 0;
  float grey = 0.0f;
  float const x_86 = x_28.injectionSwitch.x;
  i_3 = int(x_86);
  while (true) {
    int const x_92 = i_3;
    switch(x_92) {
      case 9: {
        int const x_122 = i_3;
        (*(tint_symbol_9)).arr[x_122] = -5;
        break;
      }
      case 8: {
        int const x_120 = i_3;
        (*(tint_symbol_9)).arr[x_120] = -4;
        break;
      }
      case 7: {
        int const x_118 = i_3;
        (*(tint_symbol_9)).arr[x_118] = -3;
        break;
      }
      case 6: {
        int const x_116 = i_3;
        (*(tint_symbol_9)).arr[x_116] = -2;
        break;
      }
      case 5: {
        int const x_114 = i_3;
        (*(tint_symbol_9)).arr[x_114] = -1;
        break;
      }
      case 4: {
        int const x_112 = i_3;
        (*(tint_symbol_9)).arr[x_112] = 0;
        break;
      }
      case 3: {
        int const x_110 = i_3;
        (*(tint_symbol_9)).arr[x_110] = 1;
        break;
      }
      case 2: {
        int const x_108 = i_3;
        (*(tint_symbol_9)).arr[x_108] = 2;
        break;
      }
      case 1: {
        int const x_106 = i_3;
        (*(tint_symbol_9)).arr[x_106] = 3;
        break;
      }
      case 0: {
        int const x_104 = i_3;
        (*(tint_symbol_9)).arr[x_104] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_124 = i_3;
    i_3 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
    {
      int const x_126 = i_3;
      if ((x_126 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_132 = j_1;
    bool const x_133 = (x_132 < 10);
    float const x_135 = x_28.injectionSwitch.x;
    if (!((x_135 <= 1.0f))) {
      grey = 1.0f;
    }
    if (x_133) {
    } else {
      break;
    }
    int const x_140 = j_1;
    int const x_141 = j_1;
    int const x_143 = (*(tint_symbol_9)).arr[x_141];
    (*(tint_symbol_10)).arr[x_140] = x_143;
    {
      int const x_145 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_145) + as_type<uint>(1)));
    }
  }
  mergeSort_(tint_symbol_9, tint_symbol_10);
  float const x_149 = (*(tint_symbol_11)).y;
  if ((int(x_149) < 30)) {
    int const x_156 = (*(tint_symbol_9)).arr[0];
    grey = (0.5f + (float(x_156) / 10.0f));
  } else {
    float const x_161 = (*(tint_symbol_11)).y;
    if ((int(x_161) < 60)) {
      int const x_168 = (*(tint_symbol_9)).arr[1];
      grey = (0.5f + (float(x_168) / 10.0f));
    } else {
      float const x_173 = (*(tint_symbol_11)).y;
      if ((int(x_173) < 90)) {
        int const x_180 = (*(tint_symbol_9)).arr[2];
        grey = (0.5f + (float(x_180) / 10.0f));
      } else {
        float const x_185 = (*(tint_symbol_11)).y;
        if ((int(x_185) < 120)) {
          int const x_192 = (*(tint_symbol_9)).arr[3];
          grey = (0.5f + (float(x_192) / 10.0f));
        } else {
          float const x_197 = (*(tint_symbol_11)).y;
          if ((int(x_197) < 150)) {
            discard_fragment();
          } else {
            float const x_204 = (*(tint_symbol_11)).y;
            if ((int(x_204) < 180)) {
              int const x_211 = (*(tint_symbol_9)).arr[5];
              grey = (0.5f + (float(x_211) / 10.0f));
            } else {
              float const x_216 = (*(tint_symbol_11)).y;
              if ((int(x_216) < 210)) {
                int const x_223 = (*(tint_symbol_9)).arr[6];
                grey = (0.5f + (float(x_223) / 10.0f));
              } else {
                float const x_228 = (*(tint_symbol_11)).y;
                if ((int(x_228) < 240)) {
                  int const x_235 = (*(tint_symbol_9)).arr[7];
                  grey = (0.5f + (float(x_235) / 10.0f));
                } else {
                  float const x_240 = (*(tint_symbol_11)).y;
                  bool guard233 = true;
                  if ((int(x_240) < 270)) {
                    int const x_247 = (*(tint_symbol_9)).arr[8];
                    grey = (0.5f + (float(x_247) / 10.0f));
                    guard233 = false;
                  } else {
                    if (guard233) {
                      float const x_252 = x_28.injectionSwitch.y;
                      if (!((0.0f < x_252))) {
                        guard233 = false;
                      }
                      if (guard233) {
                        discard_fragment();
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_255 = grey;
  float3 const x_256 = float3(x_255, x_255, x_255);
  *(tint_symbol_12) = float4(x_256.x, x_256.y, x_256.z, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
  thread float4 tint_symbol_13 = 0.0f;
  thread tint_array_wrapper tint_symbol_14 = {};
  thread tint_array_wrapper tint_symbol_15 = {};
  thread float4 tint_symbol_16 = 0.0f;
  tint_symbol_13 = gl_FragCoord_param;
  main_1(x_28, &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_13), &(tint_symbol_16));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_16};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

