#include <metal_stdlib>

using namespace metal;

template<typename T, size_t N>
struct tint_array {
    const constant T& operator[](size_t i) const constant { return elements[i]; }
    device T& operator[](size_t i) device { return elements[i]; }
    const device T& operator[](size_t i) const device { return elements[i]; }
    thread T& operator[](size_t i) thread { return elements[i]; }
    const thread T& operator[](size_t i) const thread { return elements[i]; }
    threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
    const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
    T elements[N];
};

struct QuicksortObject {
  tint_array<int, 10> numbers;
};

struct buf0 {
  /* 0x0000 */ float2 resolution;
};

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_81) {
  int temp = 0;
  int const x_932 = temp;
  temp = 0;
  temp = x_932;
  float3 const x_523 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
  int const x_933 = *(i);
  *(i) = 0;
  *(i) = x_933;
  int const x_28 = *(i);
  int const x_934 = *(j);
  *(j) = 0;
  *(j) = x_934;
  float3 const x_524 = float3(x_523[1], x_523[0], x_523[1]);
  int const x_935 = temp;
  temp = 0;
  temp = x_935;
  int const x_30_save = x_28;
  int const x_936 = (*(tint_symbol_81)).numbers[x_30_save];
  (*(tint_symbol_81)).numbers[x_30_save] = 0;
  (*(tint_symbol_81)).numbers[x_30_save] = x_936;
  int const x_31 = (*(tint_symbol_81)).numbers[x_30_save];
  int const x_937 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  int const x_938 = *(j);
  *(j) = 0;
  *(j) = x_938;
  float3 const x_525 = float3(x_523[2], float3(1.0f, 2.0f, 3.0f)[0], x_523[1]);
  int const x_939 = *(i);
  *(i) = 0;
  *(i) = x_939;
  int const x_32 = *(i);
  int const x_940 = (*(tint_symbol_81)).numbers[x_30_save];
  (*(tint_symbol_81)).numbers[x_30_save] = 0;
  (*(tint_symbol_81)).numbers[x_30_save] = x_940;
  int const x_33 = *(j);
  int const x_941 = *(i);
  *(i) = 0;
  *(i) = x_941;
  float3 const x_526 = float3(x_525[0], x_525[2], x_525[2]);
  int const x_942 = (*(tint_symbol_81)).numbers[x_30_save];
  (*(tint_symbol_81)).numbers[x_30_save] = 0;
  (*(tint_symbol_81)).numbers[x_30_save] = x_942;
  int const x_34_save = x_33;
  int const x_35 = (*(tint_symbol_81)).numbers[x_34_save];
  QuicksortObject const x_943 = *(tint_symbol_81);
  tint_array<int, 10> const tint_symbol_2 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_3 = {.numbers=tint_symbol_2};
  *(tint_symbol_81) = tint_symbol_3;
  *(tint_symbol_81) = x_943;
  float2 const x_527 = float2(x_526[0], x_526[0]);
  int const x_36_save = x_32;
  float3 const x_528 = float3(x_524[0], x_524[2], x_524[0]);
  (*(tint_symbol_81)).numbers[x_36_save] = x_35;
  QuicksortObject const x_944 = *(tint_symbol_81);
  tint_array<int, 10> const tint_symbol_4 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_5 = {.numbers=tint_symbol_4};
  *(tint_symbol_81) = tint_symbol_5;
  *(tint_symbol_81) = x_944;
  float3 const x_529 = float3(x_526[1], x_526[2], x_526[0]);
  int const x_945 = *(i);
  *(i) = 0;
  *(i) = x_945;
  int const x_37 = *(j);
  int const x_946 = temp;
  temp = 0;
  temp = x_946;
  float2 const x_530 = float2(x_529[2], x_529[1]);
  int const x_947 = (*(tint_symbol_81)).numbers[x_34_save];
  (*(tint_symbol_81)).numbers[x_34_save] = 0;
  (*(tint_symbol_81)).numbers[x_34_save] = x_947;
  int const x_38 = temp;
  int const x_948 = *(j);
  *(j) = 0;
  *(j) = x_948;
  float3 const x_531 = float3(x_527[0], x_526[1], x_526[0]);
  int const x_949 = (*(tint_symbol_81)).numbers[x_36_save];
  (*(tint_symbol_81)).numbers[x_36_save] = 0;
  (*(tint_symbol_81)).numbers[x_36_save] = x_949;
  QuicksortObject const x_950 = *(tint_symbol_81);
  tint_array<int, 10> const tint_symbol_6 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_7 = {.numbers=tint_symbol_6};
  *(tint_symbol_81) = tint_symbol_7;
  *(tint_symbol_81) = x_950;
  float3 const x_532 = float3(x_528[0], x_528[1], x_528[0]);
  int const x_951 = (*(tint_symbol_81)).numbers[x_34_save];
  (*(tint_symbol_81)).numbers[x_34_save] = 0;
  (*(tint_symbol_81)).numbers[x_34_save] = x_951;
  (*(tint_symbol_81)).numbers[x_37] = x_38;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_82) {
  int param_3 = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param_2 = 0;
  int param_1 = 0;
  int param = 0;
  int pivot = 0;
  float2 x_537 = 0.0f;
  float3 x_538 = 0.0f;
  int const x_952 = *(h);
  *(h) = 0;
  *(h) = x_952;
  int const x_41 = *(h);
  int const x_953 = *(l);
  *(l) = 0;
  *(l) = x_953;
  int const x_42_save = x_41;
  int const x_954 = (*(tint_symbol_82)).numbers[x_42_save];
  (*(tint_symbol_82)).numbers[x_42_save] = 0;
  (*(tint_symbol_82)).numbers[x_42_save] = x_954;
  int const x_43 = (*(tint_symbol_82)).numbers[x_42_save];
  int const x_955 = param_3;
  param_3 = 0;
  param_3 = x_955;
  float3 const x_534 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[2]);
  int const x_956 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  int const x_45 = *(l);
  int const x_957 = *(h);
  *(h) = 0;
  *(h) = x_957;
  int const x_958 = j_1;
  j_1 = 0;
  j_1 = x_958;
  float3 const x_535 = float3(x_534[1], x_534[2], x_534[1]);
  int const x_959 = *(l);
  *(l) = 0;
  *(l) = x_959;
  i_1 = as_type<int>((as_type<uint>(x_45) - as_type<uint>(as_type<int>(1u))));
  int const x_49 = *(l);
  float3 const x_536 = float3(x_534[0], x_534[2], x_535[0]);
  j_1 = 10;
  QuicksortObject const x_960 = *(tint_symbol_82);
  tint_array<int, 10> const tint_symbol_8 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_9 = {.numbers=tint_symbol_8};
  *(tint_symbol_82) = tint_symbol_9;
  *(tint_symbol_82) = x_960;
  while (true) {
    int const x_961 = pivot;
    pivot = 0;
    pivot = x_961;
    int const x_962 = param_1;
    param_1 = 0;
    param_1 = x_962;
    int const x_55 = j_1;
    int const x_963 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
    QuicksortObject const x_964 = *(tint_symbol_82);
    tint_array<int, 10> const tint_symbol_10 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_11 = {.numbers=tint_symbol_10};
    *(tint_symbol_82) = tint_symbol_11;
    *(tint_symbol_82) = x_964;
    int const x_56 = *(h);
    int const x_965 = *(h);
    *(h) = 0;
    *(h) = x_965;
    int const x_966 = param;
    param = 0;
    param = x_966;
    int const x_967 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = float3(x_534[0], x_537[1], x_534[2]);
    int const x_968 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= as_type<int>((as_type<uint>(x_56) - as_type<uint>(as_type<int>(1u)))))) {
    } else {
      break;
    }
    int const x_60 = j_1;
    int const x_969 = (*(tint_symbol_82)).numbers[x_42_save];
    (*(tint_symbol_82)).numbers[x_42_save] = 0;
    (*(tint_symbol_82)).numbers[x_42_save] = x_969;
    int const x_61_save = x_60;
    int const x_970 = *(h);
    *(h) = 0;
    *(h) = x_970;
    float3 const x_539 = float3(x_537[0], x_535[2], x_537[0]);
    int const x_971 = param_1;
    param_1 = 0;
    param_1 = x_971;
    int const x_62 = (*(tint_symbol_82)).numbers[x_61_save];
    QuicksortObject const x_972 = *(tint_symbol_82);
    tint_array<int, 10> const tint_symbol_12 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_13 = {.numbers=tint_symbol_12};
    *(tint_symbol_82) = tint_symbol_13;
    *(tint_symbol_82) = x_972;
    int const x_63 = pivot;
    float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_534[2]);
    int const x_973 = i_1;
    i_1 = 0;
    i_1 = x_973;
    int const x_974 = *(l);
    *(l) = 0;
    *(l) = x_974;
    float3 const x_541 = float3(x_534[1], x_534[0], x_534[1]);
    int const x_975 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      float3 const x_542 = float3(x_541[2], x_541[0], x_541[0]);
      int const x_976 = param_3;
      param_3 = 0;
      param_3 = x_976;
      int const x_67 = i_1;
      int const x_977 = pivot;
      pivot = 0;
      pivot = x_977;
      float2 const x_543 = float2(x_539[0], x_541[1]);
      int const x_978 = i_1;
      i_1 = 0;
      i_1 = x_978;
      int const x_979 = param;
      param = 0;
      param = x_979;
      i_1 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(as_type<int>(1u))));
      int const x_980 = *(l);
      *(l) = 0;
      *(l) = x_980;
      float3 const x_544 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], x_540[0]);
      int const x_70 = i_1;
      float2 const x_545 = float2(x_537[1], x_538[0]);
      int const x_981 = param;
      param = 0;
      param = x_981;
      param = x_70;
      int const x_982 = param;
      param = 0;
      param = x_982;
      float2 const x_546 = float2(x_545[0], x_545[0]);
      int const x_983 = i_1;
      i_1 = 0;
      i_1 = x_983;
      int const x_72 = j_1;
      param_1 = x_72;
      int const x_984 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(&(param), &(param_1), tint_symbol_82);
      int const x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    QuicksortObject const x_986 = *(tint_symbol_82);
    tint_array<int, 10> const tint_symbol_14 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_15 = {.numbers=tint_symbol_14};
    *(tint_symbol_82) = tint_symbol_15;
    *(tint_symbol_82) = x_986;
    {
      int const x_987 = *(h);
      *(h) = 0;
      *(h) = x_987;
      int const x_74 = j_1;
      int const x_988 = *(h);
      *(h) = 0;
      *(h) = x_988;
      float3 const x_547 = float3(x_539[0], x_541[2], x_541[2]);
      int const x_989 = (*(tint_symbol_82)).numbers[x_61_save];
      (*(tint_symbol_82)).numbers[x_61_save] = 0;
      (*(tint_symbol_82)).numbers[x_61_save] = x_989;
      int const x_990 = param;
      param = 0;
      param = x_990;
      j_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_74)));
      int const x_991 = param_1;
      param_1 = 0;
      param_1 = x_991;
      float3 const x_548 = float3(x_541[1], x_541[2], x_541[0]);
      int const x_992 = (*(tint_symbol_82)).numbers[x_61_save];
      (*(tint_symbol_82)).numbers[x_61_save] = 0;
      (*(tint_symbol_82)).numbers[x_61_save] = x_992;
    }
  }
  int const x_76 = i_1;
  int const x_993 = (*(tint_symbol_82)).numbers[x_42_save];
  (*(tint_symbol_82)).numbers[x_42_save] = 0;
  (*(tint_symbol_82)).numbers[x_42_save] = x_993;
  float2 const x_549 = float2(x_534[0], x_534[1]);
  QuicksortObject const x_994 = *(tint_symbol_82);
  tint_array<int, 10> const tint_symbol_16 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_17 = {.numbers=tint_symbol_16};
  *(tint_symbol_82) = tint_symbol_17;
  *(tint_symbol_82) = x_994;
  int const x_995 = *(h);
  *(h) = 0;
  *(h) = x_995;
  i_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_76)));
  int const x_996 = param_1;
  param_1 = 0;
  param_1 = x_996;
  int const x_79 = i_1;
  int const x_997 = j_1;
  j_1 = 0;
  j_1 = x_997;
  float2 const x_550 = float2(x_534[0], x_534[0]);
  int const x_998 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  float2 const x_551 = float2(x_534[1], x_536[0]);
  int const x_999 = pivot;
  pivot = 0;
  pivot = x_999;
  int const x_81 = *(h);
  float2 const x_552 = float2(x_550[0], x_549[1]);
  int const x_1000 = *(h);
  *(h) = 0;
  *(h) = x_1000;
  param_3 = x_81;
  int const x_1001 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  float2 const x_553 = float2(x_549[1], x_552[0]);
  int const x_1002 = *(h);
  *(h) = 0;
  *(h) = x_1002;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_82);
  int const x_1003 = *(l);
  *(l) = 0;
  *(l) = x_1003;
  float2 const x_554 = float2(x_536[2], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1004 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  int const x_83 = i_1;
  int const x_1005 = param;
  param = 0;
  param = x_1005;
  float2 const x_555 = float2(x_534[1], x_534[0]);
  int const x_1006 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

void quicksort_(thread QuicksortObject* const tint_symbol_83) {
  int param_4 = 0;
  int h_1 = 0;
  int p = 0;
  int l_1 = 0;
  int top = 0;
  tint_array<int, 10> stack = {};
  int param_5 = 0;
  l_1 = 0;
  int const x_1007 = param_5;
  param_5 = 0;
  param_5 = x_1007;
  h_1 = 9;
  tint_array<int, 10> const x_1008 = stack;
  tint_array<int, 10> const tint_symbol_18 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  stack = tint_symbol_18;
  stack = x_1008;
  float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1009 = param_5;
  param_5 = 0;
  param_5 = x_1009;
  top = -1;
  int const x_1010 = p;
  p = 0;
  p = x_1010;
  int const x_93 = top;
  float2 const x_557 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
  int const x_1011 = p;
  p = 0;
  p = x_1011;
  int const x_94 = as_type<int>((as_type<uint>(x_93) + as_type<uint>(as_type<int>(1u))));
  int const x_1012 = top;
  top = 0;
  top = x_1012;
  float2 const x_558 = float2(x_556[1], x_557[1]);
  int const x_1013 = param_4;
  param_4 = 0;
  param_4 = x_1013;
  top = x_94;
  int const x_1014 = h_1;
  h_1 = 0;
  h_1 = x_1014;
  float3 const x_559 = float3(x_557[1], x_557[0], x_557[0]);
  int const x_1015 = param_4;
  param_4 = 0;
  param_4 = x_1015;
  int const x_95 = l_1;
  QuicksortObject const x_1016 = *(tint_symbol_83);
  tint_array<int, 10> const tint_symbol_19 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_20 = {.numbers=tint_symbol_19};
  *(tint_symbol_83) = tint_symbol_20;
  *(tint_symbol_83) = x_1016;
  float3 const x_560 = float3(x_559[1], x_559[0], x_557[0]);
  int const x_96_save = x_94;
  tint_array<int, 10> const x_1017 = stack;
  tint_array<int, 10> const tint_symbol_21 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  stack = tint_symbol_21;
  stack = x_1017;
  float3 const x_561 = float3(x_556[1], x_556[1], x_556[1]);
  int const x_1018 = l_1;
  l_1 = 0;
  l_1 = 0;
  stack[x_96_save] = x_95;
  int const x_1019 = param_5;
  param_5 = 0;
  param_5 = x_1019;
  int const x_97 = top;
  int const x_1020 = param_4;
  param_4 = 0;
  param_4 = x_1020;
  float3 const x_562 = float3(float3(1.0f, 2.0f, 3.0f)[2], x_558[1], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1021 = stack[x_96_save];
  stack[x_96_save] = 0;
  stack[x_96_save] = x_1021;
  int const x_98 = as_type<int>((as_type<uint>(x_97) + as_type<uint>(1)));
  int const x_1022 = stack[x_96_save];
  stack[x_96_save] = 0;
  stack[x_96_save] = x_1022;
  float3 const x_563 = float3(x_559[0], x_559[2], x_556[1]);
  top = x_98;
  int const x_1023 = param_4;
  param_4 = 0;
  param_4 = x_1023;
  int const x_99 = h_1;
  int const x_1024 = param_4;
  param_4 = 0;
  param_4 = x_1024;
  float3 const x_564 = float3(x_558[0], x_561[0], x_558[1]);
  int const x_1025 = l_1;
  l_1 = 0;
  l_1 = x_1025;
  int const x_100_save = x_98;
  int const x_1026 = param_5;
  param_5 = 0;
  param_5 = x_1026;
  float2 const x_565 = float2(x_564[2], x_564[2]);
  int const x_1027 = p;
  p = 0;
  p = x_1027;
  stack[x_100_save] = x_99;
  while (true) {
    float3 const x_566 = float3(x_563[0], x_563[0], x_563[0]);
    int const x_1028 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    tint_array<int, 10> const x_1029 = stack;
    tint_array<int, 10> const tint_symbol_22 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    stack = tint_symbol_22;
    stack = x_1029;
    int const x_106 = top;
    tint_array<int, 10> const x_1030 = stack;
    tint_array<int, 10> const tint_symbol_23 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    stack = tint_symbol_23;
    stack = x_1030;
    float2 const x_567 = float2(x_558[0], x_564[2]);
    int const x_1031 = param_4;
    param_4 = 0;
    param_4 = x_1031;
    if ((x_106 >= as_type<int>(0u))) {
    } else {
      break;
    }
    QuicksortObject const x_1032 = *(tint_symbol_83);
    tint_array<int, 10> const tint_symbol_24 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_25 = {.numbers=tint_symbol_24};
    *(tint_symbol_83) = tint_symbol_25;
    *(tint_symbol_83) = x_1032;
    float3 const x_568 = float3(x_559[1], x_559[0], x_563[1]);
    int const x_1033 = param_4;
    param_4 = 0;
    param_4 = x_1033;
    int const x_108 = top;
    float3 const x_569 = float3(x_565[0], x_567[1], x_565[0]);
    int const x_1034 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    float2 const x_570 = float2(x_556[0], x_556[0]);
    int const x_1035 = p;
    p = 0;
    p = x_1035;
    top = as_type<int>((as_type<uint>(x_108) - as_type<uint>(as_type<int>(1u))));
    int const x_1036 = p;
    p = 0;
    p = x_1036;
    int const x_110_save = x_108;
    int const x_1037 = stack[x_96_save];
    stack[x_96_save] = 0;
    stack[x_96_save] = x_1037;
    int const x_111 = stack[x_110_save];
    tint_array<int, 10> const x_1038 = stack;
    tint_array<int, 10> const tint_symbol_26 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    stack = tint_symbol_26;
    stack = x_1038;
    float3 const x_571 = float3(x_559[1], x_559[0], x_564[1]);
    int const x_1039 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    tint_array<int, 10> const x_1040 = stack;
    tint_array<int, 10> const tint_symbol_27 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    stack = tint_symbol_27;
    stack = x_1040;
    float2 const x_572 = float2(x_562[1], x_561[1]);
    int const x_1041 = p;
    p = 0;
    p = x_1041;
    int const x_112 = top;
    int const x_1042 = param_4;
    param_4 = 0;
    param_4 = x_1042;
    int const x_1043 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1043;
    float2 const x_573 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
    top = as_type<int>((as_type<uint>(x_112) - as_type<uint>(1)));
    int const x_1044 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    float3 const x_574 = float3(x_570[1], x_565[0], x_570[1]);
    int const x_1045 = h_1;
    h_1 = 0;
    h_1 = x_1045;
    int const x_114_save = x_112;
    float2 const x_575 = float2(x_564[1], x_564[2]);
    int const x_1046 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1046;
    int const x_115 = stack[x_114_save];
    int const x_1047 = p;
    p = 0;
    p = x_1047;
    float3 const x_576 = float3(x_573[1], x_573[1], x_565[0]);
    int const x_1048 = param_5;
    param_5 = 0;
    param_5 = x_1048;
    l_1 = x_115;
    int const x_1049 = top;
    top = 0;
    top = x_1049;
    int const x_118 = l_1;
    param_4 = x_118;
    int const x_1050 = stack[x_110_save];
    stack[x_110_save] = 0;
    stack[x_110_save] = x_1050;
    float2 const x_577 = float2(x_569[1], x_569[2]);
    int const x_120 = h_1;
    float2 const x_578 = float2(x_558[0], float3(1.0f, 2.0f, 3.0f)[1]);
    param_5 = x_120;
    int const x_1051 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1051;
    int const x_121 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_83);
    float2 const x_579 = float2(x_567[0], x_568[0]);
    int const x_1052 = param_5;
    param_5 = 0;
    param_5 = x_1052;
    p = x_121;
    int const x_1053 = param_4;
    param_4 = 0;
    param_4 = x_1053;
    int const x_122 = p;
    int const x_1054 = h_1;
    h_1 = 0;
    h_1 = x_1054;
    float2 const x_580 = float2(x_568[1], x_568[1]);
    int const x_1055 = l_1;
    l_1 = 0;
    l_1 = x_1055;
    int const x_1056 = h_1;
    h_1 = 0;
    h_1 = x_1056;
    int const x_124 = l_1;
    int const x_1057 = stack[x_110_save];
    stack[x_110_save] = 0;
    stack[x_110_save] = x_1057;
    int const x_1058 = h_1;
    h_1 = 0;
    h_1 = x_1058;
    float2 const x_582 = float2(x_567[1], x_573[0]);
    int const x_1059 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1059;
    if ((as_type<int>((as_type<uint>(x_122) - as_type<uint>(as_type<int>(1u)))) > x_124)) {
      int const x_1060 = param_4;
      param_4 = 0;
      param_4 = x_1060;
      int const x_128 = top;
      float2 const x_583 = float2(x_571[1], x_556[1]);
      int const x_1061 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1061;
      tint_array<int, 10> const x_1062 = stack;
      tint_array<int, 10> const tint_symbol_28 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      stack = tint_symbol_28;
      stack = x_1062;
      float2 const x_584 = float2(x_569[2], x_569[1]);
      float3 const x_585 = float3(x_580[1], x_577[0], x_577[0]);
      int const x_130 = l_1;
      int const x_1063 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1063;
      float2 const x_586 = float2(x_564[0], x_585[0]);
      int const x_1064 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      int const x_131_save = as_type<int>((as_type<uint>(1) + as_type<uint>(x_128)));
      int const x_1065 = stack[x_110_save];
      stack[x_110_save] = 0;
      stack[x_110_save] = x_1065;
      float3 const x_587 = float3(x_566[1], x_566[1], x_563[0]);
      int const x_1066 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      stack[x_131_save] = x_130;
      int const x_132 = top;
      int const x_1067 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1067;
      float2 const x_588 = float2(x_575[1], x_575[0]);
      int const x_1068 = stack[x_131_save];
      stack[x_131_save] = 0;
      stack[x_131_save] = x_1068;
      int const x_133 = as_type<int>((1u + as_type<uint>(x_132)));
      int const x_1069 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1069;
      float3 const x_589 = float3(x_576[2], x_588[1], x_576[2]);
      int const x_1070 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      tint_array<int, 10> const x_1071 = stack;
      tint_array<int, 10> const tint_symbol_29 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      stack = tint_symbol_29;
      stack = x_1071;
      int const x_134 = p;
      float2 const x_590 = float2(x_576[0], x_573[1]);
      int const x_1072 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1072;
      int const x_136_save = x_133;
      int const x_1073 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1073;
      stack[x_136_save] = as_type<int>((as_type<uint>(x_134) - as_type<uint>(as_type<int>(1u))));
      int const x_1074 = stack[x_96_save];
      stack[x_96_save] = 0;
      stack[x_96_save] = x_1074;
      float2 const x_591 = float2(x_569[2], x_569[1]);
      int const x_1075 = stack[x_136_save];
      stack[x_136_save] = 0;
      stack[x_136_save] = x_1075;
    }
    int const x_1076 = stack[x_96_save];
    stack[x_96_save] = 0;
    stack[x_96_save] = x_1076;
    float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[1]);
    QuicksortObject const x_1077 = *(tint_symbol_83);
    tint_array<int, 10> const tint_symbol_30 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_31 = {.numbers=tint_symbol_30};
    *(tint_symbol_83) = tint_symbol_31;
    *(tint_symbol_83) = x_1077;
    int const x_137 = p;
    int const x_1078 = stack[x_114_save];
    stack[x_114_save] = 0;
    stack[x_114_save] = x_1078;
    float3 const x_593 = float3(x_571[2], x_556[0], x_556[1]);
    int const x_1079 = p;
    p = 0;
    p = x_1079;
    float3 const x_594 = float3(x_563[2], x_563[0], x_575[0]);
    int const x_1080 = stack[x_114_save];
    stack[x_114_save] = 0;
    stack[x_114_save] = x_1080;
    int const x_139 = h_1;
    int const x_1081 = top;
    top = 0;
    top = x_1081;
    float3 const x_595 = float3(x_560[2], x_568[0], x_560[0]);
    int const x_1082 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1082;
    int const x_1083 = p;
    p = 0;
    p = x_1083;
    if ((as_type<int>((1u + as_type<uint>(x_137))) < x_139)) {
      int const x_1084 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1084;
      float2 const x_596 = float2(x_592[1], x_582[0]);
      int const x_1085 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      int const x_143 = top;
      int const x_1086 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1086;
      float3 const x_597 = float3(x_562[1], x_560[1], x_560[1]);
      int const x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
      int const x_1087 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      int const x_1088 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1088;
      int const x_145 = p;
      int const x_1089 = param_5;
      param_5 = 0;
      param_5 = x_1089;
      float3 const x_599 = float3(x_560[2], x_560[0], x_568[0]);
      int const x_1090 = p;
      p = 0;
      p = x_1090;
      float3 const x_600 = float3(x_556[0], x_580[0], x_580[0]);
      int const x_1091 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1091;
      int const x_147_save = x_144;
      int const x_1092 = stack[x_110_save];
      stack[x_110_save] = 0;
      stack[x_110_save] = x_1092;
      float2 const x_601 = float2(x_563[0], x_563[1]);
      stack[x_147_save] = as_type<int>((1u + as_type<uint>(x_145)));
      tint_array<int, 10> const x_1093 = stack;
      tint_array<int, 10> const tint_symbol_32 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      stack = tint_symbol_32;
      stack = x_1093;
      int const x_148 = top;
      int const x_1094 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1094;
      float2 const x_602 = float2(x_565[1], x_599[1]);
      tint_array<int, 10> const x_1095 = stack;
      tint_array<int, 10> const tint_symbol_33 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      stack = tint_symbol_33;
      stack = x_1095;
      int const x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(as_type<int>(1u))));
      int const x_1096 = stack[x_147_save];
      stack[x_147_save] = 0;
      stack[x_147_save] = x_1096;
      top = x_149;
      int const x_1097 = param_4;
      param_4 = 0;
      param_4 = x_1097;
      int const x_150 = h_1;
      int const x_1098 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1098;
      int const x_1099 = stack[x_96_save];
      stack[x_96_save] = 0;
      stack[x_96_save] = x_1099;
      stack[x_149] = x_150;
      int const x_1100 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1100;
      float3 const x_603 = float3(x_568[1], x_564[0], x_564[0]);
      int const x_1101 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    int const x_1102 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1102;
    {
      int const x_1103 = l_1;
      l_1 = 0;
      l_1 = x_1103;
      float2 const x_604 = float2(x_563[2], x_564[0]);
      QuicksortObject const x_1104 = *(tint_symbol_83);
      tint_array<int, 10> const tint_symbol_34 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      QuicksortObject const tint_symbol_35 = {.numbers=tint_symbol_34};
      *(tint_symbol_83) = tint_symbol_35;
      *(tint_symbol_83) = x_1104;
    }
  }
  int const x_1105 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

void main_1(thread QuicksortObject* const tint_symbol_84, thread float4* const tint_symbol_85, const constant buf0* const tint_symbol_86, thread float4* const tint_symbol_87) {
  float3 color = 0.0f;
  int i_2 = 0;
  float2 uv = 0.0f;
  float2 const x_717 = uv;
  uv = float2(0.0f);
  uv = x_717;
  i_2 = 0;
  QuicksortObject const x_721 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_36 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_37 = {.numbers=tint_symbol_36};
  *(tint_symbol_84) = tint_symbol_37;
  *(tint_symbol_84) = x_721;
  if (true) {
    QuicksortObject const x_722 = *(tint_symbol_84);
    tint_array<int, 10> const tint_symbol_38 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_39 = {.numbers=tint_symbol_38};
    *(tint_symbol_84) = tint_symbol_39;
    *(tint_symbol_84) = x_722;
    float2 const x_431 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
    int const x_158 = i_2;
    float2 const x_723 = uv;
    uv = float2(0.0f);
    uv = x_723;
    float3 const x_725 = color;
    color = float3(0.0f);
    color = x_725;
    float2 const x_432 = float2(x_431[1], x_431[1]);
    QuicksortObject const x_726 = *(tint_symbol_84);
    tint_array<int, 10> const tint_symbol_40 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_41 = {.numbers=tint_symbol_40};
    *(tint_symbol_84) = tint_symbol_41;
    *(tint_symbol_84) = x_726;
  }
  QuicksortObject const x_756 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_42 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_43 = {.numbers=tint_symbol_42};
  *(tint_symbol_84) = tint_symbol_43;
  *(tint_symbol_84) = x_756;
  float2 const x_446 = float2(float2(0.0f)[0], float2(0.0f)[0]);
  int const x_757 = i_2;
  i_2 = 0;
  i_2 = x_757;
  quicksort_(tint_symbol_84);
  QuicksortObject const x_758 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_44 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_45 = {.numbers=tint_symbol_44};
  *(tint_symbol_84) = tint_symbol_45;
  *(tint_symbol_84) = x_758;
  float4 const x_184 = *(tint_symbol_85);
  float2 const x_759 = uv;
  uv = float2(0.0f);
  uv = x_759;
  float2 const x_447 = float2(float2(0.0f)[1], float2(0.0f)[1]);
  float2 const x_760 = uv;
  uv = float2(0.0f);
  uv = x_760;
  float2 const x_185 = float2(x_184[0], x_184[1]);
  float3 const x_448 = float3(x_185[1], x_446[1], x_446[1]);
  QuicksortObject const x_761 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_46 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_47 = {.numbers=tint_symbol_46};
  *(tint_symbol_84) = tint_symbol_47;
  *(tint_symbol_84) = x_761;
  float2 const x_762 = uv;
  uv = float2(0.0f);
  uv = x_762;
  float2 const x_191 = (*(tint_symbol_86)).resolution;
  QuicksortObject const x_763 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_48 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_49 = {.numbers=tint_symbol_48};
  *(tint_symbol_84) = tint_symbol_49;
  *(tint_symbol_84) = x_763;
  float3 const x_449 = float3(x_184[1], float3(1.0f, 2.0f, 3.0f)[2], x_184[3]);
  float3 const x_764 = color;
  color = float3(0.0f);
  color = x_764;
  float2 const x_192 = (x_185 / x_191);
  QuicksortObject const x_765 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_50 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_51 = {.numbers=tint_symbol_50};
  *(tint_symbol_84) = tint_symbol_51;
  *(tint_symbol_84) = x_765;
  float2 const x_450 = float2(x_447[0], x_185[1]);
  float3 const x_766 = color;
  color = float3(0.0f);
  float3 const x_767 = color;
  color = float3(0.0f);
  color = x_767;
  color = x_766;
  uv = x_192;
  color = float3(1.0f, 2.0f, 3.0f);
  float3 const x_768 = color;
  color = float3(0.0f);
  color = x_768;
  float3 const x_451 = float3(x_185[0], x_185[1], x_446[1]);
  QuicksortObject const x_769 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_52 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_53 = {.numbers=tint_symbol_52};
  *(tint_symbol_84) = tint_symbol_53;
  *(tint_symbol_84) = x_769;
  int const x_770 = (*(tint_symbol_84)).numbers[0u];
  (*(tint_symbol_84)).numbers[0u] = 0;
  (*(tint_symbol_84)).numbers[0u] = x_770;
  int const x_201 = (*(tint_symbol_84)).numbers[0u];
  QuicksortObject const x_771 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_54 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_55 = {.numbers=tint_symbol_54};
  *(tint_symbol_84) = tint_symbol_55;
  *(tint_symbol_84) = x_771;
  int const x_772 = (*(tint_symbol_84)).numbers[0u];
  (*(tint_symbol_84)).numbers[0u] = 0;
  (*(tint_symbol_84)).numbers[0u] = x_772;
  float const x_206 = color[0];
  float const x_773 = color[0];
  color[0] = 0.0f;
  color[0] = x_773;
  float2 const x_452 = float2(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_774 = i_2;
  i_2 = 0;
  i_2 = x_774;
  QuicksortObject const x_775 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_56 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_57 = {.numbers=tint_symbol_56};
  *(tint_symbol_84) = tint_symbol_57;
  *(tint_symbol_84) = x_775;
  float3 const x_453 = float3(x_451[0], x_450[0], x_450[1]);
  color[0] = (x_206 + float(x_201));
  float2 const x_776 = uv;
  uv = float2(0.0f);
  uv = x_776;
  float2 const x_777 = uv;
  uv = float2(0.0f);
  uv = x_777;
  float2 const x_454 = float2(x_184[1], x_184[1]);
  float const x_210 = uv[0];
  float2 const x_455 = float2(x_192[1], x_192[0]);
  float const x_778 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_778;
  QuicksortObject const x_779 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_58 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_59 = {.numbers=tint_symbol_58};
  *(tint_symbol_84) = tint_symbol_59;
  *(tint_symbol_84) = x_779;
  if ((x_210 > 0.25f)) {
    int const x_780 = i_2;
    i_2 = 0;
    i_2 = x_780;
    int const x_781 = (*(tint_symbol_84)).numbers[0u];
    (*(tint_symbol_84)).numbers[0u] = 0;
    (*(tint_symbol_84)).numbers[0u] = x_781;
    float3 const x_456 = float3(float2(0.0f)[1], x_448[1], x_448[1]);
    float const x_782 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_782;
    int const x_216 = (*(tint_symbol_84)).numbers[1];
    QuicksortObject const x_783 = *(tint_symbol_84);
    tint_array<int, 10> const tint_symbol_60 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_61 = {.numbers=tint_symbol_60};
    *(tint_symbol_84) = tint_symbol_61;
    *(tint_symbol_84) = x_783;
    float2 const x_457 = float2(x_454[0], x_454[0]);
    float2 const x_784 = uv;
    uv = float2(0.0f);
    uv = x_784;
    QuicksortObject const x_785 = *(tint_symbol_84);
    tint_array<int, 10> const tint_symbol_62 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_63 = {.numbers=tint_symbol_62};
    *(tint_symbol_84) = tint_symbol_63;
    *(tint_symbol_84) = x_785;
    float2 const x_458 = float2(float3(1.0f, 2.0f, 3.0f)[2], float2(0.0f)[1]);
    int const x_786 = i_2;
    i_2 = 0;
    i_2 = x_786;
    float const x_219 = color[0];
    float const x_787 = color[0];
    color[0] = 0.0f;
    color[0] = x_787;
    float3 const x_788 = color;
    color = float3(0.0f);
    color = x_788;
    float3 const x_789 = color;
    color = float3(0.0f);
    color = x_789;
    float3 const x_459 = float3(x_454[1], x_454[1], x_447[1]);
    float const x_790 = color[0];
    color[0] = 0.0f;
    color[0] = x_790;
    color[0] = (float(x_216) + x_219);
    int const x_791 = (*(tint_symbol_84)).numbers[0u];
    (*(tint_symbol_84)).numbers[0u] = 0;
    (*(tint_symbol_84)).numbers[0u] = x_791;
  }
  float const x_792 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_792;
  float const x_793 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_793;
  float const x_223 = uv[0];
  float const x_794 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_794;
  float3 const x_460 = float3(x_453[2], x_453[1], x_453[1]);
  float2 const x_795 = uv;
  uv = float2(0.0f);
  uv = x_795;
  float const x_796 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_796;
  float2 const x_461 = float2(float2(0.0f)[1], float2(0.0f)[1]);
  float const x_797 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_797;
  if ((x_223 > 0.5f)) {
    float const x_798 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_798;
    float2 const x_462 = float2(x_446[0], x_446[0]);
    float const x_799 = color[0];
    color[0] = 0.0f;
    color[0] = x_799;
    float const x_800 = color[0];
    color[0] = 0.0f;
    color[0] = x_800;
    float3 const x_463 = float3(x_453[0], x_453[2], x_461[1]);
    float const x_801 = color[0];
    color[0] = 0.0f;
    color[0] = x_801;
    int const x_230 = (*(tint_symbol_84)).numbers[2u];
    float const x_802 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_802;
    float const x_803 = color[0];
    color[0] = 0.0f;
    color[0] = x_803;
    int const x_804 = (*(tint_symbol_84)).numbers[2u];
    (*(tint_symbol_84)).numbers[2u] = 0;
    (*(tint_symbol_84)).numbers[2u] = x_804;
    float2 const x_464 = float2(x_450[1], x_191[0]);
    float const x_805 = color[1];
    color[1] = 0.0f;
    color[1] = x_805;
    float const x_234 = color[1];
    int const x_806 = (*(tint_symbol_84)).numbers[2u];
    (*(tint_symbol_84)).numbers[2u] = 0;
    (*(tint_symbol_84)).numbers[2u] = x_806;
    float2 const x_465 = float2(x_463[0], x_185[0]);
    float const x_807 = color[0];
    color[0] = 0.0f;
    color[0] = x_807;
    int const x_808 = i_2;
    i_2 = 0;
    i_2 = x_808;
    float2 const x_466 = float2(x_455[1], float2(0.0f)[1]);
    int const x_809 = i_2;
    i_2 = 0;
    i_2 = x_809;
    color[1] = (float(x_230) + x_234);
    float const x_810 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_810;
  }
  int const x_811 = i_2;
  i_2 = 0;
  i_2 = x_811;
  float2 const x_467 = float2(x_191[0], x_191[0]);
  float const x_812 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_812;
  float const x_238 = uv[0];
  float3 const x_813 = color;
  color = float3(0.0f);
  color = x_813;
  float const x_814 = color[0];
  color[0] = 0.0f;
  color[0] = x_814;
  if ((x_238 > 0.75f)) {
    float const x_815 = color[0];
    color[0] = 0.0f;
    color[0] = x_815;
    int const x_245 = (*(tint_symbol_84)).numbers[3];
    float const x_816 = color[0];
    color[0] = 0.0f;
    color[0] = x_816;
    QuicksortObject const x_817 = *(tint_symbol_84);
    tint_array<int, 10> const tint_symbol_64 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_65 = {.numbers=tint_symbol_64};
    *(tint_symbol_84) = tint_symbol_65;
    *(tint_symbol_84) = x_817;
    float3 const x_468 = float3(x_467[0], x_467[0], x_467[0]);
    float const x_818 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_818;
    float const x_819 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_819;
    float const x_249 = color[2];
    float3 const x_820 = color;
    color = float3(0.0f);
    color = x_820;
    float3 const x_469 = float3(x_467[0], x_191[1], x_467[1]);
    float const x_821 = color[2];
    color[2] = 0.0f;
    color[2] = x_821;
    int const x_822 = (*(tint_symbol_84)).numbers[0u];
    (*(tint_symbol_84)).numbers[0u] = 0;
    (*(tint_symbol_84)).numbers[0u] = x_822;
    float2 const x_470 = float2(float2(0.0f)[0], float2(0.0f)[1]);
    float const x_823 = color[2];
    color[2] = 0.0f;
    color[2] = x_823;
    color[2] = (x_249 + float(x_245));
    float2 const x_824 = uv;
    uv = float2(0.0f);
    uv = x_824;
    float2 const x_471 = float2(x_470[1], x_470[1]);
  }
  float const x_825 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_825;
  float3 const x_472 = float3(x_454[0], x_454[1], x_454[1]);
  int const x_254 = (*(tint_symbol_84)).numbers[4];
  float const x_826 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_826;
  float3 const x_827 = color;
  color = float3(0.0f);
  color = x_827;
  float3 const x_473 = float3(x_446[1], x_453[0], x_453[0]);
  int const x_828 = (*(tint_symbol_84)).numbers[4];
  (*(tint_symbol_84)).numbers[4] = 0;
  (*(tint_symbol_84)).numbers[4] = x_828;
  float2 const x_474 = float2(x_191[0], x_184[2]);
  float const x_829 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_829;
  float const x_257 = color[1];
  float const x_830 = color[1];
  color[1] = 0.0f;
  color[1] = x_830;
  float2 const x_475 = float2(x_467[0], x_450[0]);
  float const x_831 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_831;
  float const x_832 = color[0];
  color[0] = 0.0f;
  color[0] = x_832;
  float2 const x_476 = float2(x_451[2], x_460[1]);
  color[1] = (x_257 + float(x_254));
  float3 const x_477 = float3(float2(0.0f)[0], x_472[0], float2(0.0f)[1]);
  float const x_833 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_833;
  float const x_834 = color[0];
  color[0] = 0.0f;
  color[0] = x_834;
  float2 const x_478 = float2(x_472[0], x_472[1]);
  float const x_835 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_835;
  float const x_261 = uv[1];
  int const x_836 = i_2;
  i_2 = 0;
  i_2 = x_836;
  float3 const x_479 = float3(float2(0.0f)[1], x_454[1], float2(0.0f)[0]);
  int const x_837 = (*(tint_symbol_84)).numbers[0u];
  (*(tint_symbol_84)).numbers[0u] = 0;
  (*(tint_symbol_84)).numbers[0u] = x_837;
  float const x_838 = color[1];
  color[1] = 0.0f;
  color[1] = x_838;
  float3 const x_480 = float3(x_446[0], x_446[0], float2(0.0f)[1]);
  float const x_839 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_839;
  if ((x_261 > 0.25f)) {
    float2 const x_481 = float2(x_447[0], x_480[2]);
    float3 const x_840 = color;
    color = float3(0.0f);
    color = x_840;
    int const x_267 = (*(tint_symbol_84)).numbers[5u];
    float const x_841 = color[0];
    color[0] = 0.0f;
    color[0] = x_841;
    int const x_842 = i_2;
    i_2 = 0;
    i_2 = x_842;
    int const x_843 = i_2;
    i_2 = 0;
    i_2 = x_843;
    float const x_270 = color[0];
    float const x_844 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_844;
    float3 const x_482 = float3(x_455[0], x_475[1], x_455[1]);
    QuicksortObject const x_845 = *(tint_symbol_84);
    tint_array<int, 10> const tint_symbol_66 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_67 = {.numbers=tint_symbol_66};
    *(tint_symbol_84) = tint_symbol_67;
    *(tint_symbol_84) = x_845;
    float const x_846 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_846;
    int const x_847 = i_2;
    i_2 = 0;
    i_2 = x_847;
    float3 const x_483 = float3(x_184[3], x_184[3], x_192[0]);
    float const x_848 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_848;
    color[0] = (float(x_267) + x_270);
    float3 const x_484 = float3(x_454[1], x_450[0], x_454[1]);
    float const x_849 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_849;
  }
  float const x_850 = color[0];
  color[0] = 0.0f;
  color[0] = x_850;
  float3 const x_485 = float3(x_467[0], x_450[1], x_450[0]);
  float const x_851 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_851;
  int const x_852 = (*(tint_symbol_84)).numbers[4];
  (*(tint_symbol_84)).numbers[4] = 0;
  (*(tint_symbol_84)).numbers[4] = x_852;
  float const x_274 = uv[1];
  int const x_853 = (*(tint_symbol_84)).numbers[0u];
  (*(tint_symbol_84)).numbers[0u] = 0;
  (*(tint_symbol_84)).numbers[0u] = x_853;
  if ((x_274 > 0.5f)) {
    float const x_854 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_854;
    float2 const x_486 = float2(x_480[1], x_455[1]);
    float const x_855 = color[1];
    color[1] = 0.0f;
    color[1] = x_855;
    float2 const x_487 = float2(x_449[2], x_449[1]);
    float const x_856 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_856;
    int const x_280 = (*(tint_symbol_84)).numbers[6u];
    float const x_857 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_857;
    int const x_858 = i_2;
    i_2 = 0;
    i_2 = x_858;
    int const x_859 = (*(tint_symbol_84)).numbers[4];
    (*(tint_symbol_84)).numbers[4] = 0;
    (*(tint_symbol_84)).numbers[4] = x_859;
    float2 const x_488 = float2(x_473[2], x_473[1]);
    float const x_283 = color[1];
    float2 const x_860 = uv;
    uv = float2(0.0f);
    uv = x_860;
    float const x_861 = color[0];
    color[0] = 0.0f;
    color[0] = x_861;
    float2 const x_489 = float2(x_475[1], x_475[0]);
    int const x_862 = (*(tint_symbol_84)).numbers[6u];
    (*(tint_symbol_84)).numbers[6u] = 0;
    (*(tint_symbol_84)).numbers[6u] = x_862;
    int const x_863 = (*(tint_symbol_84)).numbers[6u];
    (*(tint_symbol_84)).numbers[6u] = 0;
    (*(tint_symbol_84)).numbers[6u] = x_863;
    float2 const x_490 = float2(x_480[2], x_480[2]);
    QuicksortObject const x_864 = *(tint_symbol_84);
    tint_array<int, 10> const tint_symbol_68 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_69 = {.numbers=tint_symbol_68};
    *(tint_symbol_84) = tint_symbol_69;
    *(tint_symbol_84) = x_864;
    color[1] = (float(x_280) + x_283);
    float const x_865 = color[0];
    color[0] = 0.0f;
    color[0] = x_865;
    float2 const x_491 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_454[0]);
    float const x_866 = color[1];
    color[1] = 0.0f;
    color[1] = x_866;
  }
  float2 const x_492 = float2(x_455[1], x_455[1]);
  float const x_867 = color[0];
  color[0] = 0.0f;
  color[0] = x_867;
  float const x_287 = uv[1];
  QuicksortObject const x_868 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_70 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_71 = {.numbers=tint_symbol_70};
  *(tint_symbol_84) = tint_symbol_71;
  *(tint_symbol_84) = x_868;
  float2 const x_493 = float2(x_475[0], x_475[1]);
  float const x_869 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_869;
  float const x_870 = color[1];
  color[1] = 0.0f;
  color[1] = x_870;
  float3 const x_494 = float3(x_191[0], x_191[1], x_191[1]);
  int const x_871 = (*(tint_symbol_84)).numbers[4];
  (*(tint_symbol_84)).numbers[4] = 0;
  (*(tint_symbol_84)).numbers[4] = x_871;
  if ((x_287 > 0.75f)) {
    float3 const x_872 = color;
    color = float3(0.0f);
    color = x_872;
    float const x_873 = color[0];
    color[0] = 0.0f;
    color[0] = x_873;
    float3 const x_495 = float3(x_192[1], x_192[0], x_192[1]);
    float3 const x_874 = color;
    color = float3(0.0f);
    color = x_874;
    int const x_293 = (*(tint_symbol_84)).numbers[7];
    float const x_875 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_875;
    float3 const x_496 = float3(x_475[0], x_467[1], x_467[0]);
    float const x_876 = color[1];
    color[1] = 0.0f;
    color[1] = x_876;
    float2 const x_497 = float2(x_477[0], x_461[1]);
    int const x_877 = (*(tint_symbol_84)).numbers[0u];
    (*(tint_symbol_84)).numbers[0u] = 0;
    (*(tint_symbol_84)).numbers[0u] = x_877;
    float const x_878 = color[1];
    color[1] = 0.0f;
    color[1] = x_878;
    float3 const x_498 = float3(x_478[0], x_478[1], x_478[0]);
    float const x_879 = color[0];
    color[0] = 0.0f;
    color[0] = x_879;
    float const x_296 = color[2];
    float const x_880 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_880;
    float2 const x_499 = float2(x_184[0], x_184[1]);
    float const x_881 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_881;
    float const x_882 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_882;
    float const x_883 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_883;
    float3 const x_500 = float3(x_499[1], x_499[1], x_494[2]);
    float const x_884 = color[2];
    color[2] = 0.0f;
    color[2] = x_884;
    color[2] = (float(x_293) + x_296);
    float const x_885 = color[1];
    color[1] = 0.0f;
    color[1] = x_885;
    float2 const x_501 = float2(x_453[0], x_453[2]);
    float const x_886 = color[0];
    color[0] = 0.0f;
    color[0] = x_886;
  }
  int const x_887 = i_2;
  i_2 = 0;
  i_2 = x_887;
  float2 const x_502 = float2(x_451[1], x_192[1]);
  float2 const x_888 = uv;
  uv = float2(0.0f);
  uv = x_888;
  int const x_301 = (*(tint_symbol_84)).numbers[8];
  int const x_889 = i_2;
  i_2 = 0;
  i_2 = x_889;
  float2 const x_503 = float2(x_185[0], x_451[2]);
  int const x_890 = (*(tint_symbol_84)).numbers[8];
  (*(tint_symbol_84)).numbers[8] = 0;
  (*(tint_symbol_84)).numbers[8] = x_890;
  float const x_891 = color[1];
  color[1] = 0.0f;
  color[1] = x_891;
  float2 const x_504 = float2(x_453[1], float2(0.0f)[0]);
  float const x_892 = color[0];
  color[0] = 0.0f;
  color[0] = x_892;
  float3 const x_505 = float3(x_504[0], x_504[1], x_504[0]);
  float const x_893 = color[2];
  color[2] = 0.0f;
  color[2] = x_893;
  float const x_304 = color[2];
  float const x_894 = color[0];
  color[0] = 0.0f;
  color[0] = x_894;
  float2 const x_506 = float2(x_493[0], x_492[0]);
  int const x_895 = (*(tint_symbol_84)).numbers[4];
  (*(tint_symbol_84)).numbers[4] = 0;
  (*(tint_symbol_84)).numbers[4] = x_895;
  float const x_896 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_896;
  float2 const x_507 = float2(x_461[0], x_447[0]);
  float const x_897 = color[1];
  color[1] = 0.0f;
  color[1] = x_897;
  color[2] = (x_304 + float(x_301));
  float2 const x_898 = uv;
  uv = float2(0.0f);
  uv = x_898;
  float const x_899 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_899;
  float3 const x_508 = float3(x_461[1], x_461[0], x_506[1]);
  float const x_900 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_900;
  float const x_308 = uv[0];
  float const x_901 = color[1];
  color[1] = 0.0f;
  color[1] = x_901;
  float3 const x_509 = float3(x_503[1], x_503[0], x_448[2]);
  float const x_902 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_902;
  float const x_310 = uv[1];
  float const x_903 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_903;
  float const x_904 = color[2];
  color[2] = 0.0f;
  color[2] = x_904;
  float3 const x_510 = float3(float3(1.0f, 2.0f, 3.0f)[1], x_485[1], x_485[2]);
  float const x_905 = color[2];
  color[2] = 0.0f;
  color[2] = x_905;
  int const x_906 = i_2;
  i_2 = 0;
  i_2 = x_906;
  float2 const x_511 = float2(x_485[2], x_485[1]);
  float3 const x_907 = color;
  color = float3(0.0f);
  color = x_907;
  float const x_908 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_908;
  float3 const x_512 = float3(x_455[1], x_455[1], x_455[1]);
  int const x_909 = (*(tint_symbol_84)).numbers[4];
  (*(tint_symbol_84)).numbers[4] = 0;
  (*(tint_symbol_84)).numbers[4] = x_909;
  if ((fabs((x_308 - x_310)) < 0.25f)) {
    float const x_910 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_910;
    QuicksortObject const x_911 = *(tint_symbol_84);
    tint_array<int, 10> const tint_symbol_72 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QuicksortObject const tint_symbol_73 = {.numbers=tint_symbol_72};
    *(tint_symbol_84) = tint_symbol_73;
    *(tint_symbol_84) = x_911;
    float3 const x_513 = float3(x_505[2], x_505[0], x_448[0]);
    int const x_912 = (*(tint_symbol_84)).numbers[8];
    (*(tint_symbol_84)).numbers[8] = 0;
    (*(tint_symbol_84)).numbers[8] = x_912;
    int const x_317 = (*(tint_symbol_84)).numbers[9u];
    float3 const x_514 = float3(x_474[1], x_474[1], x_474[1]);
    float const x_913 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_913;
    float const x_320 = color[0];
    float const x_914 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_914;
    float2 const x_515 = float2(x_502[0], x_502[1]);
    float const x_915 = color[0];
    color[0] = 0.0f;
    color[0] = x_915;
    float3 const x_916 = color;
    color = float3(0.0f);
    color = x_916;
    float2 const x_516 = float2(x_452[0], x_452[0]);
    float2 const x_917 = uv;
    uv = float2(0.0f);
    uv = x_917;
    float const x_918 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_918;
    float3 const x_517 = float3(float2(0.0f)[0], float2(0.0f)[0], float2(0.0f)[1]);
    color[0] = (float(x_317) + x_320);
    float const x_919 = color[0];
    color[0] = 0.0f;
    color[0] = x_919;
    float3 const x_518 = float3(x_480[1], x_508[0], x_480[0]);
    float const x_920 = color[0];
    color[0] = 0.0f;
    color[0] = x_920;
  }
  float const x_921 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_921;
  float3 const x_325 = color;
  float const x_922 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_922;
  float3 const x_519 = float3(x_447[0], x_446[0], x_446[1]);
  float3 const x_326 = normalize(x_325);
  float const x_923 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_923;
  QuicksortObject const x_924 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_74 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_75 = {.numbers=tint_symbol_74};
  *(tint_symbol_84) = tint_symbol_75;
  *(tint_symbol_84) = x_924;
  QuicksortObject const x_925 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_76 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_77 = {.numbers=tint_symbol_76};
  *(tint_symbol_84) = tint_symbol_77;
  *(tint_symbol_84) = x_925;
  float const x_926 = color[1];
  color[1] = 0.0f;
  color[1] = x_926;
  float2 const x_520 = float2(x_506[1], x_519[1]);
  float const x_927 = color[1];
  color[1] = 0.0f;
  color[1] = x_927;
  float4 const x_330 = float4(x_326[0], x_326[1], x_326[2], 1.0f);
  float const x_928 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_928;
  float3 const x_521 = float3(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1], x_520[1]);
  float const x_929 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_929;
  *(tint_symbol_87) = x_330;
  QuicksortObject const x_930 = *(tint_symbol_84);
  tint_array<int, 10> const tint_symbol_78 = tint_array<int, 10>{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  QuicksortObject const tint_symbol_79 = {.numbers=tint_symbol_78};
  *(tint_symbol_84) = tint_symbol_79;
  *(tint_symbol_84) = x_930;
  float3 const x_522 = float3(x_330[3], x_330[1], x_493[0]);
  float const x_931 = color[0];
  color[0] = 0.0f;
  color[0] = x_931;
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};

struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_88, thread QuicksortObject* const tint_symbol_89, const constant buf0* const tint_symbol_90, thread float4* const tint_symbol_91) {
  *(tint_symbol_88) = gl_FragCoord_param;
  main_1(tint_symbol_89, tint_symbol_88, tint_symbol_90, tint_symbol_91);
  main_out const tint_symbol_80 = {.x_GLF_color_1=*(tint_symbol_91)};
  return tint_symbol_80;
}

fragment tint_symbol_1 tint_symbol(const constant buf0* tint_symbol_94 [[buffer(0)]], float4 gl_FragCoord_param [[position]]) {
  thread float4 tint_symbol_92 = 0.0f;
  thread QuicksortObject tint_symbol_93 = {};
  thread float4 tint_symbol_95 = 0.0f;
  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_92), &(tint_symbol_93), tint_symbol_94, &(tint_symbol_95));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

