[[block]]
struct buf0 {
  one : f32;
};

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var m44 : mat4x4<f32>;
  var x_10_phi : i32;
  m44 = mat4x4<f32>(vec4<f32>(1.0, 2.0, 3.0, 4.0), vec4<f32>(5.0, 6.0, 7.0, 8.0), vec4<f32>(9.0, 10.0, 11.0, 12.0), vec4<f32>(13.0, 14.0, 15.0, 16.0));
  x_10_phi = 0;
  loop {
    var x_9 : i32;
    var x_11_phi : i32;
    let x_10 : i32 = x_10_phi;
    if ((x_10 < 4)) {
    } else {
      break;
    }
    let x_63 : f32 = gl_FragCoord.y;
    if ((x_63 < 0.0)) {
      break;
    }
    x_11_phi = 0;
    loop {
      var x_8 : i32;
      let x_11 : i32 = x_11_phi;
      if ((x_11 < 4)) {
      } else {
        break;
      }

      continuing {
        let x_72 : f32 = x_7.one;
        let x_74 : f32 = m44[x_10][x_11];
        m44[x_10][x_11] = (x_74 + x_72);
        x_8 = (x_11 + 1);
        x_11_phi = x_8;
      }
    }

    continuing {
      x_9 = (x_10 + 1);
      x_10_phi = x_9;
    }
  }
  let x_77 : f32 = m44[1].y;
  var x_79_1 : vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  x_79_1.x = (x_77 - 6.0);
  let x_79 : vec4<f32> = x_79_1;
  let x_81 : f32 = m44[2].z;
  var x_83_1 : vec4<f32> = x_79;
  x_83_1.w = (x_81 - 11.0);
  let x_83 : vec4<f32> = x_83_1;
  x_GLF_color = x_83;
  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);
}
