Written by:
        
Jude Nagurney <jude@pwan.org>

Contributions by:

Gwern Branwen <gwen0@gmail.com>