var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var data : array<f32, 10>;
  var i : i32;
  data = array<f32, 10>(0.100000001, 0.200000003, 0.300000012, 0.400000006, 0.5, 0.600000024, 0.699999988, 0.800000012, 0.899999976, 1.0);
  i = 0;
  loop {
    let x_7 : i32 = i;
    if ((x_7 < 10)) {
    } else {
      break;
    }
    let x_50 : f32 = gl_FragCoord.x;
    if ((x_50 < 0.0)) {
      discard;
    }
    let x_8 : i32 = i;
    let x_55 : f32 = data[x_8];
    data[0] = x_55;

    continuing {
      let x_9 : i32 = i;
      i = (x_9 + 1);
    }
  }
  let x_58 : f32 = data[0];
  x_GLF_color = vec4<f32>(x_58, 0.0, 0.0, 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);
}
