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

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

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

struct buf1 {
  x_GLF_uniform_float_values : Arr_1;
};

var<private> x_GLF_color : vec4<f32>;

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

var<private> gl_FragCoord : vec4<f32>;

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

fn f1_f1_(a : ptr<function, f32>) -> f32 {
  let x_100 : f32 = *(a);
  return dpdx(x_100);
}

fn main_1() {
  var v2 : vec4<f32>;
  var a_1 : f32;
  var x_40 : f32;
  var param : f32;
  let x_42 : i32 = x_8.x_GLF_uniform_int_values[0];
  let x_45 : i32 = x_8.x_GLF_uniform_int_values[1];
  let x_48 : i32 = x_8.x_GLF_uniform_int_values[1];
  let x_51 : i32 = x_8.x_GLF_uniform_int_values[0];
  x_GLF_color = vec4<f32>(f32(x_42), f32(x_45), f32(x_48), f32(x_51));
  let x_55 : f32 = gl_FragCoord.x;
  let x_57 : f32 = x_10.x_GLF_uniform_float_values[1];
  if ((x_55 < x_57)) {
    let x_62 : f32 = v2.x;
    if (!((x_62 < 1.0))) {
      let x_68 : f32 = x_10.x_GLF_uniform_float_values[1];
      let x_70 : f32 = x_10.x_GLF_uniform_float_values[1];
      let x_72 : f32 = x_10.x_GLF_uniform_float_values[0];
      if ((x_70 > x_72)) {
        let x_78 : f32 = x_10.x_GLF_uniform_float_values[0];
        param = x_78;
        let x_79 : f32 = f1_f1_(&(param));
        x_40 = x_79;
      } else {
        let x_81 : f32 = x_10.x_GLF_uniform_float_values[0];
        x_40 = x_81;
      }
      let x_82 : f32 = x_40;
      a_1 = (x_68 / x_82);
      let x_85 : f32 = x_10.x_GLF_uniform_float_values[0];
      let x_88 : f32 = x_10.x_GLF_uniform_float_values[0];
      let x_90 : f32 = a_1;
      let x_92 : vec3<f32> = mix(vec3<f32>(x_85, x_85, x_85), vec3<f32>(x_88, x_88, x_88), vec3<f32>(x_90, x_90, x_90));
      let x_94 : f32 = x_10.x_GLF_uniform_float_values[1];
      x_GLF_color = vec4<f32>(x_92.x, x_92.y, x_92.z, x_94);
    }
  }
  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);
}
