diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 05ce09f..1a1d28b 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,9 +1,13 @@
-------------------------------------
- 6.0-0
+ 6.0-1 2019-04-28
-------------------------------------
-Upgrade to Virtualbox 6.0
-
+Add discard (TRIM) support for VDI ($enableAdvancedConfig required)
+Upgrade to Virtualbox 6.0:
+Add NVMe storage controllers support
+Add Nested VT-x/AMD-V control (System-Processor tab)
+Add Graphics controller select (Display-Screen tab)
+Known issues: no translation for new options
-------------------------------------
5.2-1 2018-11-09
-------------------------------------
diff --git a/README.md b/README.md
index d7109c6..f000080 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,8 @@ with support from various contributors (see https://github.com/phpvirtualbox/php
Originally Copyright (C) 2015 Ian Moore (imoore76 at yahoo dot com)
+VirtualBox 6.0.x adoptation by Pasha1st
+
FREE, WITHOUT WARRANTY:
All files of this program (phpVirtualBox) are distributed under the
@@ -18,7 +20,7 @@ possession.
# Installation from Zip file
-1) Download zip file from GitHub project site: https://github.com/phpvirtualbox/phpvirtualbox/archive/master.zip
+1) Download zip file from GitHub project site: https://github.com/pasha1st/phpvirtualbox-6/archive/master.zip
2) Unzip the zipfile into a folder accessible by your web server
diff --git a/VIRTUALBOX6.md b/VIRTUALBOX6.md
new file mode 100644
index 0000000..c028b8d
--- /dev/null
+++ b/VIRTUALBOX6.md
@@ -0,0 +1,11 @@
+# phpVirtualBox adaptation for VirtualBox 6.0.x by Pasha1st
+
+This adaptaion supports major features of VirtualBox 6 such as ``graphics controllers`` and ``NVMe storage controllers``
+
+Fork address:
+
+If you like this work you are welcome to send me any donation:
+* Bitcoin: ``1BsCFRCkwdcGmGDm1F8qqkm4Dcai5XtEaM``
+* WebMoney: ``R426393569840`` ``Z292591296225``
+* YandexMoney: ``pasha1st@yandex.ru``
+* PayPal:
diff --git a/endpoints/lib/config.php b/endpoints/lib/config.php
index 192d829..a5b1b48 100644
--- a/endpoints/lib/config.php
+++ b/endpoints/lib/config.php
@@ -14,7 +14,7 @@
/*
* This version of phpVirtualBox
*/
-define('PHPVBOX_VER', '6.0-0');
+define('PHPVBOX_VER', '6.0-1');
class phpVBoxConfigClass {
diff --git a/endpoints/lib/vboxServiceWrappers.php b/endpoints/lib/vboxServiceWrappers.php
index 1ba3053..cd42499 100644
--- a/endpoints/lib/vboxServiceWrappers.php
+++ b/endpoints/lib/vboxServiceWrappers.php
@@ -1,7 +1,7 @@
_this = $this->handle;
- $request->isIpv6 = (bool)$arg_isIpv6;
+ $request->isIpv6 = $arg_isIpv6;
$request->ruleName = $arg_ruleName;
$request->proto = $arg_proto;
$request->hostIP = $arg_hostIP;
@@ -373,7 +379,7 @@ public function removePortForwardRule($arg_iSipv6, $arg_ruleName)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->iSipv6 = (bool)$arg_iSipv6;
+ $request->iSipv6 = $arg_iSipv6;
$request->ruleName = $arg_ruleName;
$response = $this->connection->__soapCall('INATNetwork_removePortForwardRule', array((array)$request));
return ;
@@ -433,11 +439,11 @@ public function setEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->enabled = (bool)$value;
+ $request->enabled = $value;
}
else
{
- $request->enabled = (bool)$value->handle;
+ $request->enabled = $value->handle;
}
$this->connection->__soapCall('INATNetwork_setEnabled', array((array)$request));
}
@@ -487,11 +493,11 @@ public function setIPv6Enabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->IPv6Enabled = (bool)$value;
+ $request->IPv6Enabled = $value;
}
else
{
- $request->IPv6Enabled = (bool)$value->handle;
+ $request->IPv6Enabled = $value->handle;
}
$this->connection->__soapCall('INATNetwork_setIPv6Enabled', array((array)$request));
}
@@ -533,11 +539,11 @@ public function setAdvertiseDefaultIPv6RouteEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->advertiseDefaultIPv6RouteEnabled = (bool)$value;
+ $request->advertiseDefaultIPv6RouteEnabled = $value;
}
else
{
- $request->advertiseDefaultIPv6RouteEnabled = (bool)$value->handle;
+ $request->advertiseDefaultIPv6RouteEnabled = $value->handle;
}
$this->connection->__soapCall('INATNetwork_setAdvertiseDefaultIPv6RouteEnabled', array((array)$request));
}
@@ -556,11 +562,11 @@ public function setNeedDhcpServer($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->needDhcpServer = (bool)$value;
+ $request->needDhcpServer = $value;
}
else
{
- $request->needDhcpServer = (bool)$value->handle;
+ $request->needDhcpServer = $value->handle;
}
$this->connection->__soapCall('INATNetwork_setNeedDhcpServer', array((array)$request));
}
@@ -645,6 +651,23 @@ public function addGlobalOption($arg_option, $arg_value)
return ;
}
+ public function removeGlobalOption($arg_option)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->option = $arg_option;
+ $response = $this->connection->__soapCall('IDHCPServer_removeGlobalOption', array((array)$request));
+ return ;
+ }
+
+ public function removeGlobalOptions()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IDHCPServer_removeGlobalOptions', array((array)$request));
+ return ;
+ }
+
public function addVmSlotOption($arg_vmname, $arg_slot, $arg_option, $arg_value)
{
$request = new stdClass();
@@ -657,6 +680,17 @@ public function addVmSlotOption($arg_vmname, $arg_slot, $arg_option, $arg_value)
return ;
}
+ public function removeVmSlotOption($arg_vmname, $arg_slot, $arg_option)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->vmname = $arg_vmname;
+ $request->slot = $arg_slot;
+ $request->option = $arg_option;
+ $response = $this->connection->__soapCall('IDHCPServer_removeVmSlotOption', array((array)$request));
+ return ;
+ }
+
public function removeVmSlotOptions($arg_vmname, $arg_slot)
{
$request = new stdClass();
@@ -717,6 +751,14 @@ public function stop()
return ;
}
+ public function restart()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IDHCPServer_restart', array((array)$request));
+ return ;
+ }
+
public function getEventSource()
{
$request = new stdClass();
@@ -739,11 +781,11 @@ public function setEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->enabled = (bool)$value;
+ $request->enabled = $value;
}
else
{
- $request->enabled = (bool)$value->handle;
+ $request->enabled = $value->handle;
}
$this->connection->__soapCall('IDHCPServer_setEnabled', array((array)$request));
}
@@ -897,6 +939,14 @@ public function createAppliance()
return new IAppliance ($this->connection, $response->returnval);
}
+ public function createUnattendedInstaller()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IVirtualBox_createUnattendedInstaller', array((array)$request));
+ return new IUnattended ($this->connection, $response->returnval);
+ }
+
public function createMedium($arg_format, $arg_location, $arg_accessMode, $arg_aDeviceTypeType)
{
$request = new stdClass();
@@ -916,7 +966,7 @@ public function openMedium($arg_location, $arg_deviceType, $arg_accessMode, $arg
$request->location = $arg_location;
$request->deviceType = $arg_deviceType;
$request->accessMode = $arg_accessMode;
- $request->forceNewUuid = (bool)$arg_forceNewUuid;
+ $request->forceNewUuid = $arg_forceNewUuid;
$response = $this->connection->__soapCall('IVirtualBox_openMedium', array((array)$request));
return new IMedium ($this->connection, $response->returnval);
}
@@ -930,14 +980,15 @@ public function getGuestOSType($arg_id)
return new IGuestOSType ($this->connection, $response->returnval);
}
- public function createSharedFolder($arg_name, $arg_hostPath, $arg_writable, $arg_automount)
+ public function createSharedFolder($arg_name, $arg_hostPath, $arg_writable, $arg_automount, $arg_autoMountPoint)
{
$request = new stdClass();
$request->_this = $this->handle;
$request->name = $arg_name;
$request->hostPath = $arg_hostPath;
- $request->writable = (bool)$arg_writable;
- $request->automount = (bool)$arg_automount;
+ $request->writable = $arg_writable;
+ $request->automount = $arg_automount;
+ $request->autoMountPoint = $arg_autoMountPoint;
$response = $this->connection->__soapCall('IVirtualBox_createSharedFolder', array((array)$request));
return ;
}
@@ -1242,6 +1293,14 @@ public function getGenericNetworkDrivers()
$response = $this->connection->__soapCall('IVirtualBox_getGenericNetworkDrivers', array((array)$request));
return (array)$response->returnval;
}
+
+ public function getCloudProviderManager()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IVirtualBox_getCloudProviderManager', array((array)$request));
+ return new ICloudProviderManager ($this->connection, $response->returnval);
+ }
}
/**
@@ -1334,6 +1393,206 @@ class IVFSExplorerCollection extends VBox_ManagedObjectCollection
protected $_interfaceName = "IVFSExplorer";
}
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class ICertificate extends VBox_ManagedObject
+{
+
+ public function isCurrentlyExpired()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_isCurrentlyExpired', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function queryInfo($arg_what)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->what = $arg_what;
+ $response = $this->connection->__soapCall('ICertificate_queryInfo', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getVersionNumber()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getVersionNumber', array((array)$request));
+ return new CertificateVersion ($this->connection, $response->returnval);
+ }
+
+ public function getSerialNumber()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getSerialNumber', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getSignatureAlgorithmOID()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getSignatureAlgorithmOID', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getSignatureAlgorithmName()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getSignatureAlgorithmName', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getIssuerName()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getIssuerName', array((array)$request));
+ return (array)$response->returnval;
+ }
+
+ public function getSubjectName()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getSubjectName', array((array)$request));
+ return (array)$response->returnval;
+ }
+
+ public function getFriendlyName()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getFriendlyName', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getValidityPeriodNotBefore()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getValidityPeriodNotBefore', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getValidityPeriodNotAfter()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getValidityPeriodNotAfter', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getPublicKeyAlgorithmOID()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getPublicKeyAlgorithmOID', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getPublicKeyAlgorithm()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getPublicKeyAlgorithm', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getSubjectPublicKey()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getSubjectPublicKey', array((array)$request));
+ return (array)$response->returnval;
+ }
+
+ public function getIssuerUniqueIdentifier()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getIssuerUniqueIdentifier', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getSubjectUniqueIdentifier()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getSubjectUniqueIdentifier', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getCertificateAuthority()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getCertificateAuthority', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function getKeyUsage()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getKeyUsage', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function getExtendedKeyUsage()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getExtendedKeyUsage', array((array)$request));
+ return (array)$response->returnval;
+ }
+
+ public function getRawCertData()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getRawCertData', array((array)$request));
+ return (array)$response->returnval;
+ }
+
+ public function getSelfSigned()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getSelfSigned', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function getTrusted()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getTrusted', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function getExpired()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICertificate_getExpired', array((array)$request));
+ return (bool)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class ICertificateCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "ICertificate";
+}
+
/**
* Generated VBoxWebService Interface Wrapper
*/
@@ -1452,6 +1711,14 @@ public function getMachines()
$response = $this->connection->__soapCall('IAppliance_getMachines', array((array)$request));
return (array)$response->returnval;
}
+
+ public function getCertificate()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IAppliance_getCertificate', array((array)$request));
+ return new ICertificate ($this->connection, $response->returnval);
+ }
}
/**
@@ -1485,6 +1752,15 @@ public function getDescriptionByType($arg_type)
return array(new VirtualSystemDescriptionTypeCollection ($this->connection, (array)$response->types), (array)$response->refs, (array)$response->OVFValues, (array)$response->VBoxValues, (array)$response->extraConfigValues);
}
+ public function removeDescriptionByType($arg_type)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->type = $arg_type;
+ $response = $this->connection->__soapCall('IVirtualSystemDescription_removeDescriptionByType', array((array)$request));
+ return ;
+ }
+
public function getValuesByType($arg_type, $arg_which)
{
$request = new stdClass();
@@ -1537,520 +1813,1668 @@ class IVirtualSystemDescriptionCollection extends VBox_ManagedObjectCollection
/**
* Generated VBoxWebService Interface Wrapper
*/
-class IBIOSSettings extends VBox_ManagedObject
+class IUnattended extends VBox_ManagedObject
{
- public function getLogoFadeIn()
+ public function detectIsoOS()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IBIOSSettings_getLogoFadeIn', array((array)$request));
- return (bool)$response->returnval;
+ $response = $this->connection->__soapCall('IUnattended_detectIsoOS', array((array)$request));
+ return ;
}
- public function setLogoFadeIn($value)
+ public function prepare()
{
$request = new stdClass();
$request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->logoFadeIn = (bool)$value;
- }
- else
- {
- $request->logoFadeIn = (bool)$value->handle;
- }
- $this->connection->__soapCall('IBIOSSettings_setLogoFadeIn', array((array)$request));
+ $response = $this->connection->__soapCall('IUnattended_prepare', array((array)$request));
+ return ;
}
- public function getLogoFadeOut()
+ public function constructMedia()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IBIOSSettings_getLogoFadeOut', array((array)$request));
- return (bool)$response->returnval;
+ $response = $this->connection->__soapCall('IUnattended_constructMedia', array((array)$request));
+ return ;
}
- public function setLogoFadeOut($value)
+ public function reconfigureVM()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUnattended_reconfigureVM', array((array)$request));
+ return ;
+ }
+
+ public function done()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUnattended_done', array((array)$request));
+ return ;
+ }
+
+ public function getIsoPath()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUnattended_getIsoPath', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function setIsoPath($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->logoFadeOut = (bool)$value;
+ $request->isoPath = $value;
}
else
{
- $request->logoFadeOut = (bool)$value->handle;
+ $request->isoPath = $value->handle;
}
- $this->connection->__soapCall('IBIOSSettings_setLogoFadeOut', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setIsoPath', array((array)$request));
}
- public function getLogoDisplayTime()
+ public function getMachine()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IBIOSSettings_getLogoDisplayTime', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('IUnattended_getMachine', array((array)$request));
+ return new IMachine ($this->connection, $response->returnval);
}
- public function setLogoDisplayTime($value)
+ public function setMachine($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->logoDisplayTime = $value;
+ $request->machine = $value;
}
else
{
- $request->logoDisplayTime = $value->handle;
+ $request->machine = $value->handle;
}
- $this->connection->__soapCall('IBIOSSettings_setLogoDisplayTime', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setMachine', array((array)$request));
}
- public function getLogoImagePath()
+ public function getUser()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IBIOSSettings_getLogoImagePath', array((array)$request));
+ $response = $this->connection->__soapCall('IUnattended_getUser', array((array)$request));
return (string)$response->returnval;
}
- public function setLogoImagePath($value)
+ public function setUser($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->logoImagePath = $value;
+ $request->user = $value;
}
else
{
- $request->logoImagePath = $value->handle;
+ $request->user = $value->handle;
}
- $this->connection->__soapCall('IBIOSSettings_setLogoImagePath', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setUser', array((array)$request));
}
- public function getBootMenuMode()
+ public function getPassword()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IBIOSSettings_getBootMenuMode', array((array)$request));
- return new BIOSBootMenuMode ($this->connection, $response->returnval);
+ $response = $this->connection->__soapCall('IUnattended_getPassword', array((array)$request));
+ return (string)$response->returnval;
}
- public function setBootMenuMode($value)
+ public function setPassword($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->bootMenuMode = $value;
+ $request->password = $value;
}
else
{
- $request->bootMenuMode = $value->handle;
+ $request->password = $value->handle;
}
- $this->connection->__soapCall('IBIOSSettings_setBootMenuMode', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setPassword', array((array)$request));
}
- public function getACPIEnabled()
+ public function getFullUserName()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IBIOSSettings_getACPIEnabled', array((array)$request));
- return (bool)$response->returnval;
+ $response = $this->connection->__soapCall('IUnattended_getFullUserName', array((array)$request));
+ return (string)$response->returnval;
}
- public function setACPIEnabled($value)
+ public function setFullUserName($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->ACPIEnabled = (bool)$value;
+ $request->fullUserName = $value;
}
else
{
- $request->ACPIEnabled = (bool)$value->handle;
+ $request->fullUserName = $value->handle;
}
- $this->connection->__soapCall('IBIOSSettings_setACPIEnabled', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setFullUserName', array((array)$request));
}
- public function getIOAPICEnabled()
+ public function getProductKey()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IBIOSSettings_getIOAPICEnabled', array((array)$request));
- return (bool)$response->returnval;
+ $response = $this->connection->__soapCall('IUnattended_getProductKey', array((array)$request));
+ return (string)$response->returnval;
}
- public function setIOAPICEnabled($value)
+ public function setProductKey($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->IOAPICEnabled = (bool)$value;
+ $request->productKey = $value;
}
else
{
- $request->IOAPICEnabled = (bool)$value->handle;
+ $request->productKey = $value->handle;
}
- $this->connection->__soapCall('IBIOSSettings_setIOAPICEnabled', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setProductKey', array((array)$request));
}
- public function getTimeOffset()
+ public function getAdditionsIsoPath()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IBIOSSettings_getTimeOffset', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('IUnattended_getAdditionsIsoPath', array((array)$request));
+ return (string)$response->returnval;
}
- public function setTimeOffset($value)
+ public function setAdditionsIsoPath($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->timeOffset = $value;
+ $request->additionsIsoPath = $value;
}
else
{
- $request->timeOffset = $value->handle;
+ $request->additionsIsoPath = $value->handle;
}
- $this->connection->__soapCall('IBIOSSettings_setTimeOffset', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setAdditionsIsoPath', array((array)$request));
}
- public function getPXEDebugEnabled()
+ public function getInstallGuestAdditions()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IBIOSSettings_getPXEDebugEnabled', array((array)$request));
+ $response = $this->connection->__soapCall('IUnattended_getInstallGuestAdditions', array((array)$request));
return (bool)$response->returnval;
}
- public function setPXEDebugEnabled($value)
+ public function setInstallGuestAdditions($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->PXEDebugEnabled = (bool)$value;
+ $request->installGuestAdditions = $value;
}
else
{
- $request->PXEDebugEnabled = (bool)$value->handle;
+ $request->installGuestAdditions = $value->handle;
}
- $this->connection->__soapCall('IBIOSSettings_setPXEDebugEnabled', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setInstallGuestAdditions', array((array)$request));
}
- public function getNonVolatileStorageFile()
+ public function getValidationKitIsoPath()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IBIOSSettings_getNonVolatileStorageFile', array((array)$request));
+ $response = $this->connection->__soapCall('IUnattended_getValidationKitIsoPath', array((array)$request));
return (string)$response->returnval;
}
-}
-
-/**
- * Generated VBoxWebService Managed Object Collection
- */
-class IBIOSSettingsCollection extends VBox_ManagedObjectCollection
-{
- protected $_interfaceName = "IBIOSSettings";
-}
-/**
- * Generated VBoxWebService Interface Wrapper
- */
-class IPCIAddress extends VBox_ManagedObject
-{
+ public function setValidationKitIsoPath($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->validationKitIsoPath = $value;
+ }
+ else
+ {
+ $request->validationKitIsoPath = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setValidationKitIsoPath', array((array)$request));
+ }
- public function asLong()
+ public function getInstallTestExecService()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IPCIAddress_asLong', array((array)$request));
- return (int)$response->returnval;
+ $response = $this->connection->__soapCall('IUnattended_getInstallTestExecService', array((array)$request));
+ return (bool)$response->returnval;
}
- public function fromLong($arg_number)
+ public function setInstallTestExecService($value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->number = $arg_number;
- $response = $this->connection->__soapCall('IPCIAddress_fromLong', array((array)$request));
- return ;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->installTestExecService = $value;
+ }
+ else
+ {
+ $request->installTestExecService = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setInstallTestExecService', array((array)$request));
}
- public function getBus()
+ public function getTimeZone()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IPCIAddress_getBus', array((array)$request));
- return (int)$response->returnval;
+ $response = $this->connection->__soapCall('IUnattended_getTimeZone', array((array)$request));
+ return (string)$response->returnval;
}
- public function setBus($value)
+ public function setTimeZone($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->bus = $value;
+ $request->timeZone = $value;
}
else
{
- $request->bus = $value->handle;
+ $request->timeZone = $value->handle;
}
- $this->connection->__soapCall('IPCIAddress_setBus', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setTimeZone', array((array)$request));
}
- public function getDevice()
+ public function getLocale()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IPCIAddress_getDevice', array((array)$request));
- return (int)$response->returnval;
+ $response = $this->connection->__soapCall('IUnattended_getLocale', array((array)$request));
+ return (string)$response->returnval;
}
- public function setDevice($value)
+ public function setLocale($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->device = $value;
+ $request->locale = $value;
}
else
{
- $request->device = $value->handle;
+ $request->locale = $value->handle;
}
- $this->connection->__soapCall('IPCIAddress_setDevice', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setLocale', array((array)$request));
}
- public function getDevFunction()
+ public function getLanguage()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IPCIAddress_getDevFunction', array((array)$request));
- return (int)$response->returnval;
+ $response = $this->connection->__soapCall('IUnattended_getLanguage', array((array)$request));
+ return (string)$response->returnval;
}
- public function setDevFunction($value)
+ public function setLanguage($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->devFunction = $value;
+ $request->language = $value;
}
else
{
- $request->devFunction = $value->handle;
+ $request->language = $value->handle;
}
- $this->connection->__soapCall('IPCIAddress_setDevFunction', array((array)$request));
+ $this->connection->__soapCall('IUnattended_setLanguage', array((array)$request));
}
-}
-
-/**
- * Generated VBoxWebService Managed Object Collection
- */
-class IPCIAddressCollection extends VBox_ManagedObjectCollection
-{
- protected $_interfaceName = "IPCIAddress";
-}
-
-/**
- * Generated VBoxWebService Interface Wrapper
- */
-class IMachine extends VBox_ManagedObject
-{
- public function lockMachine($arg_session, $arg_lockType)
+ public function getCountry()
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->session = $arg_session;
- $request->lockType = $arg_lockType;
- $response = $this->connection->__soapCall('IMachine_lockMachine', array((array)$request));
- return ;
+ $response = $this->connection->__soapCall('IUnattended_getCountry', array((array)$request));
+ return (string)$response->returnval;
}
- public function launchVMProcess($arg_session, $arg_name, $arg_environment)
+ public function setCountry($value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->session = $arg_session;
- $request->name = $arg_name;
- $request->environment = $arg_environment;
- $response = $this->connection->__soapCall('IMachine_launchVMProcess', array((array)$request));
- return new IProgress ($this->connection, $response->returnval);
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->country = $value;
+ }
+ else
+ {
+ $request->country = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setCountry', array((array)$request));
}
- public function setBootOrder($arg_position, $arg_device)
+ public function getProxy()
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->position = $arg_position;
- $request->device = $arg_device;
- $response = $this->connection->__soapCall('IMachine_setBootOrder', array((array)$request));
- return ;
+ $response = $this->connection->__soapCall('IUnattended_getProxy', array((array)$request));
+ return (string)$response->returnval;
}
- public function getBootOrder($arg_position)
+ public function setProxy($value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->position = $arg_position;
- $response = $this->connection->__soapCall('IMachine_getBootOrder', array((array)$request));
- return new DeviceType ($this->connection, $response->returnval);
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->proxy = $value;
+ }
+ else
+ {
+ $request->proxy = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setProxy', array((array)$request));
}
- public function attachDevice($arg_name, $arg_controllerPort, $arg_device, $arg_type, $arg_medium)
+ public function getPackageSelectionAdjustments()
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $request->type = $arg_type;
- $request->medium = $arg_medium;
- $response = $this->connection->__soapCall('IMachine_attachDevice', array((array)$request));
- return ;
+ $response = $this->connection->__soapCall('IUnattended_getPackageSelectionAdjustments', array((array)$request));
+ return (string)$response->returnval;
}
- public function attachDeviceWithoutMedium($arg_name, $arg_controllerPort, $arg_device, $arg_type)
+ public function setPackageSelectionAdjustments($value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $request->type = $arg_type;
- $response = $this->connection->__soapCall('IMachine_attachDeviceWithoutMedium', array((array)$request));
- return ;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->packageSelectionAdjustments = $value;
+ }
+ else
+ {
+ $request->packageSelectionAdjustments = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setPackageSelectionAdjustments', array((array)$request));
}
- public function detachDevice($arg_name, $arg_controllerPort, $arg_device)
+ public function getHostname()
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $response = $this->connection->__soapCall('IMachine_detachDevice', array((array)$request));
- return ;
+ $response = $this->connection->__soapCall('IUnattended_getHostname', array((array)$request));
+ return (string)$response->returnval;
}
- public function passthroughDevice($arg_name, $arg_controllerPort, $arg_device, $arg_passthrough)
+ public function setHostname($value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $request->passthrough = (bool)$arg_passthrough;
- $response = $this->connection->__soapCall('IMachine_passthroughDevice', array((array)$request));
- return ;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->hostname = $value;
+ }
+ else
+ {
+ $request->hostname = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setHostname', array((array)$request));
}
- public function temporaryEjectDevice($arg_name, $arg_controllerPort, $arg_device, $arg_temporaryEject)
+ public function getAuxiliaryBasePath()
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $request->temporaryEject = (bool)$arg_temporaryEject;
- $response = $this->connection->__soapCall('IMachine_temporaryEjectDevice', array((array)$request));
- return ;
+ $response = $this->connection->__soapCall('IUnattended_getAuxiliaryBasePath', array((array)$request));
+ return (string)$response->returnval;
}
- public function nonRotationalDevice($arg_name, $arg_controllerPort, $arg_device, $arg_nonRotational)
+ public function setAuxiliaryBasePath($value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $request->nonRotational = (bool)$arg_nonRotational;
- $response = $this->connection->__soapCall('IMachine_nonRotationalDevice', array((array)$request));
- return ;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->auxiliaryBasePath = $value;
+ }
+ else
+ {
+ $request->auxiliaryBasePath = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setAuxiliaryBasePath', array((array)$request));
}
- public function setAutoDiscardForDevice($arg_name, $arg_controllerPort, $arg_device, $arg_discard)
+ public function getImageIndex()
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $request->discard = (bool)$arg_discard;
- $response = $this->connection->__soapCall('IMachine_setAutoDiscardForDevice', array((array)$request));
- return ;
+ $response = $this->connection->__soapCall('IUnattended_getImageIndex', array((array)$request));
+ return (float)$response->returnval;
}
- public function setHotPluggableForDevice($arg_name, $arg_controllerPort, $arg_device, $arg_hotPluggable)
+ public function setImageIndex($value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $request->hotPluggable = (bool)$arg_hotPluggable;
- $response = $this->connection->__soapCall('IMachine_setHotPluggableForDevice', array((array)$request));
- return ;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->imageIndex = $value;
+ }
+ else
+ {
+ $request->imageIndex = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setImageIndex', array((array)$request));
}
- public function setBandwidthGroupForDevice($arg_name, $arg_controllerPort, $arg_device, $arg_bandwidthGroup)
+ public function getScriptTemplatePath()
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $request->bandwidthGroup = $arg_bandwidthGroup;
- $response = $this->connection->__soapCall('IMachine_setBandwidthGroupForDevice', array((array)$request));
- return ;
+ $response = $this->connection->__soapCall('IUnattended_getScriptTemplatePath', array((array)$request));
+ return (string)$response->returnval;
}
- public function setNoBandwidthGroupForDevice($arg_name, $arg_controllerPort, $arg_device)
+ public function setScriptTemplatePath($value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $response = $this->connection->__soapCall('IMachine_setNoBandwidthGroupForDevice', array((array)$request));
- return ;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->scriptTemplatePath = $value;
+ }
+ else
+ {
+ $request->scriptTemplatePath = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setScriptTemplatePath', array((array)$request));
}
- public function unmountMedium($arg_name, $arg_controllerPort, $arg_device, $arg_force)
+ public function getPostInstallScriptTemplatePath()
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
- $request->force = (bool)$arg_force;
- $response = $this->connection->__soapCall('IMachine_unmountMedium', array((array)$request));
- return ;
+ $response = $this->connection->__soapCall('IUnattended_getPostInstallScriptTemplatePath', array((array)$request));
+ return (string)$response->returnval;
}
- public function mountMedium($arg_name, $arg_controllerPort, $arg_device, $arg_medium, $arg_force)
+ public function setPostInstallScriptTemplatePath($value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->name = $arg_name;
- $request->controllerPort = $arg_controllerPort;
- $request->device = $arg_device;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->postInstallScriptTemplatePath = $value;
+ }
+ else
+ {
+ $request->postInstallScriptTemplatePath = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setPostInstallScriptTemplatePath', array((array)$request));
+ }
+
+ public function getPostInstallCommand()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUnattended_getPostInstallCommand', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function setPostInstallCommand($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->postInstallCommand = $value;
+ }
+ else
+ {
+ $request->postInstallCommand = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setPostInstallCommand', array((array)$request));
+ }
+
+ public function getExtraInstallKernelParameters()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUnattended_getExtraInstallKernelParameters', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function setExtraInstallKernelParameters($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->extraInstallKernelParameters = $value;
+ }
+ else
+ {
+ $request->extraInstallKernelParameters = $value->handle;
+ }
+ $this->connection->__soapCall('IUnattended_setExtraInstallKernelParameters', array((array)$request));
+ }
+
+ public function getDetectedOSTypeId()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUnattended_getDetectedOSTypeId', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getDetectedOSVersion()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUnattended_getDetectedOSVersion', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getDetectedOSFlavor()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUnattended_getDetectedOSFlavor', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getDetectedOSLanguages()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUnattended_getDetectedOSLanguages', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getDetectedOSHints()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUnattended_getDetectedOSHints', array((array)$request));
+ return (string)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IUnattendedCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IUnattended";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IBIOSSettings extends VBox_ManagedObject
+{
+
+ public function getLogoFadeIn()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getLogoFadeIn', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function setLogoFadeIn($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->logoFadeIn = $value;
+ }
+ else
+ {
+ $request->logoFadeIn = $value->handle;
+ }
+ $this->connection->__soapCall('IBIOSSettings_setLogoFadeIn', array((array)$request));
+ }
+
+ public function getLogoFadeOut()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getLogoFadeOut', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function setLogoFadeOut($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->logoFadeOut = $value;
+ }
+ else
+ {
+ $request->logoFadeOut = $value->handle;
+ }
+ $this->connection->__soapCall('IBIOSSettings_setLogoFadeOut', array((array)$request));
+ }
+
+ public function getLogoDisplayTime()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getLogoDisplayTime', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setLogoDisplayTime($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->logoDisplayTime = $value;
+ }
+ else
+ {
+ $request->logoDisplayTime = $value->handle;
+ }
+ $this->connection->__soapCall('IBIOSSettings_setLogoDisplayTime', array((array)$request));
+ }
+
+ public function getLogoImagePath()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getLogoImagePath', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function setLogoImagePath($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->logoImagePath = $value;
+ }
+ else
+ {
+ $request->logoImagePath = $value->handle;
+ }
+ $this->connection->__soapCall('IBIOSSettings_setLogoImagePath', array((array)$request));
+ }
+
+ public function getBootMenuMode()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getBootMenuMode', array((array)$request));
+ return new BIOSBootMenuMode ($this->connection, $response->returnval);
+ }
+
+ public function setBootMenuMode($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->bootMenuMode = $value;
+ }
+ else
+ {
+ $request->bootMenuMode = $value->handle;
+ }
+ $this->connection->__soapCall('IBIOSSettings_setBootMenuMode', array((array)$request));
+ }
+
+ public function getACPIEnabled()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getACPIEnabled', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function setACPIEnabled($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->ACPIEnabled = $value;
+ }
+ else
+ {
+ $request->ACPIEnabled = $value->handle;
+ }
+ $this->connection->__soapCall('IBIOSSettings_setACPIEnabled', array((array)$request));
+ }
+
+ public function getIOAPICEnabled()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getIOAPICEnabled', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function setIOAPICEnabled($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->IOAPICEnabled = $value;
+ }
+ else
+ {
+ $request->IOAPICEnabled = $value->handle;
+ }
+ $this->connection->__soapCall('IBIOSSettings_setIOAPICEnabled', array((array)$request));
+ }
+
+ public function getAPICMode()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getAPICMode', array((array)$request));
+ return new APICMode ($this->connection, $response->returnval);
+ }
+
+ public function setAPICMode($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->APICMode = $value;
+ }
+ else
+ {
+ $request->APICMode = $value->handle;
+ }
+ $this->connection->__soapCall('IBIOSSettings_setAPICMode', array((array)$request));
+ }
+
+ public function getTimeOffset()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getTimeOffset', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setTimeOffset($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->timeOffset = $value;
+ }
+ else
+ {
+ $request->timeOffset = $value->handle;
+ }
+ $this->connection->__soapCall('IBIOSSettings_setTimeOffset', array((array)$request));
+ }
+
+ public function getPXEDebugEnabled()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getPXEDebugEnabled', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function setPXEDebugEnabled($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->PXEDebugEnabled = $value;
+ }
+ else
+ {
+ $request->PXEDebugEnabled = $value->handle;
+ }
+ $this->connection->__soapCall('IBIOSSettings_setPXEDebugEnabled', array((array)$request));
+ }
+
+ public function getNonVolatileStorageFile()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IBIOSSettings_getNonVolatileStorageFile', array((array)$request));
+ return (string)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IBIOSSettingsCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IBIOSSettings";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IRecordingScreenSettings extends VBox_ManagedObject
+{
+
+ public function isFeatureEnabled($arg_feature)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->feature = $arg_feature;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_isFeatureEnabled', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function getId()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getId', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function getEnabled()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getEnabled', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function setEnabled($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->enabled = $value;
+ }
+ else
+ {
+ $request->enabled = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setEnabled', array((array)$request));
+ }
+
+ public function getFeatures()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getFeatures', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setFeatures($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->features = $value;
+ }
+ else
+ {
+ $request->features = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setFeatures', array((array)$request));
+ }
+
+ public function getDestination()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getDestination', array((array)$request));
+ return new RecordingDestination ($this->connection, $response->returnval);
+ }
+
+ public function setDestination($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->destination = $value;
+ }
+ else
+ {
+ $request->destination = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setDestination', array((array)$request));
+ }
+
+ public function getFilename()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getFilename', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function setFilename($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->filename = $value;
+ }
+ else
+ {
+ $request->filename = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setFilename', array((array)$request));
+ }
+
+ public function getMaxTime()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getMaxTime', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setMaxTime($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->maxTime = $value;
+ }
+ else
+ {
+ $request->maxTime = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setMaxTime', array((array)$request));
+ }
+
+ public function getMaxFileSize()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getMaxFileSize', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setMaxFileSize($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->maxFileSize = $value;
+ }
+ else
+ {
+ $request->maxFileSize = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setMaxFileSize', array((array)$request));
+ }
+
+ public function getOptions()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getOptions', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function setOptions($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->options = $value;
+ }
+ else
+ {
+ $request->options = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setOptions', array((array)$request));
+ }
+
+ public function getAudioCodec()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getAudioCodec', array((array)$request));
+ return new RecordingAudioCodec ($this->connection, $response->returnval);
+ }
+
+ public function setAudioCodec($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->audioCodec = $value;
+ }
+ else
+ {
+ $request->audioCodec = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setAudioCodec', array((array)$request));
+ }
+
+ public function getAudioHz()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getAudioHz', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setAudioHz($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->audioHz = $value;
+ }
+ else
+ {
+ $request->audioHz = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setAudioHz', array((array)$request));
+ }
+
+ public function getAudioBits()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getAudioBits', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setAudioBits($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->audioBits = $value;
+ }
+ else
+ {
+ $request->audioBits = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setAudioBits', array((array)$request));
+ }
+
+ public function getAudioChannels()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getAudioChannels', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setAudioChannels($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->audioChannels = $value;
+ }
+ else
+ {
+ $request->audioChannels = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setAudioChannels', array((array)$request));
+ }
+
+ public function getVideoCodec()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getVideoCodec', array((array)$request));
+ return new RecordingVideoCodec ($this->connection, $response->returnval);
+ }
+
+ public function setVideoCodec($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->videoCodec = $value;
+ }
+ else
+ {
+ $request->videoCodec = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setVideoCodec', array((array)$request));
+ }
+
+ public function getVideoWidth()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getVideoWidth', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setVideoWidth($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->videoWidth = $value;
+ }
+ else
+ {
+ $request->videoWidth = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setVideoWidth', array((array)$request));
+ }
+
+ public function getVideoHeight()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getVideoHeight', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setVideoHeight($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->videoHeight = $value;
+ }
+ else
+ {
+ $request->videoHeight = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setVideoHeight', array((array)$request));
+ }
+
+ public function getVideoRate()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getVideoRate', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setVideoRate($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->videoRate = $value;
+ }
+ else
+ {
+ $request->videoRate = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setVideoRate', array((array)$request));
+ }
+
+ public function getVideoRateControlMode()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getVideoRateControlMode', array((array)$request));
+ return new RecordingVideoRateControlMode ($this->connection, $response->returnval);
+ }
+
+ public function setVideoRateControlMode($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->videoRateControlMode = $value;
+ }
+ else
+ {
+ $request->videoRateControlMode = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setVideoRateControlMode', array((array)$request));
+ }
+
+ public function getVideoFPS()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getVideoFPS', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setVideoFPS($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->videoFPS = $value;
+ }
+ else
+ {
+ $request->videoFPS = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setVideoFPS', array((array)$request));
+ }
+
+ public function getVideoScalingMethod()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingScreenSettings_getVideoScalingMethod', array((array)$request));
+ return new RecordingVideoScalingMethod ($this->connection, $response->returnval);
+ }
+
+ public function setVideoScalingMethod($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->videoScalingMethod = $value;
+ }
+ else
+ {
+ $request->videoScalingMethod = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingScreenSettings_setVideoScalingMethod', array((array)$request));
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IRecordingScreenSettingsCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IRecordingScreenSettings";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IRecordingSettings extends VBox_ManagedObject
+{
+
+ public function getScreenSettings($arg_screenId)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->screenId = $arg_screenId;
+ $response = $this->connection->__soapCall('IRecordingSettings_getScreenSettings', array((array)$request));
+ return new IRecordingScreenSettings ($this->connection, $response->returnval);
+ }
+
+ public function getEnabled()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingSettings_getEnabled', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function setEnabled($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->enabled = $value;
+ }
+ else
+ {
+ $request->enabled = $value->handle;
+ }
+ $this->connection->__soapCall('IRecordingSettings_setEnabled', array((array)$request));
+ }
+
+ public function getScreens()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IRecordingSettings_getScreens', array((array)$request));
+ return new IRecordingScreenSettingsCollection ($this->connection, (array)$response->returnval);
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IRecordingSettingsCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IRecordingSettings";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IPCIAddress extends VBox_ManagedObject
+{
+
+ public function asLong()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IPCIAddress_asLong', array((array)$request));
+ return (int)$response->returnval;
+ }
+
+ public function fromLong($arg_number)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->number = $arg_number;
+ $response = $this->connection->__soapCall('IPCIAddress_fromLong', array((array)$request));
+ return ;
+ }
+
+ public function getBus()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IPCIAddress_getBus', array((array)$request));
+ return (int)$response->returnval;
+ }
+
+ public function setBus($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->bus = $value;
+ }
+ else
+ {
+ $request->bus = $value->handle;
+ }
+ $this->connection->__soapCall('IPCIAddress_setBus', array((array)$request));
+ }
+
+ public function getDevice()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IPCIAddress_getDevice', array((array)$request));
+ return (int)$response->returnval;
+ }
+
+ public function setDevice($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->device = $value;
+ }
+ else
+ {
+ $request->device = $value->handle;
+ }
+ $this->connection->__soapCall('IPCIAddress_setDevice', array((array)$request));
+ }
+
+ public function getDevFunction()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IPCIAddress_getDevFunction', array((array)$request));
+ return (int)$response->returnval;
+ }
+
+ public function setDevFunction($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->devFunction = $value;
+ }
+ else
+ {
+ $request->devFunction = $value->handle;
+ }
+ $this->connection->__soapCall('IPCIAddress_setDevFunction', array((array)$request));
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IPCIAddressCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IPCIAddress";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IMachine extends VBox_ManagedObject
+{
+
+ public function lockMachine($arg_session, $arg_lockType)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->session = $arg_session;
+ $request->lockType = $arg_lockType;
+ $response = $this->connection->__soapCall('IMachine_lockMachine', array((array)$request));
+ return ;
+ }
+
+ public function launchVMProcess($arg_session, $arg_name, $arg_environment)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->session = $arg_session;
+ $request->name = $arg_name;
+ $request->environment = $arg_environment;
+ $response = $this->connection->__soapCall('IMachine_launchVMProcess', array((array)$request));
+ return new IProgress ($this->connection, $response->returnval);
+ }
+
+ public function setBootOrder($arg_position, $arg_device)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->position = $arg_position;
+ $request->device = $arg_device;
+ $response = $this->connection->__soapCall('IMachine_setBootOrder', array((array)$request));
+ return ;
+ }
+
+ public function getBootOrder($arg_position)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->position = $arg_position;
+ $response = $this->connection->__soapCall('IMachine_getBootOrder', array((array)$request));
+ return new DeviceType ($this->connection, $response->returnval);
+ }
+
+ public function attachDevice($arg_name, $arg_controllerPort, $arg_device, $arg_type, $arg_medium)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $request->type = $arg_type;
+ $request->medium = $arg_medium;
+ $response = $this->connection->__soapCall('IMachine_attachDevice', array((array)$request));
+ return ;
+ }
+
+ public function attachDeviceWithoutMedium($arg_name, $arg_controllerPort, $arg_device, $arg_type)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $request->type = $arg_type;
+ $response = $this->connection->__soapCall('IMachine_attachDeviceWithoutMedium', array((array)$request));
+ return ;
+ }
+
+ public function detachDevice($arg_name, $arg_controllerPort, $arg_device)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $response = $this->connection->__soapCall('IMachine_detachDevice', array((array)$request));
+ return ;
+ }
+
+ public function passthroughDevice($arg_name, $arg_controllerPort, $arg_device, $arg_passthrough)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $request->passthrough = $arg_passthrough;
+ $response = $this->connection->__soapCall('IMachine_passthroughDevice', array((array)$request));
+ return ;
+ }
+
+ public function temporaryEjectDevice($arg_name, $arg_controllerPort, $arg_device, $arg_temporaryEject)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $request->temporaryEject = $arg_temporaryEject;
+ $response = $this->connection->__soapCall('IMachine_temporaryEjectDevice', array((array)$request));
+ return ;
+ }
+
+ public function nonRotationalDevice($arg_name, $arg_controllerPort, $arg_device, $arg_nonRotational)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $request->nonRotational = $arg_nonRotational;
+ $response = $this->connection->__soapCall('IMachine_nonRotationalDevice', array((array)$request));
+ return ;
+ }
+
+ public function setAutoDiscardForDevice($arg_name, $arg_controllerPort, $arg_device, $arg_discard)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $request->discard = $arg_discard;
+ $response = $this->connection->__soapCall('IMachine_setAutoDiscardForDevice', array((array)$request));
+ return ;
+ }
+
+ public function setHotPluggableForDevice($arg_name, $arg_controllerPort, $arg_device, $arg_hotPluggable)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $request->hotPluggable = $arg_hotPluggable;
+ $response = $this->connection->__soapCall('IMachine_setHotPluggableForDevice', array((array)$request));
+ return ;
+ }
+
+ public function setBandwidthGroupForDevice($arg_name, $arg_controllerPort, $arg_device, $arg_bandwidthGroup)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $request->bandwidthGroup = $arg_bandwidthGroup;
+ $response = $this->connection->__soapCall('IMachine_setBandwidthGroupForDevice', array((array)$request));
+ return ;
+ }
+
+ public function setNoBandwidthGroupForDevice($arg_name, $arg_controllerPort, $arg_device)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $response = $this->connection->__soapCall('IMachine_setNoBandwidthGroupForDevice', array((array)$request));
+ return ;
+ }
+
+ public function unmountMedium($arg_name, $arg_controllerPort, $arg_device, $arg_force)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
+ $request->force = $arg_force;
+ $response = $this->connection->__soapCall('IMachine_unmountMedium', array((array)$request));
+ return ;
+ }
+
+ public function mountMedium($arg_name, $arg_controllerPort, $arg_device, $arg_medium, $arg_force)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $request->controllerPort = $arg_controllerPort;
+ $request->device = $arg_device;
$request->medium = $arg_medium;
- $request->force = (bool)$arg_force;
+ $request->force = $arg_force;
$response = $this->connection->__soapCall('IMachine_mountMedium', array((array)$request));
return ;
}
@@ -2092,7 +3516,7 @@ public function attachHostPCIDevice($arg_hostAddress, $arg_desiredGuestAddress,
$request->_this = $this->handle;
$request->hostAddress = $arg_hostAddress;
$request->desiredGuestAddress = $arg_desiredGuestAddress;
- $request->tryToUnbind = (bool)$arg_tryToUnbind;
+ $request->tryToUnbind = $arg_tryToUnbind;
$response = $this->connection->__soapCall('IMachine_attachHostPCIDevice', array((array)$request));
return ;
}
@@ -2158,7 +3582,7 @@ public function setStorageControllerBootable($arg_name, $arg_bootable)
$request = new stdClass();
$request->_this = $this->handle;
$request->name = $arg_name;
- $request->bootable = (bool)$arg_bootable;
+ $request->bootable = $arg_bootable;
$response = $this->connection->__soapCall('IMachine_setStorageControllerBootable', array((array)$request));
return ;
}
@@ -2259,25 +3683,36 @@ public function setCPUProperty($arg_property, $arg_value)
$request = new stdClass();
$request->_this = $this->handle;
$request->property = $arg_property;
- $request->value = (bool)$arg_value;
+ $request->value = $arg_value;
$response = $this->connection->__soapCall('IMachine_setCPUProperty', array((array)$request));
return ;
}
- public function getCPUIDLeaf($arg_id)
+ public function getCPUIDLeafByOrdinal($arg_ordinal)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->id = $arg_id;
+ $request->ordinal = $arg_ordinal;
+ $response = $this->connection->__soapCall('IMachine_getCPUIDLeafByOrdinal', array((array)$request));
+ return array((float)$response->idx, (float)$response->idxSub, (float)$response->valEax, (float)$response->valEbx, (float)$response->valEcx, (float)$response->valEdx);
+ }
+
+ public function getCPUIDLeaf($arg_idx, $arg_idxSub)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->idx = $arg_idx;
+ $request->idxSub = $arg_idxSub;
$response = $this->connection->__soapCall('IMachine_getCPUIDLeaf', array((array)$request));
return array((float)$response->valEax, (float)$response->valEbx, (float)$response->valEcx, (float)$response->valEdx);
}
- public function setCPUIDLeaf($arg_id, $arg_valEax, $arg_valEbx, $arg_valEcx, $arg_valEdx)
+ public function setCPUIDLeaf($arg_idx, $arg_idxSub, $arg_valEax, $arg_valEbx, $arg_valEcx, $arg_valEdx)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->id = $arg_id;
+ $request->idx = $arg_idx;
+ $request->idxSub = $arg_idxSub;
$request->valEax = $arg_valEax;
$request->valEbx = $arg_valEbx;
$request->valEcx = $arg_valEcx;
@@ -2286,11 +3721,12 @@ public function setCPUIDLeaf($arg_id, $arg_valEax, $arg_valEbx, $arg_valEcx, $ar
return ;
}
- public function removeCPUIDLeaf($arg_id)
+ public function removeCPUIDLeaf($arg_idx, $arg_idxSub)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->id = $arg_id;
+ $request->idx = $arg_idx;
+ $request->idxSub = $arg_idxSub;
$response = $this->connection->__soapCall('IMachine_removeCPUIDLeaf', array((array)$request));
return ;
}
@@ -2317,7 +3753,7 @@ public function setHWVirtExProperty($arg_property, $arg_value)
$request = new stdClass();
$request->_this = $this->handle;
$request->property = $arg_property;
- $request->value = (bool)$arg_value;
+ $request->value = $arg_value;
$response = $this->connection->__soapCall('IMachine_setHWVirtExProperty', array((array)$request));
return ;
}
@@ -2384,14 +3820,15 @@ public function findSnapshot($arg_nameOrId)
return new ISnapshot ($this->connection, $response->returnval);
}
- public function createSharedFolder($arg_name, $arg_hostPath, $arg_writable, $arg_automount)
+ public function createSharedFolder($arg_name, $arg_hostPath, $arg_writable, $arg_automount, $arg_autoMountPoint)
{
$request = new stdClass();
$request->_this = $this->handle;
$request->name = $arg_name;
$request->hostPath = $arg_hostPath;
- $request->writable = (bool)$arg_writable;
- $request->automount = (bool)$arg_automount;
+ $request->writable = $arg_writable;
+ $request->automount = $arg_automount;
+ $request->autoMountPoint = $arg_autoMountPoint;
$response = $this->connection->__soapCall('IMachine_createSharedFolder', array((array)$request));
return ;
}
@@ -2591,6 +4028,16 @@ public function cloneTo($arg_target, $arg_mode, $arg_options)
return new IProgress ($this->connection, $response->returnval);
}
+ public function moveTo($arg_folder, $arg_type)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->folder = $arg_folder;
+ $request->type = $arg_type;
+ $response = $this->connection->__soapCall('IMachine_moveTo', array((array)$request));
+ return new IProgress ($this->connection, $response->returnval);
+ }
+
public function saveState()
{
$request = new stdClass();
@@ -2612,7 +4059,7 @@ public function discardSavedState($arg_fRemoveFile)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->fRemoveFile = (bool)$arg_fRemoveFile;
+ $request->fRemoveFile = $arg_fRemoveFile;
$response = $this->connection->__soapCall('IMachine_discardSavedState', array((array)$request));
return ;
}
@@ -2623,7 +4070,7 @@ public function takeSnapshot($arg_name, $arg_description, $arg_pause)
$request->_this = $this->handle;
$request->name = $arg_name;
$request->description = $arg_description;
- $request->pause = (bool)$arg_pause;
+ $request->pause = $arg_pause;
$response = $this->connection->__soapCall('IMachine_takeSnapshot', array((array)$request));
return array(new IProgress ($this->connection, $response->returnval), (string)$response->id);
}
@@ -2904,11 +4351,11 @@ public function setCPUHotPlugEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->CPUHotPlugEnabled = (bool)$value;
+ $request->CPUHotPlugEnabled = $value;
}
else
{
- $request->CPUHotPlugEnabled = (bool)$value->handle;
+ $request->CPUHotPlugEnabled = $value->handle;
}
$this->connection->__soapCall('IMachine_setCPUHotPlugEnabled', array((array)$request));
}
@@ -3019,11 +4466,11 @@ public function setPageFusionEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->pageFusionEnabled = (bool)$value;
+ $request->pageFusionEnabled = $value;
}
else
{
- $request->pageFusionEnabled = (bool)$value->handle;
+ $request->pageFusionEnabled = $value->handle;
}
$this->connection->__soapCall('IMachine_setPageFusionEnabled', array((array)$request));
}
@@ -3069,308 +4516,78 @@ public function setVRAMSize($value)
}
else
{
- $request->VRAMSize = $value->handle;
- }
- $this->connection->__soapCall('IMachine_setVRAMSize', array((array)$request));
- }
-
- public function getAccelerate3DEnabled()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getAccelerate3DEnabled', array((array)$request));
- return (bool)$response->returnval;
- }
-
- public function setAccelerate3DEnabled($value)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->accelerate3DEnabled = (bool)$value;
- }
- else
- {
- $request->accelerate3DEnabled = (bool)$value->handle;
- }
- $this->connection->__soapCall('IMachine_setAccelerate3DEnabled', array((array)$request));
- }
-
- public function getAccelerate2DVideoEnabled()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getAccelerate2DVideoEnabled', array((array)$request));
- return (bool)$response->returnval;
- }
-
- public function setAccelerate2DVideoEnabled($value)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->accelerate2DVideoEnabled = (bool)$value;
- }
- else
- {
- $request->accelerate2DVideoEnabled = (bool)$value->handle;
- }
- $this->connection->__soapCall('IMachine_setAccelerate2DVideoEnabled', array((array)$request));
- }
-
- public function getMonitorCount()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getMonitorCount', array((array)$request));
- return (float)$response->returnval;
- }
-
- public function setMonitorCount($value)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->monitorCount = $value;
- }
- else
- {
- $request->monitorCount = $value->handle;
- }
- $this->connection->__soapCall('IMachine_setMonitorCount', array((array)$request));
- }
-
- public function getVideoCaptureEnabled()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getVideoCaptureEnabled', array((array)$request));
- return (bool)$response->returnval;
- }
-
- public function setVideoCaptureEnabled($value)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->videoCaptureEnabled = (bool)$value;
- }
- else
- {
- $request->videoCaptureEnabled = (bool)$value->handle;
- }
- $this->connection->__soapCall('IMachine_setVideoCaptureEnabled', array((array)$request));
- }
-
- public function getVideoCaptureScreens()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getVideoCaptureScreens', array((array)$request));
- return (array)$response->returnval;
- }
-
- public function setVideoCaptureScreens($value)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- if (is_array($value) || is_null($value) || is_scalar($value))
- {
- $request->videoCaptureScreens = $value;
- }
- else
- {
- $request->videoCaptureScreens = $value->handle;
- }
- $this->connection->__soapCall('IMachine_setVideoCaptureScreens', array((array)$request));
- }
-
- public function getVideoCaptureFile()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getVideoCaptureFile', array((array)$request));
- return (string)$response->returnval;
- }
-
- public function setVideoCaptureFile($value)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->videoCaptureFile = $value;
- }
- else
- {
- $request->videoCaptureFile = $value->handle;
- }
- $this->connection->__soapCall('IMachine_setVideoCaptureFile', array((array)$request));
- }
-
- public function getVideoCaptureWidth()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getVideoCaptureWidth', array((array)$request));
- return (float)$response->returnval;
- }
-
- public function setVideoCaptureWidth($value)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->videoCaptureWidth = $value;
- }
- else
- {
- $request->videoCaptureWidth = $value->handle;
- }
- $this->connection->__soapCall('IMachine_setVideoCaptureWidth', array((array)$request));
- }
-
- public function getVideoCaptureHeight()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getVideoCaptureHeight', array((array)$request));
- return (float)$response->returnval;
- }
-
- public function setVideoCaptureHeight($value)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->videoCaptureHeight = $value;
- }
- else
- {
- $request->videoCaptureHeight = $value->handle;
- }
- $this->connection->__soapCall('IMachine_setVideoCaptureHeight', array((array)$request));
- }
-
- public function getVideoCaptureRate()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getVideoCaptureRate', array((array)$request));
- return (float)$response->returnval;
- }
-
- public function setVideoCaptureRate($value)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->videoCaptureRate = $value;
- }
- else
- {
- $request->videoCaptureRate = $value->handle;
- }
- $this->connection->__soapCall('IMachine_setVideoCaptureRate', array((array)$request));
- }
-
- public function getVideoCaptureFPS()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getVideoCaptureFPS', array((array)$request));
- return (float)$response->returnval;
- }
-
- public function setVideoCaptureFPS($value)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->videoCaptureFPS = $value;
- }
- else
- {
- $request->videoCaptureFPS = $value->handle;
+ $request->VRAMSize = $value->handle;
}
- $this->connection->__soapCall('IMachine_setVideoCaptureFPS', array((array)$request));
+ $this->connection->__soapCall('IMachine_setVRAMSize', array((array)$request));
}
- public function getVideoCaptureMaxTime()
+ public function getAccelerate3DEnabled()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getVideoCaptureMaxTime', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('IMachine_getAccelerate3DEnabled', array((array)$request));
+ return (bool)$response->returnval;
}
- public function setVideoCaptureMaxTime($value)
+ public function setAccelerate3DEnabled($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->videoCaptureMaxTime = $value;
+ $request->accelerate3DEnabled = $value;
}
else
{
- $request->videoCaptureMaxTime = $value->handle;
+ $request->accelerate3DEnabled = $value->handle;
}
- $this->connection->__soapCall('IMachine_setVideoCaptureMaxTime', array((array)$request));
+ $this->connection->__soapCall('IMachine_setAccelerate3DEnabled', array((array)$request));
}
- public function getVideoCaptureMaxFileSize()
+ public function getAccelerate2DVideoEnabled()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getVideoCaptureMaxFileSize', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('IMachine_getAccelerate2DVideoEnabled', array((array)$request));
+ return (bool)$response->returnval;
}
- public function setVideoCaptureMaxFileSize($value)
+ public function setAccelerate2DVideoEnabled($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->videoCaptureMaxFileSize = $value;
+ $request->accelerate2DVideoEnabled = $value;
}
else
{
- $request->videoCaptureMaxFileSize = $value->handle;
+ $request->accelerate2DVideoEnabled = $value->handle;
}
- $this->connection->__soapCall('IMachine_setVideoCaptureMaxFileSize', array((array)$request));
+ $this->connection->__soapCall('IMachine_setAccelerate2DVideoEnabled', array((array)$request));
}
- public function getVideoCaptureOptions()
+ public function getMonitorCount()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IMachine_getVideoCaptureOptions', array((array)$request));
- return (string)$response->returnval;
+ $response = $this->connection->__soapCall('IMachine_getMonitorCount', array((array)$request));
+ return (float)$response->returnval;
}
- public function setVideoCaptureOptions($value)
+ public function setMonitorCount($value)
{
$request = new stdClass();
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->videoCaptureOptions = $value;
+ $request->monitorCount = $value;
}
else
{
- $request->videoCaptureOptions = $value->handle;
+ $request->monitorCount = $value->handle;
}
- $this->connection->__soapCall('IMachine_setVideoCaptureOptions', array((array)$request));
+ $this->connection->__soapCall('IMachine_setMonitorCount', array((array)$request));
}
public function getBIOSSettings()
@@ -3381,6 +4598,14 @@ public function getBIOSSettings()
return new IBIOSSettings ($this->connection, $response->returnval);
}
+ public function getRecordingSettings()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IMachine_getRecordingSettings', array((array)$request));
+ return new IRecordingSettings ($this->connection, $response->returnval);
+ }
+
public function getFirmwareType()
{
$request = new stdClass();
@@ -3464,11 +4689,11 @@ public function setHPETEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->HPETEnabled = (bool)$value;
+ $request->HPETEnabled = $value;
}
else
{
- $request->HPETEnabled = (bool)$value->handle;
+ $request->HPETEnabled = $value->handle;
}
$this->connection->__soapCall('IMachine_setHPETEnabled', array((array)$request));
}
@@ -3541,11 +4766,11 @@ public function setEmulatedUSBCardReaderEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->emulatedUSBCardReaderEnabled = (bool)$value;
+ $request->emulatedUSBCardReaderEnabled = $value;
}
else
{
- $request->emulatedUSBCardReaderEnabled = (bool)$value->handle;
+ $request->emulatedUSBCardReaderEnabled = $value->handle;
}
$this->connection->__soapCall('IMachine_setEmulatedUSBCardReaderEnabled', array((array)$request));
}
@@ -3598,6 +4823,14 @@ public function getSettingsFilePath()
return (string)$response->returnval;
}
+ public function getSettingsAuxFilePath()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IMachine_getSettingsAuxFilePath', array((array)$request));
+ return (string)$response->returnval;
+ }
+
public function getSettingsModified()
{
$request = new stdClass();
@@ -3754,11 +4987,11 @@ public function setTeleporterEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->teleporterEnabled = (bool)$value;
+ $request->teleporterEnabled = $value;
}
else
{
- $request->teleporterEnabled = (bool)$value->handle;
+ $request->teleporterEnabled = $value->handle;
}
$this->connection->__soapCall('IMachine_setTeleporterEnabled', array((array)$request));
}
@@ -3984,11 +5217,11 @@ public function setRTCUseUTC($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->RTCUseUTC = (bool)$value;
+ $request->RTCUseUTC = $value;
}
else
{
- $request->RTCUseUTC = (bool)$value->handle;
+ $request->RTCUseUTC = $value->handle;
}
$this->connection->__soapCall('IMachine_setRTCUseUTC', array((array)$request));
}
@@ -4007,11 +5240,11 @@ public function setIOCacheEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->IOCacheEnabled = (bool)$value;
+ $request->IOCacheEnabled = $value;
}
else
{
- $request->IOCacheEnabled = (bool)$value->handle;
+ $request->IOCacheEnabled = $value->handle;
}
$this->connection->__soapCall('IMachine_setIOCacheEnabled', array((array)$request));
}
@@ -4069,11 +5302,11 @@ public function setTracingEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->tracingEnabled = (bool)$value;
+ $request->tracingEnabled = $value;
}
else
{
- $request->tracingEnabled = (bool)$value->handle;
+ $request->tracingEnabled = $value->handle;
}
$this->connection->__soapCall('IMachine_setTracingEnabled', array((array)$request));
}
@@ -4115,11 +5348,11 @@ public function setAllowTracingToAccessVM($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->allowTracingToAccessVM = (bool)$value;
+ $request->allowTracingToAccessVM = $value;
}
else
{
- $request->allowTracingToAccessVM = (bool)$value->handle;
+ $request->allowTracingToAccessVM = $value->handle;
}
$this->connection->__soapCall('IMachine_setAllowTracingToAccessVM', array((array)$request));
}
@@ -4138,11 +5371,11 @@ public function setAutostartEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->autostartEnabled = (bool)$value;
+ $request->autostartEnabled = $value;
}
else
{
- $request->autostartEnabled = (bool)$value->handle;
+ $request->autostartEnabled = $value->handle;
}
$this->connection->__soapCall('IMachine_setAutostartEnabled', array((array)$request));
}
@@ -4246,6 +5479,52 @@ public function setVMProcessPriority($value)
}
$this->connection->__soapCall('IMachine_setVMProcessPriority', array((array)$request));
}
+
+ public function getParavirtDebug()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IMachine_getParavirtDebug', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function setParavirtDebug($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->paravirtDebug = $value;
+ }
+ else
+ {
+ $request->paravirtDebug = $value->handle;
+ }
+ $this->connection->__soapCall('IMachine_setParavirtDebug', array((array)$request));
+ }
+
+ public function getCPUProfile()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IMachine_getCPUProfile', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function setCPUProfile($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->CPUProfile = $value;
+ }
+ else
+ {
+ $request->CPUProfile = $value->handle;
+ }
+ $this->connection->__soapCall('IMachine_setCPUProfile', array((array)$request));
+ }
}
/**
@@ -4430,14 +5709,15 @@ public function findUSBDeviceById($arg_id)
return new IUSBDevice ($this->connection, $response->returnval);
}
- public function createSharedFolder($arg_name, $arg_hostPath, $arg_writable, $arg_automount)
+ public function createSharedFolder($arg_name, $arg_hostPath, $arg_writable, $arg_automount, $arg_autoMountPoint)
{
$request = new stdClass();
$request->_this = $this->handle;
$request->name = $arg_name;
$request->hostPath = $arg_hostPath;
- $request->writable = (bool)$arg_writable;
- $request->automount = (bool)$arg_automount;
+ $request->writable = $arg_writable;
+ $request->automount = $arg_automount;
+ $request->autoMountPoint = $arg_autoMountPoint;
$response = $this->connection->__soapCall('IConsole_createSharedFolder', array((array)$request));
return ;
}
@@ -4469,7 +5749,7 @@ public function addDiskEncryptionPassword($arg_id, $arg_password, $arg_clearOnSu
$request->_this = $this->handle;
$request->id = $arg_id;
$request->password = $arg_password;
- $request->clearOnSuspend = (bool)$arg_clearOnSuspend;
+ $request->clearOnSuspend = $arg_clearOnSuspend;
$response = $this->connection->__soapCall('IConsole_addDiskEncryptionPassword', array((array)$request));
return ;
}
@@ -4480,7 +5760,7 @@ public function addDiskEncryptionPasswords($arg_ids, $arg_passwords, $arg_clearO
$request->_this = $this->handle;
$request->ids = $arg_ids;
$request->passwords = $arg_passwords;
- $request->clearOnSuspend = (bool)$arg_clearOnSuspend;
+ $request->clearOnSuspend = $arg_clearOnSuspend;
$response = $this->connection->__soapCall('IConsole_addDiskEncryptionPasswords', array((array)$request));
return ;
}
@@ -4620,11 +5900,11 @@ public function setUseHostClipboard($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->useHostClipboard = (bool)$value;
+ $request->useHostClipboard = $value;
}
else
{
- $request->useHostClipboard = (bool)$value->handle;
+ $request->useHostClipboard = $value->handle;
}
$this->connection->__soapCall('IConsole_setUseHostClipboard', array((array)$request));
}
@@ -4799,6 +6079,14 @@ public function getInterfaceType()
$response = $this->connection->__soapCall('IHostNetworkInterface_getInterfaceType', array((array)$request));
return new HostNetworkInterfaceType ($this->connection, $response->returnval);
}
+
+ public function getWireless()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IHostNetworkInterface_getWireless', array((array)$request));
+ return (bool)$response->returnval;
+ }
}
/**
@@ -5008,6 +6296,28 @@ public function generateMACAddress()
return (string)$response->returnval;
}
+ public function addUSBDeviceSource($arg_backend, $arg_id, $arg_address, $arg_propertyNames, $arg_propertyValues)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->backend = $arg_backend;
+ $request->id = $arg_id;
+ $request->address = $arg_address;
+ $request->propertyNames = $arg_propertyNames;
+ $request->propertyValues = $arg_propertyValues;
+ $response = $this->connection->__soapCall('IHost_addUSBDeviceSource', array((array)$request));
+ return ;
+ }
+
+ public function removeUSBDeviceSource($arg_id)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->id = $arg_id;
+ $response = $this->connection->__soapCall('IHost_removeUSBDeviceSource', array((array)$request));
+ return ;
+ }
+
public function getDVDDrives()
{
$request = new stdClass();
@@ -5378,11 +6688,11 @@ public function setExclusiveHwVirt($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->exclusiveHwVirt = (bool)$value;
+ $request->exclusiveHwVirt = $value;
}
else
{
- $request->exclusiveHwVirt = (bool)$value->handle;
+ $request->exclusiveHwVirt = $value->handle;
}
$this->connection->__soapCall('ISystemProperties_setExclusiveHwVirt', array((array)$request));
}
@@ -5732,6 +7042,52 @@ public function getScreenShotFormats()
$response = $this->connection->__soapCall('ISystemProperties_getScreenShotFormats', array((array)$request));
return new BitmapFormatCollection ($this->connection, (array)$response->returnval);
}
+
+ public function getProxyMode()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISystemProperties_getProxyMode', array((array)$request));
+ return new ProxyMode ($this->connection, $response->returnval);
+ }
+
+ public function setProxyMode($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->proxyMode = $value;
+ }
+ else
+ {
+ $request->proxyMode = $value->handle;
+ }
+ $this->connection->__soapCall('ISystemProperties_setProxyMode', array((array)$request));
+ }
+
+ public function getProxyURL()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISystemProperties_getProxyURL', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function setProxyURL($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->proxyURL = $value;
+ }
+ else
+ {
+ $request->proxyURL = $value->handle;
+ }
+ $this->connection->__soapCall('ISystemProperties_setProxyURL', array((array)$request));
+ }
}
/**
@@ -5987,6 +7343,30 @@ public function close()
return ;
}
+ public function copyFromGuest($arg_sources, $arg_filters, $arg_flags, $arg_destination)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->sources = $arg_sources;
+ $request->filters = $arg_filters;
+ $request->flags = $arg_flags;
+ $request->destination = $arg_destination;
+ $response = $this->connection->__soapCall('IGuestSession_copyFromGuest', array((array)$request));
+ return new IProgress ($this->connection, $response->returnval);
+ }
+
+ public function copyToGuest($arg_sources, $arg_filters, $arg_flags, $arg_destination)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->sources = $arg_sources;
+ $request->filters = $arg_filters;
+ $request->flags = $arg_flags;
+ $request->destination = $arg_destination;
+ $response = $this->connection->__soapCall('IGuestSession_copyToGuest', array((array)$request));
+ return new IProgress ($this->connection, $response->returnval);
+ }
+
public function directoryCopy($arg_source, $arg_destination, $arg_flags)
{
$request = new stdClass();
@@ -6038,7 +7418,7 @@ public function directoryCreateTemp($arg_templateName, $arg_mode, $arg_path, $ar
$request->templateName = $arg_templateName;
$request->mode = $arg_mode;
$request->path = $arg_path;
- $request->secure = (bool)$arg_secure;
+ $request->secure = $arg_secure;
$response = $this->connection->__soapCall('IGuestSession_directoryCreateTemp', array((array)$request));
return (string)$response->returnval;
}
@@ -6048,7 +7428,7 @@ public function directoryExists($arg_path, $arg_followSymlinks)
$request = new stdClass();
$request->_this = $this->handle;
$request->path = $arg_path;
- $request->followSymlinks = (bool)$arg_followSymlinks;
+ $request->followSymlinks = $arg_followSymlinks;
$response = $this->connection->__soapCall('IGuestSession_directoryExists', array((array)$request));
return (bool)$response->returnval;
}
@@ -6160,7 +7540,7 @@ public function fileCreateTemp($arg_templateName, $arg_mode, $arg_path, $arg_sec
$request->templateName = $arg_templateName;
$request->mode = $arg_mode;
$request->path = $arg_path;
- $request->secure = (bool)$arg_secure;
+ $request->secure = $arg_secure;
$response = $this->connection->__soapCall('IGuestSession_fileCreateTemp', array((array)$request));
return new IGuestFile ($this->connection, $response->returnval);
}
@@ -6170,7 +7550,7 @@ public function fileExists($arg_path, $arg_followSymlinks)
$request = new stdClass();
$request->_this = $this->handle;
$request->path = $arg_path;
- $request->followSymlinks = (bool)$arg_followSymlinks;
+ $request->followSymlinks = $arg_followSymlinks;
$response = $this->connection->__soapCall('IGuestSession_fileExists', array((array)$request));
return (bool)$response->returnval;
}
@@ -6206,7 +7586,7 @@ public function fileQuerySize($arg_path, $arg_followSymlinks)
$request = new stdClass();
$request->_this = $this->handle;
$request->path = $arg_path;
- $request->followSymlinks = (bool)$arg_followSymlinks;
+ $request->followSymlinks = $arg_followSymlinks;
$response = $this->connection->__soapCall('IGuestSession_fileQuerySize', array((array)$request));
return (float)$response->returnval;
}
@@ -6216,7 +7596,7 @@ public function fsObjExists($arg_path, $arg_followSymlinks)
$request = new stdClass();
$request->_this = $this->handle;
$request->path = $arg_path;
- $request->followSymlinks = (bool)$arg_followSymlinks;
+ $request->followSymlinks = $arg_followSymlinks;
$response = $this->connection->__soapCall('IGuestSession_fsObjExists', array((array)$request));
return (bool)$response->returnval;
}
@@ -6226,7 +7606,7 @@ public function fsObjQueryInfo($arg_path, $arg_followSymlinks)
$request = new stdClass();
$request->_this = $this->handle;
$request->path = $arg_path;
- $request->followSymlinks = (bool)$arg_followSymlinks;
+ $request->followSymlinks = $arg_followSymlinks;
$response = $this->connection->__soapCall('IGuestSession_fsObjQueryInfo', array((array)$request));
return new IGuestFsObjInfo ($this->connection, $response->returnval);
}
@@ -6240,6 +7620,15 @@ public function fsObjRemove($arg_path)
return ;
}
+ public function fsObjRemoveArray($arg_path)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->path = $arg_path;
+ $response = $this->connection->__soapCall('IGuestSession_fsObjRemoveArray', array((array)$request));
+ return new IProgress ($this->connection, $response->returnval);
+ }
+
public function fsObjRename($arg_oldPath, $arg_newPath, $arg_flags)
{
$request = new stdClass();
@@ -6262,12 +7651,34 @@ public function fsObjMove($arg_source, $arg_destination, $arg_flags)
return new IProgress ($this->connection, $response->returnval);
}
+ public function fsObjMoveArray($arg_source, $arg_destination, $arg_flags)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->source = $arg_source;
+ $request->destination = $arg_destination;
+ $request->flags = $arg_flags;
+ $response = $this->connection->__soapCall('IGuestSession_fsObjMoveArray', array((array)$request));
+ return new IProgress ($this->connection, $response->returnval);
+ }
+
+ public function fsObjCopyArray($arg_source, $arg_destination, $arg_flags)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->source = $arg_source;
+ $request->destination = $arg_destination;
+ $request->flags = $arg_flags;
+ $response = $this->connection->__soapCall('IGuestSession_fsObjCopyArray', array((array)$request));
+ return new IProgress ($this->connection, $response->returnval);
+ }
+
public function fsObjSetACL($arg_path, $arg_followSymlinks, $arg_acl, $arg_mode)
{
$request = new stdClass();
$request->_this = $this->handle;
$request->path = $arg_path;
- $request->followSymlinks = (bool)$arg_followSymlinks;
+ $request->followSymlinks = $arg_followSymlinks;
$request->acl = $arg_acl;
$request->mode = $arg_mode;
$response = $this->connection->__soapCall('IGuestSession_fsObjSetACL', array((array)$request));
@@ -6502,6 +7913,22 @@ public function setCurrentDirectory($value)
$this->connection->__soapCall('IGuestSession_setCurrentDirectory', array((array)$request));
}
+ public function getUserHome()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestSession_getUserHome', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getUserDocuments()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestSession_getUserDocuments', array((array)$request));
+ return (string)$response->returnval;
+ }
+
public function getDirectories()
{
$request = new stdClass();
@@ -6911,11 +8338,11 @@ public function getStatus()
return new FileStatus ($this->connection, $response->returnval);
}
- public function getFileName()
+ public function getFilename()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFile_getFileName', array((array)$request));
+ $response = $this->connection->__soapCall('IFile_getFilename', array((array)$request));
return (string)$response->returnval;
}
@@ -6981,99 +8408,107 @@ class IGuestFileCollection extends VBox_ManagedObjectCollection
class IFsObjInfo extends VBox_ManagedObject
{
- public function getAccessTime()
+ public function getName()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getAccessTime', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('IFsObjInfo_getName', array((array)$request));
+ return (string)$response->returnval;
}
- public function getAllocatedSize()
+ public function getType()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getAllocatedSize', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('IFsObjInfo_getType', array((array)$request));
+ return new FsObjType ($this->connection, $response->returnval);
}
- public function getBirthTime()
+ public function getFileAttributes()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getBirthTime', array((array)$request));
+ $response = $this->connection->__soapCall('IFsObjInfo_getFileAttributes', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getObjectSize()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IFsObjInfo_getObjectSize', array((array)$request));
return (float)$response->returnval;
}
- public function getChangeTime()
+ public function getAllocatedSize()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getChangeTime', array((array)$request));
+ $response = $this->connection->__soapCall('IFsObjInfo_getAllocatedSize', array((array)$request));
return (float)$response->returnval;
}
- public function getDeviceNumber()
+ public function getAccessTime()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getDeviceNumber', array((array)$request));
+ $response = $this->connection->__soapCall('IFsObjInfo_getAccessTime', array((array)$request));
return (float)$response->returnval;
}
- public function getFileAttributes()
+ public function getBirthTime()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getFileAttributes', array((array)$request));
- return (string)$response->returnval;
+ $response = $this->connection->__soapCall('IFsObjInfo_getBirthTime', array((array)$request));
+ return (float)$response->returnval;
}
- public function getGenerationId()
+ public function getChangeTime()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getGenerationId', array((array)$request));
+ $response = $this->connection->__soapCall('IFsObjInfo_getChangeTime', array((array)$request));
return (float)$response->returnval;
}
- public function getGID()
+ public function getModificationTime()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getGID', array((array)$request));
+ $response = $this->connection->__soapCall('IFsObjInfo_getModificationTime', array((array)$request));
return (float)$response->returnval;
}
- public function getGroupName()
+ public function getUID()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getGroupName', array((array)$request));
- return (string)$response->returnval;
+ $response = $this->connection->__soapCall('IFsObjInfo_getUID', array((array)$request));
+ return (int)$response->returnval;
}
- public function getHardLinks()
+ public function getUserName()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getHardLinks', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('IFsObjInfo_getUserName', array((array)$request));
+ return (string)$response->returnval;
}
- public function getModificationTime()
+ public function getGID()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getModificationTime', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('IFsObjInfo_getGID', array((array)$request));
+ return (int)$response->returnval;
}
- public function getName()
+ public function getGroupName()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getName', array((array)$request));
+ $response = $this->connection->__soapCall('IFsObjInfo_getGroupName', array((array)$request));
return (string)$response->returnval;
}
@@ -7093,44 +8528,36 @@ public function getNodeIdDevice()
return (float)$response->returnval;
}
- public function getObjectSize()
+ public function getHardLinks()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getObjectSize', array((array)$request));
+ $response = $this->connection->__soapCall('IFsObjInfo_getHardLinks', array((array)$request));
return (float)$response->returnval;
}
- public function getType()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getType', array((array)$request));
- return new FsObjType ($this->connection, $response->returnval);
- }
-
- public function getUID()
+ public function getDeviceNumber()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getUID', array((array)$request));
+ $response = $this->connection->__soapCall('IFsObjInfo_getDeviceNumber', array((array)$request));
return (float)$response->returnval;
}
- public function getUserFlags()
+ public function getGenerationId()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getUserFlags', array((array)$request));
+ $response = $this->connection->__soapCall('IFsObjInfo_getGenerationId', array((array)$request));
return (float)$response->returnval;
}
- public function getUserName()
+ public function getUserFlags()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFsObjInfo_getUserName', array((array)$request));
- return (string)$response->returnval;
+ $response = $this->connection->__soapCall('IFsObjInfo_getUserFlags', array((array)$request));
+ return (float)$response->returnval;
}
}
@@ -7204,7 +8631,7 @@ public function setCredentials($arg_userName, $arg_password, $arg_domain, $arg_a
$request->userName = $arg_userName;
$request->password = $arg_password;
$request->domain = $arg_domain;
- $request->allowInteractiveLogon = (bool)$arg_allowInteractiveLogon;
+ $request->allowInteractiveLogon = $arg_allowInteractiveLogon;
$response = $this->connection->__soapCall('IGuest_setCredentials', array((array)$request));
return ;
}
@@ -7374,25 +8801,6 @@ class IGuestCollection extends VBox_ManagedObjectCollection
class IProgress extends VBox_ManagedObject
{
- public function setCurrentOperationProgress($arg_percent)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $request->percent = $arg_percent;
- $response = $this->connection->__soapCall('IProgress_setCurrentOperationProgress', array((array)$request));
- return ;
- }
-
- public function setNextOperation($arg_nextOperationDescription, $arg_nextOperationsWeight)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $request->nextOperationDescription = $arg_nextOperationDescription;
- $request->nextOperationsWeight = $arg_nextOperationsWeight;
- $response = $this->connection->__soapCall('IProgress_setNextOperation', array((array)$request));
- return ;
- }
-
public function waitForCompletion($arg_timeout)
{
$request = new stdClass();
@@ -7412,15 +8820,6 @@ public function waitForOperationCompletion($arg_operation, $arg_timeout)
return ;
}
- public function waitForAsyncProgressCompletion($arg_pProgressAsync)
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $request->pProgressAsync = $arg_pProgressAsync;
- $response = $this->connection->__soapCall('IProgress_waitForAsyncProgressCompletion', array((array)$request));
- return ;
- }
-
public function cancel()
{
$request = new stdClass();
@@ -7571,6 +8970,14 @@ public function setTimeout($value)
}
$this->connection->__soapCall('IProgress_setTimeout', array((array)$request));
}
+
+ public function getEventSource()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IProgress_getEventSource', array((array)$request));
+ return new IEventSource ($this->connection, $response->returnval);
+ }
}
/**
@@ -7587,14 +8994,6 @@ class IProgressCollection extends VBox_ManagedObjectCollection
class ISnapshot extends VBox_ManagedObject
{
- public function getChildrenCount()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('ISnapshot_getChildrenCount', array((array)$request));
- return (float)$response->returnval;
- }
-
public function getId()
{
$request = new stdClass();
@@ -7688,6 +9087,14 @@ public function getChildren()
$response = $this->connection->__soapCall('ISnapshot_getChildren', array((array)$request));
return new ISnapshotCollection ($this->connection, (array)$response->returnval);
}
+
+ public function getChildrenCount()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISnapshot_getChildrenCount', array((array)$request));
+ return (float)$response->returnval;
+ }
}
/**
@@ -7708,9 +9115,9 @@ public function setIds($arg_setImageId, $arg_imageId, $arg_setParentId, $arg_par
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->setImageId = (bool)$arg_setImageId;
+ $request->setImageId = $arg_setImageId;
$request->imageId = $arg_imageId;
- $request->setParentId = (bool)$arg_setParentId;
+ $request->setParentId = $arg_setParentId;
$request->parentId = $arg_parentId;
$response = $this->connection->__soapCall('IMedium_setIds', array((array)$request));
return ;
@@ -7853,12 +9260,12 @@ public function cloneToBase($arg_target, $arg_variant)
return new IProgress ($this->connection, $response->returnval);
}
- public function setLocation($arg_location)
+ public function moveTo($arg_location)
{
$request = new stdClass();
$request->_this = $this->handle;
$request->location = $arg_location;
- $response = $this->connection->__soapCall('IMedium_setLocation', array((array)$request));
+ $response = $this->connection->__soapCall('IMedium_moveTo', array((array)$request));
return new IProgress ($this->connection, $response->returnval);
}
@@ -7889,10 +9296,6 @@ public function reset()
public function changeEncryption($arg_currentPassword, $arg_cipher, $arg_newPassword, $arg_newPasswordId)
{
- // No password ID in case of decryption and de-/encryption are both handled here.
- $isDecryption = ($arg_cipher == '') && ($arg_newPassword == '');
- $arg_newPasswordId = $isDecryption ? '' : $arg_newPasswordId;
-
$request = new stdClass();
$request->_this = $this->handle;
$request->currentPassword = $arg_currentPassword;
@@ -7920,6 +9323,16 @@ public function checkEncryptionPassword($arg_password)
return ;
}
+ public function openForIO($arg_writable, $arg_password)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->writable = $arg_writable;
+ $request->password = $arg_password;
+ $response = $this->connection->__soapCall('IMedium_openForIO', array((array)$request));
+ return new IMediumIO ($this->connection, $response->returnval);
+ }
+
public function getId()
{
$request = new stdClass();
@@ -7975,6 +9388,21 @@ public function getLocation()
return (string)$response->returnval;
}
+ public function setLocation($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->location = $value;
+ }
+ else
+ {
+ $request->location = $value->handle;
+ }
+ $this->connection->__soapCall('IMedium_setLocation', array((array)$request));
+ }
+
public function getName()
{
$request = new stdClass();
@@ -8108,11 +9536,11 @@ public function setAutoReset($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->autoReset = (bool)$value;
+ $request->autoReset = $value;
}
else
{
- $request->autoReset = (bool)$value->handle;
+ $request->autoReset = $value->handle;
}
$this->connection->__soapCall('IMedium_setAutoReset', array((array)$request));
}
@@ -8197,6 +9625,136 @@ class IMediumFormatCollection extends VBox_ManagedObjectCollection
protected $_interfaceName = "IMediumFormat";
}
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IDataStream extends VBox_ManagedObject
+{
+
+ public function read($arg_size, $arg_timeoutMS)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->size = $arg_size;
+ $request->timeoutMS = $arg_timeoutMS;
+ $response = $this->connection->__soapCall('IDataStream_read', array((array)$request));
+ return (array)$response->returnval;
+ }
+
+ public function getReadSize()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IDataStream_getReadSize', array((array)$request));
+ return (float)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IDataStreamCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IDataStream";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IMediumIO extends VBox_ManagedObject
+{
+
+ public function read($arg_offset, $arg_size)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->offset = $arg_offset;
+ $request->size = $arg_size;
+ $response = $this->connection->__soapCall('IMediumIO_read', array((array)$request));
+ return (array)$response->returnval;
+ }
+
+ public function write($arg_offset, $arg_data)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->offset = $arg_offset;
+ $request->data = $arg_data;
+ $response = $this->connection->__soapCall('IMediumIO_write', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function formatFAT($arg_quick)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->quick = $arg_quick;
+ $response = $this->connection->__soapCall('IMediumIO_formatFAT', array((array)$request));
+ return ;
+ }
+
+ public function initializePartitionTable($arg_format, $arg_wholeDiskInOneEntry)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->format = $arg_format;
+ $request->wholeDiskInOneEntry = $arg_wholeDiskInOneEntry;
+ $response = $this->connection->__soapCall('IMediumIO_initializePartitionTable', array((array)$request));
+ return ;
+ }
+
+ public function convertToStream($arg_format, $arg_variant, $arg_bufferSize)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->format = $arg_format;
+ $request->variant = $arg_variant;
+ $request->bufferSize = $arg_bufferSize;
+ $response = $this->connection->__soapCall('IMediumIO_convertToStream', array((array)$request));
+ return array(new IProgress ($this->connection, $response->returnval), new IDataStream ($this->connection, $response->stream));
+ }
+
+ public function close()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IMediumIO_close', array((array)$request));
+ return ;
+ }
+
+ public function getMedium()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IMediumIO_getMedium', array((array)$request));
+ return new IMedium ($this->connection, $response->returnval);
+ }
+
+ public function getWritable()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IMediumIO_getWritable', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function getExplorer()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IMediumIO_getExplorer', array((array)$request));
+ return new IVFSExplorer ($this->connection, $response->returnval);
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IMediumIOCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IMediumIO";
+}
+
/**
* Generated VBoxWebService Interface Wrapper
*/
@@ -8618,94 +10176,189 @@ public function getCapabilities()
*/
class IFramebufferCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "IFramebuffer";
+ protected $_interfaceName = "IFramebuffer";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IFramebufferOverlay extends IFramebuffer
+{
+
+ public function move($arg_x, $arg_y)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->x = $arg_x;
+ $request->y = $arg_y;
+ $response = $this->connection->__soapCall('IFramebufferOverlay_move', array((array)$request));
+ return ;
+ }
+
+ public function getX()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IFramebufferOverlay_getX', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function getY()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IFramebufferOverlay_getY', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function getVisible()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IFramebufferOverlay_getVisible', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function setVisible($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->visible = $value;
+ }
+ else
+ {
+ $request->visible = $value->handle;
+ }
+ $this->connection->__soapCall('IFramebufferOverlay_setVisible', array((array)$request));
+ }
+
+ public function getAlpha()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IFramebufferOverlay_getAlpha', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function setAlpha($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->alpha = $value;
+ }
+ else
+ {
+ $request->alpha = $value->handle;
+ }
+ $this->connection->__soapCall('IFramebufferOverlay_setAlpha', array((array)$request));
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IFramebufferOverlayCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IFramebufferOverlay";
}
/**
* Generated VBoxWebService Interface Wrapper
*/
-class IFramebufferOverlay extends IFramebuffer
+class IGuestScreenInfo extends VBox_ManagedObject
{
- public function move($arg_x, $arg_y)
+ public function getScreenId()
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->x = $arg_x;
- $request->y = $arg_y;
- $response = $this->connection->__soapCall('IFramebufferOverlay_move', array((array)$request));
- return ;
+ $response = $this->connection->__soapCall('IGuestScreenInfo_getScreenId', array((array)$request));
+ return (float)$response->returnval;
}
- public function getX()
+ public function getGuestMonitorStatus()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFramebufferOverlay_getX', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('IGuestScreenInfo_getGuestMonitorStatus', array((array)$request));
+ return new GuestMonitorStatus ($this->connection, $response->returnval);
}
- public function getY()
+ public function getPrimary()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFramebufferOverlay_getY', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('IGuestScreenInfo_getPrimary', array((array)$request));
+ return (bool)$response->returnval;
}
- public function getVisible()
+ public function getOrigin()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFramebufferOverlay_getVisible', array((array)$request));
+ $response = $this->connection->__soapCall('IGuestScreenInfo_getOrigin', array((array)$request));
return (bool)$response->returnval;
}
- public function setVisible($value)
+ public function getOriginX()
{
$request = new stdClass();
$request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->visible = (bool)$value;
- }
- else
- {
- $request->visible = (bool)$value->handle;
- }
- $this->connection->__soapCall('IFramebufferOverlay_setVisible', array((array)$request));
+ $response = $this->connection->__soapCall('IGuestScreenInfo_getOriginX', array((array)$request));
+ return (int)$response->returnval;
}
- public function getAlpha()
+ public function getOriginY()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IFramebufferOverlay_getAlpha', array((array)$request));
+ $response = $this->connection->__soapCall('IGuestScreenInfo_getOriginY', array((array)$request));
+ return (int)$response->returnval;
+ }
+
+ public function getWidth()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestScreenInfo_getWidth', array((array)$request));
return (float)$response->returnval;
}
- public function setAlpha($value)
+ public function getHeight()
{
$request = new stdClass();
$request->_this = $this->handle;
- if (is_null($value) || is_scalar($value))
- {
- $request->alpha = $value;
- }
- else
- {
- $request->alpha = $value->handle;
- }
- $this->connection->__soapCall('IFramebufferOverlay_setAlpha', array((array)$request));
+ $response = $this->connection->__soapCall('IGuestScreenInfo_getHeight', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function getBitsPerPixel()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestScreenInfo_getBitsPerPixel', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function getExtendedInfo()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestScreenInfo_getExtendedInfo', array((array)$request));
+ return (string)$response->returnval;
}
}
/**
* Generated VBoxWebService Managed Object Collection
*/
-class IFramebufferOverlayCollection extends VBox_ManagedObjectCollection
+class IGuestScreenInfoCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "IFramebufferOverlay";
+ protected $_interfaceName = "IGuestScreenInfo";
}
/**
@@ -8757,8 +10410,8 @@ public function setVideoModeHint($arg_display, $arg_enabled, $arg_changeOrigin,
$request = new stdClass();
$request->_this = $this->handle;
$request->display = $arg_display;
- $request->enabled = (bool)$arg_enabled;
- $request->changeOrigin = (bool)$arg_changeOrigin;
+ $request->enabled = $arg_enabled;
+ $request->changeOrigin = $arg_changeOrigin;
$request->originX = $arg_originX;
$request->originY = $arg_originY;
$request->width = $arg_width;
@@ -8772,7 +10425,7 @@ public function setSeamlessMode($arg_enabled)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->enabled = (bool)$arg_enabled;
+ $request->enabled = $arg_enabled;
$response = $this->connection->__soapCall('IDisplay_setSeamlessMode', array((array)$request));
return ;
}
@@ -8834,10 +10487,54 @@ public function notifyHiDPIOutputPolicyChange($arg_fUnscaledHiDPI)
{
$request = new stdClass();
$request->_this = $this->handle;
- $request->fUnscaledHiDPI = (bool)$arg_fUnscaledHiDPI;
+ $request->fUnscaledHiDPI = $arg_fUnscaledHiDPI;
$response = $this->connection->__soapCall('IDisplay_notifyHiDPIOutputPolicyChange', array((array)$request));
return ;
}
+
+ public function setScreenLayout($arg_screenLayoutMode, $arg_guestScreenInfo)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->screenLayoutMode = $arg_screenLayoutMode;
+ $request->guestScreenInfo = $arg_guestScreenInfo;
+ $response = $this->connection->__soapCall('IDisplay_setScreenLayout', array((array)$request));
+ return ;
+ }
+
+ public function detachScreens($arg_screenIds)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->screenIds = $arg_screenIds;
+ $response = $this->connection->__soapCall('IDisplay_detachScreens', array((array)$request));
+ return ;
+ }
+
+ public function createGuestScreenInfo($arg_display, $arg_status, $arg_primary, $arg_changeOrigin, $arg_originX, $arg_originY, $arg_width, $arg_height, $arg_bitsPerPixel)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->display = $arg_display;
+ $request->status = $arg_status;
+ $request->primary = $arg_primary;
+ $request->changeOrigin = $arg_changeOrigin;
+ $request->originX = $arg_originX;
+ $request->originY = $arg_originY;
+ $request->width = $arg_width;
+ $request->height = $arg_height;
+ $request->bitsPerPixel = $arg_bitsPerPixel;
+ $response = $this->connection->__soapCall('IDisplay_createGuestScreenInfo', array((array)$request));
+ return new IGuestScreenInfo ($this->connection, $response->returnval);
+ }
+
+ public function getGuestScreenLayout()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IDisplay_getGuestScreenLayout', array((array)$request));
+ return new IGuestScreenInfoCollection ($this->connection, (array)$response->returnval);
+ }
}
/**
@@ -8927,11 +10624,11 @@ public function setEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->enabled = (bool)$value;
+ $request->enabled = $value;
}
else
{
- $request->enabled = (bool)$value->handle;
+ $request->enabled = $value->handle;
}
$this->connection->__soapCall('INetworkAdapter_setEnabled', array((array)$request));
}
@@ -9111,11 +10808,11 @@ public function setCableConnected($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->cableConnected = (bool)$value;
+ $request->cableConnected = $value;
}
else
{
- $request->cableConnected = (bool)$value->handle;
+ $request->cableConnected = $value->handle;
}
$this->connection->__soapCall('INetworkAdapter_setCableConnected', array((array)$request));
}
@@ -9180,11 +10877,11 @@ public function setTraceEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->traceEnabled = (bool)$value;
+ $request->traceEnabled = $value;
}
else
{
- $request->traceEnabled = (bool)$value->handle;
+ $request->traceEnabled = $value->handle;
}
$this->connection->__soapCall('INetworkAdapter_setTraceEnabled', array((array)$request));
}
@@ -9303,11 +11000,11 @@ public function setEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->enabled = (bool)$value;
+ $request->enabled = $value;
}
else
{
- $request->enabled = (bool)$value->handle;
+ $request->enabled = $value->handle;
}
$this->connection->__soapCall('ISerialPort_setEnabled', array((array)$request));
}
@@ -9395,11 +11092,11 @@ public function setServer($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->server = (bool)$value;
+ $request->server = $value;
}
else
{
- $request->server = (bool)$value->handle;
+ $request->server = $value->handle;
}
$this->connection->__soapCall('ISerialPort_setServer', array((array)$request));
}
@@ -9426,6 +11123,29 @@ public function setPath($value)
}
$this->connection->__soapCall('ISerialPort_setPath', array((array)$request));
}
+
+ public function getUartType()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISerialPort_getUartType', array((array)$request));
+ return new UartType ($this->connection, $response->returnval);
+ }
+
+ public function setUartType($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->uartType = $value;
+ }
+ else
+ {
+ $request->uartType = $value->handle;
+ }
+ $this->connection->__soapCall('ISerialPort_setUartType', array((array)$request));
+ }
}
/**
@@ -9464,11 +11184,11 @@ public function setEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->enabled = (bool)$value;
+ $request->enabled = $value;
}
else
{
- $request->enabled = (bool)$value->handle;
+ $request->enabled = $value->handle;
}
$this->connection->__soapCall('IParallelPort_setEnabled', array((array)$request));
}
@@ -9774,7 +11494,7 @@ public function getStats($arg_pattern, $arg_withDescriptions)
$request = new stdClass();
$request->_this = $this->handle;
$request->pattern = $arg_pattern;
- $request->withDescriptions = (bool)$arg_withDescriptions;
+ $request->withDescriptions = $arg_withDescriptions;
$response = $this->connection->__soapCall('IMachineDebugger_getStats', array((array)$request));
return (string)$response->returnval;
}
@@ -9793,11 +11513,11 @@ public function setSingleStep($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->singleStep = (bool)$value;
+ $request->singleStep = $value;
}
else
{
- $request->singleStep = (bool)$value->handle;
+ $request->singleStep = $value->handle;
}
$this->connection->__soapCall('IMachineDebugger_setSingleStep', array((array)$request));
}
@@ -9816,11 +11536,11 @@ public function setRecompileUser($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->recompileUser = (bool)$value;
+ $request->recompileUser = $value;
}
else
{
- $request->recompileUser = (bool)$value->handle;
+ $request->recompileUser = $value->handle;
}
$this->connection->__soapCall('IMachineDebugger_setRecompileUser', array((array)$request));
}
@@ -9839,11 +11559,11 @@ public function setRecompileSupervisor($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->recompileSupervisor = (bool)$value;
+ $request->recompileSupervisor = $value;
}
else
{
- $request->recompileSupervisor = (bool)$value->handle;
+ $request->recompileSupervisor = $value->handle;
}
$this->connection->__soapCall('IMachineDebugger_setRecompileSupervisor', array((array)$request));
}
@@ -9862,11 +11582,11 @@ public function setExecuteAllInIEM($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->executeAllInIEM = (bool)$value;
+ $request->executeAllInIEM = $value;
}
else
{
- $request->executeAllInIEM = (bool)$value->handle;
+ $request->executeAllInIEM = $value->handle;
}
$this->connection->__soapCall('IMachineDebugger_setExecuteAllInIEM', array((array)$request));
}
@@ -9885,11 +11605,11 @@ public function setPATMEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->PATMEnabled = (bool)$value;
+ $request->PATMEnabled = $value;
}
else
{
- $request->PATMEnabled = (bool)$value->handle;
+ $request->PATMEnabled = $value->handle;
}
$this->connection->__soapCall('IMachineDebugger_setPATMEnabled', array((array)$request));
}
@@ -9908,11 +11628,11 @@ public function setCSAMEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->CSAMEnabled = (bool)$value;
+ $request->CSAMEnabled = $value;
}
else
{
- $request->CSAMEnabled = (bool)$value->handle;
+ $request->CSAMEnabled = $value->handle;
}
$this->connection->__soapCall('IMachineDebugger_setCSAMEnabled', array((array)$request));
}
@@ -9931,11 +11651,11 @@ public function setLogEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->logEnabled = (bool)$value;
+ $request->logEnabled = $value;
}
else
{
- $request->logEnabled = (bool)$value->handle;
+ $request->logEnabled = $value->handle;
}
$this->connection->__soapCall('IMachineDebugger_setLogEnabled', array((array)$request));
}
@@ -9988,6 +11708,14 @@ public function getLogRelDestinations()
return (string)$response->returnval;
}
+ public function getExecutionEngine()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IMachineDebugger_getExecutionEngine', array((array)$request));
+ return new VMExecutionEngine ($this->connection, $response->returnval);
+ }
+
public function getHWVirtExEnabled()
{
$request = new stdClass();
@@ -10074,6 +11802,14 @@ public function getVM()
$response = $this->connection->__soapCall('IMachineDebugger_getVM', array((array)$request));
return (float)$response->returnval;
}
+
+ public function getUptime()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IMachineDebugger_getUptime', array((array)$request));
+ return (float)$response->returnval;
+ }
}
/**
@@ -10313,6 +12049,22 @@ public function getRemote()
$response = $this->connection->__soapCall('IUSBDevice_getRemote', array((array)$request));
return (bool)$response->returnval;
}
+
+ public function getDeviceInfo()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUSBDevice_getDeviceInfo', array((array)$request));
+ return (array)$response->returnval;
+ }
+
+ public function getBackend()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUSBDevice_getBackend', array((array)$request));
+ return (string)$response->returnval;
+ }
}
/**
@@ -10366,11 +12118,11 @@ public function setActive($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->active = (bool)$value;
+ $request->active = $value;
}
else
{
- $request->active = (bool)$value->handle;
+ $request->active = $value->handle;
}
$this->connection->__soapCall('IUSBDeviceFilter_setActive', array((array)$request));
}
@@ -10652,6 +12404,37 @@ class IHostUSBDeviceFilterCollection extends VBox_ManagedObjectCollection
protected $_interfaceName = "IHostUSBDeviceFilter";
}
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IUSBProxyBackend extends VBox_ManagedObject
+{
+
+ public function getName()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUSBProxyBackend_getName', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getType()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IUSBProxyBackend_getType', array((array)$request));
+ return (string)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IUSBProxyBackendCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IUSBProxyBackend";
+}
+
/**
* Generated VBoxWebService Interface Wrapper
*/
@@ -10691,11 +12474,11 @@ public function setEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->enabled = (bool)$value;
+ $request->enabled = $value;
}
else
{
- $request->enabled = (bool)$value->handle;
+ $request->enabled = $value->handle;
}
$this->connection->__soapCall('IAudioAdapter_setEnabled', array((array)$request));
}
@@ -10714,11 +12497,11 @@ public function setEnabledIn($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->enabledIn = (bool)$value;
+ $request->enabledIn = $value;
}
else
{
- $request->enabledIn = (bool)$value->handle;
+ $request->enabledIn = $value->handle;
}
$this->connection->__soapCall('IAudioAdapter_setEnabledIn', array((array)$request));
}
@@ -10737,11 +12520,11 @@ public function setEnabledOut($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->enabledOut = (bool)$value;
+ $request->enabledOut = $value;
}
else
{
- $request->enabledOut = (bool)$value->handle;
+ $request->enabledOut = $value->handle;
}
$this->connection->__soapCall('IAudioAdapter_setEnabledOut', array((array)$request));
}
@@ -10871,11 +12654,11 @@ public function setEnabled($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->enabled = (bool)$value;
+ $request->enabled = $value;
}
else
{
- $request->enabled = (bool)$value->handle;
+ $request->enabled = $value->handle;
}
$this->connection->__soapCall('IVRDEServer_setEnabled', array((array)$request));
}
@@ -10940,11 +12723,11 @@ public function setAllowMultiConnection($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->allowMultiConnection = (bool)$value;
+ $request->allowMultiConnection = $value;
}
else
{
- $request->allowMultiConnection = (bool)$value->handle;
+ $request->allowMultiConnection = $value->handle;
}
$this->connection->__soapCall('IVRDEServer_setAllowMultiConnection', array((array)$request));
}
@@ -10963,11 +12746,11 @@ public function setReuseSingleConnection($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->reuseSingleConnection = (bool)$value;
+ $request->reuseSingleConnection = $value;
}
else
{
- $request->reuseSingleConnection = (bool)$value->handle;
+ $request->reuseSingleConnection = $value->handle;
}
$this->connection->__soapCall('IVRDEServer_setReuseSingleConnection', array((array)$request));
}
@@ -11030,9 +12813,125 @@ public function getVRDEProperties()
/**
* Generated VBoxWebService Managed Object Collection
*/
-class IVRDEServerCollection extends VBox_ManagedObjectCollection
+class IVRDEServerCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IVRDEServer";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class ISharedFolder extends VBox_ManagedObject
+{
+
+ public function getName()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISharedFolder_getName', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getHostPath()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISharedFolder_getHostPath', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getAccessible()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISharedFolder_getAccessible', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function getWritable()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISharedFolder_getWritable', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function setWritable($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->writable = $value;
+ }
+ else
+ {
+ $request->writable = $value->handle;
+ }
+ $this->connection->__soapCall('ISharedFolder_setWritable', array((array)$request));
+ }
+
+ public function getAutoMount()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISharedFolder_getAutoMount', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function setAutoMount($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->autoMount = $value;
+ }
+ else
+ {
+ $request->autoMount = $value->handle;
+ }
+ $this->connection->__soapCall('ISharedFolder_setAutoMount', array((array)$request));
+ }
+
+ public function getAutoMountPoint()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISharedFolder_getAutoMountPoint', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function setAutoMountPoint($value)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->autoMountPoint = $value;
+ }
+ else
+ {
+ $request->autoMountPoint = $value->handle;
+ }
+ $this->connection->__soapCall('ISharedFolder_setAutoMountPoint', array((array)$request));
+ }
+
+ public function getLastAccessError()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ISharedFolder_getLastAccessError', array((array)$request));
+ return (string)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class ISharedFolderCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "IVRDEServer";
+ protected $_interfaceName = "ISharedFolder";
}
/**
@@ -11257,11 +13156,11 @@ public function setUseHostIOCache($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->useHostIOCache = (bool)$value;
+ $request->useHostIOCache = $value;
}
else
{
- $request->useHostIOCache = (bool)$value->handle;
+ $request->useHostIOCache = $value->handle;
}
$this->connection->__soapCall('IStorageController_setUseHostIOCache', array((array)$request));
}
@@ -11713,11 +13612,11 @@ public function setDNSPassDomain($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->DNSPassDomain = (bool)$value;
+ $request->DNSPassDomain = $value;
}
else
{
- $request->DNSPassDomain = (bool)$value->handle;
+ $request->DNSPassDomain = $value->handle;
}
$this->connection->__soapCall('INATEngine_setDNSPassDomain', array((array)$request));
}
@@ -11736,11 +13635,11 @@ public function setDNSProxy($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->DNSProxy = (bool)$value;
+ $request->DNSProxy = $value;
}
else
{
- $request->DNSProxy = (bool)$value->handle;
+ $request->DNSProxy = $value->handle;
}
$this->connection->__soapCall('INATEngine_setDNSProxy', array((array)$request));
}
@@ -11759,11 +13658,11 @@ public function setDNSUseHostResolver($value)
$request->_this = $this->handle;
if (is_null($value) || is_scalar($value))
{
- $request->DNSUseHostResolver = (bool)$value;
+ $request->DNSUseHostResolver = $value;
}
else
{
- $request->DNSUseHostResolver = (bool)$value->handle;
+ $request->DNSUseHostResolver = $value->handle;
}
$this->connection->__soapCall('INATEngine_setDNSUseHostResolver', array((array)$request));
}
@@ -11936,7 +13835,7 @@ public function registerListener($arg_listener, $arg_interesting, $arg_active)
$request->_this = $this->handle;
$request->listener = $arg_listener;
$request->interesting = $arg_interesting;
- $request->active = (bool)$arg_active;
+ $request->active = $arg_active;
$response = $this->connection->__soapCall('IEventSource_registerListener', array((array)$request));
return ;
}
@@ -12657,6 +14556,29 @@ class INetworkAdapterChangedEventCollection extends VBox_ManagedObjectCollection
protected $_interfaceName = "INetworkAdapterChangedEvent";
}
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IAudioAdapterChangedEvent extends IEvent
+{
+
+ public function getAudioAdapter()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IAudioAdapterChangedEvent_getAudioAdapter', array((array)$request));
+ return new IAudioAdapter ($this->connection, $response->returnval);
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IAudioAdapterChangedEventCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IAudioAdapterChangedEvent";
+}
+
/**
* Generated VBoxWebService Interface Wrapper
*/
@@ -13471,14 +15393,14 @@ class IVRDEServerInfoChangedEventCollection extends VBox_ManagedObjectCollection
/**
* Generated VBoxWebService Interface Wrapper
*/
-class IVideoCaptureChangedEvent extends IEvent
+class IRecordingChangedEvent extends IEvent
{
public function getMidlDoesNotLikeEmptyInterfaces()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IVideoCaptureChangedEvent_getMidlDoesNotLikeEmptyInterfaces', array((array)$request));
+ $response = $this->connection->__soapCall('IRecordingChangedEvent_getMidlDoesNotLikeEmptyInterfaces', array((array)$request));
return (bool)$response->returnval;
}
}
@@ -13486,9 +15408,9 @@ public function getMidlDoesNotLikeEmptyInterfaces()
/**
* Generated VBoxWebService Managed Object Collection
*/
-class IVideoCaptureChangedEventCollection extends VBox_ManagedObjectCollection
+class IRecordingChangedEventCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "IVideoCaptureChangedEvent";
+ protected $_interfaceName = "IRecordingChangedEvent";
}
/**
@@ -14044,167 +15966,439 @@ public function getScreenId()
return (float)$response->returnval;
}
- public function getOriginX()
+ public function getOriginX()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestMonitorChangedEvent_getOriginX', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function getOriginY()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestMonitorChangedEvent_getOriginY', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function getWidth()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestMonitorChangedEvent_getWidth', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function getHeight()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestMonitorChangedEvent_getHeight', array((array)$request));
+ return (float)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IGuestMonitorChangedEventCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IGuestMonitorChangedEvent";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IGuestUserStateChangedEvent extends IEvent
+{
+
+ public function getName()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestUserStateChangedEvent_getName', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getDomain()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestUserStateChangedEvent_getDomain', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function getState()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestUserStateChangedEvent_getState', array((array)$request));
+ return new GuestUserState ($this->connection, $response->returnval);
+ }
+
+ public function getStateDetails()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IGuestUserStateChangedEvent_getStateDetails', array((array)$request));
+ return (string)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IGuestUserStateChangedEventCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IGuestUserStateChangedEvent";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IStorageDeviceChangedEvent extends IEvent
+{
+
+ public function getStorageDevice()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IStorageDeviceChangedEvent_getStorageDevice', array((array)$request));
+ return new IMediumAttachment ($this->connection, $response->returnval);
+ }
+
+ public function getRemoved()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IStorageDeviceChangedEvent_getRemoved', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function getSilent()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('IStorageDeviceChangedEvent_getSilent', array((array)$request));
+ return (bool)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IStorageDeviceChangedEventCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IStorageDeviceChangedEvent";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class INATNetworkChangedEvent extends IEvent
+{
+
+ public function getNetworkName()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('INATNetworkChangedEvent_getNetworkName', array((array)$request));
+ return (string)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class INATNetworkChangedEventCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "INATNetworkChangedEvent";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class INATNetworkStartStopEvent extends INATNetworkChangedEvent
+{
+
+ public function getStartEvent()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('INATNetworkStartStopEvent_getStartEvent', array((array)$request));
+ return (bool)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class INATNetworkStartStopEventCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "INATNetworkStartStopEvent";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class INATNetworkAlterEvent extends INATNetworkChangedEvent
+{
+
+ public function getMidlDoesNotLikeEmptyInterfaces()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('INATNetworkAlterEvent_getMidlDoesNotLikeEmptyInterfaces', array((array)$request));
+ return (bool)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class INATNetworkAlterEventCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "INATNetworkAlterEvent";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class INATNetworkCreationDeletionEvent extends INATNetworkAlterEvent
+{
+
+ public function getCreationEvent()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('INATNetworkCreationDeletionEvent_getCreationEvent', array((array)$request));
+ return (bool)$response->returnval;
+ }
+}
+
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class INATNetworkCreationDeletionEventCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "INATNetworkCreationDeletionEvent";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class INATNetworkSettingEvent extends INATNetworkAlterEvent
+{
+
+ public function getEnabled()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('INATNetworkSettingEvent_getEnabled', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function getNetwork()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IGuestMonitorChangedEvent_getOriginX', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('INATNetworkSettingEvent_getNetwork', array((array)$request));
+ return (string)$response->returnval;
}
- public function getOriginY()
+ public function getGateway()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IGuestMonitorChangedEvent_getOriginY', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('INATNetworkSettingEvent_getGateway', array((array)$request));
+ return (string)$response->returnval;
}
- public function getWidth()
+ public function getAdvertiseDefaultIPv6RouteEnabled()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IGuestMonitorChangedEvent_getWidth', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('INATNetworkSettingEvent_getAdvertiseDefaultIPv6RouteEnabled', array((array)$request));
+ return (bool)$response->returnval;
}
- public function getHeight()
+ public function getNeedDhcpServer()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IGuestMonitorChangedEvent_getHeight', array((array)$request));
- return (float)$response->returnval;
+ $response = $this->connection->__soapCall('INATNetworkSettingEvent_getNeedDhcpServer', array((array)$request));
+ return (bool)$response->returnval;
}
}
/**
* Generated VBoxWebService Managed Object Collection
*/
-class IGuestMonitorChangedEventCollection extends VBox_ManagedObjectCollection
+class INATNetworkSettingEventCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "IGuestMonitorChangedEvent";
+ protected $_interfaceName = "INATNetworkSettingEvent";
}
/**
* Generated VBoxWebService Interface Wrapper
*/
-class IGuestUserStateChangedEvent extends IEvent
+class INATNetworkPortForwardEvent extends INATNetworkAlterEvent
{
+ public function getCreate()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getCreate', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
+ public function getIpv6()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getIpv6', array((array)$request));
+ return (bool)$response->returnval;
+ }
+
public function getName()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IGuestUserStateChangedEvent_getName', array((array)$request));
+ $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getName', array((array)$request));
return (string)$response->returnval;
}
- public function getDomain()
+ public function getProto()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IGuestUserStateChangedEvent_getDomain', array((array)$request));
+ $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getProto', array((array)$request));
+ return new NATProtocol ($this->connection, $response->returnval);
+ }
+
+ public function getHostIp()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getHostIp', array((array)$request));
return (string)$response->returnval;
}
- public function getState()
+ public function getHostPort()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IGuestUserStateChangedEvent_getState', array((array)$request));
- return new GuestUserState ($this->connection, $response->returnval);
+ $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getHostPort', array((array)$request));
+ return (int)$response->returnval;
}
- public function getStateDetails()
+ public function getGuestIp()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IGuestUserStateChangedEvent_getStateDetails', array((array)$request));
+ $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getGuestIp', array((array)$request));
return (string)$response->returnval;
}
+
+ public function getGuestPort()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getGuestPort', array((array)$request));
+ return (int)$response->returnval;
+ }
}
/**
* Generated VBoxWebService Managed Object Collection
*/
-class IGuestUserStateChangedEventCollection extends VBox_ManagedObjectCollection
+class INATNetworkPortForwardEventCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "IGuestUserStateChangedEvent";
+ protected $_interfaceName = "INATNetworkPortForwardEvent";
}
/**
* Generated VBoxWebService Interface Wrapper
*/
-class IStorageDeviceChangedEvent extends IEvent
+class IHostNameResolutionConfigurationChangeEvent extends IEvent
{
- public function getStorageDevice()
- {
- $request = new stdClass();
- $request->_this = $this->handle;
- $response = $this->connection->__soapCall('IStorageDeviceChangedEvent_getStorageDevice', array((array)$request));
- return new IMediumAttachment ($this->connection, $response->returnval);
- }
-
- public function getRemoved()
+ public function getMidlDoesNotLikeEmptyInterfaces()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IStorageDeviceChangedEvent_getRemoved', array((array)$request));
+ $response = $this->connection->__soapCall('IHostNameResolutionConfigurationChangeEvent_getMidlDoesNotLikeEmptyInterfaces', array((array)$request));
return (bool)$response->returnval;
}
+}
- public function getSilent()
+/**
+ * Generated VBoxWebService Managed Object Collection
+ */
+class IHostNameResolutionConfigurationChangeEventCollection extends VBox_ManagedObjectCollection
+{
+ protected $_interfaceName = "IHostNameResolutionConfigurationChangeEvent";
+}
+
+/**
+ * Generated VBoxWebService Interface Wrapper
+ */
+class IProgressEvent extends IEvent
+{
+
+ public function getProgressId()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IStorageDeviceChangedEvent_getSilent', array((array)$request));
- return (bool)$response->returnval;
+ $response = $this->connection->__soapCall('IProgressEvent_getProgressId', array((array)$request));
+ return (string)$response->returnval;
}
}
/**
* Generated VBoxWebService Managed Object Collection
*/
-class IStorageDeviceChangedEventCollection extends VBox_ManagedObjectCollection
+class IProgressEventCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "IStorageDeviceChangedEvent";
+ protected $_interfaceName = "IProgressEvent";
}
/**
* Generated VBoxWebService Interface Wrapper
*/
-class INATNetworkChangedEvent extends IEvent
+class IProgressPercentageChangedEvent extends IProgressEvent
{
- public function getNetworkName()
+ public function getPercent()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkChangedEvent_getNetworkName', array((array)$request));
- return (string)$response->returnval;
+ $response = $this->connection->__soapCall('IProgressPercentageChangedEvent_getPercent', array((array)$request));
+ return (int)$response->returnval;
}
}
/**
* Generated VBoxWebService Managed Object Collection
*/
-class INATNetworkChangedEventCollection extends VBox_ManagedObjectCollection
+class IProgressPercentageChangedEventCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "INATNetworkChangedEvent";
+ protected $_interfaceName = "IProgressPercentageChangedEvent";
}
/**
* Generated VBoxWebService Interface Wrapper
*/
-class INATNetworkStartStopEvent extends INATNetworkChangedEvent
+class IProgressTaskCompletedEvent extends IProgressEvent
{
- public function getStartEvent()
+ public function getMidlDoesNotLikeEmptyInterfaces()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkStartStopEvent_getStartEvent', array((array)$request));
+ $response = $this->connection->__soapCall('IProgressTaskCompletedEvent_getMidlDoesNotLikeEmptyInterfaces', array((array)$request));
return (bool)$response->returnval;
}
}
@@ -14212,212 +16406,356 @@ public function getStartEvent()
/**
* Generated VBoxWebService Managed Object Collection
*/
-class INATNetworkStartStopEventCollection extends VBox_ManagedObjectCollection
+class IProgressTaskCompletedEventCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "INATNetworkStartStopEvent";
+ protected $_interfaceName = "IProgressTaskCompletedEvent";
}
/**
* Generated VBoxWebService Interface Wrapper
*/
-class INATNetworkAlterEvent extends INATNetworkChangedEvent
+class ICursorPositionChangedEvent extends IEvent
{
- public function getMidlDoesNotLikeEmptyInterfaces()
+ public function getHasData()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkAlterEvent_getMidlDoesNotLikeEmptyInterfaces', array((array)$request));
+ $response = $this->connection->__soapCall('ICursorPositionChangedEvent_getHasData', array((array)$request));
return (bool)$response->returnval;
}
+
+ public function getX()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICursorPositionChangedEvent_getX', array((array)$request));
+ return (float)$response->returnval;
+ }
+
+ public function getY()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICursorPositionChangedEvent_getY', array((array)$request));
+ return (float)$response->returnval;
+ }
}
/**
* Generated VBoxWebService Managed Object Collection
*/
-class INATNetworkAlterEventCollection extends VBox_ManagedObjectCollection
+class ICursorPositionChangedEventCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "INATNetworkAlterEvent";
+ protected $_interfaceName = "ICursorPositionChangedEvent";
}
/**
* Generated VBoxWebService Interface Wrapper
*/
-class INATNetworkCreationDeletionEvent extends INATNetworkAlterEvent
+class ICloudClient extends VBox_ManagedObject
{
- public function getCreationEvent()
+ public function getExportLaunchParameters()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkCreationDeletionEvent_getCreationEvent', array((array)$request));
- return (bool)$response->returnval;
+ $response = $this->connection->__soapCall('ICloudClient_getExportLaunchParameters', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function exportLaunchVM($arg_description, $arg_progress, $arg_virtualBox)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->description = $arg_description;
+ $request->progress = $arg_progress;
+ $request->virtualBox = $arg_virtualBox;
+ $response = $this->connection->__soapCall('ICloudClient_exportLaunchVM', array((array)$request));
+ return ;
}
}
/**
* Generated VBoxWebService Managed Object Collection
*/
-class INATNetworkCreationDeletionEventCollection extends VBox_ManagedObjectCollection
+class ICloudClientCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "INATNetworkCreationDeletionEvent";
+ protected $_interfaceName = "ICloudClient";
}
/**
* Generated VBoxWebService Interface Wrapper
*/
-class INATNetworkSettingEvent extends INATNetworkAlterEvent
+class ICloudProfile extends VBox_ManagedObject
{
- public function getEnabled()
+ public function getProperty($arg_name)
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkSettingEvent_getEnabled', array((array)$request));
- return (bool)$response->returnval;
+ $request->name = $arg_name;
+ $response = $this->connection->__soapCall('ICloudProfile_getProperty', array((array)$request));
+ return (string)$response->returnval;
}
- public function getNetwork()
+ public function setProperty($arg_name, $arg_value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkSettingEvent_getNetwork', array((array)$request));
- return (string)$response->returnval;
+ $request->name = $arg_name;
+ $request->value = $arg_value;
+ $response = $this->connection->__soapCall('ICloudProfile_setProperty', array((array)$request));
+ return ;
}
- public function getGateway()
+ public function getProperties($arg_names)
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkSettingEvent_getGateway', array((array)$request));
+ $request->names = $arg_names;
+ $response = $this->connection->__soapCall('ICloudProfile_getProperties', array((array)$request));
+ return array((array)$response->returnval, (array)$response->returnNames);
+ }
+
+ public function setProperties($arg_names, $arg_values)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->names = $arg_names;
+ $request->values = $arg_values;
+ $response = $this->connection->__soapCall('ICloudProfile_setProperties', array((array)$request));
+ return ;
+ }
+
+ public function remove()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICloudProfile_remove', array((array)$request));
+ return ;
+ }
+
+ public function createCloudClient()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICloudProfile_createCloudClient', array((array)$request));
+ return new ICloudClient ($this->connection, $response->returnval);
+ }
+
+ public function getName()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICloudProfile_getName', array((array)$request));
return (string)$response->returnval;
}
- public function getAdvertiseDefaultIPv6RouteEnabled()
+ public function setName($value)
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkSettingEvent_getAdvertiseDefaultIPv6RouteEnabled', array((array)$request));
- return (bool)$response->returnval;
+ if (is_null($value) || is_scalar($value))
+ {
+ $request->name = $value;
+ }
+ else
+ {
+ $request->name = $value->handle;
+ }
+ $this->connection->__soapCall('ICloudProfile_setName', array((array)$request));
}
- public function getNeedDhcpServer()
+ public function getProviderId()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkSettingEvent_getNeedDhcpServer', array((array)$request));
- return (bool)$response->returnval;
+ $response = $this->connection->__soapCall('ICloudProfile_getProviderId', array((array)$request));
+ return (string)$response->returnval;
}
}
/**
* Generated VBoxWebService Managed Object Collection
*/
-class INATNetworkSettingEventCollection extends VBox_ManagedObjectCollection
+class ICloudProfileCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "INATNetworkSettingEvent";
+ protected $_interfaceName = "ICloudProfile";
}
/**
* Generated VBoxWebService Interface Wrapper
*/
-class INATNetworkPortForwardEvent extends INATNetworkAlterEvent
+class ICloudProvider extends VBox_ManagedObject
{
- public function getCreate()
+ public function getPropertyDescription($arg_name)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->name = $arg_name;
+ $response = $this->connection->__soapCall('ICloudProvider_getPropertyDescription', array((array)$request));
+ return (string)$response->returnval;
+ }
+
+ public function createProfile($arg_profileName, $arg_names, $arg_values)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->profileName = $arg_profileName;
+ $request->names = $arg_names;
+ $request->values = $arg_values;
+ $response = $this->connection->__soapCall('ICloudProvider_createProfile', array((array)$request));
+ return ;
+ }
+
+ public function importProfiles()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICloudProvider_importProfiles', array((array)$request));
+ return ;
+ }
+
+ public function restoreProfiles()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICloudProvider_restoreProfiles', array((array)$request));
+ return ;
+ }
+
+ public function saveProfiles()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICloudProvider_saveProfiles', array((array)$request));
+ return ;
+ }
+
+ public function getProfileByName($arg_profileName)
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getCreate', array((array)$request));
- return (bool)$response->returnval;
+ $request->profileName = $arg_profileName;
+ $response = $this->connection->__soapCall('ICloudProvider_getProfileByName', array((array)$request));
+ return new ICloudProfile ($this->connection, $response->returnval);
}
- public function getIpv6()
+ public function prepareUninstall()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getIpv6', array((array)$request));
- return (bool)$response->returnval;
+ $response = $this->connection->__soapCall('ICloudProvider_prepareUninstall', array((array)$request));
+ return ;
}
public function getName()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getName', array((array)$request));
+ $response = $this->connection->__soapCall('ICloudProvider_getName', array((array)$request));
return (string)$response->returnval;
}
- public function getProto()
+ public function getShortName()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getProto', array((array)$request));
- return new NATProtocol ($this->connection, $response->returnval);
+ $response = $this->connection->__soapCall('ICloudProvider_getShortName', array((array)$request));
+ return (string)$response->returnval;
}
- public function getHostIp()
+ public function getId()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getHostIp', array((array)$request));
+ $response = $this->connection->__soapCall('ICloudProvider_getId', array((array)$request));
return (string)$response->returnval;
}
- public function getHostPort()
+ public function getProfiles()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getHostPort', array((array)$request));
- return (int)$response->returnval;
+ $response = $this->connection->__soapCall('ICloudProvider_getProfiles', array((array)$request));
+ return new ICloudProfileCollection ($this->connection, (array)$response->returnval);
}
- public function getGuestIp()
+ public function getProfileNames()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getGuestIp', array((array)$request));
- return (string)$response->returnval;
+ $response = $this->connection->__soapCall('ICloudProvider_getProfileNames', array((array)$request));
+ return (array)$response->returnval;
}
- public function getGuestPort()
+ public function getSupportedPropertyNames()
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('INATNetworkPortForwardEvent_getGuestPort', array((array)$request));
- return (int)$response->returnval;
+ $response = $this->connection->__soapCall('ICloudProvider_getSupportedPropertyNames', array((array)$request));
+ return (array)$response->returnval;
}
}
/**
* Generated VBoxWebService Managed Object Collection
*/
-class INATNetworkPortForwardEventCollection extends VBox_ManagedObjectCollection
+class ICloudProviderCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "INATNetworkPortForwardEvent";
+ protected $_interfaceName = "ICloudProvider";
}
/**
* Generated VBoxWebService Interface Wrapper
*/
-class IHostNameResolutionConfigurationChangeEvent extends IEvent
+class ICloudProviderManager extends VBox_ManagedObject
{
- public function getMidlDoesNotLikeEmptyInterfaces()
+ public function getProviderById($arg_providerId)
{
$request = new stdClass();
$request->_this = $this->handle;
- $response = $this->connection->__soapCall('IHostNameResolutionConfigurationChangeEvent_getMidlDoesNotLikeEmptyInterfaces', array((array)$request));
- return (bool)$response->returnval;
+ $request->providerId = $arg_providerId;
+ $response = $this->connection->__soapCall('ICloudProviderManager_getProviderById', array((array)$request));
+ return new ICloudProvider ($this->connection, $response->returnval);
+ }
+
+ public function getProviderByShortName($arg_providerName)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->providerName = $arg_providerName;
+ $response = $this->connection->__soapCall('ICloudProviderManager_getProviderByShortName', array((array)$request));
+ return new ICloudProvider ($this->connection, $response->returnval);
+ }
+
+ public function getProviderByName($arg_providerName)
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $request->providerName = $arg_providerName;
+ $response = $this->connection->__soapCall('ICloudProviderManager_getProviderByName', array((array)$request));
+ return new ICloudProvider ($this->connection, $response->returnval);
+ }
+
+ public function getProviders()
+ {
+ $request = new stdClass();
+ $request->_this = $this->handle;
+ $response = $this->connection->__soapCall('ICloudProviderManager_getProviders', array((array)$request));
+ return new ICloudProviderCollection ($this->connection, (array)$response->returnval);
}
}
/**
* Generated VBoxWebService Managed Object Collection
*/
-class IHostNameResolutionConfigurationChangeEventCollection extends VBox_ManagedObjectCollection
+class ICloudProviderManagerCollection extends VBox_ManagedObjectCollection
{
- protected $_interfaceName = "IHostNameResolutionConfigurationChangeEvent";
+ protected $_interfaceName = "ICloudProviderManager";
}
/**
@@ -14589,6 +16927,7 @@ class IGuestOSType extends VBox_Struct
protected $recommendedIOAPIC;
protected $recommendedVirtEx;
protected $recommendedRAM;
+ protected $recommendedGraphicsController;
protected $recommendedVRAM;
protected $recommended2DVideoAcceleration;
protected $recommended3DAcceleration;
@@ -14609,7 +16948,9 @@ class IGuestOSType extends VBox_Struct
protected $recommendedAudioCodec;
protected $recommendedFloppy;
protected $recommendedUSB;
+ protected $recommendedUSB3;
protected $recommendedTFReset;
+ protected $recommendedX2APIC;
public function __construct($connection, $values)
{
@@ -14622,6 +16963,7 @@ public function __construct($connection, $values)
$this->recommendedIOAPIC = $values->recommendedIOAPIC;
$this->recommendedVirtEx = $values->recommendedVirtEx;
$this->recommendedRAM = $values->recommendedRAM;
+ $this->recommendedGraphicsController = $values->recommendedGraphicsController;
$this->recommendedVRAM = $values->recommendedVRAM;
$this->recommended2DVideoAcceleration = $values->recommended2DVideoAcceleration;
$this->recommended3DAcceleration = $values->recommended3DAcceleration;
@@ -14642,7 +16984,9 @@ public function __construct($connection, $values)
$this->recommendedAudioCodec = $values->recommendedAudioCodec;
$this->recommendedFloppy = $values->recommendedFloppy;
$this->recommendedUSB = $values->recommendedUSB;
+ $this->recommendedUSB3 = $values->recommendedUSB3;
$this->recommendedTFReset = $values->recommendedTFReset;
+ $this->recommendedX2APIC = $values->recommendedX2APIC;
}
public function getFamilyId()
@@ -14677,6 +17021,10 @@ public function getRecommendedRAM()
{
return (float)$this->recommendedRAM;
}
+ public function getRecommendedGraphicsController()
+ {
+ return new GraphicsControllerType ($this->connection, $this->recommendedGraphicsController);
+ }
public function getRecommendedVRAM()
{
return (float)$this->recommendedVRAM;
@@ -14757,10 +17105,18 @@ public function getRecommendedUSB()
{
return (bool)$this->recommendedUSB;
}
+ public function getRecommendedUSB3()
+ {
+ return (bool)$this->recommendedUSB3;
+ }
public function getRecommendedTFReset()
{
return (bool)$this->recommendedTFReset;
}
+ public function getRecommendedX2APIC()
+ {
+ return (bool)$this->recommendedX2APIC;
+ }
}
/**
@@ -14915,70 +17271,13 @@ class IMediumAttachmentCollection extends VBox_StructCollection
protected $_interfaceName = "IMediumAttachment";
}
-/**
- * Generated VBoxWebService Struct
- */
-class ISharedFolder extends VBox_Struct
-{
- protected $name;
- protected $hostPath;
- protected $accessible;
- protected $writable;
- protected $autoMount;
- protected $lastAccessError;
-
- public function __construct($connection, $values)
- {
- $this->connection = $connection;
- $this->name = $values->name;
- $this->hostPath = $values->hostPath;
- $this->accessible = $values->accessible;
- $this->writable = $values->writable;
- $this->autoMount = $values->autoMount;
- $this->lastAccessError = $values->lastAccessError;
- }
-
- public function getName()
- {
- return (string)$this->name;
- }
- public function getHostPath()
- {
- return (string)$this->hostPath;
- }
- public function getAccessible()
- {
- return (bool)$this->accessible;
- }
- public function getWritable()
- {
- return (bool)$this->writable;
- }
- public function getAutoMount()
- {
- return (bool)$this->autoMount;
- }
- public function getLastAccessError()
- {
- return (string)$this->lastAccessError;
- }
-}
-
-/**
- * Generated VBoxWebService Struct Collection
- */
-class ISharedFolderCollection extends VBox_StructCollection
-{
- protected $_interfaceName = "ISharedFolder";
-}
-
/**
* Generated VBoxWebService ENUM
*/
class SettingsVersion extends VBox_Enum
{
- public $NameMap = array(0 => 'Null', 1 => 'v1_0', 2 => 'v1_1', 3 => 'v1_2', 4 => 'v1_3pre', 5 => 'v1_3', 6 => 'v1_4', 7 => 'v1_5', 8 => 'v1_6', 9 => 'v1_7', 10 => 'v1_8', 11 => 'v1_9', 12 => 'v1_10', 13 => 'v1_11', 14 => 'v1_12', 15 => 'v1_13', 16 => 'v1_14', 17 => 'v1_15', 99999 => 'Future');
- public $ValueMap = array('Null' => 0, 'v1_0' => 1, 'v1_1' => 2, 'v1_2' => 3, 'v1_3pre' => 4, 'v1_3' => 5, 'v1_4' => 6, 'v1_5' => 7, 'v1_6' => 8, 'v1_7' => 9, 'v1_8' => 10, 'v1_9' => 11, 'v1_10' => 12, 'v1_11' => 13, 'v1_12' => 14, 'v1_13' => 15, 'v1_14' => 16, 'v1_15' => 17, 'Future' => 99999);
+ public $NameMap = array(0 => 'Null', 1 => 'v1_0', 2 => 'v1_1', 3 => 'v1_2', 4 => 'v1_3pre', 5 => 'v1_3', 6 => 'v1_4', 7 => 'v1_5', 8 => 'v1_6', 9 => 'v1_7', 10 => 'v1_8', 11 => 'v1_9', 12 => 'v1_10', 13 => 'v1_11', 14 => 'v1_12', 15 => 'v1_13', 16 => 'v1_14', 17 => 'v1_15', 18 => 'v1_16', 19 => 'v1_17', 99999 => 'Future');
+ public $ValueMap = array('Null' => 0, 'v1_0' => 1, 'v1_1' => 2, 'v1_2' => 3, 'v1_3pre' => 4, 'v1_3' => 5, 'v1_4' => 6, 'v1_5' => 7, 'v1_6' => 8, 'v1_7' => 9, 'v1_8' => 10, 'v1_9' => 11, 'v1_10' => 12, 'v1_11' => 13, 'v1_12' => 14, 'v1_13' => 15, 'v1_14' => 16, 'v1_15' => 17, 'v1_16' => 18, 'v1_17' => 19, 'Future' => 99999);
}
/**
@@ -15045,8 +17344,8 @@ class SessionStateCollection extends VBox_EnumCollection
*/
class CPUPropertyType extends VBox_Enum
{
- public $NameMap = array(0 => 'Null', 1 => 'PAE', 2 => 'LongMode', 3 => 'TripleFaultReset');
- public $ValueMap = array('Null' => 0, 'PAE' => 1, 'LongMode' => 2, 'TripleFaultReset' => 3);
+ public $NameMap = array(0 => 'Null', 1 => 'PAE', 2 => 'LongMode', 3 => 'TripleFaultReset', 4 => 'APIC', 5 => 'X2APIC', 6 => 'IBPBOnVMExit', 7 => 'IBPBOnVMEntry', 8 => 'HWVirt', 9 => 'SpecCtrl', 10 => 'SpecCtrlByHost', 11 => 'L1DFlushOnEMTScheduling', 12 => 'L1DFlushOnVMEntry');
+ public $ValueMap = array('Null' => 0, 'PAE' => 1, 'LongMode' => 2, 'TripleFaultReset' => 3, 'APIC' => 4, 'X2APIC' => 5, 'IBPBOnVMExit' => 6, 'IBPBOnVMEntry' => 7, 'HWVirt' => 8, 'SpecCtrl' => 9, 'SpecCtrlByHost' => 10, 'L1DFlushOnEMTScheduling' => 11, 'L1DFlushOnVMEntry' => 12);
}
/**
@@ -15062,8 +17361,8 @@ class CPUPropertyTypeCollection extends VBox_EnumCollection
*/
class HWVirtExPropertyType extends VBox_Enum
{
- public $NameMap = array(0 => 'Null', 1 => 'Enabled', 2 => 'VPID', 3 => 'NestedPaging', 4 => 'UnrestrictedExecution', 5 => 'LargePages', 6 => 'Force');
- public $ValueMap = array('Null' => 0, 'Enabled' => 1, 'VPID' => 2, 'NestedPaging' => 3, 'UnrestrictedExecution' => 4, 'LargePages' => 5, 'Force' => 6);
+ public $NameMap = array(0 => 'Null', 1 => 'Enabled', 2 => 'VPID', 3 => 'NestedPaging', 4 => 'UnrestrictedExecution', 5 => 'LargePages', 6 => 'Force', 7 => 'UseNativeApi');
+ public $ValueMap = array('Null' => 0, 'Enabled' => 1, 'VPID' => 2, 'NestedPaging' => 3, 'UnrestrictedExecution' => 4, 'LargePages' => 5, 'Force' => 6, 'UseNativeApi' => 7);
}
/**
@@ -15244,13 +17543,30 @@ class BIOSBootMenuModeCollection extends VBox_EnumCollection
protected $_interfaceName = "BIOSBootMenuMode";
}
+/**
+ * Generated VBoxWebService ENUM
+ */
+class APICMode extends VBox_Enum
+{
+ public $NameMap = array(0 => 'Disabled', 1 => 'APIC', 2 => 'X2APIC');
+ public $ValueMap = array('Disabled' => 0, 'APIC' => 1, 'X2APIC' => 2);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class APICModeCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "APICMode";
+}
+
/**
* Generated VBoxWebService ENUM
*/
class ProcessorFeature extends VBox_Enum
{
- public $NameMap = array(0 => 'HWVirtEx', 1 => 'PAE', 2 => 'LongMode', 3 => 'NestedPaging');
- public $ValueMap = array('HWVirtEx' => 0, 'PAE' => 1, 'LongMode' => 2, 'NestedPaging' => 3);
+ public $NameMap = array(0 => 'HWVirtEx', 1 => 'PAE', 2 => 'LongMode', 3 => 'NestedPaging', 4 => 'UnrestrictedGuest', 5 => 'NestedHWVirt');
+ public $ValueMap = array('HWVirtEx' => 0, 'PAE' => 1, 'LongMode' => 2, 'NestedPaging' => 3, 'UnrestrictedGuest' => 4, 'NestedHWVirt' => 5);
}
/**
@@ -15368,8 +17684,8 @@ class DhcpOptEncodingCollection extends VBox_EnumCollection
*/
class VFSType extends VBox_Enum
{
- public $NameMap = array(1 => 'File', 2 => 'Cloud', 3 => 'S3', 4 => 'WebDav');
- public $ValueMap = array('File' => 1, 'Cloud' => 2, 'S3' => 3, 'WebDav' => 4);
+ public $NameMap = array(1 => 'File', 2 => 'Cloud', 3 => 'S3', 4 => 'WebDav', 5 => 'OCI');
+ public $ValueMap = array('File' => 1, 'Cloud' => 2, 'S3' => 3, 'WebDav' => 4, 'OCI' => 5);
}
/**
@@ -15414,13 +17730,30 @@ class ExportOptionsCollection extends VBox_EnumCollection
protected $_interfaceName = "ExportOptions";
}
+/**
+ * Generated VBoxWebService ENUM
+ */
+class CertificateVersion extends VBox_Enum
+{
+ public $NameMap = array(1 => 'V1', 2 => 'V2', 3 => 'V3', 99 => 'Unknown');
+ public $ValueMap = array('V1' => 1, 'V2' => 2, 'V3' => 3, 'Unknown' => 99);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class CertificateVersionCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "CertificateVersion";
+}
+
/**
* Generated VBoxWebService ENUM
*/
class VirtualSystemDescriptionType extends VBox_Enum
{
- public $NameMap = array(1 => 'Ignore', 2 => 'OS', 3 => 'Name', 4 => 'Product', 5 => 'Vendor', 6 => 'Version', 7 => 'ProductUrl', 8 => 'VendorUrl', 9 => 'Description', 10 => 'License', 11 => 'Miscellaneous', 12 => 'CPU', 13 => 'Memory', 14 => 'HardDiskControllerIDE', 15 => 'HardDiskControllerSATA', 16 => 'HardDiskControllerSCSI', 17 => 'HardDiskControllerSAS', 18 => 'HardDiskImage', 19 => 'Floppy', 20 => 'CDROM', 21 => 'NetworkAdapter', 22 => 'USBController', 23 => 'SoundCard', 24 => 'SettingsFile');
- public $ValueMap = array('Ignore' => 1, 'OS' => 2, 'Name' => 3, 'Product' => 4, 'Vendor' => 5, 'Version' => 6, 'ProductUrl' => 7, 'VendorUrl' => 8, 'Description' => 9, 'License' => 10, 'Miscellaneous' => 11, 'CPU' => 12, 'Memory' => 13, 'HardDiskControllerIDE' => 14, 'HardDiskControllerSATA' => 15, 'HardDiskControllerSCSI' => 16, 'HardDiskControllerSAS' => 17, 'HardDiskImage' => 18, 'Floppy' => 19, 'CDROM' => 20, 'NetworkAdapter' => 21, 'USBController' => 22, 'SoundCard' => 23, 'SettingsFile' => 24);
+ public $NameMap = array(1 => 'Ignore', 2 => 'OS', 3 => 'Name', 4 => 'Product', 5 => 'Vendor', 6 => 'Version', 7 => 'ProductUrl', 8 => 'VendorUrl', 9 => 'Description', 10 => 'License', 11 => 'Miscellaneous', 12 => 'CPU', 13 => 'Memory', 14 => 'HardDiskControllerIDE', 15 => 'HardDiskControllerSATA', 16 => 'HardDiskControllerSCSI', 17 => 'HardDiskControllerSAS', 18 => 'HardDiskImage', 19 => 'Floppy', 20 => 'CDROM', 21 => 'NetworkAdapter', 22 => 'USBController', 23 => 'SoundCard', 24 => 'SettingsFile', 25 => 'BaseFolder', 26 => 'PrimaryGroup', 27 => 'CloudInstanceShape', 28 => 'CloudDomain', 29 => 'CloudBootDiskSize', 30 => 'CloudBucket', 31 => 'CloudOCIVCN', 32 => 'CloudPublicIP', 33 => 'CloudProfileName', 34 => 'CloudOCISubnet', 35 => 'CloudKeepObject', 36 => 'CloudLaunchInstance');
+ public $ValueMap = array('Ignore' => 1, 'OS' => 2, 'Name' => 3, 'Product' => 4, 'Vendor' => 5, 'Version' => 6, 'ProductUrl' => 7, 'VendorUrl' => 8, 'Description' => 9, 'License' => 10, 'Miscellaneous' => 11, 'CPU' => 12, 'Memory' => 13, 'HardDiskControllerIDE' => 14, 'HardDiskControllerSATA' => 15, 'HardDiskControllerSCSI' => 16, 'HardDiskControllerSAS' => 17, 'HardDiskImage' => 18, 'Floppy' => 19, 'CDROM' => 20, 'NetworkAdapter' => 21, 'USBController' => 22, 'SoundCard' => 23, 'SettingsFile' => 24, 'BaseFolder' => 25, 'PrimaryGroup' => 26, 'CloudInstanceShape' => 27, 'CloudDomain' => 28, 'CloudBootDiskSize' => 29, 'CloudBucket' => 30, 'CloudOCIVCN' => 31, 'CloudPublicIP' => 32, 'CloudProfileName' => 33, 'CloudOCISubnet' => 34, 'CloudKeepObject' => 35, 'CloudLaunchInstance' => 36);
}
/**
@@ -15448,13 +17781,115 @@ class VirtualSystemDescriptionValueTypeCollection extends VBox_EnumCollection
protected $_interfaceName = "VirtualSystemDescriptionValueType";
}
+/**
+ * Generated VBoxWebService ENUM
+ */
+class RecordingDestination extends VBox_Enum
+{
+ public $NameMap = array(0 => 'None', 1 => 'File');
+ public $ValueMap = array('None' => 0, 'File' => 1);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class RecordingDestinationCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "RecordingDestination";
+}
+
+/**
+ * Generated VBoxWebService ENUM
+ */
+class RecordingFeature extends VBox_Enum
+{
+ public $NameMap = array(0 => 'None', 1 => 'Video', 2 => 'Audio');
+ public $ValueMap = array('None' => 0, 'Video' => 1, 'Audio' => 2);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class RecordingFeatureCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "RecordingFeature";
+}
+
+/**
+ * Generated VBoxWebService ENUM
+ */
+class RecordingAudioCodec extends VBox_Enum
+{
+ public $NameMap = array(0 => 'None', 1 => 'WavPCM', 2 => 'Opus');
+ public $ValueMap = array('None' => 0, 'WavPCM' => 1, 'Opus' => 2);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class RecordingAudioCodecCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "RecordingAudioCodec";
+}
+
+/**
+ * Generated VBoxWebService ENUM
+ */
+class RecordingVideoCodec extends VBox_Enum
+{
+ public $NameMap = array(0 => 'None', 1 => 'VP8', 2 => 'VP9', 3 => 'AV1');
+ public $ValueMap = array('None' => 0, 'VP8' => 1, 'VP9' => 2, 'AV1' => 3);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class RecordingVideoCodecCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "RecordingVideoCodec";
+}
+
+/**
+ * Generated VBoxWebService ENUM
+ */
+class RecordingVideoScalingMethod extends VBox_Enum
+{
+ public $NameMap = array(0 => 'None', 1 => 'NearestNeighbor', 2 => 'Bilinear', 3 => 'Bicubic');
+ public $ValueMap = array('None' => 0, 'NearestNeighbor' => 1, 'Bilinear' => 2, 'Bicubic' => 3);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class RecordingVideoScalingMethodCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "RecordingVideoScalingMethod";
+}
+
+/**
+ * Generated VBoxWebService ENUM
+ */
+class RecordingVideoRateControlMode extends VBox_Enum
+{
+ public $NameMap = array(0 => 'CBR', 1 => 'VBR');
+ public $ValueMap = array('CBR' => 0, 'VBR' => 1);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class RecordingVideoRateControlModeCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "RecordingVideoRateControlMode";
+}
+
/**
* Generated VBoxWebService ENUM
*/
class GraphicsControllerType extends VBox_Enum
{
- public $NameMap = array(0 => 'Null', 1 => 'VBoxVGA', 2 => 'VMSVGA');
- public $ValueMap = array('Null' => 0, 'VBoxVGA' => 1, 'VMSVGA' => 2);
+ public $NameMap = array(0 => 'Null', 1 => 'VBoxVGA', 2 => 'VMSVGA', 3 => 'VBoxSVGA');
+ public $ValueMap = array('Null' => 0, 'VBoxVGA' => 1, 'VMSVGA' => 2, 'VBoxSVGA' => 3);
}
/**
@@ -15504,8 +17939,8 @@ class CloneModeCollection extends VBox_EnumCollection
*/
class CloneOptions extends VBox_Enum
{
- public $NameMap = array(1 => 'Link', 2 => 'KeepAllMACs', 3 => 'KeepNATMACs', 4 => 'KeepDiskNames');
- public $ValueMap = array('Link' => 1, 'KeepAllMACs' => 2, 'KeepNATMACs' => 3, 'KeepDiskNames' => 4);
+ public $NameMap = array(1 => 'Link', 2 => 'KeepAllMACs', 3 => 'KeepNATMACs', 4 => 'KeepDiskNames', 5 => 'KeepHwUUIDs');
+ public $ValueMap = array('Link' => 1, 'KeepAllMACs' => 2, 'KeepNATMACs' => 3, 'KeepDiskNames' => 4, 'KeepHwUUIDs' => 5);
}
/**
@@ -15584,13 +18019,30 @@ class HostNetworkInterfaceTypeCollection extends VBox_EnumCollection
protected $_interfaceName = "HostNetworkInterfaceType";
}
+/**
+ * Generated VBoxWebService ENUM
+ */
+class ProxyMode extends VBox_Enum
+{
+ public $NameMap = array(0 => 'System', 1 => 'NoProxy', 2 => 'Manual');
+ public $ValueMap = array('System' => 0, 'NoProxy' => 1, 'Manual' => 2);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class ProxyModeCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "ProxyMode";
+}
+
/**
* Generated VBoxWebService ENUM
*/
class AdditionsFacilityType extends VBox_Enum
{
- public $NameMap = array(0 => 'None', 20 => 'VBoxGuestDriver', 90 => 'AutoLogon', 100 => 'VBoxService', 101 => 'VBoxTrayClient', 1000 => 'Seamless', 1100 => 'Graphics', 2147483646 => 'All');
- public $ValueMap = array('None' => 0, 'VBoxGuestDriver' => 20, 'AutoLogon' => 90, 'VBoxService' => 100, 'VBoxTrayClient' => 101, 'Seamless' => 1000, 'Graphics' => 1100, 'All' => 2147483646);
+ public $NameMap = array(0 => 'None', 20 => 'VBoxGuestDriver', 90 => 'AutoLogon', 100 => 'VBoxService', 101 => 'VBoxTrayClient', 1000 => 'Seamless', 1100 => 'Graphics', 1101 => 'MonitorAttach', 2147483646 => 'All');
+ public $ValueMap = array('None' => 0, 'VBoxGuestDriver' => 20, 'AutoLogon' => 90, 'VBoxService' => 100, 'VBoxTrayClient' => 101, 'Seamless' => 1000, 'Graphics' => 1100, 'MonitorAttach' => 1101, 'All' => 2147483646);
}
/**
@@ -15842,7 +18294,7 @@ class FileCopyFlagCollection extends VBox_EnumCollection
/**
* Generated VBoxWebService ENUM
*/
-class FsObjMoveFlags extends VBox_Enum
+class FsObjMoveFlag extends VBox_Enum
{
public $NameMap = array(0 => 'None', 1 => 'Replace', 2 => 'FollowLinks', 4 => 'AllowDirectoryMoves');
public $ValueMap = array('None' => 0, 'Replace' => 1, 'FollowLinks' => 2, 'AllowDirectoryMoves' => 4);
@@ -15851,9 +18303,9 @@ class FsObjMoveFlags extends VBox_Enum
/**
* Generated VBoxWebService Enum Collection
*/
-class FsObjMoveFlagsCollection extends VBox_EnumCollection
+class FsObjMoveFlagCollection extends VBox_EnumCollection
{
- protected $_interfaceName = "FsObjMoveFlags";
+ protected $_interfaceName = "FsObjMoveFlag";
}
/**
@@ -15876,7 +18328,7 @@ class DirectoryCreateFlagCollection extends VBox_EnumCollection
/**
* Generated VBoxWebService ENUM
*/
-class DirectoryCopyFlags extends VBox_Enum
+class DirectoryCopyFlag extends VBox_Enum
{
public $NameMap = array(0 => 'None', 1 => 'CopyIntoExisting');
public $ValueMap = array('None' => 0, 'CopyIntoExisting' => 1);
@@ -15885,9 +18337,9 @@ class DirectoryCopyFlags extends VBox_Enum
/**
* Generated VBoxWebService Enum Collection
*/
-class DirectoryCopyFlagsCollection extends VBox_EnumCollection
+class DirectoryCopyFlagCollection extends VBox_EnumCollection
{
- protected $_interfaceName = "DirectoryCopyFlags";
+ protected $_interfaceName = "DirectoryCopyFlag";
}
/**
@@ -15929,8 +18381,8 @@ class FsObjRenameFlagCollection extends VBox_EnumCollection
*/
class ProcessCreateFlag extends VBox_Enum
{
- public $NameMap = array(0 => 'None', 1 => 'WaitForProcessStartOnly', 2 => 'IgnoreOrphanedProcesses', 4 => 'Hidden', 8 => 'NoProfile', 16 => 'WaitForStdOut', 32 => 'WaitForStdErr', 64 => 'ExpandArguments', 128 => 'UnquotedArguments');
- public $ValueMap = array('None' => 0, 'WaitForProcessStartOnly' => 1, 'IgnoreOrphanedProcesses' => 2, 'Hidden' => 4, 'NoProfile' => 8, 'WaitForStdOut' => 16, 'WaitForStdErr' => 32, 'ExpandArguments' => 64, 'UnquotedArguments' => 128);
+ public $NameMap = array(0 => 'None', 1 => 'WaitForProcessStartOnly', 2 => 'IgnoreOrphanedProcesses', 4 => 'Hidden', 8 => 'Profile', 16 => 'WaitForStdOut', 32 => 'WaitForStdErr', 64 => 'ExpandArguments', 128 => 'UnquotedArguments');
+ public $ValueMap = array('None' => 0, 'WaitForProcessStartOnly' => 1, 'IgnoreOrphanedProcesses' => 2, 'Hidden' => 4, 'Profile' => 8, 'WaitForStdOut' => 16, 'WaitForStdErr' => 32, 'ExpandArguments' => 64, 'UnquotedArguments' => 128);
}
/**
@@ -16097,7 +18549,7 @@ class FileSharingModeCollection extends VBox_EnumCollection
/**
* Generated VBoxWebService ENUM
*/
-class FileOpenExFlags extends VBox_Enum
+class FileOpenExFlag extends VBox_Enum
{
public $NameMap = array(0 => 'None');
public $ValueMap = array('None' => 0);
@@ -16106,9 +18558,9 @@ class FileOpenExFlags extends VBox_Enum
/**
* Generated VBoxWebService Enum Collection
*/
-class FileOpenExFlagsCollection extends VBox_EnumCollection
+class FileOpenExFlagCollection extends VBox_EnumCollection
{
- protected $_interfaceName = "FileOpenExFlags";
+ protected $_interfaceName = "FileOpenExFlag";
}
/**
@@ -16218,8 +18670,8 @@ class MediumTypeCollection extends VBox_EnumCollection
*/
class MediumVariant extends VBox_Enum
{
- public $NameMap = array(0 => 'Standard', 0x01 => 'VmdkSplit2G', 0x02 => 'VmdkRawDisk', 0x04 => 'VmdkStreamOptimized', 0x08 => 'VmdkESX', 0x100 => 'VdiZeroExpand', 0x10000 => 'Fixed', 0x20000 => 'Diff', 0x40000000 => 'NoCreateDir');
- public $ValueMap = array('Standard' => 0, 'VmdkSplit2G' => 0x01, 'VmdkRawDisk' => 0x02, 'VmdkStreamOptimized' => 0x04, 'VmdkESX' => 0x08, 'VdiZeroExpand' => 0x100, 'Fixed' => 0x10000, 'Diff' => 0x20000, 'NoCreateDir' => 0x40000000);
+ public $NameMap = array(0 => 'Standard', 0x01 => 'VmdkSplit2G', 0x02 => 'VmdkRawDisk', 0x04 => 'VmdkStreamOptimized', 0x08 => 'VmdkESX', 0x100 => 'VdiZeroExpand', 0x10000 => 'Fixed', 0x20000 => 'Diff', 0x20000000 => 'Formatted', 0x40000000 => 'NoCreateDir');
+ public $ValueMap = array('Standard' => 0, 'VmdkSplit2G' => 0x01, 'VmdkRawDisk' => 0x02, 'VmdkStreamOptimized' => 0x04, 'VmdkESX' => 0x08, 'VdiZeroExpand' => 0x100, 'Fixed' => 0x10000, 'Diff' => 0x20000, 'Formatted' => 0x20000000, 'NoCreateDir' => 0x40000000);
}
/**
@@ -16269,8 +18721,8 @@ class DataFlagsCollection extends VBox_EnumCollection
*/
class MediumFormatCapabilities extends VBox_Enum
{
- public $NameMap = array(0x01 => 'Uuid', 0x02 => 'CreateFixed', 0x04 => 'CreateDynamic', 0x08 => 'CreateSplit2G', 0x10 => 'Differencing', 0x20 => 'Asynchronous', 0x40 => 'File', 0x80 => 'Properties', 0x100 => 'TcpNetworking', 0x200 => 'VFS', 0x3FF => 'CapabilityMask');
- public $ValueMap = array('Uuid' => 0x01, 'CreateFixed' => 0x02, 'CreateDynamic' => 0x04, 'CreateSplit2G' => 0x08, 'Differencing' => 0x10, 'Asynchronous' => 0x20, 'File' => 0x40, 'Properties' => 0x80, 'TcpNetworking' => 0x100, 'VFS' => 0x200, 'CapabilityMask' => 0x3FF);
+ public $NameMap = array(0x01 => 'Uuid', 0x02 => 'CreateFixed', 0x04 => 'CreateDynamic', 0x08 => 'CreateSplit2G', 0x10 => 'Differencing', 0x20 => 'Asynchronous', 0x40 => 'File', 0x80 => 'Properties', 0x100 => 'TcpNetworking', 0x200 => 'VFS', 0x400 => 'Discard', 0x800 => 'Preferred', 0xFFF => 'CapabilityMask');
+ public $ValueMap = array('Uuid' => 0x01, 'CreateFixed' => 0x02, 'CreateDynamic' => 0x04, 'CreateSplit2G' => 0x08, 'Differencing' => 0x10, 'Asynchronous' => 0x20, 'File' => 0x40, 'Properties' => 0x80, 'TcpNetworking' => 0x100, 'VFS' => 0x200, 'Discard' => 0x400, 'Preferred' => 0x800, 'CapabilityMask' => 0xFFF);
}
/**
@@ -16281,6 +18733,23 @@ class MediumFormatCapabilitiesCollection extends VBox_EnumCollection
protected $_interfaceName = "MediumFormatCapabilities";
}
+/**
+ * Generated VBoxWebService ENUM
+ */
+class PartitionTableType extends VBox_Enum
+{
+ public $NameMap = array(1 => 'MBR', 2 => 'GPT');
+ public $ValueMap = array('MBR' => 1, 'GPT' => 2);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class PartitionTableTypeCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "PartitionTableType";
+}
+
/**
* Generated VBoxWebService ENUM
*/
@@ -16337,8 +18806,8 @@ class TouchContactStateCollection extends VBox_EnumCollection
*/
class FramebufferCapabilities extends VBox_Enum
{
- public $NameMap = array(0x01 => 'UpdateImage', 0x02 => 'VHWA', 0x04 => 'VisibleRegion');
- public $ValueMap = array('UpdateImage' => 0x01, 'VHWA' => 0x02, 'VisibleRegion' => 0x04);
+ public $NameMap = array(0x01 => 'UpdateImage', 0x02 => 'VHWA', 0x04 => 'VisibleRegion', 0x08 => 'RenderCursor', 0x10 => 'MoveCursor');
+ public $ValueMap = array('UpdateImage' => 0x01, 'VHWA' => 0x02, 'VisibleRegion' => 0x04, 'RenderCursor' => 0x08, 'MoveCursor' => 0x10);
}
/**
@@ -16354,8 +18823,8 @@ class FramebufferCapabilitiesCollection extends VBox_EnumCollection
*/
class GuestMonitorStatus extends VBox_Enum
{
- public $NameMap = array(0 => 'Disabled', 1 => 'Enabled');
- public $ValueMap = array('Disabled' => 0, 'Enabled' => 1);
+ public $NameMap = array(0 => 'Disabled', 1 => 'Enabled', 2 => 'Blank');
+ public $ValueMap = array('Disabled' => 0, 'Enabled' => 1, 'Blank' => 2);
}
/**
@@ -16366,6 +18835,23 @@ class GuestMonitorStatusCollection extends VBox_EnumCollection
protected $_interfaceName = "GuestMonitorStatus";
}
+/**
+ * Generated VBoxWebService ENUM
+ */
+class ScreenLayoutMode extends VBox_Enum
+{
+ public $NameMap = array(0 => 'Apply', 1 => 'Reset', 2 => 'Attach');
+ public $ValueMap = array('Apply' => 0, 'Reset' => 1, 'Attach' => 2);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class ScreenLayoutModeCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "ScreenLayoutMode";
+}
+
/**
* Generated VBoxWebService ENUM
*/
@@ -16434,6 +18920,40 @@ class PortModeCollection extends VBox_EnumCollection
protected $_interfaceName = "PortMode";
}
+/**
+ * Generated VBoxWebService ENUM
+ */
+class UartType extends VBox_Enum
+{
+ public $NameMap = array(0 => 'U16450', 1 => 'U16550A', 2 => 'U16750');
+ public $ValueMap = array('U16450' => 0, 'U16550A' => 1, 'U16750' => 2);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class UartTypeCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "UartType";
+}
+
+/**
+ * Generated VBoxWebService ENUM
+ */
+class VMExecutionEngine extends VBox_Enum
+{
+ public $NameMap = array(0 => 'NotSet', 1 => 'RawMode', 2 => 'HwVirt', 3 => 'NativeApi');
+ public $ValueMap = array('NotSet' => 0, 'RawMode' => 1, 'HwVirt' => 2, 'NativeApi' => 3);
+}
+
+/**
+ * Generated VBoxWebService Enum Collection
+ */
+class VMExecutionEngineCollection extends VBox_EnumCollection
+{
+ protected $_interfaceName = "VMExecutionEngine";
+}
+
/**
* Generated VBoxWebService ENUM
*/
@@ -16592,8 +19112,8 @@ class ReasonCollection extends VBox_EnumCollection
*/
class StorageBus extends VBox_Enum
{
- public $NameMap = array(0 => 'Null', 1 => 'IDE', 2 => 'SATA', 3 => 'SCSI', 4 => 'Floppy', 5 => 'SAS', 6 => 'USB');
- public $ValueMap = array('Null' => 0, 'IDE' => 1, 'SATA' => 2, 'SCSI' => 3, 'Floppy' => 4, 'SAS' => 5, 'USB' => 6);
+ public $NameMap = array(0 => 'Null', 1 => 'IDE', 2 => 'SATA', 3 => 'SCSI', 4 => 'Floppy', 5 => 'SAS', 6 => 'USB', 7 => 'PCIe');
+ public $ValueMap = array('Null' => 0, 'IDE' => 1, 'SATA' => 2, 'SCSI' => 3, 'Floppy' => 4, 'SAS' => 5, 'USB' => 6, 'PCIe' => 7);
}
/**
@@ -16609,8 +19129,8 @@ class StorageBusCollection extends VBox_EnumCollection
*/
class StorageControllerType extends VBox_Enum
{
- public $NameMap = array(0 => 'Null', 1 => 'LsiLogic', 2 => 'BusLogic', 3 => 'IntelAhci', 4 => 'PIIX3', 5 => 'PIIX4', 6 => 'ICH6', 7 => 'I82078', 8 => 'LsiLogicSas', 9 => 'USB');
- public $ValueMap = array('Null' => 0, 'LsiLogic' => 1, 'BusLogic' => 2, 'IntelAhci' => 3, 'PIIX3' => 4, 'PIIX4' => 5, 'ICH6' => 6, 'I82078' => 7, 'LsiLogicSas' => 8, 'USB' => 9);
+ public $NameMap = array(0 => 'Null', 1 => 'LsiLogic', 2 => 'BusLogic', 3 => 'IntelAhci', 4 => 'PIIX3', 5 => 'PIIX4', 6 => 'ICH6', 7 => 'I82078', 8 => 'LsiLogicSas', 9 => 'USB', 10 => 'NVMe');
+ public $ValueMap = array('Null' => 0, 'LsiLogic' => 1, 'BusLogic' => 2, 'IntelAhci' => 3, 'PIIX3' => 4, 'PIIX4' => 5, 'ICH6' => 6, 'I82078' => 7, 'LsiLogicSas' => 8, 'USB' => 9, 'NVMe' => 10);
}
/**
@@ -16694,8 +19214,8 @@ class BandwidthGroupTypeCollection extends VBox_EnumCollection
*/
class VBoxEventType extends VBox_Enum
{
- public $NameMap = array(0 => 'Invalid', 1 => 'Any', 2 => 'Vetoable', 3 => 'MachineEvent', 4 => 'SnapshotEvent', 5 => 'InputEvent', 31 => 'LastWildcard', 32 => 'OnMachineStateChanged', 33 => 'OnMachineDataChanged', 34 => 'OnExtraDataChanged', 35 => 'OnExtraDataCanChange', 36 => 'OnMediumRegistered', 37 => 'OnMachineRegistered', 38 => 'OnSessionStateChanged', 39 => 'OnSnapshotTaken', 40 => 'OnSnapshotDeleted', 41 => 'OnSnapshotChanged', 42 => 'OnGuestPropertyChanged', 43 => 'OnMousePointerShapeChanged', 44 => 'OnMouseCapabilityChanged', 45 => 'OnKeyboardLedsChanged', 46 => 'OnStateChanged', 47 => 'OnAdditionsStateChanged', 48 => 'OnNetworkAdapterChanged', 49 => 'OnSerialPortChanged', 50 => 'OnParallelPortChanged', 51 => 'OnStorageControllerChanged', 52 => 'OnMediumChanged', 53 => 'OnVRDEServerChanged', 54 => 'OnUSBControllerChanged', 55 => 'OnUSBDeviceStateChanged', 56 => 'OnSharedFolderChanged', 57 => 'OnRuntimeError', 58 => 'OnCanShowWindow', 59 => 'OnShowWindow', 60 => 'OnCPUChanged', 61 => 'OnVRDEServerInfoChanged', 62 => 'OnEventSourceChanged', 63 => 'OnCPUExecutionCapChanged', 64 => 'OnGuestKeyboard', 65 => 'OnGuestMouse', 66 => 'OnNATRedirect', 67 => 'OnHostPCIDevicePlug', 68 => 'OnVBoxSVCAvailabilityChanged', 69 => 'OnBandwidthGroupChanged', 70 => 'OnGuestMonitorChanged', 71 => 'OnStorageDeviceChanged', 72 => 'OnClipboardModeChanged', 73 => 'OnDnDModeChanged', 74 => 'OnNATNetworkChanged', 75 => 'OnNATNetworkStartStop', 76 => 'OnNATNetworkAlter', 77 => 'OnNATNetworkCreationDeletion', 78 => 'OnNATNetworkSetting', 79 => 'OnNATNetworkPortForward', 80 => 'OnGuestSessionStateChanged', 81 => 'OnGuestSessionRegistered', 82 => 'OnGuestProcessRegistered', 83 => 'OnGuestProcessStateChanged', 84 => 'OnGuestProcessInputNotify', 85 => 'OnGuestProcessOutput', 86 => 'OnGuestFileRegistered', 87 => 'OnGuestFileStateChanged', 88 => 'OnGuestFileOffsetChanged', 89 => 'OnGuestFileRead', 90 => 'OnGuestFileWrite', 91 => 'OnVideoCaptureChanged', 92 => 'OnGuestUserStateChanged', 93 => 'OnGuestMultiTouch', 94 => 'OnHostNameResolutionConfigurationChange', 95 => 'OnSnapshotRestored', 96 => 'OnMediumConfigChanged', 97 => 'Last');
- public $ValueMap = array('Invalid' => 0, 'Any' => 1, 'Vetoable' => 2, 'MachineEvent' => 3, 'SnapshotEvent' => 4, 'InputEvent' => 5, 'LastWildcard' => 31, 'OnMachineStateChanged' => 32, 'OnMachineDataChanged' => 33, 'OnExtraDataChanged' => 34, 'OnExtraDataCanChange' => 35, 'OnMediumRegistered' => 36, 'OnMachineRegistered' => 37, 'OnSessionStateChanged' => 38, 'OnSnapshotTaken' => 39, 'OnSnapshotDeleted' => 40, 'OnSnapshotChanged' => 41, 'OnGuestPropertyChanged' => 42, 'OnMousePointerShapeChanged' => 43, 'OnMouseCapabilityChanged' => 44, 'OnKeyboardLedsChanged' => 45, 'OnStateChanged' => 46, 'OnAdditionsStateChanged' => 47, 'OnNetworkAdapterChanged' => 48, 'OnSerialPortChanged' => 49, 'OnParallelPortChanged' => 50, 'OnStorageControllerChanged' => 51, 'OnMediumChanged' => 52, 'OnVRDEServerChanged' => 53, 'OnUSBControllerChanged' => 54, 'OnUSBDeviceStateChanged' => 55, 'OnSharedFolderChanged' => 56, 'OnRuntimeError' => 57, 'OnCanShowWindow' => 58, 'OnShowWindow' => 59, 'OnCPUChanged' => 60, 'OnVRDEServerInfoChanged' => 61, 'OnEventSourceChanged' => 62, 'OnCPUExecutionCapChanged' => 63, 'OnGuestKeyboard' => 64, 'OnGuestMouse' => 65, 'OnNATRedirect' => 66, 'OnHostPCIDevicePlug' => 67, 'OnVBoxSVCAvailabilityChanged' => 68, 'OnBandwidthGroupChanged' => 69, 'OnGuestMonitorChanged' => 70, 'OnStorageDeviceChanged' => 71, 'OnClipboardModeChanged' => 72, 'OnDnDModeChanged' => 73, 'OnNATNetworkChanged' => 74, 'OnNATNetworkStartStop' => 75, 'OnNATNetworkAlter' => 76, 'OnNATNetworkCreationDeletion' => 77, 'OnNATNetworkSetting' => 78, 'OnNATNetworkPortForward' => 79, 'OnGuestSessionStateChanged' => 80, 'OnGuestSessionRegistered' => 81, 'OnGuestProcessRegistered' => 82, 'OnGuestProcessStateChanged' => 83, 'OnGuestProcessInputNotify' => 84, 'OnGuestProcessOutput' => 85, 'OnGuestFileRegistered' => 86, 'OnGuestFileStateChanged' => 87, 'OnGuestFileOffsetChanged' => 88, 'OnGuestFileRead' => 89, 'OnGuestFileWrite' => 90, 'OnVideoCaptureChanged' => 91, 'OnGuestUserStateChanged' => 92, 'OnGuestMultiTouch' => 93, 'OnHostNameResolutionConfigurationChange' => 94, 'OnSnapshotRestored' => 95, 'OnMediumConfigChanged' => 96, 'Last' => 97);
+ public $NameMap = array(0 => 'Invalid', 1 => 'Any', 2 => 'Vetoable', 3 => 'MachineEvent', 4 => 'SnapshotEvent', 5 => 'InputEvent', 31 => 'LastWildcard', 32 => 'OnMachineStateChanged', 33 => 'OnMachineDataChanged', 34 => 'OnExtraDataChanged', 35 => 'OnExtraDataCanChange', 36 => 'OnMediumRegistered', 37 => 'OnMachineRegistered', 38 => 'OnSessionStateChanged', 39 => 'OnSnapshotTaken', 40 => 'OnSnapshotDeleted', 41 => 'OnSnapshotChanged', 42 => 'OnGuestPropertyChanged', 43 => 'OnMousePointerShapeChanged', 44 => 'OnMouseCapabilityChanged', 45 => 'OnKeyboardLedsChanged', 46 => 'OnStateChanged', 47 => 'OnAdditionsStateChanged', 48 => 'OnNetworkAdapterChanged', 49 => 'OnSerialPortChanged', 50 => 'OnParallelPortChanged', 51 => 'OnStorageControllerChanged', 52 => 'OnMediumChanged', 53 => 'OnVRDEServerChanged', 54 => 'OnUSBControllerChanged', 55 => 'OnUSBDeviceStateChanged', 56 => 'OnSharedFolderChanged', 57 => 'OnRuntimeError', 58 => 'OnCanShowWindow', 59 => 'OnShowWindow', 60 => 'OnCPUChanged', 61 => 'OnVRDEServerInfoChanged', 62 => 'OnEventSourceChanged', 63 => 'OnCPUExecutionCapChanged', 64 => 'OnGuestKeyboard', 65 => 'OnGuestMouse', 66 => 'OnNATRedirect', 67 => 'OnHostPCIDevicePlug', 68 => 'OnVBoxSVCAvailabilityChanged', 69 => 'OnBandwidthGroupChanged', 70 => 'OnGuestMonitorChanged', 71 => 'OnStorageDeviceChanged', 72 => 'OnClipboardModeChanged', 73 => 'OnDnDModeChanged', 74 => 'OnNATNetworkChanged', 75 => 'OnNATNetworkStartStop', 76 => 'OnNATNetworkAlter', 77 => 'OnNATNetworkCreationDeletion', 78 => 'OnNATNetworkSetting', 79 => 'OnNATNetworkPortForward', 80 => 'OnGuestSessionStateChanged', 81 => 'OnGuestSessionRegistered', 82 => 'OnGuestProcessRegistered', 83 => 'OnGuestProcessStateChanged', 84 => 'OnGuestProcessInputNotify', 85 => 'OnGuestProcessOutput', 86 => 'OnGuestFileRegistered', 87 => 'OnGuestFileStateChanged', 88 => 'OnGuestFileOffsetChanged', 89 => 'OnGuestFileRead', 90 => 'OnGuestFileWrite', 91 => 'OnRecordingChanged', 92 => 'OnGuestUserStateChanged', 93 => 'OnGuestMultiTouch', 94 => 'OnHostNameResolutionConfigurationChange', 95 => 'OnSnapshotRestored', 96 => 'OnMediumConfigChanged', 97 => 'OnAudioAdapterChanged', 98 => 'OnProgressPercentageChanged', 99 => 'OnProgressTaskCompleted', 100 => 'OnCursorPositionChanged', 101 => 'Last');
+ public $ValueMap = array('Invalid' => 0, 'Any' => 1, 'Vetoable' => 2, 'MachineEvent' => 3, 'SnapshotEvent' => 4, 'InputEvent' => 5, 'LastWildcard' => 31, 'OnMachineStateChanged' => 32, 'OnMachineDataChanged' => 33, 'OnExtraDataChanged' => 34, 'OnExtraDataCanChange' => 35, 'OnMediumRegistered' => 36, 'OnMachineRegistered' => 37, 'OnSessionStateChanged' => 38, 'OnSnapshotTaken' => 39, 'OnSnapshotDeleted' => 40, 'OnSnapshotChanged' => 41, 'OnGuestPropertyChanged' => 42, 'OnMousePointerShapeChanged' => 43, 'OnMouseCapabilityChanged' => 44, 'OnKeyboardLedsChanged' => 45, 'OnStateChanged' => 46, 'OnAdditionsStateChanged' => 47, 'OnNetworkAdapterChanged' => 48, 'OnSerialPortChanged' => 49, 'OnParallelPortChanged' => 50, 'OnStorageControllerChanged' => 51, 'OnMediumChanged' => 52, 'OnVRDEServerChanged' => 53, 'OnUSBControllerChanged' => 54, 'OnUSBDeviceStateChanged' => 55, 'OnSharedFolderChanged' => 56, 'OnRuntimeError' => 57, 'OnCanShowWindow' => 58, 'OnShowWindow' => 59, 'OnCPUChanged' => 60, 'OnVRDEServerInfoChanged' => 61, 'OnEventSourceChanged' => 62, 'OnCPUExecutionCapChanged' => 63, 'OnGuestKeyboard' => 64, 'OnGuestMouse' => 65, 'OnNATRedirect' => 66, 'OnHostPCIDevicePlug' => 67, 'OnVBoxSVCAvailabilityChanged' => 68, 'OnBandwidthGroupChanged' => 69, 'OnGuestMonitorChanged' => 70, 'OnStorageDeviceChanged' => 71, 'OnClipboardModeChanged' => 72, 'OnDnDModeChanged' => 73, 'OnNATNetworkChanged' => 74, 'OnNATNetworkStartStop' => 75, 'OnNATNetworkAlter' => 76, 'OnNATNetworkCreationDeletion' => 77, 'OnNATNetworkSetting' => 78, 'OnNATNetworkPortForward' => 79, 'OnGuestSessionStateChanged' => 80, 'OnGuestSessionRegistered' => 81, 'OnGuestProcessRegistered' => 82, 'OnGuestProcessStateChanged' => 83, 'OnGuestProcessInputNotify' => 84, 'OnGuestProcessOutput' => 85, 'OnGuestFileRegistered' => 86, 'OnGuestFileStateChanged' => 87, 'OnGuestFileOffsetChanged' => 88, 'OnGuestFileRead' => 89, 'OnGuestFileWrite' => 90, 'OnRecordingChanged' => 91, 'OnGuestUserStateChanged' => 92, 'OnGuestMultiTouch' => 93, 'OnHostNameResolutionConfigurationChange' => 94, 'OnSnapshotRestored' => 95, 'OnMediumConfigChanged' => 96, 'OnAudioAdapterChanged' => 97, 'OnProgressPercentageChanged' => 98, 'OnProgressTaskCompleted' => 99, 'OnCursorPositionChanged' => 100, 'Last' => 101);
}
/**
diff --git a/endpoints/lib/vboxweb-5.2.wsdl b/endpoints/lib/vboxweb-5.2.wsdl
deleted file mode 100644
index 20878fd..0000000
--- a/endpoints/lib/vboxweb-5.2.wsdl
+++ /dev/null
@@ -1,63617 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/endpoints/lib/vboxweb-6.0.wsdl b/endpoints/lib/vboxweb-6.0.wsdl
index 1c07b30..6855143 100644
--- a/endpoints/lib/vboxweb-6.0.wsdl
+++ b/endpoints/lib/vboxweb-6.0.wsdl
@@ -167,6 +167,8 @@
HWVirt: 8 -
SpecCtrl: 9 -
SpecCtrlByHost: 10 -
+ L1DFlushOnEMTScheduling: 11 -
+ L1DFlushOnVMEntry: 12 -
-->
@@ -181,6 +183,8 @@
+
+
@@ -377,6 +382,7 @@
+
@@ -711,16 +717,16 @@
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3097,6 +3028,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3191,6 +3138,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3458,7 +3418,7 @@
-
+
@@ -3778,6 +3738,7 @@
+
@@ -4716,6 +4677,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5846,4101 +5821,3867 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
+
-
+
-
-
-
-
-
-
-
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
+
-
+
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
+
-
+
-
+
-
+
+
+
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
+
-
+
-
+
-
-
+
+
+
-
+
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
-
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
-
-
-
-
-
-
+
-
-
+
-
-
-
-
-
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
-
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
-
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-
+
+
-
-
+
-
+
+
+
-
-
+
+
-
+
-