Code is commented, should be easier to follow