Apache CouchDB
Copyright 2009 The Apache Software Foundation

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

This product also includes the following third-party components:

 * ac_check_icu.m4 (http://autoconf-archive.cryp.to/ac_check_icu.html)

   Copyright 2008, Akos Maroy <darkeye@tyrell.hu>

 * ac_check_curl.m4 (http://autoconf-archive.cryp.to/ac_check_curl.html)

   Copyright 2008, Akos Maroy <darkeye@tyrell.hu>

 * jQuery (http://jquery.com/)

   Copyright 2010, John Resig

 * json2.js (http://www.json.org/)

   In the public domain

 * MochiWeb (http://code.google.com/p/mochiweb/)

   Copyright 2007, Mochi Media Coporation

 * ibrowse (http://github.com/cmullaparthi/ibrowse/tree/master)

   Copyright 2009, Chandrashekhar Mullaparthi

 * Erlang OAuth (http://github.com/tim/erlang-oauth/tree/master)

   Copyright 2009, Tim Fletcher <http://tfletcher.com/>

 * ETap (http://github.com/ngerakines/etap/)

   Copyright 2009, Nick Gerakines <nick@gerakines.net>

 * mimeparse.js (http://code.google.com/p/mimeparse/)

   Copyright 2009, Chris Anderson <jchris@apache.org>

 * base64.js

   Copyright 1999, Masanao Izumo <iz@onicos.co.jp>

 * jspec.js (http://visionmedia.github.com/jspec/)

  Copyright 2010 TJ Holowaychuk <tj@vision-media.ca>
