#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

float3 f_mf22_(thread float2x2* const m) {
  while (true) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  return float3(0.0f, 0.0f, 0.0f);
}

void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float2x2 param = float2x2(0.0f);
  float2x2 x_38_phi = float2x2(0.0f);
  float const x_34 = (*(tint_symbol_5)).x;
  x_38_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
  if ((x_34 >= 0.0f)) {
    x_38_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
  }
  float2x2 const x_38 = x_38_phi;
  param = (x_38 * x_38);
  float3 const x_40 = f_mf22_(&(param));
  *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(&(tint_symbol_7), &(tint_symbol_8));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_8};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

