The Software you have received is provided pursuant to these Software License Terms and Conditions ("Agreement"). By accepting this software, you are entering into, agreeing to, and consenting to be bound by all of the terms of this Agreement, which is between you and Maxim Integrated Products, Inc. on behalf of itself and its affiliates and subsidiaries (collectively, "Maxim"). This Agreement is effective as of the date that you received the software (the "Effective Date"). You represent and warrant that you are at least eighteen (18) years of age if you are a resident of the United States, or the age of majority in the jurisdiction of your residence. If you are accepting these terms on behalf of your employer ("Company"), you represent and warrant that you have full authority to bind the Company to these terms. You and, if applicable, the Company may hereinafter be collectively referenced in this Agreement as the "Customer."
Recitals
A. Maxim, among other things, develops, manufactures, and sells semiconductor products and offers software consisting of certain software development tools, operating systems, driver software, firmware, and example application code. The provided software contains software or features representative or illustrative of those that can be used with Maxim ICs and can be used for development of software application programs to operate with Maxim ICs or products containing Maxim ICs.
B. Customer desires to license the software from Maxim, under the terms and conditions of this Agreement.
C. This Agreement permits Customer to license the software from Maxim or its distributors, representatives, or other partners who are duly authorized by Maxim to offer such licenses and sets forth the basic terms and conditions under which the software will be delivered.
1. Definitions.
1.1. "Affiliate" means any entity under the Control of a party where "Control" means ownership of or the right to control greater than 50% of the voting securities of such entity.
1.2. "Customer Program" means a software program designed to operate with Maxim ICs and developed by Customer using the Software.
1.3. "Documentation" means all manuals, documentation, and other written materials that Maxim includes or otherwise provides as related to the Software or Maxim ICs, whether in printed or electronic form, including without limitation, customer reference and installation manuals, user's guides, and programmers guide.
1.4. "Executable Code" means software in a machine-readable and executable form which is not generally readable by humans without reverse assembly, reverse compiling, or reverse engineering, but which can be combined in an unmodified form with Source Code and which can be compiled to make a Customer Program.
1.5. "Maxim ICs" means integrated circuits that are separately purchased or obtained by Customer directly from Maxim or indirectly from Maxim's distributors, representatives, or other partners who are duly authorized by Maxim to sell such integrated circuits.
1.6. "Maxim-Enabled Products" means any product made by or for Customer that incorporates a Maxim IC.
1.7. "Maxim Proprietary Software" means the software provided by Maxim to Customer under and upon Customer's acceptance of this Agreement, all permitted copies, modifications, or derivative works thereof made by Customer, and all basic or related materials pertinent thereto, including without limitation any documentation provided, either in hardcopy form or electronic form. Maxim Proprietary Software excludes Open Source Software and Third Party Technology.
1.8. "Object Code" means software in machine-readable and executable form resulting from compilation or assembly of Source Code and that is not generally readable by humans without reverse assembly, reverse compiling, or reverse engineering.
1.9. "Open Source Software" means any open source, community, or other free software code or libraries of any type, including, without limitation, any code that (a) is made generally available for free or that meets the definition of "open source" or "free" as defined by the Open Source Initiative or Free Software Foundation or (b) is licensed under any license agreement approved by either such entity (such as, for example purposes only, the GNU GPL, GNU LGPL, Mozilla, or Apache license).
1.10. "Site(s)" means the Customer's premises.
1.11. "Software" means the Maxim Proprietary Software, any Third Party Technology, and any Open Source Software delivered to Customer under the terms of this Agreement. Unless otherwise noted, the Software and Documentation are referred to collectively herein as "Software".
1.12. "Source Code" means software in human-readable, high-level language form, which can be compiled or assembled into Object Code, machine code, or another executable form of code.
1.13. "Third Party Technology" means any software, feature or functionality that requires a license grant and/or payments by Customer to third parties for commercial activities related to Customer Programs and/or Maxim-Enabled Products.
2. Software Licenses. The Maxim Proprietary Software is licensed to Customer under the license grant set forth in Section 3 (Maxim Proprietary Software License Grant) below. Any Open Source Software delivered to Customer is licensed to Customer under the license specified in such Open Source Software and as further restricted by Section 4. For purposes of clarity, the provisions of this Agreement applying to Source Code shall only apply if Source Code is being provided to Customer.
3. Maxim Proprietary Software License Grant.
3.1. License Grant to Maxim Proprietary Software. Subject to the terms of this Agreement, Maxim hereby grants to Customer during the Term a personal, non-exclusive, non-transferable, non-assignable, non-sublicensable (except as expressly granted herein) license to do the following:
(a) use Object Code versions of Maxim Proprietary Software, internally and only at the Site(s) for the sole purpose of creating Customer Programs;
(b) load, install, run, execute, test, and debug Object Code versions of Maxim Proprietary Software, as incorporated within a Customer Program, in a product internally and only at the Site(s) and only for the purpose of enabling Maxim ICs in the Maxim-Enabled Product;
(c) grant a personal, non-exclusive, non-transferable, non-assignable, non-sublicensable sublicense to third parties: (i) to install, run, load, and execute Object Code versions of Maxim Proprietary Software, as incorporated within a Customer Program, on products, and (ii) to distribute Object Code versions of Maxim Proprietary Software, as incorporated within a Customer Program, embedded in a product to such third parties solely for the purpose of and only to the extent needed to carry out such sublicense. The sublicense will subject the third party to the restrictions and obligations of Sections 3.4 (License Restrictions on Maxim Proprietary Software) and 14 (Confidential Information) as if the third party were in the place of Customer. Customer will be fully responsible for the compliance with and liable for the breach of the sublicense by the third party. Upon becoming aware of any breach or suspected breach of the sublicense by the third party, Customer will promptly report such breach or suspected breach to Maxim; and
(d) use unmodified versions of Executable Code of Maxim Proprietary Software, to incorporate such Executable Code within Customer Programs, and to create an Object Code version of Customer Programs. In all cases, the rights granted herein shall be exercised in accordance with (i) the Documentation, and (ii) this Agreement.
3.2. Source Code License. To the extent that the Maxim Proprietary Software includes any Source Code, subject to the terms and conditions of this Agreement, Maxim grants to Customer a non-sublicensable, non-exclusive, non-transferable, non-assignable license during the Term to use, modify, and compile the Source Code internally and only at the Site(s) solely to the extent necessary to support the development of a Customer Program as permitted under Section 3.1 (License Grantto Maxim Proprietary Software) above. Customer will keep track of all Customer employees who have had access to Source Code versions of Maxim Proprietary Software, and will provide a list of such employees to Maxim upon request.
3.3. Copies. Except for purposes of exercising the license granted in this Section 3 (Maxim Proprietary Software License Grant) and for back-up purposes, Customer may not copy the Maxim Proprietary Software. Customer agrees to reproduce and include Maxim's copyright notice on any copies of the Maxim Proprietary Software, which copies it makes in any form, including partial copies of the Maxim Proprietary Software.
3.4. License Restrictions on Maxim Proprietary Software. Except for the rights expressly granted in this Section 3, Maxim grants no rights in the Maxim Proprietary Software to Customer, whether by implication, estoppel, or otherwise. Subject to the rights expressly granted in this Section 3, Customer shall not and shall not encourage, allow, or facilitate any third party to:
a.modify, translate, adapt, reverse engineer, decompile, disassemble, or otherwise translate or create derivative worksbased on the Maxim Proprietary Software, except solely to the extent (i) expressly permitted in Section 3.1 (License Grant to Maxim Proprietary Software) above or (ii) by applicable law and then only with advance written notice of such activity to Maxim;
b.review, analyze, or evaluate Maxim Proprietary Software for the purpose of determining the infringement, validity, or enforceability of any intellectual property, or compare Maxim Proprietary Software to intellectual property in any way;
c.examine, review, evaluate, or otherwise use the Maxim Proprietary Software for the purpose of developing or enabling a product or technology that competes with Maxim;
d.rent, lease, or sublicense the Maxim Proprietary Software to a third party, except as expressly permitted in Section 3.1 (License Grant to Maxim Proprietary Software);
e.remove any product identification, proprietary, copyright or other notices contained in the Maxim Proprietary Software;
f.disclose or distribute to any third party (i) benchmarks or other comparisons relating to the Maxim Proprietary Software or (ii) any information (A) relating to the results of Customer's evaluation of the Maxim Proprietary Software (including relating to performance, function, or deficiencies of the Maxim Proprietary Software) or (B) contained in any documentation, report, or questionnaire of Maxim that constitutes Maxim Confidential Information;
g.distribute or sell the Maxim Proprietary Software in standalone form or in any manner other than as permitted under Section 3.1 (License Grant to Maxim Proprietary Software) above; or
h.USE OR DISTRIBUTE THE MAXIM PROPRIETARY SOFTWARE FOR MEDICAL OR LIFE CRITICAL APPLICATIONS.
3.5. Authorized Users. Customer's consultants and contractors, who are not direct competitors of Maxim and who are under written agreements to provide services to Customer ("Authorized Users"), may use the Maxim Proprietary Software in accordance with the licenses granted to Customer under this Agreement, provided that:
a.such Authorized Users agree to be bound by terms as protective of Maxim and Maxim Confidential Information as the terms set forth in this Agreement,
b.Customer shall remain responsible for the Authorized User's compliance with such confidentiality terms and the applicable terms of this Agreement,
c.if Source Code is licensed under Section 3.2 (Source Code License), Customer keeps track of all Authorized Users who have had access to Source Code, and provides a list of such Authorized Users to Maxim upon request; and
d.each Authorized User's use of the Maxim Proprietary Software is only for Customer's benefit in accordance with this Agreement.
3.6. No Right to Manufacture. Customer acknowledges and agrees that the license to the Maxim Proprietary Software granted in Section 3.1 (License Grant to Maxim Proprietary Software) does not include any license to any of Maxim's other technology or intellectual property and that, consequently, it shall not have the right under this Agreement to develop, manufacture, or have manufactured any integrated circuits that incorporate any Maxim technology, and that Customer is required to separately purchase or obtain Maxim ICs from Maxim or a Maxim certified distributor.
3.7. Form of Delivery. Maxim will provide the Software licensed hereunder to Customer by electronic medium or other form as mutually agreed upon, in the condition as it exists on the Effective Date or date of delivery, if different, without special reformatting.
4. Open Source Licenses. Customer understands and acknowledges that Open Source Software may be delivered pursuant to this Agreement and subject to an Open Source Software license, that each Open Source Software license is a separate agreement between Customer and the copyright holder of such Open Source Software and that Maxim is not a party to any such Open Source Software license. The terms and conditions governing Customer's use of the Open Source Software are set forth in the license agreement indicated in the Open Source Software and not in this Agreement. Customer's use of all Open Source Software must comply with the terms of each applicable Open Source Software license. This Agreement does not limit Customer's rights under, or grant Customer rights that supersede, the license terms of any particular Open Source Software license.
5. Third Party Technology. Customer acknowledges and agrees that Customer Programs and Maxim-Enabled Products, as well as any products based on Maxim Proprietary Software or other Maxim technology, may require certain licenses from certainstandards bodies and/or other third parties holding intellectual property rights ("IPR") that may cover one or more of aforementioned items. Customer acknowledges and agrees that Maxim is not granting a sublicense to IPR of Third Party Technology, and Customer is solely responsible for procuring such license in connection with any use of such Third Party Technology.
6. Representations and Warranties of Customer.
6.1. General. Customer represents and warrants that:
a. Customer's business and its performance under this Agreement are in compliance with all applicable federal, state and local laws and government rules and regulations;
b. None of the Customer Programs, Maxim-Enabled Products, or any portion thereof, excluding any Maxim Proprietary Software contained therein, constitutes or may give rise to a claim of infringement of any patent, copyright, trade secret or other intellectual property right of a third party anywhere in the world; and
c. No portion of any Customer Program (including any libraries), or any Maxim-Enabled Product, contains or will contain any "viral" Open Source Software, or any other software or code which could compromise or interfere in any way with Maxim's rights, including IPR, in or to the Maxim Proprietary Software or other Maxim materials that may come into contact with such Customer Programs or Maxim-Enabled Products, or require Maxim or Customer to disclose any Source Code to any such Maxim Proprietary Software integrated in or distributed with any Customer Program or Maxim-Enabled Product.
6.2. Maxim Proprietary Software. Customer on behalf of itself and its Affiliates hereby covenants not to bring suit or otherwise assert any intellectual property right against Maxim or any user, distributor, or manufacturer of the Maxim Proprietary Software for the manufacture, use, import, offer for sale, or sale of any products or services based on the Maxim Proprietary Software.
7. Ownership. Notwithstanding anything to the contrary contained herein and except for the limited license rights expressly provided herein, Maxim and its suppliers have and will retain all rights, title, and interest in and to the Maxim Proprietary Software (including, without limitation, all patent, copyright, trademark, trade secret, and other intellectual property rights) and all copies, modifications, and derivative works thereof. Customer agrees to assign to Maxim all rights, title, and interest, including but not limited to intellectual property rights, that Customer may now or in the future have in or to any modifications, improvements, or enhancements to the Maxim Proprietary Software. Customer acknowledges that it is obtaining only a limited license right to the Maxim Proprietary Software and that irrespective of any use of the words "purchase", "sale," or like terms hereunder, no ownership rights are being conveyed to Customer under this Agreement or otherwise. For the avoidance of doubt, as between Maxim and Customer, Customer shall have and retain all rights, title, and interest in and to any Customer Programs except to the extent that any Software is incorporated therein.
8. Term and Termination.
8.1. Term. This Agreement is effective as of the Effective Date, will continue for three (3) years (the "License
Term"), and expire when the License Term has elapsed, unless earlier terminated in accordance with this Section (the "Term").
8.2. Termination. This Agreement (and all licenses and sublicenses granted hereunder) shall terminate on the earlier of:
a.immediately upon Customer's material breach of any term of this Agreement,
b.Maxim's notice of termination, which may be for any reason, to Customer
c.the date upon which Customer discontinues the development, sale or distribution of Customer Programs or Maxim-Enabled Products;
d.the date that Customer becomes insolvent, makes a general assignment for the benefit of creditors, suffers or permits the appointment of a receiver, becomes subject to any proceeding under any bankruptcy or insolvency law whether domestic or foreign, voluntary or involuntary; or e.Expiration of the Term pursuant to Section 8.1 (Term). Upon expiration or termination of this Agreement or upon written request from Maxim, Customer shall certify to Maxim in writing that Customer has returned (or, with the consent of Maxim, destroyed) all copies of the Maxim Proprietary Software and any other material provided by Maxim (excluding Open Source Software). 8.3. Survival. Sections 3.3 (Copies), 3.4(License Restrictions on Maxim Proprietary Software), 3.6 (No Right to Manufacture), 4 (Open Source Licenses), 5 (Third Party Technology), 6 (Representations and Warranties of Customer), 7 (Ownership), 8 (Term and Termination), 9 (Warranty Disclaimer), 11 (Taxes), 12 (Limitation of Remedies and Damages), 13 (Indemnification by Customer), 14 (Confidential Information) and 15 (General) shall survive any termination or expiration of this Agreement.
8.4. Limited Survival of License. Notwithstanding anything contained herein, unless this Agreement is terminated pursuant to Sections 8.2.a or 8.2.d, Customer shall, after termination or expiration of this Agreement, retain a limited license to the Maxim Proprietary Software, to use any Maxim-provided Source Code and Object Code versions of Maxim Proprietary Software internally and only at the Site(s) for the sole purpose of maintaining or supporting a Maxim-Enabled Product that was shipped in conjunction with an Object Code version of a Customer Program during the Term of this Agreement.
9. Warranty Disclaimer.
TO THE EXTENT PERMITTED BY LAW, THE SOFTWARE AND ALL SERVICES ARE PROVIDED "AS IS" AND "WITH ALL FAULTS." NEITHER MAXIMNOR ITS SUPPLIERS MAKES ANY WARRANTIES, EXPRESS OR IMPLIED, STATUTORY OR OTHERWISE, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, TITLE, FITNESS FOR A PARTICULAR PURPOSE, OR NONINFRINGEMENT. CUSTOMER MAY HAVE OTHER STATUTORY RIGHTS. HOWEVER, TO THE FULL EXTENT PERMITTED BY LAW, THE DURATION OF STATUTORILY REQUIRED WARRANTIES, IF ANY, SHALL BE LIMITED TO THE LIMITED WARRANTY PERIOD.
10. Support & Maintenance. The Software is provided to Customer without any maintenance or support services. Ongoing maintenance and customer support for Customer's software that is based upon or includes portions of the Maxim Proprietary Software is the responsibility of the Customer. Maxim may provide to Customer, in Maxim's sole discretion, updates to the Software from time to time. Upon delivery, such updates to the Software are subject to the terms and conditions herein.
11. Taxes. Customer agrees to pay any sales, value-added, withholding or other similar taxes and assessments imposed by applicable law that Maxim is required to pay based on the licenses Customer ordered, except for taxes based on Maxim's income.
12. Limitation of Remedies and Damages.
12.1. NEITHER PARTY IS LIABLE FOR ANY LOSS OF USE, LOST DATA, FAILURE OF SECURITY MECHANISMS, INTERRUPTION OF BUSINESS, OR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY KIND (INCLUDING LOST PROFITS), REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY, OR OTHERWISE, EVEN IF INFORMED OF THE POSSIBILITY OF SUCH DAMAGES IN ADVANCE.
12.2. NOTWITHSTANDING ANY OTHER PROVISION OF THIS AGREEMENT, MAXIM'S AND ITS LICENSORS' AND SUPPLIERS' ENTIRE CUMULATIVE LIABILITY UNDER THIS AGREEMENT TO CUSTOMER SHALL NOT EXCEED TEN U.S. DOLLARS ($10.00). 12.3. THIS SECTION 12 DOES NOT APPLY TO CUSTOMER WITH RESPECT TO ANY CLAIM ARISING UNDER SECTION 3 (MAXIM PROPRIETARY SOFTWARE LICENSE GRANT), SECTION 6 (REPRESENTATIONS AND WARRANTIES OF CUSTOMER), SECTION 13 (INDEMNIFICATION BY CUSTOMER) OR SECTION 14 (CONFIDENTIAL INFORMATION). 12.4. The parties agree that the limitations specified in this Section 12 will survive and apply even if any limited remedy specified in this Agreement is found to have failed of its essential purpose.
13. Indemnification by Customer. Customer shall indemnify, defend, and hold Maxim and its Affiliates harmless from any and all claims, liabilities, damages, expenses (including reasonable attorney's fees and court, arbitration, and mediation costs), or associated proceedings ("Claims") in connection with, relating to, or which result from:
a.any allegation of infringement of a third party's intellectual property rights with respect to any Customer Program or Maxim-Enabled Product, but excluding any such claim in either case to the extent based on the Software on a stand-alone basis,
b.the sale, marketing, distribution, or manufacture of any Maxim-Enabled Product, but excluding any such claim to the extent based on the Software on a stand-alone basis, or c.Customer's breach of any provisions of Section 6 (Representations and Warranties of Customer). Maxim shall give Customer prompt notice in writing of any such Claims and the authority, information, and reasonable assistance (at Customer's expense) necessary to defend and settle such Claims, except that Maxim's failure to provide prompt notice will not relieve Customer of its indemnity obligations under this Section unless such failure materially prejudices the defense of the Claim, and Customer will not enter into a settlement of the Claim without Maxim's prior written consent. If Customer does not diligently pursue resolution of the Claim or provide Maxim with reasonable assurance that it will diligently pursue resolution, then Maxim may, without in any way limiting its other rights or remedies, defend or settle the Claim. Nothing herein shall limit or restrict Maxim's, its Affiliates', or its suppliers' rights to defendand protect their ownership and intellectual property rights in and to the Maxim Proprietary Software, in whole or in part, in connection with any Claim. Each party agrees to provide reasonable cooperation to the other party in the defenseor settlement of any such Claims, upon the reasonable request of the other party.
14. Confidential Information. Each party agrees that all code, inventions, know-how, business, technical and financial information it ("Receiving Party") obtains from the disclosing party ("Disclosing Party") constitute the confidential property of the Disclosing Party ("Confidential Information"), provided that it is identified as confidential at the time of disclosure or should be reasonably known by the Receiving Party to be Confidential Information due to the nature of the information disclosed and the circumstances surrounding the disclosure. Any software, documentation, or technical information provided by Maxim (or its agents)(excluding Open Source Software), performance information relating to the Maxim Proprietary Software, and the terms of this Agreement are deemed Confidential Information of Maxim without any marking or further designation. Except as expressly authorized herein, the Receiving Party will hold in confidence and not use or disclose any Confidential Information. The Receiving Party's nondisclosure obligation does not apply to information that the Receiving Party can document:
a. was rightfully in its possession or known to it without the breach of any confidentiality obligations prior to receipt of the Confidential Information;
b. is or has become public knowledge through no fault of the Receiving Party;
c. is rightfully obtained by the Receiving Party from a third party without breach of any confidentiality obligation;
d. is independently developed by employees of the Receiving Party who had no access to such information; or
e. is required to be disclosed pursuant to a regulation, law, or court order (but only to the minimum extent required to comply with such regulation or order and with advance written notice to the Disclosing Party).
15. General.
15.1. Assignment and Delegation. Customer may not assign its rights or delegate its obligations ("Assign" or "Assignment") under this Agreement without the prior written consent of Maxim, and any purported Assignment without such consent shall have no force or effect. In the event, Customer desires to Assign this Agreement to a successor in interest by merger or acquisition of its entire business, Customer shall obtain Maxim's prior written approval, which shall be rendered by Maxim in its sole discretion. Subject to the foregoing, this Agreement shall bind and inure to the benefit of the respective parties hereto and their permitted successors and assigns. In the event of an Assignment or attempted Assignment by Customer without Maxim's prior written approval, Maxim may, in its sole discretion, immediately terminate this Agreement.
15.2. Severability. If any provision of this Agreement is adjudged by any court of competent jurisdiction to be unenforceable or invalid, that provision is limited to the minimum extent necessary so that this Agreement shall otherwise remain in effect.
15.3. Governing Law; Jurisdiction and Venue. This Agreement is governed by the laws of the State of California and the United States without regard to conflicts of laws provisions thereof, and without regard to the United Nations Convention on the International Sale of Goods. The parties agree to submit any claim or actions arising from and/or related to this Agreement to the exclusive jurisdiction and venue of the Superior Court of California, Santa Clara County or the United States District Court for the Northern District of California, San Jose Branch and agree to waive any right to assertthe defense of forum non conveniens or to object to such venue in any such proceeding.
15.4. Notices and Reports. Any notice or report to Maxim hereunder shall be in writing to the following notice address:
Maxim Integrated Products, Inc.
160 Rio Robles
San Jose, CA 95134
Attn: General Counsel
Any notice or report shall be deemed given:
a. upon receipt if by personal delivery;
b. upon receipt if sent by certified or registered mail (return receipt requested); or
c. one day after it is sent if by next day delivery by a major commercial delivery service.
15.5. Amendments; Waivers. No supplement, modification, or amendment of this Agreement is binding, unless executed in writing by a duly authorized representative of each party to this Agreement. No waiver will be implied from conduct or failure to enforce or exercise rights under this Agreement, nor will any waiver be effective unless in a writing signed by a duly authorized representative on behalf of the party claimed to have waived. No provision of any purchase order or other business form employed by Customer will supersede the terms and conditions of this Agreement, and any such document relating to this Agreement is for administrative purposes only and shall have no legal effect.
15.6. Entire Agreement. This Agreement is the complete and exclusive statement of the mutual understanding of the parties and supersedes and cancels all previous written and oral agreements and communications relating to the subject matter of this Agreement.
15.7. Audit Rights. Upon Maxim's written request, Customer shall certify in a signed writing that Customer's use of the Software is in full compliance with the terms of this Agreement (including any copy and user limitations). With prior reasonable notice, Maxim may audit the copies of the Software in use by Customer provided such audit is during regular business hours; Customer is responsible for such audit costs only in the event the audit reveals that Customer's use is not in accordance with the applicable license(s).
15.8. Independent Contractors. The parties to this Agreement are independent contractors. There is no relationship of partnership, joint venture, employment, franchise, or agency created hereby between the parties. Neither party will have the power to bind the other or incur obligations on the other party's behalf without the other party's prior written consent.
15.9. Force Majeure. Neither party is liable to the other for any delay or failure to perform any obligation under this Agreement if the delay or failure is due to events that are beyond the reasonable control of such party, including but not limited to any strike, blockade, war, act of terrorism, riot, natural disaster, failure or diminishment of power, telecommunications, data networks or services, or refusal of approval or license by a government agency.
15.10. Government End-Users. If the user or licensee of the Software is an agency, department, or other entity of the United States Government, the use, duplication, reproduction, release, modification, disclosure, or transfer of this Software, or any related documentation of any kind, including technical data and manuals, is restricted by a license agreement or by the terms of this Agreement in accordance with Federal Acquisition Regulation 12.212 for civilian purposes and Defense Federal Acquisition Regulation Supplement 227.7202 for military purposes.
15.11. Export Compliance. Customer acknowledges that the Software is subject to export restrictions by the United States government and import restrictions by certain foreign governments. Customer shall not and shall not allow any third-party to remove or export from the United States or allow the export or re-export of any part of the Software or any direct product thereof:
a. into (or to a national or resident of) any embargoed or terrorist-supporting country;
b. to anyone on the U.S. Commerce Department's Table of Denial Orders or U.S. Treasury Department's list of Specially Designated Nationals;
c. to any country to which such export or re-export is restricted or prohibited, or as to which the United States government or any agency thereof requires an export license or other governmental approval at the time of export or re-export without first obtaining such license or approval; or
d. otherwise in violation of any export or import restrictions, laws, or regulations of any United States or foreign agency or authority. Customer agrees to the foregoing and warrants that it is not located in, under the control of, or a national or resident of any such prohibited country or on any such prohibited party list. The Software is further restricted from being used for the design or development of nuclear, chemical, or biological weapons or missile technology, or for terrorist activity, without the prior permission of the United States government.
15.12. Injunctive Relief. Customer understands and agrees that, notwithstanding any other provision of this Agreement, breach of the provisions of this Agreement by Customer will cause Maxim irreparable damage for which recovery of money damages would be inadequate, and that Maxim shall therefore be entitled to obtain timely equitable relief, including but not limited to injunctive relief, to protect Maxim's rights under this Agreement in addition to any and all remedies available at law.

