#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 int* const tint_symbol_6, thread float4* const tint_symbol_7, thread int* const tint_symbol_8, texture2d<int, access::write> tint_symbol_9) {
  *(tint_symbol_6) = 1;
  float4 const x_23 = *(tint_symbol_7);
  int const x_27 = int(x_23.x);
  int const x_28 = int(x_23.y);
  int const x_33 = *(tint_symbol_8);
  if (((((x_27 & 1) + (x_28 & 1)) + x_33) == int(x_23.z))) {
  }
  tint_symbol_9.write(int4(x_27, 0, 0, 0), uint2(int2(x_27, x_28)));
  return;
}

fragment tint_symbol_3 tint_symbol(texture2d<int, access::write> tint_symbol_13 [[texture(0)]], float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float4 tint_symbol_10 = 0.0f;
  thread int tint_symbol_11 = 0;
  thread int tint_symbol_12 = 0;
  int const x_3_param = tint_symbol_1.x_3_param;
  tint_symbol_10 = x_2_param;
  tint_symbol_11 = x_3_param;
  main_1(&(tint_symbol_12), &(tint_symbol_10), &(tint_symbol_11), tint_symbol_13);
  main_out const tint_symbol_4 = {.x_4_1=tint_symbol_12};
  tint_symbol_3 const tint_symbol_5 = {.x_4_1=tint_symbol_4.x_4_1};
  return tint_symbol_5;
}

