Apache Sling Scripting Sightly Read-Eval-Print-Loop Environment
Copyright 2014 The Apache Software Foundation

The Apache Sling Sightly REPL bundle is based on source code originally developed
by Adobe Systems Inc. (http://www.adobe.com/).
