#include <metal_stdlib>

using namespace metal;
struct buf2 {
  /* 0x0000 */ float zero;
};
struct tint_padded_array_element {
  /* 0x0000 */ float el;
  /* 0x0004 */ int8_t tint_pad[12];
};
struct tint_array_wrapper {
  /* 0x0000 */ tint_padded_array_element arr[1];
};
struct buf0 {
  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
};
struct tint_padded_array_element_1 {
  /* 0x0000 */ int el;
  /* 0x0004 */ int8_t tint_pad_1[12];
};
struct tint_array_wrapper_1 {
  /* 0x0000 */ tint_padded_array_element_1 arr[2];
};
struct buf1 {
  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf2& x_6, constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_4) {
  int a = 0;
  int x_32 = 0;
  float const x_34 = x_6.zero;
  float const x_36 = x_8.x_GLF_uniform_float_values.arr[0].el;
  if ((x_34 < x_36)) {
    int const x_42 = x_10.x_GLF_uniform_int_values.arr[1].el;
    x_32 = x_42;
  } else {
    int const x_44 = x_10.x_GLF_uniform_int_values.arr[0].el;
    x_32 = x_44;
  }
  int const x_45 = x_32;
  a = ~((x_45 | 1));
  int const x_48 = a;
  int const x_50 = x_10.x_GLF_uniform_int_values.arr[0].el;
  if ((x_48 == ~(x_50))) {
    int const x_57 = x_10.x_GLF_uniform_int_values.arr[0].el;
    int const x_60 = x_10.x_GLF_uniform_int_values.arr[1].el;
    int const x_63 = x_10.x_GLF_uniform_int_values.arr[1].el;
    int const x_66 = x_10.x_GLF_uniform_int_values.arr[0].el;
    *(tint_symbol_4) = float4(float(x_57), float(x_60), float(x_63), float(x_66));
  } else {
    int const x_70 = x_10.x_GLF_uniform_int_values.arr[1].el;
    float const x_71 = float(x_70);
    *(tint_symbol_4) = float4(x_71, x_71, x_71, x_71);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf2& x_6 [[buffer(2)]], constant buf0& x_8 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_6, x_8, x_10, &(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;
}

