<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

	#*****************************************************************************
	#
	# sample_3col.php
	#
	# Author: 		Denis Roy
	# Date:			2005-11-07
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Foundation Update Manager Agreement";
	$pageKeywords	= "legal, foundation, update";
	$pageAuthor		= "Type your name here";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

	<div id="midcolumn">
		<h1>$pageTitle</h1>
		
		<p>8th September, 2004</p>	

		<p><strong>As of February 11, 2011 this agreement was superseded by the revised <a href="epl/notice.php">Eclipse Foundation Software User Agreement</a>.</strong></p>
		<p>The Eclipse Foundation makes available the Eclipse Update Manager 
		(&quot;Update Manager&quot;) for the purpose of allowing users to install software, 
		documentation, information and/or
		other materials (collectively &quot;Downloadable Features&quot;). A Downloadable Feature 
		is a bundle of Plug-ins and/or Fragments and related materials. This capability is provided
		with the intent of allowing users to extend and update the functionality of Eclipse-based 
		products. Information about packaging Downloadable Features is available at
		<a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-update-home/doc/eclipse_update_packaging.html">
		http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-update-home/doc/eclipse_update_packaging.html</a> (&quot;Specification&quot;).</p>

		<p>You may make a Downloadable Feature available on a web server (&quot;Update Server&quot;) with the intent of allowing other parties to install the Downloadable Feature using the Update Manager. By
		providing a Downloadable Feature in such a manner and making it available in accordance with the Specification, you acknowledge your agreement to and grant all necessary rights to permit
		the following:</p>
		<blockquote>
		<ol>
			<li>A series of actions may occur (&quot;Update Process&quot;) in which a user may execute the Update Manager on a machine (&quot;Target Machine&quot;) with the intent of
        		extending and updating the functionality of an Eclipse-based product.</li>
   			<li>During the Update Process, the Update Manager may interact with your Update Server such that a Downloadable Feature or a portion thereof will be copied from your
        		Update Server to the Target Machine (&quot;Downloaded&quot;) using the Update Manager.</li>
			<li>According to the Specification, you must provide the terms and conditions that govern the use of the Downloadable Feature (&quot;Feature Update License&quot;) and such Feature Update License shall be placed on your Update Server in accordance with the Specification.  Such Feature Update License must inform the user of the terms and conditions that govern the Downloadable Feature.</li>
			<li>The Update Manager will present the Feature Update License so that a user may read it and indicate that they agree with the terms and conditions of that
        		license. Upon such indication of agreement by the user, the Update Manager will complete installation of the Downloadable Feature.</li>
			<li>If you provide a Downloadable Feature (&quot;Top-Level Feature&quot;) that &quot;includes&quot; other Downloadable Features (&quot;Included Features&quot;) according to the Specification,
        		any installation of the Top-Level Feature by the Update Manager will present only the Feature Update License for the Top-Level Feature and upon the user
        		indicating their agreement of that license&rsquo;s terms and conditions, both the Top-Level Feature and the Included Features will be installed as described above. It is your obligation to ensure that the Feature Update License for the Top-Level Feature includes the terms and conditions that apply to any and all Included Features or tells the user where to find the Feature Update Licenses that apply to the Included Features.</li>
		</ol>
		</blockquote>
	</div>

EOHTML;


	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
