#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 = (x_305 + 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 = (x_329 + 1);
      int const x_331 = i;
      i = (x_331 + 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 = (x_336 + 1);
      int const x_338 = j;
      j = (x_338 + 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 = (x_354 + 1);
    int const x_356 = i;
    i = (x_356 + 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 = (x_375 + 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 = (x_134 + 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 = (x_150 + 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 = ((x_170 + x_171) - 1);
      int const x_175 = x_91;
      int const x_176 = x_92;
      int const x_180 = x_93;
      x_88 = min(((x_175 + (2 * x_176)) - 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 = (x_188 + (2 * x_186));
      }
    }
    {
      int const x_190 = x_92;
      x_92 = (2 * 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 = ((x_396 + x_397) - 1);
      int const x_400 = i_2;
      int const x_401 = m;
      int const x_405 = high;
      to_1 = min(((x_400 + (2 * x_401)) - 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 = (x_413 + (2 * x_411));
      }
    }
    {
      int const x_415 = m;
      m = (2 * x_415);
    }
  }
  return;
}

