#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_6, thread tint_array_wrapper* const tint_symbol_7) {
  int k = 0;
  int i = 0;
  int j = 0;
  int i_1 = 0;
  int const x_303 = *(from);
  k = x_303;
  int const x_304 = *(from);
  i = x_304;
  int const x_305 = *(mid);
  j = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
  while (true) {
    int const x_311 = i;
    int const x_312 = *(mid);
    int const x_314 = j;
    int const x_315 = *(to);
    if (((x_311 <= x_312) && (x_314 <= x_315))) {
    } else {
      break;
    }
    int const x_319 = i;
    int const x_321 = (*(tint_symbol_6)).arr[x_319];
    int const x_322 = j;
    int const x_324 = (*(tint_symbol_6)).arr[x_322];
    if ((x_321 < x_324)) {
      int const x_329 = k;
      k = as_type<int>((as_type<uint>(x_329) + as_type<uint>(1)));
      int const x_331 = i;
      i = as_type<int>((as_type<uint>(x_331) + as_type<uint>(1)));
      int const x_334 = (*(tint_symbol_6)).arr[x_331];
      (*(tint_symbol_7)).arr[x_329] = x_334;
    } else {
      int const x_336 = k;
      k = as_type<int>((as_type<uint>(x_336) + as_type<uint>(1)));
      int const x_338 = j;
      j = as_type<int>((as_type<uint>(x_338) + as_type<uint>(1)));
      int const x_341 = (*(tint_symbol_6)).arr[x_338];
      (*(tint_symbol_7)).arr[x_336] = x_341;
    }
  }
  while (true) {
    int const x_347 = i;
    int const x_349 = i;
    int const x_350 = *(mid);
    if (((x_347 < 10) && (x_349 <= x_350))) {
    } else {
      break;
    }
    int const x_354 = k;
    k = as_type<int>((as_type<uint>(x_354) + as_type<uint>(1)));
    int const x_356 = i;
    i = as_type<int>((as_type<uint>(x_356) + as_type<uint>(1)));
    int const x_359 = (*(tint_symbol_6)).arr[x_356];
    (*(tint_symbol_7)).arr[x_354] = x_359;
  }
  int const x_361 = *(from);
  i_1 = x_361;
  while (true) {
    int const x_366 = i_1;
    int const x_367 = *(to);
    if ((x_366 <= x_367)) {
    } else {
      break;
    }
    int const x_370 = i_1;
    int const x_371 = i_1;
    int const x_373 = (*(tint_symbol_7)).arr[x_371];
    (*(tint_symbol_6)).arr[x_370] = x_373;
    {
      int const x_375 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_375) + as_type<uint>(1)));
    }
  }
  return;
}

void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10, thread float4* const tint_symbol_11) {
  int x_85 = 0;
  int x_86 = 0;
  int x_87 = 0;
  int x_88 = 0;
  int x_89 = 0;
  int x_90 = 0;
  int x_91 = 0;
  int x_92 = 0;
  int x_93 = 0;
  int x_94 = 0;
  int i_3 = 0;
  int j_1 = 0;
  float grey = 0.0f;
  float const x_96 = x_28.injectionSwitch.x;
  i_3 = int(x_96);
  while (true) {
    int const x_102 = i_3;
    switch(x_102) {
      case 9: {
        int const x_132 = i_3;
        (*(tint_symbol_8)).arr[x_132] = -5;
        break;
      }
      case 8: {
        int const x_130 = i_3;
        (*(tint_symbol_8)).arr[x_130] = -4;
        break;
      }
      case 7: {
        int const x_128 = i_3;
        (*(tint_symbol_8)).arr[x_128] = -3;
        break;
      }
      case 6: {
        int const x_126 = i_3;
        (*(tint_symbol_8)).arr[x_126] = -2;
        break;
      }
      case 5: {
        int const x_124 = i_3;
        (*(tint_symbol_8)).arr[x_124] = -1;
        break;
      }
      case 4: {
        int const x_122 = i_3;
        (*(tint_symbol_8)).arr[x_122] = 0;
        break;
      }
      case 3: {
        int const x_120 = i_3;
        (*(tint_symbol_8)).arr[x_120] = 1;
        break;
      }
      case 2: {
        int const x_118 = i_3;
        (*(tint_symbol_8)).arr[x_118] = 2;
        break;
      }
      case 1: {
        int const x_116 = i_3;
        (*(tint_symbol_8)).arr[x_116] = 3;
        break;
      }
      case 0: {
        int const x_114 = i_3;
        (*(tint_symbol_8)).arr[x_114] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_134 = i_3;
    i_3 = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
    {
      int const x_136 = i_3;
      if ((x_136 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_142 = j_1;
    if ((x_142 < 10)) {
    } else {
      break;
    }
    int const x_145 = j_1;
    int const x_146 = j_1;
    int const x_148 = (*(tint_symbol_8)).arr[x_146];
    (*(tint_symbol_9)).arr[x_145] = x_148;
    {
      int const x_150 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
    }
  }
  x_94 = 0;
  x_93 = 9;
  x_92 = 1;
  while (true) {
    int const x_156 = x_92;
    int const x_157 = x_93;
    if ((x_156 <= x_157)) {
    } else {
      break;
    }
    int const x_160 = x_94;
    x_91 = x_160;
    while (true) {
      int const x_165 = x_91;
      int const x_166 = x_93;
      if ((x_165 < x_166)) {
      } else {
        break;
      }
      int const x_169 = x_91;
      x_90 = x_169;
      int const x_170 = x_91;
      int const x_171 = x_92;
      tint_array_wrapper const x_173 = *(tint_symbol_8);
      tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      *(tint_symbol_8) = tint_symbol_4;
      *(tint_symbol_8) = x_173;
      x_89 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_170) + as_type<uint>(x_171)))) - as_type<uint>(1)));
      int const x_175 = x_91;
      int const x_176 = x_92;
      int const x_180 = x_93;
      x_88 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_175) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_176))))))) - as_type<uint>(1))), x_180);
      int const x_182 = x_90;
      x_87 = x_182;
      int const x_183 = x_89;
      x_86 = x_183;
      int const x_184 = x_88;
      x_85 = x_184;
      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85), tint_symbol_8, tint_symbol_9);
      {
        int const x_186 = x_92;
        int const x_188 = x_91;
        x_91 = as_type<int>((as_type<uint>(x_188) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_186))))));
      }
    }
    {
      int const x_190 = x_92;
      x_92 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_190)));
    }
  }
  float const x_194 = (*(tint_symbol_10)).y;
  if ((int(x_194) < 30)) {
    int const x_201 = (*(tint_symbol_8)).arr[0];
    grey = (0.5f + (float(x_201) / 10.0f));
  } else {
    float const x_206 = (*(tint_symbol_10)).y;
    if ((int(x_206) < 60)) {
      int const x_213 = (*(tint_symbol_8)).arr[1];
      grey = (0.5f + (float(x_213) / 10.0f));
    } else {
      float const x_218 = (*(tint_symbol_10)).y;
      if ((int(x_218) < 90)) {
        int const x_225 = (*(tint_symbol_8)).arr[2];
        grey = (0.5f + (float(x_225) / 10.0f));
      } else {
        float const x_230 = (*(tint_symbol_10)).y;
        if ((int(x_230) < 120)) {
          int const x_237 = (*(tint_symbol_8)).arr[3];
          grey = (0.5f + (float(x_237) / 10.0f));
        } else {
          float const x_242 = (*(tint_symbol_10)).y;
          if ((int(x_242) < 150)) {
            discard_fragment();
          } else {
            float const x_249 = (*(tint_symbol_10)).y;
            if ((int(x_249) < 180)) {
              int const x_256 = (*(tint_symbol_8)).arr[5];
              grey = (0.5f + (float(x_256) / 10.0f));
            } else {
              float const x_261 = (*(tint_symbol_10)).y;
              if ((int(x_261) < 210)) {
                int const x_268 = (*(tint_symbol_8)).arr[6];
                grey = (0.5f + (float(x_268) / 10.0f));
              } else {
                float const x_273 = (*(tint_symbol_10)).y;
                if ((int(x_273) < 240)) {
                  int const x_280 = (*(tint_symbol_8)).arr[7];
                  grey = (0.5f + (float(x_280) / 10.0f));
                } else {
                  float const x_285 = (*(tint_symbol_10)).y;
                  if ((int(x_285) < 270)) {
                    int const x_292 = (*(tint_symbol_8)).arr[8];
                    grey = (0.5f + (float(x_292) / 10.0f));
                  } else {
                    discard_fragment();
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_296 = grey;
  float3 const x_297 = float3(x_296, x_296, x_296);
  *(tint_symbol_11) = float4(x_297.x, x_297.y, x_297.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_12 = 0.0f;
  thread tint_array_wrapper tint_symbol_13 = {};
  thread tint_array_wrapper tint_symbol_14 = {};
  thread float4 tint_symbol_15 = 0.0f;
  tint_symbol_12 = gl_FragCoord_param;
  main_1(x_28, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_12), &(tint_symbol_15));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_15};
  tint_symbol_2 const tint_symbol_5 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_5;
}

void mergeSort_(thread tint_array_wrapper* const tint_symbol_16, thread tint_array_wrapper* const tint_symbol_17) {
  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_382 = m;
    int const x_383 = high;
    if ((x_382 <= x_383)) {
    } else {
      break;
    }
    int const x_386 = low;
    i_2 = x_386;
    while (true) {
      int const x_391 = i_2;
      int const x_392 = high;
      if ((x_391 < x_392)) {
      } else {
        break;
      }
      int const x_395 = i_2;
      from_1 = x_395;
      int const x_396 = i_2;
      int const x_397 = m;
      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_396) + as_type<uint>(x_397)))) - as_type<uint>(1)));
      int const x_400 = i_2;
      int const x_401 = m;
      int const x_405 = high;
      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_400) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_401))))))) - as_type<uint>(1))), x_405);
      int const x_407 = from_1;
      param = x_407;
      int const x_408 = mid_1;
      param_1 = x_408;
      int const x_409 = to_1;
      param_2 = x_409;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_16, tint_symbol_17);
      {
        int const x_411 = m;
        int const x_413 = i_2;
        i_2 = as_type<int>((as_type<uint>(x_413) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_411))))));
      }
    }
    {
      int const x_415 = m;
      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_415)));
    }
  }
  return;
}

