#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 ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((x_27 & 1)) + as_type<uint>((x_28 & 1))))) + as_type<uint>(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;
}

