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

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
  var x_91 : f32;
  var x_91_phi : f32;
  var x_94_phi : i32;
  x_91_phi = -0.5;
  x_94_phi = 1;
  loop {
    var x_104 : f32;
    var x_113 : f32;
    var x_95 : i32;
    var x_92_phi : f32;
    x_91 = x_91_phi;
    let x_94 : i32 = x_94_phi;
    if ((x_94 < 800)) {
    } else {
      break;
    }
    var x_112 : f32;
    var x_113_phi : f32;
    if (((x_94 % 32) == 0)) {
      x_104 = (x_91 + 0.400000006);
      x_92_phi = x_104;
    } else {
      let x_106 : f32 = *(thirty_two);
      x_113_phi = x_91;
      if (((f32(x_94) % round(x_106)) <= 0.01)) {
        x_112 = (x_91 + 100.0);
        x_113_phi = x_112;
      }
      x_113 = x_113_phi;
      x_92_phi = x_113;
    }
    var x_92 : f32;
    x_92 = x_92_phi;
    let x_115 : f32 = *(limit);
    if ((f32(x_94) >= x_115)) {
      return x_92;
    }

    continuing {
      x_95 = (x_94 + 1);
      x_91_phi = x_92;
      x_94_phi = x_95;
    }
  }
  return x_91;
}

fn main_1() {
  var c : vec3<f32>;
  var param : f32;
  var param_1 : f32;
  var param_2 : f32;
  var param_3 : f32;
  var x_68_phi : i32;
  c = vec3<f32>(7.0, 8.0, 9.0);
  let x_52 : f32 = x_10.resolution.x;
  let x_54 : f32 = round((x_52 * 0.125));
  let x_56 : f32 = gl_FragCoord.x;
  param = x_56;
  param_1 = x_54;
  let x_57 : f32 = compute_value_f1_f1_(&(param), &(param_1));
  let x_58 : ptr<function, f32> = &(c.x);
  *(x_58) = x_57;
  let x_60 : f32 = gl_FragCoord.y;
  param_2 = x_60;
  param_3 = x_54;
  let x_61 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
  let x_62 : ptr<function, f32> = &(c.y);
  *(x_62) = x_61;
  let x_63 : f32 = *(x_58);
  let x_64 : f32 = *(x_62);
  c.z = (x_63 + x_64);
  x_68_phi = 0;
  loop {
    var x_69 : i32;
    let x_68 : i32 = x_68_phi;
    if ((x_68 < 3)) {
    } else {
      break;
    }
    let x_74 : ptr<function, f32> = &(c[x_68]);
    let x_75 : f32 = *(x_74);
    if ((x_75 >= 1.0)) {
      let x_79 : f32 = *(x_74);
      let x_80 : f32 = *(x_74);
      *(x_74) = (x_79 * x_80);
    }

    continuing {
      x_69 = (x_68 + 1);
      x_68_phi = x_69;
    }
  }
  let x_82 : vec3<f32> = c;
  let x_84 : vec3<f32> = normalize(abs(x_82));
  x_GLF_color = vec4<f32>(x_84.x, x_84.y, x_84.z, 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);
}
