struct S {
  f0 : i32;
  f1 : vec3<bool>;
};

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var ll : S;
  var sums : array<f32, 9>;
  ll = S(0, vec3<bool>(true, true, true));
  loop {
    let x_12 : S = ll;
    let x_45 : f32 = x_7.injectionSwitch.y;
    if ((x_12.f0 != i32(x_45))) {
    } else {
      break;
    }
    sums[0] = 0.0;

    continuing {
      let x_13 : S = ll;
      let x_50 : S = ll;
      var x_51_1 : S = x_50;
      x_51_1.f0 = (x_13.f0 + 1);
      let x_51 : S = x_51_1;
      ll = x_51;
    }
  }
  let x_53 : f32 = sums[0];
  let x_54 : vec2<f32> = vec2<f32>(x_53, x_53);
  x_GLF_color = vec4<f32>(1.0, x_54.x, x_54.y, 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);
}
