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

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var count0 : i32;
  var count1 : i32;
  var i : i32;
  let x_29 : i32 = x_6.x_GLF_uniform_int_values[2];
  count0 = x_29;
  let x_31 : i32 = x_6.x_GLF_uniform_int_values[2];
  count1 = x_31;
  let x_33 : i32 = x_6.x_GLF_uniform_int_values[2];
  i = x_33;
  loop {
    let x_38 : i32 = i;
    let x_40 : i32 = x_6.x_GLF_uniform_int_values[4];
    if ((x_38 < x_40)) {
    } else {
      break;
    }
    let x_43 : i32 = i;
    switch(x_43) {
      case 0, 1: {
        let x_47 : i32 = count0;
        count0 = (x_47 + 1);
        fallthrough;
      }
      case 2, 3: {
        let x_49 : i32 = count1;
        count1 = (x_49 + 1);
      }
      default: {
      }
    }

    continuing {
      let x_51 : i32 = i;
      i = (x_51 + 1);
    }
  }
  let x_53 : i32 = count1;
  let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
  if ((x_53 == x_55)) {
    let x_61 : i32 = x_6.x_GLF_uniform_int_values[3];
    let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
    let x_67 : i32 = x_6.x_GLF_uniform_int_values[2];
    let x_70 : i32 = x_6.x_GLF_uniform_int_values[3];
    x_GLF_color = vec4<f32>(f32(x_61), f32(x_64), f32(x_67), f32(x_70));
  } else {
    let x_74 : i32 = x_6.x_GLF_uniform_int_values[2];
    let x_75 : f32 = f32(x_74);
    x_GLF_color = vec4<f32>(x_75, x_75, x_75, x_75);
  }
  let x_77 : i32 = count0;
  let x_79 : i32 = x_6.x_GLF_uniform_int_values[1];
  if ((x_77 != x_79)) {
    let x_84 : i32 = x_6.x_GLF_uniform_int_values[2];
    let x_85 : f32 = f32(x_84);
    x_GLF_color = vec4<f32>(x_85, x_85, x_85, x_85);
  }
  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);
}
