[[block]]
struct buf0 {
  injectionSwitch : vec2<f32>;
};

var<private> data : array<i32, 10>;

var<private> temp : array<i32, 10>;

[[group(0), binding(0)]] var<uniform> x_28 : buf0;

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
  var k : i32;
  var i : i32;
  var j : i32;
  var i_1 : i32;
  let x_302 : i32 = *(from);
  k = x_302;
  let x_303 : i32 = *(from);
  i = x_303;
  let x_304 : i32 = *(mid);
  j = (x_304 + 1);
  loop {
    let x_310 : i32 = i;
    let x_311 : i32 = *(mid);
    let x_313 : i32 = j;
    let x_314 : i32 = *(to);
    if (((x_310 <= x_311) && (x_313 <= x_314))) {
    } else {
      break;
    }
    let x_318 : i32 = i;
    let x_320 : i32 = data[x_318];
    let x_321 : i32 = j;
    let x_323 : i32 = data[x_321];
    if ((x_320 < x_323)) {
      let x_328 : i32 = k;
      k = (x_328 + 1);
      let x_330 : i32 = i;
      i = (x_330 + 1);
      let x_333 : i32 = data[x_330];
      temp[x_328] = x_333;
    } else {
      let x_335 : i32 = k;
      k = (x_335 + 1);
      let x_337 : i32 = j;
      j = (x_337 + 1);
      let x_340 : i32 = data[x_337];
      temp[x_335] = x_340;
    }
  }
  loop {
    let x_346 : i32 = i;
    let x_348 : i32 = i;
    let x_349 : i32 = *(mid);
    if (((x_346 < 10) && (x_348 <= x_349))) {
    } else {
      break;
    }
    let x_353 : i32 = k;
    k = (x_353 + 1);
    let x_355 : i32 = i;
    i = (x_355 + 1);
    let x_358 : i32 = data[x_355];
    temp[x_353] = x_358;
  }
  let x_360 : i32 = *(from);
  i_1 = x_360;
  loop {
    let x_365 : i32 = i_1;
    let x_366 : i32 = *(to);
    if ((x_365 <= x_366)) {
    } else {
      break;
    }
    let x_369 : i32 = i_1;
    let x_370 : i32 = i_1;
    let x_372 : i32 = temp[x_370];
    data[x_369] = x_372;

    continuing {
      let x_374 : i32 = i_1;
      i_1 = (x_374 + 1);
    }
  }
  return;
}

fn main_1() {
  var x_85 : i32;
  var x_86 : i32;
  var x_87 : i32;
  var x_88 : i32;
  var x_89 : i32;
  var x_90 : i32;
  var x_91 : i32;
  var x_92 : i32;
  var x_93 : i32;
  var x_94 : i32;
  var i_3 : i32;
  var j_1 : i32;
  var grey : f32;
  let x_96 : f32 = x_28.injectionSwitch.x;
  i_3 = i32(x_96);
  loop {
    let x_102 : i32 = i_3;
    switch(x_102) {
      case 9: {
        let x_132 : i32 = i_3;
        data[x_132] = -5;
      }
      case 8: {
        let x_130 : i32 = i_3;
        data[x_130] = -4;
      }
      case 7: {
        let x_128 : i32 = i_3;
        data[x_128] = -3;
      }
      case 6: {
        let x_126 : i32 = i_3;
        data[x_126] = -2;
      }
      case 5: {
        let x_124 : i32 = i_3;
        data[x_124] = -1;
      }
      case 4: {
        let x_122 : i32 = i_3;
        data[x_122] = 0;
      }
      case 3: {
        let x_120 : i32 = i_3;
        data[x_120] = 1;
      }
      case 2: {
        let x_118 : i32 = i_3;
        data[x_118] = 2;
      }
      case 1: {
        let x_116 : i32 = i_3;
        data[x_116] = 3;
      }
      case 0: {
        let x_114 : i32 = i_3;
        data[x_114] = 4;
      }
      default: {
      }
    }
    let x_134 : i32 = i_3;
    i_3 = (x_134 + 1);

    continuing {
      let x_136 : i32 = i_3;
      if ((x_136 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_142 : i32 = j_1;
    if ((x_142 < 10)) {
    } else {
      break;
    }
    let x_145 : i32 = j_1;
    let x_146 : i32 = j_1;
    let x_148 : i32 = data[x_146];
    temp[x_145] = x_148;

    continuing {
      let x_150 : i32 = j_1;
      j_1 = (x_150 + 1);
    }
  }
  x_94 = 0;
  x_93 = 9;
  x_92 = 1;
  loop {
    let x_156 : i32 = x_92;
    let x_157 : i32 = x_93;
    if ((x_156 <= x_157)) {
    } else {
      break;
    }
    let x_160 : i32 = x_94;
    x_91 = x_160;
    loop {
      let x_165 : i32 = x_91;
      let x_166 : i32 = x_93;
      if ((x_165 < x_166)) {
      } else {
        break;
      }
      let x_169 : i32 = x_91;
      x_90 = x_169;
      let x_170 : i32 = x_91;
      let x_171 : i32 = x_92;
      x_89 = ((x_170 + x_171) - 1);
      let x_174 : i32 = x_91;
      let x_175 : i32 = x_92;
      let x_179 : i32 = x_93;
      x_88 = min(((x_174 + (2 * x_175)) - 1), x_179);
      let x_181 : i32 = x_90;
      x_87 = x_181;
      let x_182 : i32 = x_89;
      x_86 = x_182;
      let x_183 : i32 = x_88;
      x_85 = x_183;
      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85));

      continuing {
        let x_185 : i32 = x_92;
        let x_187 : i32 = x_91;
        x_91 = (x_187 + (2 * x_185));
      }
    }

    continuing {
      let x_189 : i32 = x_92;
      x_92 = (2 * x_189);
    }
  }
  let x_193 : f32 = gl_FragCoord.y;
  if ((i32(x_193) < 30)) {
    let x_200 : i32 = data[0];
    grey = (0.5 + (f32(x_200) / 10.0));
  } else {
    let x_205 : f32 = gl_FragCoord.y;
    if ((i32(x_205) < 60)) {
      let x_212 : i32 = data[1];
      grey = (0.5 + (f32(x_212) / 10.0));
    } else {
      let x_217 : f32 = gl_FragCoord.y;
      if ((i32(x_217) < 90)) {
        let x_224 : i32 = data[2];
        grey = (0.5 + (f32(x_224) / 10.0));
      } else {
        let x_229 : f32 = gl_FragCoord.y;
        if ((i32(x_229) < 120)) {
          let x_236 : i32 = data[3];
          grey = (0.5 + (f32(x_236) / 10.0));
        } else {
          let x_241 : f32 = gl_FragCoord.y;
          if ((i32(x_241) < 150)) {
            discard;
          } else {
            let x_248 : f32 = gl_FragCoord.y;
            if ((i32(x_248) < 180)) {
              let x_255 : i32 = data[5];
              grey = (0.5 + (f32(x_255) / 10.0));
            } else {
              let x_260 : f32 = gl_FragCoord.y;
              if ((i32(x_260) < 210)) {
                let x_267 : i32 = data[6];
                grey = (0.5 + (f32(x_267) / 10.0));
              } else {
                let x_272 : f32 = gl_FragCoord.y;
                if ((i32(x_272) < 240)) {
                  let x_279 : i32 = data[7];
                  grey = (0.5 + (f32(x_279) / 10.0));
                } else {
                  let x_284 : f32 = gl_FragCoord.y;
                  if ((i32(x_284) < 270)) {
                    let x_291 : i32 = data[8];
                    grey = (0.5 + (f32(x_291) / 10.0));
                  } else {
                    discard;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_295 : f32 = grey;
  let x_296 : vec3<f32> = vec3<f32>(x_295, x_295, x_295);
  x_GLF_color = vec4<f32>(x_296.x, x_296.y, x_296.z, 1.0);
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}

fn mergeSort_() {
  var low : i32;
  var high : i32;
  var m : i32;
  var i_2 : i32;
  var from_1 : i32;
  var mid_1 : i32;
  var to_1 : i32;
  var param : i32;
  var param_1 : i32;
  var param_2 : i32;
  low = 0;
  high = 9;
  m = 1;
  loop {
    let x_381 : i32 = m;
    let x_382 : i32 = high;
    if ((x_381 <= x_382)) {
    } else {
      break;
    }
    let x_385 : i32 = low;
    i_2 = x_385;
    loop {
      let x_390 : i32 = i_2;
      let x_391 : i32 = high;
      if ((x_390 < x_391)) {
      } else {
        break;
      }
      let x_394 : i32 = i_2;
      from_1 = x_394;
      let x_395 : i32 = i_2;
      let x_396 : i32 = m;
      mid_1 = ((x_395 + x_396) - 1);
      let x_399 : i32 = i_2;
      let x_400 : i32 = m;
      let x_404 : i32 = high;
      to_1 = min(((x_399 + (2 * x_400)) - 1), x_404);
      let x_406 : i32 = from_1;
      param = x_406;
      let x_407 : i32 = mid_1;
      param_1 = x_407;
      let x_408 : i32 = to_1;
      param_2 = x_408;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_410 : i32 = m;
        let x_412 : i32 = i_2;
        i_2 = (x_412 + (2 * x_410));
      }
    }

    continuing {
      let x_414 : i32 = m;
      m = (2 * x_414);
    }
  }
  return;
}
