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

[[block]]
struct buf1 {
  resolution : 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>;

[[group(0), binding(1)]] var<uniform> x_32 : buf1;

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_256 : i32 = *(from);
  k = x_256;
  let x_257 : i32 = *(from);
  i = x_257;
  let x_258 : i32 = *(mid);
  j = (x_258 + 1);
  loop {
    let x_264 : i32 = i;
    let x_265 : i32 = *(mid);
    let x_267 : i32 = j;
    let x_268 : i32 = *(to);
    if (((x_264 <= x_265) && (x_267 <= x_268))) {
    } else {
      break;
    }
    let x_272 : i32 = i;
    let x_274 : i32 = data[x_272];
    let x_275 : i32 = j;
    let x_277 : i32 = data[x_275];
    if ((x_274 < x_277)) {
      let x_282 : i32 = k;
      k = (x_282 + 1);
      let x_284 : i32 = i;
      i = (x_284 + 1);
      let x_287 : i32 = data[x_284];
      temp[x_282] = x_287;
    } else {
      let x_289 : i32 = k;
      k = (x_289 + 1);
      let x_291 : i32 = j;
      j = (x_291 + 1);
      let x_294 : i32 = data[x_291];
      temp[x_289] = x_294;
    }
  }
  loop {
    if (!((256.0 < 1.0))) {
    } else {
      continue;
    }
    let x_301 : i32 = i;
    let x_303 : i32 = i;
    let x_304 : i32 = *(mid);
    if (((x_301 < 10) && (x_303 <= x_304))) {
    } else {
      break;
    }
    let x_309 : i32 = k;
    k = (x_309 + 1);
    let x_311 : i32 = i;
    i = (x_311 + 1);
    let x_314 : i32 = data[x_311];
    temp[x_309] = x_314;
  }
  let x_316 : i32 = *(from);
  i_1 = x_316;
  loop {
    let x_321 : i32 = i_1;
    let x_322 : i32 = *(to);
    if ((x_321 <= x_322)) {
    } else {
      break;
    }
    let x_325 : i32 = i_1;
    let x_326 : i32 = i_1;
    let x_328 : i32 = temp[x_326];
    data[x_325] = x_328;

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

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_337 : i32 = m;
    let x_338 : i32 = high;
    if ((x_337 <= x_338)) {
    } else {
      break;
    }
    let x_341 : i32 = low;
    i_2 = x_341;
    loop {
      let x_346 : i32 = i_2;
      let x_347 : i32 = high;
      if ((x_346 < x_347)) {
      } else {
        break;
      }
      let x_350 : i32 = i_2;
      from_1 = x_350;
      let x_351 : i32 = i_2;
      let x_352 : i32 = m;
      mid_1 = ((x_351 + x_352) - 1);
      let x_355 : i32 = i_2;
      let x_356 : i32 = m;
      let x_360 : i32 = high;
      to_1 = min(((x_355 + (2 * x_356)) - 1), x_360);
      let x_362 : i32 = from_1;
      param = x_362;
      let x_363 : i32 = mid_1;
      param_1 = x_363;
      let x_364 : i32 = to_1;
      param_2 = x_364;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_366 : i32 = m;
        let x_368 : i32 = i_2;
        i_2 = (x_368 + (2 * x_366));
      }
    }

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

fn main_1() {
  var i_3 : i32;
  var j_1 : i32;
  var grey : f32;
  let x_89 : f32 = x_28.injectionSwitch.x;
  i_3 = i32(x_89);
  loop {
    let x_95 : i32 = i_3;
    switch(x_95) {
      case 9: {
        let x_125 : i32 = i_3;
        data[x_125] = -5;
      }
      case 8: {
        let x_123 : i32 = i_3;
        data[x_123] = -4;
      }
      case 7: {
        let x_121 : i32 = i_3;
        data[x_121] = -3;
      }
      case 6: {
        let x_119 : i32 = i_3;
        data[x_119] = -2;
      }
      case 5: {
        let x_117 : i32 = i_3;
        data[x_117] = -1;
      }
      case 4: {
        let x_115 : i32 = i_3;
        data[x_115] = 0;
      }
      case 3: {
        let x_113 : i32 = i_3;
        data[x_113] = 1;
      }
      case 2: {
        let x_111 : i32 = i_3;
        data[x_111] = 2;
      }
      case 1: {
        let x_109 : i32 = i_3;
        data[x_109] = 3;
      }
      case 0: {
        let x_107 : i32 = i_3;
        data[x_107] = 4;
      }
      default: {
      }
    }
    let x_127 : i32 = i_3;
    i_3 = (x_127 + 1);

    continuing {
      let x_129 : i32 = i_3;
      if ((x_129 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_135 : i32 = j_1;
    if ((x_135 < 10)) {
    } else {
      break;
    }
    let x_138 : i32 = j_1;
    let x_139 : i32 = j_1;
    let x_141 : i32 = data[x_139];
    temp[x_138] = x_141;

    continuing {
      let x_143 : i32 = j_1;
      j_1 = (x_143 + 1);
    }
  }
  mergeSort_();
  let x_147 : f32 = gl_FragCoord.y;
  if ((i32(x_147) < 30)) {
    let x_154 : i32 = data[0];
    grey = (0.5 + (f32(x_154) / 10.0));
  } else {
    let x_159 : f32 = gl_FragCoord.y;
    if ((i32(x_159) < 60)) {
      let x_166 : i32 = data[1];
      grey = (0.5 + (f32(x_166) / 10.0));
    } else {
      let x_171 : f32 = gl_FragCoord.y;
      if ((i32(x_171) < 90)) {
        let x_178 : i32 = data[2];
        grey = (0.5 + (f32(x_178) / 10.0));
      } else {
        let x_183 : f32 = gl_FragCoord.y;
        if ((i32(x_183) < 120)) {
          let x_190 : i32 = data[3];
          grey = (0.5 + (f32(x_190) / 10.0));
        } else {
          let x_195 : f32 = gl_FragCoord.y;
          if ((i32(x_195) < 150)) {
            discard;
          } else {
            let x_202 : f32 = gl_FragCoord.y;
            if ((i32(x_202) < 180)) {
              let x_209 : i32 = data[5];
              grey = (0.5 + (f32(x_209) / 10.0));
            } else {
              let x_214 : f32 = gl_FragCoord.y;
              if ((i32(x_214) < 210)) {
                let x_221 : i32 = data[6];
                grey = (0.5 + (f32(x_221) / 10.0));
              } else {
                let x_226 : f32 = gl_FragCoord.y;
                if ((i32(x_226) < 240)) {
                  let x_233 : i32 = data[7];
                  grey = (0.5 + (f32(x_233) / 10.0));
                } else {
                  let x_238 : f32 = gl_FragCoord.y;
                  if ((i32(x_238) < 270)) {
                    let x_245 : i32 = data[8];
                    grey = (0.5 + (f32(x_245) / 10.0));
                  } else {
                    discard;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_249 : f32 = grey;
  let x_250 : vec3<f32> = vec3<f32>(x_249, x_249, x_249);
  x_GLF_color = vec4<f32>(x_250.x, x_250.y, x_250.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);
}
