struct buf0 {
  fourtytwo : f32;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_36 : bool;
  var x_37_phi : bool;
  let x_23 : f32 = x_5.fourtytwo;
  let x_25 : f32 = x_5.fourtytwo;
  let x_27 : bool = (clamp(1.0, x_23, x_25) > 42.0);
  x_37_phi = x_27;
  if (!(x_27)) {
    let x_32 : f32 = x_5.fourtytwo;
    let x_34 : f32 = x_5.fourtytwo;
    x_36 = (clamp(1.0, x_32, x_34) < 42.0);
    x_37_phi = x_36;
  }
  let x_37 : bool = x_37_phi;
  if (x_37) {
    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  } else {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 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);
}
