Finally think I'm done just have to add some test cases and write up
everything.