Thank you for trying out the Picasa software! By using this software, including certain third party software made available in conjunction with this software but not including software provided in source form and expressly licensed under other terms as set forth at http://code.google.com, ("Picasa Software"), you agree to accept a license under and be bound by the following terms and conditions  of this agreement (the "Agreement") with Picasa LLC and Google Inc. (collectively referred to herein as “Google”):   

Non-Commercial Use Only 

Picasa Software is made available to you for your non-commercial use only. This means that you may use it at work or at home, but you first need to obtain Google's permission if you want to sell the Picasa Software or any information, services, or software associated with or derived from the Picasa Software, or if you want to modify, copy (except as explicitly provided below), license, or create derivative works from the Picasa Software (collectively, “Commercial Use”).  

In the event that you would like to use the Picasa Software for Commercial Use, please contact us requesting permission for such Commercial Use (and detailing the specific type of Commercial Use requested) at http://www.google.com/picasasupport.  You may not use the Picasa Software in any manner that could damage, disable, overburden, or impair Google’s services (e.g., you may not use the Picasa Software in an automated manner), nor may you use Picasa Software in any manner that could interfere with any other party's use and enjoyment of Google's services. 

This Agreement allows you to install and use the Picasa Software on a single computer. You may make copies of the Picasa Software and distribute such copies to other persons employed by your employer’s organization, provided that each such recipient has had an opportunity to review and agrees to be bound by this Agreement prior to any use of the Picasa Software.   If others employed by your employer’s organization do not have this opportunity to review and/or do not individually agree to be bound by this Agreement and you would still like to distribute copies to them, you may do so provided that you have the legal right to bind your employer’s organization and others within your employer’s organization to this Agreement.  If you do not have this right and the recipients do not have an opportunity to review and/or do not agree to be bound by this Agreement, you may not distribute the Picasa Software to them.  If you have any questions regarding the terms of distribution, please contact us at http://www.google.com/picasasupport.

For each copy of the Picasa Software authorized under this license, you may make one backup copy, provided your backup copy is not installed or used concurrently on different computers. You must reproduce on any such copy all copyright notices and any other proprietary legends on the original copy of the Picasa Software. Google is not obligated to provide maintenance, support, or updates to you for the Picasa Software.  

If you have comments on the Picasa Software or ideas on how to improve it, please contact us at http://www.google.com/picasasupport. Please note that by doing so, you also grant to Google and third parties permission to use and incorporate your ideas or comments into the Picasa Software (or third party software) without further compensation. 

Proper Use 

You agree that you will use the Picasa Software in compliance with all applicable local, state, national, and international laws, rules and regulations, including any laws regarding the transmission of technical data exported from your country of residence. You shall not agree to, and shall not authorize or encourage any third party to: (i) use the Picasa Software to upload, transmit or otherwise distribute any content that is unlawful, defamatory, harassing, abusive, fraudulent, obscene, contains viruses, or is otherwise objectionable; (ii) upload, transmit or otherwise distribute content that infringes upon another party's intellectual property rights or other proprietary, contractual or fiduciary rights or obligations; (iii) use the Picasa Software for any fraudulent or inappropriate purpose; or (iv) act in any way that violates this Agreement, as may be revised from time to time. Violation of any of the foregoing may result in immediate termination of this license, and may subject you to state, national and/or international penalties and other legal consequences. 

Automatic Updates 

The Picasa Software may communicate with Google's servers to check for available updates to the Picasa Software, such as bug fixes, patches, enhanced functions, missing plug-ins and new versions (collectively, "Updates").  During this process, the Picasa Software creates a randomly generated number for updating the software, which is not associated with any personally identifying information.  The Picasa Software sends Google a request for the latest Picasa Software version information.  If a newer version is available, the Picasa Software will give you the option of downloading it. The Picasa Software asks for permission before downloading an updated version.  If you wish to disable the automated check for updates, please see the FAQ [http://picasa.google.com/support/bin/answer.py?answer=11249] for details. By installing the Picasa Software and not disabling the automated check for Updates, you hereby agree to automatically request and receive Updates from Google's servers.

Intellectual Property 

You acknowledge that Google, its subsidiaries and affiliates, and/or third parties own all right, title and interest in and to the Picasa Software, portions thereof, and any software or other materials (not including user photos or message text) provided through or in conjunction with the Picasa Software, including without limitation all intellectual property rights. You agree not to modify, adapt, translate, prepare derivative works from, decompile, reverse engineer, disassemble or otherwise attempt to derive source code from the Picasa Software. You also agree to not remove, obscure, or alter Google's or any third party's copyright notice, trademarks, or other proprietary rights notices affixed to or contained within or accessed in conjunction with or through the Picasa Software. 

Disclaimer of Warranties 

To the fullest extent permitted by applicable law, Google and its licensors and suppliers disclaim any responsibility for any harm resulting from your use of the Picasa Software and/or any third party software accessed in conjunction with or through the Picasa Software.

TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, THE PICASA SOFTWARE AND ANY THIRD PARTY SOFTWARE MADE AVAILABLE IN CONJUNCTION WITH OR THROUGH THE PICASA SOFTWARE ARE PROVIDED "AS IS," WITH NO WARRANTIES. TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, GOOGLE AND ITS LICENSORS AND SUPPLIERS EXPRESSLY DISCLAIM (A) ALL EXPRESS, IMPLIED, AND STATUTORY WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT OF PROPRIETARY RIGHTS; AND (B) ANY WARRANTIES REGARDING THE SECURITY, RELIABILITY, TIMELINESS, AND PERFORMANCE OF THE PICASA SOFTWARE AND SUCH THIRD PARTY SOFTWARE. 

YOU UNDERSTAND AND AGREE THAT YOU DOWNLOAD AND/OR USE THE PICASA SOFTWARE AND ALL THIRD PARTY SOFTWARE MADE AVAILABLE IN CONJUNCTION WITH OR THROUGH THE PICASA SOFTWARE AT YOUR OWN DISCRETION AND RISK AND THAT YOU WILL BE SOLELY RESPONSIBLE FOR ANY DAMAGES TO YOUR COMPUTER SYSTEM OR LOSS OF DATA THAT RESULTS FROM THE DOWNLOAD OR USE OF PICASA SOFTWARE AND SUCH THIRD PARTY SOFTWARE.  SOME STATES OR OTHER JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSIONS MAY NOT APPLY TO YOU. YOU MAY ALSO HAVE OTHER RIGHTS THAT VARY FROM STATE TO STATE AND JURISDICTION TO JURISDICTION. 

Limitation of Liability 

UNDER NO CIRCUMSTANCES SHALL GOOGLE, ITS SUBSIDIARIES AND AFFILIATES OR ITS LICENSORS AND SUPPLIERS BE LIABLE TO ANY USER ON ACCOUNT OF THAT USER'S USE OR MISUSE OF THE PICASA SOFTWARE. SUCH LIMITATION OF LIABILITY SHALL APPLY TO PREVENT RECOVERY OF DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL, EXEMPLARY, AND PUNITIVE DAMAGES WHETHER SUCH CLAIM IS BASED ON WARRANTY, CONTRACT, TORT (INCLUDING NEGLIGENCE), OR OTHERWISE. SUCH LIMITATION OF LIABILITY SHALL APPLY WHETHER THE DAMAGES ARISE FROM USE OR MISUSE OF AND RELIANCE ON THE PICASA SOFTWARE, FROM INABILITY TO USE PICASA SOFTWARE OR FROM THE INTERRUPTION, SUSPENSION, OR TERMINATION OF PICASA SOFTWARE (INCLUDING SUCH DAMAGES INCURRED BY THIRD PARTIES). SUCH LIMITATION SHALL APPLY NOTWITHSTANDING A FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY AND TO THE FULLEST EXTENT PERMITTED BY LAW.  SOME STATES OR OTHER JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATIONS AND EXCLUSIONS MAY NOT APPLY TO YOU. 

Further Limitation of Liability 

It is your responsibility to ensure that you obtain all consents, authorizations and clearances in any data or photographs owned or controlled by third parties that you transmit, access or communicate to others using the Picasa Software. Google will not be liable in any way (a) for any errors or omissions in any photographs or data, or for any loss or damage of any kind incurred as a result of any data transmitted via the Picasa Software; (b) if you are exposed to photographs or data that are offensive, indecent or objectionable; or (c) for any violations of copyright or other proprietary rights as a result of your use of the Picasa Software.

Indemnification 

It is your responsibility to ascertain whether any copyright or other licenses for use of content are necessary and to obtain any such licenses.  You agree to copy, distribute, display, and modify only those materials which you have the necessary permission to use.  You agree to hold harmless and indemnify Google and its subsidiaries, affiliates, and their respective officers, agents, and employees from and against any third party claim arising from or in any way related to your use of the Picasa Software, including any liability or expense arising from all claims, losses, damages (actual and consequential), suits, judgments, litigation costs and attorneys' fees, of every kind and nature. In such a case, Google will provide you with written notice of such claim, suit or action.  

Data Practices and Privacy Policy

The Picasa Software does not require you to provide any personally identifying information, such as your name or email address. If you send a request to Google’s servers, we record standard log information, including Internet Protocol addresses and information related to your request.  We also log information about the installation process and your system and settings when you download Picasa.  We will ask before collecting personally identifying information from you and give you an opportunity to opt out. For a full description of how Google handles personal information, please see the Google Privacy Policy [http://www.google.com/intl/en/privacy.html] and the related Picasa FAQs [http://picasa.google.com/support].

Accessing Other Sites and Servers from Picasa

If you access web sites or servers from the Picasa website or the Picasa Software, your computer will send standard log information, including your IP address.  The site you visit may log this information.  If you use the Picasa website or the Picasa Software to link to a merchant site that requires a log-in, you can opt to have Picasa and/or Google save an encrypted copy of your log-in information on your computer.

U.S. Government Restricted Rights

The Picasa Software and Documentation are "Commercial Items," as that term is defined at 48 C.F.R. §2.101, consisting of "Commercial Computer Software" and "Commercial Computer Software Documentation," as such terms are used in 48 C.F.R. §12.212 or 48 C.F.R. §227.7202, as applicable. Consistent with 48 C.F.R. §12.212 or 48 C.F.R. §227.7202-1 through 227.7202-4, as applicable, the Commercial Computer Software and Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rights as are granted to all other end users pursuant to the terms and conditions herein.

Export Controls 

The Picasa Software is subject to the export control laws of the United States and applicable export and import control laws of other countries. You agree to comply with and use the Picasa Software in a manner consistent with such applicable laws. All rights to use the Picasa Software are granted on condition that such rights are forfeited if you fail to comply with this Agreement.

Miscellaneous Provisions 

This Agreement will be governed by and construed in accordance with the laws of the State of California, without giving effect to the conflict of laws provisions of California or your actual state or country of residence. This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods, the application of which is expressly excluded.  If for any reason a court of competent jurisdiction finds any provision or portion of this Agreement to be unenforceable, the remainder of this Agreement will continue in full force and effect. 

This Agreement constitutes the entire agreement between the parties with respect to the subject matter hereof and supersedes and replaces all prior or contemporaneous understandings or agreements, written or oral, regarding such subject matter. Any waiver of any provision of this Agreement will be effective only if in writing and signed by Google. 

Termination

IF YOU WISH TO TERMINATE THIS AGREEMENT, YOU MAY SIMPLY CEASE USING THE PICASA SOFTWARE AND FOLLOW THE UNINSTALL INSTRUCTIONS. GOOGLE RESERVES THE RIGHT TO TERMINATE THIS AGREEMENT AND YOUR AUTHORIZATION TO USE THE PICASA SOFTWARE AT ANY TIME WITHOUT CAUSE.
