      Apache Allura (incubating)
      Copyright 2012-2013 The Apache Software Foundation

      This product includes software developed at
      The Apache Software Foundation (http://www.apache.org/).

      This software contains library for converting various
      characters to ASCII encoding, written by Leonard Richardson
      and placed into public domain.
      
      This software contains library for checking maximum length
      of text area's content, written by Keith Wood.
      
      This software contains lightbox plugin for jQuery, written by
      Buck Wilson.
      
      Canvas functionality in Internet Explorer(r) is provided
      by code developed at Google Inc.
