Implementation License Agreement

This Agreement made and entered into this ______ day of July, 2016 (the “Effective Date”) by and between Waves Audio Ltd. (“Waves”), a company duly organized and existing under the laws of the State of Israel, and having its principal office at Azrieli Center 1, 32nd Floor, 132 Derech Menachem Begin, Tel Aviv, Israel 6701101, and Intel Corporation, a company duly organized and existing under the laws of the State of Delaware, U.S.A., and having its principal office at 2200 Mission College Blvd., Santa Clara, California 95054, U.S.A. ("Licensee").

WHEREAS	Waves is engaged, inter alia, in the development, manufacturing, sale, distribution and marketing of technology and software relating to digital audio reproduction; and

WHEREAS	Licensee desires to obtain from Waves, and Waves is willing to grant to Licensee, subject to terms and conditions set forth below, a license for use of the Licensed Technology, as defined hereunder;

NOW, THEREFORE, in consideration of the mutual covenants hereinafter set forth, the parties hereby agree as follows:

1. Definitions
   As used in this Agreement, the following terms shall have the meanings set forth     below:
“Authorized Licensee” means a third party that has signed a license agreement with Waves, regarding the Licensed Technology, and who is responsible for the paying of any fees or royalty to Waves for use of the Implementation as an integral part of the Licensed Product(s).
“Business Unit Acquirer” means an unrelated ("arms free") third party to which Licensee Divests a Business Unit.
“Code” means computer programming code, including both "Object Code", which means the software in machine readable binary form and to be linked in order to create machine executables and "Source Code", which means computer programming code that may be displayed in a form readable and understandable by a programmer of ordinary skill, excluding Object Code.
“Customers” means customers of Licensee who purchase Licensed Products from Licensee for the right to use the Implementations solely embedded in conjunction with, and for the operation of, such Licensed Products, or as updates to Implementations already distributed in conjunction with Licensed Products, whether an Authorized Licensee or not.
“Documentation” means any user manuals, reference manuals, release notes, application and methodology notes, the applicable specifications and/or product data sheets, and any other materials provided by Waves to Licensee for use with the Licensed Technology.
“Derivative Technology” means: (i) for copyrightable or copyrighted material, a derivative work, including, without limitation, any translation (including translation into other computer languages), porting, modification, correction, addition, extension, upgrade, improvement, compilation, abridgment or other form in which an existing work may be recast, configured, transformed or adapted; (ii) for patentable or patented material or method, any improvement thereon or any device manufactured using the patented method; and (iii) for material which is protected by trade secret, any new material derived from such existing trade secret material, including new material which may be protected by copyright, patent and/or trade secret.
“Error(s)” means any defects in the Licensed Software which prevent the Licensed Technology from performing in all material respects with Waves' specifications therefor.
“Implementation” means any integrated circuit (IC) which stores or employs computer-intelligible instructions that embody, implement, or employ the Licensed Technology, included but not limited to any IC which stores object code that accompanies or is embedded in a general purpose integrated circuit, or in the form of Code or hardware in analog or digital form. “Implementation” shall include any Improvements, as defined below.
“Improvements” means modifications to the Licensed Technology made or acquired by Waves during the term of this Agreement that result in superior audio effect.
"Intellectual Property" means (i) all inventions (whether patentable or unpatentable and whether or not reduced to practice), all Improvements thereto (including but not limited to enhancements, modifications, extensions and derivatives), and all patents (whether in the form of utility patents or design patents), patent applications (whether pending or not), and patent disclosures, together with all re issuances, continuations, continuations-in-part, revisions, extensions, and re examinations thereof; (ii) all trademarks, service marks, trade dress, designs, trade styles, logos, trade names, and corporate names, together with all translations, adaptations, derivations, and combinations thereof and including all goodwill associated therewith, and all applications, registrations, and renewals in connection therewith; (iii) any work of authorship, regardless of copyrightability, all copyrightable works, all copyrights (including the droit morale) and all applications, registrations, and renewals in connection therewith; (iv) all mask works and all applications, registrations, and renewals in connection therewith; (v) all know-how and trade secrets; and (vi) all other proprietary rights, industrial rights, commercial rights and any other similar rights, in each case on a worldwide basis, and all copies and tangible embodiments thereof (in whatever form or medium).
"Intellectual Property Rights" means all tangible and intangible legal rights, title and interests evidenced by or embodied in Intellectual Property.
“Licensed Products” means any products that include Licensed Technology and are manufactured by or for Licensee in accordance with and subject to the terms and conditions of this Agreement.  Licensed Products may include, without limitation, integrated circuits, microprocessors, chipsets, flash memory products, and Intel processor-based motherboard products.
“Licensed Software” means the Code, including if and as applicable, but without limitation, drivers and field configuration tools for use in conjunction with the Implementation including any and all Intellectual Property and Intellectual Property Rights embodied in such Code.
“Licensed Technology” means Waves’ audio enhancement algorithm in use as of the Effective Date, all as further described in Appendix A attached hereto, the Licensed Software and the Documentation, if any, together with any Error fixes, bug fixes, updates and upgrades provided to Licensee from time to time under the terms of this Agreement including any and all Intellectual Property and Intellectual Property Rights embodied in such Licensed Technology.
      “Open Source Material” means each of: (a) software that consists of, contains, or is derived in any manner (in whole or in part) from, any software that is distributed as free software, open source software, or pursuant to similar licensing and distribution models (e.g., GNU, Linux, etc.) (“Open Source Software”); and (b) any data (“Design Data”) that is subject to a license agreement or other contractual obligation that requires that such Design Data and/or any data, software, or tangible item derived from, produced by, based on, or distributed with such Design Data (“Derivative Item”), be in whole or in part: (i) disclosed, distributed or otherwise made available for inspection in a form facilitating analysis of any functional, architectural, composition, manufacturing, assembly, or testing characteristic of such Design Data or Derivative Item, whether such analysis is intrusive or non-intrusive (e.g., requiring that a semiconductor chip be made available for inspection in an unpackaged or otherwise incomplete state); (ii) licensed or otherwise be made available for the purpose of such Design Data or Derivative Item being modified or integrated into any other component or product; or (iii) be redistributable or otherwise conveyed on a compulsory basis or at no or minimal charge.
For purposes of the definition of Open Source Material, Design Data includes, without limitation, any description, specification, documentation or other information relating to any functional, architectural, constituent component or material, manufacturing, assembly, testing, inspection or metrology characteristic of a semiconductor component or device, or portion of semiconductor component or device (e.g., design information expressed in Verilog, CAD layer, GDSII data, netlist, Gerber data, RTL data, verification suite, simulation model, instruction set specification, testability specification, manufacturing process, etc.).  Design Data also includes, without limitation, any microcode, firmware, programming data for reprogrammable or field-programmable cells, self-test routines, or initialization code licensed in conjunction with a semiconductor component or device.
For purposes of the definition of Open Source Material, Open Source Software includes, without limitation, software licensed or distributed pursuant to any of the following licenses or distribution models similar to:  (a) GNU’s General Public License (GPL) or Lesser/Library GPL (LGPL); (b) the Artistic License (e.g., PERL); (c) the Mozilla Public License; (d) the Netscape Public License; (e) the Sun Common Development and Distribution License (CDDL); (f) the Eclipse Public License (CDDL); (g) the BSD License; and (h) the Apache Software License.
“Permanently Disabled Product” means a product made by or for Licensee and includes the Licensed Technology, but which has the Licensed Technology disabled such that the Licensed Technology is deactivated or unusable.  Unless otherwise expressly set forth in this Agreement, references to “Licensed Product” in this Agreement shall not be construed as including a reference to any “Permanently Disabled Product.”
“Unit” means each copy of the Implementation (or parts thereof).
“Source Materials” means source code, test suite and algorithm description of the subject program, together with all programming manuals and associated documentation.
“Subsidiary/ies” means any corporation, firm, partnership, or other entity, which is owned by, or is under common ownership with the applicable Party to this Agreement to the extent of at least fifty percent (50%) of the equity having the power to vote on or direct the affairs of the entity, for so long as it remains a Subsidiary.
2. Delivery and Acceptance
Within five (5) days from the Effective Date, Waves shall provide the Licensed Technology to Licensee by e-mail to eip_support@intel.com unless otherwise agreed.
3. Ownership of Intellectual Property Rights
Waves retains all rights, title and interest in the Intellectual Property Rights, and Derivative Technology of the Licensed Technology, Improvements, Documentation, and all other related material provided by Waves to Licensee. Licensee will not claim or assert title to the Licensed Technology Rights of the Licensed Technology, Derivative Technology, Improvements, Documentation and all other related material provided by Waves to Licensee, or attempt to transfer any title to third parties, and will contractually require similar limitations on its Customers by using the language “Intel and its suppliers retain all ownership rights”.
4. Grant of License and Ownership
4.1 License Grant
a. Subject to the terms and conditions of this Agreement, Wave hereby grants to Licensee the following, royalty free, fully paid up, non-exclusive, worldwide rights and licenses (the “License”):
a) A non-exclusive right under all of Wave’s Intellectual Property Rights in the Licensed Technology that Wave now, or later, owns or controls in full,  to make, have made, use, import, copy, reproduce, make derivatives and modify, perform, and display the Licensed Technology to create the Implementation, and to embed the Implementation in a Licensed Product for multiple tiers of distribution of Licensed Product, and to make, have made, use, sell, offer for sale, import and distribute the Implementation as part of the sale and distribution of Licensed Products for purposes of their operation, or as updates to Licensed Products that have been sold or distributed. For purposes of clarity, Customers may not activate the Implementation until they become an Authorized Licensee responsible for any royalty or payment for use of the Licensed Technology and the License granted pursuant to this Section 4.1 does not include any right for Licensee to authorize or assist its Customers to activate the Implementation.
b) To disclose and demonstrate the Licensed Product and sublicense to current or prospective customers, suppliers, vendors, manufacturing facilities the right to use the Licensed Product with the (unactivated) Implementation solely for the purpose of internally evaluating the Licensed Product with the (unactivated) Implementation.
c) Licensee may grant a non-exclusive, non-transferable sublicense to Customers, solely to use the Licensed Products with an Implementation of the Licensed Technology as an integral part of the Licensed Products, provided, however, Customers may not activate the Implementation until they become an Authorized Licensee responsible for any royalty or payment for use of the Licensed Technology. Licensee will ensure that Licensee informs its Customers for Licensed Products with the Implementation that they must enter into a license agreement with Wave to activate the Implementation. Activation of the Implementation in each Licensed Product shall be restricted to authorized users utilizing reliable and secure activation measures approved by Waves in writing.
d) Licensee may distribute and otherwise transfer Permanently Disabled Products without requiring any approvals from or obligations (including royalties) to Waves.
b. The License includes a right to grant sub-licenses to Licensee's Subsidiaries, provided that Licensee remains fully liable for any acts or omissions of the Subsidiaries.
c. Under no circumstances may Licensee reverse engineer, disassemble or decompile, in whole or in part, any Licensed Technology, Derivative Technology, or Improvements, and Licensee will impose the same limitation on its Customers.
d. The License shall be effective as of the Effective Date and shall remain in effect until termination or expiration of this Agreement. Other than the rights granted in the License, no further rights are granted regarding the Implementation, Licensed Technology and/or Licensed Technology Rights, Derivative Technology, Improvements or Documentation.
5. Customer Relations
Licensee shall have the sole responsibility of providing support to its Customers, including inter alia, for the Units.
Waves shall provide support to Authorized Licensees on such terms and conditions as are agreed upon by Waves and the respective Authorized Licensees.
6. Other Terms
a. Press Releases and Public Statements.  Wave will not issue any press releases, make any public statements of any kind related to the subject matter of this Agreement or otherwise use Licensee’s name without Licensee’s prior express written approval.
b. No Obligation / Independent Development.  Notwithstanding any other provision of this Agreement, Licensee shall have no obligation to market, sell or otherwise distribute any integrated circuit, Licensed Product or device and/or other product based on or containing the Licensed Technology or Derivative Technology thereof.   [appears in c below]
c. Non-Exclusivity. Notwithstanding any other provision of this Agreement but without derogation from Licensee's confidentiality undertakings towards Waves,, nothing in this Agreement will be construed as restricting either Party’s ability to acquire, license, develop, manufacture or distribute for itself, or have others acquire, license, develop, manufacture or distribute similar technology performing the same or similar functions as the Licensed Technology, or any other technology contemplated by or created pursuant to this Agreement, or to market and distribute such similar technology in addition to, or in lieu of, the technology contemplated by this Agreement.
d. Licensee Rights in Bankruptcy. All rights, licenses and releases granted by Waves directly or indirectly to Licensee are, and will otherwise be deemed to be, for the purpose of Section 365(n) of the United States Bankruptcy Code, as amended (the “Bankruptcy Code”), licenses of rights to “intellectual property” as defined under Section 101 of the Bankruptcy Code.  Licensee represents that this Agreement is an “executory contract” (involving continuing executory obligations of Waves to provide licenses of intellectual property and continuing executory obligations of the respective parties to perform other obligations) under which Waves is a “licensor of a right to intellectual property” as provided in Section 365(n). If this Agreement is terminated or rejected by a party or its receiver or trustee under applicable bankruptcy laws, Intel hereby presently elects, pursuant to Section 365(n) or any similar provisions under applicable foreign law, to retain all rights granted to Intel under this Agreement to the extent permitted by law, and no further election or evidence will be required. The Parties hereto agree that Licensee as licensee of rights granted in this Agreement will retain and may fully exercise all rights and elections under the Bankruptcy Code.  The Parties further agree that, in the event that any proceeding will be instituted by or against Waves seeking to adjudicate it as bankrupt or insolvent, or seeking liquidation, winding up, reorganization, arrangement, adjustment, protection, relief or composition of it or its debts under any law relating to bankruptcy, insolvency, or reorganization or relief of debtors, or seeking an entry of an order for relief or the appointment of a receiver, trustee or other similar official for it or any substantial part of its property or it will take any action to authorize any of the foregoing actions, Licensee will have the right to retain and enforce its rights under this Agreement, provided that Licensee remain in full compliance with the terms and conditions of this Agreement.
7. Warranty, Limitation of Liability and Indemnification
7.1 LIMITED WARRANTIES
Waves warrants the following:
i) To Waves’ knowledge, none of the Licensed Technology supplied to Licensee under this Agreement infringes upon or misappropriates any third party’s Intellectual Property Right.
ii) Waves is unaware of any pending claims or actions commenced against Waves by any third party.  Waves will alert Licensee as soon as feasibly possible, if any legal actions are commenced against Waves by a third party, or decided against Waves, that could reasonably be expected to affect Waves’ ability to fulfill its obligations under this Agreement.
iii) Waves will not include any third party technology or materials in the Licensed Technology, unless expressly provided herein or upon Licensee’s prior written approval.
iv) Other than in the Licensed Software, Waves represents and warrants that the Licensed Technology does not include any Open Source Materials or other material subject to similar license terms.  Waves further represents and warrants that other than for the Licensed Software, Licensee’s use of the Licensed Technology, consistent with the terms and conditions of this Agreement, will not subject any technology, software, or Licensed Product, (other than an Open Source Release) to Open Source Materials license terms.
7.2  Limitation of Liability.
a. THE AGGREGATE LIABILITY FOR EACH PARTY ARISING OUT OF THIS AGREEMENT, INCLUDING ANY INDEMNIFICATION CLAIMS, HOWEVER CAUSED, AND ON ANY THEORY OF LIABILITY, INCLUDING CONTRACT, STRICT LIABILITY, NEGLIGENCE OR OTHER TORT, SHALL BE LIMITED TO DIRECT DAMAGES NOT TO EXCEED US$ 500,000 (FIVE HUNDRED THOUSAND US DOLLARS).
b. IN NO EVENT WILL EITHER PARTY BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL, PUNITIVE OR TORT DAMAGES OF ANY NATURE OR KIND WHATSOEVER EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS WILL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY REMEDY.
c. Inasmuch as some jurisdictions do not allow the exclusion or limitation of liability as set forth in this Section 7, the full extent of above limitations may not apply, but they shall apply insofar as the law shall allow.
7.3 Waves Indemnity.
a. Subject to the Limitation of Liability above: a) Waves shall indemnify, defend and hold the Licensee harmless from all third party claims to the extent that such claims are based on an allegation that any of the Licensed Technology infringes the copyright, patent, trade mark, trade secret or other proprietary right of a third party (each in this section: a “Claim”), and; b) shall pay damages (irrespective of how characterized) awarded to a third party by a court or paid in settlement to a third party resulting from such Claim, and including all reasonable costs and expenses (including reasonable attorney’s fees) of the Licensee arising from or in connection with such Claim, provided however that Waves shall not be obligated to defend against, indemnify or be liable for Claims under this section to the extent that the alleged infringement: (a) arises out of modification to the Licensed Technology by anyone other than Waves and there would be no Claim but for the modification; or (b) arises out of the combination or integration of the Licensed Technology with any other products, processes, equipment or materials and such infringement would have been avoided in the absence of such combination or integration; (c) falls under the Licensee's indemnity in the section below.
b. In addition to Waves' indemnification obligations listed above, in the event the use of any of the Licensed Technology is enjoined, Waves shall: (i) replace or modify the Licensed Technology to be non-infringing which is functionally equivalent; or (ii) obtain for the Licensee a license to continue using the infringing Licensed Technology; or (iii) if in Waves' sole discretion, it is not feasible to act under sub-clause (i) or (ii), shall be entitled to terminate this Agreement as sole remedy.
c. Licensee's Indemnity.  Subject to the limitations above, Licensee will indemnify and hold Waves, its officers and directors harmless (including reasonable attorneys’, consultants’ and other professional fees) against all claims, actions or demands arising out of any sale, distribution or other disposition of Units or Implementations by Licensee or its Customers, or any other breach of this Agreement by Licensee, its officers and/or directors.
d. The parties' obligations under this section are conditioned upon the following:
(A) Indemnified party notifies indemnifying party in writing promptly upon learning of a claim;
(B) Indemnifying party has sole control of the defense and all related settlement negotiations, provided that indemnified party has a right to participate in the defense of any claim at its own expense;
(C) Indemnified party provides indemnifying party with such assistance as Indemnifying party reasonably requests to perform the above.
(D) Indemnifying party may not settle any claim without indemnified party's prior written approval if such settlement requires the indemnified party to admit any liability or wrongdoing.
8.   Non-Exclusivity
This Agreement only covers the Licensed Technology or Implementations specified in Appendix A.  Nothing in this Agreement will be construed to grant to Licensee any rights in or to any present or future products of Waves, whether or not similar to the Licensed Technology or Implementations.
[repeat of clause above]9. Confidentiality
a. All confidential or proprietary information and materials disclosed to the other Party hereunder shall be disclosed in accordance with the requirements of the Corporate Non-Disclosure Agreement (“CNDA”), No. 8186850, entered into between the parties on 30 August 2006.  Each Party agrees to maintain such confidential information in accordance with the terms of this Agreement and the CNDA and any other applicable, separate non-disclosure agreement(s) between Waves and Licensee.  Licensee shall not reproduce, duplicate, copy or otherwise disclose, distribute or disseminate any of the Implementations provided under this Agreement, in any media, other than as provided for herein for the purposes of this Agreement.
b. The terms of confidentiality included or referenced by this Agreement shall not be construed to limit either Party’s right to independently develop or acquire products without use of the other Party’s confidential or proprietary information and materials disclosed hereunder.
c. Confidentiality of Agreement.  The parties hereto shall keep the terms of this Agreement confidential, but may disclose these terms:
       a) with the prior written consent of the other Party;
       b) in response to a valid order of a court or other governmental body, or if otherwise required to be disclosed by law; provided, however, the disclosing Party shall first give, insofar as it is able, at least ten (10) days advanced written notice to the disclosing Party so that the parties may seek an appropriate protective order; or
      c) in confidence to legal counsel, accountants, banks, potential acquirers and financing sources and their advisors solely in connection with complying with bona fide transactions.
10. Termination
a. Unless otherwise earlier terminated as provided for in this Section 10, this Agreement shall become effective as of the Effective Date and shall continue for a period of two (2) years (the “Initial Term”).  Following the Initial Term, this Agreement shall renew automatically at the end of the Initial Term and each subsequent one (1) year anniversary (each, a “Renewal Term”), except that such automatic renewal shall not take place if either Party provided written notice of its intent not to renew this Agreement at least thirty (30) days before the end of the Initial Term or a Renewal Term. The Initial Term and any Renewal Terms are collectively referred to in this Agreement as the “Term”.

b. Licensee may terminate this Agreement for any reason upon thirty (30) days’ prior written notice.
c. Either Party shall have the right to terminate this Agreement by giving written notice of termination to the other Party at any time upon or after: 1) the filing by the other Party of a petition in bankruptcy or insolvency; 2) any adjudication that the other Party is bankrupt or insolvent; 3) the filing by the other Party under any law relating to bankruptcy or insolvency; 4) the appointment of a receiver for all or substantially all of the property of the other Party; 5) the making by the other Party of any assignment or attempted assignment of this Agreement for the benefit of creditors; or 6) the institution of any proceedings for the liquidation or winding up of the other Party’s business or for the termination of its corporate charter; 7) a breach by the other Party which is incapable of being cured within the time limitation above. Upon the giving of such notice of cancellation, this Agreement shall be terminated forthwith.
d. In the event that this Agreement is terminated in accordance with Section 10.a. or 10.b. above, Licensee shall be prohibited from engaging in any new agreement with Customers for the provision of Licensed Products, but shall be entitled, for a period of 36 months following termination, to continue distributing any already manufactured Licensed Products and to manufacture Licensed Products to supply any pre-ordered Licensed Products. Following said 36 month period, Licensee shall be prohibited from activating the Licensed Technology on existing Units and shall immediately discontinue the use of the Licensed Technology and Implementations, and any and all portions thereof.
e. Other than as necessary to meet the rights and obligations of Section 10.d. above, Licensee shall, on the date of such termination, immediately discontinue the use of the Licensed Technology and Implementations, and any and all portions thereof. Within to thirty (30) days after the date of termination, Licensee shall deliver to Waves or to Waves’ authorized representative, all aspects of the Licensed Technology including all copies and related materials. At Waves’ option, all copies of the Licensed Technology and/or related materials may be destroyed by Licensee, who shall then provide Waves with written certification of compliance with this provision.
f. Termination of this Agreement shall not abridge the right of use on the part of Customers, who have rightfully received the Licensed Products as permitted by this Agreement.
g. No failure or delay on the part of either Party in exercising its right of termination hereunder for any one or more causes shall be construed to prejudice its right of termination for such or for any other or subsequent cause.
h. Sections 1, 3, 5, 6, 7, 8, 9, 10, 11, 12 and 13 and any other sections which by their nature should survive, will survive termination of this Agreement.
11. Jurisdiction and Governing Law
a. This Agreement shall in all respects be governed by the laws of the State of Delaware without reference to its principles of conflicts of laws.  This Agreement will not be governed by the United Nations Convention of Contracts for the International Sale of Goods, the application of which is expressly excluded.  All disputes and litigation regarding this Agreement and matters connected with its performance will be subject to the exclusive jurisdiction of the Chancery Court of the state of Delaware or of the Federal courts sitting therein.
b.	Disputes.  All disputes arising directly under the express terms of this Agreement or relating to the termination thereof shall be resolved as follows.  First, the senior management of both parties shall meet to attempt to resolve such disputes.  If the senior management cannot resolve the disputes, either Party may make a written demand for formal dispute resolution.  Within thirty (30) days after such written demand, the parties agree to meet for one day with an impartial mediator and consider dispute resolution alternatives other than litigation.  If an alternative method of dispute resolution is not agreed upon within thirty (30) days after the one-day mediation, either Party may begin litigation proceedings.  All proceedings, filings, negotiations, settlements, awards, rulings or other information learned or exchanged related to or arising out of the dispute or any arbitration (unless otherwise agreed upon as not being Confidential Information) shall be treated as Confidential Information under the CNDA by both parties.  During the period of submission to mediation and thereafter until the granting of an award, the parties shall, except in the event of termination, continue to perform all their obligations under this Agreement without prejudice to a final adjustment in accordance with the said award.  Nothing in this Section shall affect a Party’s right to seek immediate or preliminary equitable relief not otherwise prohibited by this Agreement.
12. Miscellaneous
a. No amendment or modification to this Agreement shall be valid or binding upon the Parties unless made in writing and signed by authorized representatives of the Parties.  This Agreement and the Appendices attached hereto and the referenced CNDA embody the entire understanding of the Parties with respect to the subject-matter contained herein, and shall supersede all previous communications, representations, or understandings, either oral or written, between the Parties relating to the subject-matter hereof.
b. Nothing contained in this Agreement shall be construed as conferring by implication, estoppel or otherwise upon either Party hereunder, any license or other right except the licenses and rights expressly granted hereunder to a Party hereto.
c. All notices required or permitted to be given hereunder shall be deemed given if sent by e-mail, facsimile transmission or registered airmail to the address of the other Party as specified in this Agreement, or to such other address as one Party notifies the other of in writing.
Licensee:
Intel Corporation
2200 Mission College Boulevard
RNB 4-151
Santa Clara, CA  95052
Attn:  General Counsel
Reference ID: Doug Smith PEG

Waves:
Per address above, and copy (not constituting notice) to:

Tadmor & Co. Yuval Levy & Co.
Azrielli Tower (Square Tower), 34th floor
128 Menachem Begin St., Tel Aviv
Attn: Tamar Krongrad, Adv.
tamar@tadmor-levy.com




d. Except as provided in this Agreement, neither Party may delegate, assign, transfer or attempt to delegate, assign or transfer this Agreement or its rights or obligations under this Agreement, whether through assignment by operation of law, direct assignment, sale of substantially all assets, reorganization, merger, reverse merger or similar assignment or change of control, without the prior written consent of the other Party, and any assignment without such consent shall have no force or effect.
i. Notwithstanding the above prohibition of assignment or transfer:
a) Licensee may assign this Agreement without Waves’ consent to an entity that succeeds to all or substantially all of the business assets of Licensee exclusively related to the subject matter of this Agreement.  Licensee may also assign or delegate its rights and/or obligations, or any part thereof under this Agreement without Waves’ consent to a Licensee Affiliate, provided that notice is provided to Waves and that Licensee remains liable for such obligations.
b) Waves may assign this Agreement in connection with a sale of Waves or all or substantially all of its business or assets or a sale of a line of Waves products in which the Licensed Technology is used, including by merger, stock sale, asset sale, or otherwise.
ii. Any assignment of this Agreement shall be subject to the assignee agreeing in writing to be bound by all the obligations and other terms and conditions of this Agreement.  Subject to the foregoing, this Agreement shall bind and inure to the benefit of the respective parties hereto and their permitted successors and assigns.
e. Neither Party shall be responsible for delays or failures in performance resulting from acts beyond the control of such Party. Such acts shall include (without limitation) natural disasters, labor conflicts, acts of war or civil disruption, or governmental regulations.
f. Each Party agrees not to export or re-export, or cause to be exported or re-exported, any technical data furnished by the other Party hereunder or the direct product of such technical data to any destination, person or firm in violation of the US laws and regulations governing the export of US commodities and technical data.
g. Nothing contained herein or done in pursuance of this Agreement shall constitute either Party the agent for the other Party for any purpose and neither shall so hold itself out publicly or to any third party or incur any liability for the other.  The relationship between the parties is that of independent contractors. This Agreement does not constitute a partnership or joint venture between Waves and Licensee.
h. The captions used in this Agreement are for convenience of reference only and are not to be used in interpreting the obligations of the Parties under this Agreement. If any provision of this Agreement is determined by a court of competent jurisdiction to be invalid or unenforceable, then such provision shall be deemed modified to the extent necessary in order to render such provision valid and enforceable; if such provision may not be so saved, it shall be severed and the remainder of this Agreement shall remain in full force and effect.
i. Each Party represents to the other that it has the right to grant the rights hereunder, and that the terms and conditions do not conflict with its By-Laws, and do not conflict with any other agreement to which it is a party or to which it is bound.  Anything contained in this Agreement to the contrary notwithstanding, the obligations of the parties hereto shall be subject to all laws, present and future, of any government having jurisdiction over the parties hereto, and to orders, regulations, directions or requests of any such government.
j. This Agreement may be executed in two counterparts, each of which will be deemed an original and all of which together will constitute one and the same instrument.
[SIGNATURES ARE ON THE NEXT PAGE]



IN WITNESS WHEREOF, the Parties hereto have caused this Agreement to be executed by their authorized representatives:

INTEL CORPORATION:		       			Waves Audio Ltd.:
By:							By:
Name:	                     			Name:
Title:                                    	       Title:
Date:							Date:




					Appendix A
				Licensed Technology

1) MaxxAudio.
2) MaxxVoice (will be available in the 2017 models).
















[SF1]Intel rejects these changes as they would remove the obligation to bring a claim in Delaware.  We can change the law and jurisdiction to New York if that is better.
-17-



Final



