#include <metal_stdlib>

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

void main_1(thread float4* const tint_symbol_3) {
  bool x_29 = false;
  float x_30 = 0.0f;
  float x_31 = 0.0f;
  float x_32 = 0.0f;
  bool x_33 = false;
  float x_34 = 0.0f;
  float x_35 = 0.0f;
  float x_36 = 0.0f;
  float f = 0.0f;
  float i = 0.0f;
  float param = 0.0f;
  float param_1 = 0.0f;
  f = 0.0f;
  i = 0.0f;
  while (true) {
    float const x_38 = i;
    param = x_38;
    x_33 = false;
    while (true) {
      float const x_41 = param;
      x_35 = x_41;
      while (true) {
        float const x_48 = x_35;
        float const x_49 = param;
        if ((x_48 == x_49)) {
          float const x_53 = x_35;
          x_33 = true;
          x_34 = x_53;
          break;
        }
        float const x_54 = x_35;
        x_35 = (x_54 + 1.0f);
        {
          float const x_56 = x_35;
          float const x_57 = param;
          if ((x_56 < x_57)) {
          } else {
            break;
          }
        }
      }
      bool const x_59 = x_33;
      if (x_59) {
        break;
      }
      x_33 = true;
      x_34 = 0.0f;
      break;
    }
    float const x_61 = x_34;
    x_36 = x_61;
    f = x_61;
    param_1 = 1.0f;
    x_29 = false;
    while (true) {
      float const x_63 = param_1;
      x_31 = x_63;
      while (true) {
        float const x_70 = x_31;
        float const x_71 = param_1;
        if ((x_70 == x_71)) {
          float const x_75 = x_31;
          x_29 = true;
          x_30 = x_75;
          break;
        }
        float const x_76 = x_31;
        x_31 = (x_76 + 1.0f);
        {
          float const x_78 = x_31;
          float const x_79 = param_1;
          if ((x_78 < x_79)) {
          } else {
            break;
          }
        }
      }
      bool const x_81 = x_29;
      if (x_81) {
        break;
      }
      x_29 = true;
      x_30 = 0.0f;
      break;
    }
    float const x_83 = x_30;
    x_32 = x_83;
    float const x_84 = i;
    float const x_85 = (x_84 + x_83);
    i = x_85;
    if ((x_85 < 6.0f)) {
    } else {
      break;
    }
  }
  float const x_87 = f;
  if ((x_87 == 5.0f)) {
    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
  main_1(tint_symbol_4);
  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
  return tint_symbol_2;
}

fragment tint_symbol_1 tint_symbol() {
  thread float4 tint_symbol_5 = 0.0f;
  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

float func_f1_(thread float* const x) {
  bool x_93 = false;
  float x_94 = 0.0f;
  float a = 0.0f;
  while (true) {
    float const x_96 = *(x);
    a = x_96;
    while (true) {
      float const x_103 = a;
      float const x_104 = *(x);
      if ((x_103 == x_104)) {
        float const x_108 = a;
        x_93 = true;
        x_94 = x_108;
        break;
      }
      float const x_109 = a;
      a = (x_109 + 1.0f);
      {
        float const x_111 = a;
        float const x_112 = *(x);
        if ((x_111 < x_112)) {
        } else {
          break;
        }
      }
    }
    bool const x_114 = x_93;
    if (x_114) {
      break;
    }
    x_93 = true;
    x_94 = 0.0f;
    break;
  }
  float const x_116 = x_94;
  return x_116;
}

