<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
		   xmlns:dx="http://tempuri.org/2003/01/dx"
	targetNamespace="http://schemas.microsoft.com/wix/2003/01/wi"
			  xmlns="http://schemas.microsoft.com/wix/2003/01/wi">
	<xs:annotation>
		<xs:documentation>
			Copyright (c) Microsoft Corporation.  All rights reserved.

			The use and distribution terms for this software are covered by the
			Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
			which can be found in the file CPL.TXT at the root of this distribution.
			By using this software in any fashion, you are agreeing to be bound by
			the terms of this license.

			You must not remove this notice, or any other, from this software.

			Schema for describing Windows Installer database files (.msi/.msm/.pcp).
		</xs:documentation>
	</xs:annotation>

	<xs:element name="Wix">
		<xs:annotation><xs:documentation>
			This is the top-level container element for every wxs file.  Amongst the possible children,
			the Product, Module, and PatchCreation elements are analogous to the main function in a C program.
			There can only be one of these present when linking occurs.  Product compiles into an msi file,
			Module compiles into an msm file, PatchCreation compiles into a pcp file.  The Fragment element
			is an atomic unit which ultimately links into either a Product, Module, or PatchCreation.  The
			Fragment can either be completely included or excluded during linking.
		</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="1">
				<xs:sequence>
					<xs:choice minOccurs="0">
						<xs:element ref="Product"/>
						<xs:element ref="Module"/>
					</xs:choice>
					<xs:element ref="Fragment" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:element ref="PatchCreation"/>
			</xs:choice>

			<xs:attribute name="RequiredVersion" type="xs:string">
				<xs:annotation>
					<xs:documentation>Required version of the WiX toolset to compile this input file.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Product">
		<xs:annotation><xs:documentation>
			The Product element is analogous to the main function in a C program.  When linking, only one Product section
			can be given to the linker to produce a successful result.  Using this element creates an msi file.
		</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Package" minOccurs="1" />
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="AppId"/>
					<xs:element ref="Binary"/>
					<xs:element ref="ComplianceCheck"/>
					<xs:element ref="Condition"/>
					<xs:element ref="CustomAction"/>
					<xs:element ref="CustomTable"/>
					<xs:element ref="Directory"/>
					<xs:element ref="DirectoryRef"/>
					<xs:element ref="EnsureTable"/>
					<xs:element ref="Feature"/>
					<xs:element ref="FeatureRef"/>
					<xs:element ref="FragmentRef"/>
					<xs:element ref="Group"/>
					<xs:element ref="Icon"/>
					<xs:element ref="Media"/>
					<xs:element ref="Property"/>
					<xs:element ref="PropertyRef"/>
					<xs:element ref="SFPCatalog"/>
					<xs:element ref="SqlDatabase"/>
					<xs:element ref="Upgrade"/>
					<xs:element ref="UI"/>
					<xs:element ref="User"/>
					<xs:element ref="WebApplication"/>
					<xs:element ref="WebAppPool"/>
					<xs:element ref="WebDirProperties"/>
					<xs:element ref="WebLog"/>
					<xs:element ref="WebSite"/>
					<xs:sequence>
						<xs:element ref="InstallExecuteSequence" minOccurs="0"/>
						<xs:element ref="InstallUISequence" minOccurs="0"/>
						<xs:element ref="AdminExecuteSequence" minOccurs="0"/>
						<xs:element ref="AdminUISequence" minOccurs="0"/>
						<xs:element ref="AdvertiseExecuteSequence" minOccurs="0"/>
					</xs:sequence>
					<xs:any namespace="##other" processContents="lax">
						<xs:annotation><xs:documentation>
							Extensibility point in the WiX XML Schema.  Schema extensions can register additional
							elements at this point in the schema.
						</xs:documentation></xs:annotation>
					</xs:any>
				</xs:choice>
			</xs:sequence>

			<xs:attribute name="Id" type="autogenuuid" use="required">
				<xs:annotation>
					<xs:documentation>The product code GUID for the product.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Codepage" type="xs:integer">
				<xs:annotation>
					<xs:documentation>The codepage for the resulting MSI.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Language" type="LocalizableInteger" use="required">
				<xs:annotation>
					<xs:documentation>The decimal language ID (LCID) for the product.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Manufacturer" type="xs:string" use="required">
				<xs:annotation>
					<xs:documentation>The manufacturer of the product.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" type="xs:string" use="required">
				<xs:annotation>
					<xs:documentation>The descriptive name of the product.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="UpgradeCode" type="uuid">
				<xs:annotation>
					<xs:documentation>The upgrade code GUID for the product.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Version" type="xs:string" use="required">
				<xs:annotation>
					<xs:documentation>The product's version string.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:anyAttribute namespace="##other" processContents="lax">
				<xs:annotation><xs:documentation>
					Extensibility point in the WiX XML Schema.  Schema extensions can register additional
					attributes at this point in the schema.
				</xs:documentation></xs:annotation>
			</xs:anyAttribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Module">
		<xs:annotation><xs:documentation>
			The Module element is analogous to the main function in a C program.  When linking, only
			one Module section can be given to the linker to produce a successful result.  Using this
			element creates an msm file.
		</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Package" minOccurs="1"/>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="AppId"/>
					<xs:element ref="Binary"/>
					<xs:element ref="ComponentRef"/>
					<xs:element ref="Configuration"/>
					<xs:element ref="CustomAction"/>
					<xs:element ref="CustomTable"/>
					<xs:element ref="Dependency"/>
					<xs:element ref="Directory"/>
					<xs:element ref="DirectoryRef"/>
					<xs:element ref="EnsureTable"/>
					<xs:element ref="Exclusion"/>
					<xs:element ref="FragmentRef"/>
					<xs:element ref="Group"/>
					<xs:element ref="Icon"/>
					<xs:element ref="IgnoreModularization"/>
					<xs:element ref="Property"/>
					<xs:element ref="PropertyRef"/>
					<xs:element ref="SFPCatalog"/>
					<xs:element ref="SqlDatabase"/>
					<xs:element ref="Substitution"/>
					<xs:element ref="UI"/>
					<xs:element ref="User"/>
					<xs:element ref="WebApplication"/>
					<xs:element ref="WebAppPool"/>
					<xs:element ref="WebDirProperties"/>
					<xs:element ref="WebLog"/>
					<xs:element ref="WebSite"/>
					<xs:any namespace="##other" processContents="lax">
						<xs:annotation><xs:documentation>
							Extensibility point in the WiX XML Schema.  Schema extensions can register additional
							elements at this point in the schema.
						</xs:documentation></xs:annotation>
					</xs:any>
					<xs:sequence>
						<xs:element ref="InstallExecuteSequence" minOccurs="0"/>
						<xs:element ref="InstallUISequence" minOccurs="0"/>
						<xs:element ref="AdminExecuteSequence" minOccurs="0"/>
						<xs:element ref="AdminUISequence" minOccurs="0"/>
						<xs:element ref="AdvertiseExecuteSequence" minOccurs="0"/>
					</xs:sequence>
				</xs:choice>
			</xs:sequence>

			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation>
					<xs:documentation>The name of the merge module (not the file name).</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Codepage" type="xs:integer">
				<xs:annotation>
					<xs:documentation>The codepage of the merge module.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Guid" type="uuid" use="required">
				<xs:annotation>
					<xs:documentation>The product code GUID of the merge module.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Language" type="LocalizableInteger" use="required">
				<xs:annotation>
					<xs:documentation>The decimal language ID (LCID) of the merge module.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Version" type="xs:string" use="required">
				<xs:annotation>
					<xs:documentation>The product version string of the merge module.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Dependency">
		<xs:annotation>
			<xs:documentation>Declares a dependency on another merge module.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="RequiredId" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Identifier of the merge module required by the merge module.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="RequiredLanguage" type="xs:integer" use="required">
				<xs:annotation><xs:documentation>Numeric language ID of the merge module in RequiredID.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="RequiredVersion" type="xs:string">
				<xs:annotation><xs:documentation>Version of the merge module in RequiredID.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Exclusion">
		<xs:annotation>
			<xs:documentation>Declares a merge module with which this merge module is incompatible.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="ExcludedId" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Identifier of the merge module that is incompatible.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ExcludeExceptLanguage" type="xs:integer">
				<xs:annotation><xs:documentation>Numeric language ID of the merge module in ExcludedID. All except this language will be excluded. Only one of ExcludeExceptLanguage and ExcludeLanguage may be specified.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ExcludeLanguage" type="xs:integer">
				<xs:annotation><xs:documentation>Numeric language ID of the merge module in ExcludedID. The specified language will be excluded. Only one of ExcludeExceptLanguage and ExcludeLanguage may be specified.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ExcludedMinVersion" type="xs:string">
				<xs:annotation><xs:documentation>Minimum version excluded from a range. If not set, all versions before max are excluded. If neither max nor min, no exclusion based on version.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ExcludedMaxVersion" type="xs:string">
				<xs:annotation><xs:documentation>Maximum version excluded from a range. If not set, all versions after min are excluded. If neither max nor min, no exclusion based on version.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Configuration">
		<xs:annotation>
			<xs:documentation>Defines the configurable attributes of merge module.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Name" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Defines the name of the configurable item.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Format" use="required">
				<xs:annotation><xs:documentation>Specifies the format of the data being changed.</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="Text"/>
						<xs:enumeration value="Key"/>
						<xs:enumeration value="Integer"/>
						<xs:enumeration value="Bitfield"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Type" type="xs:string">
				<xs:annotation><xs:documentation>Specifies the type of the data being changed.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ContextData" type="xs:string">
				<xs:annotation><xs:documentation>Specifies a semantic context for the requested data.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DefaultValue" type="xs:string">
				<xs:annotation><xs:documentation>Specifies a default value for the item in this record if the merge tool declines to provide a value.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="KeyNoOrphan" type="YesNoType">
				<xs:annotation><xs:documentation>Does not merge rule according to rules in MSI SDK.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="NonNullable" type="YesNoType">
				<xs:annotation><xs:documentation>If yes, null is not a valid entry.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DisplayName" type="xs:string">
				<xs:annotation><xs:documentation>Display name for authoring.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation><xs:documentation>Description for authoring.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="HelpLocation" type="xs:string">
				<xs:annotation><xs:documentation>Location of chm file for authoring.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="HelpKeyword" type="xs:string">
				<xs:annotation><xs:documentation>Keyword into chm file for authoring.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="Substitution">
		<xs:annotation>
			<xs:documentation>Specifies the configurable fields of a module database and provides a template for the configuration of each field.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Table" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Specifies the name of the table being modified in the module database.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Row" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Specifies the primary keys of the target row in the table named in the Table column. If multiple keys, separated by semicolons.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Column" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Specifies the target column in the row named in the Row column.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Value" type="xs:string">
				<xs:annotation><xs:documentation>Provides a formatting template for the data being substituted into the target field specified by Table, Row, and Column.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Fragment">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="FragmentRef"/>
			</xs:appinfo>
			<xs:documentation>
				The Fragment element is the building block of creating an installer database in WiX.  Once defined,
				the Fragment becomes an immutable, atomic unit which can either be completely included or excluded
				from a product.  The contents of a Fragment element can be linked into a product by utilizing one
				of the many *Ref elements.  When linking in a Fragment, it will be necessary to link in all of its
				individual units.  For instance, if a given Fragment contains two Component elements, you must link
				both under features using ComponentRef for each linked Component.  Otherwise, you will get a linker
				warning and have a floating Component that does not appear under any Feature.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="AppId"/>
					<xs:element ref="Binary"/>
					<xs:element ref="ComplianceCheck"/>
					<xs:element ref="Condition"/>
					<xs:element ref="CustomAction"/>
					<xs:element ref="CustomTable"/>
					<xs:element ref="Directory"/>
					<xs:element ref="DirectoryRef"/>
					<xs:element ref="EnsureTable"/>
					<xs:element ref="Feature"/>
					<xs:element ref="FeatureRef"/>
					<xs:element ref="FragmentRef"/>
					<xs:element ref="Group"/>
					<xs:element ref="Icon"/>
					<xs:element ref="IgnoreModularization"/>
					<xs:element ref="Media"/>
					<xs:element ref="Property"/>
					<xs:element ref="PropertyRef"/>
					<xs:element ref="SFPCatalog"/>
					<xs:element ref="SqlDatabase"/>
					<xs:element ref="UI"/>
					<xs:element ref="Upgrade"/>
					<xs:element ref="User"/>
					<xs:element ref="WebApplication"/>
					<xs:element ref="WebAppPool"/>
					<xs:element ref="WebDirProperties"/>
					<xs:element ref="WebLog"/>
					<xs:element ref="WebSite"/>
					<xs:any namespace="##other" processContents="lax">
						<xs:annotation><xs:documentation>
							Extensibility point in the WiX XML Schema.  Schema extensions can register additional
							elements at this point in the schema.
						</xs:documentation></xs:annotation>
					</xs:any>
					<xs:sequence>
						<xs:element ref="InstallExecuteSequence" minOccurs="0"/>
						<xs:element ref="InstallUISequence" minOccurs="0"/>
						<xs:element ref="AdminExecuteSequence" minOccurs="0"/>
						<xs:element ref="AdminUISequence" minOccurs="0"/>
						<xs:element ref="AdvertiseExecuteSequence" minOccurs="0"/>
					</xs:sequence>
				</xs:choice>
			</xs:sequence>

			<xs:attribute name="Id" type="xs:string">
				<xs:annotation><xs:documentation>
					Optional identifier for a Fragment.  Should only be used if you plan to refer to this Fragment
					via a FragmentRef element elsewhere.
				</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="PatchCreation">
		<xs:annotation><xs:documentation>
			The PatchCreation element is analogous to the main function in a C program.  When linking, only one PatchCreation section
			can be given to the linker to produce a successful result.  Using this element creates a pcp file.
		</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="PatchInformation" minOccurs="1" maxOccurs="1"/>
				<xs:element ref="PatchMetadata" minOccurs="0" maxOccurs="1"/>
				<xs:element ref="Family" minOccurs="1" maxOccurs="unbounded"/>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="PatchProperty"/>
					<xs:element ref="PatchSequence"/>
					<xs:element ref="ReplacePatch"/>
					<xs:element ref="TargetProductCode"/>
				</xs:choice>
			</xs:sequence>
		
			<xs:attribute name="Id" type="uuid" use="required">
				<xs:annotation><xs:documentation>Guid for this patch.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="OutputPath" type="xs:string">
				<xs:annotation><xs:documentation>Output patch for patchwiz.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="WholeFilesOnly" type="YesNoType">
				<xs:annotation><xs:documentation>Changing files should be included in their entirety.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SourceList" type="xs:string">
				<xs:annotation><xs:documentation>Used to locate the .msp file for the patch if the cached copy is unavailable.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="AllowProductCodeMismatches" type="YesNoType">
				<xs:annotation><xs:documentation>ProductCode property may differ between UpgradedImages table and TargetImages table.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="AllowMajorVersionMismatches" type="YesNoType">
				<xs:annotation><xs:documentation>True if ProductVersion property may differ by a major version.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="CleanWorkingFolder" type="YesNoType">
				<xs:annotation><xs:documentation>Whether patchwiz should clean the temp folder when finished.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="OptionFlags" type="xs:int">
				<xs:annotation><xs:documentation>Option flags.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SymbolFlags" type="xs:int">
				<xs:annotation><xs:documentation>Symbol flags.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="PatchInformation">
		<xs:annotation>
			<xs:documentation>Properties about the patch to be placed in the Summary Information Stream.  These are visible from COM through the IStream interface, and these properties can be seen on the package in Explorer.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation>
					<xs:documentation>Product full name or description</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Platforms" type="xs:string">
				<xs:annotation>
					<xs:documentation>List of platforms supported in package</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Languages" type="xs:string">
				<xs:annotation>
					<xs:documentation>List of language IDs supported in package</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Manufacturer" type="xs:string">
				<xs:annotation>
					<xs:documentation>Vendor releasing the package</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Keywords" type="xs:string">
				<xs:annotation>
					<xs:documentation>Optional keywords for browsing</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Comments" type="xs:string">
				<xs:annotation>
					<xs:documentation>Optional comments for browsing</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="SummaryCodepage" type="xs:integer">
				<xs:annotation>
					<xs:documentation>Codepage for summary info strings only</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="ShortNames" type="YesNoType">
				<xs:annotation>
					<xs:documentation>Short filenames on source</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Compressed" type="YesNoType">
				<xs:annotation>
					<xs:documentation>Compressed files on source</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="AdminImage" type="YesNoType">
				<xs:annotation>
					<xs:documentation>Source is an admin image</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="PatchMetadata">
		<xs:annotation>
			<xs:documentation>Properties about the patch to be placed in the PatchMetadata table.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="CustomProperty" minOccurs="0">
					<xs:annotation><xs:documentation>A custom property that extends the standard set.</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Classification" use="required">
				<xs:annotation>
					<xs:documentation>Category of updates.</xs:documentation>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="Hotfix"/>
						<xs:enumeration value="Security Rollup"/>
						<xs:enumeration value="Critical Update"/>
						<xs:enumeration value="Update"/>
						<xs:enumeration value="Service Pack"/>
						<xs:enumeration value="Update Rollup"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="AllowRemoval" type="YesNoType">
				<xs:annotation>
					<xs:documentation>Whether this is an uninstallable patch.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="ManufacturerName" type="xs:string">
				<xs:annotation>
					<xs:documentation>Name of the manufacturer.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="TargetProductName" type="xs:string">
				<xs:annotation>
					<xs:documentation>Name of the application or target product suite.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="MoreInfoURL" type="xs:string">
				<xs:annotation>
					<xs:documentation>A URL that provides information specific to this patch. In Add/Remove Programs from XP SP2 on.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="CreationTimeUTC" type="xs:string">
				<xs:annotation>
					<xs:documentation>Creation time of the .msp file in the form mm:dd:yy:HH:MM (month: day : year : hour : minute).</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="DisplayName" type="xs:string">
				<xs:annotation>
					<xs:documentation>A title for the patch that is suitable for public display. In Add/Remove Programs from XP SP2 on.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation>
					<xs:documentation>Description of the patch.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="CustomProperty">
		<xs:annotation><xs:documentation>A custom property for the PatchMetadata table.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Company" type="xs:string" use="required"/>
			<xs:attribute name="Property" type="xs:string" use="required"/>
			<xs:attribute name="Value" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="ReplacePatch">
		<xs:annotation><xs:documentation>A patch that is deprecated by this patch.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="uuid" use="required"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="TargetProductCode">
		<xs:annotation><xs:documentation>A product code for a product that may receive this patch. (Or '*' for all products.)</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="PatchProperty">
		<xs:annotation><xs:documentation>A property for this patch database.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Name" type="xs:string" use="required"/>
			<xs:attribute name="Value" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="PatchSequence">
		<xs:annotation><xs:documentation>Sequence information for this patch database. Sequence information is generated automatically in most cases, and rarely needs to be set explicitly.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="PatchFamily" type="xs:string" use="required">
				<xs:annotation>
					<xs:documentation>Identifier which indicates one of the sequence families to which this patch belongs.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Target" type="xs:string">
				<xs:annotation>
					<xs:documentation>Used to determine the product code filtering for the patch family.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Sequence" type="xs:string">
				<xs:annotation>
					<xs:documentation>Used to populate the sequence column of the MsiPatchSequence table in the final MSP file. Specified in x.x.x.x format. See documentation for Sequence column of MsiPatchSequence table in MSI SDK.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Supersede" type="xs:integer">
				<xs:annotation>
					<xs:documentation>Non-NULL value indicates that this patch supersedes earlier patches in this family. See documentation for Attributes column of MsiPatchSequence table in MSI SDK.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="Family">
		<xs:annotation><xs:documentation>Group of one or more upgraded images of a product.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="UpgradeImage" minOccurs="1" maxOccurs="unbounded"/>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="ExternalFile"/>
					<xs:element ref="ProtectFile"/>
				</xs:choice>
			</xs:sequence>

			<xs:attribute name="Name" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Identifier for the family.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="MediaSrcProp" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Entered into the Source field of the new Media table entry of the upgraded image.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DiskId" type="xs:int" use="required">
				<xs:annotation><xs:documentation>Entered into the DiskId field of the new Media table record.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SequenceStart" type="xs:int" use="required">
				<xs:annotation><xs:documentation>Sequence number for the starting file.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DiskPrompt" type="xs:string">
				<xs:annotation><xs:documentation>Entered into the DiskPrompt field of the new Media table record.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="VolumeLabel" type="xs:string">
				<xs:annotation><xs:documentation>Entered into the VolumeLabel field of the new Media table record.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="UpgradeImage">
		<xs:annotation><xs:documentation>Contains information about the upgraded images of the product.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="TargetImage" minOccurs="1" maxOccurs="unbounded"/>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="SymbolPath"/>
					<xs:element ref="UpgradeFile"/>
				</xs:choice>
			</xs:sequence>
			
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Identifier to connect target images with upgraded image.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="src" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Full path to location of msi file for upgraded image.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="srcPatch" type="xs:string">
				<xs:annotation><xs:documentation>Modified copy of the upgraded installation database that contains additional authoring specific to patching.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="TargetImage">
		<xs:annotation><xs:documentation>Contains information about the target images of the product.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="SymbolPath"/>
				<xs:element ref="TargetFile"/>
			</xs:choice>
			
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Identifier for the target image.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="src" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Full path to the location of the msi file for the target image.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Order" type="xs:int" use="required">
				<xs:annotation><xs:documentation>Relative order of the target image.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Validation" type="xs:string">
				<xs:annotation><xs:documentation>Product checking to avoid applying irrelevant transforms.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="IgnoreMissingFiles" type="YesNoType">
				<xs:annotation><xs:documentation>Files missing from the target image are ignored by the installer.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="TargetFile">
		<xs:annotation><xs:documentation>Information about specific files in a target image.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="SymbolPath" minOccurs="0" maxOccurs="1"/>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="IgnoreRange"/>
					<xs:element ref="ProtectRange"/>
				</xs:choice>
			</xs:sequence>
			
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Foreign key into the File table.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="IgnoreRange">
		<xs:annotation><xs:documentation>Specifies part of a file that is to be ignored during patching.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Offset" type="xs:int" use="required">
				<xs:annotation><xs:documentation>Offset of the start of the range.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Length" type="xs:int" use="required">
				<xs:annotation><xs:documentation>Length of the range.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="ProtectRange">
		<xs:annotation><xs:documentation>Specifies part of a file that cannot be overwritten during patching.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Offset" type="xs:int" use="required">
				<xs:annotation><xs:documentation>Offset of the start of the range.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Length" type="xs:int" use="required">
				<xs:annotation><xs:documentation>Length of the range.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="ProtectFile">
		<xs:annotation><xs:documentation>Specifies a file to be protected.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="ProtectRange"/>
			</xs:choice>
		
			<xs:attribute name="File" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Foreign key into the File table.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="ExternalFile">
		<xs:annotation><xs:documentation>Contains information about specific files that are not part of a regular target image.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ProtectRange" minOccurs="1" maxOccurs="unbounded"/>
				<xs:element ref="SymbolPath" minOccurs="1" maxOccurs="unbounded"/>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="IgnoreRange"/>
				</xs:choice>
			</xs:sequence>
			
			<xs:attribute name="File" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Foreign key into the File table.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="src" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Full path of the external file.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Order" type="xs:int" use="required">
				<xs:annotation><xs:documentation>Specifies the order of the external files to use when creating the patch.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="UpgradeFile">
		<xs:annotation><xs:documentation>Specifies files to either ignore or to specify optional data about a file.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="SymbolPath"/>
			</xs:choice>
			
			<xs:attribute name="File" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Foreign key into the File table.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Ignore" type="YesNoType" use="required">
				<xs:annotation><xs:documentation>If yes, the file is ignored during patching, and the next two attributes are ignored.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="AllowIgnoreOnError" type="YesNoType">
				<xs:annotation><xs:documentation>Specifies whether patching this file is vital.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="WholeFile" type="YesNoType">
				<xs:annotation><xs:documentation>Whether the whole file should be installed, rather than creating a binary patch.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="SymbolPath">
		<xs:annotation><xs:documentation>A path to symbols.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Path" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The path.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="FragmentRef">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="Fragment"/>
			</xs:appinfo>
			<xs:documentation>
				Reference to a Fragment.  This will force the entire referenced Fragment's contents
				to be included in the installer database.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The identifier of the Fragment to reference.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Package">
		<xs:annotation><xs:documentation>
			Properties about the package to be placed in the Summary Information Stream.  These are
			visible from COM through the IStream interface, and these properties can be seen on the package in Explorer.
		</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="autogenuuid">
				<xs:annotation>
					<xs:documentation>Package code GUID for SKU.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="AdminImage" type="YesNoType">
				<xs:annotation>
					<xs:documentation>Set to 'yes' if the source is an admin image.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Comments" type="xs:string">
				<xs:annotation>
					<xs:documentation>Optional comments for browsing.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Compressed" type="YesNoType">
				<xs:annotation>
					<xs:documentation>Set to 'yes' to have compressed files in the source.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation>
					<xs:documentation>The product full name or description.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="InstallerVersion" type="xs:integer">
				<xs:annotation>
					<xs:documentation>The minimum installer version (major*100 + minor).</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Keywords" type="xs:string">
				<xs:annotation>
					<xs:documentation>Optional keywords for browsing.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Languages" type="xs:string">
				<xs:annotation>
					<xs:documentation>The list of language IDs (LCIDs) supported in the package.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Manufacturer" type="xs:string">
				<xs:annotation>
					<xs:documentation>The vendor releasing the package.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Platforms" type="xs:string">
				<xs:annotation>
					<xs:documentation>The list of platforms supported in the package.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="ShortNames" type="YesNoType">
				<xs:annotation>
					<xs:documentation>Set to 'yes' to have short filenames in the source.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="SummaryCodepage" type="xs:integer">
				<xs:annotation>
					<xs:documentation>The codepage for summary info strings only.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="AssemblyName">
		<xs:annotation><xs:documentation>
			The MsiAssemblyName table specifies the schema for the elements of a strong assembly cache name for a .NET Framework or Win32 assembly.
			Consider using the Assembly attribute on File element to have the toolset populate these entries automatically.
		</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Name of the attribute associated with the value specified in the Value column.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Value" type="xs:string">
				<xs:annotation><xs:documentation>Value associated with the name specified in the Name column.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="DigitalCertificate">
		<xs:annotation><xs:documentation>Adds a digital certificate</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:annotation><xs:documentation>Element value can be hex-encoded certificate value</xs:documentation></xs:annotation>
						<xs:attribute name="Name" type="xs:string">
					</xs:attribute>
					<xs:attribute name="src" type="xs:string">
						<xs:annotation><xs:documentation>path to certificate file</xs:documentation></xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="DigitalSignature">
		<xs:annotation>
			<xs:documentation>Adds a digital signature</xs:documentation>
		</xs:annotation>
		<xs:complexType mixed="true">
			<xs:annotation><xs:documentation>Element value can be hex-encoded hash value</xs:documentation></xs:annotation>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="DigitalCertificate"/>
			</xs:choice>
			<xs:attribute name="src" type="xs:string">
				<xs:annotation><xs:documentation>path to signature's hash file</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="SFPCatalog">
		<xs:annotation>
			<xs:documentation>Adds a system file protection update catalog file</xs:documentation>
		</xs:annotation>
		<xs:complexType mixed="true">
			<xs:annotation><xs:documentation>Element value can be hex-encoded hash value</xs:documentation></xs:annotation>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="SFPCatalog" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="File" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Only specify File's element text (primary key)</xs:documentation></xs:annotation>
				</xs:element>
			</xs:choice>
			<xs:attribute name="Name" type="xs:string">
				<xs:annotation><xs:documentation>filename for catalog file when installed</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Dependency" type="xs:string">
				<xs:annotation><xs:documentation>used to define dependency outside of the package</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="src" type="xs:string">
				<xs:annotation><xs:documentation>path to catalog file in binary</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="IniFile">
		<xs:annotation>
			<xs:documentation>Adds or removes .ini file entries</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Name" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Directory" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Section" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Key" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Value" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Action" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="addLine"/>
						<xs:enumeration value="createLine"/>
						<xs:enumeration value="addTag"/>
						<xs:enumeration value="removeLine"/>
						<xs:enumeration value="removeTag"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ODBCDataSource">
		<xs:annotation><xs:documentation>ODBCDataSource for a Component</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Property" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Translates into ODBCSourceAttributes</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Name" use="required" type="xs:string"/>
			<xs:attribute name="DriverName" type="xs:string">
				<xs:annotation><xs:documentation>Required if not found as child of ODBCDriver element</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Registration" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="machine"/>
						<xs:enumeration value="user"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="KeyPath" type="YesNoType">
				<xs:annotation><xs:documentation>Set 'yes' to force this file to be key path for parent Component</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ODBCDriver">
		<xs:annotation><xs:documentation>ODBCDriver for a Component</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Property" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Translates into ODBCSourceAttributes</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ODBCDataSource" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Name" use="required" type="xs:string"/>
			<xs:attribute name="File" type="xs:string">
				<xs:annotation><xs:documentation>Required if not found as child of File element</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SetupFile" type="xs:string">
				<xs:annotation><xs:documentation>Required if not found as child of File element or different from File attribute above</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ODBCTranslator">
		<xs:annotation><xs:documentation>ODBCTranslator for a Component</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Name" use="required" type="xs:string"/>
			<xs:attribute name="File" type="xs:string">
				<xs:annotation><xs:documentation>Required if not found as child of File element</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SetupFile" type="xs:string">
				<xs:annotation><xs:documentation>Required if not found as child of File element or different from File attribute above</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="FileSearch">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="ComponentSearch"/>
				<dx:seeAlso ref="DirectorySearch"/>
				<dx:seeAlso ref="DirectorySearchRef"/>
				<dx:seeAlso ref="FileSearchRef"/>
				<dx:seeAlso ref="IniFileSearch"/>
				<dx:seeAlso ref="RegistrySearch"/>
			</xs:appinfo>
			<xs:documentation>Searches for file and assigns to fullpath value of parent Property</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string">
				<xs:annotation><xs:documentation>Specify the Id when you want to find the path to a file.  Leave the Id absent if you want to find the parent directory of a file.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" use="required" type="xs:string"/>
			<xs:attribute name="MinSize" type="xs:int"/>
			<xs:attribute name="MaxSize" type="xs:int"/>
			<xs:attribute name="MinVersion" type="xs:string"/>
			<xs:attribute name="MaxVersion" type="xs:string"/>
			<xs:attribute name="MinDate" type="xs:dateTime"/>
			<xs:attribute name="MaxDate" type="xs:dateTime"/>
			<xs:attribute name="Languages" type="xs:string"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="FileSearchRef">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="FileSearch"/>
			</xs:appinfo>
			<xs:documentation>References an existing FileSearch element.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string">
				<xs:annotation><xs:documentation>Specify the Id to the FileSearch to reference.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="DirectorySearch">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="ComponentSearch"/>
				<dx:seeAlso ref="IniFileSearch"/>
				<dx:seeAlso ref="RegistrySearch"/>
			</xs:appinfo>
			<xs:documentation>Searches for directory and assigns to value of parent Property.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0">
				<xs:element ref="DirectorySearch"/>
				<xs:element ref="DirectorySearchRef"/>
				<xs:element ref="FileSearch"/>
				<xs:element ref="FileSearchRef"/>
			</xs:choice>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Path" type="xs:string"/>
			<xs:attribute name="Depth" type="xs:integer"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="DirectorySearchRef">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="ComponentSearch"/>
				<dx:seeAlso ref="IniFileSearch"/>
				<dx:seeAlso ref="RegistrySearch"/>
			</xs:appinfo>
			<xs:documentation>References an existing DirectorySearch element.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0">
				<xs:element ref="DirectorySearch"/>
				<xs:element ref="DirectorySearchRef"/>
				<xs:element ref="FileSearch"/>
				<xs:element ref="FileSearchRef"/>
			</xs:choice>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Path" type="xs:string"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="ComponentSearch">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="IniFileSearch"/>
				<dx:seeAlso ref="RegistrySearch"/>
			</xs:appinfo>
			<xs:documentation>Searches for file or directory and assigns to value of parent Property</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0">
				<xs:element ref="DirectorySearch"/>
				<xs:element ref="DirectorySearchRef"/>
				<xs:element ref="FileSearch"/>
				<xs:element ref="FileSearchRef"/>
			</xs:choice>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Guid" type="uuid"/>
			<xs:attribute name="Type">
				<xs:annotation><xs:documentation>Must be file if last child is FileSearch element and must be directory if last child is DirectorySearch element</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="directory"/>
						<xs:enumeration value="file"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="IniFileSearch">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="ComponentSearch"/>
				<dx:seeAlso ref="RegistrySearch"/>
			</xs:appinfo>
			<xs:documentation>Searches for file, directory or registry key and assigns to value of parent Property</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0">
				<xs:element ref="DirectorySearch"/>
				<xs:element ref="DirectorySearchRef"/>
				<xs:element ref="FileSearch"/>
				<xs:element ref="FileSearchRef"/>
			</xs:choice>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="File" use="required" type="xs:string"/>
			<xs:attribute name="Section" use="required" type="xs:string"/>
			<xs:attribute name="Key" use="required" type="xs:string"/>
			<xs:attribute name="Field" type="xs:integer"/>
			<xs:attribute name="Type">
				<xs:annotation><xs:documentation>Must be file if last child is FileSearch element and must be directory if last child is DirectorySearch element</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="directory"/>
						<xs:enumeration value="file"/>
						<xs:enumeration value="registry"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="RegistrySearch">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="ComponentSearch"/>
				<dx:seeAlso ref="IniFileSearch"/>
			</xs:appinfo>
			<xs:documentation>Searches for file, directory or registry key and assigns to value of parent Property</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0">
				<xs:element ref="DirectorySearch"/>
				<xs:element ref="DirectorySearchRef"/>
				<xs:element ref="FileSearch"/>
				<xs:element ref="FileSearchRef"/>
			</xs:choice>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Root" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="HKCR"/>
						<xs:enumeration value="HKCU"/>
						<xs:enumeration value="HKLM"/>
						<xs:enumeration value="HKU"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Key" use="required" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Name" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Type">
				<xs:annotation><xs:documentation>must be file if last child is FileSearch element and must be directory if last child is DirectorySearch element</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="directory"/>
						<xs:enumeration value="file"/>
						<xs:enumeration value="registry"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Win64" type="YesNoType">
				<xs:annotation><xs:documentation>Instructs the search to look in the 64-bit registry when the value is 'yes'.  Default is 'no' and search looks in the 32-bit registry.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="RegistrySearchRef">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="RegistrySearch"/>
			</xs:appinfo>
			<xs:documentation>References an existing RegistrySearch element.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string">
				<xs:annotation><xs:documentation>Specify the Id to the RegistrySearch to reference.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ComplianceDrive">
		<xs:annotation><xs:documentation>Sets the parent of a nested DirectorySearch element to CCP_DRIVE.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="DirectorySearch" minOccurs="1"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="ComplianceCheck">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="Property"/>
			</xs:appinfo>
			<xs:documentation>Adds a row to the CCPSearch table.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ComplianceDrive" minOccurs="0">
					<xs:annotation><xs:documentation>Starts searches from the CCP_DRIVE.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ComponentSearch" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="RegistrySearch" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="IniFileSearch" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="DirectorySearch" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="FileSearch" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="Property">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="PropertyRef"/>
			</xs:appinfo>
			<xs:documentation>Property value for a Product or Module.</xs:documentation>
		</xs:annotation>
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:annotation><xs:documentation>If Property is determined by an AppSearch</xs:documentation></xs:annotation>
				<xs:element ref="ComplianceDrive" minOccurs="0">
					<xs:annotation><xs:documentation>Starts searches from the CCP_DRIVE.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ComponentSearch" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="RegistrySearch" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="RegistrySearchRef" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="IniFileSearch" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="DirectorySearch" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="DirectorySearchRef" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="FileSearch" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Value" type="xs:string">
				<xs:annotation><xs:documentation>Sets a default value for the property.  The value will be overwritten if the Property is used for a search.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ComplianceCheck" type="YesNoType">
				<xs:annotation><xs:documentation>Adds a row to the CCPSearch table.  This attribute is only valid when this Property contains a search element.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Admin" type="YesNoType"/>
			<xs:attribute name="Secure" type="YesNoType"/>
			<xs:attribute name="Hidden" type="YesNoType"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="PropertyRef">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="Property"/>
			</xs:appinfo>
			<xs:documentation>Reference to Property value</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="Shortcut">
		<xs:annotation><xs:documentation>Shortcut, default target is parent File, CreateFolder, or Component's Directory</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Directory" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Directory Id where shortcut is to be created</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" type="ShortFileNameType" use="required">
			</xs:attribute>
			<xs:attribute name="LongName" type="LongFileNameType">
				<xs:annotation><xs:documentation>Required if preferred name not 8.3 format</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Target" type="xs:string">
				<xs:annotation><xs:documentation>Default value taken from parent</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string"/>
			<xs:attribute name="Arguments" type="xs:string"/>
			<xs:attribute name="Hotkey" type="xs:integer"/>
			<xs:attribute name="Icon" type="xs:string">
				<xs:annotation><xs:documentation>Reference to Icon element</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="IconIndex" type="xs:integer"/>
			<xs:attribute name="Show">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="normal"/>
						<xs:enumeration value="minimized"/>
						<xs:enumeration value="maximized"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="WorkingDirectory" type="xs:string"/>
			<xs:attribute name="Advertise" type="YesNoType"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="Permission">
		<xs:annotation><xs:documentation>
			Sets ACLs on File, Registry, or CreateFolder.  When under a Registry element, this cannot be used
			if the Action attribute's value is remove or removeKeyOnInstall.
		</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:annotation><xs:documentation>No Id attribute, table and key taken from parent element</xs:documentation></xs:annotation>
			<xs:attribute name="Domain" type="xs:string">
			</xs:attribute>
			<xs:attribute name="User" use="required" type="xs:string">
			</xs:attribute>
			<!-- Common ACLs -->
			<xs:attribute name="Read" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="Delete" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="ReadPermission" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="ChangePermission" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="TakeOwnership" type="YesNoType">
			</xs:attribute>
			<!-- Folder and File ACLs -->
			<xs:attribute name="ReadAttributes" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="WriteAttributes" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="ReadExtendedAttributes" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="WriteExtendedAttributes" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="Synchronize" type="YesNoType">
			</xs:attribute>
			<!-- Folder only ACLs -->
			<xs:attribute name="CreateFile" type="YesNoType">
				<xs:annotation><xs:documentation>For a directory, the right to create a file in the directory.  Only valid under a 'CreateFolder' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="CreateChild" type="YesNoType">
				<xs:annotation><xs:documentation>For a directory, the right to create a subdirectory.  Only valid under a 'CreateFolder' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DeleteChild" type="YesNoType">
				<xs:annotation><xs:documentation>For a directory, the right to delete a directory and all the files it contains, including read-only files.  Only valid under a 'CreateFolder' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Traverse" type="YesNoType">
				<xs:annotation><xs:documentation>For a directory, the right to traverse the directory.  By default, users are assigned the BYPASS_TRAVERSE_CHECKING privilege, which ignores the FILE_TRAVERSE access right.  Only valid under a 'CreateFolder' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<!-- File only ACLs -->
			<xs:attribute name="Append" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="Execute" type="YesNoType">
			</xs:attribute>
			<!-- File and Registry ACLs -->
			<xs:attribute name="Write" type="YesNoType">
			</xs:attribute>
			<!-- Registry only ACLs -->
			<xs:attribute name="CreateSubkeys" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="EnumerateSubkeys" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="Notify" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="CreateLink" type="YesNoType">
			</xs:attribute>
			<!-- Generic ACLs, mapped by system to appropriate permissions -->
			<xs:attribute name="GenericAll" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="GenericExecute" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="GenericWrite" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="GenericRead" type="YesNoType">
				<xs:annotation><xs:documentation>specifying this will fail to grant read access</xs:documentation></xs:annotation>
			</xs:attribute>
			<!-- Service only ACLs -->
			<xs:attribute name="ServiceQueryConfig" type="YesNoType">
				<xs:annotation><xs:documentation>Required to call the QueryServiceConfig and QueryServiceConfig2 functions to query the service configuration.  Only valid under a 'ServiceInstall' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ServiceChangeConfig" type="YesNoType">
				<xs:annotation><xs:documentation>Required to call the ChangeServiceConfig or ChangeServiceConfig2 function to change the service configuration.  Only valid under a 'ServiceInstall' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ServiceQueryStatus" type="YesNoType">
				<xs:annotation><xs:documentation>Required to call the QueryServiceStatus function to ask the service control manager about the status of the service.  Only valid under a 'ServiceInstall' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ServiceEnumerateDependents" type="YesNoType">
				<xs:annotation><xs:documentation>Required to call the EnumDependentServices function to enumerate all the services dependent on the service.  Only valid under a 'ServiceInstall' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ServiceStart" type="YesNoType">
				<xs:annotation><xs:documentation>Required to call the StartService function to start the service.  Only valid under a 'ServiceInstall' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ServiceStop" type="YesNoType">
				<xs:annotation><xs:documentation>Required to call the ControlService function to stop the service.  Only valid under a 'ServiceInstall' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ServicePauseContinue" type="YesNoType">
				<xs:annotation><xs:documentation>Required to call the ControlService function to pause or continue the service.  Only valid under a 'ServiceInstall' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ServiceInterrogate" type="YesNoType">
				<xs:annotation><xs:documentation>Required to call the ControlService function to ask the service to report its status immediately.  Only valid under a 'ServiceInstall' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ServiceUserDefinedControl" type="YesNoType">
				<xs:annotation><xs:documentation>Required to call the ControlService function to specify a user-defined control code.  Only valid under a 'ServiceInstall' parent.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="CopyFile">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="RemoveFile" />
			</xs:appinfo>
			<xs:documentation>
				Copy or move an existing file on the target machine, or copy a file that is being installed, to another destination.  When
				this element is nested under a File element, the parent file will be installed, then copied to the specified destination
				if the parent component of the file is selected for installation or removal.  When this element is nested under
				a Component element and no FileId attribute is specified, the file to copy or move must already be on the target machine.
				When this element is nested under a Component element and the FileId attribute is specified, the specified file is installed,
				then copied to the specified destination if the parent component is selected for installation or removal (use
				this option to control the copy of a file in a different component by the parent component's installation state).  If the 
				specified destination directory is the same as the directory containing the original file and the name for the proposed source
				file is the same as the original, then no action takes place.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Primary key used to identify this particular entry.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="FileId" type="xs:string">
				<xs:annotation><xs:documentation>
					This attribute cannot be specified if the element is nested under a File element.  Set this attribute's value to the identifier
					of a file from a different component to copy it based on the install state of the parent component.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SourceFolder" type="xs:string">
				<xs:annotation><xs:documentation>
					This attribute cannot be specified if the element is nested under a File element or the FileId attribute is specified.  This
					attribute is deprecated; use SourceDirectory or SourceProperty instead.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SourceDirectory" type="xs:string">
				<xs:annotation><xs:documentation>
					This attribute cannot be specified if the element is nested under a File element or the FileId attribute is specified.  Set
					this value to the source directory from which to copy or move an existing file on the target machine.  This Directory must
					exist in the installer database at creation time.  This attribute cannot be specified in conjunction with SourceProperty.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SourceProperty" type="xs:string">
				<xs:annotation><xs:documentation>
					This attribute cannot be specified if the element is nested under a File element or the FileId attribute is specified.  Set
					this value to a property that will have a value that resolves to the full path of the source directory (or full path
					including file name if SourceName is not specified).  The property does not have to exist in the installer database at
					creation time; it could be created at installation time by a custom action, on the command line, etc.  This attribute
					cannot be specified in conjunction with SourceDirectory.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SourceName" type="xs:string"><!-- TODO: Change to WildCardLongFileNameType -->
				<xs:annotation><xs:documentation>
					This attribute cannot be specified if the element is nested under a File element or the FileId attribute is specified.  Set
					this value to the localizable name of the file(s) to be copied or moved.  All of the files that
					match the wild card will be removed from the specified directory.  The value is a filename that may also
					contain the wild card characters "?" for any single character or "*" for zero or more occurrences of any character.  If this
					attribute is not specified (and this element is not nested under a File element or specify a FileId attribute) then the
					SourceProperty attribute should be set to the name of a property that will resolve to the full path of the source filename.
					If the value of this attribute contains a "*" wildcard and the DestinationName attribute is specified, all moved or copied
					files retain the file names from their sources.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DestinationFolder" type="xs:string">
				<xs:annotation><xs:documentation>
					This attribute is deprecated; use DestinationDirectory or DestinationProperty instead.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DestinationDirectory" type="xs:string">
				<xs:annotation><xs:documentation>
					Set this value to the destination directory where an existing file on the target machine should be moved or copied to.  This
					Directory must exist in the installer database at creation time.  This attribute cannot be specified in conjunction with
					DestinationProperty.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DestinationProperty" type="xs:string">
				<xs:annotation><xs:documentation>
					Set this value to a property that will have a value that resolves to the full path of the destination directory.  The property
					does not have to exist in the installer database at creation time; it could be created at installation time by a custom
					action, on the command line, etc.  This attribute cannot be specified in conjunction with DestinationDirectory.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DestinationName" type="xs:string"><!-- TODO: Change to ShortFileNameType -->
				<xs:annotation><xs:documentation>
					Set this value to the localizable name to be given to the original file after it is moved or copied.  If this attribute is not
					specified, then the destination file is given the same name as the source file.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DestinationLongName" type="xs:string"><!-- TODO: Change to LongFileNameType -->
				<xs:annotation><xs:documentation>
					If the destination name of the file needs to be longer than 8.3 format, then this attribute should be specified
					with the long file name (in addition to the Name attribute which is always required for target systems that might
					not support long file names).
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Delete" type="YesNoType">
				<xs:annotation><xs:documentation>
					This attribute cannot be specified if the element is nested under a File element or the FileId attribute is specified.  In other
					cases, if the attribute is not specified, the default value is "no" and the file is copied, not moved.  Set the value to "yes"
					in order to move the file (thus deleting the source file) instead of copying it.
				</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Patch">
		<xs:annotation>
			<xs:documentation>Patch information for parent File element</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Sequence" type="xs:integer">
				<xs:annotation><xs:documentation>may be defaulted if not in cabinet if build tools supply sequence</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="PatchSize" type="xs:integer">
				<xs:annotation><xs:documentation>may be defaulted if build tools supply actual size</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Header" use="required" type="xs:string">
				<xs:annotation><xs:documentation>stream in Binary table</xs:documentation></xs:annotation>
			</xs:attribute>
			<!-- 'Attributes' column integer value generated from XML attributes below -->
			<xs:attribute name="Vital" type="YesNoType">
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="File">
		<xs:annotation><xs:documentation>File specification for File table, must be child node of Component.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="AssemblyName"/>
				<xs:element ref="Permission"/>
				<xs:element ref="CopyFile">
					<xs:annotation><xs:documentation>to DuplicateFile table</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="Shortcut">
					<xs:annotation><xs:documentation>Target is preset to this file</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ODBCDriver"/>
				<xs:element ref="ODBCTranslator"/>
				<xs:element ref="Class"/>
				<xs:element ref="AppId"/>
				<xs:element ref="TypeLib"/>
				<xs:element ref="Patch">
					<xs:annotation><xs:documentation>to Patch table</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="PerfCounter"/>
			</xs:choice>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="CompanionFile" type="xs:string">
				<xs:annotation>
					<xs:documentation>Set this attribute to make this file a companion child of another file.  The installation state of a companion file depends not on its own file versioning information, but on the versioning of its companion parent.  A file that is the key path for its component can not be a companion file (that means this attribute cannot be set if KeyPath="yes" for this file).  The Version attribute cannot be set along with this attribute since companion files are not installed based on their own version.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" type="ShortFileNameType" use="required">
				<xs:annotation>
					<xs:documentation>File name of the file in 8.3 format, required for backwards compatibility.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="LongName" type="LongFileNameType">
				<xs:annotation><xs:documentation>Long file name; set this attribute if preferred name is not in 8.3 format.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="KeyPath" type="YesNoType">
				<xs:annotation><xs:documentation>Set yes to force this File to be key path for parent Component.</xs:documentation></xs:annotation>
			</xs:attribute>
			<!-- 'Attributes' column integer value generated from XML attributes below -->
			<xs:attribute name="ReadOnly" type="YesNoType">
				<xs:annotation>
					<xs:documentation>Set to yes in order to have the file's read-only attribute set when it is installed on the target machine.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Hidden" type="YesNoType">
				<xs:annotation>
					<xs:documentation>Set to yes in order to have the file's hidden attribute set when it is installed on the target machine.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="System" type="YesNoType">
				<xs:annotation>
					<xs:documentation>Set to yes in order to have the file's system attribute set when it is installed on the target machine.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Vital" type="YesNoType">
				<xs:annotation>
					<xs:documentation>If a file is vital, then installation cannot proceed unless the file is successfully installed.  The user will have no option to ignore an error installing this file.  If an error occurs, they can merely retry to install the file or abort the installation.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Checksum" type="YesNoType">
				<xs:annotation>
					<xs:documentation>This attribute should be set to "yes" for every executable file in the installation that has a valid checksum stored in the Portable Executable (PE) file header.  Only those files that have this attribute set will be verified for valid checksum during a reinstall.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="PatchAdded" type="YesNoType">
				<xs:annotation>
					<xs:documentation>This attribute must only be set by a patch and if the file is being added by the patch.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Compressed" type="YesNoDefaultType">
				<xs:annotation>
					<xs:documentation>Sets the file's source type compression.  A setting of "yes" or "no" will override the setting in the Word Count Summary Property.</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="BindPath" type="xs:string">
				<xs:annotation><xs:documentation>generates BindImage table row, value my be empty string</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SelfRegCost" type="xs:integer">
				<xs:annotation><xs:documentation>generates SelfReg table row</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="TrueType" type="YesNoType">
				<xs:annotation><xs:documentation>generates entries in Font table with no FontTitle</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="FontTitle" type="xs:string">
				<xs:annotation><xs:documentation>generates entries in Font table with the FontTitle</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DefaultLanguage" type="xs:string">
				<xs:annotation><xs:documentation>This is the default language of this file.  The linker will replace this value from the value in the file if the suppress files option is not used.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DefaultSize" type="xs:integer">
				<xs:annotation><xs:documentation>This is the default size of this file.  The linker will replace this value from the value in the file if the suppress files option is not used.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DefaultVersion" type="xs:string">
				<xs:annotation><xs:documentation>This is the default version of this file.  The linker will replace this value from the value in the file if the suppress files option is not used.</xs:documentation></xs:annotation>
			</xs:attribute>
			<!-- assembly information -->
			<xs:attribute name="Assembly">
				<xs:annotation><xs:documentation>Specifies if this File is a Win32 Assembly or .NET Assembly; default is neither.  The File must also be the KeyPath of the Component.</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="no"/>
						<xs:enumeration value="win32"/>
						<xs:enumeration value=".net"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="AssemblyManifest" type="xs:string">
				<xs:annotation><xs:documentation>Specifies the File that contains the manifest for this Assembly.  The File must also be the KeyPath of the Component.  The Value of this attribute should not be the KeyPath of any Component.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="AssemblyApplication" type="xs:string">
				<xs:annotation><xs:documentation>Specifies the File where this Assembly will be privatized.  If this attribute is absent, the Assembly will be installed to the Global Assembly Cache.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ProcessorArchitecture">
				<xs:annotation><xs:documentation>Specifies the architecture for this assembly. This attribute should only be used on .NET Assemblies for the CLR 2.0.</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="neutral"/>
						<xs:enumeration value="msil"/>
						<xs:enumeration value="x86"/>
						<xs:enumeration value="x64"/>
						<xs:enumeration value="ia64"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="AssemblyRegisterComInterop" type="YesNoType">
				<xs:annotation><xs:documentation>Set to "yes" to generate entries in the Registry table to register this .NET assembly for COM interop.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DiskId" type="xs:string">
				<xs:annotation><xs:documentation>Specifies the Media this File should be sourced on.  This attribute must be set on this File element or its parent Component.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="src" type="xs:string">
				<xs:annotation><xs:documentation>Specifies the path to the File in the build process.  This attribute must be set if no source information can be gathered from parent directories.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="FileShare">
		<xs:annotation>
			<xs:documentation>Creates a file share out of the component's directory.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Permission" minOccurs="1" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>ACL permission</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Name" type="xs:string" use="required"/>
			<xs:attribute name="Description" type="xs:string"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="RegistryValue">
		<xs:annotation>
			<xs:documentation>
				Use several of these elements to specify each registry value in a multiString registry value.  This element
				cannot be used if the Value attribute is specified unless the Type attribute is set to 'multiString'.  The
				values should go in the text area of the RegistryValue element.
			</xs:documentation>
		</xs:annotation>
	</xs:element>

	<xs:element name="Registry">
		<xs:annotation>
			<xs:documentation>
				This element allows you to add or remove registry keys (depending upon the value of the action attribute).  Please
				note that for removal, there are 4 options: you can remove a particular registry name, an entire registry key when
				the parent component is installed, an entire registry key when the parent component is uninstalled, or create a key
				when the parent component is installed, then remove it when the parent component is uninstalled.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="Permission"/>
				<xs:element ref="RegistryValue"/>
			</xs:choice>
			<xs:attribute name="Id" type="xs:string">
				<xs:annotation><xs:documentation>
					Primary key used to identify this particular entry.  If this attribute is not specified, an identifier will be
					generated by hashing the parent Component identifier, Root, Key, and Name.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Action">
				<xs:annotation><xs:documentation>
					This is the action that will be taken for this registry key.  Value of 'append' will append the specified value(s) to
					a multiString registry key.  Value of 'createKey' will create the key, if absent, when the parent component is installed.
					Value of 'createKeyAndRemoveKeyOnUninstall' will create the key, if absent, when the parent component is installed then
					remove the key with all its values and subkeys when the parent component is uninstalled.  Value of 'prepend' will prepend
					the specified value(s) to a multiString registry key.  Value
					of 'remove' will remove a registry name when the parent component in installed.  Value of 'removeKey' is deprecated; please
					use 'removeKeyOnInstall' to match the previous behavior.  Value of 'removeKeyOnInstall' will remove a key with all its
					values and subkeys when the parent component is installed.  Value of 'removeKeyOnUninstall' will remove a key with all its
					values and subkeys when the parent component is uninstalled.  Value of 'write' will write a registry key.
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="append"/>
						<xs:enumeration value="createKey"/>
						<xs:enumeration value="createKeyAndRemoveKeyOnUninstall"/>
						<xs:enumeration value="prepend"/>
						<xs:enumeration value="remove"/>
						<xs:enumeration value="removeKey"/><!-- this is deprecated, use removeKeyOnUninstall instead -->
						<xs:enumeration value="removeKeyOnInstall"/>
						<xs:enumeration value="removeKeyOnUninstall"/>
						<xs:enumeration value="write"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Key" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The localizable key for the registry value.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="KeyPath" type="YesNoType">
				<xs:annotation><xs:documentation>
					Set this attribute to 'yes' to make this registry key the KeyPath of the parent component.  Only one resource (registry,
					file, etc) can be the KeyPath of a component.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" type="xs:string">
				<xs:annotation><xs:documentation>
					The localizable registry value name.  The Windows Installer allows several special values to be set for this
					attribute.  You should not use them in WiX.  Instead use appropriate values in the Action attribute to get
					the desired behavior.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Root" use="required">
				<xs:annotation><xs:documentation>
					The predefined root key for the registry value.  If the attribute's value is 'HKMU', a per-user installation
					will write the value under HKCU, a per-machine installation will write the value under HKLM.  Note that it is
					recommended that registry entries written to the HKCU hive set the KeyPath attribute to 'yes'. This ensures
					that the installer writes the necessary registry entries when there are multiple users on the same computer.
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="HKMU"/>
						<xs:enumeration value="HKCR"/>
						<xs:enumeration value="HKCU"/>
						<xs:enumeration value="HKLM"/>
						<xs:enumeration value="HKU"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Type">
				<xs:annotation><xs:documentation>
					Set this attribute to the type of the desired registry key.  This attribute must be specified whenever the Value
					attribute or a child RegistryValue element is specified.  Please note that setting the attribute's value to
					'multiString' will only result in a multiString value if there is more than one registry value or the Action
					attribute's value is 'append' or 'prepend'.  Otherwise a string registry value will be created.  This attribute
					should only be set when the value of the Action attribute does not include the word 'remove'.
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="string"/>
						<xs:enumeration value="integer"/>
						<xs:enumeration value="binary"/>
						<xs:enumeration value="expandable"/>
						<xs:enumeration value="multiString"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Value" type="xs:string">
				<xs:annotation><xs:documentation>
					Set this attribute to the localizable registry value.  This value is formatted.  The Windows Installer allows
					several special values to be set for this attribute.  You should not use them in WiX.  Instead use appropriate
					values in the Type attribute to get the desired behavior.  This attribute cannot be specified if the Action
					attribute's value contains the word 'remove'.
				</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="RemoveFile">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="CopyFile" />
			</xs:appinfo>
			<xs:documentation>
				Remove a file(s) if the parent component is selected for installation or removal.  Multiple files can be removed
				by specifying a wildcard for the value of the Name attribute.  By default, the source
				directory of the file is the directory of the parent component.  This can be overridden by specifying the
				Directory attribute with a value corresponding to the Id of the source directory, or by specifying the Property
				attribute with a value corresponding to a property that will have a value that resolves to the full path
				to the source directory.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Primary key used to identify this particular entry.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Directory" type="xs:string">
				<xs:annotation><xs:documentation>
					Overrides the directory of the parent component with a specific Directory.  This Directory must exist in the
					installer database at creation time.  This attribute cannot be specified in conjunction with the Property attribute.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Property" type="xs:string">
				<xs:annotation><xs:documentation>
					Overrides the directory of the parent component with the value of the specified property.  The property
					should have a value that resolves to the full path of the source directory.  The property does not have
					to exist in the installer database at creation time; it could be created at installation time by a custom
					action, on the command line, etc.  This attribute cannot be specified in conjunction with the Directory attribute.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" type="xs:string"><!-- TODO: Change to WildCardShortFileNameType -->
				<xs:annotation><xs:documentation>
					This value should be set to the localizable name of the file(s) to be removed.  All of the files that
					match the wild card will be removed from the specified directory.  The value is a filename that may also
					contain the wild card characters "?" for any single character or "*" for zero or more occurrences of any character.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="LongName" type="xs:string"><!-- TODO: Change to WildCardLongFileNameType -->
				<xs:annotation><xs:documentation>
					If the name of the file(s) to be removed need to be longer than 8.3 format, then this attribute should be specified
					with the long file name (in addition to the Name attribute which is always required for target systems that might
					not support long file names).  All of the files that
					match the wild card will be removed from the specified directory.  The value is a filename that may also
					contain the wild card characters "?" for any single character or "*" for zero or more occurrences of any character.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="On" use="required">
				<xs:annotation><xs:documentation>
					This value determines the time at which the file(s) may be removed.  Value of "install" will remove only when the
					parent component is being installed (msiInstallStateLocal or msiInstallStateSource).  Value of "uninstall" will remove
					only when the parent component is being removed (msiInstallStateAbsent).  Value of "both" will remove in either of
					the above cases.
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="install"/>
						<xs:enumeration value="uninstall"/>
						<xs:enumeration value="both"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="RemoveFolder">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="CreateFolder" />
			</xs:appinfo>
			<xs:documentation>
				Remove an empty folder if the parent component is selected for installation or removal.  By default, the folder
				is the directory of the parent component.  This can be overridden by specifying the Directory attribute
				with a value corresponding to the Id of the directory, or by specifying the Property attribute with a value
				corresponding to a property that will have a value that resolves to the full path of the folder.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Primary key used to identify this particular entry.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Directory" type="xs:string">
				<xs:annotation><xs:documentation>
					Overrides the directory of the parent component with a specific Directory.  This Directory must exist in the
					installer database at creation time.  This attribute cannot be specified in conjunction with the Property attribute.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Property" type="xs:string">
				<xs:annotation><xs:documentation>
					Overrides the directory of the parent component with the value of the specified property.  The property
					should have a value that resolves to the full path of the source directory.  The property does not have
					to exist in the installer database at creation time; it could be created at installation time by a custom
					action, on the command line, etc.  This attribute cannot be specified in conjunction with the Directory attribute.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="On" use="required">
				<xs:annotation><xs:documentation>
					This value determines the time at which the folder may be removed.  Value of "install" will remove only when the
					parent component is being installed (msiInstallStateLocal or msiInstallStateSource).  Value of "uninstall" will remove
					only when the parent component is being removed (msiInstallStateAbsent).  Value of "both" will remove in either of
					the above cases.
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="install"/>
						<xs:enumeration value="uninstall"/>
						<xs:enumeration value="both"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="CreateFolder">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="RemoveFolder" />
			</xs:appinfo>
			<xs:documentation>Create folder as part of parent Component.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="Shortcut" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Non-advertised shortcut to this folder, Shortcut Target is preset to the folder</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="Permission" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>ACL permission</xs:documentation></xs:annotation>
				</xs:element>
			</xs:choice>
			<xs:attribute name="Directory" type="xs:string">
				<xs:annotation><xs:documentation>Identifier of Directory to create.  Defaults to Directory of parent Component.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Category">
		<xs:annotation><xs:documentation>Qualified published component for parent Component.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence minOccurs="0" maxOccurs="unbounded">
				<xs:element name="AppData" type="xs:string">
					<xs:annotation><xs:documentation>Optional way for defining AppData, generally used for complex CDATA.</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Id" use="required" type="uuid">
				<xs:annotation><xs:documentation>A string GUID that represents the category of components being grouped together.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Qualifier" use="required" type="xs:string">
				<xs:annotation><xs:documentation>A text string that qualifies the value in the Id attribute.  A qualifier is used to distinguish multiple forms of the same Component, such as a Component that is implemented in multiple languages.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="AppData" type="xs:string">
				<xs:annotation><xs:documentation>An optional localizable text describing the category.  The string is commonly parsed by the application and can be displayed to the user.  It should describe the category.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Feature" type="xs:string">
				<xs:annotation><xs:documentation>Feature that controls the advertisement of the category.  Defaults to the primary Feature for the parent Component .</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="MIME">
		<xs:annotation><xs:documentation>MIME content-type for an Extension</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="ContentType" type="xs:string" use="required">
				<xs:annotation><xs:documentation>This is the identifier for the MIME content.  It is commonly written in the form of type/format.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Class" type="uuid"/>
			<xs:attribute name="Default" type="YesNoType">
				<xs:annotation><xs:documentation>If 'yes', become the content type for the parent Extension.  The default value is 'no'.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Verb">
		<xs:annotation><xs:documentation>Verb definition for an Extension</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Command" type="xs:string"/>
			<xs:attribute name="Argument" type="xs:string"/>
			<xs:attribute name="Sequence" type="xs:integer">
				<xs:annotation><xs:documentation>Used only for advertised Verbs</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Target" type="xs:string"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="Extension">
		<xs:annotation>
			<xs:documentation>Extension for Component</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:annotation><xs:documentation>MIME and Verbs can be associated with Extensions</xs:documentation></xs:annotation>
				<xs:element ref="MIME"/>
				<xs:element ref="Verb"/>
			</xs:choice>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>This is simply the file extension, like "doc" or "xml".  Do not include the preceding period.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ContentType" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Advertise" type="YesNoType"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="TypeLib">
		<xs:annotation>
			<xs:documentation>
				Register a type library (TypeLib).  Please note that in order to properly use this
				non-advertised, you will need use this element with Advertise='no' and also author the
				appropriate child Interface elements by extracting them from the type library itself.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="AppId"/>
				<xs:element ref="Class"/>
				<xs:element ref="Interface"/>
			</xs:choice>
			<xs:attribute name="Id" type="uuid" use="required">
				<xs:annotation><xs:documentation>The GUID that identifes the type library.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Advertise" type="YesNoType">
				<xs:annotation><xs:documentation>
					Value of 'yes' will create a row in the TypeLib table.
					Value of 'no' will create rows in the Registry table.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Control" type="YesNoType">
				<xs:annotation><xs:documentation>
					Value of 'yes' means the type library describes controls, and should not be displayed in type browsers intended for nonvisual objects.
					This attribute can only be set if Advertise='no'.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Cost" type="xs:int">
				<xs:annotation><xs:documentation>
					The cost associated with the registration of the type library in bytes.  This attribute cannot be set if Advertise='no'.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation><xs:documentation>The localizable description of the type library.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="HasDiskImage" type="YesNoType">
				<xs:annotation><xs:documentation>
					Value of 'yes' means the type library exists in a persisted form on disk.  This attribute can only be set if Advertise='no'.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="HelpDirectory" type="xs:string">
				<xs:annotation><xs:documentation>The identifier of the Directory element for the help directory.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Hidden" type="YesNoType">
				<xs:annotation><xs:documentation>
					Value of 'yes' means the type library should not be displayed to users, although its use is not restricted.
					Should be used by controls.  Hosts should create a new type library that wraps the control with extended properties.
					This attribute can only be set if Advertise='no'.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Language" use="required" type="xs:integer">
				<xs:annotation><xs:documentation>The language of the type library.  This must be a non-negative integer.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="MajorVersion" type="xs:string">
				<xs:annotation><xs:documentation>The major version of the type library.  The value should be an integer from 0 - 255.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="MinorVersion" type="xs:string">
				<xs:annotation><xs:documentation>The minor version of the type library.  The value should be an integer from 0 - 255.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Restricted" type="YesNoType">
				<xs:annotation><xs:documentation>
					Value of 'yes' means the type library is restricted, and should not be displayed to users.  This attribute can only be set if Advertise='no'.
				</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ProgId">
		<xs:annotation>
			<xs:documentation>ProgId registration for parent Component.  If ProgId has an associated Class, it must be a child of that element</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ProgId" minOccurs="0">
					<xs:annotation><xs:documentation>Version-independent ProgId must be child element of actual ProgId</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>extensions that refer to this ProgId</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Description" type="xs:string"/>
			<xs:attribute name="Icon" type="xs:string">
				<xs:annotation><xs:documentation>reference to Icon element</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="IconIndex" type="xs:integer"/>
			<xs:attribute name="Advertise" type="YesNoType"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="AppId">
		<xs:annotation>
			<xs:documentation>
				Application ID containing DCOM information for the associated application GUID.  
				If this element is nested under a Fragment, Module, or Product element, it must be
				advertised.
			</xs:documentation>
			<xs:appinfo>
				<dx:seeAlso ref="AppId"/>
				<dx:remarks>
					When being used in unadvertised mode, the attributes in the AppId element correspond to registry keys
					as follows (values that can be specified in authoring are in bold):
					<dl>
						<dt>Id</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\AppID\{<b>Id</b>}]<br />
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\AppID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}]<br />
								</dd>
							</dl>
						</dd>
						<dt>ActivateAtStorage</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\AppID\{<b>Id</b>}]<br />
									ActivateAtStorage="<b>ActivateAtStorage</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\AppID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}]<br />
									ActivateAtStorage="<b>Y</b>"
								</dd>
							</dl>
						</dd>
						<dt>Description</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\AppID\{<b>Id</b>}]<br />
									@="<b>Description</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\AppID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}]<br />
									@="<b>My AppId Description</b>"
								</dd>
							</dl>
						</dd>
						<dt>DllSurrogate</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\AppID\{<b>Id</b>}]<br />
									DllSurrogate="<b>DllSurrogate</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\AppID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}]<br />
									DllSurrogate="<b>C:\surrogate.exe</b>"
								</dd>
							</dl>
						</dd>
						<dt>LocalService</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\AppID\{<b>Id</b>}]<br />
									LocalService="<b>LocalService</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\AppID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}]<br />
									LocalService="<b>MyServiceName</b>"
								</dd>
							</dl>
						</dd>
						<dt>RemoteServerName</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\AppID\{<b>Id</b>}]<br />
									RemoteServerName="<b>RemoteServerName</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\AppID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}]<br />
									RemoteServerName="<b>MyRemoteServer</b>"
								</dd>
							</dl>
						</dd>
						<dt>RunAsInteractiveUser</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\AppID\{<b>Id</b>}]<br />
									RunAs="<b>RunAsInteractiveUser</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\AppID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}]<br />
									RunAs="<b>Interactive User</b>"
								</dd>
							</dl>
						</dd>
						<dt>ServiceParameters</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\AppID\{<b>Id</b>}]<br />
									ServiceParameters="<b>ServiceParameters</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\AppID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}]<br />
									ServiceParameters="<b>-param</b>"
								</dd>
							</dl>
						</dd>
					</dl>
				</dx:remarks>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="Class"/>
			</xs:choice>
			<xs:attribute name="ActivateAtStorage" type="YesNoType">
				<xs:annotation><xs:documentation>
					Set this value to 'yes' to configure the client to activate on the same system as persistent storage.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Advertise" type="YesNoType">
				<xs:annotation><xs:documentation>
					Set this value to 'yes' in order to create a normal AppId table row.  Set this value to 'no' in order to
					generate Registry rows that perform similar registration (without the often problematic Windows Installer
					advertising behavior).
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation><xs:documentation>
					Set this value to the description of the AppId.  It can only be specified when the AppId is not being advertised.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DllSurrogate" type="xs:string">
				<xs:annotation><xs:documentation>
					Set this value to specify that the class is a DLL that is to be activated in a surrogate EXE 
					process, and the surrogate process to be used is the path of a surrogate EXE file specified by the value.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Id" type="uuid" use="required">
				<xs:annotation><xs:documentation>
					Set this value to the AppID GUID that corresponds to the named executable.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="LocalService" type="xs:string">
				<xs:annotation><xs:documentation>
					Set this value to the name of a service to allow the object to be installed as a Win32 service.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="RemoteServerName" type="xs:string">
				<xs:annotation><xs:documentation>
					Set this value to the name of the remote server to configure the client to request the object
					be run at a particular machine whenever an activation function is called for which a COSERVERINFO
					structure is not specified.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="RunAsInteractiveUser" type="YesNoType">
				<xs:annotation><xs:documentation>
					Set this value to 'yes' to configure a class to run under the identity of the user currently
					logged on and connected to the interactive desktop when activated by a remote client without
					being written as a Win32 service.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ServiceParameters" type="xs:string">
				<xs:annotation><xs:documentation>
					Set this value to the parameters to be passed to a LocalService on invocation.
				</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Class">
		<xs:annotation>
			<xs:documentation>COM Class registration for parent Component.</xs:documentation>
			<xs:appinfo>
				<dx:seeAlso ref="AppId"/>
				<dx:remarks>
					When being used in unadvertised mode, the attributes in the Class element correspond to registry keys
					as follows (values that can be specified in authoring are in bold):
					<dl>
						<dt>Id/Context/Server</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\CLSID\{<b>Id</b>}\<b>Context1</b>]<br />
									@="[!<b>Server</b>]"<br />
									[HKCR\CLSID\{<b>Id</b>}\<b>Context2</b>]<br />
									@="[!<b>Server</b>]"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\<b>LocalServer</b>]<br />
									@="[!<b>comserv.dll</b>]"<br />
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\<b>LocalServer32</b>]<br />
									@="[!<b>comserv.dll</b>]"
								</dd>
							</dl>
						</dd>
						<dt>AppId</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\CLSID\{<b>Id</b>}]<br />
									AppId="{<b>AppId</b>}"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}]<br />
									AppId="{<b>00000000-89AB-0000-0123-000000000000</b>}"
								</dd>
							</dl>
						</dd>
						<dt>Argument</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\CLSID\{<b>Id</b>}\<b>Context</b>]<br />
									@="[!<b>Server</b>] <b>Argument</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\<b>LocalServer32</b>]<br />
									@="[!<b>comserv.dll</b>] <b>/arg1 /arg2 /arg3</b>"<br />
								</dd>
							</dl>
						</dd>
						<dt>Description</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\CLSID\{<b>Id</b>}]<br />
									@="<b>Description</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}]<br />
									@="<b>Description of Example COM Component</b>"
								</dd>
							</dl>
						</dd>
						<dt>Handler</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									Value "1" specified:<br />
									[HKCR\CLSID\{<b>Id</b>}\InprocHandler]<br />
									@="ole.dll"<br />
									Value "2" specified:<br />
									[HKCR\CLSID\{<b>Id</b>}\InprocHandler32]<br />
									@="ole32.dll"<br />
									Value "3" specified:<br />
									[HKCR\CLSID\{<b>Id</b>}\InprocHandler]<br />
									@="ole.dll"<br />
									[HKCR\CLSID\{<b>Id</b>}\InprocHandler32]<br />
									@="ole32.dll"<br />
									Other value specified:<br />
									[HKCR\CLSID\{<b>Id</b>}\InprocHandler32]<br />
									@="<b>Handler</b>"
								</dd>
								<dt>Specific Example (for other value)</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\InprocHandler32]<br />
									@="<b>handler.dll</b>"
								</dd>
							</dl>
						</dd>
						<dt>Icon/IconIndex</dt>
						<dd>This is not currently handled properly.</dd>
						<dt>Insertable</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									Value "no" specified:<br />
									[HKCR\CLSID\{<b>Id</b>}\NotInsertable]<br />
									Value "yes" specified:<br />
									[HKCR\CLSID\{<b>Id</b>}\Insertable]
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\Insertable]
								</dd>
							</dl>
						</dd>
						<dt>Programmable</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									Value "yes" specified:<br />
									[HKCR\CLSID\{<b>Id</b>}\Programmable]
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\Programmable]
								</dd>
							</dl>
						</dd>
						<dt>RelativePath</dt>
						<dd>Unsupported.  Please contribute this back to WiX if you know.</dd>
						<dt>SafeForInitializing</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									Value "yes" specified:<br />
									[HKCR\CLSID\{<b>Id</b>}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}]
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}]
								</dd>
							</dl>
						</dd>
						<dt>SafeForScripting</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									Value "yes" specified:<br />
									[HKCR\CLSID\{<b>Id</b>}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}]
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}]
								</dd>
							</dl>
						</dd>
						<dt>ThreadingModel</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\CLSID\{<b>Id</b>}\<b>Context</b>]<br />
									ThreadingModel="<b>ThreadingModel</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\<b>LocalServer32</b>]<br />
									ThreadingModel="<b>Apartment</b>"
								</dd>
							</dl>
						</dd>
						<dt>TypeLibId (from parent TypeLib/@Id)</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\CLSID\{<b>Id</b>}\TypeLib]<br />
									@="{<b>TypeLibId</b>}"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\TypeLib]<br />
									@="{<b>11111111-89AB-1111-0123-111111111111</b>}"
								</dd>
							</dl>
						</dd>
						<dt>Version</dt>
						<dd>
							<dl>
								<dt>In General</dt>
								<dd>
									[HKCR\CLSID\{<b>Id</b>}\Version]<br />
									@="<b>Version</b>"
								</dd>
								<dt>Specific Example</dt>
								<dd>
									[HKCR\CLSID\{<b>01234567-89AB-CDEF-0123-456789ABCDEF</b>}\Version]<br />
									@="<b>1.0.0.0</b>"
								</dd>
							</dl>
						</dd>
					</dl>
				</dx:remarks>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="ProgId">
					<xs:annotation><xs:documentation>A ProgId associated with Class must be a child element of the Class element</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="FileTypeMask"/>
				<xs:element ref="Interface">
					<xs:annotation><xs:documentation>These Interfaces will be registered with the parent Class and TypeLib (if present).</xs:documentation></xs:annotation>
				</xs:element>
			</xs:choice>
			<xs:attribute name="Id" type="uuid" use="required">
				<xs:annotation><xs:documentation>The Class identifier (CLSID) of a COM server.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Context" use="required">
				<xs:annotation><xs:documentation>The server context for this server.</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:list itemType="ClassContextType"/>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation><xs:documentation>Localized description associated with the Class ID and Program ID.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="AppId" type="uuid">
				<xs:annotation><xs:documentation>
					This attribute is only allowed when a Class is advertised.  Using this attribute will reference an Application ID
					containing DCOM information for the associated application GUID.  The value must correspond to an AppId/@Id of an
					AppId element nested under a Fragment, Module, or Product element.  To associate an AppId with a non-advertised
					class, nest the class within a parent AppId element.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Icon" type="xs:string">
				<xs:annotation><xs:documentation>
					The file providing the icon associated with this CLSID.  Reference to an Icon element
					(should match the Id attribute of an Icon element).  This is currently not supported if the
					value of the Advertise attribute is "no".
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="IconIndex" type="xs:integer">
				<xs:annotation><xs:documentation>Icon index into the icon file.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Handler" type="xs:string">
				<xs:annotation><xs:documentation>
					The default inproc handler.  May be optionally provided only for Context = LocalServer or
					LocalServer32.  Value of "1" creates a 16-bit InprocHandler (appearing as the InprocHandler
					value).  Value of "2" creates a 32-bit InprocHandler (appearing as the InprocHandler32 value).
					Value of "3" creates 16-bit as well as 32-bit InprocHandlers.  A non-numeric value is treated
					as a system file that serves as the 32-bit InprocHandler (appearing as the InprocHandler32 value).
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Argument" type="xs:string">
				<xs:annotation><xs:documentation>
					This column is optional only when the Context column is set to "LocalServer"
					or "LocalServer32" server context. The text is registered as the argument against
					the OLE server and is used by OLE for invoking the server.  Note that the resolution
					of properties in the Argument field is limited. A property formatted as [Property] in
					this field can only be resolved if the property already has the intended value when
					the component owning the class is installed.  For example, for the argument "[#MyDoc.doc]"
					to resolve to the correct value, the same process must be installing the file MyDoc.doc and the
					component that owns the class.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="RelativePath" type="YesNoType">
				<xs:annotation><xs:documentation>
					When the value is "yes", the bare file name can be used for COM servers. The installer
					registers the file name only instead of the complete path.  This enables the server in
					the current directory to take precedence and allows multiple copies of the same component.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Advertise" type="YesNoType">
				<xs:annotation><xs:documentation>
					Set this value to "yes" in order to create a normal Class table row.  Set this value to
					"no" in order to generate Registry rows that perform similar registration (without the
					often problematic Windows Installer advertising behavior).
				</xs:documentation></xs:annotation>
			</xs:attribute>

			<!-- Following attributes are not advertised, but add the appropriate rows to the Registry table -->
			<xs:attribute name="ThreadingModel">
				<xs:annotation><xs:documentation>
					May only be specified if the value of the Advertise attribute is "no".
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="apartment"/>
						<xs:enumeration value="free"/>
						<xs:enumeration value="both"/>
						<xs:enumeration value="neutral"/>
						<xs:enumeration value="single"/>
						<xs:enumeration value="rental"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Version" type="xs:string">
				<xs:annotation><xs:documentation>
					May only be specified if the value of the Advertise attribute is "no".
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Insertable" type="YesNoType">
				<xs:annotation><xs:documentation>
					May only be specified if the value of the Advertise attribute is "no".
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Programmable" type="YesNoType">
				<xs:annotation><xs:documentation>
					May only be specified if the value of the Advertise attribute is "no".
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Server" type="xs:string">
				<xs:annotation><xs:documentation>
					May only be specified if the value of the Advertise attribute is "no".  File Id of the
					COM server file.  If this element is nested under a File element, this value defaults to
					the value of the parent File/@Id.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SafeForScripting" type="YesNoType">
				<xs:annotation><xs:documentation>
					May only be specified if the value of the Advertise attribute is "no".
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SafeForInitializing" type="YesNoType">
				<xs:annotation><xs:documentation>
					May only be specified if the value of the Advertise attribute is "no".
				</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Interface">
		<xs:annotation>
			<xs:documentation>COM Interface registration for parent Typelib.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="uuid" use="required">
				<xs:annotation><xs:documentation>GUID identifier for COM Interface.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Name for COM Interface.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ProxyStubClassId" type="uuid">
				<xs:annotation><xs:documentation>GUID CLSID for proxy stub to COM Interface.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ProxyStubClassId32" type="uuid">
				<xs:annotation><xs:documentation>GUID CLSID for 32-bit proxy stub to COM Interface.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="NumMethods" type="xs:integer">
				<xs:annotation><xs:documentation>Number of methods implemented on COM Interface.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Versioned" type="YesNoType">
				<xs:annotation><xs:documentation>Determines whether a Typelib version entry should be created with the other COM Interface registry keys.  Default is 'yes'.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="FileTypeMask">
		<xs:annotation><xs:documentation>FileType data for class Id registration.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Offset" type="xs:integer" use="required"/>
			<xs:attribute name="Mask" type="HexType" use="required"/>
			<xs:attribute name="Value" type="HexType" use="required"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="ServiceDependency">
		<xs:annotation><xs:documentation>Service or group of services that are dependencies for services in ServiceInstall</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Group" type="YesNoType"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="ServiceConfig">
		<xs:annotation>
			<xs:documentation>Service configuration information for failure actions.</xs:documentation>
			<xs:appinfo>
				<dx:remarks>
					<dl>
						<dd>Nesting a ServiceConfig element under a ServiceInstall element will result in the service being installed to be configured.</dd>
						<dd>Nesting a ServiceConfig element under a component element will result in an already installed service to be configured.  If the service does not exist prior to the install of the MSI package, the install will fail.</dd>
					</dl>
				</dx:remarks>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="ServiceName" type="xs:string">
				<xs:annotation><xs:documentation>Required if not under a ServiceInstall element.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="FirstFailureActionType" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="none"/>
						<xs:enumeration value="reboot"/>
						<xs:enumeration value="restart"/>
						<xs:enumeration value="runCommand"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="SecondFailureActionType" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="none"/>
						<xs:enumeration value="reboot"/>
						<xs:enumeration value="restart"/>
						<xs:enumeration value="runCommand"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="ThirdFailureActionType" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="none"/>
						<xs:enumeration value="reboot"/>
						<xs:enumeration value="restart"/>
						<xs:enumeration value="runCommand"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="ResetPeriodInDays" type="xs:integer" />
			<xs:attribute name="RestartServiceDelayInSeconds" type="xs:integer" />
			<xs:attribute name="ProgramCommandLine" type="xs:string" />
			<xs:attribute name="RebootMessage" type="xs:string" />
		</xs:complexType>
	</xs:element>

	<xs:element name="ServiceInstall">
		<xs:annotation><xs:documentation>Adds and removes services for parent Component</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Permission" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Permissions for this service.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ServiceConfig" minOccurs="0" maxOccurs="1">
					<xs:annotation><xs:documentation>Service Config: failure actions for service</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ServiceDependency" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>ordered list of dependencies when installing services</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Name" type="xs:string" use="required"/>
			<xs:attribute name="DisplayName" type="xs:string"/>
			<xs:attribute name="Type" use="required">
				<xs:annotation><xs:documentation>Windows Installer does not currently support kernelDriver or systemDriver</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="ownProcess"/>
						<xs:enumeration value="shareProcess"/>
						<xs:enumeration value="kernelDriver"/>
						<xs:enumeration value="systemDriver"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Interactive" type="YesNoType"/>
			<xs:attribute name="Start" use="required">
				<xs:annotation><xs:documentation>Windows installer (v1.2) does not currently support boot or system</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="auto"/>
						<xs:enumeration value="demand"/>
						<xs:enumeration value="disabled"/>
						<xs:enumeration value="boot"/>
						<xs:enumeration value="system"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="ErrorControl" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="ignore"/>
						<xs:enumeration value="normal"/>
						<xs:enumeration value="critical"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Vital" type="YesNoType"/>
			<xs:attribute name="LocalGroup" type="xs:string"/>
			<xs:attribute name="Account" type="xs:string">
				<xs:annotation><xs:documentation>valid only when ServiceType is ownProcess</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Password" type="xs:string">
				<xs:annotation><xs:documentation>valid only when Account has password</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Arguments" type="xs:string">
				<xs:annotation><xs:documentation>not available for Windows Install v1.0</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string"/>
			<xs:attribute name="EraseDescription" type="YesNoType">
				<xs:annotation><xs:documentation>yes will cause Description attribute to be ignored</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ServiceArgument" type="xs:string">
		<xs:annotation><xs:documentation>Argument used in ServiceControl parent</xs:documentation></xs:annotation>
	</xs:element>

	<xs:element name="ServiceControl">
		<xs:annotation>
			<xs:documentation>Starts, stops, and removes services for parent Component. This element is used to control the state 
						of a service installed by the MSI or MSM file by using the start, stop and remove attributes.
						For example, Start='install' Stop='both' Remove='uninstall' would mean: start the service on install, 
						remove the service when the product is uninstalled, and stop the service both on install and uninstall.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ServiceArgument" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>ordered list of arguments when modifying services</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Name" type="xs:string" use="required"/>
			<xs:attribute name="Start">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="install"/>
						<xs:enumeration value="uninstall"/>
						<xs:enumeration value="both"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Stop">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="install"/>
						<xs:enumeration value="uninstall"/>
						<xs:enumeration value="both"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Remove">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="install"/>
						<xs:enumeration value="uninstall"/>
						<xs:enumeration value="both"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Wait" type="YesNoType"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="Environment">
		<xs:annotation><xs:documentation>Environment variables added or removed for parent Component.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Unique identifier for environment entry.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Name of the environment variable.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Value" type="xs:string">
				<xs:annotation><xs:documentation>Value to set into the environment variable.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Separator" type="xs:string">
				<xs:annotation><xs:documentation>Optional attribute to change the separator used between values.  By default a semi-colon is used.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Action">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="create"/>
						<xs:enumeration value="set"/>
						<xs:enumeration value="remove"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Part">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="all"/>
						<xs:enumeration value="first"/>
						<xs:enumeration value="last"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Permanent" type="YesNoType">
				<xs:annotation><xs:documentation>Specifies that the environment variable should not be removed on uninstall.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="System" type="YesNoType">
				<xs:annotation><xs:documentation>Specifies that the environment variable should be added to the system environment space.  The default
				is 'no' which indicates the environment variable is added to the user environment space.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Condition">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:annotation><xs:documentation>
						Conditions for various things.  The condition is specified in the inner text of the element.  Under a
						Component element, the condition becomes the condition of the component.  Under a Control element, the
						condition becomes a ControlCondition entry.  Under a Feature element, the condition becomes a Condition
						entry.  Under a Fragment or Product element, the condition becomes a LaunchCondition entry.
					</xs:documentation></xs:annotation>
					<xs:attribute name="Action">
						<xs:annotation><xs:documentation>
							Used only under Control elements and is required.  Allows specific actions to be applied to a control based
							on the result of this condition.
						</xs:documentation></xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:NMTOKEN">
								<xs:enumeration value="default"/>
								<xs:enumeration value="enable"/>
								<xs:enumeration value="disable"/>
								<xs:enumeration value="hide"/>
								<xs:enumeration value="show"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="Level" type="xs:string">
						<xs:annotation><xs:documentation>
							Used only under Feature elements and is required.  Allows modifying the level of a Feature based on the
							result of this condition.
						</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="Message" type="xs:string">
						<xs:annotation><xs:documentation>
							Used only under Fragment or Product elements and is required.  Set the value to the text to display when the
							condition fails and the installation must be terminated.
						</xs:documentation></xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="IsolateComponent">
		<xs:annotation><xs:documentation>Shared Component to be privately replicated in folder of parent Component</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Shared" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Shared Component for this application Component</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ReserveCost">
		<xs:annotation><xs:documentation>Disk cost to reserve in a folder for running locally and/or from source</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Directory" type="xs:string">
				<xs:annotation><xs:documentation>Defaults to Directory of parent Component</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="RunLocal" type="xs:integer" use="required">
			</xs:attribute>
			<xs:attribute name="RunFromSource" type="xs:integer" use="required">
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Component">
		<xs:annotation>
			<xs:documentation>Component for parent Directory</xs:documentation>
			<xs:appinfo>
				<dx:seeAlso ref="ComponentRef"/>
				<dx:seeAlso ref="Media"/>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="AppId"/>
				<xs:element ref="Category"/>
				<xs:element ref="Class"/>
				<xs:element ref="Condition"/>
				<xs:element ref="CopyFile"/>
				<xs:element ref="CreateFolder"/>
				<xs:element ref="Environment"/>
				<xs:element ref="Extension"/>
				<xs:element ref="File"/>
				<xs:element ref="IniFile"/>
				<xs:element ref="Interface"/>
				<xs:element ref="IsolateComponent"/>
				<xs:element ref="ODBCDataSource"/>
				<xs:element ref="ODBCDriver"/>
				<xs:element ref="ODBCTranslator"/>
				<xs:element ref="ProgId"/>
				<xs:element ref="Registry"/>
				<xs:element ref="RemoveFile"/>
				<xs:element ref="RemoveFolder"/>
				<xs:element ref="ReserveCost"/>
				<xs:element ref="ServiceControl"/>
				<xs:element ref="ServiceInstall"/>
				<xs:element ref="Shortcut"/>
				<xs:element ref="TypeLib"/>
				<!-- server elements -->
				<xs:element ref="Certificate"/>
				<xs:element ref="FileShare"/>
				<xs:element ref="ServiceConfig"/>
				<xs:element ref="SqlDatabase"/>
				<xs:element ref="SqlScript"/>
				<xs:element ref="SqlString"/>
				<xs:element ref="User"/>
				<xs:element ref="WebAppPool"/>
				<xs:element ref="WebDir"/>
				<xs:element ref="WebFilter"/>
				<xs:element ref="WebProperty"/>
				<xs:element ref="WebServiceExtension"/>
				<xs:element ref="WebSite"/>
				<xs:element ref="WebVirtualDir"/>
				<xs:any namespace="##other" processContents="lax">
					<xs:annotation><xs:documentation>
						Extensibility point in the WiX XML Schema.  Schema extensions can register additional
						elements at this point in the schema.
					</xs:documentation></xs:annotation>
				</xs:any>
			</xs:choice>

			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Component identifier; this is the primary key for identifying components.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ComPlusFlags" type="xs:integer">
				<xs:annotation>
					<xs:documentation>
						Set this attribute to create a ComPlus entry.  The value should be the export flags used
						during the generation of the .msi file.  For more information see the COM+ documentation
						in the Platform SDK.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="DiskId" type="xs:string">
				<xs:annotation>
					<xs:documentation>
						This attribute must be set either on a Component element or all of its children File
						elements.  The value of this attribute should correspond to the Id attribute of a
						Media element authored elsewhere.  By creating this connection between a component (or
						particular files), you set the packaging options to the values specified in the Media
						element (values such as compression level, cab embedding, etc...).
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="DriverForceInstall" type="YesNoType">
				<xs:annotation>
					<xs:documentation>
						Specifies that the DIFxApp CustomActions should force the installation of a new Plug and Play driver 
						on a device, even if the currently installed driver on the device is a better match than the new driver.
						Specifying 'no' is an excellent way to ensure the DIFxApp CustomActions recognize the Component contains
						a driver for installation.  The default is null which means the Component does not install a driver via
						DIFxApp CustomActions. See <a href='http://www.microsoft.com/whdc/driver/install/difxtools.mspx'>http://www.microsoft.com/whdc/driver/install/difxtools.mspx</a>
						for more information.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="DriverPlugAndPlayPrompt" type="YesNoType">
				<xs:annotation>
					<xs:documentation>
						Specifies that the DIFxApp CustomActions should prompt the user to connect the Plug and Play
						device if it is not connected.  The default is 'yes'.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="DriverAddRemovePrograms" type="YesNoType">
				<xs:annotation>
					<xs:documentation>
						Specifies that the DIFxApp CustomActions should add an entry in the Add/Remove Programs Control
						Panel applet.  The default is 'yes'.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="DriverSequence" type="xs:integer">
				<xs:annotation>
					<xs:documentation>
						Specifies an optional installation sequence number. DIFxApp CustomActions install the driver packages in
						an installation package in the order of increasing sequence numbers. The same sequence number can be used
						for more than one driver; however, the order in which packages with the same sequence number are actually
						installed cannot be determined.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Guid" type="uuidorexample">
				<xs:annotation>
					<xs:documentation>
						String GUID (without the '{' and '}' braces) that uniquely identifies a component's language,
						version, and platform.  If this attribute is present, the GUID will become the identifier used
						by the Windows Installer to track this component on the user's machine.  If this value is not
						specified, then the component cannot be removed or repaired by the installer (it is essentially
						a permanent component).  Therefore, a GUID should always be specified for a component which
						contains any resources that may need to be patched in the future.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="KeyPath" type="YesNoType">
				<xs:annotation>
					<xs:documentation>
						If this attribute's value is set to 'yes', then the Directory of this Component is used
						as the KeyPath.  To set a Registry key or File as the KeyPath of a component, set the
						KeyPath attribute to 'yes' on one of those child elements.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Location">
				<xs:annotation>
					<xs:documentation>
						This attribute is ignored when the Component is a child of Feature.  Set the value to 'local' to
						prevent the component from running from the source or the network (this is the default behavior
						if this attribute is not set).  Set the value to 'source' to
						enforce that the component can only be run from the source (it cannot be run from the user's
						computer).  Set the value to 'either' to allow the component to run from source or locally.
					</xs:documentation>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="local"/>
						<xs:enumeration value="source"/>
						<xs:enumeration value="either"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="NeverOverwrite" type="YesNoType">
				<xs:annotation>
					<xs:documentation>
						If this attribute is set to 'yes', the installer does not install or reinstall the
						component if a key path file or a key path registry entry for the component already
						exists.  The application does register itself as a client of the component.  Use this
						flag only for components that are being registered by the Registry table.  Do not use
						this flag for components registered by the AppId, Class, Extension, ProgId, MIME, and
						Verb tables.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Permanent" type="YesNoType">
				<xs:annotation>
					<xs:documentation>
						If this attribute is set to 'yes', the installer does not remove the component during
						an uninstall. The installer registers an extra system client for the component in
						the Windows Installer registry settings (which basically just means that at least one
						product is always referencing this component).  Note that this option differs from the
						behavior of not setting a guid because although the component is permanent, it is still
						patchable (because Windows Installer still tracks it), it's just not uninstallable.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="SharedDllRefCount" type="YesNoType">
				<xs:annotation>
					<xs:documentation>
						If this attribute's value is set to 'yes', the installer increments the reference count
						in the shared DLL registry of the component's key file.  If this bit is not set, the
						installer increments the reference count only if the reference count already exists.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Transitive" type="YesNoType">
				<xs:annotation>
					<xs:documentation>
						If this attribute is set to 'yes', the installer reevaluates the value of the statement
						in the Condition upon a reinstall.  If the value was previously False and has changed to
						True, the installer installs the component.  If the value was previously True and has
						changed to False, the installer removes the component even if the component has other
						products as clients.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="Win64" type="YesNoType">
				<xs:annotation>
					<xs:documentation>
						Set this attribute to 'yes' to mark this as a 64-bit component. This attribute facilitates
						the installation of packages that include both 32-bit and 64-bit components.  If this bit
						is not set, the component is registered as a 32-bit component.  If this is a 64-bit
						component replacing a 32-bit component, set this bit and assign a new GUID in the Guid attribute.
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:anyAttribute namespace="##other" processContents="lax">
				<xs:annotation><xs:documentation>
					Extensibility point in the WiX XML Schema.  Schema extensions can register additional
					attributes at this point in the schema.
				</xs:documentation></xs:annotation>
			</xs:anyAttribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ComponentRef">
		<xs:annotation>
			<xs:documentation>Create a reference to a Feature element in another Fragment.</xs:documentation>
			<xs:appinfo>
				<dx:seeAlso ref="Component"/>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The identifier of the Component element to reference.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Primary" type="YesNoType">
				<xs:annotation><xs:documentation>
					Set this attribute to 'yes' in order to make the parent feature of this component
					the primary feature for this component.  Components may belong to multiple features.
					By designating a feature as the primary feature of a component, you ensure that
					whenever a component is selected for install-on-demand (IOD), the primary feature
					will be the one to install it.  This attribute should only be set if a component
					actually nests under multiple features.  If a component nests under only one feature,
					that feature is the primary feature for the component.  You cannot set more than one
					feature as the primary feature of a given component.
				</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Merge">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="MergeRef"/>
			</xs:appinfo>
			<xs:documentation>Merge directive to bring in a Merge Module to be redirected to parent Directory</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="ConfigurationData">
					<xs:annotation><xs:documentation>Data to use as input to a configurable merge module.</xs:documentation></xs:annotation>
				</xs:element>
			</xs:choice>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The unique identifier for the Merge element in the source code.  Referenced by the MergeRef/@Id.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Language" type="xs:integer" use="required">
				<xs:annotation><xs:documentation>Specifies the decimal LCID for the language to merge the Module in as.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Directory" type="xs:integer">
				<xs:annotation><xs:documentation>This attribute has been deprecated and should not be used.  It actually never provided any value.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DiskId" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The value of this attribute should correspond to the Id attribute of a
					Media element authored elsewhere.  By creating this connection between the Merge Module and Media
					element, you set the packaging options to the values specified in the Media
					element (values such as compression level, cab embedding, etc...).</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="FileCompression" type="YesNoType"/>
			<xs:attribute name="src" type="xs:string" use="required">
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="MergeRef">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="Merge"/>
			</xs:appinfo>
			<xs:documentation>Merge reference to connect a Merge Module to parent Feature</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The unique identifier for the Merge element to be referenced.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Language" type="xs:integer">
				<xs:annotation><xs:documentation>This attribute has been deprecated and should not be used.  It actually never provided any value.</xs:documentation></xs:annotation>
			</xs:attribute>

			<xs:attribute name="Primary" type="YesNoType">
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ConfigurationData">
		<xs:annotation><xs:documentation>Data to use as input to a configurable merge module.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Name" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Key into the ModuleConfiguration table.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Value" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Value to be passed to configurable merge module.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Directory">
		<xs:annotation>
			<xs:documentation>Directory layout for the product.  Also specifies the mappings between source and target directories.</xs:documentation>
			<xs:appinfo>
				<dx:seeAlso ref="DirectoryRef"/>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="Component"/>
				<xs:element ref="Directory"/>
				<xs:element ref="Merge"/>
			</xs:choice>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>This value is the unique identifier of the directory entry.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="LongName" type="xs:string">
				<xs:annotation><xs:documentation>Set this value to a non 8.3 name to be used on systems supporting long names.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="LongSource" type="xs:string">
				<xs:annotation><xs:documentation>Set this value to a non 8.3 name to be used for the source directory name on systems supporting long names.  This attribute cannot be set unless the SourceName attribute is also set.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" type="xs:string">
				<xs:annotation><xs:documentation>Directory name under the parent directory.  Do not specify if this should be the same folder as the parent (the LongName attribute also cannot be specified with this option).</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SourceName" type="xs:string">
				<xs:annotation><xs:documentation>Set this value to use a different source directory name.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="src" type="xs:string">
				<xs:annotation><xs:documentation>Used to set the file system source for this directory's child elements.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="DirectoryRef">
		<xs:annotation>
			<xs:documentation>Create a reference to a Directory element in another Fragment.</xs:documentation>
			<xs:appinfo>
				<dx:seeAlso ref="Directory"/>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="Component"/>
				<xs:element ref="Directory"/>
				<xs:element ref="Merge"/>
			</xs:choice>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The identifier of the Directory element to reference.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="src" type="xs:string">
				<xs:annotation><xs:documentation>Used to set the file system source for this directory ref's child elements.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="UpgradeVersion">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attribute name="Minimum" type="xs:string">
						<xs:annotation><xs:documentation>Specifies the lower bound on the range of product versions to be detected by FindRelatedProducts.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="Maximum" type="xs:string">
						<xs:annotation><xs:documentation>Specifies the upper boundary of the range of product versions detected by FindRelatedProducts.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="Language" type="xs:string">
						<xs:annotation><xs:documentation>Specifies the set of languages detected by FindRelatedProducts.  Enter a list of numeric language identifiers (LANGID) separated by commas (,).  Leave this value null to specify all languages.  Set ExcludeLanguages to "yes" in order detect all languages, excluding the languages listed in this value.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="RemoveFeatures" type="xs:string">
						<xs:annotation><xs:documentation>The installer sets the REMOVE property to features specified in this column.  The features to be removed can be determined at run time.  The Formatted string entered in this field must evaluate to a comma-delimited list of feature names.  For example: [Feature1],[Feature2],[Feature3].  No features are removed if the field contains formatted text that evaluates to an empty string.  The installer sets REMOVE=ALL only if the Remove field is empty.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="Property" type="xs:string">
						<xs:annotation><xs:documentation>When the FindRelatedProducts action detects a related product installed on the system, it appends the product code to the property specified in this field.  The property specified in this field must be a public property and the package author must add the property to the SecureCustomProperties Property.  Each UpgradeVersion must have a unique Property value.  After FindRelatedProducts the value of this property is a list product codes, separated by semicolons (;), detected on the system.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="MigrateFeatures" type="YesNoType">
						<xs:annotation><xs:documentation>Set to "yes" to migrate feature states from upgraded products by enabling the logic in the MigrateFeatureStates action.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="OnlyDetect" type="YesNoType">
						<xs:annotation><xs:documentation>Set to "yes" to detect products and applications but do not install.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="IgnoreRemoveFailure" type="YesNoType">
						<xs:annotation><xs:documentation>Set to "yes" to continue installation upon failure to remove a product or application.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="IncludeMinimum" type="YesNoType">
						<xs:annotation><xs:documentation>Set to "yes" to make the range of versions detected include the value specified in Minimum.  This attribute is "yes" by default.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="IncludeMaximum" type="YesNoType">
						<xs:annotation><xs:documentation>Set to "yes" to make the range of versions detected include the value specified in Maximum.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="ExcludeLanguages" type="YesNoType">
						<xs:annotation><xs:documentation>Set to "yes" to detect all languages, excluding the languages listed in the Language attribute.</xs:documentation></xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="Upgrade">
		<xs:annotation><xs:documentation>Upgrade info for a particular UpgradeCode.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="UpgradeVersion" minOccurs="1" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Id" type="uuid" use="required">
				<xs:annotation><xs:documentation>This value specifies the upgrade code for the products that are to be detected by the FindRelatedProducts action.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Feature">
		<xs:annotation>
			<xs:documentation>
				A feature for the Feature table.  Features are the smallest installable unit.  See msi.chm for more
				detailed information on the myriad installation options for a feature.
			</xs:documentation>
			<xs:appinfo>
				<dx:seeAlso ref="FeatureRef"/>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="ComponentRef"/>
				<xs:element ref="Condition"/>
				<xs:element ref="Feature"/>
				<xs:element ref="FeatureRef"/>
				<xs:element ref="MergeRef"/>
			</xs:choice>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Unique identifier of the feature.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Absent">
				<xs:annotation><xs:documentation>
					This attribute determines if a user will have the option to set a feature to absent in the user interface.
					Value of 'allow' will prevent the user interface from displaying an option to change the feature state to
					Absent by setting the msidbFeatureAttributesUIDisallowAbsent attribute.  This will force the feature to the
					installation state, whether or not the feature is visible in the UI.
					Value of 'disallow' will allow the user interface to display an option to change the feature state to Absent.
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="allow"/>
						<xs:enumeration value="disallow"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="AllowAdvertise">
				<xs:annotation><xs:documentation>
					This attribute determins the possible advertise states for this feature.
					Value of 'no' will prevent this feature from being advertised by settting the msidbFeatureAttributesDisallowAdvertise attribute.
					Value of 'system' will prevent advertising for this feature if the operating system shell does not support Windows Installer
					descriptors by setting the msidbFeatureAttributesNoUnsupportedAdvertise attribute.
					Value of 'yes' will allow the feature to be advertised.
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="no"/>
						<xs:enumeration value="system"/>
						<xs:enumeration value="yes"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="ConfigurableDirectory" type="xs:string">
				<xs:annotation><xs:documentation>
					Specify the Id of a Directory that can be configured by the user at installation time.  This identifier
					must be a public property and therefore completely uppercase.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation><xs:documentation>
					Longer string of text describing the feature.  This localizable string is displayed by the
					Text Control of the Selection Dialog.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Display">
				<xs:annotation><xs:documentation>
					Determines the initial display of this feature in the feature tree.
					Value of 'collapse' will initially show the feature collapsed.
					Value of 'expand' will initially show the feature expanded.
					Value of 'hidden' will prevent the feature from displaying in the user interface.
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="collapse"/>
						<xs:enumeration value="expand"/>
						<xs:enumeration value="hidden"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="FollowParent" type="YesNoType">
				<xs:annotation><xs:documentation>
					This attribute has been deprecated; please use InstallDefault='followParent' instead.
					This attribute determines if a feature will follow the installation state of its parent feature.
					Value of 'yes' sets the state of the feature the same as the state of the feature's parent by setting the
					msidbFeatureAttributesFollowParent attribute.  You cannot use this option if the feature is located at
					the root of a feature tree.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="InstallDefault">
				<xs:annotation><xs:documentation>
					This attribute determines the default install/run location of a feature.  This attribute cannot be specified
					if the value of the FollowParent attribute is 'yes' since that would ask the installer to force this feature
					to follow the parent installation state and simultaneously favor a particular installation state just for this feature.
					Value of 'followParent' will force the feature to follow the same installation state as its parent feature.
					Value of 'local' will favor installing this feature locally by setting the msidbFeatureAttributesFavorLocal attribute.
					Value of 'source' will favor running this feature from source by setting the msidbFeatureAttributesFavorSource attribute.
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="followParent"/>
						<xs:enumeration value="local"/>
						<xs:enumeration value="source"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Level" type="xs:integer" use="required">
				<xs:annotation><xs:documentation>
					Sets the install level of this feature.  A value of 0 will disable the feature.  Processing the
					Condition Table can modify the level value (this is set via the Condition child element).
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Title" type="xs:string">
				<xs:annotation><xs:documentation>
					Short string of text identifying the feature.  This string is listed as an item by the
					SelectionTree control of the Selection Dialog.
				</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="TypicalDefault">
				<xs:annotation><xs:documentation>
					This attribute determines the default advertise state of the feature.  This attribute's value cannot be
					'advertise' if the value of the AllowAdvertise attribute is 'no' since that would ask the installer to
					disallow the advertised state for this feature while at the same time favoring it.
					Value of 'advertise' will set the feature to be advertised by setting the msidbFeatureAttributesFavorAdvertise attribute.
					Value of 'install' will set the feature to the default non-advertised installation option.
				</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="advertise"/>
						<xs:enumeration value="install"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="FeatureRef">
		<xs:annotation>
			<xs:documentation>Create a reference to a Feature element in another Fragment.</xs:documentation>
			<xs:appinfo>
				<dx:seeAlso ref="Feature"/>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="ComponentRef"/>
				<xs:element ref="Feature"/>
				<xs:element ref="MergeRef"/>
			</xs:choice>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The identifier of the Feature element to reference.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="PatchPackage">
		<xs:annotation>
			<xs:documentation>PatchPackage found on parent Media element</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="uuid">
					<xs:annotation><xs:documentation>Element value is PatchId GUID</xs:documentation></xs:annotation>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="Media">
		<xs:annotation>
			<xs:documentation>Media element describes a disk that makes up the source media for the installation.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="DigitalSignature" minOccurs="0"/>
				<xs:element ref="PatchPackage" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:integer" use="required">
				<xs:annotation><xs:documentation>Disk identifier for Media table. This number must be equal to or greater than 1.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Cabinet" type="xs:string">
				<xs:annotation><xs:documentation>The name of the cabinet if some or all of the files stored on the media are compressed into a cabinet file. If no cabinets are used, this attribute must be blank.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="CompressionLevel">
				<xs:annotation>
					<xs:documentation>
						Indicates the compression level for the Media's cabinet.  This attribute can 
						only be used in conjunction with the Cabinet attribute.  The default is 'mszip'.
					</xs:documentation>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="high"/>
						<xs:enumeration value="low"/>
						<xs:enumeration value="medium"/>
						<xs:enumeration value="mszip"/>
						<xs:enumeration value="none"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="DiskPrompt" type="xs:string">
				<xs:annotation><xs:documentation>The disk name, which is usually the visible text printed on the disk. This localizable text is used to prompt the user when this disk needs to be inserted.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="EmbedCab" type="YesNoType">
				<xs:annotation><xs:documentation>Instructs the binder to embed the cabinet in the product if 'yes'.  This attribute can only be specified in conjunction with the Cabinet attribute.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="src" type="xs:string">
				<xs:annotation>
					<xs:documentation>
						This attribute specifies the root directory for the uncompressed files that
						are a part of this Media element.  By default, the src will be the output
						directory for the final image.  The default value ensures the binder generates
						an installable image.  If a relative path is specified in the src attribute,
						the value will be appended to the image's output directory.  If an absolute
						path is provided, that path will be used without modification.  The latter two
						options are provided to ease the layout of an image onto multiple medias (CDs/DVDs).
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="VolumeLabel" type="xs:string">
				<xs:annotation>
					<xs:documentation>
						The label attributed to the volume. This is the volume label returned 
						by the GetVolumeInformation function. If the SourceDir property refers 
						to a removable (floppy or CD-ROM) volume, then this volume label is 
						used to verify that the proper disk is in the drive before attempting 
						to install files. The entry in this column must match the volume label 
						of the physical media. 
					</xs:documentation>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="IgnoreModularization">
		<xs:annotation>
			<xs:documentation>
				Use this to Ignore Modularization of particular values.  This feature
				is intended to be used in very rare situations.  Before using this
				feature, contact your support alias to verify your use is supported.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Name" use="required" type="xs:string" />
			<xs:attribute name="Type">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="Action" />
						<xs:enumeration value="Property" />
						<xs:enumeration value="Directory" />
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="CustomAction">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="Custom"/>
			</xs:appinfo>
			<xs:documentation>
				Specifies a custom action to be added to the MSI CustomAction table. Various combinations of the attributes for this element
				correspond to different custom action types. For more information about custom actions see the MSDN documentation
				<a href="http://msdn.microsoft.com/library/en-us/msi/setup/summary_list_of_all_custom_action_types.asp">
				http://msdn.microsoft.com/library/en-us/msi/setup/summary_list_of_all_custom_action_types.asp</a>
				for a "Summary List of All Custom Action Types".
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:annotation><xs:documentation>
						The text node is only valid if the Script attribute is specified.  In that case, the text node contains the script to embed.
					</xs:documentation></xs:annotation>

					<xs:attribute name="Id" type="xs:string">
						<xs:annotation><xs:documentation>
							The identifier of the custom action.
						</xs:documentation></xs:annotation>
					</xs:attribute>
					<!-- CustomAction Source specification, sets source Attribute bits -->
					<xs:attribute name="BinaryKey" type="xs:string">
						<xs:annotation>
							<xs:documentation>
								This attribute is a reference to a Binary element with matching Id attribute.  That binary stream contains
								the custom action for use during install.  The custom action will not be installed into a target directory.  This attribute is
								typically used with the DllEntry attribute to specify the custom action DLL to use for a type 1 custom action, with the ExeCommand
								attribute to specify a type 17 custom action that runs an embedded executable, or with the VBScriptCall or JScriptCall attributes 
								to specify a type 5 or 6 custom action.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="FileKey" type="xs:string">
						<xs:annotation>
							<xs:documentation>
								This attribute specifies a reference to a File element with matching Id attribute that
								will execute the custom action code in the file after the file is installed.  This 
								attribute is typically used with the ExeCommand attribute to specify a type 18 custom action
								that runs an installed executable, with the DllEntry attribute to specify an installed custom
								action DLL to use for a type 17 custom action, or with the VBScriptCall or JScriptCall 
								attributes to specify a type 21 or 22 custom action.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="Property" type="xs:string">
						<xs:annotation>
							<xs:documentation>
								This attribute specifies a reference to a Property element with matching Id attribute that specifies the Property
								to be used or updated on execution of this custom action. This attribute is 
								typically used with the Value attribute to create a type 51 custom action that parses 
								the text in Value and places it into the specified Property.  This attribute is also used with 
								the ExeCommand attribute to create a type 50 custom action that uses the value of the 
								given property to specify the path to the executable. Type 51 custom actions are often useful to
								pass values to a deferred custom action.
								See <a href="http://msdn.microsoft.com/library/en-us/msi/setup/obtaining_context_information_for_deferred_execution_custom_actions.asp">
								http://msdn.microsoft.com/library/en-us/msi/setup/obtaining_context_information_for_deferred_execution_custom_actions.asp</a>
								for more information.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="Directory" type="xs:string">
						<xs:annotation>
							<xs:documentation>
								This attribute specifies a reference to a Directory element with matching Id attribute containing a directory path. 
								This attribute is typically used with the ExeCommand attribute to specify the source executable for a type 34 
								custom action, or with the Value attribute to specify a formatted string to place in the specified Directory 
								table entry in a type 35 custom action.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="PackageProductCode" type="uuid">
						<xs:annotation><xs:documentation>Creates a type 39 custom action.  Specifies the ProductCode of the nested install to locate.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="PackagePath" type="xs:string">
						<xs:annotation><xs:documentation>Creates a type 23 custom action.  Specifies the Formatted path to the source package for the nested installation.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="PackageSubstorage" type="xs:string">
						<xs:annotation><xs:documentation>Creates a type 7 custom action.  Specifies the name of the substorage to store nested installation package.</xs:documentation></xs:annotation>
					</xs:attribute>
					<!-- CustomAction Target specification, sets target Attribute bits -->
					<xs:attribute name="DllEntry" type="xs:string">
						<xs:annotation>
							<xs:documentation>
								This attribute specifies the name of a function in a custom action to execute.
								This attribute is used with the BinaryKey attribute to create a type 1 custom 
								action, or with the FileKey attribute to create a type 17 custom action.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="ExeCommand" type="xs:string">
						<xs:annotation>
							<xs:documentation>
								This attribute specifies the command line parameters to supply to an externally 
								run executable. This attribute is typically used with the FileKey attribute for a type 2 custom action, 
								the BinaryKey attribute for a type 17 custom action, the Property attribute for a type 50 custom action,
								or the Directory attribute for a type 34 custom action that specify the executable to run. 
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="JScriptCall" type="xs:string">
						<xs:annotation><xs:documentation>
							Set this attribute to indicate that the custom action is written in JScript.  The source should be indicated
							using one of the target attributes.
						</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="VBScriptCall" type="xs:string">
						<xs:annotation><xs:documentation>
							Set this attribute to indicate that the custom action is written in VBScript.  The source should be indicated
							using one of the target attributes.
						</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="Script">
						<xs:annotation><xs:documentation>
							Creates a type 37 or 38 custom action.  The text of the element should contain the script to be embedded in the package.
						</xs:documentation></xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:NMTOKEN">
								<xs:enumeration value="jscript"/>
								<xs:enumeration value="vbscript"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="Value" type="xs:string">
						<xs:annotation>
							<xs:documentation>
								This attribute specifies a string value to use in the custom action. 
								This attribute is typically used with the Property attribute to set the property
								as part of a type 51 custom action, with the Directory attribute to set a directory
								path in that table in a type 35 custom action, or by itself to create a type 19 error message
								custom action. The value can be a literal value or derived from a Property element using the 
								formatted syntax. 
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="InstallProperties" type="xs:string">
						<xs:annotation><xs:documentation>
							Creates a nested install custom action.  Specifies the Properties to pass to the nested installation.  Use
							in conjunction with a PackageProductCode, PackagePath, or PackageSubstorage attribute.
						</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="Error" type="xs:string">
						<xs:annotation>
							<xs:documentation>
								This attribute specifies an index in the MSI Error table to use as an error message for a 
								type 19 custom action that displays the error message and aborts a product's installation.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<!-- Other CustomAction type attributes -->
					<xs:attribute name="Return">
						<xs:annotation><xs:documentation>
							Set this attribute to set the return behavior of the custom action.  Value of 'check' is default and
							indicates that the custom action will run synchronously and the return code will be checked for success.
							Value of 'ignore' indicates that the custom action will run synchronously and the return code will not be
							checked.  Value of 'asyncNoWait' indicates that the custom action will run asyncronously and execution may
							continue after the installer terminates.  Value of 'asyncWait' indicates that the custom action will run
							asynchronously but the installer will wait for the return code at sequence end.
						</xs:documentation></xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:NMTOKEN">
								<xs:enumeration value="asyncNoWait"/>
								<xs:enumeration value="asyncWait"/>
								<xs:enumeration value="check"/>
								<xs:enumeration value="ignore"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="Execute">
						<xs:annotation><xs:documentation>
							Set this attribute to indicate the scheduling of the custom action.  Value of 'commit' indicates that the
							custom action will run after successful completion of the installation script (at the end of the installation).
							Value of 'deferred' indicates that the custom action runs in-script (possibly with elevated privileges).  Value
							of 'firstSequence' indicates that the custom action will only run in the first sequence that runs it.  Value of
							'immediate' means that the custom action will occur during normal processing time with user privileges.  Value
							of 'oncePerProcess' indicates that the custom action will only run in the first sequence that runs it in the
							same process.  Value of 'rollback' indicates that a custom action will run in the rollback sequence when a failure
							occurs during installation, usually to undo changes made by a deferred custom action.  Value of 'secondSequence'
							indicates that a custom action should be run a second time if it was previously run in an earlier sequence.
							If this attribute is not specified the value will be defaulted to 'immediate'.
						</xs:documentation></xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:NMTOKEN">
								<xs:enumeration value="commit"/>
								<xs:enumeration value="deferred"/>
								<xs:enumeration value="firstSequence"/>
								<xs:enumeration value="immediate"/>
								<xs:enumeration value="oncePerProcess"/>
								<xs:enumeration value="rollback"/>
								<xs:enumeration value="secondSequence"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="Impersonate" type="YesNoType">
						<xs:annotation>
							<xs:documentation>
								This attribute specifies whether the Windows Installer, which executes as LocalSystem, 
								should impersonate the user context of the installing user when executing this custom action. 
								Typically the value should be 'yes', except when the custom action needs elevated privileges
								to apply changes to the machine.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="Win64" type="YesNoType">
						<xs:annotation><xs:documentation>Specifies that a custom action targets a 64-bit platform.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="TSAware" type="YesNoType">
						<xs:annotation><xs:documentation>Deprecated, use the TerminalServerAware attribute instead.</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="TerminalServerAware" type="YesNoType">
						<xs:annotation>
							<xs:documentation>
								This attribute specifies controls whether the custom action will impersonate the 
								installing user during per-machine installs on Terminal Server machines.
								Deferred execution custom actions that do not specify this attribute, or explicitly set it 'no',
								will run with no user impersonation on Terminal Server machines during 
								per-machine installations.  This attribute is only applicable when installing on the 
								Windows Server 2003 family.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="HideTarget" type="YesNoType">
						<xs:annotation><xs:documentation>Ensures the installer does not log the CustomActionData for the deferred custom action.</xs:documentation></xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<!-- - - - - - - - - - - Sequence Table Definitions - - - - - - - - - - - - - - -->
	<xs:element name="FindRelatedProducts" type="ActionSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="Upgrade"/>
			</xs:appinfo>
			<xs:documentation>Runs through each record of the Upgrade table in sequence and compares the upgrade code, product version, and language in each row to products installed on the system.  When FindRelatedProducts detects a correspondence between the upgrade information and an installed product, it appends the product code to the property specified in the ActionProperty column of the UpgradeTable.  The FindRelatedProducts action only runs the first time the product is installed.  The FindRelatedProducts action does not run during maintenance mode or uninstallation.  FindRelatedProducts should be authored into the InstallUISequence table and InstallExecuteSequence tables.  The installer prevents FindRelated Products from running in InstallExecuteSequence if the action has already run in InstallUISequence.  The FindRelatedProducts action must come before the MigrateFeatureStates action and the RemoveExistingProducts action.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="ValidateProductID" type="ActionSequenceType">
		<xs:annotation>
			<xs:documentation>Sets the ProductID property to the full product identifier.  This action must be sequenced before the user interface wizard in the InstallUISequence table and before the RegisterUser action in the InstallExecuteSequence table.  If the product identifier has already been validated successfully, the ValidateProductID action does nothing.  The ValidateProductID action always returns a success, whether or not the product identifier is valid, so that the product identifier can be entered on the command line the first time the product is run.  The product identifier can be validated without having the user reenter this information by setting the PIDKEY property on the command line or by using a transform.  The display of the dialog box requesting the user to enter the product identifier can then be made conditional upon the presence of the ProductID property, which is set when the PIDKEY property is validated.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="CostInitialize" type="ActionSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="FileCost"/>
				<dx:seeAlso ref="CostFinalize"/>
			</xs:appinfo>
			<xs:documentation>Initiates the internal installation costing process.  Any standard or custom actions that affect costing should be sequenced before the CostInitialize action.  Call the FileCost action immediately following the CostInitialize action.  Then call the CostFinalize action following the CostInitialize action to make all final cost calculations available to the installer through the Component table.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="FileCost" type="ActionSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="CostInitialize"/>
				<dx:seeAlso ref="CostFinalize"/>
			</xs:appinfo>
			<xs:documentation>Initiates dynamic costing of standard installation actions.  Any standard or custom actions that affect costing should sequenced before the CostInitialize action.  Call the FileCost action immediately following the CostInitialize action.  Then call the CostFinalize action following the FileCost action to make all final cost calculations available to the installer through the Component table.  The CostInitialize action must be executed before the FileCost action.  The installer then determines the disk-space cost of every file in the File table, on a per-component basis, taking both volume clustering and the presence of existing files that may need to be overwritten into account.  All actions that consume or release disk space are also considered.  If an existing file is found, a file version check is performed to determine whether the new file actually needs to be installed or not.  If the existing file is of an equal or greater version number, the existing file is not overwritten and no disk-space cost is incurred.  In all cases, the installer uses the results of version number checking to set the installation state of each file.  The FileCost action initializes cost calculation with the installer.  Actual dynamic costing does not occur until the CostFinalize action is executed.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="IsolateComponents" type="ActionSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="IsolateComponent"/>
			</xs:appinfo>
			<xs:documentation>Installs a copy of a component (commonly a shared DLL) into a private location for use by a specific application (typically an .exe).  This isolates the application from other copies of the component that may be installed to a shared location on the computer.  The action refers to each record of the IsolatedComponent table and associates the files of the component listed in the Component_Shared field with the component listed in the Component_Application field.  The installer installs the files of Component_Shared into the same directory as Component_Application.  The installer generates a file in this directory, zero bytes in length, having the short filename name of the key file for Component_Application (typically this is the same file name as the .exe) appended with .local.  The IsolatedComponent action does not affect the installation of Component_Application.  Uninstalling Component_Application also removes the Component_Shared files and the .local file from the directory.  The IsolateComponents action can be used only in the InstallUISequence table and the InstallExecuteSequence table.  This action must come after the CostInitialize action and before the CostFinalize action.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="CostFinalize" type="ActionSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="CostInitialize"/>
				<dx:seeAlso ref="FileCost"/>
			</xs:appinfo>
			<xs:documentation>Ends the internal installation costing process begun by the CostInitialize action.  Any standard or custom actions that affect costing should be sequenced before the CostInitialize action.  Call the FileCost action immediately following the CostInitialize action and then call the CostFinalize action to make all final cost calculations available to the installer through the Component table.  The CostFinalize action must be executed before starting any user interface sequence which allows the user to view or modify Feature table selections or directories.  The CostFinalize action queries the Condition table to determine which features are scheduled to be installed.  Costing is done for each component in the Component table.  The CostFinalize action also verifies that all the target directories are writable before allowing the installation to continue.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="SetODBCFolders" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Checks for existing ODBC drivers and sets the target directory for each new driver to the location of an existing driver.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="MigrateFeatureStates" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Used for upgrading or installing over an existing application.  Reads feature states from existing application and sets these feature states for the pending installation.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="ExecuteAction" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Initiates the execution sequence.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="InstallValidate" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Verifies that all costed volumes have enough space for the installation.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="InstallInitialize" type="ActionSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="InstallFinalize"/>
			</xs:appinfo>
			<xs:documentation>Marks the beginning of a sequence of actions that change the system.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="AllocateRegistrySpace" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Ensures the needed amount of space exists in the registry.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="ProcessComponents" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Registers and unregisters components, their key paths, and the component clients.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="UnpublishComponents" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the unadvertisement of components listed in the PublishComponent table.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="MsiUnpublishAssemblies" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the unadvertisement of CLR and Win32 assemblies that are being removed.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="UnpublishFeatures" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Removes selection-state and feature-component mapping information from the registry.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="StopServices" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Stops system services.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="DeleteServices" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Stops a service and removes its registration from the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="UnregisterComPlus" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Removes COM+ applications from the registry.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="SelfUnregModules" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Unregisters all modules listed in the SelfReg table that are scheduled to be uninstalled.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="UnregisterTypeLibraries" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Unregisters type libraries from the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RemoveODBC" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Removes the data sources, translators, and drivers listed for removal during the installation.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="UnregisterFonts" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Removes registration information about installed fonts from the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RemoveRegistryValues" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Removes a registry value that has been authored into the registry table if the associated component was installed locally or as run from source, and is now set to be uninstalled.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="UnregisterClassInfo" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the removal of COM class information from the system registry.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="UnregisterExtensionInfo" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the removal of extension-related information from the system registry.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="UnregisterProgIdInfo" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the unregistration of OLE ProgId information with the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="UnregisterMIMEInfo" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Unregisters MIME-related registry information from the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RemoveIniValues" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Removes .ini file information specified for removal in the RemoveIniFile table if the component is set to be installed locally or run from source.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RemoveShortcuts" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the removal of an advertised shortcut whose feature is selected for uninstallation or a nonadvertised shortcut whose component is selected for uninstallation.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RemoveEnvironmentStrings" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Modifies the values of environment variables.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RemoveDuplicateFiles" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Deletes files installed by the DuplicateFiles action.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RemoveFiles" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Removes files previously installed by the InstallFiles action.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RemoveFolders" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Removes any folders linked to components set to be removed or run from source.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="CreateFolders" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Creates empty folders for components that are set to be installed.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="MoveFiles" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Locates existing files on the system and moves or copies those files to a new location.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="InstallAdminPackage" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Copies the product database to the administrative installation point.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="InstallFiles" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Copies files specified in the File table from the source directory to the destination directory.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="DuplicateFiles" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Duplicates files installed by the InstallFiles action.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="PatchFiles" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Queries the Patch table to determine which patches are to be applied.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="BindImage" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Binds each executable or DLL that must be bound to the DLLs imported by it.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="CreateShortcuts" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the creation of shortcuts.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RegisterClassInfo" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the registration of COM class information with the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RegisterExtensionInfo" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the registration of extension related information with the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RegisterProgIdInfo" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the registration of OLE ProgId information with the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RegisterMIMEInfo" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Registers MIME-related registry information with the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="WriteRegistryValues" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Sets up an application's registry information.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="WriteIniValues" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Writes the .ini file information that the application needs written to its .ini files.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="WriteEnvironmentStrings" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Modifies the values of environment variables.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RegisterFonts" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Registers installed fonts with the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="InstallODBC" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Installs the drivers, translators, and data sources in the ODBCDriver table, ODBCTranslator table, and ODBCDataSource table.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RegisterTypeLibraries" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Registers type libraries with the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="SelfRegModules" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Processes all modules listed in the SelfReg table and registers all installed modules with the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RegisterComPlus" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Registers COM+ applications.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="InstallServices" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Registers a service for the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="StartServices" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Starts system services.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RegisterUser" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Registers the user information with the installer to identify the user of a product.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="RegisterProduct" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Registers the product information with the installer.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="PublishComponents" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the advertisement of the components from the PublishComponent table.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="MsiPublishAssemblies" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the advertisement of CLR and Win32 assemblies.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="PublishFeatures" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Writes each feature's state into the system registry.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="PublishProduct" type="ActionSequenceType">
		<xs:annotation><xs:documentation>Manages the advertisement of the product information with the system.  The condition for this action may be specified in the element's inner text.</xs:documentation></xs:annotation>
	</xs:element>
	<xs:element name="InstallFinalize" type="ActionSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="InstallInitialize"/>
			</xs:appinfo>
			<xs:documentation>Marks the end of a sequence of actions that change the system.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>

	<xs:element name="AppSearch" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="ComponentSearch"/>
				<dx:seeAlso ref="FileSearch"/>
				<dx:seeAlso ref="IniFileSearch"/>
				<dx:seeAlso ref="RegistrySearch"/>
			</xs:appinfo>
			<xs:documentation>Uses file signatures to search for existing versions of products.  The AppSearch action may use this information to determine where upgrades are to be installed.  The AppSearch action can also be used to set a property to the existing value of an registry or .ini file entry.  AppSearch should be authored into the InstallUISequence table and InstallExecuteSequence table.  The installer prevents The AppSearch action from running in the InstallExecuteSequence sequence if the action has already run in InstallUISequence sequence.  The AppSearch action searches for file signatures using the CompLocator table first, the RegLocator table next, then the IniLocator table, and finally the DrLocator table.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="CCPSearch" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="RMCCPSearch"/>
				<dx:seeAlso ref="ComplianceCheck"/>
			</xs:appinfo>
			<xs:documentation>Uses file signatures to validate that qualifying products are installed on a system before an upgrade installation is performed.  The CCPSearch action should be authored into the InstallUISequence table and InstallExecuteSequence table.  The installer prevents the CCPSearch action from running in the InstallExecuteSequence sequence if the action has already run in InstallUISequence sequence.  The CCPSearch action must come before the RMCCPSearch action.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="RMCCPSearch" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="CCPSearch"/>
				<dx:seeAlso ref="ComplianceCheck"/>
			</xs:appinfo>
			<xs:documentation>Uses file signatures to validate that qualifying products are installed on a system before an upgrade installation is performed.  The RMCCPSearch action should be authored into the InstallUISequence table and InstallExecuteSequence table.  The installer prevents RMCCPSearch from running in the InstallExecuteSequence sequence if the action has already run in InstallUISequence sequence.  The RMCCPSearch action requires the CCP_DRIVE property to be set to the root path on the removable volume that has the installation for any of the qualifying products.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="LaunchConditions" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="Condition"/>
			</xs:appinfo>
			<xs:documentation>Queries the LaunchCondition table and evaluates each conditional statement recorded there.  If any of these conditional statements fail, an error message is displayed to the user and the installation is terminated.  The LaunchConditions action is optional.  This action is normally the first in the sequence, but the AppSearch Action may be sequenced before the LaunchConditions action.  If there are launch conditions that do not apply to all installation modes, the appropriate installation mode property should be used in a conditional expression in the appropriate sequence table.  The condition for this action may be specified in the element's inner text.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="InstallExecute" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:documentation>Runs a script containing all operations spooled since either the start of the installation or the last InstallExecute action, or InstallExecuteAgain action.  Special actions don't have a built-in sequence number and thus must appear relative to another action.  The suggested way to do this is by using the Before or After attribute.  InstallExecute and InstallExecuteAgain can optionally appear anywhere between InstallInitialize and InstallFinalize.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="InstallExecuteAgain" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:documentation>Runs a script containing all operations spooled since either the start of the installation or the last InstallExecute action, or InstallExecuteAgain action.  Should only be used after InstallExecute.  Special actions don't have a built-in sequence number and thus must appear relative to another action.  The suggested way to do this is by using the Before or After attribute.  InstallExecute and InstallExecuteAgain can optionally appear anywhere between InstallInitialize and InstallFinalize.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="DisableRollback" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:documentation>Disables rollback for the remainder of the installation.  Special actions don't have a built-in sequence number and thus must appear relative to another action.  The suggested way to do this is by using the Before or After attribute.  InstallExecute and InstallExecuteAgain can optionally appear anywhere between InstallInitialize and InstallFinalize.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="RemoveExistingProducts" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:documentation>Goes through the product codes listed in the ActionProperty column of the Upgrade table and removes the products in sequence.  Special actions don't have a built-in sequence number and thus must appear relative to another action.  The suggested way to do this is by using the Before or After attribute.  InstallExecute and InstallExecuteAgain can optionally appear anywhere between InstallInitialize and InstallFinalize.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="ScheduleReboot" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:documentation>Prompts the user to restart the system at the end of installation.  Special actions don't have a built-in sequence number and thus must appear relative to another action.  The suggested way to do this is by using the Before or After attribute.  InstallExecute and InstallExecuteAgain can optionally appear anywhere between InstallInitialize and InstallFinalize.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="ForceReboot" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:documentation>Prompts the user for a restart of the system during the installation.  Special actions don't have a built-in sequence number and thus must appear relative to another action.  The suggested way to do this is by using the Before or After attribute.  InstallExecute and InstallExecuteAgain can optionally appear anywhere between InstallInitialize and InstallFinalize.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="ResolveSource" type="ActionModuleSequenceType">
		<xs:annotation>
			<xs:documentation>Determines the location of the source and sets the SourceDir property if the source has not been resolved yet.  Special actions don't have a built-in sequence number and thus must appear relative to another action.  The suggested way to do this is by using the Before or After attribute.  InstallExecute and InstallExecuteAgain can optionally appear anywhere between InstallInitialize and InstallFinalize.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<!-- CustomActions and Dialogs of course aren't built in and must be specified relative to another action -->
	<xs:element name="Custom">
		<xs:annotation>
			<xs:appinfo>
				<dx:seeAlso ref="CustomAction"/> 
			</xs:appinfo>
			<xs:documentation>Use to sequence a custom action.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:annotation><xs:documentation>Text node specifies the condition of the action.</xs:documentation></xs:annotation>
					<xs:attribute name="Action" type="xs:string" use="required"/>
					<xs:attribute name="OnExit">
						<xs:annotation><xs:documentation>mutually exclusive with Before, After, and Sequence attributes</xs:documentation></xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:NMTOKEN">
								<xs:enumeration value="success"/>
								<xs:enumeration value="cancel"/>
								<xs:enumeration value="error"/>
								<xs:enumeration value="suspend"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="Before" type="xs:string"/>
					<xs:attribute name="After" type="xs:string"/>
					<xs:attribute name="Sequence" type="xs:integer"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="Show">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attribute name="Dialog" type="xs:string" use="required"/>
					<xs:attribute name="OnExit">
						<xs:annotation><xs:documentation>mutually exclusive with Before, After, and Sequence attributes</xs:documentation></xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:NMTOKEN">
								<xs:enumeration value="success"/>
								<xs:enumeration value="cancel"/>
								<xs:enumeration value="error"/>
								<xs:enumeration value="suspend"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="Before" type="xs:string"/>
					<xs:attribute name="After" type="xs:string"/>
					<xs:attribute name="Sequence" type="xs:integer"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<!-- standard sequence table compositions -->

	<xs:element name="InstallUISequence">
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="Custom" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Use to sequence a custom action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="Show" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="ScheduleReboot" minOccurs="0">
					<xs:annotation><xs:documentation>Prompts the user to restart the system at the end of installation. Not fixed sequence.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="LaunchConditions" minOccurs="0">
					<xs:annotation><xs:documentation>Queries the LaunchCondition table and evaluates each conditional statement recorded there.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="FindRelatedProducts" minOccurs="0">
					<xs:annotation><xs:documentation>Runs through each record of the Upgrade table in sequence and compares the upgrade code, product version, and language in each row to products installed on the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="AppSearch" minOccurs="0">
					<xs:annotation><xs:documentation>Uses file signatures to search for existing versions of products.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CCPSearch" minOccurs="0">
					<xs:annotation><xs:documentation>Uses file signatures to validate that qualifying products are installed on a system before an upgrade installation is performed.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RMCCPSearch" minOccurs="0">
					<xs:annotation><xs:documentation>Uses file signatures to validate that qualifying products are installed on a system before an upgrade installation is performed.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ValidateProductID">
					<xs:annotation><xs:documentation>Sets the ProductID property to the full product identifier.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CostInitialize">
					<xs:annotation><xs:documentation>Initiates the internal installation costing process.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="FileCost">
					<xs:annotation><xs:documentation>Initiates dynamic costing of standard installation actions.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="IsolateComponents">
					<xs:annotation><xs:documentation>Installs a copy of a component (commonly a shared DLL) into a private location for use by a specific application (typically an .exe).</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ResolveSource" minOccurs="0">
					<xs:annotation><xs:documentation>Determines the location of the source and sets the SourceDir property if the source has not been resolved yet.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CostFinalize">
					<xs:annotation><xs:documentation>Ends the internal installation costing process begun by the CostInitialize action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="MigrateFeatureStates">
					<xs:annotation><xs:documentation>Used for upgrading or installing over an existing application.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ExecuteAction" minOccurs="0">
					<xs:annotation><xs:documentation>Initiates the execution sequence.</xs:documentation></xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:complexType>
	</xs:element>

	<xs:element name="InstallExecuteSequence">
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<!-- used only to supply default op for child action elements -->
				<xs:element ref="Custom" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Use to sequence a custom action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ScheduleReboot" minOccurs="0">
					<xs:annotation><xs:documentation>Prompts the user to restart the system at the end of installation. Not fixed sequence.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ForceReboot" minOccurs="0">
					<xs:annotation><xs:documentation>Prompts the user for a restart of the system during the installation. Not fixed sequence.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ResolveSource" minOccurs="0">
					<xs:annotation><xs:documentation>Determines the location of the source and sets the SourceDir property if the source has not been resolved yet. Not fixed sequence.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="LaunchConditions" minOccurs="0">
					<xs:annotation><xs:documentation>Queries the LaunchCondition table and evaluates each conditional statement recorded there.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="FindRelatedProducts" minOccurs="0">
					<xs:annotation><xs:documentation>Runs through each record of the Upgrade table in sequence and compares the upgrade code, product version, and language in each row to products installed on the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="AppSearch" minOccurs="0">
					<xs:annotation><xs:documentation>Uses file signatures to search for existing versions of products.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CCPSearch">
					<xs:annotation><xs:documentation>Uses file signatures to validate that qualifying products are installed on a system before an upgrade installation is performed.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RMCCPSearch">
					<xs:annotation><xs:documentation>Uses file signatures to validate that qualifying products are installed on a system before an upgrade installation is performed.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ValidateProductID">
					<xs:annotation><xs:documentation>Sets the ProductID property to the full product identifier.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CostInitialize">
					<xs:annotation><xs:documentation>Initiates the internal installation costing process.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="FileCost">
					<xs:annotation><xs:documentation>Initiates dynamic costing of standard installation actions.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="IsolateComponents">
					<xs:annotation><xs:documentation>Installs a copy of a component (commonly a shared DLL) into a private location for use by a specific application (typically an .exe).</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CostFinalize">
					<xs:annotation><xs:documentation>Ends the internal installation costing process begun by the CostInitialize action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="SetODBCFolders">
					<xs:annotation><xs:documentation>Checks for existing ODBC drivers and sets the target directory for each new driver to the location of an existing driver.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="MigrateFeatureStates">
					<xs:annotation><xs:documentation>Used for upgrading or installing over an existing application.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallValidate">
					<xs:annotation><xs:documentation>Verifies that all costed volumes have enough space for the installation.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallInitialize">
					<xs:annotation><xs:documentation>Marks the beginning of a sequence of actions that change the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="AllocateRegistrySpace" minOccurs="0">
					<xs:annotation><xs:documentation>Ensures the needed amount of space exists in the registry.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ProcessComponents">
					<xs:annotation><xs:documentation>Registers and unregisters components, their key paths, and the component clients.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="UnpublishComponents" minOccurs="0">
					<xs:annotation><xs:documentation>Manages the unadvertisement of components listed in the PublishComponent table.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="UnpublishFeatures" minOccurs="0">
					<xs:annotation><xs:documentation>Removes selection-state and feature-component mapping information from the registry.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="StopServices">
					<xs:annotation><xs:documentation>Stops system services.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="DeleteServices">
					<xs:annotation><xs:documentation>Stops a service and removes its registration from the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="UnregisterComPlus">
					<xs:annotation><xs:documentation>Removes COM+ applications from the registry.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="SelfUnregModules" minOccurs="0">
					<xs:annotation><xs:documentation>Unregisters all modules listed in the SelfReg table that are scheduled to be uninstalled.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="UnregisterTypeLibraries" minOccurs="0">
					<xs:annotation><xs:documentation>Unregisters type libraries from the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RemoveODBC">
					<xs:annotation><xs:documentation>Removes the data sources, translators, and drivers listed for removal during the installation.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="UnregisterFonts">
					<xs:annotation><xs:documentation>Removes registration information about installed fonts from the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RemoveRegistryValues" minOccurs="0">
					<xs:annotation><xs:documentation>Removes a registry value that has been authored into the registry table if the associated component was installed locally or as run from source, and is now set to be uninstalled.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="UnregisterClassInfo" minOccurs="0">
					<xs:annotation><xs:documentation>Manages the removal of COM class information from the system registry.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="UnregisterExtensionInfo">
					<xs:annotation><xs:documentation>Manages the removal of extension-related information from the system registry.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="UnregisterProgIdInfo" minOccurs="0">
					<xs:annotation><xs:documentation>Manages the unregistration of OLE ProgId information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="UnregisterMIMEInfo">
					<xs:annotation><xs:documentation>Unregisters MIME-related registry information from the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RemoveIniValues">
					<xs:annotation><xs:documentation>Removes .ini file information specified for removal in the RemoveIniFile table if the component is set to be installed locally or run from source.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RemoveShortcuts" minOccurs="0">
					<xs:annotation><xs:documentation>Manages the removal of an advertised shortcut whose feature is selected for uninstallation or a nonadvertised shortcut whose component is selected for uninstallation.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RemoveEnvironmentStrings">
					<xs:annotation><xs:documentation>Modifies the values of environment variables.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RemoveDuplicateFiles">
					<xs:annotation><xs:documentation>Deletes files installed by the DuplicateFiles action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RemoveFiles" minOccurs="0">
					<xs:annotation><xs:documentation>Removes files previously installed by the InstallFiles action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RemoveFolders" minOccurs="0">
					<xs:annotation><xs:documentation>Removes any folders linked to components set to be removed or run from source.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CreateFolders" minOccurs="0">
					<xs:annotation><xs:documentation>Creates empty folders for components that are set to be installed.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="MoveFiles">
					<xs:annotation><xs:documentation>Locates existing files on the system and moves or copies those files to a new location.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallFiles" minOccurs="0">
					<xs:annotation><xs:documentation>Copies files specified in the File table from the source directory to the destination directory.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="DuplicateFiles">
					<xs:annotation><xs:documentation>Duplicates files installed by the InstallFiles action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="PatchFiles">
					<xs:annotation><xs:documentation>Queries the Patch table to determine which patches are to be applied.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="BindImage" minOccurs="0">
					<xs:annotation><xs:documentation>Binds each executable or DLL that must be bound to the DLLs imported by it.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CreateShortcuts" minOccurs="0">
					<xs:annotation><xs:documentation>Manages the creation of shortcuts.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterClassInfo" minOccurs="0">
					<xs:annotation><xs:documentation>Manages the registration of COM class information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterExtensionInfo">
					<xs:annotation><xs:documentation>Manages the registration of extension related information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterProgIdInfo" minOccurs="0">
					<xs:annotation><xs:documentation>Manages the registration of OLE ProgId information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterMIMEInfo">
					<xs:annotation><xs:documentation>Registers MIME-related registry information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="WriteRegistryValues" minOccurs="0">
					<xs:annotation><xs:documentation>Sets up an application's registry information.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="WriteIniValues">
					<xs:annotation><xs:documentation>Writes the .ini file information that the application needs written to its .ini files.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="WriteEnvironmentStrings">
					<xs:annotation><xs:documentation>Modifies the values of environment variables.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterFonts">
					<xs:annotation><xs:documentation>Registers installed fonts with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallODBC">
					<xs:annotation><xs:documentation>Installs the drivers, translators, and data sources in the ODBCDriver table, ODBCTranslator table, and ODBCDataSource table.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterTypeLibraries" minOccurs="0">
					<xs:annotation><xs:documentation>Registers type libraries with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="SelfRegModules" minOccurs="0">
					<xs:annotation><xs:documentation>Processes all modules listed in the SelfReg table and registers all installed modules with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterComPlus">
					<xs:annotation><xs:documentation>Registers COM+ applications.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallServices">
					<xs:annotation><xs:documentation>Registers a service for the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="StartServices">
					<xs:annotation><xs:documentation>Starts system services.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterUser" minOccurs="0">
					<xs:annotation><xs:documentation>Registers the user information with the installer to identify the user of a product.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterProduct" minOccurs="0">
					<xs:annotation><xs:documentation>Registers the product information with the installer.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="PublishComponents" minOccurs="0">
					<xs:annotation><xs:documentation>Manages the advertisement of the components from the PublishComponent table.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="PublishFeatures" minOccurs="0">
					<xs:annotation><xs:documentation>Writes each feature's state into the system registry.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="PublishProduct" minOccurs="0">
					<xs:annotation><xs:documentation>Manages the advertisement of the product information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallFinalize">
					<xs:annotation><xs:documentation>Marks the end of a sequence of actions that change the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RemoveExistingProducts">
					<xs:annotation><xs:documentation>Goes through the product codes listed in the ActionProperty column of the Upgrade table and removes the products in sequence.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="DisableRollback" minOccurs="0">
					<xs:annotation><xs:documentation>Disables rollback for the remainder of the installation.</xs:documentation></xs:annotation>
				</xs:element>
				<!-- InstallExecute and InstallExecuteAgain can optionally appear anywhere between InstallInitialize and InstallFinalize -->
				<xs:element ref="InstallExecute" minOccurs="0">
					<xs:annotation><xs:documentation>Runs a script containing all operations spooled since either the start of the installation or the last InstallExecute action, or InstallExecuteAgain action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallExecuteAgain" minOccurs="0">
					<xs:annotation><xs:documentation>Runs a script containing all operations spooled since either the start of the installation or the last InstallExecute action, or InstallExecuteAgain action.</xs:documentation></xs:annotation>
				</xs:element>
				<!-- Windows Installer 1.5 actions -->
				<xs:element ref="MsiPublishAssemblies">
					<xs:annotation><xs:documentation>Manages the advertisement of CLR and Win32 assemblies.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="MsiUnpublishAssemblies">
					<xs:annotation><xs:documentation>Manages the unadvertisement of CLR and Win32 assemblies that are being removed.</xs:documentation></xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:complexType>
	</xs:element>

	<xs:element name="AdminUISequence">
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="Custom" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Use to sequence a custom action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="Show" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="CostInitialize">
					<xs:annotation><xs:documentation>Initiates the internal installation costing process.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="FileCost">
					<xs:annotation><xs:documentation>Initiates dynamic costing of standard installation actions.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CostFinalize">
					<xs:annotation><xs:documentation>Ends the internal installation costing process begun by the CostInitialize action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ExecuteAction">
					<xs:annotation><xs:documentation>Initiates the execution sequence.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallValidate">
					<xs:annotation><xs:documentation>Verifies that all costed volumes have enough space for the installation.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallInitialize">
					<xs:annotation><xs:documentation>Marks the beginning of a sequence of actions that change the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallAdminPackage">
					<xs:annotation><xs:documentation>Copies the product database to the administrative installation point.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallFiles">
					<xs:annotation><xs:documentation>Copies files specified in the File table from the source directory to the destination directory.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallFinalize">
					<xs:annotation><xs:documentation>Marks the end of a sequence of actions that change the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="LaunchConditions">
					<xs:annotation><xs:documentation>Queries the LaunchCondition table and evaluates each conditional statement recorded there.</xs:documentation></xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:complexType>
	</xs:element>

	<xs:element name="AdminExecuteSequence">
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="Custom" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Use to sequence a custom action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CostInitialize">
					<xs:annotation><xs:documentation>Initiates the internal installation costing process.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="FileCost">
					<xs:annotation><xs:documentation>Initiates dynamic costing of standard installation actions.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CostFinalize">
					<xs:annotation><xs:documentation>Ends the internal installation costing process begun by the CostInitialize action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallValidate">
					<xs:annotation><xs:documentation>Verifies that all costed volumes have enough space for the installation.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallInitialize">
					<xs:annotation><xs:documentation>Marks the beginning of a sequence of actions that change the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallAdminPackage">
					<xs:annotation><xs:documentation>Copies the product database to the administrative installation point.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallFiles">
					<xs:annotation><xs:documentation>Copies files specified in the File table from the source directory to the destination directory.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallFinalize">
					<xs:annotation><xs:documentation>Marks the end of a sequence of actions that change the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="LaunchConditions">
					<xs:annotation><xs:documentation>Queries the LaunchCondition table and evaluates each conditional statement recorded there.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ResolveSource" minOccurs="0">
					<xs:annotation><xs:documentation>Determines the location of the source and sets the SourceDir property if the source has not been resolved yet.</xs:documentation></xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:complexType>
	</xs:element>

	<xs:element name="AdvertiseExecuteSequence">
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="CostInitialize">
					<xs:annotation><xs:documentation>Initiates the internal installation costing process.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CostFinalize">
					<xs:annotation><xs:documentation>Ends the internal installation costing process begun by the CostInitialize action.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="Custom" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Use to sequence a custom action.  The only custom actions that are allowed in the AdvtExecuteSequence are type 19 (0x013) type 35 (0x023) and type 51 (0x033).</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallValidate">
					<xs:annotation><xs:documentation>Verifies that all costed volumes have enough space for the installation.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallInitialize">
					<xs:annotation><xs:documentation>Marks the beginning of a sequence of actions that change the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="CreateShortcuts">
					<xs:annotation><xs:documentation>Manages the creation of shortcuts.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterClassInfo">
					<xs:annotation><xs:documentation>Manages the registration of COM class information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterExtensionInfo">
					<xs:annotation><xs:documentation>Manages the registration of extension related information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterMIMEInfo">
					<xs:annotation><xs:documentation>Registers MIME-related registry information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RegisterProgIdInfo">
					<xs:annotation><xs:documentation>Manages the registration of OLE ProgId information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="PublishComponents">
					<xs:annotation><xs:documentation>Manages the advertisement of the components from the PublishComponent table.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="PublishFeatures">
					<xs:annotation><xs:documentation>Writes each feature's state into the system registry.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="PublishProduct">
					<xs:annotation><xs:documentation>Manages the advertisement of the product information with the system.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="InstallFinalize">
					<xs:annotation><xs:documentation>Marks the end of a sequence of actions that change the system.</xs:documentation></xs:annotation>
				</xs:element>
				<!-- Windows Installer 1.5 actions -->
				<xs:element ref="MsiPublishAssemblies">
					<xs:annotation><xs:documentation>Manages the advertisement of CLR and Win32 assemblies.</xs:documentation></xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<!-- - - - - - - - - - - Binary tables - - - - - - - - - - - - - -->
	<xs:element name="Binary">
		<xs:annotation><xs:documentation>Binary data used for CustomAction elements and UI controls.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The Id cannot by longer than 55 characters.  In order to prevent errors in cases where the Id is modularized, it should not be longer than 18 characters.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="src" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Path to the binary file.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Icon">
		<xs:annotation><xs:documentation>Icon used for Shortcut, ProgId, or Class elements (but not UI controls).</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>The Id cannot by longer than 55 characters.  In order to prevent errors in cases where the Id is modularized, it should not be longer than 18 characters.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="src" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Path to the icon file.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<!-- - - - - - - - - - - UI Definitions - - - - - - - - - - - - - -->

	<xs:element name="Error">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:annotation><xs:documentation>Element value is Message, use CDATA if message contains delimiter characters</xs:documentation></xs:annotation>
					<xs:attribute name="Id" type="xs:integer"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="Publish">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:annotation><xs:documentation>Element value is the optional Condition expression</xs:documentation></xs:annotation>
					<!-- Ordering of these elements is registered in the ControlEvent table -->
					<xs:attribute name="Event" type="xs:string">
						<xs:annotation><xs:documentation>must be one of the standard control events'</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="Property" type="xs:string">
						<xs:annotation><xs:documentation>mutually exclusive with 'Event'</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="Value" use="required" type="xs:string">
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="Subscribe">
		<xs:annotation><xs:documentation>Sets attributes for events in the EventMapping table</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Event" type="xs:string">
				<xs:annotation><xs:documentation>must be one of the standard control events'</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Attribute" type="xs:string">
				<xs:annotation><xs:documentation>if not present can only handle enable, disable, hide, unhide events</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Text">
		<xs:annotation><xs:documentation>Alternative to Text attributes when CDATA is needed to escape XML delimiters.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attribute name="src" type="xs:string">
						<xs:annotation><xs:documentation>Instructs the text to be imported from a file instead of the element value during the binding process.</xs:documentation></xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="Control">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Text" minOccurs="0">
					<xs:annotation><xs:documentation>alternative to Text attribute when CDATA is needed to escape XML delimiters</xs:documentation></xs:annotation>
				</xs:element>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>child elements affecting operation of this control</xs:documentation></xs:annotation>
					<xs:element ref="Condition">
						<xs:annotation><xs:documentation>Condition to specify actions for this control based on the outcome of the condition.</xs:documentation></xs:annotation>
					</xs:element>
					<xs:element ref="Publish"/>
					<xs:element ref="Subscribe"/>
				</xs:choice>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Type" use="required" type="xs:string">
			</xs:attribute>
			<xs:attribute name="X" use="required" type="xs:integer">
			</xs:attribute>
			<xs:attribute name="Y" use="required" type="xs:integer">
			</xs:attribute>
			<xs:attribute name="Width" use="required" type="xs:integer">
			</xs:attribute>
			<xs:attribute name="Height" use="required" type="xs:integer">
			</xs:attribute>
			<xs:attribute name="Property" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Text" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Help" type="xs:string">
			</xs:attribute>
			<xs:attribute name="ToolTip" type="xs:string">
			</xs:attribute>
			<xs:attribute name="CheckBoxValue" type="xs:string">
				<xs:annotation><xs:documentation>Only for CheckBox control to set Property to a value on check</xs:documentation></xs:annotation>
			</xs:attribute>
			<!-- Control ordering - order of declaration in Dialog determines tab ordering -->
			<xs:attribute name="TabSkip" type="YesNoType">
				<xs:annotation><xs:documentation>yes if this control is skipped in the tab sequence</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Default" type="YesNoType">
				<xs:annotation><xs:documentation>yes if this control invoked by the return key</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Cancel" type="YesNoType">
				<xs:annotation><xs:documentation>yes if this is the control invoked on cancel of dialog</xs:documentation></xs:annotation>
			</xs:attribute>
			<!-- common Control attributes -->
			<xs:attribute name="Hidden" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="Disabled" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="Sunken" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="Indirect" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="Integer" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="RightToLeft" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="RightAligned" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="LeftScroll" type="YesNoType">
			</xs:attribute>
			<!-- attributes applied to specific Controls -->
			<xs:attribute name="Transparent" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Text Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="NoPrefix" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Text Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="NoWrap" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Text Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="FormatSize" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Text Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="UserLanguage" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Text Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Multiline" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Edit Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Password" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Edit Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ProgressBlocks" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for ProgressBar Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Removable" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Volume and Directory Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Fixed" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Volume and Directory Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Remote" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Volume and Directory Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="CDROM" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Volume and Directory Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="RAMDisk" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Volume and Directory Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Floppy" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Volume and Directory Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ShowRollbackCost" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for VolumeCostList Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Sorted" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for Listbox and ComboBox Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ComboList" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for ComboBox Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Image" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for RadioButton, PushButton, and Icon Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="IconSize">
				<xs:annotation><xs:documentation>only valid for RadioButton, PushButton, and Icon Controls</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="16"/>
						<xs:enumeration value="32"/>
						<xs:enumeration value="48"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="FixedSize" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for RadioButton, PushButton, and Icon Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Icon" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for RadioButton and PushButton Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Bitmap" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for RadioButton and PushButton Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="PushLike" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for RadioButton and Checkbox Controls</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="HasBorder" type="YesNoType">
				<xs:annotation><xs:documentation>only valid for RadioButton Controls</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Billboard">
		<xs:annotation><xs:documentation>Billboard to display during install of a Feature.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Control" minOccurs='0' maxOccurs='unbounded'>
					<xs:annotation><xs:documentation>Can only have controls of type: Text, Bitmap, Icon, and custom</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Unique identifier for the Billboard.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Feature" type="xs:string">
				<xs:annotation><xs:documentation>Feature whose state determines if the Billboard is shown.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="BillboardAction">
		<xs:annotation><xs:documentation>Billboard action during which child Billboards are displayed.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Billboard" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Order of Billboard elements determines order of display</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Action name that determines when the Billboard should be shown.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Dialog">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Control" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Control elements belonging to this dialog</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="X" type="xs:integer">
				<xs:annotation><xs:documentation>in %, defaults to centered on screen (50)</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Y" type="xs:integer">
				<xs:annotation><xs:documentation>in %, defaults to centered on screen (50)</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Width" use="required" type="xs:integer">
				<xs:annotation><xs:documentation>in dialog units</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Height" use="required" type="xs:integer">
				<xs:annotation><xs:documentation>in dialog units</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Title" type="xs:string">
			</xs:attribute>
			<!-- 'Attributes' column integer value generated from XML attributes below -->
			<xs:attribute name="Hidden" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="Modeless" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="NoMinimize" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="SystemModal" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="KeepModeless" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="TrackDiskSpace" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="CustomPalette" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="RightToLeft" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="RightAligned" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="LeftScroll" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="ErrorDialog" type="YesNoType">
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ProgressText">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:annotation><xs:documentation>Element value is progress message text for action</xs:documentation></xs:annotation>
					<xs:attribute name="Action" type="xs:string" use="required"/>
					<xs:attribute name="Template" type="xs:string">
						<xs:annotation><xs:documentation>used to format ActionData messages from action processing</xs:documentation></xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="TextStyle">
		<xs:annotation><xs:documentation>TextStyle definition</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="FaceName" use="required" type="xs:string"/>
			<xs:attribute name="Size" use="required" type="xs:integer"/>
			<xs:attribute name="Red" type="xs:integer">
				<xs:annotation><xs:documentation>0 to 255</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Green" type="xs:integer">
				<xs:annotation><xs:documentation>0 to 255</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Blue" type="xs:integer">
				<xs:annotation><xs:documentation>0 to 255</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Bold" type="YesNoType"/>
			<xs:attribute name="Italic" type="YesNoType"/>
			<xs:attribute name="Underline" type="YesNoType"/>
			<xs:attribute name="Strike" type="YesNoType"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="ListItem">
		<xs:annotation><xs:documentation>Text and value associated with Property with Control set to listBox,listView,comboBox</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Value assigned to the associated control Property</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Text" type="xs:string">
				<xs:annotation><xs:documentation>Defaults to ListItem's value</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Icon" type="xs:string">
				<xs:annotation><xs:documentation>Only valid in ListView Properties</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ListBox">
		<xs:annotation><xs:documentation>Set of items for a particular ListBox control tied to an install Property</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ListItem" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>entry for ListBox table</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Property" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Property tied to this group</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ComboBox">
		<xs:annotation>
			<xs:documentation>Set of items for a particular ComboBox control tied to an install Property</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ListItem" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>entry for ComboBox table</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Property" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Property tied to this group</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="ListView">
		<xs:annotation><xs:documentation>Set of items for a particular ListView control tied to an install Property</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ListItem" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>entry for ListView table</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Property" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Property tied to this group</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="RadioButton">
		<xs:annotation><xs:documentation>Text and value associated with Property with Control set to radioGroup</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:annotation><xs:documentation>Element value is value assigned to the associated control Property</xs:documentation></xs:annotation>

					<xs:attribute name="X" use="required" type="xs:integer"/>
					<xs:attribute name="Y" use="required" type="xs:integer"/>
					<xs:attribute name="Width" use="required" type="xs:integer"/>
					<xs:attribute name="Height" use="required" type="xs:integer"/>
					<xs:attribute name="Text" type="xs:string">
						<xs:annotation><xs:documentation>mutually exclusive with Icon</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="Icon" type="xs:string">
						<xs:annotation><xs:documentation>mutually exclusive with Text attribute</xs:documentation></xs:annotation>
					</xs:attribute>
					<xs:attribute name="ToolTip" type="xs:string"/>
					<xs:attribute name="Help" type="xs:string"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="RadioGroup">
		<xs:annotation><xs:documentation>Set of radio buttons tied to a particular install Property</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="RadioButton" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Property" use="required" type="xs:string">
				<xs:annotation><xs:documentation>installer Property tied to this group</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="UIText">
		<xs:annotation><xs:documentation>Text associated with certain controls</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:annotation><xs:documentation>Element value is text, may use CDATA if needed to escape XML delimiters</xs:documentation></xs:annotation>
					<xs:attribute name="Id" use="required" type="xs:string"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	

	<xs:element name="UI">
		<xs:annotation><xs:documentation>Enclosing element to compartmentalize UI specifications</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="Error">
					<xs:annotation><xs:documentation>Error text associated with install error</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ProgressText">
					<xs:annotation><xs:documentation>ActionText entry associated with an action</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="BillboardAction">
					<xs:annotation><xs:documentation>Billboard table item with child Controls</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ComboBox">
					<xs:annotation><xs:documentation>ComboBox table with ListItem children</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ListBox">
					<xs:annotation><xs:documentation>ListBox table with ListItem children</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="ListView">
					<xs:annotation><xs:documentation>ListView table with ListItem children</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="RadioGroup">
					<xs:annotation><xs:documentation>RadioButton table with RadioButton children</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="TextStyle">
					<xs:annotation><xs:documentation>TextStyle entry for use in control text</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="UIText">
					<xs:annotation><xs:documentation>values for UIText property, not installer Property</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="Dialog">
					<xs:annotation><xs:documentation>Dialog specification, called from Sequence</xs:documentation></xs:annotation>
				</xs:element>
				<!-- elements with identical behavior as under Product key, solely to allow grouping with other UI elements -->
				<xs:element ref="PropertyRef"/>
				<xs:element ref="Property"/>
				<xs:element ref="Binary"/>
				<xs:sequence>
					<xs:element ref="AdminUISequence" minOccurs="0"/>
					<xs:element ref="InstallUISequence" minOccurs="0"/>
				</xs:sequence>
			</xs:choice>
		</xs:complexType>
	</xs:element>

	<!-- custom table elements -->

	<xs:element name="CustomTable">
		<xs:annotation><xs:documentation>Defines a custom table for use from a custom action.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Column" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Column definition for the custom table.</xs:documentation></xs:annotation>
				</xs:element>
				<xs:element ref="Row" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation><xs:documentation>Row definition for the custom table.</xs:documentation></xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Identifier for the custom table.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Column">
		<xs:annotation><xs:documentation>Column definition for a Custom Table</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Identifier for the column.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="PrimaryKey" type="YesNoType">
				<xs:annotation><xs:documentation>Whether this column is a primary key.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Type" use="required">
				<xs:annotation><xs:documentation>The type of this column.</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="binary"/>
						<xs:enumeration value="int"/>
						<xs:enumeration value="string"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Width" type="xs:integer">
				<xs:annotation><xs:documentation>Width of this column.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Nullable" type="YesNoType">
				<xs:annotation><xs:documentation>Whether this column can be left null.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Localizable" type="YesNoType">
				<xs:annotation><xs:documentation>Whether this column can be localized.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="MinValue" type="xs:integer">
				<xs:annotation><xs:documentation>Minimum value for a numeric value, date or version in this column.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="MaxValue" type="xs:integer">
				<xs:annotation><xs:documentation>Maximum value for a numeric value, date or version in this column.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="KeyTable" type="xs:string">
				<xs:annotation><xs:documentation>Table in which this column is an external key. Can be semicolon delimited.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="KeyColumn" type="xs:integer">
				<xs:annotation><xs:documentation>Column in the table in KeyTable attribute.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Category">
				<xs:annotation><xs:documentation>Category of this column.</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="Text"/>
						<xs:enumeration value="UpperCase"/>
						<xs:enumeration value="LowerCase"/>
						<xs:enumeration value="Integer"/>
						<xs:enumeration value="DoubleInteger"/>
						<xs:enumeration value="TimeDate"/>
						<xs:enumeration value="Identifier"/>
						<xs:enumeration value="Property"/>
						<xs:enumeration value="Filename"/>
						<xs:enumeration value="WildCardFilename"/>
						<xs:enumeration value="Path"/>
						<xs:enumeration value="Paths"/>
						<xs:enumeration value="AnyPath"/>
						<xs:enumeration value="DefaultDir"/>
						<xs:enumeration value="RegPath"/>
						<xs:enumeration value="Formatted"/>
						<xs:enumeration value="Template"/>
						<xs:enumeration value="Condition"/>
						<xs:enumeration value="Guid"/>
						<xs:enumeration value="Version"/>
						<xs:enumeration value="Language"/>
						<xs:enumeration value="Binary"/>
						<xs:enumeration value="CustomSource"/>
						<xs:enumeration value="Cabinet"/>
						<xs:enumeration value="Shortcut"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Set" type="xs:string">
				<xs:annotation><xs:documentation>Semicolon delimited list of permissible values.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation><xs:documentation>Description of this column.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Modularize" type="ModularizeType">
				<xs:annotation><xs:documentation>How this column should be modularized, if at all.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="Row">
		<xs:annotation><xs:documentation>Row data for a Custom Table</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Data" minOccurs="1" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="Data">
		<xs:annotation><xs:documentation>Data item for a row of a Custom Table</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:annotation><xs:documentation>Element value is data the data value</xs:documentation></xs:annotation>
					<xs:attribute name="Column" use="required" type="xs:string"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	
	<!-- EnsureTable element, for preserving empty tables -->

	<xs:element name="EnsureTable">
		<xs:annotation>
			<xs:documentation>
				Use this element to ensure that a table appears in the installer database, even if its empty.  
			</xs:documentation>
			<xs:appinfo>
				<dx:remarks>
					This element is particularly useful for two problems that may occur while merging merge modules:
					<ol>
						<li>
							The first likely problem is that in order to properly merge you need to have certain
							tables present prior to merging.  Using this element is one way to ensure those tables
							are present prior to the merging.
						</li>
						<li>
							The other common problem is that a merge module has incorrect validation information
							about some tables.  By ensuring these tables prior to merging, you can avoid this
							problem because the correct validation information will go into the installer database
							before the merge module has a chance to set it incorrectly.
						</li>
					</ol>
				</dx:remarks>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string">
				<xs:annotation><xs:documentation>The name of the table.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<!-- WiX server elements -->

	<xs:element name="User">
		<xs:annotation>
			<xs:documentation>User for all kinds of things.  When it is not nested under a component it is included in the MSI so it can be referenced by other elements such as the User attribute in the AppPool element.  When it is nested under a Component element, the User will be created on install and can also be used for reference.</xs:documentation>
			<xs:appinfo>
				<dx:seeAlso ref="Group"/>
				<dx:seeAlso ref="GroupRef"/>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="GroupRef" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Name" use="required" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Domain" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Password" type="xs:string">
				<xs:annotation><xs:documentation>Usually a Property that is passed in on the command-line to keep it more secure.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="PasswordNeverExpires" type="YesNoType"/>
			<xs:attribute name="CanNotChangePassword" type="YesNoType"/>
			<xs:attribute name="RemoveOnUninstall" type="YesNoType">
				<xs:annotation><xs:documentation>Indicates whether the user account should be left behind on uninstall.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="FailIfExists" type="YesNoType">
				<xs:annotation><xs:documentation>Indicates if the install should fail if the user already exists.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="UpdateIfExists" type="YesNoType">
				<xs:annotation><xs:documentation>Indicates if the user account properties should be updated if the user already exists.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name ="PasswordExpired" type="YesNoType">
				<xs:annotation><xs:documentation>Indicates whether the user must change their password on their first login.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Disabled" type="YesNoType"/>
			<xs:attribute name="CreateUser" type="YesNoType">
				<xs:annotation><xs:documentation>Indicates whether or not to create the user.  User creation can be skipped if all that is desired is to join a user to groups.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="GroupRef">
		<xs:annotation>
			<xs:documentation>Used to join a user to a group</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="Group">
		<xs:annotation>
			<xs:documentation>Group for all kinds of things</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string" use="required"/>
			<xs:attribute name="Name" type="xs:string" use="required"/>
			<xs:attribute name="Domain" type="xs:string"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebDirProperties">
		<xs:annotation>
			<xs:documentation>WebDirProperites used by one or more WebSites. Lists properties common to IIS web sites and vroots. Corresponding properties can be viewed through the IIS Manager snap-in. One property entry can be reused by multiple sites or vroots using the Id field as a reference, using WebVirtualDir.DirProperties, WebSite.DirProperties, or WebDir.DirProperties.
		</xs:documentation></xs:annotation>
		<xs:complexType>
				<xs:attribute name="Id" type="xs:string" use="required"/>
				<xs:attribute name="Read" type="YesNoType"/>
				<xs:attribute name="Write" type="YesNoType"/>
				<xs:attribute name="Script" type="YesNoType"/>
				<xs:attribute name="Execute" type="YesNoType"/>
				<xs:attribute name="AnonymousAccess" type="YesNoType">
					<xs:annotation><xs:documentation>Sets the Enable Anonymous Access checkbox, which maps anonymous users to a Windows user account. When setting this to 'yes' you should also provide the user account using the AnonymousUser attribute, and determine what setting to use for the IIsControlledPassword attribute. Defaults to 'no.'</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="AnonymousUser" type="xs:string">
					<xs:annotation><xs:documentation>Reference to the Id attribute on the User element to be used as the anonymous user for the directory. See the User element for more information.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="IIsControlledPassword" type="YesNoType">
					<xs:annotation><xs:documentation>Sets whether IIS should control the password used for the Windows account specified in the AnonymousUser attribute. Defaults to 'no.'</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="WindowsAuthentication" type="YesNoType">
					<xs:annotation><xs:documentation>Sets the Windows Authentication option, which enables integrated Windows authentication to be used on the site. Defaults to 'no.'</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="DigestAuthentication" type="YesNoType">
					<xs:annotation><xs:documentation>Sets the Digest Authentication option, which allows using digest authentication with domain user accounts. Defaults to 'no.'</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="BasicAuthentication" type="YesNoType">
					<xs:annotation><xs:documentation>Sets the Basic Authentication option, which allows clients to provide credentials in plaintext over the wire. Defaults to 'no.'</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="PassportAuthentication" type="YesNoType">
					<xs:annotation><xs:documentation>Sets the Passport Authentication option, which allows clients to provide credentials via a .Net Passport account. Defaults to 'no.'</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="LogVisits" type="YesNoType">
					<xs:annotation><xs:documentation>Sets whether visits to this site should be logged. Defaults to 'no.'</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="Index" type="YesNoType">
					<xs:annotation><xs:documentation>Sets the Index Resource option, which specifies whether this web directory should be indexed. Defaults to 'no.'</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="DefaultDocuments" type="xs:string">
					<xs:annotation><xs:documentation>The list of default documents to set for this web directory, in comma-delimited format.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="AspDetailedError" type="YesNoType">
					<xs:annotation><xs:documentation>Sets the option for whether to send detailed ASP errors back to the client on script error. Default is 'no.'</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="HttpExpires" type="xs:string">
					<xs:annotation><xs:documentation>Value to set the HttpExpires attribute to for a Web Dir in the metabase.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="CacheControlMaxAge" type="xs:integer">
					<xs:annotation><xs:documentation>Integer value specifying the cache control maximum age value.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="CacheControlCustom" type="xs:string">
					<xs:annotation><xs:documentation>Custom HTTP 1.1 cache control directives.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="ClearCustomError" type="YesNoType">
					<xs:annotation><xs:documentation>Specifies whether IIs will return custom errors for this directory.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="AccessSSL" type="YesNoType">
					<xs:annotation><xs:documentation>A value of true indicates that file access requires SSL file permission processing, with or without a client certificate. This corresponds to AccessSSL flag for AccessSSLFlags IIS metabase property.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="AccessSSL128" type="YesNoType">
					<xs:annotation><xs:documentation>A value of true indicates that file access requires SSL file permission processing with a minimum key size of 128 bits, with or without a client certificate. This corresponds to AccessSSL128 flag for AccessSSLFlags IIS metabase property.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="AccessSSLMapCert" type="YesNoType">
					<xs:annotation><xs:documentation>This corresponds to AccessSSLMapCert flag for AccessSSLFlags IIS metabase property.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="AccessSSLNegotiateCert" type="YesNoType">
					<xs:annotation><xs:documentation>This corresponds to AccessSSLNegotiateCert flag for AccessSSLFlags IIS metabase property.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="AccessSSLRequireCert" type="YesNoType">
					<xs:annotation><xs:documentation>This corresponds to AccessSSLRequireCert flag for AccessSSLFlags IIS metabase property.</xs:documentation></xs:annotation>
				</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebError">
		<xs:annotation><xs:documentation>WebError used by WebSites and VirtualDirs</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="ErrorCode" use="required" type="xs:integer">
			</xs:attribute>
			<xs:attribute name="SubCode" use="required" type="xs:integer">
			</xs:attribute>
			<xs:attribute name="Type" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="default"/>
						<xs:enumeration value="file"/>
						<xs:enumeration value="url"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Path" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="MimeMap">
		<xs:annotation><xs:documentation>MimeMap definition for IIS resources.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Id for the MimeMap.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Type" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Mime-type covered by the MimeMap.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Extension" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Extension covered by the MimeMap.  Must begin with a dot.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebFilter">
		<xs:annotation><xs:documentation>IIs Filter for a Component</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string">
				<xs:annotation><xs:documentation>The unique Id for the web filter.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" use="required" type="xs:string">
				<xs:annotation><xs:documentation>The name of the filter to be used in IIS.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Path" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Usually a Property that resolves to short file name path</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="WebSite" type="xs:string">
				<xs:annotation><xs:documentation>Required if not found as child of WebSite element</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation><xs:documentation>Description of the filter.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Flags" type="xs:integer">
				<xs:annotation><xs:documentation>Sets the MD_FILTER_FLAGS metabase key for the filter.  This must be an integer.  See MSDN 'FilterFlags' documentation for more details.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="LoadOrder" type="xs:string">
				<xs:annotation><xs:documentation>Allowed values: "first", "last", number</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebApplicationExtension">
		<xs:annotation><xs:documentation>Extension for WebApplication</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Executable" use="required" type="xs:string">
			<xs:annotation><xs:documentation>usually a Property that resolves to short file name path</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Verbs" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Script" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="CheckPath" type="YesNoType">
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebAppPool">
		<xs:annotation><xs:documentation>IIS6 Application Pool</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="RecycleTime" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Id" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Id of the AppPool.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Name of the AppPool to be shown in IIs.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="User" type="xs:string">
				<xs:annotation><xs:documentation>User account to run the AppPool as.  To use this, you must set the Identity attribute to 'other'.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="RecycleMinutes" type="xs:integer">
				<xs:annotation><xs:documentation>How often, in minutes, you want the AppPool to be recycled.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="RecycleRequests" type="xs:integer">
				<xs:annotation><xs:documentation>How often, in requests, you want the AppPool to be recycled.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="IdleTimeout" type="xs:integer">
				<xs:annotation><xs:documentation>Shutdown worker process after being idle for (time in minutes).</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="QueueLimit" type="xs:integer">
				<xs:annotation><xs:documentation>Limit the kernel request queue (number of requests).</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="MaxCpuUsage" type="PercentType">
				<xs:annotation><xs:documentation>Maximum CPU usage (percent).</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="RefreshCpu" type="xs:integer">
				<xs:annotation><xs:documentation>Refresh CPU usage numbers (in minutes).</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="CpuAction">
				<xs:annotation><xs:documentation>Action taken when CPU exceeds maximum CPU use (as defined with MaxCpuUsage and RefreshCpu).</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="none"/>
						<xs:enumeration value="shutdown"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="MaxWorkerProcesses" type="xs:integer">
				<xs:annotation><xs:documentation>Maximum number of worker processes.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Identity">
				<xs:annotation><xs:documentation>Identity you want the AppPool to run under.  Use the 'other' value in conjunction with the User attribute to specify non-standard user.</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="networkService"/>
						<xs:enumeration value="localService"/>
						<xs:enumeration value="localSystem"/>
						<xs:enumeration value="other"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="RecycleTime">
		<xs:annotation><xs:documentation>IIS6 Application Pool Recycle Times on 24 hour clock.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Value" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:pattern value="\d{1,2}:\d{2}"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="PerfCounter">
		<xs:annotation><xs:documentation>Used to install Perfmon counters.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Name" type="xs:string"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="Certificate">
		<xs:annotation><xs:documentation>SSL Certificates</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="StoreName" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="ca"/>
						<xs:enumeration value="my"/>
						<xs:enumeration value="request"/>
						<xs:enumeration value="root"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="StoreLocation" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="currentUser"/>
						<xs:enumeration value="localMachine"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Overwrite" type="YesNoType"/>
			<xs:attribute name="Request" type="YesNoType"/>
			<xs:attribute name="BinaryKey" type="xs:string"/>
			<xs:attribute name="CertificatePath" type="xs:string"/>
			<xs:attribute name="PFXPassword" type="xs:string"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebProperty">
		<xs:annotation><xs:documentation>IIsProperties</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="IIs5IsolationMode"/>
						<xs:enumeration value="MaxGlobalBandwidth"/>
						<xs:enumeration value="LogInUTF8"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="Value" type="xs:string"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebApplication">
		<xs:annotation><xs:documentation>Defines properties for a web application. These properties can be used for more than one application defined in a web site, directory, or vroot, by defining this element in a common location and referring to it by setting the WebApplication attribute of the WebSite, WebDir, and WebVirtualDir elements.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="WebApplicationExtension" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Name" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Sets the name of this application.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Isolation">
				<xs:annotation><xs:documentation>Sets the application isolation level for this application for pre-IIS 6 applications. Low means the application executes within the IIS process, medium executes pooled in a separate process, and high means execution alone in a separate process.</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="low"/>
						<xs:enumeration value="medium"/>
						<xs:enumeration value="high"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="AllowSessions" type="YesNoDefaultType">
				<xs:annotation><xs:documentation>Sets the Enable Session State option. When enabled, you can set the session timeout using the SessionTimeout attribute.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="SessionTimeout" type="xs:integer">
				<xs:annotation><xs:documentation>Sets the timeout value for sessions in minutes.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Buffer" type="YesNoDefaultType">
				<xs:annotation><xs:documentation>Sets the option that enables response buffering in the application, which allows ASP script to set response headers anywhere in the script.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ParentPaths" type="YesNoDefaultType">
				<xs:annotation><xs:documentation>Sets the parent paths option, which allows a client to use relative paths to reach parent directories from this application.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DefaultScript">
				<xs:annotation><xs:documentation>Sets the default script language for the site.</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="VBScript"/>
						<xs:enumeration value="JScript"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="ScriptTimeout" type="xs:integer">
				<xs:annotation><xs:documentation>Sets the timeout value for executing ASP scripts.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ServerDebugging" type="YesNoDefaultType">
				<xs:annotation><xs:documentation>Enable ASP server-side script debugging.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ClientDebugging" type="YesNoDefaultType">
				<xs:annotation><xs:documentation>Enable ASP client-side script debugging.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="WebAppPool" type="xs:string">
				<xs:annotation><xs:documentation>References the Id attribute of a WebAppPool element to use as the application pool for this application in IIS 6 applications.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebAddress">
		<xs:annotation><xs:documentation>WebAddress for WebSite</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="IP" type="xs:string">
				<xs:annotation><xs:documentation>For IP address "All Unassigned", do not specify this attribute or specify its value as "*".</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Port" use="required" type="xs:string"/>
			<xs:attribute name="Header" type="xs:string"/>
			<xs:attribute name="Secure" type="YesNoType"/>
			<xs:attribute name="KeyPath" type="YesNoType"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebVirtualDir">
		<xs:annotation><xs:documentation>Defines an IIS virtual directory. When this element is a child of WebSite element, the virtual directory is defined within that web site. Otherwise this virtual directory must reference a WebSite element via the WebSite attribute</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="WebApplication" minOccurs="0"/>
				<xs:element ref="WebError" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="MimeMap" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="WebSite" type="xs:string">
				<xs:annotation><xs:documentation>References the Id attribute for a WebSite in which this virtual directory belongs. Required when this element is not a child of WebSite element.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Alias" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Sets the application name, which is the URL relative path used to access this virtual directory</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Directory" use="required" type="xs:string">
				<xs:annotation><xs:documentation>References the Id attribute for a Directory element that points to the content for this virtual directory.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DirProperties" type="xs:string">
				<xs:annotation><xs:documentation>References the Id attribute for a WebDirProperties element that specifies the security and access properties for this virtual directory.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="WebApplication" type="xs:string">
				<xs:annotation><xs:documentation>References the Id attribute for a WebApplication element that specifies web application settings for this virtual directory.  If a WebApplication child is not specified, the virtual directory does not host web applications.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebDir">
		<xs:annotation><xs:documentation>Defines a subdirectory within an IIS web site. When this element is a child of WebSite, the web directory is defined within that web site. Otherwise the web directory must reference a WebSite element via the WebSite attribute.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="WebSite" type="xs:string">
				<xs:annotation><xs:documentation>References the Id attribute for a WebSite element in which this directory belongs. Required when this element is not a child of a WebSite element.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Path" type="xs:string" use="required">
				<xs:annotation><xs:documentation>Specifies the name of this web directory.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DirProperties" type="xs:string" use="required">
				<xs:annotation><xs:documentation>References the Id attribute for a WebDirProperties element that specifies the security and access properties for this web directory.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="WebApplication" type="xs:string">
				<xs:annotation><xs:documentation>References the Id attribute for a WebApplication element that specifies web application settings for this web directory.  If a WebApplication child is not specified, the web directory does not host web applications.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebSite">
		<xs:annotation>
			<xs:documentation>IIs Web Site</xs:documentation>
			<xs:appinfo>
				<dx:remarks>
					<dl>
						<dd>Nesting WebSite under a Component element will result in a WebSite being installed to the machine as the package is installed.</dd>
						<dd>Nesting WebSite under Product, Fragment, or Module 
						results in a web site "locator" record being created in 
						the IIsWebSite table.  This means that the web site 
						itself is neither installed nor uninstalled by the MSI 
						package.  It does make the database available for referencing 
						from a WebApplication, WebVirtualDir or WebDir record.  This allows an MSI to install 
						WebApplications, WebVirtualDirs or WebDirs to already existing web sites on the machine.  
						The install will fail if the web site does not exist in these cases.</dd>
					</dl>
				</dx:remarks>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="WebAddress" maxOccurs="unbounded"/>
				<xs:element ref="WebApplication" minOccurs="0"/>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="WebError"/>
					<xs:element ref="WebFilter"/>
					<xs:element ref="WebDir"/>
					<xs:element ref="WebVirtualDir"/>
				</xs:choice>
			</xs:sequence>
			<xs:attribute name="Id" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Identifier for the WebSite.  Used within the MSI package only.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" use="required" type="xs:string">
				<xs:annotation><xs:documentation>This is the name of the web site that will show up in the IIS management console.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Directory" type="xs:string">
				<xs:annotation><xs:documentation>Root directory of the web site.  Resolved to a directory in the Directory table at install time by the server custom actions.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="DirProperties" type="xs:string">
				<xs:annotation><xs:documentation>Reference to WebDirProperties element.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="AutoStart" type="YesNoType">
				<xs:annotation><xs:documentation>Specifies whether to automatically start the web site.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="StartOnInstall" type="YesNoType">
				<xs:annotation><xs:documentation>Specifies whether to start the web site on install.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ConfigureIfExists" type="YesNoType">
				<xs:annotation><xs:documentation>Specifies whether to configure the web site if it already exists.  Note: This will not affect uninstall behavior.  If the web site exists on uninstall, it will be removed.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Sequence" type="xs:integer">
				<xs:annotation><xs:documentation>Sequence that the web site is to be created in.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="WebApplication" type="xs:string">
				<xs:annotation><xs:documentation>Reference to a WebApplication that is to be installed as part of this web site.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="WebLog" type="xs:string">
				<xs:annotation><xs:documentation>Reference to WebLog definition.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebLog">
		<xs:annotation><xs:documentation>WebLog definition.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Identifier for the WebLog.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Type" use="required">
				<xs:annotation><xs:documentation>IIS - Microsoft IIS Log File Format, NCSA - NCSA Common Log File Format, ODBC - ODBC Logging, W3C - W3C Extended Log File Format</xs:documentation></xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="IIS"/>
						<xs:enumeration value="NCSA"/>
						<xs:enumeration value="ODBC"/>
						<xs:enumeration value="W3C"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="WebServiceExtension">
		<xs:annotation><xs:documentation>The WebServiceExtension property is used by the Web server to determine whether a Web service extension is permitted to run.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="File" use="required" type="xs:string">
				<xs:annotation><xs:documentation>Usually a Property that resolves to short file name path</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Description" type="xs:string">
				<xs:annotation><xs:documentation>Description of the extension.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Group" type="xs:string">
				<xs:annotation><xs:documentation>String used to identify groups of extensions.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Allow" use="required" type="YesNoType">
				<xs:annotation><xs:documentation>Indicates if the extension is allowed or denied.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="UIDeletable" type="YesNoType">
				<xs:annotation><xs:documentation>Indicates if the UI is allowed to delete the extension from the list of not.  Default: Not deletable.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="SqlString">
		<xs:annotation><xs:documentation>SQL String</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="SQL" use="required" type="xs:string"/>
			<xs:attribute name="User" type="xs:string"/>
			<xs:attribute name="SqlDb" type="xs:string"/>
			<xs:attribute name="ExecuteOnInstall" type="YesNoType"/>
			<xs:attribute name="ExecuteOnUninstall" type="YesNoType"/>
			<xs:attribute name="RollbackOnInstall" type="YesNoType"/>
			<xs:attribute name="RollbackOnUninstall" type="YesNoType"/>
			<xs:attribute name="ContinueOnError" type="YesNoType"/>
			<xs:attribute name="Sequence" type="xs:integer"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="SqlScript">
		<xs:annotation><xs:documentation>SQL Script</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Binary" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="SqlDb" type="xs:string">
				<xs:annotation><xs:documentation>required when not child of SqlDatabase</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="User" type="xs:string">
			</xs:attribute>
			<xs:attribute name="BinaryKey" type="xs:string">
				<xs:annotation><xs:documentation>only valid if no Binary child element</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="ExecuteOnInstall" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="ExecuteOnUninstall" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="RollbackOnInstall" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="RollbackOnUninstall" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="ContinueOnError" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="Sequence" type="xs:integer">
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="SqlDatabase">
		<xs:annotation>
		<xs:documentation>SQL Database</xs:documentation>
			<xs:appinfo>
				<dx:remarks>
					<dl>
						<dd>Nesting SqlDatabase under a Component element will result in a SqlDatabase being installed to the machine as the package is installed.</dd>
						<dd>Nesting SqlDatabase under Product, Fragment, or Module 
						results in a database "locator" record being created in 
						the SqlDatabase table.  This means that the database 
						itself is neither installed nor uninstalled by the MSI 
						package.  It does make the database available for referencing 
						from a SqlString or SqlScript record.  This allows MSI to install 
						SqlScripts or SqlStrings to already existing databases on the machine.  
						The install will fail if the database does not exist in these cases.</dd>
					</dl>
				</dx:remarks>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="SqlScript"/>
				<xs:element ref="SqlString"/>
				<xs:element ref="SqlFileSpec"/>
				<xs:element ref="SqlLogFileSpec"/>
			</xs:choice>
			<xs:attribute name="Id" use="required" type="xs:string"/>
			<xs:attribute name="Server" use="required" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Instance" type="xs:string">
			</xs:attribute>
			<xs:attribute name="Database" use="required" type="xs:string">
			</xs:attribute>
			<xs:attribute name="User" type="xs:string">
			</xs:attribute>
			<xs:attribute name="CreateOnInstall" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="CreateOnUninstall" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="DropOnInstall" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="DropOnUninstall" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="ContinueOnError" type="YesNoType">
			</xs:attribute>
			<xs:attribute name="ConfirmOverwrite" type="YesNoType">
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="SqlFileSpec">
		<xs:annotation><xs:documentation>File specification for a Sql database.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Filename" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Size" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="MaxSize" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="GrowthSize" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<xs:element name="SqlLogFileSpec">
		<xs:annotation><xs:documentation>File specification for a Sql database.</xs:documentation></xs:annotation>
		<xs:complexType>
			<xs:attribute name="Id" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Name" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Filename" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="Size" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="MaxSize" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
			<xs:attribute name="GrowthSize" type="xs:string">
				<xs:annotation><xs:documentation>ID of the file specification.</xs:documentation></xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>

	<!-- end WiX server elements -->

	<!-- - - - - - - - - - - Complex Type Definitions  - - - - - - - - - - - -->

	<xs:complexType name="ActionModuleSequenceType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:annotation><xs:documentation>Text node specifies the condition of the action.</xs:documentation></xs:annotation>
				<xs:attribute name="Before" type="xs:string">
					<xs:annotation><xs:documentation>The name of an action that this action should come before.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="After" type="xs:string">
					<xs:annotation><xs:documentation>The name of an action that this action should come after.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="Sequence" type="xs:integer">
					<xs:annotation><xs:documentation>A value used to indicate the position of this action in a sequence.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="Suppress" type="YesNoType">
					<xs:annotation><xs:documentation>If yes, this action will not occur.</xs:documentation></xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="ActionSequenceType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="Sequence" type="xs:integer">
					<xs:annotation><xs:documentation>A value used to indicate the position of this action in a sequence.</xs:documentation></xs:annotation>
				</xs:attribute>
				<xs:attribute name="Suppress" type="YesNoType">
					<xs:annotation><xs:documentation>If yes, this action will not occur.</xs:documentation></xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<!-- - - - - - - - - - - Simple Type Definitions - - - - - - - - - - - - -->

	<xs:simpleType name="uuid">
		<xs:annotation><xs:documentation>Values of this type will look like: "01234567-89AB-CDEF-0123-456789ABCDEF".</xs:documentation></xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="[0-9A-Fa-f]{8}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{12}"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="autogenuuid">
		<xs:annotation><xs:documentation>Values of this type will look like: "01234567-89AB-CDEF-0123-456789ABCDEF".</xs:documentation></xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="[0-9A-Fa-f]{8}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{12}|\?{8}\-\?{4}\-\?{4}\-\?{4}\-\?{12}"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="uuidorexample">
		<xs:annotation><xs:documentation>Values of this type will look like: "01234567-89AB-CDEF-0123-456789ABCDEF", but also allows "PUT-GUID-HERE" for use in examples.</xs:documentation></xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="[0-9A-Fa-f]{8}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{12}|PUT\-GUID\-HERE"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="LocalizableInteger">
		<xs:annotation><xs:documentation>Values of this type must be an integer or the value can be a localization variable with the format $(loc.VARIABLE).</xs:documentation></xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="[0-9][0-9]*|\$\(loc\.[_A-Za-z][0-9A-Za-z_]*\)"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="ShortFileNameType">
		<xs:annotation><xs:documentation>Values of this type will look like: "FileName.ext".  The following characters are not allowed: \ ? | > : / * " + , ; = [ ] less-than, or whitespace.  The name cannot be longer than 8 characters and the extension cannot exceed 3 characters.  The value could also be a localization variable with the format $(loc.VARIABLE).</xs:documentation></xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="[^\\\?|&gt;&lt;:/\*&quot;\+,;=\[\] ]{1,8}(\.[^\\\?|&gt;&lt;:/\*&quot;\+,;=\[\] ]{0,3})?|\$\(loc\.[_A-Za-z][0-9A-Za-z_]*\)"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="LongFileNameType">
		<xs:annotation><xs:documentation>Values of this type will look like: "Long File Name.extension".  The following characters are not allowed: \ ? | > : / * " or less-than.  The name must be shorter than 260 characters.  The value could also be a localization variable with the format $(loc.VARIABLE).</xs:documentation></xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="[^\\\?|&gt;&lt;:/\*&quot;]{1,259}|\$\(loc\.[_A-Za-z][0-9A-Za-z_]*\)"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="WildCardShortFileNameType">
		<xs:annotation><xs:documentation>Values of this type will look like: "File?.*".  The following characters are not allowed: \ | > : / " + , ; = [ ] less-than, or whitespace.  The name cannot be longer than 8 characters and the extension cannot exceed 3 characters.  The value could also be a localization variable with the format $(loc.VARIABLE).</xs:documentation></xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="[^\\\|&gt;&lt;:/&quot;\+,;=\[\] ]{1,8}(\.[^\\\|&gt;&lt;:/&quot;\+,;=\[\] ]{0,3})?|\$\(loc\.[_A-Za-z][0-9A-Za-z_]*\)"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="WildCardLongFileNameType">
		<xs:annotation><xs:documentation>Values of this type will look like: "Long File N?me.extension*".  The following characters are not allowed: \ | > : / " or less-than.  The name must be shorter than 260 characters.  The value could also be a localization variable with the format $(loc.VARIABLE).</xs:documentation></xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="[^\\\|&gt;&lt;:/&quot;]{1,259}|\$\(loc\.[_A-Za-z][0-9A-Za-z_]*\)"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="HexType">
		<xs:annotation><xs:documentation>This type supports any hexadecimal number.  Both upper and lower case is acceptable for letters appearing in the number.  This type also includes the empty string: "".</xs:documentation></xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="[0-9A-Fa-f]*"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="YesNoType">
		<xs:annotation><xs:documentation>Values of this type will either be "yes" or "no".</xs:documentation></xs:annotation>
		<xs:restriction base='xs:NMTOKEN'>
			<xs:enumeration value="no"/>
			<xs:enumeration value="yes"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="YesNoDefaultType">
		<xs:annotation><xs:documentation>Values of this type will either be "default", "yes", or "no".</xs:documentation></xs:annotation>
		<xs:restriction base='xs:NMTOKEN'>
			<xs:enumeration value="default"/>
			<xs:enumeration value="no"/>
			<xs:enumeration value="yes"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="PercentType">
		<xs:annotation><xs:documentation>Values of this type are any integers between 0 and 100, inclusive.</xs:documentation></xs:annotation>
		<xs:restriction base="xs:nonNegativeInteger">
			<xs:maxInclusive value="100"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="ClassContextType">
		<xs:annotation><xs:documentation>Enum type for the Class element's Context attribute list.</xs:documentation></xs:annotation>
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="LocalServer"/>
			<xs:enumeration value="LocalServer32"/>
			<xs:enumeration value="InprocServer"/>
			<xs:enumeration value="InprocServer32"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="ModularizeType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="None"/>
			<xs:enumeration value="Column"/>
			<xs:enumeration value="Property"/>
			<xs:enumeration value="Condition"/>
			<xs:enumeration value="CompanionFile"/>
			<xs:enumeration value="SemicolonDelimited"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
