struct buf0 {
  matrix_a_uni : mat4x4<f32>;
}

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x : i32;
  var matrix_u : vec4<f32>;
  var b : i32;
  var matrix_b : vec4<f32>;
  var x_42 : vec4<f32>;
  x = 4;
  loop {
    let x_10 : i32 = x;
    if ((x_10 >= 1)) {
    } else {
      break;
    }
    let x_11 : i32 = x;
    matrix_u[x_11] = 1.0;

    continuing {
      let x_12 : i32 = x;
      x = (x_12 - 1);
    }
  }
  b = 4;
  loop {
    let x_55 : f32 = x_8.matrix_a_uni[0].x;
    if ((x_55 < -1.0)) {
    } else {
      break;
    }
    let x_14 : i32 = b;
    let x_15 : i32 = b;
    if ((x_15 > 1)) {
      let x_62 : vec4<f32> = matrix_b;
      let x_63 : vec4<f32> = matrix_b;
      x_42 = min(x_62, x_63);
    } else {
      let x_65 : vec4<f32> = matrix_u;
      x_42 = x_65;
    }
    let x_67 : f32 = x_42.y;
    matrix_b[x_14] = x_67;

    continuing {
      let x_16 : i32 = b;
      b = (x_16 - 1);
    }
  }
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  return;
}

struct main_out {
  @location(0)
  x_GLF_color_1 : vec4<f32>;
}

@stage(fragment)
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
