struct tint_array_wrapper {
  int arr[10];
};
struct QuicksortObject {
  tint_array_wrapper numbers;
};

static QuicksortObject obj = (QuicksortObject)0;
static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
cbuffer cbuffer_x_188 : register(b0, space0) {
  uint4 x_188[1];
};
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

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

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

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

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

struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 gl_FragCoord_param : SV_Position;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 : SV_Target0;
};

tint_symbol_2 main(tint_symbol_1 tint_symbol) {
  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  const main_out tint_symbol_3 = {x_GLF_color};
  const tint_symbol_2 tint_symbol_83 = {tint_symbol_3.x_GLF_color_1};
  return tint_symbol_83;
}
