struct buf0 {
  injectionSwitch : vec2<f32>;
}

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

@group(0) @binding(0) var<uniform> x_6 : buf0;

fn main_1() {
  loop {
    var x_42 : vec4<f32>;
    var x_39 : bool;
    var x_38_phi : bool;
    var x_41_phi : vec4<f32>;
    let x_32 : f32 = gl_FragCoord.x;
    let x_34 : i32 = i32(clamp(x_32, 0.0, 1.0));
    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
    x_38_phi = false;
    x_41_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
    loop {
      var x_42_phi : vec4<f32>;
      var x_47_phi : i32;
      var x_39_phi : bool;
      let x_38 : bool = x_38_phi;
      let x_41 : vec4<f32> = x_41_phi;
      x_42_phi = x_41;
      x_47_phi = 0;
      loop {
        var x_45 : vec4<f32>;
        var x_48 : i32;
        x_42 = x_42_phi;
        let x_47 : i32 = x_47_phi;
        let x_50 : f32 = x_6.injectionSwitch.y;
        x_39_phi = x_38;
        if ((x_47 < (x_34 + i32(x_50)))) {
        } else {
          break;
        }
        var x_66 : vec4<f32>;
        var x_70 : vec4<f32>;
        var x_45_phi : vec4<f32>;
        if ((x_34 < 0)) {
          x_39_phi = true;
          break;
        } else {
          if ((x_34 == 1)) {
            let x_64 : f32 = f32(x_34);
            let x_65 : vec2<f32> = vec2<f32>(x_64, x_64);
            x_66 = vec4<f32>(x_65.x, x_42.y, x_42.z, x_65.y);
            x_45_phi = x_66;
          } else {
            let x_68 : f32 = f32((x_34 + 1));
            let x_69 : vec2<f32> = vec2<f32>(x_68, x_68);
            x_70 = vec4<f32>(x_69.x, x_42.y, x_42.z, x_69.y);
            x_45_phi = x_70;
          }
          x_45 = x_45_phi;
        }

        continuing {
          x_48 = (x_47 + 1);
          x_42_phi = x_45;
          x_47_phi = x_48;
        }
      }
      x_39 = x_39_phi;
      if (x_39) {
        break;
      }

      continuing {
        x_38_phi = x_39;
        x_41_phi = x_42;
        if ((x_34 < 0)) {
        } else {
          break;
        }
      }
    }
    if (x_39) {
      break;
    }
    x_GLF_color = x_42;
    break;
  }
  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);
}
