#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 main_1(constant buf0& x_8, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  tint_array_wrapper temp = {};
  tint_array_wrapper data = {};
  float x_189 = 0.0f;
  float x_261 = 0.0f;
  int x_63_phi = 0;
  int x_102_phi = 0;
  int x_111_phi = 0;
  float x_262_phi = 0.0f;
  float const x_60 = x_8.injectionSwitch.x;
  int const x_61 = int(x_60);
  x_63_phi = x_61;
  while (true) {
    int x_99 = 0;
    int x_97 = 0;
    int x_95 = 0;
    int x_93 = 0;
    int x_91 = 0;
    int x_89 = 0;
    int x_87 = 0;
    int x_85 = 0;
    int x_83 = 0;
    int x_81 = 0;
    int x_64_phi = 0;
    int const x_63 = x_63_phi;
    int const x_68 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
    x_64_phi = x_68;
    switch(x_63) {
      case 9: {
        data.arr[x_63] = -5;
        x_99 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_99;
        break;
      }
      case 8: {
        data.arr[x_63] = -4;
        x_97 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_97;
        break;
      }
      case 7: {
        data.arr[x_63] = -3;
        x_95 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_95;
        break;
      }
      case 6: {
        data.arr[x_63] = -2;
        x_93 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_93;
        break;
      }
      case 5: {
        data.arr[x_63] = -1;
        x_91 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_91;
        break;
      }
      case 4: {
        data.arr[x_63] = 0;
        x_89 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_89;
        break;
      }
      case 3: {
        data.arr[x_63] = 1;
        x_87 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_87;
        break;
      }
      case 2: {
        data.arr[x_63] = 2;
        x_85 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_85;
        break;
      }
      case 1: {
        data.arr[x_63] = 3;
        x_83 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_83;
        break;
      }
      case 0: {
        data.arr[x_63] = 4;
        x_81 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_81;
        break;
      }
      default: {
        break;
      }
    }
    int const x_64 = x_64_phi;
    {
      x_63_phi = x_64;
      if ((x_64 < 10)) {
      } else {
        break;
      }
    }
  }
  x_102_phi = 0;
  while (true) {
    int x_103 = 0;
    int const x_102 = x_102_phi;
    if ((x_102 < 10)) {
    } else {
      break;
    }
    {
      int const x_108 = data.arr[x_102];
      temp.arr[x_102] = x_108;
      x_103 = as_type<int>((as_type<uint>(x_102) + as_type<uint>(1)));
      x_102_phi = x_103;
    }
  }
  x_111_phi = 1;
  while (true) {
    int x_112 = 0;
    int x_118_phi = 0;
    int const x_111 = x_111_phi;
    if ((x_111 <= 9)) {
    } else {
      break;
    }
    x_118_phi = 0;
    while (true) {
      int x_130 = 0;
      int x_135 = 0;
      int x_130_phi = 0;
      int x_133_phi = 0;
      int x_135_phi = 0;
      int x_157_phi = 0;
      int x_160_phi = 0;
      int x_170_phi = 0;
      int const x_118 = x_118_phi;
      if ((x_118 < 9)) {
      } else {
        break;
      }
      int const x_124 = as_type<int>((as_type<uint>(x_118) + as_type<uint>(x_111)));
      int const x_125 = as_type<int>((as_type<uint>(x_124) - as_type<uint>(1)));
      int const x_119 = as_type<int>((as_type<uint>(x_118) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_111))))));
      int const x_128 = min(as_type<int>((as_type<uint>(x_119) - as_type<uint>(1))), 9);
      x_130_phi = x_118;
      x_133_phi = x_124;
      x_135_phi = x_118;
      while (true) {
        int x_150 = 0;
        int x_153 = 0;
        int x_134_phi = 0;
        int x_136_phi = 0;
        x_130 = x_130_phi;
        int const x_133 = x_133_phi;
        x_135 = x_135_phi;
        if (((x_135 <= x_125) && (x_133 <= x_128))) {
        } else {
          break;
        }
        int const x_142_save = x_135;
        int const x_143 = data.arr[x_142_save];
        int const x_144_save = x_133;
        int const x_145 = data.arr[x_144_save];
        int const x_131 = as_type<int>(as_type<int>((as_type<uint>(x_130) + as_type<uint>(as_type<int>(1)))));
        if ((x_143 < x_145)) {
          x_150 = as_type<int>(as_type<int>((as_type<uint>(x_135) + as_type<uint>(as_type<int>(1)))));
          int const x_151 = data.arr[x_142_save];
          temp.arr[x_130] = x_151;
          x_134_phi = x_133;
          x_136_phi = x_150;
        } else {
          x_153 = as_type<int>((as_type<uint>(x_133) + as_type<uint>(1)));
          int const x_154 = data.arr[x_144_save];
          temp.arr[x_130] = x_154;
          x_134_phi = x_153;
          x_136_phi = x_135;
        }
        int const x_134 = x_134_phi;
        int const x_136 = x_136_phi;
        {
          x_130_phi = x_131;
          x_133_phi = x_134;
          x_135_phi = x_136;
        }
      }
      x_157_phi = x_130;
      x_160_phi = x_135;
      while (true) {
        int x_158 = 0;
        int x_161 = 0;
        int const x_157 = x_157_phi;
        int const x_160 = x_160_phi;
        if (((x_160 < 10) && (x_160 <= x_125))) {
        } else {
          break;
        }
        {
          x_158 = as_type<int>((as_type<uint>(x_157) + as_type<uint>(1)));
          x_161 = as_type<int>((as_type<uint>(x_160) + as_type<uint>(1)));
          int const x_167 = data.arr[x_160];
          temp.arr[x_157] = x_167;
          x_157_phi = x_158;
          x_160_phi = x_161;
        }
      }
      x_170_phi = x_118;
      while (true) {
        int x_171 = 0;
        int const x_170 = x_170_phi;
        if ((x_170 <= x_128)) {
        } else {
          break;
        }
        {
          int const x_176 = temp.arr[x_170];
          data.arr[x_170] = x_176;
          x_171 = as_type<int>((as_type<uint>(x_170) + as_type<uint>(1)));
          x_170_phi = x_171;
        }
      }
      {
        x_118_phi = x_119;
      }
    }
    {
      x_112 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_111)));
      x_111_phi = x_112;
    }
  }
  int x_180 = 0;
  float x_198 = 0.0f;
  float x_260 = 0.0f;
  float x_261_phi = 0.0f;
  float const x_179 = (*(tint_symbol_5)).y;
  x_180 = int(x_179);
  if ((x_180 < 30)) {
    int const x_186 = data.arr[0];
    x_189 = (0.5f + (float(x_186) * 0.100000001f));
    x_262_phi = x_189;
  } else {
    float x_207 = 0.0f;
    float x_259 = 0.0f;
    float x_260_phi = 0.0f;
    if ((x_180 < 60)) {
      int const x_195 = data.arr[1];
      x_198 = (0.5f + (float(x_195) * 0.100000001f));
      x_261_phi = x_198;
    } else {
      float x_216 = 0.0f;
      float x_258 = 0.0f;
      float x_259_phi = 0.0f;
      if ((x_180 < 90)) {
        int const x_204 = data.arr[2];
        x_207 = (0.5f + (float(x_204) * 0.100000001f));
        x_260_phi = x_207;
      } else {
        if ((x_180 < 120)) {
          int const x_213 = data.arr[3];
          x_216 = (0.5f + (float(x_213) * 0.100000001f));
          x_259_phi = x_216;
        } else {
          float x_229 = 0.0f;
          float x_257 = 0.0f;
          float x_258_phi = 0.0f;
          if ((x_180 < 150)) {
            discard_fragment();
          } else {
            float x_238 = 0.0f;
            float x_256 = 0.0f;
            float x_257_phi = 0.0f;
            if ((x_180 < 180)) {
              int const x_226 = data.arr[5];
              x_229 = (0.5f + (float(x_226) * 0.100000001f));
              x_258_phi = x_229;
            } else {
              float x_247 = 0.0f;
              float x_255 = 0.0f;
              float x_256_phi = 0.0f;
              if ((x_180 < 210)) {
                int const x_235 = data.arr[6];
                x_238 = (0.5f + (float(x_235) * 0.100000001f));
                x_257_phi = x_238;
              } else {
                if ((x_180 < 240)) {
                  int const x_244 = data.arr[7];
                  x_247 = (0.5f + (float(x_244) * 0.100000001f));
                  x_256_phi = x_247;
                } else {
                  if ((x_180 < 270)) {
                  } else {
                    discard_fragment();
                  }
                  int const x_252 = data.arr[8];
                  x_255 = (0.5f + (float(x_252) * 0.100000001f));
                  x_256_phi = x_255;
                }
                x_256 = x_256_phi;
                x_257_phi = x_256;
              }
              x_257 = x_257_phi;
              x_258_phi = x_257;
            }
            x_258 = x_258_phi;
          }
          x_259_phi = x_258;
        }
        x_259 = x_259_phi;
        x_260_phi = x_259;
      }
      x_260 = x_260_phi;
      x_261_phi = x_260;
    }
    x_261 = x_261_phi;
    x_262_phi = x_261;
  }
  float const x_262 = x_262_phi;
  *(tint_symbol_6) = float4(x_262, x_262, x_262, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(x_8, &(tint_symbol_7), &(tint_symbol_8));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_8};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

