#include <metal_stdlib>

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

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

main_out tint_symbol_inner(uint x_4_param, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
  *(tint_symbol_4) = as_type<int>(x_4_param);
  main_1(tint_symbol_4);
  main_out const tint_symbol_2 = {.position_1=*(tint_symbol_5)};
  return tint_symbol_2;
}

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

