type Arr = @stride(16) array<i32, 5>;

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

type Arr_1 = @stride(16) array<f32, 3>;

struct buf1 {
  x_GLF_uniform_float_values : Arr_1;
};

@group(0) @binding(0) var<uniform> x_6 : buf0;

@group(0) @binding(1) var<uniform> x_9 : buf1;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var I : vec4<f32>;
  var N : vec4<f32>;
  var R : vec4<f32>;
  var ref : vec4<f32>;
  let x_40 : i32 = x_6.x_GLF_uniform_int_values[2];
  let x_43 : i32 = x_6.x_GLF_uniform_int_values[3];
  let x_46 : i32 = x_6.x_GLF_uniform_int_values[4];
  I = bitcast<vec4<f32>>(vec4<u32>(bitcast<u32>(x_40), bitcast<u32>(x_43), bitcast<u32>(x_46), 92985u));
  let x_51 : f32 = x_9.x_GLF_uniform_float_values[1];
  N = vec4<f32>(x_51, x_51, x_51, x_51);
  let x_53 : vec4<f32> = I;
  R = reflect(x_53, vec4<f32>(0.5, 0.5, 0.5, 0.5));
  let x_55 : vec4<f32> = I;
  let x_57 : f32 = x_9.x_GLF_uniform_float_values[2];
  let x_58 : vec4<f32> = N;
  let x_59 : vec4<f32> = I;
  let x_62 : vec4<f32> = N;
  ref = (x_55 - (x_62 * (x_57 * dot(x_58, x_59))));
  let x_65 : vec4<f32> = R;
  let x_66 : vec4<f32> = ref;
  let x_69 : f32 = x_9.x_GLF_uniform_float_values[0];
  if ((distance(x_65, x_66) < x_69)) {
    let x_75 : i32 = x_6.x_GLF_uniform_int_values[0];
    let x_78 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_81 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_84 : i32 = x_6.x_GLF_uniform_int_values[0];
    x_GLF_color = vec4<f32>(f32(x_75), f32(x_78), f32(x_81), f32(x_84));
  } else {
    let x_88 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_89 : f32 = f32(x_88);
    x_GLF_color = vec4<f32>(x_89, x_89, x_89, x_89);
  }
  return;
}

struct main_out {
  @location(0)
  x_GLF_color_1 : vec4<f32>;
};

@stage(fragment)
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
