#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_4) {
  bool x_36 = false;
  float3 x_37 = 0.0f;
  int x_6 = 0;
  float3 x_38 = 0.0f;
  float3 x_51 = 0.0f;
  float3 x_54 = 0.0f;
  bool x_40_phi = false;
  float3 x_55_phi = 0.0f;
  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  x_36 = false;
  x_40_phi = false;
  while (true) {
    bool x_45 = false;
    bool x_45_phi = false;
    int x_7_phi = 0;
    float3 x_51_phi = 0.0f;
    bool x_52_phi = false;
    bool const x_40 = x_40_phi;
    x_6 = 0;
    x_45_phi = x_40;
    x_7_phi = 0;
    while (true) {
      x_45 = x_45_phi;
      int const x_7 = x_7_phi;
      x_51_phi = float3(0.0f, 0.0f, 0.0f);
      x_52_phi = x_45;
      if ((x_7 < 0)) {
      } else {
        break;
      }
      x_36 = true;
      x_37 = float3(1.0f, 1.0f, 1.0f);
      x_51_phi = float3(1.0f, 1.0f, 1.0f);
      x_52_phi = true;
      break;
      {
        x_45_phi = false;
        x_7_phi = 0;
      }
    }
    x_51 = x_51_phi;
    bool const x_52 = x_52_phi;
    x_55_phi = x_51;
    if (x_52) {
      break;
    }
    x_54 = float3(0.0f, 0.0f, 0.0f);
    x_36 = true;
    x_55_phi = x_54;
    break;
    {
      x_40_phi = false;
    }
  }
  float3 const x_55 = x_55_phi;
  x_38 = x_55;
  return;
}

fragment tint_symbol_1 tint_symbol() {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(&(tint_symbol_5));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

float3 GLF_live4drawShape_() {
  bool x_57 = false;
  float3 x_58 = 0.0f;
  int i = 0;
  float3 x_71 = 0.0f;
  float3 x_74 = 0.0f;
  bool x_60_phi = false;
  float3 x_75_phi = 0.0f;
  x_60_phi = false;
  while (true) {
    bool x_65 = false;
    bool x_65_phi = false;
    int x_8_phi = 0;
    float3 x_71_phi = 0.0f;
    bool x_72_phi = false;
    bool const x_60 = x_60_phi;
    i = 0;
    x_65_phi = x_60;
    x_8_phi = 0;
    while (true) {
      x_65 = x_65_phi;
      int const x_8 = x_8_phi;
      x_71_phi = float3(0.0f, 0.0f, 0.0f);
      x_72_phi = x_65;
      if ((x_8 < 0)) {
      } else {
        break;
      }
      x_57 = true;
      x_58 = float3(1.0f, 1.0f, 1.0f);
      x_71_phi = float3(1.0f, 1.0f, 1.0f);
      x_72_phi = true;
      break;
      {
        x_65_phi = false;
        x_8_phi = 0;
      }
    }
    x_71 = x_71_phi;
    bool const x_72 = x_72_phi;
    x_75_phi = x_71;
    if (x_72) {
      break;
    }
    x_74 = float3(0.0f, 0.0f, 0.0f);
    x_57 = true;
    x_75_phi = x_74;
    break;
    {
      x_60_phi = false;
    }
  }
  float3 const x_75 = x_75_phi;
  return x_75;
}

