#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_256 = *(from);
  k = x_256;
  int const x_257 = *(from);
  i = x_257;
  int const x_258 = *(mid);
  j = as_type<int>((as_type<uint>(x_258) + as_type<uint>(1)));
  while (true) {
    int const x_264 = i;
    int const x_265 = *(mid);
    int const x_267 = j;
    int const x_268 = *(to);
    if (((x_264 <= x_265) & (x_267 <= x_268))) {
    } else {
      break;
    }
    int const x_272 = i;
    int const x_274 = (*(tint_symbol_5)).arr[x_272];
    int const x_275 = j;
    int const x_277 = (*(tint_symbol_5)).arr[x_275];
    if ((x_274 < x_277)) {
      int const x_282 = k;
      k = as_type<int>((as_type<uint>(x_282) + as_type<uint>(1)));
      int const x_284 = i;
      i = as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
      int const x_287 = (*(tint_symbol_5)).arr[x_284];
      (*(tint_symbol_6)).arr[x_282] = x_287;
    } else {
      int const x_289 = k;
      k = as_type<int>((as_type<uint>(x_289) + as_type<uint>(1)));
      int const x_291 = j;
      j = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
      int const x_294 = (*(tint_symbol_5)).arr[x_291];
      (*(tint_symbol_6)).arr[x_289] = x_294;
    }
  }
  while (true) {
    if (!((256.0f < 1.0f))) {
    } else {
      continue;
    }
    int const x_301 = i;
    int const x_303 = i;
    int const x_304 = *(mid);
    if (((x_301 < 10) & (x_303 <= x_304))) {
    } else {
      break;
    }
    int const x_309 = k;
    k = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
    int const x_311 = i;
    i = as_type<int>((as_type<uint>(x_311) + as_type<uint>(1)));
    int const x_314 = (*(tint_symbol_5)).arr[x_311];
    (*(tint_symbol_6)).arr[x_309] = x_314;
  }
  int const x_316 = *(from);
  i_1 = x_316;
  while (true) {
    int const x_321 = i_1;
    int const x_322 = *(to);
    if ((x_321 <= x_322)) {
    } else {
      break;
    }
    int const x_325 = i_1;
    int const x_326 = i_1;
    int const x_328 = (*(tint_symbol_6)).arr[x_326];
    (*(tint_symbol_5)).arr[x_325] = x_328;
    {
      int const x_330 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_330) + 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_337 = m;
    int const x_338 = high;
    if ((x_337 <= x_338)) {
    } else {
      break;
    }
    int const x_341 = low;
    i_2 = x_341;
    while (true) {
      int const x_346 = i_2;
      int const x_347 = high;
      if ((x_346 < x_347)) {
      } else {
        break;
      }
      int const x_350 = i_2;
      from_1 = x_350;
      int const x_351 = i_2;
      int const x_352 = m;
      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_351) + as_type<uint>(x_352)))) - as_type<uint>(1)));
      int const x_355 = i_2;
      int const x_356 = m;
      int const x_360 = high;
      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_355) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_356))))))) - as_type<uint>(1))), x_360);
      int const x_362 = from_1;
      param = x_362;
      int const x_363 = mid_1;
      param_1 = x_363;
      int const x_364 = to_1;
      param_2 = x_364;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_7, tint_symbol_8);
      {
        int const x_366 = m;
        int const x_368 = i_2;
        i_2 = as_type<int>((as_type<uint>(x_368) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_366))))));
      }
    }
    {
      int const x_370 = m;
      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_370)));
    }
  }
  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_89 = x_28.injectionSwitch.x;
  i_3 = int(x_89);
  while (true) {
    int const x_95 = i_3;
    switch(x_95) {
      case 9: {
        int const x_125 = i_3;
        (*(tint_symbol_9)).arr[x_125] = -5;
        break;
      }
      case 8: {
        int const x_123 = i_3;
        (*(tint_symbol_9)).arr[x_123] = -4;
        break;
      }
      case 7: {
        int const x_121 = i_3;
        (*(tint_symbol_9)).arr[x_121] = -3;
        break;
      }
      case 6: {
        int const x_119 = i_3;
        (*(tint_symbol_9)).arr[x_119] = -2;
        break;
      }
      case 5: {
        int const x_117 = i_3;
        (*(tint_symbol_9)).arr[x_117] = -1;
        break;
      }
      case 4: {
        int const x_115 = i_3;
        (*(tint_symbol_9)).arr[x_115] = 0;
        break;
      }
      case 3: {
        int const x_113 = i_3;
        (*(tint_symbol_9)).arr[x_113] = 1;
        break;
      }
      case 2: {
        int const x_111 = i_3;
        (*(tint_symbol_9)).arr[x_111] = 2;
        break;
      }
      case 1: {
        int const x_109 = i_3;
        (*(tint_symbol_9)).arr[x_109] = 3;
        break;
      }
      case 0: {
        int const x_107 = i_3;
        (*(tint_symbol_9)).arr[x_107] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_127 = i_3;
    i_3 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
    {
      int const x_129 = i_3;
      if ((x_129 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_135 = j_1;
    if ((x_135 < 10)) {
    } else {
      break;
    }
    int const x_138 = j_1;
    int const x_139 = j_1;
    int const x_141 = (*(tint_symbol_9)).arr[x_139];
    (*(tint_symbol_10)).arr[x_138] = x_141;
    {
      int const x_143 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
    }
  }
  mergeSort_(tint_symbol_9, tint_symbol_10);
  float const x_147 = (*(tint_symbol_11)).y;
  if ((int(x_147) < 30)) {
    int const x_154 = (*(tint_symbol_9)).arr[0];
    grey = (0.5f + (float(x_154) / 10.0f));
  } else {
    float const x_159 = (*(tint_symbol_11)).y;
    if ((int(x_159) < 60)) {
      int const x_166 = (*(tint_symbol_9)).arr[1];
      grey = (0.5f + (float(x_166) / 10.0f));
    } else {
      float const x_171 = (*(tint_symbol_11)).y;
      if ((int(x_171) < 90)) {
        int const x_178 = (*(tint_symbol_9)).arr[2];
        grey = (0.5f + (float(x_178) / 10.0f));
      } else {
        float const x_183 = (*(tint_symbol_11)).y;
        if ((int(x_183) < 120)) {
          int const x_190 = (*(tint_symbol_9)).arr[3];
          grey = (0.5f + (float(x_190) / 10.0f));
        } else {
          float const x_195 = (*(tint_symbol_11)).y;
          if ((int(x_195) < 150)) {
            discard_fragment();
          } else {
            float const x_202 = (*(tint_symbol_11)).y;
            if ((int(x_202) < 180)) {
              int const x_209 = (*(tint_symbol_9)).arr[5];
              grey = (0.5f + (float(x_209) / 10.0f));
            } else {
              float const x_214 = (*(tint_symbol_11)).y;
              if ((int(x_214) < 210)) {
                int const x_221 = (*(tint_symbol_9)).arr[6];
                grey = (0.5f + (float(x_221) / 10.0f));
              } else {
                float const x_226 = (*(tint_symbol_11)).y;
                if ((int(x_226) < 240)) {
                  int const x_233 = (*(tint_symbol_9)).arr[7];
                  grey = (0.5f + (float(x_233) / 10.0f));
                } else {
                  float const x_238 = (*(tint_symbol_11)).y;
                  if ((int(x_238) < 270)) {
                    int const x_245 = (*(tint_symbol_9)).arr[8];
                    grey = (0.5f + (float(x_245) / 10.0f));
                  } else {
                    discard_fragment();
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_249 = grey;
  float3 const x_250 = float3(x_249, x_249, x_249);
  *(tint_symbol_12) = float4(x_250.x, x_250.y, x_250.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;
}

