#include <metal_stdlib>

using namespace metal;
struct S {
  int f0;
  bool3 f1;
};
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct tint_array_wrapper {
  float arr[9];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_7, thread float4* const tint_symbol_5) {
  S ll = {};
  tint_array_wrapper sums = {};
  S const tint_symbol_3 = {.f0=0, .f1=bool3(true, true, true)};
  ll = tint_symbol_3;
  while (true) {
    S const x_12 = ll;
    float const x_45 = x_7.injectionSwitch.y;
    if ((x_12.f0 != int(x_45))) {
    } else {
      break;
    }
    sums.arr[0] = 0.0f;
    {
      S const x_13 = ll;
      S const x_50 = ll;
      S x_51_1 = x_50;
      x_51_1.f0 = (x_13.f0 + 1);
      S const x_51 = x_51_1;
      ll = x_51;
    }
  }
  float const x_53 = sums.arr[0];
  float2 const x_54 = float2(x_53, x_53);
  *(tint_symbol_5) = float4(1.0f, x_54.x, x_54.y, 1.0f);
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
  thread float4 tint_symbol_6 = 0.0f;
  main_1(x_7, &(tint_symbol_6));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_6};
  tint_symbol_1 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_4;
}

