Apache Traffic Server
Copyright 2014 The Apache Software Foundation

This product includes software developed at
  - The Apache Software Foundation (http://www.apache.org/).
  - Yahoo! Inc
  - Network Geographics (http://network-geographics.com)
  - OmniTI
  - Comcast
  - LinkedIn
  - Mike Pall

~~~

Codebase originally donated by Yahoo:

Copyright (C) 2009 Yahoo! Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

~~~

lib/wccp and lib/tsconfig developed by Network Geographics.
Copyright (C) 2010 Network Geographics, Inc.

~~~

WebSocket support developed by LinkedIn
Copyright (C) 2014 LinkedIn

~~~

Cacheurl Plugin developed by OmniTI on behalf of Google.
Copyright (C) 2011 Google Inc.

~~~

stale_while_revalidate Plugin developed by OmniTI on behalf of Oregon Health & Science University
Copyright (C) 2012 Oregon Health & Science University

~~~

healthcheck Plugin developed by GoDaddy.
Copyright (C) 2012 GoDaddy.

~~~

lib/atscppapi developed by LinkedIn
Copyright (c) 2013 LinkedIn

~~~

remap_stats and url_sig plugins developed by Comcast.
Copyright (C) 2014 Comcast

~~~

LuaJIT -- a Just-In-Time Compiler for Lua. http://luajit.org/
Copyright (C) 2005-2014 Mike Pall. All rights reserved.
