License Agreement for NVIDIA Performance Primitives Library

IMPORTANT NOTICE -- READ CAREFULLY: This License Agreement ("License") for
NVIDIA Performance Primitives Library, including computer software and
associated documentation (“Software”), is the LICENSE which governs use of the
SOFTWARE of NVIDIA Corporation and its subsidiaries ("NVIDIA") downloadable
herefrom. By downloading, installing, copying, or otherwise using the SOFTWARE,
You (as defined below) agree to be bound by the terms of this LICENSE. If You
do not agree to the terms of this LICENSE, do not download the SOFTWARE.


RECITALS

Use of NVIDIA's products requires three elements: the SOFTWARE, the NVIDIA GPU,
and a computer system. The SOFTWARE is protected by copyright laws and
international copyright treaties, as well as other intellectual property laws
and treaties. The SOFTWARE is not sold, and instead is only licensed for Your
use, strictly in accordance with this document. The hardware is protected by
various patents, and is sold, but this LICENSE does not cover that sale, since
it may not necessarily be sold as a package with the SOFTWARE. This LICENSE
sets forth the terms and conditions of the SOFTWARE LICENSE only.


1. DEFINITIONS

1.1 Licensee.  “Licensee,” “You,” or “Your” shall mean the entity or individual
that downloads and uses the SOFTWARE.

2. GRANT OF LICENSE

2.1 Rights and Limitations of Grant. NVIDIA hereby grants Licensee the
following non-exclusive, non-transferable, non-sublicensable (except as stated
otherwise below) right to use the SOFTWARE, with the following limitations:

2.1.1 Usage Rights. Licensee may install and use multiple copies of the
SOFTWARE on a shared computer or concurrently on different computers, and make
multiple back-up copies of the SOFTWARE, solely for Licensee’s use within
Licensee’s Enterprise. “Enterprise” shall mean individual use by Licensee or
any legal entity (such as a corporation or university) and the subsidiaries it
owns by more than 50 percent.

2.1.2 Source Code Rights:  Developer shall have the right to modify and create
derivative works with the sample source code (“Source Code”) provided in
connection with the Software.  Developer shall own any derivative works (
"Derivatives") it creates to the Source Code, provided that Developer uses the
Source Code and derivative works thereof in accordance with the terms and
conditions of this Agreement.  Developer may distribute their derivative works
of the Source Code, provided that all NVIDIA copyright notices and trademarks
are used properly and such derivative works include the following statement:
"This software contains source code provided by NVIDIA Corporation."

2.1.3 Object Code:  Developer agrees not to disassemble, decompile or reverse
engineer the Object Code versions of any of the Software.  Developer
acknowledges that certain of the Software provided in Object Code version may
contain third party components that may be subject to restrictions, and
expressly agrees not to attempt to modify or distribute such Software without
first receiving consent from NVIDIA.

2.1.4 Redistribution Rights. Licensee may, transfer, redistribute and
sublicense certain files of the SOFTWARE, as referenced in Attachment A of this
Agreement; provided, however Licensee shall only install such files into a
private (non-shared) directory location that is used only by Licensee’s
product.

2.1.5 Linux/FreeBSD Exception. Notwithstanding the foregoing terms of Section
2.1.1, SOFTWARE designed exclusively for use on the Linux or FreeBSD operating
systems, or other operating systems derived from the source code to these
operating systems, may be copied and redistributed, provided that the binary
files thereof are not modified in any way (except for unzipping of compressed
files).

2.1.6 Limitations.
No Reverse Engineering. Licensee may not reverse engineer, decompile, or
disassemble the SOFTWARE, nor attempt in any other manner to obtain the source
code.

No Separation of Components. The SOFTWARE is licensed as a single product.
Except as authorized in this Agreement, Software component parts of the
Software may not be separated for use on more than one computer, nor otherwise
used separately from the other parts.

No Rental. Licensee may not rent or lease the SOFTWARE to someone else.

3. TERMINATION

This LICENSE will automatically terminate if Licensee fails to comply with any
of the terms and conditions hereof. In such event, Licensee must destroy all
copies of the SOFTWARE and all of its component parts.

Defensive Suspension. If Licensee commences or participates in any legal
proceeding against NVIDIA, then NVIDIA may, in its sole discretion, suspend or
terminate all license grants and any other rights provided under this LICENSE
during the pendency of such legal proceedings.

4. COPYRIGHT

All rights, title, interest and copyrights in and to the SOFTWARE (including
but not limited to all images, photographs, animations, video, audio, music,
text, and other information incorporated into the SOFTWARE), the accompanying
printed materials, and any copies of the SOFTWARE, are owned by NVIDIA, or its
suppliers. The SOFTWARE is protected by copyright laws and international treaty
provisions. Accordingly, Licensee is required to treat the SOFTWARE like any
other copyrighted material, except as otherwise allowed pursuant to this
LICENSE and that it may make one copy of the SOFTWARE solely for backup or
archive purposes.

RESTRICTED RIGHTS NOTICE. Software has been developed entirely at private
expense and is commercial computer software provided with RESTRICTED RIGHTS.
Use, duplication or disclosure by the U.S. Government or a U.S. Government
subcontractor is subject to the restrictions set forth in the license agreement
under which Software was obtained pursuant to DFARS 227.7202-3(a) or as set
forth in subparagraphs (c)(1) and (2) of the Commercial Computer Software -
Restricted Rights clause at FAR 52.227-19, as applicable. Contractor/
manufacturer is NVIDIA, 2701 San Tomas Expressway, Santa Clara, CA 95050

5. APPLICABLE LAW

This LICENSE shall be deemed to have been made in, and shall be construed
pursuant to, the laws of the State of Delaware. The United Nations Convention
on Contracts for the International Sale of Goods is specifically disclaimed.

6. DISCLAIMER OF WARRANTIES AND LIMITATION ON LIABILITY

6.1 No Warranties. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE
SOFTWARE IS PROVIDED "AS IS" AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL
WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

6.2 No Liability for Consequential Damages. TO THE MAXIMUM EXTENT PERMITTED BY
APPLICABLE LAW, IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY
SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING,
WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF NVIDIA HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

6.3 No Support.  NVIDIA has no obligation to support or to provide any updates
of the Software.

7. MISCELLANEOUS

7.1 Feedback. In the event Licensee contacts NVIDIA to request Feedback (as
defined below) on how to design, implement, or optimize Licensee’s product for
use with the SOFTWARE, the following terms and conditions apply the Feedback:

1. Exchange of Feedback. Both parties agree that neither party has an
obligation to give the other party any suggestions, comments or other feedback,
whether verbally or in code form (“Feedback”), relating to (i) the SOFTWARE;
(ii) Licensee’s products; (iii) Licensee’s use of the SOFTWARE; or (iv)
optimization of  Licensee’s product with the SOFTWARE.  In the event either
party provides Feedback to the other party, the party receiving the Feedback
may use and include any Feedback that the other party voluntarily provides to
improve the (i) SOFTWARE or other related NVIDIA technologies, respectively for
the benefit of NVIDIA; or (ii) Licensee’s product or other related Licensee
technologies, respectively for the benefit of Licensee.  Accordingly, if either
party provides Feedback to the other party, both parties agree that the other
party and its respective licensees may freely use, reproduce, license,
distribute, and otherwise commercialize the Feedback in the (i) SOFTWARE or
other related technologies; or (ii) Licensee’s products or other related
technologies, respectively, without the payment of any royalties or fees.

2. Residual Rights. Licensee agrees that NVIDIA shall be free to use any
general knowledge, skills and experience, (including, but not limited to,
ideas, concepts, know-how, or techniques) (“Residuals”), contained in the (i)
Feedback provided by Licensee to NVIDIA; (ii) Licensee’s products shared or
disclosed to NVIDIA in connection with the Feedback; or (c) Licensee’s
confidential information voluntarily provided to NVIDIA in connection with the
Feedback, which are retained in the memories of NVIDIA’s employees, agents, or
contractors who have had access to such (i) Feedback provided by Licensee to
NVIDIA; (ii) Licensee’s products; or (c) Licensee’s confidential information
voluntarily provided to NVIDIA, in connection with the Feedback.  Subject to
the terms and conditions of this Agreement, NVIDIA’s employees, agents, or
contractors shall not be prevented from using Residuals as part of such
employee’s, agent’s or contractor’s general knowledge, skills, experience,
talent, and/or expertise.  NVIDIA shall not have any obligation to limit or
restrict the assignment of such employees, agents or contractors or to pay
royalties for any work resulting from the use of Residuals.

3. Disclaimer of Warranty. FEEDBACK FROM EITHER PARTY IS PROVIDED FOR THE OTHER
PARTY’S USE “AS IS” AND BOTH PARTIES DISCLAIM ALL WARRANTIES, EXPRESS, IMPLIED
AND STATUTORY INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  BOTH PARTIES DO NOT
REPRESENT OR WARRANT THAT THE FEEDBACK WILL MEET THE OTHER PARTY’S REQUIREMENTS
OR THAT THE OPERATION OR IMPLEMENTATION OF THE FEEDBACK WILL BE UNINTERRUPTED
OR ERROR-FREE.

4. No Liability for Consequential Damages. TO THE MAXIMUM EXTENT PERMITTED BY
APPLICABLE LAW, IN NO EVENT SHALL EITHER PARTY OR ITS SUPPLIERS BE LIABLE FOR
ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER
(INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
ARISING OUT OF THE USE OF OR INABILITY TO USE THE FEEDBACK, EVEN IF THE OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

5. Freedom of Action.  Licensee agrees that this Agreement is nonexclusive and
NVIDIA may currently or in the future be developing software, other technology
or confidential information internally, or receiving confidential information
from other parties that maybe similar to the Feedback and Licensee’s
confidential information (as provided in Section 7.1.2 above), which may be
provided to NVIDIA in connection with Feedback by Licensee.  Accordingly,
Licensee agrees that nothing in this Agreement will be construed as a
representation or inference that NVIDIA will not develop, design, manufacture,
acquire, market products, or have products developed, designed, manufactured,
acquired, or marketed for NVIDIA, that compete with the Licensee’s products or
confidential information.

6. No Implied Licenses.  Under no circumstances should anything in this
Agreement be construed as NVIDIA granting by implication, estoppel or
otherwise, (i) a license to any NVIDIA product or technology other than the SOFTWARE; or
(ii) any additional license rights for the SOFTWARE other than the licenses
expressly granted in this Agreement.


7.2 If any provision of this LICENSE is inconsistent with, or cannot be fully
enforced under, the law, such provision will be construed as limited to the
extent necessary to be consistent with and fully enforceable under the law.
This LICENSE is the final, complete and exclusive agreement between the parties
relating to the subject matter hereof, and supersedes all prior or
contemporaneous understandings and agreements relating to such subject matter,
whether oral or written. This LICENSE may only be modified in writing signed
by an authorized officer of NVIDIA. Licensee agrees that it will not ship,
transfer or export the SOFTWARE into any country, or use the SOFTWARE in any
manner, prohibited by the United States Bureau of Industry and Security or
any export laws, restrictions or regulations.


ATTACHMENT A

Redistributable Components


The following files may be redistributed with software applications developed
by Licensee.

NPP headers     npp.h, nppcore.h,
                nppdefs.h, nppi.h,
                nppversion.h

Windows         npp.lib,
                npp32_32_16.dll,
                npp64_32_16.dll,

MacOS           libnpp32.3.2.dylib,
                libnpp64.3.2.dylib,

Linux           libnpp64.so.3.2.16,
                libnpp32.so.3.2.16,

The following terms and conditions apply to Licensee’s use of the components
listed above (“Redistributable Components”) of the SOFTWARE:

1. Customer may transfer, redistribute or sublicense, the license rights
pursuant to Section 2.1.1 of this Agreement in connection with the
Redistributable Components to end users of Licensee’s products.
