var<private> x_GLF_color : vec4<f32>;

var<private> gl_FragCoord : vec4<f32>;

fn main_1() {
  var x_37 : mat4x3<f32>;
  var x_38_phi : mat4x3<f32>;
  var x_48_phi : vec3<f32>;
  let x_32 : f32 = gl_FragCoord.y;
  if ((x_32 < 1.0)) {
    x_38_phi = mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0));
  } else {
    x_37 = transpose(mat3x4<f32>(vec4<f32>(1.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 1.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 1.0, 0.0)));
    x_38_phi = x_37;
  }
  let x_38 : mat4x3<f32> = x_38_phi;
  let x_40 : f32 = transpose(x_38)[0u].y;
  loop {
    if ((x_40 > 1.0)) {
      x_48_phi = vec3<f32>(0.0, 0.0, 0.0);
      break;
    }
    x_48_phi = vec3<f32>(1.0, 0.0, 0.0);
    break;
  }
  let x_48 : vec3<f32> = x_48_phi;
  x_GLF_color = vec4<f32>(x_48.x, x_48.y, x_48.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);
}
