struct buf0 {
  injectionSwitch : vec2<f32>;
};

struct StructType {
  col : vec3<f32>;
  bbbb : vec4<bool>;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_33 : StructType;
  var x_38 : i32;
  var x_42 : StructType;
  var x_33_phi : StructType;
  var x_9_phi : i32;
  var x_42_phi : StructType;
  var x_10_phi : i32;
  x_33_phi = StructType(vec3<f32>(0.0, 0.0, 0.0), vec4<bool>(false, false, false, false));
  x_9_phi = 0;
  loop {
    var x_34 : StructType;
    var x_7 : i32;
    x_33 = x_33_phi;
    let x_9 : i32 = x_9_phi;
    let x_37 : f32 = x_5.injectionSwitch.y;
    x_38 = i32(x_37);
    if ((x_9 < x_38)) {
    } else {
      break;
    }

    continuing {
      x_34 = x_33;
      x_34.col = vec3<f32>(1.0, 0.0, 0.0);
      x_7 = (x_9 + 1);
      x_33_phi = x_34;
      x_9_phi = x_7;
    }
  }
  x_42_phi = x_33;
  x_10_phi = 0;
  loop {
    var x_43 : StructType;
    var x_8 : i32;
    x_42 = x_42_phi;
    let x_10 : i32 = x_10_phi;
    if ((x_10 < x_38)) {
    } else {
      break;
    }

    continuing {
      x_43 = x_42;
      x_43.col = vec3<f32>(1.0, 0.0, 0.0);
      x_8 = (x_10 + 1);
      x_42_phi = x_43;
      x_10_phi = x_8;
    }
  }
  let x_47 : vec3<f32> = x_42.col;
  x_GLF_color = vec4<f32>(x_47.x, x_47.y, x_47.z, 1.0);
  return;
}

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

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
