#include <metal_stdlib>

using namespace metal;
struct main_out {
  int x_4_1;
};
struct tint_symbol_2 {
  int x_3_param [[user(locn0)]];
};
struct tint_symbol_3 {
  int x_4_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_6, thread int* const tint_symbol_7, thread int* const tint_symbol_8) {
  float4 const x_16 = *(tint_symbol_6);
  int const x_26 = *(tint_symbol_7);
  if (((((int(x_16.x) & 1) + (int(x_16.y) & 1)) + x_26) == int(x_16.z))) {
  }
  *(tint_symbol_8) = 1;
  return;
}

fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float4 tint_symbol_9 = 0.0f;
  thread int tint_symbol_10 = 0;
  thread int tint_symbol_11 = 0;
  int const x_3_param = tint_symbol_1.x_3_param;
  tint_symbol_9 = x_2_param;
  tint_symbol_10 = x_3_param;
  main_1(&(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
  main_out const tint_symbol_4 = {.x_4_1=tint_symbol_11};
  tint_symbol_3 const tint_symbol_5 = {.x_4_1=tint_symbol_4.x_4_1};
  return tint_symbol_5;
}

