Apache Flex
Copyright 2014 The Apache Software Foundation

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

The Initial Developer of the Original Code, known as Adobe Flex, 
is Adobe Systems Incorporated (http://www.adobe.com/).
    Copyright 2003 - 2012 Adobe Systems Incorporated. All Rights Reserved.

The asc compiler contains code written by Jeff Dyer at: 
    Copyright Mountain View Compiler Company (1998-2003).

The easing equations in the mx tween class are based on code written by Rober Penner.
    Copyright 2001 Robert Penner
    All rights reserved.

The Batik SVG toolkit source contains code from the World Wide Web Consortium (W3C) for
     the Document Object Model API (DOM API) and SVG Document Type Definition (DTD).

The Batik SVG toolkit source contains code from the International Organisation for
     Standardization for the definition of character entities used in the software's 
     documentation.

The Open Source Media Framework used by the video components is licensed under the 
    Mozilla Public License Version 1.1.  The source code can be found here:
    http://sourceforge.net/projects/osmf.adobe/files/OSMF%201.0%20%28final%20source%2C%20ASDocs%2C%20PDF%20guides%2C%20and%20release%20notes%29/OSMF_1.0.zip
