#include <metal_stdlib>
using namespace metal;
struct VertexOutput {
  float4 pos;
};
struct vertex_main_outputs {
  float4 VertexOutput_pos [[position]];
};

void asinh_cf8603() {
  float4 res = float4(0.88137358427047729492f);
}
fragment void fragment_main() {
  asinh_cf8603();
}
kernel void compute_main() {
  asinh_cf8603();
}
VertexOutput vertex_main_inner() {
  VertexOutput out = {};
  out.pos = float4(0.0f);
  asinh_cf8603();
  return out;
}
vertex vertex_main_outputs vertex_main() {
  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
}
