#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct buf1 {
  /* 0x0000 */ packed_float2 resolution;
};
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_255 = *(from);
  k = x_255;
  int const x_256 = *(from);
  i = x_256;
  int const x_257 = *(mid);
  j = as_type<int>((as_type<uint>(x_257) + as_type<uint>(1)));
  while (true) {
    int const x_263 = i;
    int const x_264 = *(mid);
    int const x_266 = j;
    int const x_267 = *(to);
    if (((x_263 <= x_264) & (x_266 <= x_267))) {
    } else {
      break;
    }
    int const x_271 = i;
    int const x_273 = (*(tint_symbol_5)).arr[x_271];
    int const x_274 = j;
    int const x_276 = (*(tint_symbol_5)).arr[x_274];
    if ((x_273 < x_276)) {
      int const x_281 = k;
      k = as_type<int>((as_type<uint>(x_281) + as_type<uint>(1)));
      int const x_283 = i;
      i = as_type<int>((as_type<uint>(x_283) + as_type<uint>(1)));
      int const x_286 = (*(tint_symbol_5)).arr[x_283];
      (*(tint_symbol_6)).arr[x_281] = x_286;
    } else {
      int const x_288 = k;
      k = as_type<int>((as_type<uint>(x_288) + as_type<uint>(1)));
      int const x_290 = j;
      j = 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;
    }
  }
  while (true) {
    int const x_299 = i;
    int const x_301 = i;
    int const x_302 = *(mid);
    if (((x_299 < 10) & (x_301 <= x_302))) {
    } else {
      break;
    }
    int const x_306 = k;
    k = as_type<int>((as_type<uint>(x_306) + as_type<uint>(1)));
    int const x_308 = i;
    i = as_type<int>((as_type<uint>(x_308) + as_type<uint>(1)));
    int const x_311 = (*(tint_symbol_5)).arr[x_308];
    (*(tint_symbol_6)).arr[x_306] = x_311;
  }
  int const x_313 = *(from);
  i_1 = x_313;
  while (true) {
    int const x_318 = i_1;
    int const x_319 = *(to);
    if ((x_318 <= x_319)) {
    } else {
      break;
    }
    int const x_322 = i_1;
    int const x_323 = i_1;
    int const x_325 = (*(tint_symbol_6)).arr[x_323];
    (*(tint_symbol_5)).arr[x_322] = x_325;
    {
      int const x_327 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_327) + 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_334 = m;
    int const x_335 = high;
    if ((x_334 <= x_335)) {
    } else {
      break;
    }
    int const x_338 = low;
    i_2 = x_338;
    while (true) {
      int const x_343 = i_2;
      int const x_344 = high;
      if ((x_343 < x_344)) {
      } else {
        break;
      }
      int const x_347 = i_2;
      from_1 = x_347;
      int const x_348 = i_2;
      int const x_349 = m;
      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_348) + as_type<uint>(x_349)))) - as_type<uint>(1)));
      int const x_352 = i_2;
      int const x_353 = m;
      int const x_357 = high;
      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_352) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_353))))))) - as_type<uint>(1))), x_357);
      int const x_359 = from_1;
      param = x_359;
      int const x_360 = mid_1;
      param_1 = x_360;
      int const x_361 = to_1;
      param_2 = x_361;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_7, tint_symbol_8);
      {
        int const x_363 = m;
        int const x_365 = i_2;
        i_2 = as_type<int>((as_type<uint>(x_365) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_363))))));
      }
    }
    {
      int const x_367 = m;
      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_367)));
    }
  }
  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_88 = x_28.injectionSwitch.x;
  i_3 = int(x_88);
  while (true) {
    int const x_94 = i_3;
    switch(x_94) {
      case 9: {
        int const x_124 = i_3;
        (*(tint_symbol_9)).arr[x_124] = -5;
        if (true) {
        } else {
          {
            int const x_128 = i_3;
            if ((x_128 < 10)) {
            } else {
              break;
            }
          }
          continue;
        }
        break;
      }
      case 8: {
        int const x_122 = i_3;
        (*(tint_symbol_9)).arr[x_122] = -4;
        break;
      }
      case 7: {
        int const x_120 = i_3;
        (*(tint_symbol_9)).arr[x_120] = -3;
        break;
      }
      case 6: {
        int const x_118 = i_3;
        (*(tint_symbol_9)).arr[x_118] = -2;
        break;
      }
      case 5: {
        int const x_116 = i_3;
        (*(tint_symbol_9)).arr[x_116] = -1;
        break;
      }
      case 4: {
        int const x_114 = i_3;
        (*(tint_symbol_9)).arr[x_114] = 0;
        break;
      }
      case 3: {
        int const x_112 = i_3;
        (*(tint_symbol_9)).arr[x_112] = 1;
        break;
      }
      case 2: {
        int const x_110 = i_3;
        (*(tint_symbol_9)).arr[x_110] = 2;
        break;
      }
      case 1: {
        int const x_108 = i_3;
        (*(tint_symbol_9)).arr[x_108] = 3;
        break;
      }
      case 0: {
        int const x_106 = i_3;
        (*(tint_symbol_9)).arr[x_106] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_126 = i_3;
    i_3 = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
    {
      int const x_128 = i_3;
      if ((x_128 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_134 = j_1;
    if ((x_134 < 10)) {
    } else {
      break;
    }
    int const x_137 = j_1;
    int const x_138 = j_1;
    int const x_140 = (*(tint_symbol_9)).arr[x_138];
    (*(tint_symbol_10)).arr[x_137] = x_140;
    {
      int const x_142 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_142) + as_type<uint>(1)));
    }
  }
  mergeSort_(tint_symbol_9, tint_symbol_10);
  float const x_146 = (*(tint_symbol_11)).y;
  if ((int(x_146) < 30)) {
    int const x_153 = (*(tint_symbol_9)).arr[0];
    grey = (0.5f + (float(x_153) / 10.0f));
  } else {
    float const x_158 = (*(tint_symbol_11)).y;
    if ((int(x_158) < 60)) {
      int const x_165 = (*(tint_symbol_9)).arr[1];
      grey = (0.5f + (float(x_165) / 10.0f));
    } else {
      float const x_170 = (*(tint_symbol_11)).y;
      if ((int(x_170) < 90)) {
        int const x_177 = (*(tint_symbol_9)).arr[2];
        grey = (0.5f + (float(x_177) / 10.0f));
      } else {
        float const x_182 = (*(tint_symbol_11)).y;
        if ((int(x_182) < 120)) {
          int const x_189 = (*(tint_symbol_9)).arr[3];
          grey = (0.5f + (float(x_189) / 10.0f));
        } else {
          float const x_194 = (*(tint_symbol_11)).y;
          if ((int(x_194) < 150)) {
            discard_fragment();
          } else {
            float const x_201 = (*(tint_symbol_11)).y;
            if ((int(x_201) < 180)) {
              int const x_208 = (*(tint_symbol_9)).arr[5];
              grey = (0.5f + (float(x_208) / 10.0f));
            } else {
              float const x_213 = (*(tint_symbol_11)).y;
              if ((int(x_213) < 210)) {
                int const x_220 = (*(tint_symbol_9)).arr[6];
                grey = (0.5f + (float(x_220) / 10.0f));
              } else {
                float const x_225 = (*(tint_symbol_11)).y;
                if ((int(x_225) < 240)) {
                  int const x_232 = (*(tint_symbol_9)).arr[7];
                  grey = (0.5f + (float(x_232) / 10.0f));
                } else {
                  float const x_237 = (*(tint_symbol_11)).y;
                  if ((int(x_237) < 270)) {
                    int const x_244 = (*(tint_symbol_9)).arr[8];
                    grey = (0.5f + (float(x_244) / 10.0f));
                  } else {
                    discard_fragment();
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_248 = grey;
  float3 const x_249 = float3(x_248, x_248, x_248);
  *(tint_symbol_12) = float4(x_249.x, x_249.y, x_249.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;
}

