This was my CPSC 310 project.