<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <xsd:element name="configuration">
        <xsd:complexType>
            <xsd:all>
                <xsd:element ref="users" minOccurs="0"/>
                <xsd:element ref="contacts" minOccurs="0"/>
                <xsd:element ref="keys" minOccurs="0"/>
                <xsd:element ref="keyLayer" minOccurs="0"/>
                <xsd:element ref="identities" minOccurs="0"/>
                <xsd:element ref="telephony" minOccurs="0"/>
                <xsd:element ref="sound" minOccurs="0"/>
                <xsd:element ref="provisioning" minOccurs="0"/>
                <xsd:element ref="update" minOccurs="0"/>
                <xsd:element ref="locales" minOccurs="0"/>
                <xsd:element ref="network" minOccurs="0"/>
                <xsd:element ref="display" minOccurs="0"/>
                <xsd:element ref="userInterface" minOccurs="0"/>
                <xsd:element ref="templates" minOccurs="0"/>
                <xsd:element ref="remoteAccess" minOccurs="0"/>
                <xsd:element ref="apps" minOccurs="0"/>
                <xsd:element ref="timeAndDate" minOccurs="0"/>
                <xsd:element ref="logging" minOccurs="0"/>
                <xsd:element ref="luaLibraries" minOccurs="0"/>
            </xsd:all>
            <!-- version attribute -->
            <xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
            <!-- attribute specifying the default behaviour of the patch mechanism.
             if set to false, subelements without a patch attribute will be set removing previous values.
             if set to true, subelements keep values when no specific patch argument is given.
             
             use case: set to false for strict restores of backup files.
             -->
            <xsd:attribute name="patchDefault" type="xsd:boolean" default="true"/>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="users">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="users">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="user">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="user">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="PrimaryUser">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="user">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="NextUser">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="user">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="contacts">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="contacts">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="keys">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="keys">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="groupedKeys">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="groupedKeys">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="key">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="key">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="keyLayer">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="keyLayer">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="identities">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="identities">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="identity">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="identity">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="telephony">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="telephony">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="sound">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="sound">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="provisioning">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="provisioning">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="update">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="update">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="locales">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="locales">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="network">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="network">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="ethernet">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="ethernet">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="vpn">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="vpn">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="display">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="display">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="userInterface">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="userInterface">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="templates">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="templates">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="template">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="template">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="remoteAccess">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="remoteAccess">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="apps">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="apps">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="timeAndDate">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="timeAndDate">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="logging">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="logging">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="luaLibraries">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="luaLibraries">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="luaLibrary">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="luaLibrary">
                    <!-- The patch attribute controls whether the whole element is patched or overwritten -->
                    <xsd:attribute name="patch" type="xsd:boolean" default="true"/>
            		<!-- version attribute -->
            		<xsd:attribute name="version" type="xsd:string" default="1.3.7"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
	<xsd:complexType name="AppError">
		<xsd:all>
			<xsd:element name="code" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="message" type="xsd:string" minOccurs="0"/>
			<xsd:element name="request_id" type="xsd:string" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<!-- A list of all users -->
	<xsd:complexType name="users">
		<xsd:sequence>
			<xsd:element name="user" type="user" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<!-- A single user -->
	<xsd:complexType name="user">
		<xsd:all>
			<!-- The password for the user.
			If the password is provisioned, you have to
			supply a hashed password.
			You can create a compatible hash using the
			tool provided in the web interface
			at the following url:
			&#x60;https:
			Over the api, you send the password over HTTPS
			in clear text, where it gets hashed in the
			webserver.
			 -->
			<xsd:element name="password">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:minLength value="8"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="role" type="role" default="user"/>
			<!-- The image for the user, base64 encoded.
			The image should not exceed 300x300px.
			 -->
			<xsd:element name="image" type="xsd:string" minOccurs="0"/>
			<!-- Indicates whether a user has to change his password.
			This flag will only be evaluated by client side logins
			and any tool handling the login should honour it.
			 -->
			<xsd:element name="changePassword" type="xsd:boolean" minOccurs="0"/>
		</xsd:all>
		<xsd:attribute name="name" use="required">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:pattern value="[^:]*"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>

	<!-- The role for the user.
	an admin is allowed to do everything.
	A user is not allowed to configure anything by default,
	additional rights for the user have to be explicitly granted
	 -->
	<xsd:simpleType name="role">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="user"/>
			<xsd:enumeration value="admin"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- A list of xpath values which are supposed to
	serve as either a white or blacklist.
	 -->
	<xsd:complexType name="rights">
		<xsd:sequence>
		</xsd:sequence>
	</xsd:complexType>

	<!-- Describes a contacts setup -->
	<xsd:complexType name="contacts">
		<xsd:all>
			<xsd:element name="ldap" type="ldap" minOccurs="0"/>
			<xsd:element name="orderBy" type="orderNameBy" minOccurs="0" default="orderByFirstname"/>
		</xsd:all>
	</xsd:complexType>

	<!-- Describes a ldap setup -->
	<xsd:complexType name="ldap">
		<xsd:all>
			<!-- use this service or not -->
			<xsd:element name="active" type="xsd:boolean" minOccurs="0"/>
			<!-- ldap server address fqdn or ip address -->
			<xsd:element name="server" type="xsd:string"/>
			<xsd:element name="ldapProtocol" type="ldapProtocol" minOccurs="0" default="ldap"/>
			<!-- ldap server port 389 or 636 (LDAPS) -->
			<xsd:element name="port" minOccurs="0" default="389">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="65535"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- ldap protocol version 2 or 3 -->
			<xsd:element name="ldapVersion" type="ldapVersion" minOccurs="0" default="three"/>
			<!-- username to login -->
			<xsd:element name="username" type="xsd:string"/>
			<!-- The password to authenticate the for the ldap server -->
			<xsd:element name="password" type="xsd:string"/>
			<!-- name filter according to RFC2254 -->
			<xsd:element name="nameFilter" type="xsd:string" minOccurs="0" default="(|(cn&#x3D;%*)(sn&#x3D;%*)(givenName&#x3D;%*))"/>
			<!-- number filter according to RFC2254 for reverse number lookup -->
			<xsd:element name="numberFilter" type="xsd:string" minOccurs="0" default="(|(telephoneNumber&#x3D;*%)(mobile&#x3D;*%)(homePhone&#x3D;*%))"/>
			<!-- number filter according to RFC2254 for the number suggestion list in the dialer -->
			<xsd:element name="dialerNumberFilter" type="xsd:string" minOccurs="0" default="(|(telephoneNumber&#x3D;*%*)(mobile&#x3D;*%*)(homePhone&#x3D;*%*))"/>
			<!-- in what scope will be used searched -->
			<xsd:element name="baseDN" type="xsd:string" minOccurs="0"/>
			<!-- maximum result entries -->
			<xsd:element name="maxHits" minOccurs="0" default="20">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="32000"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- what names are you looking for -->
			<xsd:element name="nameAttributes" type="xsd:string" minOccurs="0" default="cn sn givenName company o"/>
			<!-- what numbers are you looking for -->
			<xsd:element name="numberAttributes" type="xsd:string" minOccurs="0" default="mobile telephoneNumber homePhone"/>
			<!-- find contact by incoming call number -->
			<xsd:element name="reverseNumberLookupIncoming" type="xsd:boolean" minOccurs="0" default="true"/>
			<!-- find contact by outgoing call number -->
			<xsd:element name="reverseNumberLookupOutgoing" type="xsd:boolean" minOccurs="0" default="true"/>
		</xsd:all>
	</xsd:complexType>

	<!-- ldap lts modes -->
	<xsd:simpleType name="ldapProtocol">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="ldap"/>
			<xsd:enumeration value="ldapStartTls"/>
			<xsd:enumeration value="ldaps"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- LDAP protocol version -->
	<xsd:simpleType name="ldapVersion">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="two"/>
			<xsd:enumeration value="three"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- name sorting order for contact query results -->
	<xsd:simpleType name="orderNameBy">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="orderByFirstname"/>
			<xsd:enumeration value="orderByLastname"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- 3 layer of function keys -->
	<xsd:complexType name="keyLayer">
		<xsd:all>
			<xsd:element name="phoneXtensions" type="xtensionKeyLayer" minOccurs="0" default="1"/>
			<xsd:element name="extensionModule1" type="xtensionKeyLayer" minOccurs="0" default="1"/>
			<xsd:element name="extensionModule2" type="xtensionKeyLayer" minOccurs="0" default="1"/>
			<xsd:element name="extensionModule3" type="xtensionKeyLayer" minOccurs="0" default="1"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="xtensionKeyLayer">
		<xsd:restriction base="xsd:integer">
			<xsd:minInclusive value="1"/>
			<xsd:maxInclusive value="3"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- All keys that can be configured -->
	<xsd:complexType name="keys">
		<xsd:all>
			<!-- On D-400: 20 virtual Xtension keys as part of the home-screen. -->
			<xsd:element name="phoneXtensions" minOccurs="0">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="key" type="key" minOccurs="0" maxOccurs="20"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="extensionModule1" type="xtensionKeys" minOccurs="0"/>
			<xsd:element name="extensionModule2" type="xtensionKeys" minOccurs="0"/>
			<xsd:element name="extensionModule3" type="xtensionKeys" minOccurs="0"/>
			<xsd:element name="homeScreen" type="softKeys" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<!-- 60 Xtension keys on an extension module. -->
	<xsd:complexType name="xtensionKeys">
		<xsd:sequence>
			<xsd:element name="key" type="key" minOccurs="0" maxOccurs="60"/>
		</xsd:sequence>
	</xsd:complexType>

	<!-- 4 keys below the display -->
	<xsd:complexType name="softKeys">
		<xsd:sequence>
			<xsd:element name="key" type="key" minOccurs="4" maxOccurs="4"/>
		</xsd:sequence>
	</xsd:complexType>

	<!-- abstracted version of a collection of keys without any upper bound -->
	<xsd:complexType name="groupedKeys">
		<xsd:sequence>
			<xsd:element name="key" type="key" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<!-- The group a key belongs to -->
	<xsd:simpleType name="keyGroup">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="mainModule"/>
			<xsd:enumeration value="phoneXtensions"/>
			<xsd:enumeration value="extensionModule1"/>
			<xsd:enumeration value="extensionModule2"/>
			<xsd:enumeration value="extensionModule3"/>
			<xsd:enumeration value="homeScreen"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- Describes a single functionkey -->
	<xsd:complexType name="key">
		<xsd:all>
			<xsd:element name="keyConfiguration" type="keyConfiguration" minOccurs="0"/>
			<!-- Reference to the text element of the template name.
			 -->
			<xsd:element name="templateName" type="xsd:string" minOccurs="0"/>
		</xsd:all>
		<xsd:attribute name="keyNumber" use="required">
			<xsd:simpleType>
				<xsd:restriction base="xsd:integer">
					<xsd:minInclusive value="1"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="label" type="xsd:string"/>
		<xsd:attribute name="info" type="xsd:string"/>
		<xsd:attribute name="icon" type="xsd:string"/>
	</xsd:complexType>

	<!-- Various configuration parameters for a functionkey.
	This can either be:
	- lua code
	- a line
	- a list of functions assigned to the key
	 -->
	<xsd:complexType name="keyConfiguration">
		<xsd:choice>
			<xsd:element name="lua" type="luaContent" minOccurs="0"/>
			<xsd:element name="line" type="line" minOccurs="0"/>
			<xsd:element name="function" type="keyFunction" minOccurs="0"/>
		</xsd:choice>
	</xsd:complexType>

	<!-- Describes a single function for a functionkey.
	This can any one (or both) of:
	- a reaction to something
	- invoking an action
	 -->
	<xsd:complexType name="keyFunction">
		<xsd:all>
			<xsd:element name="reactions" type="keyReactions" minOccurs="0"/>
			<xsd:element name="invocations" type="keyInvocations" minOccurs="1"/>
		</xsd:all>
	</xsd:complexType>

	<!-- An array of possible reactions for a functionkey -->
	<xsd:complexType name="keyReactions">
		<xsd:sequence>
			<xsd:element name="reaction" type="keyReaction" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<!-- A reaction for a functionkey -->
	<xsd:complexType name="keyReaction">
		<xsd:choice>
			<xsd:element name="ledSetting" type="ledSetting" minOccurs="0"/>
			<xsd:element name="presence" type="presence" minOccurs="0"/>
		</xsd:choice>
	</xsd:complexType>

	<xsd:complexType name="presence">
		<xsd:all>
			<xsd:element name="subscribe" type="subscribe"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="subscribe">
		<xsd:all>
			<xsd:element name="uri" type="uri"/>
			<!-- If left out, the first available line is used.
			 -->
			<xsd:element name="line" type="line" minOccurs="0"/>
			<!-- If the subscribeType is dialog, you can specify here
			what to listen for. In every other case, this option
			is ignored.
			 -->
			<xsd:element name="listenFor" type="xsd:string" minOccurs="0"/>
		</xsd:all>
		<xsd:attribute name="type" type="subscribeType" use="required"/>
	</xsd:complexType>

	<!-- The type of the subscription -->
	<xsd:simpleType name="subscribeType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="dialog"/>
			<xsd:enumeration value="mwi"/>
			<xsd:enumeration value="as_feature"/>
			<xsd:enumeration value="check_sync"/>
			<xsd:enumeration value="broadsoft_talk"/>
			<xsd:enumeration value="broadsoft_hold"/>
			<xsd:enumeration value="count"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- LED reactions for a key -->
	<xsd:complexType name="ledSetting">
		<xsd:all>
		</xsd:all>
		<xsd:attribute name="ledColor" type="ledColor" default="off"/>
		<xsd:attribute name="ledBlinking" type="ledBlinking"/>
	</xsd:complexType>

	<!-- An array of possible actions for a functionkey -->
	<xsd:complexType name="keyInvocations">
		<xsd:sequence>
			<xsd:element name="invocation" type="keyInvocation" minOccurs="1" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<!-- An action for a functionkey.
	This can either be:
	- A HTTP request
	- A dialogMessage
	 -->
	<xsd:complexType name="keyInvocation">
		<xsd:choice>
			<xsd:element name="http" type="keyHttpRequest" minOccurs="0"/>
			<xsd:element name="setting" type="keySetting" minOccurs="0"/>
			<xsd:element name="dialog" type="dialogMessage" minOccurs="0"/>
			<xsd:element name="invite" type="keyInvite" minOccurs="0"/>
			<xsd:element name="intent" type="keyIntent" minOccurs="0"/>
		</xsd:choice>
	</xsd:complexType>

	<xsd:complexType name="keyInvite">
		<xsd:all>
			<xsd:element name="uri" type="uri"/>
			<xsd:element name="line" type="line" minOccurs="0"/>
		</xsd:all>
		<xsd:attribute name="hidden" type="xsd:boolean"/>
	</xsd:complexType>

	<xsd:complexType name="keyIntent">
		<xsd:all>
			<xsd:element name="action" type="xsd:string"/>
			<xsd:element name="data" type="uri" minOccurs="0"/>
			<xsd:element name="component" type="component" minOccurs="0"/>
			<xsd:element name="extras" type="bundle" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="component">
		<xsd:restriction base="xsd:string">
		</xsd:restriction>
	</xsd:simpleType>

	<!-- A map of &#x60;&#x27;string&#x27;: bool | int | string&#x60;
	 -->
	<xsd:complexType name="bundle">
		<xsd:sequence>
			<xsd:choice minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="booleanExtra">
					<xsd:complexType>
						<xsd:all>
						</xsd:all>
						<xsd:attribute name="name" type="xsd:string" use="required"/>
						<xsd:attribute name="value" type="xsd:boolean"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="intExtra">
					<xsd:complexType>
						<xsd:all>
						</xsd:all>
						<xsd:attribute name="name" type="xsd:string" use="required"/>
						<xsd:attribute name="value" type="xsd:long"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="stringExtra">
					<xsd:complexType>
						<xsd:all>
						</xsd:all>
						<xsd:attribute name="name" type="xsd:string" use="required"/>
						<xsd:attribute name="value" type="xsd:string"/>
					</xsd:complexType>
				</xsd:element>
			</xsd:choice>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="bundle_key">
		<xsd:all>
		</xsd:all>
		<xsd:attribute name="name" type="xsd:string" use="required"/>
	</xsd:complexType>

	<xsd:complexType name="keySetting">
		<xsd:sequence>
			<xsd:element name="values" minOccurs="1" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:all>
						<xsd:element name="value" type="xsd:string" minOccurs="0"/>
						<xsd:element name="led" type="ledSetting" minOccurs="0"/>
					</xsd:all>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="other" type="ledSetting" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute name="path" type="uri" use="required"/>
	</xsd:complexType>

	<xsd:complexType name="line">
		<xsd:all>
			<xsd:element name="id" type="xsd:string"/>
			<xsd:element name="component" type="component" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<!-- Creates a message dialog on the screen. -->
	<xsd:simpleType name="dialogMessage">
		<xsd:restriction base="xsd:string">
		</xsd:restriction>
	</xsd:simpleType>

	<!-- A HTTP request action that can be triggered by pressing a functionkey.
	 -->
	<xsd:complexType name="keyHttpRequest">
		<xsd:all>
			<xsd:element name="request" type="httpRequest" minOccurs="0"/>
			<xsd:element name="httpReactions" type="httpReactions" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="httpReactions">
		<xsd:sequence>
			<xsd:choice minOccurs="1" maxOccurs="unbounded">
				<xsd:element name="responseCode" type="httpReactionResponseCode" minOccurs="0"/>
				<xsd:element name="responseHeader" type="httpReactionResponseHeader" minOccurs="0"/>
			</xsd:choice>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="httpReactionResponseCode">
		<xsd:all>
			<xsd:element name="responseCode" type="xsd:integer" minOccurs="0"/>
		</xsd:all>
		<xsd:attribute name="dialogMessage" type="dialogMessage"/>
		<xsd:attribute name="ledColor" type="ledColor" default="off"/>
		<xsd:attribute name="ledBlinking" type="ledBlinking"/>
	</xsd:complexType>

	<xsd:complexType name="httpReactionResponseHeader">
		<xsd:all>
		</xsd:all>
		<xsd:attribute name="dialogMessage" type="dialogMessage"/>
		<xsd:attribute name="ledColor" type="ledColor" default="off"/>
		<xsd:attribute name="ledBlinking" type="ledBlinking"/>
		<xsd:attribute name="header" type="xsd:string"/>
		<xsd:attribute name="value" type="xsd:string"/>
	</xsd:complexType>

	<!-- A HTTP Request -->
	<xsd:complexType name="httpRequest">
		<xsd:all>
			<xsd:element name="httpHeader" type="httpHeader" minOccurs="0"/>
			<xsd:element name="uri" type="uri" minOccurs="0"/>
			<xsd:element name="httpContent" type="httpContent" minOccurs="0"/>
		</xsd:all>
		<xsd:attribute name="httpMethod" type="httpMethod" use="required"/>
	</xsd:complexType>

	<!-- The content of an HTTP request -->
	<xsd:simpleType name="httpContent">
		<xsd:restriction base="xsd:string">
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="uri">
		<xsd:restriction base="xsd:string">
		</xsd:restriction>
	</xsd:simpleType>

	<!-- Possible HTTP Methods like &#x60;GET&#x60; or &#x60;POST&#x60; -->
	<xsd:simpleType name="httpMethod">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="get"/>
			<xsd:enumeration value="post"/>
			<xsd:enumeration value="delete"/>
			<xsd:enumeration value="put"/>
			<xsd:enumeration value="patch"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- Whether the LED should blink or not. -->
	<xsd:simpleType name="ledBlinking">
		<xsd:restriction base="xsd:boolean">
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="luaContent">
		<xsd:all>
			<xsd:element name="code" type="luaCode"/>
			<xsd:element name="params" minOccurs="0">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="param" type="luaParam" minOccurs="0" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:all>
	</xsd:complexType>

	<!-- A parameter for lua scripts to be set by the template. -->
	<xsd:complexType name="luaParam">
		<xsd:all>
			<xsd:element name="value" type="xsd:string" minOccurs="0"/>
		</xsd:all>
		<xsd:attribute name="name" type="xsd:string" use="required"/>
	</xsd:complexType>

	<!-- Lua code to be executed for functionkeys. -->
	<xsd:simpleType name="luaCode">
		<xsd:restriction base="xsd:string">
		</xsd:restriction>
	</xsd:simpleType>

	<!-- The possible values a LED can have.
	These are probably not supported on all LEDs.
	 -->
	<xsd:simpleType name="ledColor">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="off"/>
			<xsd:enumeration value="red"/>
			<xsd:enumeration value="orange"/>
			<xsd:enumeration value="green"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- A key/value map of a HTTP header
	&#x60;&#x60;&#x60; json
	{
	  &#x27;Accept&#x27;: &#x27;application/json&#x27;
	}
	&#x60;&#x60;&#x60;
	 -->
	<xsd:complexType name="httpHeader">
		<xsd:all>
		</xsd:all>
		<xsd:attribute name="header" type="xsd:string"/>
		<xsd:attribute name="value" type="xsd:string"/>
	</xsd:complexType>

	<!-- Identities -->
	<xsd:complexType name="identities">
		<xsd:sequence>
			<xsd:element name="identity" type="identity" minOccurs="6" maxOccurs="6"/>
		</xsd:sequence>
	</xsd:complexType>

	<!-- Describes a single identity -->
	<xsd:complexType name="identity">
		<xsd:all>
			<!-- enables the identity for registration -->
			<xsd:element name="active" type="xsd:boolean" minOccurs="0"/>
			<!-- The user part of a SIP URI to register the identity -->
			<xsd:element name="username" type="xsd:string" minOccurs="0"/>
			<!-- The password to authenticate the identity register -->
			<xsd:element name="password" type="xsd:string" minOccurs="0"/>
			<!-- The display name of the identity -->
			<xsd:element name="displayname" type="xsd:string" minOccurs="0"/>
			<!-- The SIP registrar hostname/address -->
			<xsd:element name="registrar" type="xsd:string" minOccurs="0"/>
			<!-- The SIP registrar port -->
			<xsd:element name="registrarPort" minOccurs="0" default="5060">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="65535"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- The domain of the identity (may differ from registrar) -->
			<xsd:element name="realm" type="xsd:string" minOccurs="0"/>
			<!-- outgoing port of SIP messages. 0 will be used for generating a random one. -->
			<xsd:element name="localSipPort" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:maxInclusive value="65535"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- If true a SIP REGISTER will be send -->
			<xsd:element name="sendRegister" type="xsd:boolean" minOccurs="0" default="true"/>
			<!-- Timeout of registration -->
			<xsd:element name="registerInterval" minOccurs="0" default="30">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="60"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="nat" type="nat" minOccurs="0"/>
			<xsd:element name="outboundProxy" type="outboundProxy" minOccurs="0"/>
			<!-- rtp frame size in milliseconds (typically 10, 20 or 30 ms) -->
			<xsd:element name="frameSize" minOccurs="0" default="20">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="10"/>
						<xsd:maxInclusive value="30"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="dialplan" type="dialplan" minOccurs="0"/>
			<!-- Use the dialplan when starting a call from the CallLog.
			 -->
			<xsd:element name="useDialplanInCallLog" type="xsd:boolean" minOccurs="0"/>
			<xsd:element name="audiocodecs" type="audiocodeclist" minOccurs="0"/>
			<xsd:element name="clir" type="clirType" minOccurs="0" default="displayAnonymous"/>
			<!-- The sip-username where the phone should subscribe to to get information about voice-messages. It is also used to make the call when trying to access these messages. -->
			<xsd:element name="vmb" type="xsd:string" minOccurs="0"/>
			<!-- plays local music on hold if a call of this identity is set on hold. When enabled, held calls will take away one audio-channel. Since our phones only have 2 channels, this will limit the number of simultaneous calls to two. -->
			<xsd:element name="localmoh" type="xsd:boolean" minOccurs="0"/>
			<!-- Activates sips (SIP over TLS) on connections with this identity. Most likely you have to provide a certificate for the host you provided to be able to connect safely and successfully.
			 -->
			<xsd:element name="secureConnection" type="xsd:boolean" minOccurs="0"/>
			<xsd:element name="srtp" type="srtpMode" minOccurs="0" default="optional"/>
			<!-- Validate the hostname against the CN of the provided Certificate.
			 -->
			<xsd:element name="checkHostname" type="xsd:boolean" minOccurs="0" default="true"/>
			<!-- SIPS scheme is used if activated. Means the whole SIP path must be encrypted by TLS
			 -->
			<xsd:element name="Peer2PeerTls" type="xsd:boolean" minOccurs="0"/>
			<!-- Root certificate used as a trust anchor for the host. Text in PEM format.
			 -->
			<xsd:element name="certificate" type="pemCert" minOccurs="0"/>
			<!-- used as pre code for the user part in an invite URI in case of a pickup szenario. e.g. &#x27;##06&#x27; -->
			<xsd:element name="pickupCode" type="xsd:string" minOccurs="0" default="##06"/>
			<!-- ip version (v4, v6 or automatic) for communication with the host -->
			<xsd:element name="ipVersion" type="ipVersion" minOccurs="0" default="IpAuto"/>
			<!-- The size of the incoming rtp buffer in milliseconds. Should be greater than twice the frameSize. Lesser values reduce delays in the audio handling. A greater value allows a more robust communication when there are network issues.
			 -->
			<xsd:element name="jitterBufferSize" minOccurs="0" default="60">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="40"/>
						<xsd:maxInclusive value="160"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="interfaceType" type="networkInterface" minOccurs="0" default="network"/>
			<!-- optional authentication username used by some of the providers -->
			<xsd:element name="authenticationUsername" type="xsd:string" minOccurs="0"/>
			<xsd:element name="protocolType" type="networkProtocol" minOccurs="0" default="udp"/>
			<!-- use timeout for SIP sessions -->
			<xsd:element name="sessionTimerActive" type="xsd:boolean" minOccurs="0" default="true"/>
			<!-- timeout for SIP sessions in minutes -->
			<xsd:element name="sessionTimerValue" minOccurs="0" default="15">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="2"/>
						<xsd:maxInclusive value="255"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="networkInterface">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="network"/>
			<xsd:enumeration value="vpn"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- protocol used for network traffic -->
	<xsd:simpleType name="networkProtocol">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="udp"/>
			<xsd:enumeration value="tcp"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="srtpMode">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="mandatory"/>
			<xsd:enumeration value="optional"/>
			<xsd:enumeration value="disabled"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="ipVersion">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="IpV4"/>
			<xsd:enumeration value="IpV6"/>
			<xsd:enumeration value="IpAuto"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="nat">
		<xsd:all>
			<xsd:element name="useStunSip" type="useStunSip" minOccurs="0" default="inactive"/>
			<xsd:element name="useStunRtp" type="useStunRtp" minOccurs="0" default="inactive"/>
			<xsd:element name="stunUrl" type="xsd:string" minOccurs="0"/>
			<xsd:element name="stunPort" minOccurs="0" default="3478">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="65535"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="stunRequestInterval" minOccurs="0" default="5">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="60"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="keepaliveInterval" minOccurs="0" default="45">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="15"/>
						<xsd:maxInclusive value="255"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="useStunSip">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="inactive"/>
			<xsd:enumeration value="activeStun"/>
			<xsd:enumeration value="active"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="useStunRtp">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="inactive"/>
			<xsd:enumeration value="activeStun"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="outboundProxy">
		<xsd:all>
			<xsd:element name="mode" type="outboundProxyMode" minOccurs="0" default="inactive"/>
			<xsd:element name="url" type="xsd:string" minOccurs="0"/>
			<xsd:element name="port" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="65535"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="url2" type="xsd:string" minOccurs="0"/>
			<xsd:element name="port2" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="65535"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="outboundProxyMode">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="inactive"/>
			<xsd:enumeration value="automatic"/>
			<xsd:enumeration value="manual"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="dialplan">
		<xsd:sequence>
			<xsd:element name="rule" type="rule" minOccurs="1" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="rule">
		<xsd:all>
			<xsd:element name="pattern" type="xsd:string"/>
			<xsd:element name="replace" type="xsd:string"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="audiocodeclist">
		<xsd:sequence>
			<xsd:element name="audiocodec" type="audiocodec" minOccurs="1" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:simpleType name="audiocodec">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="G.711"/>
			<xsd:enumeration value="G.722"/>
			<xsd:enumeration value="G.726"/>
			<xsd:enumeration value="G.729"/>
			<xsd:enumeration value="iLBC"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- &quot;When clir is enabled we set the X-Privacy-Header in outgoing calls. We also change the From-Header to either:&quot; &quot;- not include a display-name&quot; &quot;- say the display-name is &#x27;anonymous&#x27;&quot; &quot;- have the username set to ananymous, i.e. anonymous@registrar&quot;
	 -->
	<xsd:simpleType name="clirType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="displayEmpty"/>
			<xsd:enumeration value="displayAnonymous"/>
			<xsd:enumeration value="userAnonymous"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="audioDevice">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="speaker"/>
			<xsd:enumeration value="headset"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="sound">
		<xsd:all>
			<!-- which ringtone shall be used by default -->
			<xsd:element name="defaultRingtone" type="ringtone" minOccurs="0" default="Office2"/>
			<!-- which notification shall be used by default -->
			<xsd:element name="defaultNotification" type="notification" minOccurs="0" default="Aldebaran"/>
			<!-- which alarm shall be used by default -->
			<xsd:element name="defaultAlarm" type="alarm" minOccurs="0" default="Alarm_Beep_01"/>
			<xsd:element name="volumes" type="volumes" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="volumes">
		<xsd:all>
			<!-- volume to use when phone is ringing -->
			<xsd:element name="ringing" minOccurs="0" default="7">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:maxInclusive value="7"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- volume to use when a notification becomes active -->
			<xsd:element name="notifying" minOccurs="0" default="7">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:maxInclusive value="7"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- volume to use when an alarm becomes active -->
			<xsd:element name="alarming" minOccurs="0" default="7">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:maxInclusive value="7"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- volume-level used to play audio via headset -->
			<xsd:element name="headset" minOccurs="0" default="9">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="10"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- volume-level used to play audio via speaker -->
			<xsd:element name="speaker" minOccurs="0" default="9">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="10"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- volume-level used to play audio via handset -->
			<xsd:element name="handset" minOccurs="0" default="9">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="10"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="ringtone">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="80s"/>
			<xsd:enumeration value="American_Phone"/>
			<xsd:enumeration value="Big_A"/>
			<xsd:enumeration value="Classic1"/>
			<xsd:enumeration value="Classic2"/>
			<xsd:enumeration value="Classic3"/>
			<xsd:enumeration value="CrazyDream"/>
			<xsd:enumeration value="Door"/>
			<xsd:enumeration value="DreamTheme"/>
			<xsd:enumeration value="Groovy1"/>
			<xsd:enumeration value="Groovy2"/>
			<xsd:enumeration value="Groovy3"/>
			<xsd:enumeration value="Jazz1"/>
			<xsd:enumeration value="Jazz2"/>
			<xsd:enumeration value="Leo"/>
			<xsd:enumeration value="Office1"/>
			<xsd:enumeration value="Office2"/>
			<xsd:enumeration value="Office3"/>
			<xsd:enumeration value="Office4"/>
			<xsd:enumeration value="Old_Phone"/>
			<xsd:enumeration value="Road_Trip"/>
			<xsd:enumeration value="Special"/>
			<xsd:enumeration value="Aldebaran"/>
			<xsd:enumeration value="Talitha"/>
			<xsd:enumeration value="Selenium"/>
			<xsd:enumeration value="Alarm_Beep_01"/>
			<xsd:enumeration value="Alarm_Beep_02"/>
			<xsd:enumeration value="Scandium"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="notification">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="80s"/>
			<xsd:enumeration value="American_Phone"/>
			<xsd:enumeration value="Big_A"/>
			<xsd:enumeration value="Classic1"/>
			<xsd:enumeration value="Classic2"/>
			<xsd:enumeration value="Classic3"/>
			<xsd:enumeration value="CrazyDream"/>
			<xsd:enumeration value="Door"/>
			<xsd:enumeration value="DreamTheme"/>
			<xsd:enumeration value="Groovy1"/>
			<xsd:enumeration value="Groovy2"/>
			<xsd:enumeration value="Groovy3"/>
			<xsd:enumeration value="Jazz1"/>
			<xsd:enumeration value="Jazz2"/>
			<xsd:enumeration value="Leo"/>
			<xsd:enumeration value="Office1"/>
			<xsd:enumeration value="Office2"/>
			<xsd:enumeration value="Office3"/>
			<xsd:enumeration value="Office4"/>
			<xsd:enumeration value="Old_Phone"/>
			<xsd:enumeration value="Road_Trip"/>
			<xsd:enumeration value="Special"/>
			<xsd:enumeration value="Aldebaran"/>
			<xsd:enumeration value="Talitha"/>
			<xsd:enumeration value="Selenium"/>
			<xsd:enumeration value="Alarm_Beep_01"/>
			<xsd:enumeration value="Alarm_Beep_02"/>
			<xsd:enumeration value="Scandium"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="alarm">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="80s"/>
			<xsd:enumeration value="American_Phone"/>
			<xsd:enumeration value="Big_A"/>
			<xsd:enumeration value="Classic1"/>
			<xsd:enumeration value="Classic2"/>
			<xsd:enumeration value="Classic3"/>
			<xsd:enumeration value="CrazyDream"/>
			<xsd:enumeration value="Door"/>
			<xsd:enumeration value="DreamTheme"/>
			<xsd:enumeration value="Groovy1"/>
			<xsd:enumeration value="Groovy2"/>
			<xsd:enumeration value="Groovy3"/>
			<xsd:enumeration value="Jazz1"/>
			<xsd:enumeration value="Jazz2"/>
			<xsd:enumeration value="Leo"/>
			<xsd:enumeration value="Office1"/>
			<xsd:enumeration value="Office2"/>
			<xsd:enumeration value="Office3"/>
			<xsd:enumeration value="Office4"/>
			<xsd:enumeration value="Old_Phone"/>
			<xsd:enumeration value="Road_Trip"/>
			<xsd:enumeration value="Special"/>
			<xsd:enumeration value="Aldebaran"/>
			<xsd:enumeration value="Talitha"/>
			<xsd:enumeration value="Selenium"/>
			<xsd:enumeration value="Alarm_Beep_01"/>
			<xsd:enumeration value="Alarm_Beep_02"/>
			<xsd:enumeration value="Scandium"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="telephony">
		<xsd:all>
			<!-- if and how a waiting call has to be signalised -->
			<xsd:element name="callWaiting" type="callWaiting" minOccurs="0"/>
			<!-- if an incoming call shall be rejected -->
			<xsd:element name="doNotDisturb" type="doNotDisturb" minOccurs="0"/>
			<xsd:element name="callForwarding" type="callForwarding" minOccurs="0"/>
			<!-- Tells the PBX to hide the callers identity in outgoing calls. -->
			<xsd:element name="clir" type="clir" minOccurs="0"/>
			<!-- When enabled looks for name of call-partner in adressbooks (local, ldap, ..). -->
			<xsd:element name="reverseNumberLookup" type="reverseNumberLookup" minOccurs="0"/>
			<!-- default audio device in idle like headset or speaker -->
			<xsd:element name="defaultAudioDevice" type="audioDevice" minOccurs="0" default="speaker"/>
			<!-- line to use for unspecified outgoing calls. Uses the first defined line if not defined
			 -->
			<xsd:element name="activeLine" type="line" minOccurs="0"/>
			<!-- Time delay to start the call when there is no activity. Measured in milliseconds. -1 &#x3D; never
			 -->
			<xsd:element name="callStartTimeout" type="xsd:integer" minOccurs="0" default="-1"/>
			<!-- Time delay to accept an incoming call automatically. Measured in milliseconds. -1 &#x3D; never
			 -->
			<xsd:element name="callAcceptTimeout" minOccurs="0" default="-1">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="-1"/>
						<xsd:maxInclusive value="60000"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<!-- if an outgoing call isn&#x27;t connected (busy &#x27;CCBS&#x27;, not responding &#x27;CCNR&#x27;) -->
			<xsd:element name="callCompletion" type="callCompletion" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="callCompletion">
		<xsd:all>
			<!-- enables the function callCompletion -->
			<xsd:element name="active" type="xsd:boolean" minOccurs="0"/>
			<!-- time to wait for &#x27;not responding&#x27; in seconds -->
			<xsd:element name="timeout" minOccurs="0" default="-1">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="-1"/>
						<xsd:maxInclusive value="60"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="callWaiting">
		<xsd:all>
			<!-- enables the function callWaiting -->
			<xsd:element name="active" type="xsd:boolean" minOccurs="0"/>
			<!-- enables the signalisation of a waiting call -->
			<xsd:element name="tone" type="xsd:boolean" minOccurs="0" default="true"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="doNotDisturb">
		<xsd:all>
			<!-- enables the function doNotDisturb -->
			<xsd:element name="active" type="xsd:boolean" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="callForwarding">
		<xsd:all>
			<xsd:element name="unconditional" type="callForwardingMethod" minOccurs="0"/>
			<xsd:element name="busy" type="callForwardingMethod" minOccurs="0"/>
			<xsd:element name="noResponse" type="callForwardingMethod" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="callForwardingMethod">
		<xsd:all>
			<!-- enables call forwarding -->
			<xsd:element name="active" type="xsd:boolean"/>
			<!-- the target to forward calls to -->
			<xsd:element name="target" type="uri"/>
			<!-- the time [s] after which the call must be forwarded -->
			<xsd:element name="timeout" type="xsd:integer" minOccurs="0" default="20"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="clir">
		<xsd:all>
			<!-- Tells the PBX to hide the callers identity in outgoing calls. -->
			<xsd:element name="active" type="xsd:boolean" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="reverseNumberLookup">
		<xsd:all>
			<!-- When enabled looks for name of call-partner in adressbooks (local, ldap, ..). -->
			<xsd:element name="active" type="xsd:boolean" minOccurs="0" default="true"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="provisioning">
		<xsd:all>
			<!-- enables the provisioning -->
			<xsd:element name="active" type="xsd:boolean" minOccurs="0"/>
			<!-- checks the dhcp fields 66 and 67 for an provisioning url -->
			<xsd:element name="dhcp" type="xsd:boolean" minOccurs="0"/>
			<!-- checks for a provisioning redirection on connect.redirect.auerswald.de -->
			<xsd:element name="redirect" type="xsd:boolean" minOccurs="0"/>
			<!-- checks via properitary sip-multicast extension for an provisioning url -->
			<xsd:element name="pbx" type="xsd:boolean" minOccurs="0"/>
			<!-- the url to use when nothing else is available -->
			<xsd:element name="url" type="uri" minOccurs="0"/>
			<!-- configuration via the established sip connection -->
			<xsd:element name="sip" type="sipProvisioning" minOccurs="0"/>
			<xsd:element name="execution" type="executionTime" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="sipProvisioning">
		<xsd:all>
			<!-- allows provisioning via sip -->
			<xsd:element name="active" type="xsd:boolean" minOccurs="0"/>
			<!-- list of valid sender hosts -->
			<xsd:element name="whitelist" type="whitelist" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="whitelist">
		<xsd:sequence>
			<xsd:element name="whitelistEntry" type="whitelistEntry" minOccurs="1" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:simpleType name="whitelistEntry">
		<xsd:restriction base="xsd:string">
		</xsd:restriction>
	</xsd:simpleType>

	<!-- defines when to execute a given task. -->
	<xsd:complexType name="executionTime">
		<xsd:all>
			<xsd:element name="mondays" type="xsd:boolean" minOccurs="0"/>
			<xsd:element name="tuesdays" type="xsd:boolean" minOccurs="0"/>
			<xsd:element name="wednesdays" type="xsd:boolean" minOccurs="0"/>
			<xsd:element name="thursdays" type="xsd:boolean" minOccurs="0"/>
			<xsd:element name="fridays" type="xsd:boolean" minOccurs="0"/>
			<xsd:element name="saturdays" type="xsd:boolean" minOccurs="0"/>
			<xsd:element name="sundays" type="xsd:boolean" minOccurs="0"/>
			<!-- a time in HH:MM format -->
			<xsd:element name="time" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:pattern value="(2[0-3]|[0-1]?[0-9]):[0-5][0-9]"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="update">
		<xsd:all>
			<!-- check for updates -->
			<xsd:element name="check" type="xsd:boolean" minOccurs="0"/>
			<!-- automatically install updates if available -->
			<xsd:element name="autoInstall" type="xsd:boolean" minOccurs="0"/>
			<!-- url for update server -->
			<xsd:element name="url" type="uri" minOccurs="0"/>
			<xsd:element name="execution" type="executionTime" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="network">
		<xsd:all>
			<xsd:element name="ethernet" type="ethernet" minOccurs="0"/>
			<xsd:element name="vpn" type="vpn" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="vpn">
		<xsd:all>
			<xsd:element name="active" type="xsd:boolean" minOccurs="0"/>
			<xsd:element name="vpnType" type="vpnType" minOccurs="0" default="IpsecXauthPSK"/>
			<!-- unique identifier of the Profile -->
			<xsd:element name="name" type="xsd:string"/>
			<!-- server address or resolvable name -->
			<xsd:element name="server" type="xsd:string" minOccurs="0"/>
			<!-- username, used for xauth -->
			<xsd:element name="username" type="xsd:string" minOccurs="0"/>
			<!-- pasword, used for xauth -->
			<xsd:element name="password" type="xsd:string" minOccurs="0"/>
			<!-- multiple entries are seperated by space -->
			<xsd:element name="dnsServers" type="xsd:string" minOccurs="0"/>
			<!-- multiple entries are seperated by space -->
			<xsd:element name="searchDomains" type="xsd:string" minOccurs="0"/>
			<!-- multiple entries are seperated by space, format 10.1.0.0/16 -->
			<xsd:element name="routes" type="xsd:string" minOccurs="0"/>
			<xsd:element name="ipsecIdentifier" type="xsd:string" minOccurs="0"/>
			<!-- preshared key, used in XauthPSK -->
			<xsd:element name="ipsecSecret" type="xsd:string" minOccurs="0"/>
			<xsd:element name="ipsecUserCert" type="pemCert" minOccurs="0"/>
			<xsd:element name="ipsecUserPrivateKey" type="pemRsaKey" minOccurs="0"/>
			<xsd:element name="ipsecCaCert" type="pemCert" minOccurs="0"/>
			<xsd:element name="ipsecServerCert" type="pemCert" minOccurs="0"/>
			<!-- file content of an openvpn config file -->
			<xsd:element name="openvpnConfig" type="xsd:string" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="vpnType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="IpsecXauthPSK"/>
			<xsd:enumeration value="IpsecXauthRSA"/>
			<xsd:enumeration value="IpsecHybridRSA"/>
			<xsd:enumeration value="OpenVPN"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- X509 certificate in PEM format -->
	<xsd:simpleType name="pemCert">
		<xsd:restriction base="xsd:string">
		</xsd:restriction>
	</xsd:simpleType>

	<!-- RSA key in PEM format -->
	<xsd:simpleType name="pemRsaKey">
		<xsd:restriction base="xsd:string">
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="ethernet">
		<xsd:all>
			<xsd:element name="ipv4" type="ipv4" minOccurs="0"/>
			<xsd:element name="ipv6" type="ipv6" minOccurs="0"/>
			<xsd:element name="vlan" type="vlan" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="vlan">
		<xsd:all>
			<xsd:element name="phoneActive" type="vlanActive" minOccurs="0"/>
			<xsd:element name="phoneId" type="vlanId" minOccurs="0"/>
			<xsd:element name="phonePriority" type="vlanPriority" minOccurs="0"/>
			<xsd:element name="workstationActive" type="vlanActive" minOccurs="0"/>
			<xsd:element name="workstationId" type="vlanId" minOccurs="0"/>
			<xsd:element name="workstationPriority" type="vlanPriority" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="vlanActive">
		<xsd:restriction base="xsd:boolean">
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="vlanId">
		<xsd:restriction base="xsd:integer">
			<xsd:maxInclusive value="4095"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="vlanPriority">
		<xsd:restriction base="xsd:integer">
			<xsd:maxInclusive value="7"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="ipv4mode">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="dhcp"/>
			<xsd:enumeration value="static"/>
			<xsd:enumeration value="disable"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="ipv4">
		<xsd:all>
			<xsd:element name="mode" type="ipv4mode" default="dhcp"/>
			<xsd:element name="address" type="ipv4address" minOccurs="0"/>
			<xsd:element name="netmask" type="ipv4netmask" minOccurs="0"/>
			<xsd:element name="gateway" type="ipv4address" minOccurs="0"/>
			<xsd:element name="dns1" type="ipv4dns" minOccurs="0"/>
			<xsd:element name="dns2" type="ipv4dns" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="ipv6mode">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="dhcp"/>
			<xsd:enumeration value="slaac"/>
			<xsd:enumeration value="disable"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="ipv6">
		<xsd:all>
			<xsd:element name="mode" type="ipv6mode" default="slaac"/>
			<xsd:element name="dns1" type="ipv6address" minOccurs="0"/>
			<xsd:element name="dns2" type="ipv6address" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="ipv4address">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="ipv4dns">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="(([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])|(\s*))"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="ipv4netmask">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="(([012]?\d|3[012])|(((0|128|192|24[08]|25[24])\.0\.0\.0)|(255\.(0|128|192|24[08]|25[24])\.0\.0)|(255\.255\.(0|128|192|24[08]|25[24])\.0)|(255\.255\.255\.(0|128|192|24[08]|25[245]))))"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="ipv6address">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="(((([0-9a-fA-F]{1,4}:){7,7}([0-9a-fA-F]{1,4}))|(([0-9a-fA-F]{1,4}:){1,7})|(([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}))|(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,6})|(:((:[0-9a-fA-F]{1,4}){1,7})|:)){0,1})"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="templates">
		<xsd:sequence>
			<xsd:element name="template" type="template" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="template">
		<xsd:all>
			<xsd:element name="keyConfiguration" type="keyConfiguration"/>
			<xsd:element name="parameters" minOccurs="0">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="parameter" type="parameter" minOccurs="0" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:all>
		<xsd:attribute name="name" type="xsd:string" use="required"/>
		<xsd:attribute name="prio" type="xsd:integer"/>
		<xsd:attribute name="description" type="xsd:string"/>
		<xsd:attribute name="icon" type="xsd:string"/>
	</xsd:complexType>

	<xsd:complexType name="parameter">
		<xsd:sequence>
			<!-- List of XPath elements within the key structure.
			 -->
			<xsd:element name="path" type="xsd:string" maxOccurs="unbounded"/>
			<xsd:element name="choice" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element name="mode" type="tmpParamModeEnum" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string"/>
		<xsd:attribute name="description" type="xsd:string"/>
		<xsd:attribute name="optional" type="xsd:boolean"/>
	</xsd:complexType>

	<xsd:simpleType name="tmpParamModeEnum">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="overwrite"/>
			<xsd:enumeration value="append"/>
			<xsd:enumeration value="replace"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="display">
		<xsd:all>
			<!-- Time till lockscreen appears on no activity. Measured in milliseconds. -1 &#x3D; never
			 -->
			<xsd:element name="timeout" type="xsd:integer" minOccurs="0" default="-1"/>
			<xsd:element name="contrast" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="7"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="brightness" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:minInclusive value="1"/>
						<xsd:maxInclusive value="7"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="userInterface">
		<xsd:all>
			<xsd:element name="display" type="display" minOccurs="0"/>
			<xsd:element name="messages" type="messages" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="messages">
		<xsd:all>
			<!-- Message appears when the missed call log has entries, none of which are new to the user.
			 -->
			<xsd:element name="signalSeenMissedCalls" type="msgSignalisation" minOccurs="0" default="silent"/>
			<!-- Message appears when the mailbox has entries, none of which are new to the user.
			 -->
			<xsd:element name="signalOldMailboxMessages" type="msgSignalisation" minOccurs="0" default="silent"/>
		</xsd:all>
	</xsd:complexType>

	<!-- How to signal a message of a certain type. &quot;off &#x3D; Message never ever appears in message-screen, thus also doesn&#x27;t affect the message-LED-behaviour&quot; &quot;silent &#x3D; Message gets listed in message-screen, but doesn&#x27;t affect the message-LED-behaviour&quot; blink &#x3D; Message gets listed in message-screen. It will cause the Message-LED to blink. on &#x3D; Message gets listed in message-screen. It will cause the Message-LED to turn on, unless there is another message that overrides this with blinking. -->
	<xsd:simpleType name="msgSignalisation">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="off"/>
			<xsd:enumeration value="silent"/>
			<xsd:enumeration value="blink"/>
			<xsd:enumeration value="on"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="remoteAccess">
		<xsd:all>
			<!-- enable remote access via http(s) -->
			<xsd:element name="webd" type="xsd:boolean" minOccurs="0"/>
			<!-- enable remote access via adb -->
			<xsd:element name="adbd" type="xsd:boolean" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<!-- Configuration of pre-installed apps and store. -->
	<xsd:complexType name="apps">
		<xsd:all>
			<!-- Enables installation of additional apps. -->
			<xsd:element name="allow_install" type="xsd:boolean" minOccurs="0"/>
			<!-- Enables access to pre-installed store &#x27;F-Droid&#x27;. -->
			<xsd:element name="store_enabled" type="xsd:boolean" minOccurs="0" default="true"/>
			<!-- Enables access to pre-installed browser &#x27;Firefox Klar&#x27;. -->
			<xsd:element name="browser_enabled" type="xsd:boolean" minOccurs="0" default="true"/>
			<!-- Enables access to pre-installed mail-app &#x27;K-9 Mail&#x27;. -->
			<xsd:element name="mail_enabled" type="xsd:boolean" minOccurs="0" default="true"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="timeAndDate">
		<xsd:all>
			<xsd:element name="ntpEnable" type="xsd:boolean" minOccurs="0"/>
			<xsd:element name="ntpServer" type="uri" minOccurs="0"/>
			<xsd:element name="timezone" type="timezone" minOccurs="0"/>
			<xsd:element name="timeHourFormat" type="timeHourFormat" minOccurs="0" default="clock24hours"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="locales">
		<xsd:all>
			<xsd:element name="deviceLanguage" type="language" minOccurs="0"/>
			<xsd:element name="webserverLanguage" type="language" minOccurs="0"/>
			<xsd:element name="deviceLocation" type="locale" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<xsd:simpleType name="locale">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="de_DE"/>
			<xsd:enumeration value="de_AT"/>
			<xsd:enumeration value="de_CH"/>
			<xsd:enumeration value="de_BE"/>
			<xsd:enumeration value="en_GB"/>
			<xsd:enumeration value="fr_FR"/>
			<xsd:enumeration value="fr_CH"/>
			<xsd:enumeration value="fr_BE"/>
			<xsd:enumeration value="el_GR"/>
			<xsd:enumeration value="pl_PL"/>
			<xsd:enumeration value="es_ES"/>
			<xsd:enumeration value="nl_NL"/>
			<xsd:enumeration value="nl_BE"/>
			<xsd:enumeration value="it_IT"/>
			<xsd:enumeration value="it_CH"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="language">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="de_DE"/>
			<xsd:enumeration value="en_GB"/>
			<xsd:enumeration value="fr_FR"/>
			<xsd:enumeration value="el_GR"/>
			<xsd:enumeration value="pl_PL"/>
			<xsd:enumeration value="es_ES"/>
			<xsd:enumeration value="nl_NL"/>
			<xsd:enumeration value="it_IT"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="timeHourFormat">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="clock12hours"/>
			<xsd:enumeration value="clock24hours"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- time zone description in olsen names. Supports correct handling for summer/winter times
	 -->
	<xsd:simpleType name="timezone">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="Pacific/Midway"/>
			<xsd:enumeration value="Pacific/Honolulu"/>
			<xsd:enumeration value="America/Anchorage"/>
			<xsd:enumeration value="America/Los_Angeles"/>
			<xsd:enumeration value="America/Tijuana"/>
			<xsd:enumeration value="America/Phoenix"/>
			<xsd:enumeration value="America/Chihuahua"/>
			<xsd:enumeration value="America/Denver"/>
			<xsd:enumeration value="America/Costa_Rica"/>
			<xsd:enumeration value="America/Chicago"/>
			<xsd:enumeration value="America/Mexico_City"/>
			<xsd:enumeration value="America/Regina"/>
			<xsd:enumeration value="America/Bogota"/>
			<xsd:enumeration value="America/New_York"/>
			<xsd:enumeration value="America/Caracas"/>
			<xsd:enumeration value="America/Barbados"/>
			<xsd:enumeration value="America/Halifax"/>
			<xsd:enumeration value="America/Manaus"/>
			<xsd:enumeration value="America/Santiago"/>
			<xsd:enumeration value="America/St_Johns"/>
			<xsd:enumeration value="America/Recife"/>
			<xsd:enumeration value="America/Sao_Paulo"/>
			<xsd:enumeration value="America/Buenos_Aires"/>
			<xsd:enumeration value="America/Godthab"/>
			<xsd:enumeration value="America/Montevideo"/>
			<xsd:enumeration value="Atlantic/South_Georgia"/>
			<xsd:enumeration value="Atlantic/Azores"/>
			<xsd:enumeration value="Atlantic/Cape_Verde"/>
			<xsd:enumeration value="Africa/Casablanca"/>
			<xsd:enumeration value="Europe/London"/>
			<xsd:enumeration value="Europe/Amsterdam"/>
			<xsd:enumeration value="Europe/Belgrade"/>
			<xsd:enumeration value="Europe/Berlin"/>
			<xsd:enumeration value="Europe/Brussels"/>
			<xsd:enumeration value="Europe/Madrid"/>
			<xsd:enumeration value="Europe/Sarajevo"/>
			<xsd:enumeration value="Africa/Windhoek"/>
			<xsd:enumeration value="Africa/Brazzaville"/>
			<xsd:enumeration value="Asia/Amman"/>
			<xsd:enumeration value="Europe/Athens"/>
			<xsd:enumeration value="Europe/Istanbul"/>
			<xsd:enumeration value="Asia/Beirut"/>
			<xsd:enumeration value="Africa/Cairo"/>
			<xsd:enumeration value="Europe/Helsinki"/>
			<xsd:enumeration value="Asia/Jerusalem"/>
			<xsd:enumeration value="Europe/Minsk"/>
			<xsd:enumeration value="Africa/Harare"/>
			<xsd:enumeration value="Asia/Baghdad"/>
			<xsd:enumeration value="Europe/Moscow"/>
			<xsd:enumeration value="Asia/Kuwait"/>
			<xsd:enumeration value="Africa/Nairobi"/>
			<xsd:enumeration value="Asia/Tehran"/>
			<xsd:enumeration value="Asia/Baku"/>
			<xsd:enumeration value="Asia/Tbilisi"/>
			<xsd:enumeration value="Asia/Yerevan"/>
			<xsd:enumeration value="Asia/Dubai"/>
			<xsd:enumeration value="Asia/Kabul"/>
			<xsd:enumeration value="Asia/Karachi"/>
			<xsd:enumeration value="Asia/Oral"/>
			<xsd:enumeration value="Asia/Yekaterinburg"/>
			<xsd:enumeration value="Asia/Calcutta"/>
			<xsd:enumeration value="Asia/Colombo"/>
			<xsd:enumeration value="Asia/Katmandu"/>
			<xsd:enumeration value="Asia/Almaty"/>
			<xsd:enumeration value="Asia/Rangoon"/>
			<xsd:enumeration value="Asia/Krasnoyarsk"/>
			<xsd:enumeration value="Asia/Bangkok"/>
			<xsd:enumeration value="Asia/Jakarta"/>
			<xsd:enumeration value="Asia/Shanghai"/>
			<xsd:enumeration value="Asia/Hong_Kong"/>
			<xsd:enumeration value="Asia/Irkutsk"/>
			<xsd:enumeration value="Asia/Kuala_Lumpur"/>
			<xsd:enumeration value="Australia/Perth"/>
			<xsd:enumeration value="Asia/Taipei"/>
			<xsd:enumeration value="Asia/Seoul"/>
			<xsd:enumeration value="Asia/Tokyo"/>
			<xsd:enumeration value="Asia/Yakutsk"/>
			<xsd:enumeration value="Australia/Adelaide"/>
			<xsd:enumeration value="Australia/Darwin"/>
			<xsd:enumeration value="Australia/Brisbane"/>
			<xsd:enumeration value="Australia/Hobart"/>
			<xsd:enumeration value="Australia/Sydney"/>
			<xsd:enumeration value="Asia/Vladivostok"/>
			<xsd:enumeration value="Pacific/Guam"/>
			<xsd:enumeration value="Asia/Magadan"/>
			<xsd:enumeration value="Pacific/Noumea"/>
			<xsd:enumeration value="Pacific/Majuro"/>
			<xsd:enumeration value="Pacific/Auckland"/>
			<xsd:enumeration value="Pacific/Fiji"/>
			<xsd:enumeration value="Pacific/Tongatapu"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="logging">
		<xsd:all>
			<xsd:element name="remotes" minOccurs="0">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="remoteLog" type="remoteLog" minOccurs="0" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:all>
	</xsd:complexType>

	<xsd:complexType name="remoteLog">
		<xsd:all>
			<xsd:element name="server" type="hostname"/>
			<xsd:element name="port" type="port"/>
			<xsd:element name="protocol" type="logProtocol"/>
			<xsd:element name="filter" type="logcatFilter" minOccurs="0"/>
		</xsd:all>
	</xsd:complexType>

	<!-- Protocol to use for logging -->
	<xsd:simpleType name="logProtocol">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="udp"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- Hostname of the log server -->
	<xsd:simpleType name="hostname">
		<xsd:restriction base="xsd:string">
			<xsd:minLength value="1"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- Port of the log server -->
	<xsd:simpleType name="port">
		<xsd:restriction base="xsd:integer">
			<xsd:minInclusive value="1"/>
			<xsd:maxInclusive value="65535"/>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- Filter to use for logging. A space-separated list of TAG[:Priority]. TAG can be &quot;*&quot; for all, Priority can be one of S:silent E:error W:warning I:info D:debug V:verbose. Default priority if omitted is [V]erbose. -->
	<xsd:simpleType name="logcatFilter">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="[\S]+(:[SEWIDV])?( [\S]+(:[SEWIDV])?)*"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="luaLibraries">
		<xsd:sequence>
			<xsd:element name="luaLibrary" type="luaLibrary" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="luaLibrary">
		<xsd:all>
			<xsd:element name="code" type="luaCode" minOccurs="0"/>
		</xsd:all>
		<xsd:attribute name="name" type="xsd:string"/>
	</xsd:complexType>

</xsd:schema>
