#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[10];
};
struct QuicksortObject {
  tint_array_wrapper numbers;
};
struct buf1 {
  /* 0x0000 */ packed_float2 resolution;
};
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct main_out {
  float4 frag_color_1;
  float4 gl_Position;
};
struct tint_symbol_2 {
  float4 x_GLF_pos_param [[attribute(0)]];
};
struct tint_symbol_3 {
  float4 frag_color_1 [[user(locn0)]];
  float4 gl_Position [[position]];
};

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_5) {
  int temp = 0;
  int const x_257 = *(i);
  int const x_259 = (*(tint_symbol_5)).numbers.arr[x_257];
  temp = x_259;
  int const x_260 = *(i);
  int const x_261 = *(j);
  int const x_263 = (*(tint_symbol_5)).numbers.arr[x_261];
  (*(tint_symbol_5)).numbers.arr[x_260] = x_263;
  int const x_265 = *(j);
  int const x_266 = temp;
  (*(tint_symbol_5)).numbers.arr[x_265] = x_266;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_6) {
  int pivot = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param = 0;
  int param_1 = 0;
  int param_2 = 0;
  int param_3 = 0;
  int const x_269 = *(h);
  int const x_271 = (*(tint_symbol_6)).numbers.arr[x_269];
  pivot = x_271;
  int const x_272 = *(l);
  i_1 = as_type<int>((as_type<uint>(x_272) - as_type<uint>(1)));
  int const x_274 = *(l);
  j_1 = x_274;
  while (true) {
    int const x_279 = j_1;
    int const x_280 = *(h);
    if ((x_279 <= as_type<int>((as_type<uint>(x_280) - as_type<uint>(1))))) {
    } else {
      break;
    }
    int const x_284 = j_1;
    int const x_286 = (*(tint_symbol_6)).numbers.arr[x_284];
    int const x_287 = pivot;
    if ((x_286 <= x_287)) {
      int const x_291 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
      int const x_293 = i_1;
      param = x_293;
      int const x_294 = j_1;
      param_1 = x_294;
      swap_i1_i1_(&(param), &(param_1), tint_symbol_6);
    }
    {
      int const x_296 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_296) + as_type<uint>(1)));
    }
  }
  int const x_298 = i_1;
  param_2 = as_type<int>((as_type<uint>(x_298) + as_type<uint>(1)));
  int const x_300 = *(h);
  param_3 = x_300;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_6);
  int const x_302 = i_1;
  return as_type<int>((as_type<uint>(x_302) + as_type<uint>(1)));
}

void quicksort_(thread QuicksortObject* const tint_symbol_7) {
  int l_1 = 0;
  int h_1 = 0;
  int top = 0;
  tint_array_wrapper stack = {};
  int p = 0;
  int param_4 = 0;
  int param_5 = 0;
  l_1 = 0;
  h_1 = 9;
  top = -1;
  int const x_305 = top;
  int const x_306 = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
  top = x_306;
  int const x_307 = l_1;
  stack.arr[x_306] = x_307;
  int const x_309 = top;
  int const x_310 = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
  top = x_310;
  int const x_311 = h_1;
  stack.arr[x_310] = x_311;
  while (true) {
    int const x_317 = top;
    if ((x_317 >= 0)) {
    } else {
      break;
    }
    int const x_320 = top;
    top = as_type<int>((as_type<uint>(x_320) - as_type<uint>(1)));
    int const x_323 = stack.arr[x_320];
    h_1 = x_323;
    int const x_324 = top;
    top = as_type<int>((as_type<uint>(x_324) - as_type<uint>(1)));
    int const x_327 = stack.arr[x_324];
    l_1 = x_327;
    int const x_328 = l_1;
    param_4 = x_328;
    int const x_329 = h_1;
    param_5 = x_329;
    int const x_330 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_7);
    p = x_330;
    int const x_331 = p;
    int const x_333 = l_1;
    if ((as_type<int>((as_type<uint>(x_331) - as_type<uint>(1))) > x_333)) {
      int const x_337 = top;
      int const x_338 = as_type<int>((as_type<uint>(x_337) + as_type<uint>(1)));
      top = x_338;
      int const x_339 = l_1;
      stack.arr[x_338] = x_339;
      int const x_341 = top;
      int const x_342 = as_type<int>((as_type<uint>(x_341) + as_type<uint>(1)));
      top = x_342;
      int const x_343 = p;
      stack.arr[x_342] = as_type<int>((as_type<uint>(x_343) - as_type<uint>(1)));
    }
    int const x_346 = p;
    int const x_348 = h_1;
    if ((as_type<int>((as_type<uint>(x_346) + as_type<uint>(1))) < x_348)) {
      int const x_352 = top;
      int const x_353 = as_type<int>((as_type<uint>(x_352) + as_type<uint>(1)));
      top = x_353;
      int const x_354 = p;
      stack.arr[x_353] = as_type<int>((as_type<uint>(x_354) + as_type<uint>(1)));
      int const x_357 = top;
      int const x_358 = as_type<int>((as_type<uint>(x_357) + as_type<uint>(1)));
      top = x_358;
      int const x_359 = h_1;
      stack.arr[x_358] = x_359;
    }
  }
  return;
}

void main_1(constant buf1& x_34, constant buf0& x_37, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
  int i_2 = 0;
  float2 uv = 0.0f;
  float3 color = 0.0f;
  float4 const x_94 = *(tint_symbol_8);
  *(tint_symbol_9) = ((x_94 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
  i_2 = 0;
  while (true) {
    int const x_101 = i_2;
    if ((x_101 < 10)) {
    } else {
      break;
    }
    int const x_104 = i_2;
    int const x_105 = i_2;
    (*(tint_symbol_10)).numbers.arr[x_104] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_105)));
    int const x_108 = i_2;
    int const x_109 = i_2;
    int const x_111 = (*(tint_symbol_10)).numbers.arr[x_109];
    int const x_112 = i_2;
    int const x_114 = (*(tint_symbol_10)).numbers.arr[x_112];
    (*(tint_symbol_10)).numbers.arr[x_108] = as_type<int>((as_type<uint>(x_111) * as_type<uint>(x_114)));
    {
      int const x_117 = i_2;
      i_2 = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
    }
  }
  quicksort_(tint_symbol_10);
  float4 const x_120 = *(tint_symbol_9);
  float2 const x_123 = x_34.resolution;
  uv = (float2(x_120.x, x_120.y) / x_123);
  color = float3(1.0f, 2.0f, 3.0f);
  int const x_126 = (*(tint_symbol_10)).numbers.arr[0];
  float const x_129 = color.x;
  color.x = (x_129 + float(x_126));
  float const x_133 = uv.x;
  if ((x_133 > 0.25f)) {
    int const x_138 = (*(tint_symbol_10)).numbers.arr[1];
    float const x_141 = color.x;
    color.x = (x_141 + float(x_138));
  }
  float const x_145 = uv.x;
  if ((x_145 > 0.5f)) {
    float const x_150 = x_37.injectionSwitch.y;
    int const x_155 = (*(tint_symbol_10)).numbers.arr[max(as_type<int>((as_type<uint>(2) * as_type<uint>(int(x_150)))), 2)];
    float const x_158 = x_37.injectionSwitch.y;
    int const x_163 = (*(tint_symbol_10)).numbers.arr[max(as_type<int>((as_type<uint>(2) * as_type<uint>(int(x_158)))), 2)];
    float const x_167 = color.y;
    color.y = (x_167 + fmax(float(x_155), float(x_163)));
  }
  float const x_171 = uv.x;
  if ((x_171 > 0.75f)) {
    int const x_176 = (*(tint_symbol_10)).numbers.arr[3];
    float const x_179 = color.z;
    color.z = (x_179 + float(x_176));
  }
  int const x_183 = (*(tint_symbol_10)).numbers.arr[4];
  float const x_186 = color.y;
  color.y = (x_186 + float(x_183));
  float const x_190 = uv.y;
  if ((x_190 > 0.25f)) {
    int const x_195 = (*(tint_symbol_10)).numbers.arr[5];
    float const x_198 = color.x;
    color.x = (x_198 + float(x_195));
  }
  float const x_202 = uv.y;
  if ((x_202 > 0.5f)) {
    int const x_207 = (*(tint_symbol_10)).numbers.arr[6];
    float const x_210 = color.y;
    color.y = (x_210 + float(x_207));
  }
  float const x_214 = uv.y;
  if ((x_214 > 0.75f)) {
    int const x_219 = (*(tint_symbol_10)).numbers.arr[7];
    float const x_222 = color.z;
    color.z = (x_222 + float(x_219));
  }
  int const x_226 = (*(tint_symbol_10)).numbers.arr[8];
  float const x_229 = color.z;
  color.z = (x_229 + float(x_226));
  float const x_233 = uv.x;
  float const x_235 = uv.y;
  if ((fabs((x_233 - x_235)) < 0.25f)) {
    int const x_242 = (*(tint_symbol_10)).numbers.arr[9];
    float const x_245 = color.x;
    color.x = (x_245 + float(x_242));
  }
  float3 const x_248 = color;
  float3 const x_249 = normalize(x_248);
  *(tint_symbol_11) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
  float4 const x_254 = *(tint_symbol_8);
  *(tint_symbol_12) = x_254;
  return;
}

main_out tint_symbol_inner(constant buf1& x_34, constant buf0& x_37, float4 x_GLF_pos_param, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14, thread QuicksortObject* const tint_symbol_15, thread float4* const tint_symbol_16, thread float4* const tint_symbol_17) {
  *(tint_symbol_13) = x_GLF_pos_param;
  main_1(x_34, x_37, tint_symbol_13, tint_symbol_14, tint_symbol_15, tint_symbol_16, tint_symbol_17);
  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_16), .gl_Position=*(tint_symbol_17)};
  return tint_symbol_4;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf1& x_34 [[buffer(0)]], constant buf0& x_37 [[buffer(1)]]) {
  thread float4 tint_symbol_18 = 0.0f;
  thread float4 tint_symbol_19 = 0.0f;
  thread QuicksortObject tint_symbol_20 = {};
  thread float4 tint_symbol_21 = 0.0f;
  thread float4 tint_symbol_22 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_34, x_37, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20), &(tint_symbol_21), &(tint_symbol_22));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.frag_color_1 = inner_result.frag_color_1;
  wrapper_result.gl_Position = inner_result.gl_Position;
  return wrapper_result;
}

