struct tmp_struct {
  nmb : array<i32, 1>;
};

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_24 : array<i32, 1>;
  var x_68 : bool = false;
  var x_17 : i32;
  var x_18 : i32;
  var x_19 : i32;
  var x_20 : i32;
  var x_69 : bool = false;
  var tmp_float : f32;
  var color : vec3<f32>;
  loop {
    var x_25 : i32;
    var x_101 : vec3<f32>;
    var x_79_phi : bool;
    var x_26_phi : i32;
    let x_75 : f32 = x_11.injectionSwitch.y;
    tmp_float = x_75;
    let x_76 : vec3<f32> = vec3<f32>(x_75, x_75, x_75);
    color = x_76;
    x_24 = tmp_struct(array<i32, 1>(0)).nmb;
    x_68 = false;
    x_79_phi = false;
    loop {
      var x_21_phi : i32;
      var x_25_phi : i32;
      var x_93_phi : bool;
      let x_79 : bool = x_79_phi;
      x_18 = 1;
      x_21_phi = 1;
      loop {
        let x_21 : i32 = x_21_phi;
        x_25_phi = 0;
        x_93_phi = x_79;
        if ((x_21 > 10)) {
        } else {
          break;
        }
        let x_22 : i32 = (x_21 - 1);
        x_19 = x_22;
        let x_23 : i32 = x_24[x_22];
        if ((x_23 == 1)) {
          x_68 = true;
          x_17 = 1;
          x_25_phi = 1;
          x_93_phi = true;
          break;
        }
        x_18 = x_22;

        continuing {
          x_21_phi = x_22;
        }
      }
      x_25 = x_25_phi;
      let x_93 : bool = x_93_phi;
      x_26_phi = x_25;
      if (x_93) {
        break;
      }
      x_68 = true;
      x_17 = -1;
      x_26_phi = -1;
      break;

      continuing {
        x_79_phi = false;
      }
    }
    let x_26 : i32 = x_26_phi;
    x_20 = x_26;
    if ((x_26 == -1)) {
      discard;
    } else {
      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
      let x_100 : vec2<f32> = (vec2<f32>(x_76.y, x_76.z) + vec2<f32>(1.0, 1.0));
      x_101 = vec3<f32>(x_76.x, x_100.x, x_100.y);
      color = x_101;
      let x_103 : f32 = x_11.injectionSwitch.x;
      if ((x_103 > 1.0)) {
        x_69 = true;
        break;
      }
    }
    x_GLF_color = vec4<f32>(x_101.x, x_101.y, x_101.z, 1.0);
    x_69 = true;
    break;
  }
  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);
}

fn binarySearch_struct_tmp_struct_i1_1_1_(obj : ptr<function, tmp_struct>) -> i32 {
  var x_112 : bool = false;
  var x_16 : i32;
  var one : i32;
  var zero : i32;
  var x_27 : i32;
  var x_114_phi : bool;
  var x_28_phi : i32;
  x_114_phi = false;
  loop {
    var x_15_phi : i32;
    var x_27_phi : i32;
    var x_128_phi : bool;
    let x_114 : bool = x_114_phi;
    one = 1;
    x_15_phi = 1;
    loop {
      let x_15 : i32 = x_15_phi;
      x_27_phi = 0;
      x_128_phi = x_114;
      if ((x_15 > 10)) {
      } else {
        break;
      }
      let x_13 : i32 = (x_15 - 1);
      zero = x_13;
      let x_14 : i32 = (*(obj)).nmb[x_13];
      if ((x_14 == 1)) {
        x_112 = true;
        x_16 = 1;
        x_27_phi = 1;
        x_128_phi = true;
        break;
      }
      one = x_13;

      continuing {
        x_15_phi = x_13;
      }
    }
    x_27 = x_27_phi;
    let x_128 : bool = x_128_phi;
    x_28_phi = x_27;
    if (x_128) {
      break;
    }
    x_112 = true;
    x_16 = -1;
    x_28_phi = -1;
    break;

    continuing {
      x_114_phi = false;
    }
  }
  let x_28 : i32 = x_28_phi;
  return x_28;
}
