struct buf0 {
  one : f32;
};

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : vec2<f32>;
  var b : vec3<f32>;
  var x_105 : bool;
  var x_111 : bool;
  var x_106_phi : bool;
  var x_112_phi : bool;
  a = vec2<f32>(1.0, 1.0);
  b = vec3<f32>(0.0, 0.0, 0.0);
  let x_52 : f32 = gl_FragCoord.y;
  if ((i32(x_52) < 40)) {
    b = vec3<f32>(0.100000001, 0.100000001, 0.100000001);
  } else {
    let x_59 : f32 = gl_FragCoord.y;
    if ((i32(x_59) < 60)) {
      b = vec3<f32>(0.200000003, 0.200000003, 0.200000003);
    } else {
      let x_66 : f32 = gl_FragCoord.y;
      if ((x_66 < 80.0)) {
        let x_72 : f32 = a.x;
        let x_74 : f32 = x_8.one;
        b = (cos((vec3<f32>(x_72, x_72, x_72) + vec3<f32>(x_74, x_74, x_74))) + vec3<f32>(0.01, 0.01, 0.01));
      } else {
        let x_82 : f32 = gl_FragCoord.y;
        if ((i32(x_82) < 100)) {
          let x_89 : f32 = x_8.one;
          b = cos(vec3<f32>(x_89, x_89, x_89));
        } else {
          let x_93 : f32 = gl_FragCoord.y;
          if ((i32(x_93) < 500)) {
            b = vec3<f32>(0.540302277, 0.540302277, -0.99996084);
          }
        }
      }
    }
  }
  let x_99 : f32 = b.x;
  let x_100 : bool = (x_99 < 1.019999981);
  x_106_phi = x_100;
  if (x_100) {
    let x_104 : f32 = b.y;
    x_105 = (x_104 < 1.019999981);
    x_106_phi = x_105;
  }
  let x_106 : bool = x_106_phi;
  x_112_phi = x_106;
  if (x_106) {
    let x_110 : f32 = b.z;
    x_111 = (x_110 < 1.019999981);
    x_112_phi = x_111;
  }
  let x_112 : bool = x_112_phi;
  if (x_112) {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  } else {
    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.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);
}
