Apache Serf
Copyright 2016 The Apache Software Foundation

This product includes software developed by many people, and distributed
under Contributor License Agreements to The Apache Software Foundation
(http://www.apache.org/).  See the revision logs for an exact contribution
history.
