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

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn func_() -> f32 {
  var alwaysFalse : bool;
  var value : vec4<f32>;
  var a : vec2<f32>;
  var i : i32;
  var x_121 : bool;
  var x_122_phi : bool;
  let x_71 : f32 = gl_FragCoord.x;
  alwaysFalse = (x_71 < -1.0);
  let x_73 : bool = alwaysFalse;
  if (x_73) {
    let x_76 : vec2<f32> = a;
    let x_77 : vec4<f32> = value;
    value = vec4<f32>(x_76.x, x_76.y, x_77.z, x_77.w);
  }
  let x_79 : bool = alwaysFalse;
  if (!(x_79)) {
    let x_84 : vec2<f32> = x_10.injectionSwitch;
    let x_85 : vec4<f32> = value;
    value = vec4<f32>(x_84.x, x_84.y, x_85.z, x_85.w);
  }
  let x_87 : vec4<f32> = gl_FragCoord;
  let x_89 : vec4<f32> = value;
  let x_93 : vec4<f32> = value;
  let x_95 : vec2<f32> = (((vec2<f32>(x_87.x, x_87.y) * vec2<f32>(x_89.x, x_89.y)) * vec2<f32>(2.0, 2.0)) + vec2<f32>(x_93.x, x_93.y));
  let x_96 : vec4<f32> = value;
  value = vec4<f32>(x_96.x, x_96.y, x_95.x, x_95.y);
  i = 0;
  loop {
    let x_102 : i32 = i;
    let x_104 : f32 = x_10.injectionSwitch.y;
    if ((x_102 < (i32(x_104) + 1))) {
    } else {
      break;
    }
    let x_109 : i32 = i;
    value.x = f32(x_109);

    continuing {
      let x_112 : i32 = i;
      i = (x_112 + 1);
    }
  }
  let x_115 : f32 = value.x;
  let x_116 : bool = (x_115 == 1.0);
  x_122_phi = x_116;
  if (x_116) {
    let x_120 : f32 = value.y;
    x_121 = (x_120 == 1.0);
    x_122_phi = x_121;
  }
  let x_122 : bool = x_122_phi;
  if (x_122) {
    return 1.0;
  } else {
    return 0.0;
  }
  return 0.0;
}

fn main_1() {
  var count : i32;
  var i_1 : i32;
  count = 0;
  i_1 = 0;
  loop {
    let x_51 : i32 = i_1;
    let x_53 : f32 = x_10.injectionSwitch.y;
    if ((x_51 < (i32(x_53) + 1))) {
    } else {
      break;
    }
    let x_58 : f32 = func_();
    let x_60 : i32 = count;
    count = (x_60 + i32(x_58));

    continuing {
      let x_62 : i32 = i_1;
      i_1 = (x_62 + 1);
    }
  }
  let x_64 : i32 = count;
  if ((x_64 == 2)) {
    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, 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);
}
