Sorry this is so long omg