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);
}
