#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 x_4_1;
};
struct tint_symbol_1 {
  float4 x_4_1 [[position]];
};

void main_1(thread uint* const tint_symbol_3) {
  uint const x_2 = *(tint_symbol_3);
  return;
}

main_out tint_symbol_inner(uint x_1_param, thread uint* const tint_symbol_4, thread float4* const tint_symbol_5) {
  *(tint_symbol_4) = x_1_param;
  main_1(tint_symbol_4);
  main_out const tint_symbol_2 = {.x_4_1=*(tint_symbol_5)};
  return tint_symbol_2;
}

vertex tint_symbol_1 tint_symbol(uint x_1_param [[instance_id]]) {
  thread uint tint_symbol_6 = 0u;
  thread float4 tint_symbol_7 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_1_param, &(tint_symbol_6), &(tint_symbol_7));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_4_1 = inner_result.x_4_1;
  return wrapper_result;
}

