type Arr = [[stride(16)]] array<i32, 3>;

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

type Arr_1 = [[stride(16)]] array<f32, 1>;

struct buf1 {
  x_GLF_uniform_float_values : Arr_1;
};

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

var<private> gl_FragCoord : vec4<f32>;

[[group(0), binding(1)]] var<uniform> x_11 : buf1;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var arr : array<i32, 3>;
  var a : i32;
  var b : i32;
  var c : i32;
  let x_40 : i32 = x_7.x_GLF_uniform_int_values[1];
  let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
  let x_44 : i32 = x_7.x_GLF_uniform_int_values[1];
  arr = array<i32, 3>(x_40, x_42, x_44);
  let x_47 : i32 = x_7.x_GLF_uniform_int_values[0];
  let x_49 : i32 = arr[x_47];
  a = x_49;
  let x_50 : i32 = a;
  b = (x_50 - 1);
  let x_53 : f32 = gl_FragCoord.x;
  let x_55 : f32 = x_11.x_GLF_uniform_float_values[0];
  if ((x_53 < x_55)) {
    let x_59 : i32 = b;
    b = (x_59 + 1);
  }
  let x_62 : i32 = x_7.x_GLF_uniform_int_values[0];
  c = x_62;
  let x_63 : i32 = c;
  let x_65 : i32 = x_7.x_GLF_uniform_int_values[1];
  let x_67 : i32 = x_7.x_GLF_uniform_int_values[2];
  let x_69 : i32 = b;
  arr[clamp(x_63, x_65, x_67)] = x_69;
  let x_72 : i32 = x_7.x_GLF_uniform_int_values[0];
  let x_74 : i32 = arr[x_72];
  let x_77 : i32 = x_7.x_GLF_uniform_int_values[1];
  let x_79 : i32 = arr[x_77];
  let x_82 : i32 = x_7.x_GLF_uniform_int_values[1];
  let x_84 : i32 = arr[x_82];
  let x_87 : i32 = x_7.x_GLF_uniform_int_values[2];
  let x_89 : i32 = arr[x_87];
  x_GLF_color = vec4<f32>(f32(x_74), f32(x_79), f32(x_84), f32(x_89));
  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);
}
