Open CASCADE Technology Public License
License version: 6.6 March, 2013

Open CASCADE S.A.S. releases and makes publicly available the source
code of the software Open CASCADE Technology to the free software
development community under the terms and conditions of this license.

It is not the purpose of this license to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this license has the sole purpose of protecting the
integrity of the free software distribution system, which is implemented
by public license practices. Many people have made generous
contributions to the wide range of software distributed through that
system in reliance on consistent application of that system; it is up to
the author/donor to decide if he or she is willing to distribute
software through any other system and a licensee cannot impose that
choice.


Please read this license carefully and completely before downloading
this software. By downloading, using, modifying, distributing and
sublicensing this software, you indicate your acceptance to be bound by
the terms and conditions of this license. If you do not want to accept
or cannot accept for any reasons the terms and conditions of this
license, please do not download or use in any manner this software.

1. Definitions

Unless there is something in the subject matter or in the context
inconsistent therewith, the capitalized terms used in this License shall
have the following meaning.

"Applicable Intellectual Property Rights" means (a) with respect to the
Initial Developer, any rights under patents or patents applications or
other intellectual property rights that are now or hereafter acquired,
owned by or assigned to the Initial Developer and that cover subject
matter contained in the Original Code, but only to the extent necessary
to use, reproduce, modify, distribute or sublicense the Original Code
without infringement; and (b) with respect to You or any Contributor,
any rights under patents or patents applications or other intellectual
property rights that are now or hereafter acquired, owned by or assigned
to You or to such Contributor and that cover subject matter contained in
Your Modifications or in such Contributor's Modifications, taken alone
or in combination with Original Code.

"Contributor" means each individual or legal entity that creates or
contributes to the creation of any Modification, including the Initial
Developer.

"Derivative Program": means a new program combining the Software or
portions thereof with other source code not governed by the terms of
this License.

"Initial Developer": means Open CASCADE S.A.S., with main offices at
1, place des Frères Montgolfier, 78280 Guyancourt, France.

"Modifications": mean any addition to, deletion from or change to the
substance or the structure of the Software. When source code of the
Software is released as a series of files, a Modification is: (a) any
addition to, deletion from or change to the contents of a file
containing the Software or (b) any new file or other representation of
computer program statements that contains any part of the Software. By
way of example, Modifications include any debug of, or improvement to,
the Original Code or any of its components or portions as well as its
next versions or releases thereof.

"Original Code": means (a) the source code of the software Open CASCADE
Technology originally made available by the Initial Developer under this
License, including the source code of any updates or upgrades of the
Original Code and (b) the object code compiled from such source code and
originally made available by Initial Developer under this License.

"Software": means the Original Code, the Modifications, the combination
of Original Code and any Modifications or any respective portions
thereof.

"You" or "Your": means an individual or a legal entity exercising rights
under this License.


2. Acceptance of license

By using, reproducing, modifying, distributing or sublicensing the
Software or any portion thereof, You expressly indicate Your acceptance
of the terms and conditions of this License and undertake to act in
accordance with all the provisions of this License applicable to You.


3. Scope and purpose

This License applies to the Software and You may not use, reproduce,
modify, distribute, sublicense or circulate the Software, or any portion
thereof, except as expressly provided under this License. Any attempt to
otherwise use, reproduce, modify, distribute or sublicense the Software
is void and will automatically terminate Your rights under this License.


4. Contributor license

Subject to the terms and conditions of this License, the Initial
Developer and each of the Contributors hereby grant You a world-wide,
royalty-free, irrevocable and non-exclusive license under the Applicable
Intellectual Property Rights they own or control, to use, reproduce,
modify, distribute and sublicense the Software provided that:

You reproduce in all copies of the Software the copyright and other
proprietary notices and disclaimers of the Initial Developer as they
appear in the Original Code and attached hereto as Schedule "A" and any
other notices or disclaimers attached to the Software and keep intact
all notices in the Original Code that refer to this License and to the
absence of any warranty;
You include a copy of this License with every copy of the Software You
distribute;
If you distribute or sublicense the Software (as modified by You or on
Your behalf as the case may be), You cause such Software to be licensed
as a whole, at no charge, to all third parties, under the terms and
conditions of the License, making in particular available to all third
parties the source code of the Software;
You document all Your Modifications, indicate the date of each such
Modifications, designate the version of the Software You used,
prominently include a file carrying such information with respect to the
Modifications and duplicate the copyright and other proprietary notices
and disclaimers attached hereto as Schedule "B" or any other notices or
disclaimers attached to the Software with your Modifications.

For greater certainty, it is expressly understood that You may freely
create Derivative Programs (without any obligation to publish such
Derivative Program) and distribute same as a single product. In such
case, You must ensure that all the requirements of this License are
fulfilled for the Software or any portion thereof.


5. Your license

You hereby grant all Contributors and anyone who becomes a party under
this License a world-wide, non-exclusive, royalty-free and irrevocable
license under the Applicable Intellectual Property Rights owned or
controlled by You, to use, reproduce, modify, distribute and sublicense
all Your Modifications under the terms and conditions of this License.


6. Software subject to license

Your Modifications shall be governed by the terms and conditions of this
License. You are not authorized to impose any other terms or conditions
than those prevailing under this License when You distribute and/or
sublicense the Software, save and except as permitted under Section 7
hereof.


7. Additional terms

You may choose to offer, on a non-exclusive basis, and to charge a fee
for any warranty, support, maintenance, liability obligations or other
rights consistent with the scope of this License with respect to the
Software (the "Additional Terms") to the recipients of the Software.
However, You may do so only on Your own behalf and on Your sole and
exclusive responsibility. You must obtain the recipient's agreement that
any such Additional Terms are offered by You alone, and You hereby agree
to indemnify, defend and hold the Initial Developer and any Contributor
harmless for any liability incurred by or claims asserted against the
Initial Developer or any Contributors with respect to any such
Additional Terms.


8. Disclaimer of warranty

The Software is provided under this License on an "as is" basis, without
warranty of any kind, including without limitation, warranties that the
Software is free of defects, merchantable, fit for a particular purpose
or non-infringing. The entire risk as to the quality and performance of
the Software is with You.


9. Liability

Under no circumstances shall You, the Initial Developer or any
Contributor be liable to any person for any direct or indirect damages
of any kind including, without limitation, damages for loss of goodwill,
loss of data, work stoppage, computer failure or malfunction or any and
all other commercial damages or losses resulting from or relating to
this License or indirectly to the use of the Software.


10. Trademark

This License does not grant any rights to use the trademarks, trade
names and domain names "MATRA", "EADS Matra Datavision", "CAS.CADE",
"Open CASCADE", "opencascade.com" and "opencascade.org" or any other
trademarks, trade names or domain names used or owned by the Initial
Developer.


11. Copyright

The Initial Developer retains all rights, title and interest in and to
the Original Code. You may not remove the copyright © notice which
appears when You download the Software.


12. Term

This License is granted to You for a term equal to the remaining period
of protection covered by the intellectual property rights applicable to
the Original Code.


13. Termination

In case of termination, as provided in Section 3 above, You agree to
immediately stop any further use, reproduction, modification,
distribution and sublicensing of the Software and to destroy all copies
of the Software that are in Your possession or control. All sublicenses
of the Software which have been properly granted prior to termination
shall survive any termination of this License. In addition, Sections 5,
8 to 11, 13.2 and 15.2 of this License, in reason of their nature, shall
survive the termination of this License for a period of fifteen (15)
years.


14. Versions of the license

The Initial Developer may publish new versions of this License from time
to time. Once Original Code has been published under a particular
version of this License, You may choose to continue to use it under the
terms and conditions of that version or use the Original Code under the
terms of any subsequent version of this License published by the Initial
Developer.


15. Miscellaneous

15.1 Relationship of Parties

This License will not be construed as creating an agency, partnership,
joint venture or any other form of legal association between You and the
Initial Developer, and You will not represent to the contrary, whether
expressly, by implication or otherwise.

15.2 Independent Development

Nothing in this License will impair the Initial Developer's right to
acquire, license, develop, have others develop for it, market or
distribute technology or products that perform the same or similar
functions as, or otherwise compete with, Modifications, Derivative
Programs, technology or products that You may develop, produce, market
or distribute.

15.3 Severability

If for any reason a court of competent jurisdiction finds any provision
of this License, or portion thereof, to be unenforceable, that provision
of the License will be enforced to the maximum extent permissible so as
to effect the economic benefits and intent of the parties, and the
remainder of this License will continue in full force and extent.


END OF THE TERMS AND
CONDITIONS OF THIS LICENSE


Open CASCADE S.A.S. is a French société par actions simplifiée having
its main offices at 1, place des Frères Montgolfier, 78280 Guyancourt,
France. Its web site is located at the following address
www.opencascade.com


Open CASCADE Technology Public License

Schedule "A"

The content of this file is subject to the Open CASCADE Technology
Public License Version 6.5 (the "License"). You may not use the content
of this file except in compliance with the License. Please obtain a copy
of the License at http://www.opencascade.org and read it completely
before using this file.

The Initial Developer of the Original Code is Open CASCADE S.A.S., with
main offices at 1, place des Frères Montgolfier, 78280 Guyancourt,
France. The Original Code is copyright © Open CASCADE S.A.S., 2001. All
rights reserved.

"The Original Code and all software distributed under the License are
distributed on an "AS IS" basis, without warranty of any kind, and the
Initial Developer hereby disclaims all such warranties, including
without limitation, any warranties of merchantability, fitness for a
particular purpose or non-infringement. Please see the License for the
specific terms and conditions governing rights and limitations under the
License".

End of Schedule "A"


Open CASCADE Technology Public License

Schedule "B"

"The content of this file is subject to the Open CASCADE Technology
Public License Version 6.5 (the "License"). You may not use the content
of this file except in compliance with the License. Please obtain a copy
of the License at http://www.opencascade.org and read it completely
before using this file.

The Initial Developer of the Original Code is Open CASCADE S.A.S., with
main offices at 1, place des Frères Montgolfier, 78280 Guyancourt,
France. The Original Code is copyright © Open CASCADE S.A.S., 2001. All
rights reserved.

Modifications to the Original Code have been made by
________________________. Modifications are copyright © [Year to be
included]. All rights reserved.

The software Open CASCADE Technology and all software distributed under
the License are distributed on an "AS IS" basis, without warranty of any
kind, and the Initial Developer hereby disclaims all such warranties,
including without limitation, any warranties of merchantability, fitness
for a particular purpose or non-infringement. Please see the License for
the specific terms and conditions governing rights and limitations under
the License".

End of Schedule "B"
