First full submit

Not updated yet to reflect the requirements of this lab.