#include <metal_stdlib>

using namespace metal;

template<typename T, int N, int M>
inline vec<T, M> operator*(matrix<T, N, M> lhs, packed_vec<T, N> rhs) {
  return lhs * vec<T, N>(rhs);
}

template<typename T, int N, int M>
inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
  return vec<T, M>(lhs) * rhs;
}

struct Simulation {
  /* 0x0000 */ uint i;
};

struct tint_array_wrapper {
  /* 0x0000 */ float3 arr[8];
};

struct Particle {
  /* 0x0000 */ tint_array_wrapper position;
  /* 0x0080 */ float lifetime;
  /* 0x0084 */ int8_t tint_pad[12];
  /* 0x0090 */ float4 color;
  /* 0x00a0 */ packed_float3 velocity;
  /* 0x00ac */ int8_t tint_pad_1[4];
};

struct Particles {
  /* 0x0000 */ Particle p[1];
};

kernel void tint_symbol(const device Particles* tint_symbol_1 [[buffer(1)]], const constant Simulation* tint_symbol_2 [[buffer(0)]]) {
  Particle particle = (*(tint_symbol_1)).p[0];
  particle.position.arr[(*(tint_symbol_2)).i] = particle.position.arr[(*(tint_symbol_2)).i];
  return;
}

