#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[2];
};
struct Array {
  tint_array_wrapper values;
};
struct buf0 {
  /* 0x0000 */ int zero;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_8, thread float4* const tint_symbol_6) {
  bool x_50 = false;
  int x_15 = 0;
  int x_16 = 0;
  Array param = {};
  int x_19 = 0;
  int x_20_phi = 0;
  tint_array_wrapper const tint_symbol_3 = {.arr={0, 0}};
  Array const tint_symbol_4 = {.values=tint_symbol_3};
  param = tint_symbol_4;
  x_50 = false;
  while (true) {
    int x_19_phi = 0;
    bool x_63_phi = false;
    while (true) {
      int const x_17 = x_8.zero;
      int const x_18 = param.values.arr[x_17];
      if ((x_18 == 1)) {
        x_50 = true;
        x_15 = 1;
        x_19_phi = 1;
        x_63_phi = true;
        break;
      }
      x_19_phi = 0;
      x_63_phi = false;
      break;
    }
    x_19 = x_19_phi;
    bool const x_63 = x_63_phi;
    x_20_phi = x_19;
    if (x_63) {
      break;
    }
    x_50 = true;
    x_15 = 1;
    x_20_phi = 1;
    break;
  }
  int const x_20 = x_20_phi;
  x_16 = x_20;
  if ((x_20 == 1)) {
    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_6) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
  thread float4 tint_symbol_7 = 0.0f;
  main_1(x_8, &(tint_symbol_7));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_7};
  tint_symbol_1 const tint_symbol_5 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_5;
}

int func_struct_Array_i1_2_1_(constant buf0& x_8, thread Array* const a) {
  bool x_70 = false;
  int x_12 = 0;
  int x_13 = 0;
  bool x_72_phi = false;
  int x_14_phi = 0;
  x_72_phi = false;
  while (true) {
    bool x_77 = false;
    bool x_77_phi = false;
    int x_13_phi = 0;
    bool x_87_phi = false;
    bool const x_72 = x_72_phi;
    x_77_phi = x_72;
    while (true) {
      x_77 = x_77_phi;
      int const x_10 = x_8.zero;
      int const x_11 = (*(a)).values.arr[x_10];
      if ((x_11 == 1)) {
        x_70 = true;
        x_12 = 1;
        x_13_phi = 1;
        x_87_phi = true;
        break;
      }
      x_13_phi = 0;
      x_87_phi = x_77;
      break;
      {
        x_77_phi = false;
      }
    }
    x_13 = x_13_phi;
    bool const x_87 = x_87_phi;
    x_14_phi = x_13;
    if (x_87) {
      break;
    }
    x_70 = true;
    x_12 = 1;
    x_14_phi = 1;
    break;
    {
      x_72_phi = false;
    }
  }
  int const x_14 = x_14_phi;
  return x_14;
}

