#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[10];
};
struct QuicksortObject {
  tint_array_wrapper numbers;
};
struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct main_out {
  float4 x_GLF_color;
};
struct tint_symbol_2 {
  float4 x_GLF_color [[color(0)]];
};

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_83) {
  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).z, float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
  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.y, x_523.x, x_523.y);
  int const x_935 = temp;
  temp = 0;
  temp = x_935;
  int const x_30_save = x_28;
  int const x_936 = (*(tint_symbol_83)).numbers.arr[x_30_save];
  (*(tint_symbol_83)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_30_save] = x_936;
  int const x_31 = (*(tint_symbol_83)).numbers.arr[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.z, float3(1.0f, 2.0f, 3.0f).x, x_523.y);
  int const x_939 = *(i);
  *(i) = 0;
  *(i) = x_939;
  int const x_32 = *(i);
  int const x_940 = (*(tint_symbol_83)).numbers.arr[x_30_save];
  (*(tint_symbol_83)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_83)).numbers.arr[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.x, x_525.z, x_525.z);
  int const x_942 = (*(tint_symbol_83)).numbers.arr[x_30_save];
  (*(tint_symbol_83)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_30_save] = x_942;
  int const x_34_save = x_33;
  int const x_35 = (*(tint_symbol_83)).numbers.arr[x_34_save];
  QuicksortObject const x_943 = *(tint_symbol_83);
  tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_5 = {.numbers=tint_symbol_4};
  *(tint_symbol_83) = tint_symbol_5;
  *(tint_symbol_83) = x_943;
  float2 const x_527 = float2(x_526.x, x_526.x);
  int const x_36_save = x_32;
  float3 const x_528 = float3(x_524.x, x_524.z, x_524.x);
  (*(tint_symbol_83)).numbers.arr[x_36_save] = x_35;
  QuicksortObject const x_944 = *(tint_symbol_83);
  tint_array_wrapper const tint_symbol_6 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_7 = {.numbers=tint_symbol_6};
  *(tint_symbol_83) = tint_symbol_7;
  *(tint_symbol_83) = x_944;
  float3 const x_529 = float3(x_526.y, x_526.z, x_526.x);
  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.z, x_529.y);
  int const x_947 = (*(tint_symbol_83)).numbers.arr[x_34_save];
  (*(tint_symbol_83)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_83)).numbers.arr[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.x, x_526.y, x_526.x);
  int const x_949 = (*(tint_symbol_83)).numbers.arr[x_36_save];
  (*(tint_symbol_83)).numbers.arr[x_36_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_36_save] = x_949;
  QuicksortObject const x_950 = *(tint_symbol_83);
  tint_array_wrapper const tint_symbol_8 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_9 = {.numbers=tint_symbol_8};
  *(tint_symbol_83) = tint_symbol_9;
  *(tint_symbol_83) = x_950;
  float3 const x_532 = float3(x_528.x, x_528.y, x_528.x);
  int const x_951 = (*(tint_symbol_83)).numbers.arr[x_34_save];
  (*(tint_symbol_83)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_34_save] = x_951;
  (*(tint_symbol_83)).numbers.arr[x_37] = x_38;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_84) {
  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_84)).numbers.arr[x_42_save];
  (*(tint_symbol_84)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_84)).numbers.arr[x_42_save] = x_954;
  int const x_43 = (*(tint_symbol_84)).numbers.arr[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).z, float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
  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.y, x_534.z, x_534.y);
  int const x_959 = *(l);
  *(l) = 0;
  *(l) = x_959;
  i_1 = (x_45 - as_type<int>(1u));
  int const x_49 = *(l);
  float3 const x_536 = float3(x_534.x, x_534.z, x_535.x);
  j_1 = 10;
  QuicksortObject const x_960 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_10 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_11 = {.numbers=tint_symbol_10};
  *(tint_symbol_84) = tint_symbol_11;
  *(tint_symbol_84) = 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).y, float3(1.0f, 2.0f, 3.0f).z);
    QuicksortObject const x_964 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_12 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_13 = {.numbers=tint_symbol_12};
    *(tint_symbol_84) = tint_symbol_13;
    *(tint_symbol_84) = 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.x, x_537.y, x_534.z);
    int const x_968 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= (x_56 - as_type<int>(1u)))) {
    } else {
      break;
    }
    int const x_60 = j_1;
    int const x_969 = (*(tint_symbol_84)).numbers.arr[x_42_save];
    (*(tint_symbol_84)).numbers.arr[x_42_save] = 0;
    (*(tint_symbol_84)).numbers.arr[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.x, x_535.z, x_537.x);
    int const x_971 = param_1;
    param_1 = 0;
    param_1 = x_971;
    int const x_62 = (*(tint_symbol_84)).numbers.arr[x_61_save];
    QuicksortObject const x_972 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_14 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_15 = {.numbers=tint_symbol_14};
    *(tint_symbol_84) = tint_symbol_15;
    *(tint_symbol_84) = x_972;
    int const x_63 = pivot;
    float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f).y, x_534.z);
    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.y, x_534.x, x_534.y);
    int const x_975 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      float3 const x_542 = float3(x_541.z, x_541.x, x_541.x);
      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.x, x_541.y);
      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 = (x_67 + 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).z, float3(1.0f, 2.0f, 3.0f).y, x_540.x);
      int const x_70 = i_1;
      float2 const x_545 = float2(x_537.y, x_538.x);
      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.x, x_545.x);
      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_84);
      int const x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    QuicksortObject const x_986 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_16 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_17 = {.numbers=tint_symbol_16};
    *(tint_symbol_84) = tint_symbol_17;
    *(tint_symbol_84) = 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.x, x_541.z, x_541.z);
      int const x_989 = (*(tint_symbol_84)).numbers.arr[x_61_save];
      (*(tint_symbol_84)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_84)).numbers.arr[x_61_save] = x_989;
      int const x_990 = param;
      param = 0;
      param = x_990;
      j_1 = (1 + x_74);
      int const x_991 = param_1;
      param_1 = 0;
      param_1 = x_991;
      float3 const x_548 = float3(x_541.y, x_541.z, x_541.x);
      int const x_992 = (*(tint_symbol_84)).numbers.arr[x_61_save];
      (*(tint_symbol_84)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_84)).numbers.arr[x_61_save] = x_992;
    }
  }
  int const x_76 = i_1;
  int const x_993 = (*(tint_symbol_84)).numbers.arr[x_42_save];
  (*(tint_symbol_84)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_84)).numbers.arr[x_42_save] = x_993;
  float2 const x_549 = float2(x_534.x, x_534.y);
  QuicksortObject const x_994 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_18 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_19 = {.numbers=tint_symbol_18};
  *(tint_symbol_84) = tint_symbol_19;
  *(tint_symbol_84) = x_994;
  int const x_995 = *(h);
  *(h) = 0;
  *(h) = x_995;
  i_1 = (1 + 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.x, x_534.x);
  int const x_998 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  float2 const x_551 = float2(x_534.y, x_536.x);
  int const x_999 = pivot;
  pivot = 0;
  pivot = x_999;
  int const x_81 = *(h);
  float2 const x_552 = float2(x_550.x, x_549.y);
  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.y, x_552.x);
  int const x_1002 = *(h);
  *(h) = 0;
  *(h) = x_1002;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_84);
  int const x_1003 = *(l);
  *(l) = 0;
  *(l) = x_1003;
  float2 const x_554 = float2(x_536.z, float3(1.0f, 2.0f, 3.0f).y);
  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.y, x_534.x);
  int const x_1006 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

void quicksort_(thread QuicksortObject* const tint_symbol_85) {
  int param_4 = 0;
  int h_1 = 0;
  int p = 0;
  int l_1 = 0;
  int top = 0;
  tint_array_wrapper 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_wrapper const x_1008 = stack;
  tint_array_wrapper const tint_symbol_20 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_20;
  stack = x_1008;
  float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y);
  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).x, float3(1.0f, 2.0f, 3.0f).x);
  int const x_1011 = p;
  p = 0;
  p = x_1011;
  int const x_94 = (x_93 + as_type<int>(1u));
  int const x_1012 = top;
  top = 0;
  top = x_1012;
  float2 const x_558 = float2(x_556.y, x_557.y);
  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.y, x_557.x, x_557.x);
  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_85);
  tint_array_wrapper const tint_symbol_21 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_22 = {.numbers=tint_symbol_21};
  *(tint_symbol_85) = tint_symbol_22;
  *(tint_symbol_85) = x_1016;
  float3 const x_560 = float3(x_559.y, x_559.x, x_557.x);
  int const x_96_save = x_94;
  tint_array_wrapper const x_1017 = stack;
  tint_array_wrapper const tint_symbol_23 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_23;
  stack = x_1017;
  float3 const x_561 = float3(x_556.y, x_556.y, x_556.y);
  int const x_1018 = l_1;
  l_1 = 0;
  l_1 = 0;
  stack.arr[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).z, x_558.y, float3(1.0f, 2.0f, 3.0f).y);
  int const x_1021 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1021;
  int const x_98 = (x_97 + 1);
  int const x_1022 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1022;
  float3 const x_563 = float3(x_559.x, x_559.z, x_556.y);
  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.x, x_561.x, x_558.y);
  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.z, x_564.z);
  int const x_1027 = p;
  p = 0;
  p = x_1027;
  stack.arr[x_100_save] = x_99;
  while (true) {
    float3 const x_566 = float3(x_563.x, x_563.x, x_563.x);
    int const x_1028 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    tint_array_wrapper const x_1029 = stack;
    tint_array_wrapper const tint_symbol_24 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_24;
    stack = x_1029;
    int const x_106 = top;
    tint_array_wrapper const x_1030 = stack;
    tint_array_wrapper const tint_symbol_25 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_25;
    stack = x_1030;
    float2 const x_567 = float2(x_558.x, x_564.z);
    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_85);
    tint_array_wrapper const tint_symbol_26 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_27 = {.numbers=tint_symbol_26};
    *(tint_symbol_85) = tint_symbol_27;
    *(tint_symbol_85) = x_1032;
    float3 const x_568 = float3(x_559.y, x_559.x, x_563.y);
    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.x, x_567.y, x_565.x);
    int const x_1034 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    float2 const x_570 = float2(x_556.x, x_556.x);
    int const x_1035 = p;
    p = 0;
    p = x_1035;
    top = (x_108 - 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.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1037;
    int const x_111 = stack.arr[x_110_save];
    tint_array_wrapper const x_1038 = stack;
    tint_array_wrapper const tint_symbol_28 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_28;
    stack = x_1038;
    float3 const x_571 = float3(x_559.y, x_559.x, x_564.y);
    int const x_1039 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    tint_array_wrapper const x_1040 = stack;
    tint_array_wrapper const tint_symbol_29 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_29;
    stack = x_1040;
    float2 const x_572 = float2(x_562.y, x_561.y);
    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.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1043;
    float2 const x_573 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
    top = (x_112 - 1);
    int const x_1044 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    float3 const x_574 = float3(x_570.y, x_565.x, x_570.y);
    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.y, x_564.z);
    int const x_1046 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1046;
    int const x_115 = stack.arr[x_114_save];
    int const x_1047 = p;
    p = 0;
    p = x_1047;
    float3 const x_576 = float3(x_573.y, x_573.y, x_565.x);
    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.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1050;
    float2 const x_577 = float2(x_569.y, x_569.z);
    int const x_120 = h_1;
    float2 const x_578 = float2(x_558.x, float3(1.0f, 2.0f, 3.0f).y);
    param_5 = x_120;
    int const x_1051 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1051;
    int const x_121 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_85);
    float2 const x_579 = float2(x_567.x, x_568.x);
    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.y, x_568.y);
    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.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[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.y, x_573.x);
    int const x_1059 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1059;
    if (((x_122 - 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.y, x_556.y);
      int const x_1061 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1061;
      tint_array_wrapper const x_1062 = stack;
      tint_array_wrapper const tint_symbol_30 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_30;
      stack = x_1062;
      float2 const x_584 = float2(x_569.z, x_569.y);
      float3 const x_585 = float3(x_580.y, x_577.x, x_577.x);
      int const x_130 = l_1;
      int const x_1063 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1063;
      float2 const x_586 = float2(x_564.x, x_585.x);
      int const x_1064 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      int const x_131_save = (1 + x_128);
      int const x_1065 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1065;
      float3 const x_587 = float3(x_566.y, x_566.y, x_563.x);
      int const x_1066 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      stack.arr[x_131_save] = x_130;
      int const x_132 = top;
      int const x_1067 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1067;
      float2 const x_588 = float2(x_575.y, x_575.x);
      int const x_1068 = stack.arr[x_131_save];
      stack.arr[x_131_save] = 0;
      stack.arr[x_131_save] = x_1068;
      int const x_133 = as_type<int>((1u + as_type<uint>(x_132)));
      int const x_1069 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1069;
      float3 const x_589 = float3(x_576.z, x_588.y, x_576.z);
      int const x_1070 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      tint_array_wrapper const x_1071 = stack;
      tint_array_wrapper const tint_symbol_31 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_31;
      stack = x_1071;
      int const x_134 = p;
      float2 const x_590 = float2(x_576.x, x_573.y);
      int const x_1072 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1072;
      int const x_136_save = x_133;
      int const x_1073 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1073;
      stack.arr[x_136_save] = (x_134 - as_type<int>(1u));
      int const x_1074 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1074;
      float2 const x_591 = float2(x_569.z, x_569.y);
      int const x_1075 = stack.arr[x_136_save];
      stack.arr[x_136_save] = 0;
      stack.arr[x_136_save] = x_1075;
    }
    int const x_1076 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1076;
    float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).y);
    QuicksortObject const x_1077 = *(tint_symbol_85);
    tint_array_wrapper const tint_symbol_32 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_33 = {.numbers=tint_symbol_32};
    *(tint_symbol_85) = tint_symbol_33;
    *(tint_symbol_85) = x_1077;
    int const x_137 = p;
    int const x_1078 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1078;
    float3 const x_593 = float3(x_571.z, x_556.x, x_556.y);
    int const x_1079 = p;
    p = 0;
    p = x_1079;
    float3 const x_594 = float3(x_563.z, x_563.x, x_575.x);
    int const x_1080 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[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.z, x_568.x, x_560.x);
    int const x_1082 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[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.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1084;
      float2 const x_596 = float2(x_592.y, x_582.x);
      int const x_1085 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      int const x_143 = top;
      int const x_1086 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1086;
      float3 const x_597 = float3(x_562.y, x_560.y, x_560.y);
      int const x_144 = (x_143 + 1);
      int const x_1087 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      int const x_1088 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[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.z, x_560.x, x_568.x);
      int const x_1090 = p;
      p = 0;
      p = x_1090;
      float3 const x_600 = float3(x_556.x, x_580.x, x_580.x);
      int const x_1091 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1091;
      int const x_147_save = x_144;
      int const x_1092 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1092;
      float2 const x_601 = float2(x_563.x, x_563.y);
      stack.arr[x_147_save] = as_type<int>((1u + as_type<uint>(x_145)));
      tint_array_wrapper const x_1093 = stack;
      tint_array_wrapper const tint_symbol_34 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_34;
      stack = x_1093;
      int const x_148 = top;
      int const x_1094 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1094;
      float2 const x_602 = float2(x_565.y, x_599.y);
      tint_array_wrapper const x_1095 = stack;
      tint_array_wrapper const tint_symbol_35 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_35;
      stack = x_1095;
      int const x_149 = (x_148 + as_type<int>(1u));
      int const x_1096 = stack.arr[x_147_save];
      stack.arr[x_147_save] = 0;
      stack.arr[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.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1098;
      int const x_1099 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1099;
      stack.arr[x_149] = x_150;
      int const x_1100 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1100;
      float3 const x_603 = float3(x_568.y, x_564.x, x_564.x);
      int const x_1101 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    int const x_1102 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[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.z, x_564.x);
      QuicksortObject const x_1104 = *(tint_symbol_85);
      tint_array_wrapper const tint_symbol_36 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      QuicksortObject const tint_symbol_37 = {.numbers=tint_symbol_36};
      *(tint_symbol_85) = tint_symbol_37;
      *(tint_symbol_85) = x_1104;
    }
  }
  int const x_1105 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

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

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_188 [[buffer(0)]]) {
  thread float4 tint_symbol_89 = 0.0f;
  thread QuicksortObject tint_symbol_90 = {};
  thread float4 tint_symbol_91 = 0.0f;
  tint_symbol_89 = gl_FragCoord_param;
  main_1(x_188, &(tint_symbol_90), &(tint_symbol_89), &(tint_symbol_91));
  main_out const tint_symbol_3 = {.x_GLF_color=tint_symbol_91};
  tint_symbol_2 const tint_symbol_82 = {.x_GLF_color=tint_symbol_3.x_GLF_color};
  return tint_symbol_82;
}

