Except as otherwise noted (below and/or in individual files), this project is
licensed under the Apache License, Version 2.0 <LICENSE-APACHE>
<http://www.apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT>
<http://opensource.org/licenses/MIT>, at your option.

Copyright is retained by contributors and/or the organisations they
represent(ed) -- this project does not require copyright assignment. Please see
version control history for a full list of contributors. Note that some files
may include explicit copyright and/or licensing notices.

The following contributors wish to explicitly make it known that the copyright
of their contributions is retained by an organisation:

    Edd Barrett <vext01@gmail.com>: copyright retained by
      King's College London
    Jacob Hughes <jh@jakehughes.uk>: copyright retained by
      King's College London
    Laurence Tratt <laurie@tratt.net>: copyright retained by
      King's College London
