This Strategy First Inc. Source Code License Agreement ("SFI-SCLA") forms a legal agreement between you and Strategy First Inc. ("Strategy First") for the source code, related materials, or related documentation (together, the "Software").

By using this Software you agree to be bound by the terms of this SFI-SCLA. Do not install, copy, or use the Software if you do not agree to the terms of this License Agreement. The Software is protected by copyright and other intellectual property laws and Strategy First is licensing the Software, not selling it.

YOUR RIGHTS:

You may use this Software for any non-commercial purpose, subject to the conditions of this License. Non-commercial purposes include, but are not limited to, teaching, research, public demos and your own experimentation. You may distribute this Software with books or other teaching materials, or publish the Software on websites that are intended to teach the use of the Software for academic or other non-commercial purposes. You may not use or distribute this Software, or any works that derive from it, in any form for commercial purposes. Commercial purposes include, but are not limited to, running a business, licensing, renting, or selling the Software, distributing the Software for use with any commercial products, or any other activity which purpose is to procure a profit or gain to you or others.  This Software includes source code or data, and you may modify such portions of the Software and distribute the modified Software for non-commercial purposes, as provided in this Licensing Agreement.

This Licensing Agreement does not grant you a license to any of Strategy First's copyrights or patents for anything you might create using any of the information included in the Software.

In return, you agree:

1.	That you will not remove any copyright or other notices from the Software.

2.	That if any of the Software is in binary format, you will not attempt to modify such portions of the Software, or to reverse engineer or decompile them, except and only to the extent authorized by law.

3.	That if you distribute the Software or any derivative works of the Software, you will distribute them using a verbatim copy of this License, and you will not grant any
rights to the Software or derivative works that are broader than those provided by this Licensing Agreement. For example, you may not distribute any modifications of the Software under terms that would permit commercial use, or under terms that require the Software or such derivative works to be sublicensed to others.

4.	That if you have modified the Software or created derivative works, and distribute such modifications or derivative works, you will cause the modified files to carry
prominent notices so that recipients know that they are not receiving the original Software. Such notices must state: (i) that you have changed the Software; and (ii) the date of any changes.

5.	That Strategy First is granted, without any limitations, and on a royalty free basis, the rights to reproduce, install, use, modify, distribute and transfer your modifications to the Software source code or data.

6.	That any feedback about the Software provided by you to us is voluntarily given, and Strategy First shall be free to use the feedback as it sees fit without obligation or
restriction of any kind, even if the feedback is designated by you as confidential.

7.	THAT THE SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS.

8.	THAT NEITHER STRATEGY FIRST NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE, INCLUDING DIRECT, INDIRECT, SPECIAL,
CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS.

9.	That we have no duty of reasonable care or lack of negligence, and we are not obligated to provide technical support for the Software.

10.	That if you breach this SFI-SCLA or if you sue anyone over patents that you think may apply to the Software or anyone's use of the Software, your license to the Software ends automatically and you shall destroy all of your copies of the Software immediately.  Section 5 of this SFI-SCLA shall survive any termination of this license.

11.	That the patent rights, if any, granted in this Licensing Agreement only apply to the Software, not to any derivative works you make.

12.	That the Software is subject to U.S. export jurisdiction at the time it is licensed to you, and it may be subject to additional export or import laws in other places.  You agree to comply with all such laws and regulations that may apply to the Software after delivery of the software to you.

13.	That your rights under this License end automatically if you breach it in any way.

14.	That all rights not expressly granted to you in this License are reserved.

15.	That this SFI-SCLA shall be construed and controlled by the laws of the Province of Quebec, Canada, without regard to conflicts of law.  If any provision of this SFI-SCLA shall be deemed unenforceable or contrary to law, the rest of this SFI-SCLA shall remain in full effect and interpreted in an enforceable manner that most nearly captures the intent of the original language.
