#version 310 es
precision mediump float;

struct QuicksortObject {
  int numbers[10];
};
struct buf0 {
  vec2 resolution;
};

QuicksortObject obj = QuicksortObject(int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
layout (binding = 0) uniform buf0_1 {
  vec2 resolution;
} x_188;
vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);

void swap_i1_i1_(inout int i, inout int j) {
  int temp = 0;
  int x_932 = temp;
  temp = 0;
  temp = x_932;
  vec3 x_523 = vec3(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).z);
  int x_933 = i;
  i = 0;
  i = x_933;
  int x_28 = i;
  int x_934 = j;
  j = 0;
  j = x_934;
  vec3 x_524 = vec3(x_523.y, x_523.x, x_523.y);
  int x_935 = temp;
  temp = 0;
  temp = x_935;
  int x_30_save = x_28;
  int x_936 = obj.numbers[x_30_save];
  obj.numbers[x_30_save] = 0;
  obj.numbers[x_30_save] = x_936;
  int x_31 = obj.numbers[x_30_save];
  int x_937 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  int x_938 = j;
  j = 0;
  j = x_938;
  vec3 x_525 = vec3(x_523.z, vec3(1.0f, 2.0f, 3.0f).x, x_523.y);
  int x_939 = i;
  i = 0;
  i = x_939;
  int x_32 = i;
  int x_940 = obj.numbers[x_30_save];
  obj.numbers[x_30_save] = 0;
  obj.numbers[x_30_save] = x_940;
  int x_33 = j;
  int x_941 = i;
  i = 0;
  i = x_941;
  vec3 x_526 = vec3(x_525.x, x_525.z, x_525.z);
  int x_942 = obj.numbers[x_30_save];
  obj.numbers[x_30_save] = 0;
  obj.numbers[x_30_save] = x_942;
  int x_34_save = x_33;
  int x_35 = obj.numbers[x_34_save];
  QuicksortObject x_943 = obj;
  int tint_symbol_6[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  QuicksortObject tint_symbol_7 = QuicksortObject(tint_symbol_6);
  obj = tint_symbol_7;
  obj = x_943;
  vec2 x_527 = vec2(x_526.x, x_526.x);
  int x_36_save = x_32;
  vec3 x_528 = vec3(x_524.x, x_524.z, x_524.x);
  obj.numbers[x_36_save] = x_35;
  QuicksortObject x_944 = obj;
  int tint_symbol_8[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  QuicksortObject tint_symbol_9 = QuicksortObject(tint_symbol_8);
  obj = tint_symbol_9;
  obj = x_944;
  vec3 x_529 = vec3(x_526.y, x_526.z, x_526.x);
  int x_945 = i;
  i = 0;
  i = x_945;
  int x_37 = j;
  int x_946 = temp;
  temp = 0;
  temp = x_946;
  vec2 x_530 = vec2(x_529.z, x_529.y);
  int x_947 = obj.numbers[x_34_save];
  obj.numbers[x_34_save] = 0;
  obj.numbers[x_34_save] = x_947;
  int x_38 = temp;
  int x_948 = j;
  j = 0;
  j = x_948;
  vec3 x_531 = vec3(x_527.x, x_526.y, x_526.x);
  int x_949 = obj.numbers[x_36_save];
  obj.numbers[x_36_save] = 0;
  obj.numbers[x_36_save] = x_949;
  QuicksortObject x_950 = obj;
  int tint_symbol_10[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  QuicksortObject tint_symbol_11 = QuicksortObject(tint_symbol_10);
  obj = tint_symbol_11;
  obj = x_950;
  vec3 x_532 = vec3(x_528.x, x_528.y, x_528.x);
  int x_951 = obj.numbers[x_34_save];
  obj.numbers[x_34_save] = 0;
  obj.numbers[x_34_save] = x_951;
  obj.numbers[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;
  vec2 x_537 = vec2(0.0f, 0.0f);
  vec3 x_538 = vec3(0.0f, 0.0f, 0.0f);
  int x_952 = h;
  h = 0;
  h = x_952;
  int x_41 = h;
  int x_953 = l;
  l = 0;
  l = x_953;
  int x_42_save = x_41;
  int x_954 = obj.numbers[x_42_save];
  obj.numbers[x_42_save] = 0;
  obj.numbers[x_42_save] = x_954;
  int x_43 = obj.numbers[x_42_save];
  int x_955 = param_3;
  param_3 = 0;
  param_3 = x_955;
  vec3 x_534 = vec3(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).z);
  int x_956 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  int x_45 = l;
  int x_957 = h;
  h = 0;
  h = x_957;
  int x_958 = j_1;
  j_1 = 0;
  j_1 = x_958;
  vec3 x_535 = vec3(x_534.y, x_534.z, x_534.y);
  int x_959 = l;
  l = 0;
  l = x_959;
  i_1 = (x_45 - int(1u));
  int x_49 = l;
  vec3 x_536 = vec3(x_534.x, x_534.z, x_535.x);
  j_1 = 10;
  QuicksortObject x_960 = obj;
  int tint_symbol_12[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  QuicksortObject tint_symbol_13 = QuicksortObject(tint_symbol_12);
  obj = tint_symbol_13;
  obj = x_960;
  while (true) {
    int x_961 = pivot;
    pivot = 0;
    pivot = x_961;
    int x_962 = param_1;
    param_1 = 0;
    param_1 = x_962;
    int x_55 = j_1;
    int x_963 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = vec2(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).z);
    QuicksortObject x_964 = obj;
    int tint_symbol_14[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    QuicksortObject tint_symbol_15 = QuicksortObject(tint_symbol_14);
    obj = tint_symbol_15;
    obj = x_964;
    int x_56 = h;
    int x_965 = h;
    h = 0;
    h = x_965;
    int x_966 = param;
    param = 0;
    param = x_966;
    int x_967 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = vec3(x_534.x, x_537.y, x_534.z);
    int x_968 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= (x_56 - int(1u)))) {
    } else {
      break;
    }
    int x_60 = j_1;
    int x_969 = obj.numbers[x_42_save];
    obj.numbers[x_42_save] = 0;
    obj.numbers[x_42_save] = x_969;
    int x_61_save = x_60;
    int x_970 = h;
    h = 0;
    h = x_970;
    vec3 x_539 = vec3(x_537.x, x_535.z, x_537.x);
    int x_971 = param_1;
    param_1 = 0;
    param_1 = x_971;
    int x_62 = obj.numbers[x_61_save];
    QuicksortObject x_972 = obj;
    int tint_symbol_16[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    QuicksortObject tint_symbol_17 = QuicksortObject(tint_symbol_16);
    obj = tint_symbol_17;
    obj = x_972;
    int x_63 = pivot;
    vec2 x_540 = vec2(vec3(1.0f, 2.0f, 3.0f).y, x_534.z);
    int x_973 = i_1;
    i_1 = 0;
    i_1 = x_973;
    int x_974 = l;
    l = 0;
    l = x_974;
    vec3 x_541 = vec3(x_534.y, x_534.x, x_534.y);
    int x_975 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      vec3 x_542 = vec3(x_541.z, x_541.x, x_541.x);
      int x_976 = param_3;
      param_3 = 0;
      param_3 = x_976;
      int x_67 = i_1;
      int x_977 = pivot;
      pivot = 0;
      pivot = x_977;
      vec2 x_543 = vec2(x_539.x, x_541.y);
      int x_978 = i_1;
      i_1 = 0;
      i_1 = x_978;
      int x_979 = param;
      param = 0;
      param = x_979;
      i_1 = (x_67 + int(1u));
      int x_980 = l;
      l = 0;
      l = x_980;
      vec3 x_544 = vec3(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).y, x_540.x);
      int x_70 = i_1;
      vec2 x_545 = vec2(x_537.y, x_538.x);
      int x_981 = param;
      param = 0;
      param = x_981;
      param = x_70;
      int x_982 = param;
      param = 0;
      param = x_982;
      vec2 x_546 = vec2(x_545.x, x_545.x);
      int x_983 = i_1;
      i_1 = 0;
      i_1 = x_983;
      param_1 = j_1;
      int x_984 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(param, param_1);
      int x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    QuicksortObject x_986 = obj;
    int tint_symbol_18[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    QuicksortObject tint_symbol_19 = QuicksortObject(tint_symbol_18);
    obj = tint_symbol_19;
    obj = x_986;
    {
      int x_987 = h;
      h = 0;
      h = x_987;
      int x_74 = j_1;
      int x_988 = h;
      h = 0;
      h = x_988;
      vec3 x_547 = vec3(x_539.x, x_541.z, x_541.z);
      int x_989 = obj.numbers[x_61_save];
      obj.numbers[x_61_save] = 0;
      obj.numbers[x_61_save] = x_989;
      int x_990 = param;
      param = 0;
      param = x_990;
      j_1 = (1 + x_74);
      int x_991 = param_1;
      param_1 = 0;
      param_1 = x_991;
      vec3 x_548 = vec3(x_541.y, x_541.z, x_541.x);
      int x_992 = obj.numbers[x_61_save];
      obj.numbers[x_61_save] = 0;
      obj.numbers[x_61_save] = x_992;
    }
  }
  int x_76 = i_1;
  int x_993 = obj.numbers[x_42_save];
  obj.numbers[x_42_save] = 0;
  obj.numbers[x_42_save] = x_993;
  vec2 x_549 = vec2(x_534.x, x_534.y);
  QuicksortObject x_994 = obj;
  int tint_symbol_20[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  QuicksortObject tint_symbol_21 = QuicksortObject(tint_symbol_20);
  obj = tint_symbol_21;
  obj = x_994;
  int x_995 = h;
  h = 0;
  h = x_995;
  i_1 = (1 + x_76);
  int x_996 = param_1;
  param_1 = 0;
  param_1 = x_996;
  int x_79 = i_1;
  int x_997 = j_1;
  j_1 = 0;
  j_1 = x_997;
  vec2 x_550 = vec2(x_534.x, x_534.x);
  int x_998 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  vec2 x_551 = vec2(x_534.y, x_536.x);
  int x_999 = pivot;
  pivot = 0;
  pivot = x_999;
  int x_81 = h;
  vec2 x_552 = vec2(x_550.x, x_549.y);
  int x_1000 = h;
  h = 0;
  h = x_1000;
  param_3 = x_81;
  int x_1001 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  vec2 x_553 = vec2(x_549.y, x_552.x);
  int x_1002 = h;
  h = 0;
  h = x_1002;
  swap_i1_i1_(param_2, param_3);
  int x_1003 = l;
  l = 0;
  l = x_1003;
  vec2 x_554 = vec2(x_536.z, vec3(1.0f, 2.0f, 3.0f).y);
  int x_1004 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  int x_83 = i_1;
  int x_1005 = param;
  param = 0;
  param = x_1005;
  vec2 x_555 = vec2(x_534.y, x_534.x);
  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;
  int stack[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  int param_5 = 0;
  l_1 = 0;
  int x_1007 = param_5;
  param_5 = 0;
  param_5 = x_1007;
  h_1 = 9;
  int x_1008[10] = stack;
  int tint_symbol_22[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  stack = tint_symbol_22;
  stack = x_1008;
  vec2 x_556 = vec2(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).y);
  int x_1009 = param_5;
  param_5 = 0;
  param_5 = x_1009;
  top = -1;
  int x_1010 = p;
  p = 0;
  p = x_1010;
  int x_93 = top;
  vec2 x_557 = vec2(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).x);
  int x_1011 = p;
  p = 0;
  p = x_1011;
  int x_94 = (x_93 + int(1u));
  int x_1012 = top;
  top = 0;
  top = x_1012;
  vec2 x_558 = vec2(x_556.y, x_557.y);
  int x_1013 = param_4;
  param_4 = 0;
  param_4 = x_1013;
  top = x_94;
  int x_1014 = h_1;
  h_1 = 0;
  h_1 = x_1014;
  vec3 x_559 = vec3(x_557.y, x_557.x, x_557.x);
  int x_1015 = param_4;
  param_4 = 0;
  param_4 = x_1015;
  int x_95 = l_1;
  QuicksortObject x_1016 = obj;
  int tint_symbol_23[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  QuicksortObject tint_symbol_24 = QuicksortObject(tint_symbol_23);
  obj = tint_symbol_24;
  obj = x_1016;
  vec3 x_560 = vec3(x_559.y, x_559.x, x_557.x);
  int x_96_save = x_94;
  int x_1017[10] = stack;
  int tint_symbol_25[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  stack = tint_symbol_25;
  stack = x_1017;
  vec3 x_561 = vec3(x_556.y, x_556.y, x_556.y);
  int x_1018 = l_1;
  l_1 = 0;
  l_1 = 0;
  stack[x_96_save] = x_95;
  int x_1019 = param_5;
  param_5 = 0;
  param_5 = x_1019;
  int x_97 = top;
  int x_1020 = param_4;
  param_4 = 0;
  param_4 = x_1020;
  vec3 x_562 = vec3(vec3(1.0f, 2.0f, 3.0f).z, x_558.y, vec3(1.0f, 2.0f, 3.0f).y);
  int x_1021 = stack[x_96_save];
  stack[x_96_save] = 0;
  stack[x_96_save] = x_1021;
  int x_98 = (x_97 + 1);
  int x_1022 = stack[x_96_save];
  stack[x_96_save] = 0;
  stack[x_96_save] = x_1022;
  vec3 x_563 = vec3(x_559.x, x_559.z, x_556.y);
  top = x_98;
  int x_1023 = param_4;
  param_4 = 0;
  param_4 = x_1023;
  int x_99 = h_1;
  int x_1024 = param_4;
  param_4 = 0;
  param_4 = x_1024;
  vec3 x_564 = vec3(x_558.x, x_561.x, x_558.y);
  int x_1025 = l_1;
  l_1 = 0;
  l_1 = x_1025;
  int x_100_save = x_98;
  int x_1026 = param_5;
  param_5 = 0;
  param_5 = x_1026;
  vec2 x_565 = vec2(x_564.z, x_564.z);
  int x_1027 = p;
  p = 0;
  p = x_1027;
  stack[x_100_save] = x_99;
  while (true) {
    vec3 x_566 = vec3(x_563.x, x_563.x, x_563.x);
    int x_1028 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    int x_1029[10] = stack;
    int tint_symbol_26[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = tint_symbol_26;
    stack = x_1029;
    int x_106 = top;
    int x_1030[10] = stack;
    int tint_symbol_27[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = tint_symbol_27;
    stack = x_1030;
    vec2 x_567 = vec2(x_558.x, x_564.z);
    int x_1031 = param_4;
    param_4 = 0;
    param_4 = x_1031;
    if ((x_106 >= int(0u))) {
    } else {
      break;
    }
    QuicksortObject x_1032 = obj;
    int tint_symbol_28[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    QuicksortObject tint_symbol_29 = QuicksortObject(tint_symbol_28);
    obj = tint_symbol_29;
    obj = x_1032;
    vec3 x_568 = vec3(x_559.y, x_559.x, x_563.y);
    int x_1033 = param_4;
    param_4 = 0;
    param_4 = x_1033;
    int x_108 = top;
    vec3 x_569 = vec3(x_565.x, x_567.y, x_565.x);
    int x_1034 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    vec2 x_570 = vec2(x_556.x, x_556.x);
    int x_1035 = p;
    p = 0;
    p = x_1035;
    top = (x_108 - int(1u));
    int x_1036 = p;
    p = 0;
    p = x_1036;
    int x_110_save = x_108;
    int x_1037 = stack[x_96_save];
    stack[x_96_save] = 0;
    stack[x_96_save] = x_1037;
    int x_111 = stack[x_110_save];
    int x_1038[10] = stack;
    int tint_symbol_30[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = tint_symbol_30;
    stack = x_1038;
    vec3 x_571 = vec3(x_559.y, x_559.x, x_564.y);
    int x_1039 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    int x_1040[10] = stack;
    int tint_symbol_31[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = tint_symbol_31;
    stack = x_1040;
    vec2 x_572 = vec2(x_562.y, x_561.y);
    int x_1041 = p;
    p = 0;
    p = x_1041;
    int x_112 = top;
    int x_1042 = param_4;
    param_4 = 0;
    param_4 = x_1042;
    int x_1043 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1043;
    vec2 x_573 = vec2(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).z);
    top = (x_112 - 1);
    int x_1044 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    vec3 x_574 = vec3(x_570.y, x_565.x, x_570.y);
    int x_1045 = h_1;
    h_1 = 0;
    h_1 = x_1045;
    int x_114_save = x_112;
    vec2 x_575 = vec2(x_564.y, x_564.z);
    int x_1046 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1046;
    int x_115 = stack[x_114_save];
    int x_1047 = p;
    p = 0;
    p = x_1047;
    vec3 x_576 = vec3(x_573.y, x_573.y, x_565.x);
    int x_1048 = param_5;
    param_5 = 0;
    param_5 = x_1048;
    l_1 = x_115;
    int x_1049 = top;
    top = 0;
    top = x_1049;
    param_4 = l_1;
    int x_1050 = stack[x_110_save];
    stack[x_110_save] = 0;
    stack[x_110_save] = x_1050;
    vec2 x_577 = vec2(x_569.y, x_569.z);
    int x_120 = h_1;
    vec2 x_578 = vec2(x_558.x, vec3(1.0f, 2.0f, 3.0f).y);
    param_5 = x_120;
    int x_1051 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1051;
    int x_121 = performPartition_i1_i1_(param_4, param_5);
    vec2 x_579 = vec2(x_567.x, x_568.x);
    int x_1052 = param_5;
    param_5 = 0;
    param_5 = x_1052;
    p = x_121;
    int x_1053 = param_4;
    param_4 = 0;
    param_4 = x_1053;
    int x_122 = p;
    int x_1054 = h_1;
    h_1 = 0;
    h_1 = x_1054;
    vec2 x_580 = vec2(x_568.y, x_568.y);
    int x_1055 = l_1;
    l_1 = 0;
    l_1 = x_1055;
    int x_1056 = h_1;
    h_1 = 0;
    h_1 = x_1056;
    int x_124 = l_1;
    int x_1057 = stack[x_110_save];
    stack[x_110_save] = 0;
    stack[x_110_save] = x_1057;
    int x_1058 = h_1;
    h_1 = 0;
    h_1 = x_1058;
    vec2 x_582 = vec2(x_567.y, x_573.x);
    int x_1059 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1059;
    if (((x_122 - int(1u)) > x_124)) {
      int x_1060 = param_4;
      param_4 = 0;
      param_4 = x_1060;
      int x_128 = top;
      vec2 x_583 = vec2(x_571.y, x_556.y);
      int x_1061 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1061;
      int x_1062[10] = stack;
      int tint_symbol_32[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = tint_symbol_32;
      stack = x_1062;
      vec2 x_584 = vec2(x_569.z, x_569.y);
      vec3 x_585 = vec3(x_580.y, x_577.x, x_577.x);
      int x_130 = l_1;
      int x_1063 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1063;
      vec2 x_586 = vec2(x_564.x, x_585.x);
      int x_1064 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      int x_131_save = (1 + x_128);
      int x_1065 = stack[x_110_save];
      stack[x_110_save] = 0;
      stack[x_110_save] = x_1065;
      vec3 x_587 = vec3(x_566.y, x_566.y, x_563.x);
      int x_1066 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      stack[x_131_save] = x_130;
      int x_132 = top;
      int x_1067 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1067;
      vec2 x_588 = vec2(x_575.y, x_575.x);
      int x_1068 = stack[x_131_save];
      stack[x_131_save] = 0;
      stack[x_131_save] = x_1068;
      int x_133 = int((1u + uint(x_132)));
      int x_1069 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1069;
      vec3 x_589 = vec3(x_576.z, x_588.y, x_576.z);
      int x_1070 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      int x_1071[10] = stack;
      int tint_symbol_33[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = tint_symbol_33;
      stack = x_1071;
      int x_134 = p;
      vec2 x_590 = vec2(x_576.x, x_573.y);
      int x_1072 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1072;
      int x_136_save = x_133;
      int x_1073 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1073;
      stack[x_136_save] = (x_134 - int(1u));
      int x_1074 = stack[x_96_save];
      stack[x_96_save] = 0;
      stack[x_96_save] = x_1074;
      vec2 x_591 = vec2(x_569.z, x_569.y);
      int x_1075 = stack[x_136_save];
      stack[x_136_save] = 0;
      stack[x_136_save] = x_1075;
    }
    int x_1076 = stack[x_96_save];
    stack[x_96_save] = 0;
    stack[x_96_save] = x_1076;
    vec2 x_592 = vec2(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).y);
    QuicksortObject x_1077 = obj;
    int tint_symbol_34[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    QuicksortObject tint_symbol_35 = QuicksortObject(tint_symbol_34);
    obj = tint_symbol_35;
    obj = x_1077;
    int x_137 = p;
    int x_1078 = stack[x_114_save];
    stack[x_114_save] = 0;
    stack[x_114_save] = x_1078;
    vec3 x_593 = vec3(x_571.z, x_556.x, x_556.y);
    int x_1079 = p;
    p = 0;
    p = x_1079;
    vec3 x_594 = vec3(x_563.z, x_563.x, x_575.x);
    int x_1080 = stack[x_114_save];
    stack[x_114_save] = 0;
    stack[x_114_save] = x_1080;
    int x_139 = h_1;
    int x_1081 = top;
    top = 0;
    top = x_1081;
    vec3 x_595 = vec3(x_560.z, x_568.x, x_560.x);
    int x_1082 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1082;
    int x_1083 = p;
    p = 0;
    p = x_1083;
    if ((int((1u + uint(x_137))) < x_139)) {
      int x_1084 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1084;
      vec2 x_596 = vec2(x_592.y, x_582.x);
      int x_1085 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      int x_143 = top;
      int x_1086 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1086;
      vec3 x_597 = vec3(x_562.y, x_560.y, x_560.y);
      int x_144 = (x_143 + 1);
      int x_1087 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      int x_1088 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1088;
      int x_145 = p;
      int x_1089 = param_5;
      param_5 = 0;
      param_5 = x_1089;
      vec3 x_599 = vec3(x_560.z, x_560.x, x_568.x);
      int x_1090 = p;
      p = 0;
      p = x_1090;
      vec3 x_600 = vec3(x_556.x, x_580.x, x_580.x);
      int x_1091 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1091;
      int x_147_save = x_144;
      int x_1092 = stack[x_110_save];
      stack[x_110_save] = 0;
      stack[x_110_save] = x_1092;
      vec2 x_601 = vec2(x_563.x, x_563.y);
      stack[x_147_save] = int((1u + uint(x_145)));
      int x_1093[10] = stack;
      int tint_symbol_36[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = tint_symbol_36;
      stack = x_1093;
      int x_148 = top;
      int x_1094 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1094;
      vec2 x_602 = vec2(x_565.y, x_599.y);
      int x_1095[10] = stack;
      int tint_symbol_37[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = tint_symbol_37;
      stack = x_1095;
      int x_149 = (x_148 + int(1u));
      int x_1096 = stack[x_147_save];
      stack[x_147_save] = 0;
      stack[x_147_save] = x_1096;
      top = x_149;
      int x_1097 = param_4;
      param_4 = 0;
      param_4 = x_1097;
      int x_150 = h_1;
      int x_1098 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1098;
      int x_1099 = stack[x_96_save];
      stack[x_96_save] = 0;
      stack[x_96_save] = x_1099;
      stack[x_149] = x_150;
      int x_1100 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1100;
      vec3 x_603 = vec3(x_568.y, x_564.x, x_564.x);
      int x_1101 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    int x_1102 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1102;
    {
      int x_1103 = l_1;
      l_1 = 0;
      l_1 = x_1103;
      vec2 x_604 = vec2(x_563.z, x_564.x);
      QuicksortObject x_1104 = obj;
      int tint_symbol_38[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      QuicksortObject tint_symbol_39 = QuicksortObject(tint_symbol_38);
      obj = tint_symbol_39;
      obj = x_1104;
    }
  }
  int x_1105 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

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

struct main_out {
  vec4 x_GLF_color_1;
};
struct tint_symbol_4 {
  vec4 tint_symbol_2;
};
struct tint_symbol_5 {
  vec4 x_GLF_color_1;
};

main_out tint_symbol_1_inner(vec4 tint_symbol_2) {
  tint_symbol = tint_symbol_2;
  main_1();
  main_out tint_symbol_84 = main_out(x_GLF_color);
  return tint_symbol_84;
}

tint_symbol_5 tint_symbol_1(tint_symbol_4 tint_symbol_3) {
  main_out inner_result = tint_symbol_1_inner(tint_symbol_3.tint_symbol_2);
  tint_symbol_5 wrapper_result = tint_symbol_5(vec4(0.0f, 0.0f, 0.0f, 0.0f));
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}
out vec4 x_GLF_color_1;
void main() {
  tint_symbol_4 inputs;
  inputs.tint_symbol_2 = gl_FragCoord;
  tint_symbol_5 outputs;
  outputs = tint_symbol_1(inputs);
  x_GLF_color_1 = outputs.x_GLF_color_1;
}


