screw it i'll write documentation later