#include <metal_stdlib>

using namespace metal;
struct main_out {
  float x_1_1;
  float x_2_1;
  float x_3_1;
  float x_4_1;
  float x_5_1;
  float x_6_1;
};
struct tint_symbol_1 {
  float x_1_1 [[color(1)]];
  float x_2_1 [[color(2)]] [[centroid_perspective]];
  float x_3_1 [[color(3)]] [[sample_perspective]];
  float x_4_1 [[color(4)]] [[no_perspective]];
  float x_5_1 [[color(5)]] [[centroid_no_perspective]];
  float x_6_1 [[color(6)]] [[sample_no_perspective]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(thread float* const tint_symbol_3, thread float* const tint_symbol_4, thread float* const tint_symbol_5, thread float* const tint_symbol_6, thread float* const tint_symbol_7, thread float* const tint_symbol_8) {
  main_1();
  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_3), .x_2_1=*(tint_symbol_4), .x_3_1=*(tint_symbol_5), .x_4_1=*(tint_symbol_6), .x_5_1=*(tint_symbol_7), .x_6_1=*(tint_symbol_8)};
  return tint_symbol_2;
}

fragment tint_symbol_1 tint_symbol() {
  thread float tint_symbol_9 = 0.0f;
  thread float tint_symbol_10 = 0.0f;
  thread float tint_symbol_11 = 0.0f;
  thread float tint_symbol_12 = 0.0f;
  thread float tint_symbol_13 = 0.0f;
  thread float tint_symbol_14 = 0.0f;
  main_out const inner_result = tint_symbol_inner(&(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_1_1 = inner_result.x_1_1;
  wrapper_result.x_2_1 = inner_result.x_2_1;
  wrapper_result.x_3_1 = inner_result.x_3_1;
  wrapper_result.x_4_1 = inner_result.x_4_1;
  wrapper_result.x_5_1 = inner_result.x_5_1;
  wrapper_result.x_6_1 = inner_result.x_6_1;
  return wrapper_result;
}

