#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 x_8_1;
};
struct tint_symbol_2 {
  uint x_1_param [[attribute(1)]];
  uint2 x_2_param [[attribute(2)]];
  int x_3_param [[attribute(3)]];
  int2 x_4_param [[attribute(4)]];
  float x_5_param [[attribute(5)]] [[flat]];
  float2 x_6_param [[attribute(6)]] [[flat]];
};
struct tint_symbol_3 {
  float4 x_8_1 [[position]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(uint x_1_param, uint2 x_2_param, int x_3_param, int2 x_4_param, float x_5_param, float2 x_6_param, thread uint* const tint_symbol_5, thread uint2* const tint_symbol_6, thread int* const tint_symbol_7, thread int2* const tint_symbol_8, thread float* const tint_symbol_9, thread float2* const tint_symbol_10, thread float4* const tint_symbol_11) {
  *(tint_symbol_5) = x_1_param;
  *(tint_symbol_6) = x_2_param;
  *(tint_symbol_7) = x_3_param;
  *(tint_symbol_8) = x_4_param;
  *(tint_symbol_9) = x_5_param;
  *(tint_symbol_10) = x_6_param;
  main_1();
  main_out const tint_symbol_4 = {.x_8_1=*(tint_symbol_11)};
  return tint_symbol_4;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread uint tint_symbol_12 = 0u;
  thread uint2 tint_symbol_13 = 0u;
  thread int tint_symbol_14 = 0;
  thread int2 tint_symbol_15 = 0;
  thread float tint_symbol_16 = 0.0f;
  thread float2 tint_symbol_17 = 0.0f;
  thread float4 tint_symbol_18 = 0.0f;
  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_2_param, tint_symbol_1.x_3_param, tint_symbol_1.x_4_param, tint_symbol_1.x_5_param, tint_symbol_1.x_6_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.x_8_1 = inner_result.x_8_1;
  return wrapper_result;
}

