diff --git a/README.md b/README.md
index 6de65c6..9c382f9 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,2 @@
-# integration_jmap
-Nextcloud Exchange JMAP Integration
+# integration_jmapc
+Nextcloud JMAP Integration
diff --git a/lib/Commands/Connect.php b/lib/Commands/Connect.php
index 3e4cc74..d5f40b8 100644
--- a/lib/Commands/Connect.php
+++ b/lib/Commands/Connect.php
@@ -45,22 +45,22 @@ public function __construct(IUserManager $userManager, CoreService $CoreService)
protected function configure() {
$this
->setName('jmapc:connect')
- ->setDescription('Connects a user to EWS Server')
+ ->setDescription('Connects a user to JMAP Server')
->addArgument('user',
InputArgument::REQUIRED,
- 'User whom to connect to the EWS Server')
+ 'User whom to connect to the JMAP Server')
->addArgument('provider',
InputArgument::REQUIRED,
- 'FQDN or IP address of the EWS Server')
+ 'FQDN or IP address of the JMAP Server')
->addArgument('accountid',
InputArgument::REQUIRED,
- 'The username of the account to connect to on the EWS Server')
+ 'The username of the account to connect to on the JMAP Server')
->addArgument('accountsecret',
InputArgument::REQUIRED,
- 'The password of the account to connect to on the EWS Server')
+ 'The password of the account to connect to on the JMAP Server')
->addArgument('validate',
InputArgument::OPTIONAL,
- 'Should we validate the credentials with EWS Server. (default true)');
+ 'Should we validate the credentials with JMAP Server. (default true)');
}
/**
diff --git a/lib/Commands/Disconnect.php b/lib/Commands/Disconnect.php
index 0f2eba0..faf2044 100644
--- a/lib/Commands/Disconnect.php
+++ b/lib/Commands/Disconnect.php
@@ -45,7 +45,7 @@ public function __construct(IUserManager $userManager, CoreService $CoreService)
protected function configure() {
$this
->setName('jmapc:disconnect')
- ->setDescription('Disconnects a user from an EWS Server')
+ ->setDescription('Disconnects a user from an JMAP Server')
->addArgument('user',
InputArgument::REQUIRED,
'User whom to disconnect');
@@ -65,7 +65,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$this->CoreService->disconnectAccount($uid);
- $output->writeln("User $uid disconnected from EWS Server");
+ $output->writeln("User $uid disconnected from JMAP Server");
return 0;
diff --git a/lib/Notification/Notifier.php b/lib/Notification/Notifier.php
index b6a937e..6f656ad 100644
--- a/lib/Notification/Notifier.php
+++ b/lib/Notification/Notifier.php
@@ -80,7 +80,7 @@ public function getID(): string {
* @since 17.0.0
*/
public function getName(): string {
- return $this->factory->get('integration_jmapc')->t('EWS Connector');
+ return $this->factory->get('integration_jmapc')->t('JMAP Connector');
}
/**
diff --git a/lib/Service/Remote/RemoteCommonService.php b/lib/Service/Remote/RemoteCommonService.php
index 50f5acc..ef0513e 100644
--- a/lib/Service/Remote/RemoteCommonService.php
+++ b/lib/Service/Remote/RemoteCommonService.php
@@ -31,1043 +31,19 @@
use Psr\Log\LoggerInterface;
use OCA\JMAPC\AppInfo\Application;
-use OCA\JMAPC\Utile\Eas\EasClient;
-use OCA\JMAPC\Utile\Eas\EasXmlEncoder;
-use OCA\JMAPC\Utile\Eas\EasXmlDecoder;
-use OCA\JMAPC\Utile\Eas\EasObject;
-use OCA\JMAPC\Utile\Eas\EasCollection;
-use OCA\JMAPC\Utile\Eas\EasProperty;
-use OCA\JMAPC\Utile\Eas\EasException;
-use OCA\JMAPC\Utile\Eas\EasTypes;
class RemoteCommonService {
private LoggerInterface $logger;
- private EasXmlEncoder $_encoder;
- private EasXmlDecoder $_decoder;
/**
- * Service to construct basic EAS commands
+ * Service to construct basic commands
*/
public function __construct (string $appName, LoggerInterface $logger) {
$this->logger = $logger;
- $this->_encoder = new EasXmlEncoder();
- $this->_decoder = new EasXmlDecoder();
}
-
- /**
- * retrieve list of all folders starting with root folder from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage interface
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function provisionInit(EasClient $DataStore, string $model, string $name, string $agent): EasObject | null {
-
- // construct provision command
- $o = new \stdClass();
- $o->Provision = new EasObject('Provision');
- $o->Provision->Device = new EasObject('Settings');
- $o->Provision->Device->Set = new EasObject('Settings');
- $o->Provision->Device->Set->Model = new EasProperty('Settings', $model);
- $o->Provision->Device->Set->FriendlyName = new EasProperty('Settings', $name);
- $o->Provision->Device->Set->UserAgent = new EasProperty('Settings', $agent);
- $o->Provision->Policies = new EasObject('Provision');
- $o->Provision->Policies->Policy = new EasObject('Provision');
- $o->Provision->Policies->Policy->PolicyType = new EasProperty('Provision', 'MS-EAS-Provisioning-WBXML');
-
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performProvision($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
-
- switch ($o->Provision->Status->getContents()) {
- case '2':
- throw new Exception("Protocol error.", 2);
- break;
- case '3':
- throw new Exception("General server error.", 3);
- break;
- }
-
- return $o->Provision;
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * retrieve list of all folders starting with root folder from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage interface
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function provisionAccept(EasClient $DataStore, string $token): EasObject | null {
-
- // construct provision command
- $o = new \stdClass();
- $o->Provision = new EasObject('Provision');
- $o->Provision->Policies = new EasObject('Provision');
- $o->Provision->Policies->Policy = new EasObject('Provision');
- $o->Provision->Policies->Policy->PolicyType = new EasProperty('Provision', 'MS-EAS-Provisioning-WBXML');
- $o->Provision->Policies->Policy->PolicyKey = new EasProperty('Provision', $token);
- $o->Provision->Policies->Policy->Status = new EasProperty('Provision', '1');
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performProvision($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
-
- switch ($o->Provision->Status->getContents()) {
- case '2':
- throw new Exception("Protocol error.", 2);
- break;
- case '3':
- throw new Exception("General server error.", 3);
- break;
- }
-
- return $o->Provision;
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * retrieve list of all folders starting with root folder from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage interface
- * @param string $cst Signature State Token
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function syncCollections(EasClient $DataStore, string $cst = '0'): EasObject | null {
-
- // construct command
- $o = new \stdClass();
- $o->CollectionSync = new EasObject('CollectionHierarchy');
- $o->CollectionSync->SyncKey = new EasProperty('CollectionHierarchy', $cst);
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performCollectionSync($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if ($o->CollectionSync->Status->getContents() != '1' && $o->CollectionSync->Status->getContents() != '142') {
- throw new Exception("CollectionSync: Unknow error occured" . $o->CollectionSync->Status->getContents(), 1);
- }
- // return response message
- return $o->CollectionSync;
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * retrieve all information for specific folder from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $cid Collection ID
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function fetchCollection(EasClient $DataStore, string $cid): EasObject | null {
-
- return null;
-
- }
-
- /**
- * create collection in remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $chs Collections Hierarchy Signature Token
- * @param string $chl Collections Hierarchy Location
- * @param string $name Collection Name
- * @param int $type Collection Type
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function createCollection(EasClient $DataStore, string $chs, string $chl, string $name, int $type): EasObject | null {
-
- // construct command
- $o = new \stdClass();
- $o->CollectionCreate = new EasObject('CollectionHierarchy');
- $o->CollectionCreate->SyncKey = new EasProperty('CollectionHierarchy', $chs);
- $o->CollectionCreate->ParentId = new EasProperty('CollectionHierarchy', $chl);
- $o->CollectionCreate->Name = new EasProperty('CollectionHierarchy', $name);
- $o->CollectionCreate->Type = new EasProperty('CollectionHierarchy', $type);
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performCollectionCreate($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if ($o->CollectionCreate->Status->getContents() != '1' && $o->CollectionCreate->Status->getContents() != '110') {
- throw new EasException($o->CollectionCreate->Status->getContents(), 'CC');
- }
- // return response object
- return $o->CollectionCreate;
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * update collection in remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $chs Collections Hierarchy Signature Token
- * @param string $chl Collections Hierarchy Location
- * @param string $cid Collection Id
- * @param string $name Collection Name
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function updateCollection(EasClient $DataStore, string $chs, string $chl, string $cid, string $name): EasObject | null {
-
- // construct command
- $o = new \stdClass();
- $o->CollectionUpdate = new EasObject('CollectionHierarchy');
- $o->CollectionUpdate->SyncKey = new EasProperty('CollectionHierarchy', $chs);
- $o->CollectionUpdate->Id = new EasProperty('CollectionHierarchy', $cid);
- $o->CollectionUpdate->ParentId = new EasProperty('CollectionHierarchy', $chl);
- $o->CollectionUpdate->Name = new EasProperty('CollectionHierarchy', $name);
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performCollectionUpdate($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if ($o->CollectionUpdate->Status->getContents() != '1' && $o->CollectionUpdate->Status->getContents() != '110') {
- throw new EasException($o->CollectionUpdate->Status->getContents(), 'CU');
- }
- // return response object
- return $o->CollectionUpdate;
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * delete collection from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $chs Collections Hierarchy Signature Token
- * @param string $cid Collection Id
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function deleteCollection(EasClient $DataStore, string $chs, string $cid): EasObject | null {
-
- // construct command
- $o = new \stdClass();
- $o->CollectionDelete = new EasObject('CollectionHierarchy');
- $o->CollectionDelete->SyncKey = new EasProperty('CollectionHierarchy', $chs);
- $o->CollectionDelete->Id = new EasProperty('CollectionHierarchy', $cid);
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performCollectionDelete($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if ($o->CollectionDelete->Status->getContents() != '1' && $o->CollectionDelete->Status->getContents() != '110') {
- throw new EasException($o->CollectionDelete->Status->getContents(), 'CD');
- }
- // return response object
- return $o->CollectionDelete;
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * retrieve list of entities for specific folder from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $cid Collection Id
- * @param string $cst Collections Signature Token
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function reconcileCollection(EasClient $DataStore, string $cst, string $cid, array $options = []): EasObject | null {
-
- // construct Sync request
- $o = new \stdClass();
- $o->Sync = new EasObject('AirSync');
- $o->Sync->Collections = new EasObject('AirSync');
- $o->Sync->Collections->Collection = new EasObject('AirSync');
- $o->Sync->Collections->Collection->SyncKey = new EasProperty('AirSync', $cst);
- $o->Sync->Collections->Collection->CollectionId = new EasProperty('AirSync', $cid);
-
- if (isset($options['SUPPORTED']) && $options['SUPPORTED'] == true) {
- $o->Sync->Collections->Collection->Supported = new EasObject('AirSync');
- $o->Sync->Collections->Collection->Supported->Picture = new EasProperty('Contacts', null);
- }
- if (isset($options['CHANGES'])) {
- $o->Sync->Collections->Collection->GetChanges = new EasProperty('AirSync', $options['CHANGES']);
- }
- if (isset($options['LIMIT'])) {
- $o->Sync->Collections->Collection->WindowSize = new EasProperty('AirSync', $options['LIMIT']);
- }
- if (isset($options['FILTER']) && isset($options['BODY'])) {
- $o->Sync->Collections->Collection->Options = new EasObject('AirSync');
-
- if (isset($options['FILTER'])) {
- $o->Sync->Collections->Collection->Options->FilterType = new EasProperty('AirSync', $options['FILTER']);
- }
- if (isset($options['BODY'])) {
- if ($options['BODY'] == EasTypes::BODY_TYPE_MIME) {
- $o->Sync->Collections->Collection->Options->MIMESupport = new EasProperty('AirSync', 2);
- $o->Sync->Collections->Collection->Options->MIMETruncation = new EasProperty('AirSync', 8);
- }
- $o->Sync->Collections->Collection->Options->BodyPreference = new EasObject('AirSyncBase');
- $o->Sync->Collections->Collection->Options->BodyPreference->Type = new EasProperty('AirSyncBase', $options['BODY']);
- $o->Sync->Collections->Collection->Options->BodyPreference->AllOrNone = new EasProperty('AirSyncBase', 1);
- }
- }
-
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performEntitySync($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if (isset($o->Sync->Status) && $o->Sync->Status->getContents() != '1' && $o->Sync->Status->getContents() != '142') {
- throw new EasException($o->Sync->Status->getContents(), 'ES');
- }
- elseif (isset($o->Sync->Status) && $o->Sync->Status->getContents() == '142') {
- // return response object
- return $o->Sync;
- }
- else {
- // return response object
- return $o->Sync->Collections->Collection;
- }
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * retrieve list of entities for specific folder from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param array $collections Collections List (cid, cst)
- *
- * @return EasObject|array|null Array on success / Null on failure
- */
- public function reconcileCollectionVarious(EasClient $DataStore, array $collections, array $options = []): EasObject | array | null {
-
- // construct Sync request
- $o = new \stdClass();
- $o->Sync = new EasObject('AirSync');
- $o->Sync->Collections = new EasObject('AirSync');
- $o->Sync->Collections->Collection = new EasCollection('AirSync');
-
- foreach ($collections as $entry) {
- if (isset($entry['cid']) && isset($entry['cst'])) {
- $c = new EasObject('AirSync');
- $c->SyncKey = new EasProperty('AirSync', $entry['cst']);
- $c->CollectionId = new EasProperty('AirSync', $entry['cid']);
- $o->Sync->Collections->Collection[] = $c;
- }
- }
-
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performEntitySync($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate, if status is anything else other than 1 or 142
- if (isset($o->Sync->Status) && $o->Sync->Status->getContents() != '1' && $o->Sync->Status->getContents() != '142') {
- throw new EasException($o->Sync->Status->getContents(), 'ES');
- }
- // evaluate, if status is 142
- elseif (isset($o->Sync->Status) && $o->Sync->Status->getContents() == '142') {
- // return response object
- return $o->Sync;
- }
- // evaluate, if response returned an array
- elseif (!is_array($o->Sync->Collections->Collection)) {
- // return response array
- return [$o->Sync->Collections->Collection];
- }
- else {
- // return response array
- return $o->Sync->Collections->Collection;
- }
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * retrieve list of all folders starting with root folder from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $cid Collection Id
- * @param string $cst Collections Signature Token
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function estimateEntities(EasClient $DataStore, string $cst, string $cid): EasObject | null {
-
- // construct EntityEstimate request
- $o = new \stdClass();
- $o->EntityEstimate = new EasObject('EntityEstimate');
- $o->EntityEstimate->Collections = new EasObject('EntityEstimate');
- $o->EntityEstimate->Collections->Collection = new EasObject('EntityEstimate');
- $o->EntityEstimate->Collections->Collection->SyncKey = new EasProperty('AirSync', $cst);
- $o->EntityEstimate->Collections->Collection->CollectionId = new EasProperty('EntityEstimate', $cid);
-
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performEntityEstimate($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if (isset($o->EntityEstimate->Status) && $o->EntityEstimate->Status->getContents() != '1') {
- throw new EasException($o->EntityEstimate->Status->getContents(), 'ES');
- }
- // return response message
- return $o->EntityEstimate->Response;
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * retrieve list of all folders starting with root folder from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param array $collections Collections List (cid, cst)
- *
- * @return array|null Array on success / Null on failure
- */
- public function estimateEntitiesVarious(EasClient $DataStore, array $collections): array | null {
- // construct EntityEstimate request
- $o = new \stdClass();
- $o->EntityEstimate = new EasObject('EntityEstimate');
- $o->EntityEstimate->Collections = new EasObject('EntityEstimate');
- $o->EntityEstimate->Collections->Collection = new EasCollection('EntityEstimate');
-
- foreach ($collections as $entry) {
- if (isset($entry['cid']) && isset($entry['cst'])) {
- $c = new EasObject('EntityEstimate');
- $c->SyncKey = new EasProperty('AirSync', $entry['cst']);
- $c->CollectionId = new EasProperty('EntityEstimate', $entry['cid']);
- $o->EntityEstimate->Collections->Collection[] = $c;
- }
- }
-
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performEntityEstimate($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if (isset($o->EntityEstimate->Status) && $o->EntityEstimate->Status->getContents() != '1') {
- throw new EasException($o->EntityEstimate->Status->getContents(), 'ES');
- }
- // evaluate, if response returned an array
- if (!is_array($o->EntityEstimate->Response)) {
- // return response array
- return [$o->EntityEstimate->Response];
- }
- else {
- // return response array
- return $o->EntityEstimate->Response;
- }
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * retrieve list of all folders starting with root folder from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $cid Collection Id
- * @param string $value Search value
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function searchEntities(EasClient $DataStore, string $cid, string $query, array $options = []): EasObject | null {
-
- // construct EntityEstimate request
- $o = new \stdClass();
- $o->Search = new EasObject('Search');
- $o->Search->Store = new EasObject('Search');
- // evaluate, if store option is present
- if (isset($options['STORE']) && $options['STORE'] == 'GAL') {
- $o->Search->Store->Name = new EasProperty('Search', 'GAL');
- $o->Search->Store->Query = new EasProperty('Search', $query);
- }
- else {
- $o->Search->Store->Name = new EasProperty('Search', 'Mailbox');
- $o->Search->Store->Query = new EasObject('Search');
- $o->Search->Store->Query->And = new EasObject('Search');
- // evaluate, if category option is present
- if (isset($options['CATEGORY']) && $options['CATEGORY'] == 'CLS') {
- $o->Search->Store->Query->And->Class = new EasProperty('AirSync', $cid);
- $options['BROAD'] = true;
- }
- elseif (isset($options['CATEGORY']) && $options['CATEGORY'] == 'CVS') {
- $o->Search->Store->Query->And->ConversationId = new EasProperty('AirSync', $cid);
- }
- else {
- $o->Search->Store->Query->And->CollectionId = new EasProperty('AirSync', $cid);
- }
- $o->Search->Store->Query->And->FreeText = new EasProperty('Search', $query);
- }
-
- $o->Search->Store->Options = new EasObject('Search');
- $o->Search->Store->Options->RebuildResults = new EasProperty('Search', null);
- // evaluate, if range option is present
- if (isset($options['RANGE'])) {
- $o->Search->Store->Options->Range = new EasProperty('Search', $options['RANGE']);
- }
- else {
- $o->Search->Store->Options->Range = new EasProperty('Search', '0-99');
- }
- // evaluate, if broad option is present
- if (isset($options['BROAD']) && $options['BROAD'] == true) {
- $o->Search->Store->Options->DeepTraversal = new EasProperty('Search', null);
- }
- // evaluate, if body option is present
- if (isset($options['BODY'])) {
- if ($options['BODY'] == EasTypes::BODY_TYPE_MIME) {
- $o->Search->Store->Options->MIMESupport = new EasProperty('AirSync', 2);
- }
- $o->Search->Store->Options->BodyPreference = new EasObject('AirSyncBase');
- $o->Search->Store->Options->BodyPreference->Type = new EasProperty('AirSyncBase', $options['BODY']);
- $o->Search->Store->Options->BodyPreference->AllOrNone = new EasProperty('AirSyncBase', 1);
- }
-
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performEntitySearch($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if (isset($o->Search->Status) && $o->Search->Status->getContents() != '1') {
- throw new EasException($o->Search->Status->getContents(), 'FN');
- }
- // return response message
- return $o->Search->Response->Store;
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * retrieve all information for specific entity from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $cid Collection Id
- * @param string $eid Entity Id
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function fetchEntity(EasClient $DataStore, string $cid, string $eid, array $options = []): EasObject | null {
-
- // construct Entityoperation request
- $o = new \stdClass();
- $o->EntityOperations = new EasObject('EntityOperations');
- $o->EntityOperations->Fetch = new EasObject('EntityOperations');
- $o->EntityOperations->Fetch->Store = new EasProperty('EntityOperations', 'Mailbox');
- $o->EntityOperations->Fetch->EntityId = new EasProperty('AirSync', $eid);
- $o->EntityOperations->Fetch->CollectionId = new EasProperty('AirSync', $cid);
-
- if (isset($options['BODY'])) {
- $o->EntityOperations->Fetch->Options = new EasObject('EntityOperations');
- if ($options['BODY'] == EasTypes::BODY_TYPE_MIME) {
- $o->EntityOperations->Fetch->Options->MIMESupport = new EasProperty('AirSync', 2);
- //$o->EntityOperations->Fetch->Options->MIMETruncation = new EasProperty('AirSync', 8);
- }
- $o->EntityOperations->Fetch->Options->BodyPreference = new EasObject('AirSyncBase');
- $o->EntityOperations->Fetch->Options->BodyPreference->Type = new EasProperty('AirSyncBase', $options['BODY']);
- $o->EntityOperations->Fetch->Options->BodyPreference->AllOrNone = new EasProperty('AirSyncBase', 1);
- }
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performEntityOperation($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if (isset($o->EntityOperations->Status) && $o->EntityOperations->Status->getContents() != '1') {
- throw new EasException($o->EntityOperations->Status->getContents(), 'EF');
- }
- // return response message
- return $o->EntityOperations->Response->Fetch;
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * create entity in remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $cid Collection Id
- * @param string $cst Collection Signature Token
- * @param string $type Entity Type
- * @param EasObject $data Entity Data
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function createEntity(EasClient $DataStore, string $cid, string $cst, string $type, EasObject $data): EasObject | null {
-
- // construct Sync request
- $o = new \stdClass();
- $o->Sync = new EasObject('AirSync');
- $o->Sync->Collections = new EasObject('AirSync');
- $o->Sync->Collections->Collection = new EasObject('AirSync');
- $o->Sync->Collections->Collection->SyncKey = new EasProperty('AirSync', $cst);
- $o->Sync->Collections->Collection->CollectionId = new EasProperty('AirSync', $cid);
- $o->Sync->Collections->Collection->DeletesAsMoves = new EasProperty('AirSync', null);
- $o->Sync->Collections->Collection->GetChanges = new EasProperty('AirSync', null);
- $o->Sync->Collections->Collection->WindowSize = new EasProperty('AirSync', 32);
- $o->Sync->Collections->Collection->Options = new EasObject('AirSync');
- $o->Sync->Collections->Collection->Options->FilterType = new EasProperty('AirSync', 0);
- $o->Sync->Collections->Collection->Options->BodyPreference = new EasObject('AirSyncBase');
- $o->Sync->Collections->Collection->Options->BodyPreference->Type = new EasProperty('AirSyncBase', 1);
- $o->Sync->Collections->Collection->Options->BodyPreference->TruncationSize = new EasProperty('AirSyncBase', 512000);
- $o->Sync->Collections->Collection->Commands = new EasObject('AirSync');
- $o->Sync->Collections->Collection->Commands->Add = new EasObject('AirSync');
- //$o->Sync->Collections->Collection->Commands->Add->Class = new EasProperty('AirSync', $type);
- $o->Sync->Collections->Collection->Commands->Add->ClientId = new EasProperty('AirSync', \OCA\JMAPC\Utile\UUID::v4());
- $o->Sync->Collections->Collection->Commands->Add->Data = $data;
-
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
-
- // execute request
- $rs = $DataStore->performEntitySync($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if (isset($o->Sync->Status) && $o->Sync->Status->getContents() != '1') {
- throw new EasException($o->Sync->Status->getContents(), 'EC');
- }
- // evaluate response status
- elseif (isset($o->Sync->Collections->Collection) && $o->Sync->Collections->Collection->Status->getContents() != '1') {
- throw new EasException($o->Sync->Collections->Collection->Status->getContents(), 'EC');
- }
- else {
- // return response message
- return $o->Sync->Collections->Collection;
- }
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * update item in remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $cid Collection Id
- * @param string $cst Collection Signature Token
- * @param string $eid Entity Id
- * @param EasObject $data Entity Data
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function updateEntity(EasClient $DataStore, string $cid, string $cst, string $eid, EasObject $data): EasObject | null {
-
- // construct Sync request
- $o = new \stdClass();
- $o->Sync = new EasObject('AirSync');
- $o->Sync->Collections = new EasObject('AirSync');
- $o->Sync->Collections->Collection = new EasObject('AirSync');
- $o->Sync->Collections->Collection->SyncKey = new EasProperty('AirSync', $cst);
- $o->Sync->Collections->Collection->CollectionId = new EasProperty('AirSync', $cid);
- $o->Sync->Collections->Collection->DeletesAsMoves = new EasProperty('AirSync', 0);
- $o->Sync->Collections->Collection->GetChanges = new EasProperty('AirSync', 0);
- $o->Sync->Collections->Collection->WindowSize = new EasProperty('AirSync', 32);
- $o->Sync->Collections->Collection->Options = new EasObject('AirSync');
- $o->Sync->Collections->Collection->Options->FilterType = new EasProperty('AirSync', 0);
- $o->Sync->Collections->Collection->Options->BodyPreference = new EasObject('AirSyncBase');
- $o->Sync->Collections->Collection->Options->BodyPreference->Type = new EasProperty('AirSyncBase', 1);
- $o->Sync->Collections->Collection->Commands = new EasObject('AirSync');
- $o->Sync->Collections->Collection->Commands->Modify = new EasObject('AirSync');
- $o->Sync->Collections->Collection->Commands->Modify->EntityId = new EasProperty('AirSync', $eid);
- $o->Sync->Collections->Collection->Commands->Modify->Data = $data;
-
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performEntitySync($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if (isset($o->Sync->Status) && $o->Sync->Status->getContents() != '1') {
- throw new EasException($o->Sync->Status->getContents(), 'EU');
- }
- // evaluate response status
- elseif (isset($o->Sync->Collections->Collection) && $o->Sync->Collections->Collection->Status->getContents() != '1') {
- throw new EasException($o->Sync->Collections->Collection->Status->getContents(), 'EU');
- }
- else {
- // return response message
- return $o->Sync->Collections->Collection;
- }
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * delete item in remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $cid Collection Id
- * @param string $cst Collection Signature Token
- * @param string $eid Entity Id
- *
- * @return EasObject|null True on success / Null on failure
- */
- public function deleteEntity(EasClient $DataStore, string $cid, string $cst, string $eid): EasObject | null {
-
- // construct Sync request
- $o = new \stdClass();
- $o->Sync = new EasObject('AirSync');
- $o->Sync->Collections = new EasObject('AirSync');
- $o->Sync->Collections->Collection = new EasObject('AirSync');
- $o->Sync->Collections->Collection->SyncKey = new EasProperty('AirSync', $cst);
- $o->Sync->Collections->Collection->CollectionId = new EasProperty('AirSync', $cid);
- $o->Sync->Collections->Collection->DeletesAsMoves = new EasProperty('AirSync', 0);
- $o->Sync->Collections->Collection->GetChanges = new EasProperty('AirSync', 0);
- $o->Sync->Collections->Collection->WindowSize = new EasProperty('AirSync', 32);
- $o->Sync->Collections->Collection->Options = new EasObject('AirSync');
- $o->Sync->Collections->Collection->Options->FilterType = new EasProperty('AirSync', 0);
- $o->Sync->Collections->Collection->Options->BodyPreference = new EasObject('AirSyncBase');
- $o->Sync->Collections->Collection->Options->BodyPreference->Type = new EasProperty('AirSyncBase', 1);
- $o->Sync->Collections->Collection->Commands = new EasObject('AirSync');
- $o->Sync->Collections->Collection->Commands->Delete = new EasObject('AirSync');
- $o->Sync->Collections->Collection->Commands->Delete->EntityId = new EasProperty('AirSync', $eid);
-
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performEntitySync($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if (isset($o->Sync->Status) && $o->Sync->Status->getContents() != '1') {
- throw new EasException($o->Sync->Status->getContents(), 'ED');
- }
- // evaluate response status
- elseif (isset($o->Sync->Collections->Collection) && $o->Sync->Collections->Collection->Status->getContents() != '1') {
- throw new EasException($o->Sync->Collections->Collection->Status->getContents(), 'ED');
- }
- else {
- // return response message
- return $o->Sync->Collections->Collection;
- }
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * retrieve item attachment(s) from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- * @param string $batch Attachement ID's (array)
- *
- * @return array Collection of EasObjects on success / Null on failure
- */
- public function fetchAttachment(EasClient $DataStore, array $batch): ?array {
-
- // construct Entityoperation request
- $o = new \stdClass();
- $o->EntityOperations = new EasObject('EntityOperations');
- $o->EntityOperations->Fetch = new EasCollection('EntityOperations');
-
- foreach ($batch as $aid) {
- // construct object
- $a = new EasObject('EntityOperations');
- // assign properties
- $a->Store = new EasProperty('EntityOperations', 'Mailbox');
- $a->FileReference = new EasProperty('AirSyncBase', $aid);
- // add to collection
- $o->EntityOperations->Fetch[] = $a;
- }
-
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performEntityOperation($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if (isset($o->EntityOperations->Status) && $o->EntityOperations->Status->getContents() != '1') {
- throw new EasException($o->EntityOperations->Status->getContents(), 'EF');
- }
- // evaluate response
- if (!is_array($o->EntityOperations->Response->Fetch)) {
- // return response message
- return [$o->EntityOperations->Response->Fetch];
- } else {
- // return response message
- return $o->EntityOperations->Response->Fetch;
- }
- }
- else {
- // return blank response
- return null;
- }
-
- }
-
- /**
- * create item attachment(s) from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore - Storage Interface
- * @param array $batch - Collection of FileAttachmentType Objects
- *
- * @return object Attachement Collection Object on success / Null on failure
- */
- public function createAttachment(EasClient $DataStore, string $iid, array $batch): array {
-
- return null;
-
- }
-
- /**
- * delete item attachment(s) from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore - Storage Interface
- * @param array $batch - Collection of String Attachemnt Id(s)
- *
- * @return object Attachement Collection Object on success / Null on failure
- */
- public function deleteAttachment(EasClient $DataStore, array $batch): array {
-
- return null;
-
- }
-
- /**
- * connect to event nofifications
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore - Storage Interface
- *
- * @return object Items Object on success / Null on failure
- */
- public function connectEvents(EasClient $DataStore, int $duration, array $ids = null, array $dids = null, array $types = null): ?object {
-
- return null;
-
- }
-
- /**
- * disconnect from event nofifications
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore - Storage Interface
- *
- * @return object Items Object on success / Null on failure
- */
- public function disconnectEvents(EasClient $DataStore, string $id): ?bool {
-
- return null;
-
- }
-
- /**
- * observe event nofifications
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore - Storage Interface
- *
- * @return object Items Object on success / Null on failure
- */
- public function fetchEvents(EasClient $DataStore, string $id, string $token): ?object {
-
- return null;
-
- }
-
- /**
- * retrieve settings from remote storage
- *
- * @since Release 1.0.0
- *
- * @param EasClient $DataStore Storage Interface
- *
- * @return EasObject|null EasObject on success / Null on failure
- */
- public function retrieveSettings(EasClient $DataStore, string $class): EasObject | null {
-
- // construct command
- $o = new \stdClass();
- $o->Settings = new EasObject('Settings');
- $o->Settings->$class = new EasObject('Settings');
- $o->Settings->$class->Get = new EasObject('Settings', null);
- // evaluate settings class
- if ($class == 'Oof') {
- $o->Settings->$class->Get->BodyType = new EasProperty('Settings', 'Text');
- }
- // serialize request message
- $rq = $this->_encoder->stringFromObject($o);
- // execute request
- $rs = $DataStore->performSettings($rq);
- // evaluate, if data was returned
- if (!empty($rs)) {
- // deserialize response message
- $o = $this->_decoder->stringToObject($rs);
- // evaluate response status
- if ($o->Settings->Status->getContents() != '1' && $o->Settings->Status->getContents() != '110') {
- throw new EasException($o->Settings->Status->getContents(), 'ST');
- }
- // return response object
- return $o->Settings->$class->Get;
- }
- else {
- // return blank response
- return null;
- }
-
- }
}
diff --git a/lib/Service/Remote/RemoteEventsService.php b/lib/Service/Remote/RemoteEventsService.php
index 8d5600d..27dc2e9 100644
--- a/lib/Service/Remote/RemoteEventsService.php
+++ b/lib/Service/Remote/RemoteEventsService.php
@@ -908,19 +908,19 @@ public function fromTimeZone(string $zone): ?DateTimeZone {
. 'a64dstname/vdstyear/vdstmonth/vdstday/vdstweek/vdsthour/vdstminute/vdstsecond/vdstmillis/ldstbias', $zone);
// extract zone name from array and convert to UTF8
$name = trim(@iconv('UTF-16', 'UTF-8', $zone['stdname']));
- // convert EWS time zone name to DateTimeZone object
+ // convert JMAP time zone name to DateTimeZone object
return \OCA\JMAPC\Utile\TimeZoneEAS::toDateTimeZone($name);
}
/**
- * Converts DateTimeZone object to EWS (Microsoft/Windows) time zone name
+ * Converts DateTimeZone object to JMAP (Microsoft/Windows) time zone name
*
* @since Release 1.0.0
*
* @param DateTimeZone $zone
*
- * @return string valid EWS time zone name on success, or null on failure
+ * @return string valid JMAP time zone name on success, or null on failure
*/
public function toTimeZone(DateTimeZone $zone, DateTime $date = null): string {
diff --git a/lib/Tasks/EAS-Calendar-Create b/lib/Tasks/EAS-Calendar-Create
deleted file mode 100644
index 1461928..0000000
Binary files a/lib/Tasks/EAS-Calendar-Create and /dev/null differ
diff --git a/lib/Tasks/Test.php b/lib/Tasks/Test.php
index 11d8b95..9a49526 100644
--- a/lib/Tasks/Test.php
+++ b/lib/Tasks/Test.php
@@ -83,48 +83,7 @@
// execute initial harmonization
$HarmonizationService->performHarmonization($uid, 'S');
-
- exit;
-
- // construct decoder
- //$EasXmlEncoder = new \OCA\JMAPC\Utile\Eas\EasXmlEncoder();
- //$EasXmlDecoder = new \OCA\JMAPC\Utile\Eas\EasXmlDecoder();
-
- // Load From File
- //$stream = fopen(__DIR__ . '/EAS-Calendar-Create', 'r');
- // read data as stream
- //$msg_ref_obj = $EasXmlDecoder->streamToObject($stream);
- // read data as string
- //$msg_ref_raw = stream_get_contents($stream);
- //$msg_ref_obj = $EasXmlDecoder->stringToObject($msg_ref_raw);
- //fclose($stream);
-
- //exit;
- // construct remote data store client
- $EasClient = $CoreService->createClient($uid);
-
- // assign remote data store to module
- $RemoteEventsService->initialize($EasClient);
-
- // perform initial connect
- $EasClient->performConnect();
-
- $cid = 2;
- $cst = 0;
-
- // retrieve collection delta
- $rs = $RemoteEventsService->reconcileCollection($cid, $cst);
-
- if (isset($rs->SyncKey)) {
- $cst = $rs->SyncKey->getContents();
- }
-
- // retrieve collection delta
- $rs = $RemoteEventsService->reconcileCollection($cid, $cst);
-
- exit;
-
} catch (Exception $ex) {
$logger->logException($ex, ['app' => 'integration_jmapc']);
$logger->info('Test ended unexpectedly', ['app' => 'integration_jmapc']);
diff --git a/lib/Utile/Eas/EasAuthenticationBasic.php b/lib/Utile/Eas/EasAuthenticationBasic.php
deleted file mode 100644
index ae0e885..0000000
--- a/lib/Utile/Eas/EasAuthenticationBasic.php
+++ /dev/null
@@ -1,37 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-class EasAuthenticationBasic
-{
- public string $Id;
- public string $Secret;
-
- public function __construct (string $id = '', string $secret = '') {
- $this->Id = $id;
- $this->Secret = $secret;
- }
-}
diff --git a/lib/Utile/Eas/EasAuthenticationBearer.php b/lib/Utile/Eas/EasAuthenticationBearer.php
deleted file mode 100644
index 6f1dc21..0000000
--- a/lib/Utile/Eas/EasAuthenticationBearer.php
+++ /dev/null
@@ -1,39 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-class EasAuthenticationBearer
-{
- public string $Id;
- public string $Token;
- public int $Expiry;
-
- public function __construct (string $id, string $token = '', int $expiry = 0) {
- $this->Id = $id;
- $this->Token = $token;
- $this->Expiry = $expiry;
- }
-}
diff --git a/lib/Utile/Eas/EasClient.php b/lib/Utile/Eas/EasClient.php
deleted file mode 100644
index f735328..0000000
--- a/lib/Utile/Eas/EasClient.php
+++ /dev/null
@@ -1,633 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-/**
- * Exchange Active Sync Client
- */
-class EasClient
-{
- /**
- * Transport Version
- *
- * @var int
- */
- const TRANSPORT_VERSION_1 = CURL_HTTP_VERSION_1_0;
- const TRANSPORT_VERSION_1_1 = CURL_HTTP_VERSION_1_1;
- const TRANSPORT_VERSION_2 = CURL_HTTP_VERSION_2_0;
- /**
- * Transport Mode
- *
- * @var string
- */
- const TRANSPORT_MODE_STANDARD = 'http://';
- const TRANSPORT_MODE_SECURE = 'https://';
- /**
- * Service Version
- *
- * @var integer
- */
- const SERVICE_VERSION_161 = '16.1';
- const SERVICE_VERSION_160 = '16.0';
- const SERVICE_VERSION_141 = '14.1';
- const SERVICE_VERSION_140 = '14.0';
- const SERVICE_VERSION_121 = '12.1';
- const SERVICE_VERSION_120 = '12.0';
- /**
- * Transport Mode
- *
- * @var string
- */
- protected string $_TransportMode = self::TRANSPORT_MODE_SECURE;
- /**
- * Transpost Header
- */
- protected array $_TransportHeader = [
- 'Connection' => 'Connection: Keep-Alive',
- 'Content-Type' => 'Content-Type: application/vnd.ms-sync.wbxml',
- 'MS-ASProtocolVersion' => 'MS-ASProtocolVersion: ' . self::SERVICE_VERSION_161,
- 'X-MS-PolicyKey' => 'X-MS-PolicyKey: 0'
- ];
- /**
- * Transpost Options
- */
- protected array $_TransportOptions = [
- CURLOPT_USERAGENT => 'NextCloudEAS/1.0 (1.0; x64)',
- CURLOPT_HTTP_VERSION => self::TRANSPORT_VERSION_2,
- CURLOPT_CONNECTTIMEOUT => 30,
- CURLOPT_SSL_VERIFYPEER => true,
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_HEADER => true,
- CURLOPT_POST => true,
- CURLOPT_CUSTOMREQUEST => null
- ];
- /**
- * Service Host
- *
- * @var string
- */
- protected string $_ServiceHost = '';
- /**
- * Service Path
- *
- * @var string
- */
- protected string $_ServicePath = '/Microsoft-Server-ActiveSync';
- /**
- * Services Uri base that we are going to connect to
- *
- * @var string
- */
- protected string $_ServiceUriBase = '';
- /**
- * Services uri qery that we are going to send to
- *
- * @var string
- */
- protected string $_ServiceUriQuery = '';
- /**
- * Authentication to use when connecting to the service
- *
- * @var EasAuthenticationBasic|EasAuthenticationBearer
- */
- protected $_ServiceAuthentication;
- /**
- * Service Devide Type
- *
- * @var string
- */
- protected string $_ServiceDeviceType = 'NextCloudEAS';
- /**
- * Service Devide Id
- *
- * @var string
- */
- protected string $_ServiceDeviceId = '';
- /**
- * Service Devide Key
- *
- * @var string
- */
- protected string $_ServiceDeviceKey = '';
- /**
- * Services version that we are going to connect with
- *
- * @var string
- */
- protected string $_ServiceVersion;
- /**
- * cURL resource used to make the request
- *
- * @var CurlHandle
- */
- protected $_client;
-
- /**
- * Constructor for the ExchangeWebServices class
- *
- * @param string $host EAS Service Provider (FQDN, IPv4, IPv6)
- * @param string $authentication EAS Authentication
- * @param string $version EAS Protocol Version
- */
- public function __construct(
- $host = '',
- $authentication = null,
- $id = '',
- $key = '',
- $version = self::SERVICE_VERSION_161
- ) {
-
- // set service host
- $this->setHost($host);
- // set service authentication
- $this->setAuthentication($authentication);
- // set service device id
- $this->setDeviceId($id);
- // set service device key
- $this->setDeviceKey($key);
- // set service version
- $this->setVersion($version);
-
- }
-
- public function configureTransportVersion(int $value): void {
-
- // store parameter
- $this->_TransportOptions[CURLOPT_HTTP_VERSION] = $value;
- // destroy existing client will need to be initilized again
- $this->_client = null;
-
- }
-
- public function configureTransportMode(string $value): void {
-
- // store parameter
- $this->_TransportMode = $value;
- // destroy existing client will need to be initilized again
- $this->_client = null;
- // reconstruct service location
- $this->constructServiceUriBase();
-
- }
-
- public function configureTransportOptions(array $options): void {
-
- // store parameter
- $this->_TransportOptions = array_replace($this->_TransportOptions, $options);
- // destroy existing client will need to be initilized again
- $this->_client = null;
-
- }
-
- public function configureTransportVerification(bool $value): void {
-
- // store parameter
- $this->_TransportOptions[CURLOPT_SSL_VERIFYPEER] = $value;
- // destroy existing client will need to be initilized again
- $this->_client = null;
-
- }
-
- protected function constructServiceUriBase(): void {
-
- // set service location
- $this->_ServiceUriBase = $this->_TransportMode . $this->_ServiceHost . $this->_ServicePath;
-
- }
-
- protected function constructServiceUriQuery(): void {
-
- // set service location
- $this->_ServiceUriQuery = '?DeviceType=' . $this->_ServiceDeviceType .
- '&DeviceId=' . $this->_ServiceDeviceId .
- '&User=' . $this->_ServiceAuthentication->Id;
-
- }
-
- public function setTransportAgent(string $value): void {
-
- // store transport agent parameter
- $this->_TransportOptions[CURLOPT_USERAGENT] = $value;
- // destroy existing client will need to be initilized again
- $this->_client = null;
-
- }
-
- public function getTransportAgent(): string {
-
- // return transport agent paramater
- return $this->_TransportOptions[CURLOPT_USERAGENT];
-
- }
-
- /**
- * Gets the service host parameter
- *
- * @return string
- */
- public function getHost(): string {
-
- // return service host parameter
- return $this->_ServiceHost;
-
- }
-
- /**
- * Sets the service host parameter to be used for all requests
- *
- * @param string $value
- */
- public function setHost(string $value): void {
-
- // store service host
- $this->_ServiceHost = $value;
- // destroy existing client will need to be initilized again
- $this->_client = null;
- // reconstruct service uri base
- $this->constructServiceUriBase();
-
- }
-
- /**
- * Gets the service path parameter
- *
- * @return string
- */
- public function getPath(): string {
-
- // return service path parameter
- return $this->_ServicePath;
-
- }
-
- /**
- * Sets the service path parameter to be used for all requests
- *
- * @param string $value
- */
- public function setPath(string $value): void {
-
- // store service path parameter
- $this->ServicePath = $value;
- // destroy existing client will need to be initilized again
- $this->_client = null;
- // reconstruct service uri base
- $this->constructServiceUriBase();
-
- }
-
- /**
- * Gets the protocol version parameter
- *
- * @return string
- */
- public function getVersion(): string {
-
- // return version information
- return $this->_ServiceVersion;
-
- }
-
- /**
- * Sets the protocol version parameter to be used for all requests
- *
- * @param int $value
- */
- public function setVersion(string $value): void {
-
- // store service version
- $this->_ServiceVersion = $value;
- // set version on client
- $this->_TransportHeader['MS-ASProtocolVersion'] = 'MS-ASProtocolVersion: ' . $value;
-
- }
-
- /**
- * Gets the service device id parameter
- *
- * @return string
- */
- public function getDeviceId(): string {
-
- // return service device id parameter
- return $this->_ServiceDeviceId;
-
- }
-
- /**
- * Sets the service device policy key to be used for all requests
- *
- * @param string $value
- */
- public function setDeviceId(string $value): void {
-
- // store service policy key parameter
- $this->_ServiceDeviceId = $value;
- // set key on client
- $this->constructServiceUriQuery();
-
- }
-
- /**
- * Gets the service device policy key parameter
- *
- * @return string
- */
- public function getDeviceKey(): string {
-
- // return service policy key parameter
- return $this->_ServiceDeviceKey;
-
- }
-
- /**
- * Sets the service device policy key to be used for all requests
- *
- * @param string $value
- */
- public function setDeviceKey(string $value): void {
-
- // store service policy key parameter
- $this->_ServiceDeviceKey = $value;
- // set key on client
- $this->_TransportHeader['X-MS-PolicyKey'] = 'X-MS-PolicyKey: ' . $value;
-
- }
-
- /**
- * Gets the authentication parameters object
- *
- * @return AuthenticationBasic|AuthenticationBeare
- */
- public function getAuthentication(): EasAuthenticationBasic|EasAuthenticationBearer {
-
- // return authentication information
- return $this->_ServiceAuthentication;
-
- }
-
- /**
- * Sets the authentication parameters to be used for all requests
- *
- * @param AuthenticationBasic|AuthenticationBearer $value
- */
- public function setAuthentication(EasAuthenticationBasic|EasAuthenticationBearer $value): void {
-
- // store parameter
- $this->_ServiceAuthentication = $value;
- // destroy existing client will need to be initilized again
- $this->_client = null;
- // set service basic authentication
- if ($this->_ServiceAuthentication instanceof EasAuthenticationBasic) {
- $this->_TransportOptions[CURLOPT_HTTPAUTH] = CURLAUTH_BASIC;
- $this->_TransportOptions[CURLOPT_USERPWD] = $this->_ServiceAuthentication->Id . ':' . $this->_ServiceAuthentication->Secret;
- }
- // set service bearer authentication
- if ($this->_ServiceAuthentication instanceof EasAuthenticationBearer) {
- unset($this->_TransportOptions[CURLOPT_HTTPAUTH]);
- $this->_TransportHeader['Authorization'] = 'Authorization: Bearer ' . $this->_ServiceAuthentication->Token;
- }
- // construct service query
- $this->constructServiceUriQuery();
-
- }
-
- public function performCommand($message): null|string {
- // clear last headers and response
- $this->_ResponseHeaders = '';
- $this->_ResponseData = '';
-
- // evaluate if http client is initilized and location is the same
- if (!isset($this->_client)) {
- $this->_client = curl_init();
- }
-
- curl_setopt_array($this->_client, $this->_TransportOptions);
- curl_setopt($this->_client, CURLOPT_HTTPHEADER, array_values($this->_TransportHeader));
- // set request data
- if (!empty($message)) {
- curl_setopt($this->_client, CURLOPT_POSTFIELDS, $message);
- }
- // execute request
- $this->_ResponseData = curl_exec($this->_client);
-
- // evealuate execution errors
- $code = curl_errno($this->_client);
- if ($code > 0) {
- throw new RuntimeException(curl_error($this->_client), $code);
- }
-
- // evaluate http responses
- $code = (int) curl_getinfo($this->_client, CURLINFO_RESPONSE_CODE);
- if ($code > 400) {
- switch ($code) {
- case 401:
- throw new RuntimeException('Unauthorized', $code);
- break;
- case 403:
- throw new RuntimeException('Forbidden', $code);
- break;
- case 404:
- throw new RuntimeException('Not Found', $code);
- break;
- case 408:
- throw new RuntimeException('Request Timeout', $code);
- break;
- }
- }
-
- // separate headers and body
- $size = curl_getinfo($this->_client, CURLINFO_HEADER_SIZE);
- $this->_ResponseHeaders = substr($this->_ResponseData, 0, $size);
- $this->_ResponseData = substr($this->_ResponseData, $size);
- // return body
- return $this->_ResponseData;
- }
-
- public function performConnect(): null|string {
-
- // configure client for command
- unset($this->_TransportOptions[CURLOPT_POST]);
- $this->_TransportOptions[CURLOPT_CUSTOMREQUEST] = 'OPTIONS';
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase;
- // perform command
- $data = $this->performCommand('');
- // configure client to defualts
- $this->_TransportOptions[CURLOPT_POST] = true;
- unset($this->_TransportOptions[CURLOPT_CUSTOMREQUEST]);
- // return response body
- return $data;
-
- }
-
- public function performCollectionCreate($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=FolderCreate';
- return $this->performCommand($data);
-
- }
-
- public function performCollectionDelete($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=FolderDelete';
- return $this->performCommand($data);
-
- }
-
- public function performCollectionUpdate($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=FolderUpdate';
- return $this->performCommand($data);
-
- }
-
- public function performCollectionSync($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=FolderSync';
- return $this->performCommand($data);
-
- }
-
- // Performs same function as performCollectionSync but only valid for protocol versions 2.5, 12.0, and 12.1
- public function performCollectionHierarchy($data): null|string {
-
- throw new Exception("Command not implemented, use CollectionsSync instead.");
-
- }
-
- // Performs same function as performEntityOperation or performEntitySync but only valid for protocol versions 2.5, 12.0, and 12.1
- public function performEntityAttachment($data): null|string {
-
- throw new Exception("Command not implemented, use performEntityOperation or performEntitySync instead.");
-
- }
-
- public function performEntityEstimate($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=GetItemEstimate';
- return $this->performCommand($data);
-
- }
-
- // Performs same function as performEntitySearch and only valid only for protocol version 16.1
- public function performEntityFind($data): null|string {
-
- throw new Exception("Command not implemented, use performEntitySearch instead.");
-
- }
-
- public function performEntityOperation($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=ItemOperations';
- return $this->performCommand($data);
-
- }
-
- public function performEntitySearch($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=Search';
- return $this->performCommand($data);
-
- }
-
- public function performEntitySync($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=Sync';
- return $this->performCommand($data);
-
- }
-
- public function performMeetingResponse($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=MeetingResponse';
- return $this->performCommand($data);
-
- }
-
- public function performMoveItems($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=MoveItems';
- return $this->performCommand($data);
-
- }
-
- public function performPing($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=Ping';
- return $this->performCommand($data);
-
- }
-
- public function performProvision($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=Provision';
- return $this->performCommand($data);
-
- }
-
- public function performResolveRecipients($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=ResolveRecipients';
- return $this->performCommand($data);
-
- }
-
- public function performMailSend($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=SendMail';
- return $this->performCommand($data);
-
- }
-
- public function performMailForward($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=SmartForward';
- return $this->performCommand($data);
-
- }
-
- public function performMailReply($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=SmartReply';
- return $this->performCommand($data);
-
- }
-
- public function performSettings($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=Settings';
- return $this->performCommand($data);
-
- }
-
- public function performValidateCert($data): null|string {
-
- $this->_TransportOptions[CURLOPT_URL] = $this->_ServiceUriBase . $this->_ServiceUriQuery . '&Cmd=ValidateCert';
- return $this->performCommand($data);
-
- }
-
-}
diff --git a/lib/Utile/Eas/EasCollection.php b/lib/Utile/Eas/EasCollection.php
deleted file mode 100644
index 10e79e1..0000000
--- a/lib/Utile/Eas/EasCollection.php
+++ /dev/null
@@ -1,46 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-class EasCollection extends \ArrayObject
-{
- private ?string $_namespace = null;
-
- /*Constructor method with arguments*/
- public function __construct(string $namespace = null)
- {
- $this->_namespace = $namespace;
- }
-
- public function getNamespace(): string {
- return $this->_namespace;
- }
-
- public function setNamespace(string $namespace): void {
- $this->_namespace = $namespace;
- }
-
-}
\ No newline at end of file
diff --git a/lib/Utile/Eas/EasException.php b/lib/Utile/Eas/EasException.php
deleted file mode 100644
index 3846178..0000000
--- a/lib/Utile/Eas/EasException.php
+++ /dev/null
@@ -1,152 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-use Exception;
-use Throwable;
-
-class EasException extends Exception {
-
- private static $_messages = [
- // Autodiscovery
- 'AD-2' => 'Protocol error',
- // Collection Create
- 'CC-2' => 'The parent folder already contains a folder with the same name. Create the folder under a different name.',
- 'CC-3' => 'The specified parent folder is a special system folder. Create the folder under a different parent.',
- 'CC-5' => 'The parent folder does not exist on the server, possibly because it has been deleted or moved.',
- 'CC-6' => 'An error occurred on the server.',
- 'CC-9' => 'Synchronization key mismatch or invalid synchronization key.',
- 'CC-10' => 'Malformed request. The request contains a semantic error, or attempted to create a default folder, such as the Inbox folder, Outbox folder, or Contacts folder.',
- // Collection Update
- 'CU-2' => 'A folder with that name already exists or the specified folder is a special folder.',
- 'CU-3' => 'The specified folder is a special folder. Special folders cannot be updated.',
- 'CU-4' => 'The specified folder does not exist.',
- 'CU-5' => 'The specified parent folder does not exist.',
- 'CU-6' => 'An error occurred on the server.',
- 'CU-9' => 'Synchronization key mismatch or invalid synchronization key.',
- 'CU-10' => 'Incorrectly formatted request.',
- // Collection Delete
- 'CD-3' => 'The specified folder is a special system folder and cannot be deleted.',
- 'CD-4' => 'The specified folder does not exist.',
- 'CD-6' => 'An error occurred on the server.',
- 'CD-9' => 'Synchronization key mismatch or invalid synchronization key.',
- // Collection Sync
- 'CS-6' => 'An error occurred on the server.',
- 'CS-9' => 'Synchronization key mismatch or invalid synchronization key.',
- 'CS-10' => 'Incorrectly formatted request.',
- // Entity Estimate
- 'EE-2' => 'One or more of the specified folders does not exist or an incorrect folder was requested.',
- 'EE-3' => 'The synchronization state has not been primed.',
- 'EE-4' => 'The specified synchronization key was invalid. Malformed or mismatched synchronization key.',
- // Entity Find
- 'EF-2' => 'The request was invalid. The search failed to validate.',
- 'EF-3' => 'FolderSync required. The folder hierarchy is out of date.',
- 'EF-4' => 'The requested range does not begin with 0.',
- // Entity Operation
- 'EO-2' => 'Protocol error. Protocol violation/XML validation error.',
- 'EO-3' => 'Server error.',
- 'EO-4' => 'Document library. The specified URI is bad.',
- 'EO-5' => 'Document library. Access denied.',
- 'EO-6' => 'Document library. The object was not found or access denied.',
- 'EO-7' => 'Document library. Failed to connect to the server.',
- 'EO-8' => 'The byte-range is invalid or too large.',
- 'EO-9' => 'The store is unknown or unsupported.',
- 'EO-10' => 'The file is empty.',
- 'EO-11' => 'The requested data size is too large.',
- 'EO-12' => 'Failed to download file because of input/output (I/O) failure.',
- 'EO-14' => 'Fetch. The item failed conversion.',
- 'EO-15' => 'Fetch. Attachment or attachment ID is invalid.',
- 'EO-16' => 'Access to the resource is denied.',
- 'EO-17' => 'Partial success; a Fetch, Move, or EmptyFolderContents operation completed partially.',
- 'EO-18' => 'Credentials required.',
- // Entity Sync
- 'ES-3' => 'Invalid or mismatched synchronization key.',
- 'ES-4' => 'Protocol error. There was a semantic error in the request. The request that not comply with the specification requirements.',
- 'ES-5' => 'Server error. Server misconfiguration, temporary system issue, or bad item. This is frequently a transient condition.',
- 'ES-6' => 'Error in client/server conversion. A malformed or invalid item was sent',
- 'ES-7' => 'Conflict matching the client and server object. The client has changed an item for which the conflict policy indicates that the server\'s changes take precedence.',
- 'ES-8' => 'Object not found. The client issued a fetch or change operation that has a Collection Id or Entity Id value that is no longer valid on the server (for example, the item was deleted).',
- 'ES-9' => 'The Sync command cannot be completed. User account could be out of disk space.',
- 'ES-12' => 'The collection hierarchy has changed. Mailbox collections are not synchronized.',
- 'ES-13' => 'The sync command request is not complete. An empty or partial sync command request was received and the cached set of notify-able collections is missing.',
- 'ES-14' => 'Invalid Wait or HeartbeatInterval value.',
- 'ES-15' => 'Invalid sync command request.',
- 'ES-16' => 'Retry. Something on the server caused a retriable error.',
- // Settings
- 'ST-2' => 'Protocol error.',
- 'ST-3' => 'Access denied.',
- 'ST-4' => 'Server unavailable.',
- 'ST-5' => 'Invalid arguments.',
- 'ST-6' => 'Conflicting arguments.',
- 'ST-7' => 'Denied by policy.',
- // Global
- 101 => 'Invalid Content. The body of the HTTP request sent by the client is invalid.',
- 102 => 'Invalid WBXML. The request contains WBXML but it could not be decoded.',
- 103 => 'Invalid XML. The XML provided in the request does not follow the protocol requirements.',
- 104 => 'Invalid DateTime. The request contains a timestamp that could not be parsed into a valid date and time.',
- 105 => 'Invalid Combination Of IDs. The request contains a combination of parameters that is invalid.',
- 106 => 'Invalid IDs. The request contains one or more IDs that could not be parsed into valid values.',
- 107 => 'Invalid MIME. The request contains MIME that could not be parsed.',
- 108 => 'Device Id Missing Or Invalid. The device ID is either missing or has an invalid format.',
- 109 => 'Device Type Missing Or Invalid. The device type is either missing or has an invalid format.',
- 110 => 'Server Error. The server encountered an unknown error, the device SHOULD NOT retry later.',
- 111 => 'Server Error Retry Later. The server encountered an unknown error, the device SHOULD retry later.',
- 112 => 'Active Directory Access Denied. The server does not have access to read/write to an object in the directory service.',
- 113 => 'Mailbox Quota Exceeded. The mailbox has reached its size quota.',
- 114 => 'Mailbox Server Offline. The mailbox server is offline.',
- 115 => 'Send Quota Exceeded. The request would exceed the send quota.',
- 116 => 'Message Recipient Unresolved. One of the recipients could not be resolved to an email address.',
-
- ];
-
- /**
- * @param string|int $code [optional] The Exception code.
- * @param string $message [optional] The Exception message to throw.
- * @param null|Throwable $previous [optional] The previous throwable used for the exception chaining.
- */
- public function __construct(string|int $code = 0, string $operation, string $message = null, Throwable $previous = null) {
- if (!is_numeric($code)) {
- $code = (int)$code;
- }
- if ($code < 100) {
- $mcode = $operation . '-' . $code;
- }
- else {
- $mcode = $code;
- }
-
- if (!isset($message)) {
- if (isset(self::$_messages[$mcode])) {
- $message = $mcode . ': ' . self::$_messages[$mcode];
- }
- else {
- $message = $code . ': Unknown Error';
- }
-
- }
- parent::__construct($message, $code, $previous);
- }
-}
diff --git a/lib/Utile/Eas/EasLocator.php b/lib/Utile/Eas/EasLocator.php
deleted file mode 100644
index 0da64b9..0000000
--- a/lib/Utile/Eas/EasLocator.php
+++ /dev/null
@@ -1,898 +0,0 @@
-.
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-class EasLocator
-{
- /**
- * The path appended to the various schemes and hostnames used during
- * autodiscovery.
- *
- * @var string
- */
- const AUTODISCOVER_PATH = '/autodiscover/autodiscover.xml';
-
- /**
- * Server was discovered using the TLD method.
- *
- * @var integer
- */
- const AUTODISCOVERED_VIA_TLD = 10;
-
- /**
- * Server was discovered using the subdomain method.
- *
- * @var integer
- */
- const AUTODISCOVERED_VIA_SUBDOMAIN = 11;
-
- /**
- * Server was discovered using the unauthenticated GET method.
- *
- * @var integer
- */
- const AUTODISCOVERED_VIA_UNAUTHENTICATED_GET = 12;
-
- /**
- * Server was discovered using the DNS SRV redirect method.
- *
- * @var integer
- */
- const AUTODISCOVERED_VIA_SRV_RECORD = 13;
-
- /**
- * Server was discovered using the HTTP redirect method.
- *
- * @var integer
- *
- * @todo We do not currently support this.
- */
- const AUTODISCOVERED_VIA_RESPONSE_REDIRECT = 14;
-
- /**
- * The email address to attempt autodiscovery against.
- *
- * @var string
- */
- protected $email;
-
- /**
- * The password to present during autodiscovery.
- *
- * @var string
- */
- protected $password;
-
- /**
- * The Exchange username to use during authentication. If unspecified,
- * the provided email address will be used as the username.
- *
- * @var string
- */
- protected $username;
-
- /**
- * The top-level domain name, extracted from the provided email address.
- *
- * @var string
- */
- protected $tld;
-
- /**
- * The Autodiscover XML request. Since it's used repeatedly, it's cached
- * in this property to avoid redundant re-generation.
- *
- * @var string
- */
- protected $requestxml;
-
- /**
- * The Certificate Authority path. Should point to a directory containing
- * one or more certificates to use in SSL verification.
- *
- * @var string
- */
- protected $capath;
-
- /**
- * The path to a specific Certificate Authority file. Get one and use it
- * for full Autodiscovery compliance.
- *
- * @var string
- *
- * @link http://curl.haxx.se/ca/cacert.pem
- * @link http://curl.haxx.se/ca/
- */
- protected $cainfo;
-
- /**
- * Skip SSL verification. Bad idea, and violates the strict Autodiscover
- * protocol. But, here in case you have no other option.
- * Defaults to FALSE.
- *
- * @var boolean
- */
- protected $skip_ssl_verification = false;
-
- /**
- * The body of the last response.
- *
- * @var string
- */
- public $last_response;
-
- /**
- * An associative array of response headers that resulted from the
- * last request. Keys are lowercased for easy checking.
- *
- * @var array
- */
- public $last_response_headers;
-
- /**
- * The output of curl_info() relating to the most recent cURL request.
- *
- * @var array
- */
- public $last_info;
-
- /**
- * The cURL error code associated with the most recent cURL request.
- *
- * @var integer
- */
- public $last_curl_errno;
-
- /**
- * Human-readable description of the most recent cURL error.
- *
- * @var string
- */
- public $last_curl_error;
-
- /**
- * The value in seconds to use for Autodiscover host connection timeouts.
- * Default connection timeout is 2 seconds, so that unresponsive methods
- * can be bypassed quickly.
- *
- * @var integer
- */
- public $connection_timeout = 2;
-
- /**
- * Information about an Autodiscover Response containing an error will
- * be stored here.
- *
- * @var mixed
- */
- public $error = false;
-
- /**
- * Information about an Autodiscover Response with a redirect will be
- * retained here.
- *
- * @var mixed
- */
- public $redirect = false;
-
- /**
- * A successful, non-error and non-redirect parsed Autodiscover response
- * will be stored here.
- *
- * @var mixed
- */
- public $discovered = null;
-
- /**
- * Constructor for the EWSAutodiscover class.
- *
- * @param string $email
- * @param string $password
- * @param string $username
- * If left blank, the email provided will be used.
- */
- public function __construct($email, $password, $username = null)
- {
- $this->email = $email;
- $this->password = $password;
-
- if ($username === null) {
- $username = $email;
- }
- $this->username = $username;
-
- $this->setTLD();
- }
-
- /**
- * Execute the full discovery chain of events in the correct sequence
- * until a valid response is received, or all methods have failed.
- *
- * @return integer
- * One of the AUTODISCOVERED_VIA_* constants.
- *
- * @throws \RuntimeException
- * When all autodiscovery methods fail.
- */
- public function locate()
- {
- $result = $this->tryTLD();
-
- if ($result === false) {
- $result = $this->trySubdomain();
- }
-
- if ($result === false) {
- $result = $this->trySubdomainUnauthenticatedGet();
- }
-
- if ($result === false) {
- $result = $this->trySRVRecord();
- }
-
- if ($result === false) {
- throw new \RuntimeException('Autodiscovery failed.');
- }
-
- return $result;
- }
-
- /**
- * Return the settings discovered from the Autodiscover process.
- *
- * NULL indicates discovery has not completed (or been attempted)
- * FALSE indicates discovery was not successful. Check for errors
- * or redirects.
- * An array will be returned with discovered settings on success.
- *
- * @return mixed
- */
- public function discoveredSettings()
- {
- return $this->discovered;
- }
-
- /**
- * Toggle skipping of SSL verification in cURL requests.
- *
- * @param boolean $skip
- * Whether or not to skip SSL certificate verification.
- * @return self
- *
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function skipSSLVerification($skip = true)
- {
- $this->skip_ssl_verification = (bool) $skip;
-
- return $this;
- }
-
- /**
- * Parse the hex ServerVersion value and return a valid
- * EWSClient::VERSION_* constant.
- *
- * @return string|boolean A known version constant, or FALSE if it could not
- * be determined.
- *
- * @link http://msdn.microsoft.com/en-us/library/bb204122(v=exchg.140).aspx
- * @link http://blogs.msdn.com/b/pcreehan/archive/2009/09/21/parsing-serverversion-when-an-int-is-really-5-ints.aspx
- * @link http://office.microsoft.com/en-us/outlook-help/determine-the-version-of-microsoft-exchange-server-my-account-connects-to-HA001191800.aspx
- *
- * @param string $version_hex
- * Hexadecimal version string.
- */
- public function parseServerVersion($version_hex)
- {
- $svbinary = base_convert($version_hex, 16, 2);
- if (strlen($svbinary) == 31) {
- $svbinary = '0' . $svbinary;
- }
-
- $majorversion = (int) base_convert(substr($svbinary, 4, 6), 2, 10);
- $minorversion = (int) base_convert(substr($svbinary, 10, 6), 2, 10);
- $majorbuild = (int) base_convert(substr($svbinary, 17, 15), 2, 10);
-
- switch ($majorversion) {
- case 8:
- return $this->parseVersion2007($minorversion);
- case 14:
- return $this->parseVersion2010($minorversion);
- case 15:
- if ($minorversion == 0) {
- return $this->parseVersion2013($majorbuild);
- }
-
- return $this->parseVersion2016();
- }
-
- // Guess we didn't find a known version.
- return false;
- }
-
- /**
- * Method to return a new EWSClient object, auto-configured
- * with the proper hostname.
- *
- * @return mixed Client object on success, FALSE on failure.
- */
- public function newEWS()
- {
- // Discovery not yet attempted.
- if ($this->discovered === null) {
- $this->discover();
- }
-
- // Discovery not successful.
- if ($this->discovered === false) {
- return false;
- }
-
- $server = false;
- $version = null;
-
- // Pick out the host from the EXPR (Exchange RPC over HTTP).
- foreach ($this->discovered['Account']['Protocol'] as $protocol) {
- if (($protocol['Type'] == 'EXCH' || $protocol['Type'] == 'EXPR')
- && isset($protocol['ServerVersion'])) {
- if ($version === null) {
- $sv = $this->parseServerVersion($protocol['ServerVersion']);
- if ($sv !== false) {
- $version = $sv;
- }
- }
- }
-
- if ($protocol['Type'] == 'EXPR' && isset($protocol['Server'])) {
- $server = $protocol['Server'];
- }
- }
-
- if ($server) {
- if ($version === null) {
- // EWS class default.
- $version = EWSClient::VERSION_2007;
- }
- return new EWSClient(
- $server,
- (!empty($this->username) ? $this->username : $this->email),
- $this->password,
- $version
- );
- }
-
- return false;
- }
-
- /**
- * Static method may fail if there are issues surrounding SSL certificates.
- * In such cases, set up the object as needed, and then call newEWS().
- *
- * @param string $email
- * @param string $password
- * @param string $username
- * If left blank, the email provided will be used.
- * @return mixed
- */
- public static function getEWS($email, $password, $username = null)
- {
- $auto = new Autodiscover($email, $password, $username);
- return $auto->newEWS();
- }
-
- /**
- * Perform an NTLM authenticated HTTPS POST to the top-level
- * domain of the email address.
- *
- * @return integer|boolean
- * One of the AUTODISCOVERED_VIA_* constants or false on failure.
- */
- public function tryTLD()
- {
- $url = 'https://' . $this->tld . self::AUTODISCOVER_PATH;
- return ($this->tryViaUrl($url) ? self::AUTODISCOVERED_VIA_TLD : false);
- }
-
- /**
- * Perform an NTLM authenticated HTTPS POST to the 'autodiscover'
- * subdomain of the email address' TLD.
- *
- * @return integer|boolean
- * One of the AUTODISCOVERED_VIA_* constants or false on failure.
- */
- public function trySubdomain()
- {
- $url = 'https://autodiscover.' . $this->tld . self::AUTODISCOVER_PATH;
- return ($this->tryViaUrl($url)
- ? self::AUTODISCOVERED_VIA_SUBDOMAIN
- : false);
- }
-
- /**
- * Perform an unauthenticated HTTP GET in an attempt to get redirected
- * via 302 to the correct location to perform the HTTPS POST.
- *
- * @return integer|boolean
- * One of the AUTODISCOVERED_VIA_* constants or false on failure.
- */
- public function trySubdomainUnauthenticatedGet()
- {
- $this->reset();
- $url = 'http://autodiscover.' . $this->tld . self::AUTODISCOVER_PATH;
- $ch = curl_init();
- $opts = array(
- CURLOPT_URL => $url,
- CURLOPT_HTTPGET => true,
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_TIMEOUT => 4,
- CURLOPT_CONNECTTIMEOUT => $this->connection_timeout,
- CURLOPT_FOLLOWLOCATION => false,
- CURLOPT_HEADER => false,
- CURLOPT_HEADERFUNCTION => array($this, 'readHeaders'),
- CURLOPT_HTTP200ALIASES => array(301, 302),
- CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4
- );
- curl_setopt_array($ch, $opts);
- $this->last_response = curl_exec($ch);
- $this->last_info = curl_getinfo($ch);
- $this->last_curl_errno = curl_errno($ch);
- $this->last_curl_error = curl_error($ch);
-
- if ($this->last_info['http_code'] == 302
- || $this->last_info['http_code'] == 301) {
- if ($this->tryViaUrl($this->last_response_headers['location'])) {
- return self::AUTODISCOVERED_VIA_UNAUTHENTICATED_GET;
- }
- }
-
- return false;
- }
-
- /**
- * Attempt to retrieve the autodiscover host from an SRV DNS record.
- *
- * @link http://support.microsoft.com/kb/940881
- *
- * @return integer|boolean
- * The value of self::AUTODISCOVERED_VIA_SRV_RECORD or false.
- */
- public function trySRVRecord()
- {
- $srvhost = '_autodiscover._tcp.' . $this->tld;
- $lookup = dns_get_record($srvhost, DNS_SRV);
- if (sizeof($lookup) > 0) {
- $host = $lookup[0]['target'];
- $url = 'https://' . $host . self::AUTODISCOVER_PATH;
- if ($this->tryViaUrl($url)) {
- return self::AUTODISCOVERED_VIA_SRV_RECORD;
- }
- }
-
- return false;
- }
-
- /**
- * Set the path to the file to be used by CURLOPT_CAINFO.
- *
- * @param string $path
- * Path to a certificate file such as cacert.pem
- * @return self
- */
- public function setCAInfo($path)
- {
- if (file_exists($path) && is_file($path)) {
- $this->cainfo = $path;
- }
-
- return $this;
- }
-
- /**
- * Set the path to the file to be used by CURLOPT_CAPATH.
- *
- * @param string $path
- * Path to a directory containing one or more CA certificates.
- * @return self
- */
- public function setCAPath($path)
- {
- if (is_dir($path)) {
- $this->capath = $path;
- }
-
- return $this;
- }
-
- /**
- * Set a connection timeout for the POST methods.
- *
- * @param integer $seconds
- * Seconds to wait for a connection.
- * @return self
- */
- public function setConnectionTimeout($seconds)
- {
- $this->connection_timeout = intval($seconds);
-
- return $this;
- }
-
- /**
- * Perform the NTLM authenticated post against one of the chosen
- * endpoints.
- *
- * @param string $url
- * URL to try posting to.
- * @param integer $timeout
- * Number of seconds before the request should timeout.
- * @return boolean
- */
- public function doNTLMPost($url, $timeout = 6)
- {
- $this->reset();
-
- $ch = curl_init();
- $opts = array(
- CURLOPT_URL => $url,
- CURLOPT_HTTPAUTH => CURLAUTH_BASIC | CURLAUTH_NTLM,
- CURLOPT_CUSTOMREQUEST => 'POST',
- CURLOPT_POSTFIELDS => $this->getAutoDiscoverRequest(),
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_USERPWD => $this->username . ':' . $this->password,
- CURLOPT_TIMEOUT => $timeout,
- CURLOPT_CONNECTTIMEOUT => $this->connection_timeout,
- CURLOPT_FOLLOWLOCATION => true,
- CURLOPT_HEADER => false,
- CURLOPT_HEADERFUNCTION => array($this, 'readHeaders'),
- CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
- CURLOPT_SSL_VERIFYPEER => true,
- CURLOPT_SSL_VERIFYHOST => 2,
- );
-
- // Set the appropriate content-type.
- curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8'));
-
- if (!empty($this->cainfo)) {
- $opts[CURLOPT_CAINFO] = $this->cainfo;
- }
-
- if (!empty($this->capath)) {
- $opts[CURLOPT_CAPATH] = $this->capath;
- }
-
- if ($this->skip_ssl_verification) {
- $opts[CURLOPT_SSL_VERIFYPEER] = false;
- }
-
- curl_setopt_array($ch, $opts);
- $this->last_response = curl_exec($ch);
- $this->last_info = curl_getinfo($ch);
- $this->last_curl_errno = curl_errno($ch);
- $this->last_curl_error = curl_error($ch);
-
- if ($this->last_curl_errno != CURLE_OK) {
- return false;
- }
-
- $discovered = $this->parseAutodiscoverResponse();
-
- return $discovered;
- }
-
- /**
- * Parse the Autoresponse Payload, particularly to determine if an
- * additional request is necessary.
- *
- * @return boolean|array FALSE if response isn't XML or parsed response
- * array.
- */
- protected function parseAutodiscoverResponse()
- {
- // Content-type isn't trustworthy, unfortunately. Shame on Microsoft.
- if (substr($this->last_response, 0, 5) !== 'responseToArray($this->last_response);
-
- if (isset($response['Error'])) {
- $this->error = $response['Error'];
- return false;
- }
-
- // Check the account action for redirect.
- switch ($response['Account']['Action']) {
- case 'redirectUrl':
- $this->redirect = array(
- 'redirectUrl' => $response['Account']['RedirectUrl']
- );
- return false;
- case 'redirectAddr':
- $this->redirect = array(
- 'redirectAddr' => $response['Account']['RedirectAddr']
- );
- return false;
- case 'settings':
- default:
- $this->discovered = $response;
- return true;
- }
- }
-
- /**
- * Set the top-level domain to be used with autodiscover attempts based
- * on the provided email address.
- *
- * @return boolean
- */
- protected function setTLD()
- {
- $pos = strpos($this->email, '@');
- if ($pos !== false) {
- $this->tld = trim(substr($this->email, $pos + 1));
- return true;
- }
-
- return false;
- }
-
- /**
- * Reset the response-related structures. Called before making a new
- * request.
- *
- * @return self
- */
- public function reset()
- {
- $this->last_response_headers = array();
- $this->last_info = array();
- $this->last_curl_errno = 0;
- $this->last_curl_error = '';
-
- return $this;
- }
-
- /**
- * Return the generated Autodiscover XML request body.
- *
- * @return string
- *
- * @suppress PhanTypeMismatchArgumentInternal
- */
- public function getAutodiscoverRequest()
- {
- if (!empty($this->requestxml)) {
- return $this->requestxml;
- }
-
- $xml = new \XMLWriter();
- $xml->openMemory();
- $xml->setIndent(true);
- $xml->startDocument('1.0', 'UTF-8');
- $xml->startElementNS(
- null,
- 'Autodiscover',
- 'http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006'
- );
-
- $xml->startElement('Request');
- $xml->writeElement('EMailAddress', $this->email);
- $xml->writeElement(
- 'AcceptableResponseSchema',
- 'http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a'
- );
- $xml->endElement();
- $xml->endElement();
-
- $this->requestxml = $xml->outputMemory();
- return $this->requestxml;
- }
-
- /**
- * Utility function to pick headers off of the incoming cURL response.
- * Used with CURLOPT_HEADERFUNCTION.
- *
- * @param resource $_ch
- * cURL handle.
- * @param string $str
- * Header string to read.
- * @return integer
- * Bytes read.
- *
- * @todo Determine if we can remove $_ch here.
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- public function readHeaders($_ch, $str)
- {
- $pos = strpos($str, ':');
- if ($pos !== false) {
- $key = strtolower(substr($str, 0, $pos));
- $val = trim(substr($str, $pos + 1));
- $this->last_response_headers[$key] = $val;
- }
-
- return strlen($str);
- }
-
- /**
- * Utility function to parse XML payloads from the response into easier
- * to manage associative arrays.
- *
- * @param string $xml
- * XML to parse.
- * @return array
- */
- public function responseToArray($xml)
- {
- $doc = new \DOMDocument();
- $doc->loadXML($xml);
- $out = $this->nodeToArray($doc->documentElement);
-
- return $out['Response'];
- }
-
- /**
- * Recursive method for parsing DOM nodes.
- *
- * @param \DOMElement $node
- * DOMNode object.
- * @return mixed
- *
- * @link https://github.com/gaarf/XML-string-to-PHP-array
- *
- * @suppress PhanTypeMismatchArgument, PhanUndeclaredProperty
- */
- protected function nodeToArray($node)
- {
- $output = array();
- switch ($node->nodeType) {
- case XML_CDATA_SECTION_NODE:
- case XML_TEXT_NODE:
- $output = trim($node->textContent);
- break;
- case XML_ELEMENT_NODE:
- for ($i = 0, $m = $node->childNodes->length; $i < $m; $i++) {
- $child = $node->childNodes->item($i);
- $value = $this->nodeToArray($child);
- if (isset($child->tagName)) {
- $tag = $child->tagName;
- if (!isset($output[$tag])) {
- $output[$tag] = array();
- }
- $output[$tag][] = $value;
- } elseif ($value || $value === '0') {
- $output = (string) $value;
- }
- }
-
- // Edge case of a node containing a text node, which also has
- // attributes. this way we'll retain text and attributes for
- // this node.
- if (is_string($output) && $node->attributes->length) {
- $output = array('@text' => $output);
- }
-
- if (is_array($output)) {
- if ($node->attributes->length) {
- $attributes = array();
- foreach ($node->attributes as $attrName => $attrNode) {
- $attributes[$attrName] = (string) $attrNode->value;
- }
- $output['@attributes'] = $attributes;
- }
- foreach ($output as $tag => $value) {
- if (is_array($value) && count($value) == 1 && $tag != '@attributes') {
- $output[$tag] = $value[0];
- }
- }
- }
- break;
- }
-
- return $output;
- }
-
- /**
- * Parses the version of an Exchange 2007 server.
- *
- * @param integer $minorversion
- * Minor server version.
- * @return string Server version.
- */
- protected function parseVersion2007($minorversion)
- {
- switch ($minorversion) {
- case 0:
- return EWSClient::VERSION_2007;
- case 1:
- case 2:
- case 3:
- return EWSClient::VERSION_2007_SP1;
- default:
- return EWSClient::VERSION_2007;
- }
- }
-
- /**
- * Parses the version of an Exchange 2010 server.
- *
- * @param integer $minorversion
- * Minor server version.
- * @return string Server version.
- */
- protected function parseVersion2010($minorversion)
- {
- switch ($minorversion) {
- case 0:
- return EWSClient::VERSION_2010;
- case 1:
- return EWSClient::VERSION_2010_SP1;
- case 2:
- return EWSClient::VERSION_2010_SP2;
- default:
- return EWSClient::VERSION_2010;
- }
- }
-
- /**
- * Parses the version of an Exchange 2013 server.
- *
- * @param integer $majorbuild
- * Major build version.
- * @return string Server version.
- */
- protected function parseVersion2013($majorbuild)
- {
- return ($majorbuild == 847
- ? EWSClient::VERSION_2013_SP1
- : EWSClient::VERSION_2013);
- }
-
- /**
- * Parses the version of an Exchange 2016 server.
- *
- * @return string Server version.
- */
- protected function parseVersion2016()
- {
- return EWSClient::VERSION_2016;
- }
-
- /**
- * Attempts an autodiscover via a URL.
- *
- * @param string $url
- * Url to attempt an autodiscover.
- * @param integer $timeout
- * Number of seconds before the request should timeout.
- * @return boolean
- */
- protected function tryViaUrl($url, $timeout = 6)
- {
- $result = $this->doNTLMPost($url, $timeout);
- return ($result ? true : false);
- }
-}
diff --git a/lib/Utile/Eas/EasObject.php b/lib/Utile/Eas/EasObject.php
deleted file mode 100644
index 396e05d..0000000
--- a/lib/Utile/Eas/EasObject.php
+++ /dev/null
@@ -1,46 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-class EasObject
-{
- private ?string $_namespace = null;
-
- /*Constructor method with arguments*/
- public function __construct(string $namespace = null)
- {
- $this->_namespace = $namespace;
- }
-
- public function getNamespace(): string {
- return $this->_namespace;
- }
-
- public function setNamespace(string $namespace): void {
- $this->_namespace = $namespace;
- }
-
-}
\ No newline at end of file
diff --git a/lib/Utile/Eas/EasProperty.php b/lib/Utile/Eas/EasProperty.php
deleted file mode 100644
index 3f51c94..0000000
--- a/lib/Utile/Eas/EasProperty.php
+++ /dev/null
@@ -1,70 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-class EasProperty
-{
- private ?string $_namespace = null;
- private mixed $_contents = null;
- private bool $_opaque = false;
-
- /*Constructor method with arguments*/
- public function __construct(string $namespace, mixed $content, bool $opaque = false)
- {
- $this->_namespace = $namespace;
- $this->_contents = $content;
- $this->_opaque = $opaque;
- }
-
- public function getNamespace(): string {
- return $this->_namespace;
- }
-
- public function setNamespace(string $namespace): void {
- $this->_namespace = $namespace;
- }
-
- public function getContents(): mixed {
- return $this->_contents;
- }
-
- public function setContents(mixed $content): void {
- $this->_contents = $content;
- }
-
- public function hasContents(): bool {
- return isset($this->_contents);
- }
-
- public function getOpaque(): bool {
- return $this->_opaque;
- }
-
- public function setOpaque(bool $opaque): void {
- $this->_opaque = $opaque;
- }
-
-}
\ No newline at end of file
diff --git a/lib/Utile/Eas/EasTypes.php b/lib/Utile/Eas/EasTypes.php
deleted file mode 100644
index 500ee0f..0000000
--- a/lib/Utile/Eas/EasTypes.php
+++ /dev/null
@@ -1,63 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-class EasTypes {
-
- const COLLECTION_TYPE_SYSTEM_INBOX = 2;
- const COLLECTION_TYPE_SYSTEM_DRAFTS = 3;
- const COLLECTION_TYPE_SYSTEM_DELETED = 4;
- const COLLECTION_TYPE_SYSTEM_SENT = 5;
- const COLLECTION_TYPE_SYSTEM_OUTBOX = 6;
- const COLLECTION_TYPE_SYSTEM_TASKS = 7;
- const COLLECTION_TYPE_SYSTEM_CALENDAR = 8;
- const COLLECTION_TYPE_SYSTEM_CONTACTS = 9;
- const COLLECTION_TYPE_SYSTEM_NOTES = 10;
- const COLLECTION_TYPE_SYSTEM_JOURNAL = 11;
- const COLLECTION_TYPE_SYSTEM_CACHE = 19;
- const COLLECTION_TYPE_USER_GENERIC = 1;
- const COLLECTION_TYPE_USER_MAIL = 12;
- const COLLECTION_TYPE_USER_CALENDAR = 13;
- const COLLECTION_TYPE_USER_CONTACTS = 14;
- const COLLECTION_TYPE_USER_TASKS = 15;
- const COLLECTION_TYPE_USER_JOURNAL = 16;
- const COLLECTION_TYPE_USER_NOTES = 17;
- const COLLECTION_TYPE_USER_UNKNOWN = 19;
-
- const ENTITY_TYPE_MAIL = 'Email';
- const ENTITY_TYPE_CALENDAR = 'Calendar';
- const ENTITY_TYPE_CONTACT = 'Contacts';
- const ENTITY_TYPE_JOURNAL = 'Journal';
- const ENTITY_TYPE_TASK = 'Tasks';
- const ENTITY_TYPE_SMS = 'SMS';
- const ENTITY_TYPE_NOTE = 'Notes';
-
- const BODY_TYPE_TEXT = 1;
- const BODY_TYPE_HTML = 2;
- const BODY_TYPE_RTF = 3;
- const BODY_TYPE_MIME = 4;
-
-}
\ No newline at end of file
diff --git a/lib/Utile/Eas/EasXml.php b/lib/Utile/Eas/EasXml.php
deleted file mode 100644
index 4f3a184..0000000
--- a/lib/Utile/Eas/EasXml.php
+++ /dev/null
@@ -1,62 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-class EasXml {
-
- // Implemented tokens by MS-ASWBXML
- public const VERSION_V10 = 0x00;
- public const VERSION_V11 = 0x01;
- public const VERSION_V12 = 0x02;
- public const VERSION_V13 = 0x03;
- public const IDENTIFIER = 0x01; // Only public unknown identifier supported by MS-ASWBXML
- public const ENCODING = 0x6A; // Only UTF-8 is supported by MS-ASWBXML
- public const CODESPACE = 0x00;
- public const NODE_CONTENTS = 0x40;
- public const NODE_ATTRIBUTES = 0x80;
- public const NODE_END = 0x01;
- public const STRING_INLINE = 0x03;
- public const STRING_COMPLETION = 0x00;
- public const DATA = 0xC3;
- // Unimplemented tokens by MS-ASWBXML
- public const ENTITY = 0x02;
- public const LITERAL = 0x04;
- public const EXT_I_0 = 0x40;
- public const EXT_I_1 = 0x41;
- public const EXT_I_2 = 0x42;
- public const PI = 0x43;
- public const LITERAL_C = 0x44;
- public const EXT_T_0 = 0x80;
- public const EXT_T_1 = 0x81;
- public const EXT_T_2 = 0x82;
- public const STR_T = 0x83;
- public const LITERAL_A = 0x84;
- public const EXT_0 = 0xC0;
- public const EXT_1 = 0xc1;
- public const EXT_2 = 0xC2;
- public const LITERAL_AC = 0xC4;
-
-}
\ No newline at end of file
diff --git a/lib/Utile/Eas/EasXmlDecoder.php b/lib/Utile/Eas/EasXmlDecoder.php
deleted file mode 100644
index 21cb884..0000000
--- a/lib/Utile/Eas/EasXmlDecoder.php
+++ /dev/null
@@ -1,1097 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-use OCA\JMAPC\Utile\Eas\EasXml;
-
-class EasXmlDecoder{
-
- //https://learn.microsoft.com/en-us/previous-versions/office/developer/exchange-server-interoperability-guidance/hh361570(v=exchg.140)
-
- /**
- * TODO: Add decode to xml
- */
-
- /**
- * namespace definitions from wbxml codes
- *
- * @var array
- */
- private static $_namespaces = [
- 0x00 => 'AirSync',
- 0x01 => 'Contacts',
- 0x02 => 'Email',
- 0x04 => 'Calendar',
- 0x05 => 'Move',
- 0x06 => 'EntityEstimate',
- 0x07 => 'FolderHierarchy',
- 0x08 => 'MeetingResponse',
- 0x09 => 'Tasks',
- 0x0A => 'ResolveRecipients',
- 0x0B => 'ValidateCert',
- 0x0C => 'Contacts2',
- 0x0D => 'Ping',
- 0x0E => 'Provision',
- 0x0F => 'Search',
- 0x10 => 'Gal',
- 0x11 => 'AirSyncBase',
- 0x12 => 'Settings',
- 0x13 => 'DocumentLibrary',
- 0x14 => 'EntityOperations',
- 0x15 => 'ComposeMail',
- 0x16 => 'Email2',
- 0x17 => 'Notes',
- 0x18 => 'RightsManagement',
- 0x19 => 'Find',
- 0xFE => 'WindowsLive'
- ];
-
- /**
- * property definitions from wbxml codes
- *
- * @var array
- */
- private static $_codes = [
- // #0 AirSync
- 0x00 => [
- 0x05 => 'Sync',
- 0x06 => 'Responses',
- 0x07 => 'Add',
- 0x08 => 'Modify',
- 0x09 => 'Delete',
- 0x0A => 'Fetch',
- 0x0B => 'SyncKey',
- 0x0C => 'ClientId',
- 0x0D => 'EntityId',
- 0x0E => 'Status',
- 0x0F => 'Collection',
- 0x10 => 'Class',
- 0x12 => 'CollectionId',
- 0x13 => 'GetChanges',
- 0x14 => 'MoreAvailable',
- 0x15 => 'WindowSize',
- 0x16 => 'Commands',
- 0x17 => 'Options',
- 0x18 => 'FilterType',
- 0x19 => 'Truncation',
- 0x1B => 'Conflict',
- 0x1C => 'Collections',
- 0x1D => 'Data',
- 0x1E => 'DeletesAsMoves',
- 0x20 => 'Supported',
- 0x21 => 'SoftDelete',
- 0x22 => 'MIMESupport',
- 0x23 => 'MIMETruncation',
- 0x24 => 'Wait',
- 0x25 => 'Limit',
- 0x26 => 'Partial',
- // EAS 14.0
- 0x27 => 'ConversationMode',
- 0x28 => 'MaxEntitys',
- 0x29 => 'HeartbeatInterval',
- ],
- // #1 Contacts
- 0x01 => [
- 0x05 => 'Anniversary',
- 0x06 => 'AssistantName',
- 0x07 => 'AssistnamePhoneNumber',
- 0x08 => 'Birthday',
- 0x09 => 'Body',
- 0x0A => 'BodySize',
- 0x0B => 'BodyTruncated',
- 0x0C => 'Business2PhoneNumber',
- 0x0D => 'BusinessAddressCity',
- 0x0E => 'BusinessAddressCountry',
- 0x0F => 'BusinessAddressPostalCode',
- 0x10 => 'BusinessAddressState',
- 0x11 => 'BusinessAddressStreet',
- 0x12 => 'BusinessFaxNumber',
- 0x13 => 'BusinessPhoneNumber',
- 0x14 => 'CarPhoneNumber',
- 0x15 => 'Categories',
- 0x16 => 'Category',
- 0x17 => 'Children',
- 0x18 => 'Child',
- 0x19 => 'CompanyName',
- 0x1A => 'Department',
- 0x1B => 'Email1Address',
- 0x1C => 'Email2Address',
- 0x1D => 'Email3Address',
- 0x1E => 'FileAs',
- 0x1F => 'FirstName',
- 0x20 => 'Home2PhoneNumber',
- 0x21 => 'HomeAddressCity',
- 0x22 => 'HomeAddressCountry',
- 0x23 => 'HomeAddressPostalCode',
- 0x24 => 'HomeAddressState',
- 0x25 => 'HomeAddressStreet',
- 0x26 => 'HomeFaxNumber',
- 0x27 => 'HomePhoneNumber',
- 0x28 => 'JobTitle',
- 0x29 => 'LastName',
- 0x2A => 'MiddleName',
- 0x2B => 'MobilePhoneNumber',
- 0x2C => 'OfficeLocation',
- 0x2D => 'OtherAddressCity',
- 0x2E => 'OtherAddressCountry',
- 0x2F => 'OtherAddressPostalCode',
- 0x30 => 'OtherAddressState',
- 0x31 => 'OtherAddressStreet',
- 0x32 => 'PagerNumber',
- 0x33 => 'RadioPhoneNumber',
- 0x34 => 'Spouse',
- 0x35 => 'Suffix',
- 0x36 => 'Title',
- 0x37 => 'WebPage',
- 0x38 => 'YomiCompanyName',
- 0x39 => 'YomiFirstName',
- 0x3A => 'YomiLastName',
- 0x3B => 'Rtf', // EAS 2.5 only.
- 0x3C => 'Picture',
- // EAS 14.0
- 0x3D => 'Alias',
- 0x3E => 'WeightedRank',
- ],
- // #2 Email
- 0x02 => [
- 0x05 => 'Attachment',
- 0x06 => 'Attachments',
- 0x07 => 'AttName',
- 0x08 => 'AttSize',
- 0x09 => 'AttOid',
- 0x0A => 'AttMethod',
- 0x0B => 'AttRemoved',
- 0x0C => 'Body',
- 0x0D => 'BodySize',
- 0x0E => 'BodyTruncated',
- 0x0F => 'DateReceived',
- 0x10 => 'DisplayName',
- 0x11 => 'DisplayTo',
- 0x12 => 'Importance',
- 0x13 => 'MessageClass',
- 0x14 => 'Subject',
- 0x15 => 'Read',
- 0x16 => 'To',
- 0x17 => 'Cc',
- 0x18 => 'From',
- 0x19 => 'Reply-To',
- 0x1A => 'AllDayEvent',
- 0x1B => 'Categories', // EAS 14.0
- 0x1C => 'Category', // EAS 14.0
- 0x1D => 'DtStamp',
- 0x1E => 'EndTime',
- 0x1F => 'InstanceType',
- 0x20 => 'BusyStatus',
- 0x21 => 'Location',
- 0x22 => 'MeetingRequest',
- 0x23 => 'Organizer',
- 0x24 => 'RecurrenceId',
- 0x25 => 'Reminder',
- 0x26 => 'ResponseRequested',
- 0x27 => 'Recurrences',
- 0x28 => 'Recurrence',
- 0x29 => 'Type',
- 0x2A => 'Until',
- 0x2B => 'Occurrences',
- 0x2C => 'Interval',
- 0x2D => 'DayOfWeek',
- 0x2E => 'DayOfMonth',
- 0x2F => 'WeekOfMonth',
- 0x30 => 'MonthOfYear',
- 0x31 => 'StartTime',
- 0x32 => 'Sensitivity',
- 0x33 => 'Timezone',
- 0x34 => 'GlobalObjId',
- 0x35 => 'ThreadTopic',
- 0x36 => 'MIMEData',
- 0x37 => 'MIMETruncated',
- 0x38 => 'MIMESize',
- 0x39 => 'InternetCPID',
- // EAS 12.0
- 0x3A => 'Flag',
- 0x3B => 'FlagStatus',
- 0x3C => 'ContentClass',
- 0x3D => 'FlagType',
- 0x3E => 'CompleteTime',
- // EAS 14.0
- 0x3F => 'DisallowNewTimeProposal',
- ],
- // #3 AirNotify is deprecated
- // #4 Calendar
- 0x04 => [
- 0x05 => 'Timezone',
- 0x06 => 'AllDayEvent',
- 0x07 => 'Attendees',
- 0x08 => 'Attendee',
- 0x09 => 'Email',
- 0x0A => 'Name',
- 0x0B => 'Body', // 2.5 Only
- 0x0C => 'BodyTruncated', // 2.5 Only
- 0x0D => 'BusyStatus',
- 0x0E => 'Categories',
- 0x0F => 'Category',
- 0x10 => 'Rtf', // 2.5 ONly
- 0x11 => 'DtStamp',
- 0x12 => 'EndTime',
- 0x13 => 'Exception',
- 0x14 => 'Exceptions',
- 0x15 => 'Deleted',
- 0x16 => 'ExceptionStartTime',
- 0x17 => 'Location',
- 0x18 => 'MeetingStatus',
- 0x19 => 'OrganizerEmail',
- 0x1A => 'OrganizerName',
- 0x1B => 'Recurrence',
- 0x1C => 'Type',
- 0x1D => 'Until',
- 0x1E => 'Occurrences',
- 0x1F => 'Interval',
- 0x20 => 'DayOfWeek',
- 0x21 => 'DayOfMonth',
- 0x22 => 'WeekOfMonth',
- 0x23 => 'MonthOfYear',
- 0x24 => 'Reminder',
- 0x25 => 'Sensitivity',
- 0x26 => 'Subject',
- 0x27 => 'StartTime',
- 0x28 => 'UID',
- // EAS 12.0
- 0x29 => 'AttendeeStatus',
- 0x2A => 'AttendeeType',
- // EAS 12.1 (Apparently no longer documented).
- 0x2B => 'Attachment',
- 0x2C => 'Attachments',
- 0x2D => 'AttName',
- 0x2E => 'AttSize',
- 0x2F => 'AttOid',
- 0x30 => 'AttMethod',
- 0x31 => 'AttRemoved',
- 0x32 => 'DisplayName',
- // EAS 14
- 0x33 => 'DisallowNewTimeProposal',
- 0x34 => 'ResponseRequested',
- 0x35 => 'AppointmentReplyTime',
- 0x36 => 'ResponseType',
- 0x37 => 'CalendarType',
- 0x38 => 'IsLeapMonth',
- // EAS 14.1
- 0x39 => 'FirstDayOfWeek',
- 0x3A => 'OnlineMeetingConfLink',
- 0x3B => 'OnlineMeetingExternalLink',
- // EAS 16.0
- 0x3C => 'ClientUid',
- ],
- // #5 Move
- 0x05 => [
- 0x05 => 'Moves',
- 0x06 => 'Move',
- 0x07 => 'SrcMsgId',
- 0x08 => 'SrcFldId',
- 0x09 => 'DstFldId',
- 0x0A => 'Response',
- 0x0B => 'Status',
- 0x0C => 'DstMsgId',
- ],
- // #6 EntityEstimate
- 0x06 => [
- 0x05 => 'EntityEstimate',
- 0x06 => 'Version', // 12.1
- 0x07 => 'Collections',
- 0x08 => 'Collection',
- 0x09 => 'CollectionType', // 12.1
- 0x0A => 'CollectionId',
- 0x0B => 'DateTime', // 12.1
- 0x0C => 'Estimate',
- 0x0D => 'Response',
- 0x0E => 'Status',
- ],
- // #7 FolderHierarchy
- 0x07 => [
- 0x05 => 'Collections',
- 0x06 => 'Collection',
- 0x07 => 'Name',
- 0x08 => 'Id',
- 0x09 => 'ParentId',
- 0x0A => 'Type',
- 0x0B => 'Response',
- 0x0C => 'Status',
- 0x0D => 'ContentClass',
- 0x0E => 'Changes',
- 0x0F => 'Add',
- 0x10 => 'Remove',
- 0x11 => 'Update',
- 0x12 => 'SyncKey',
- 0x13 => 'CollectionCreate',
- 0x14 => 'CollectionDelete',
- 0x15 => 'CollectionUpdate',
- 0x16 => 'CollectionSync',
- 0x17 => 'Count',
- 0x18 => 'Version',
- ],
- // #8 MeetingResponse
- 0x08 => [
- 0x05 => 'CalendarId',
- 0x06 => 'CollectionId',
- 0x07 => 'MeetingResponse',
- 0x08 => 'RequestId',
- 0x09 => 'Request',
- 0x0A => 'Result',
- 0x0B => 'Status',
- 0x0C => 'UserResponse',
- 0x0D => 'Version',
- // EAS 14.1
- 0x0E => 'InstanceId',
- // EAS 16.0
- 0x12 => 'SendResponse',
- ],
- // #9 Tasks
- 0x09 => [
- 0x05 => 'Body',
- 0x06 => 'BodySize',
- 0x07 => 'BodyTruncated',
- 0x08 => 'Categories',
- 0x09 => 'Category',
- 0x0A => 'Complete',
- 0x0B => 'DateCompleted',
- 0x0C => 'DueDate',
- 0x0D => 'UtcDueDate',
- 0x0E => 'Importance',
- 0x0F => 'Recurrence',
- 0x10 => 'Type',
- 0x11 => 'Start',
- 0x12 => 'Until',
- 0x13 => 'Occurrences',
- 0x14 => 'Interval',
- 0x16 => 'DayOfWeek',
- 0x15 => 'DayOfMonth',
- 0x17 => 'WeekOfMonth',
- 0x18 => 'MonthOfYear',
- 0x19 => 'Regenerate',
- 0x1A => 'DeadOccur',
- 0x1B => 'ReminderSet',
- 0x1C => 'ReminderTime',
- 0x1D => 'Sensitivity',
- 0x1E => 'StartDate',
- 0x1F => 'UtcStartDate',
- 0x20 => 'Subject',
- 0x21 => 'Rtf',
- // EAS 12.0
- 0x22 => 'OrdinalDate',
- 0x23 => 'SubOrdinalDate',
- // EAS 14.0
- 0x24 => 'CalendarType',
- 0x25 => 'IsLeapMonth',
- // EAS 14.1
- 0x26 => 'FirstDayOfWeek',
- ],
- // 10 ResolveRecipients
- 0x0A => [
- 0x05 => 'ResolveRecipients',
- 0x06 => 'Response',
- 0x07 => 'Status',
- 0x08 => 'Type',
- 0x09 => 'Recipient',
- 0x0A => 'DisplayName',
- 0x0B => 'EmailAddress',
- 0x0C => 'Certificates',
- 0x0D => 'Certificate',
- 0x0E => 'MiniCertificate',
- 0x0F => 'Options',
- 0x10 => 'To',
- 0x11 => 'CertificateRetrieval',
- 0x12 => 'RecipientCount',
- 0x13 => 'MaxCertificates',
- 0x14 => 'MaxAmbiguousRecipients',
- 0x15 => 'CertificateCount',
- 0x16 => 'Availability',
- 0x17 => 'StartTime',
- 0x18 => 'EndTime',
- 0x19 => 'MergedFreeBusy',
- // 14.1
- 0x1A => 'Picture',
- 0x1B => 'MaxSize',
- 0x1C => 'Data',
- 0x1D => 'MaxPictures',
- ],
- // #11 ValidateCert
- 0x0B => [
- 0x05 => 'ValidateCert',
- 0x06 => 'Certificates',
- 0x07 => 'Certificate',
- 0x08 => 'CertificateChain',
- 0x09 => 'CheckCRL',
- 0x0A => 'Status',
- ],
- // #12 Contacts2
- 0x0C => [
- 0x05 => 'CustomerId',
- 0x06 => 'GovernmentId',
- 0x07 => 'IMAddress',
- 0x08 => 'IMAddress2',
- 0x09 => 'IMAddress3',
- 0x0A => 'ManagerName',
- 0x0B => 'CompanyMainPhone',
- 0x0C => 'AccountName',
- 0x0D => 'NickName',
- 0x0E => 'MMS',
- ],
- // #13 Ping
- 0x0D => [
- 0x05 => 'Ping',
- 0x06 => 'AutdState',
- 0x07 => 'Status',
- 0x08 => 'HeartbeatInterval',
- 0x09 => 'Collections',
- 0x0A => 'Collection',
- 0x0B => 'ServerEntryId',
- 0x0C => 'CollectionType',
- 0x0D => 'MaxCollections',
- ],
- // #14 Provision
- 0x0E => [
- 0x05 => 'Provision',
- 0x06 => 'Policies',
- 0x07 => 'Policy',
- 0x08 => 'PolicyType',
- 0x09 => 'PolicyKey',
- 0x0A => 'Data',
- 0x0B => 'Status',
- 0x0C => 'RemoteWipe',
- 0x0D => 'EASProvisionDoc',
- // EAS 12.0
- 0x0E => 'DevicePasswordEnabled',
- 0x0F => 'AlphanumericDevicePasswordRequired',
- 0x10 => 'DeviceEncryptionEnabled',
- 0x11 => 'PasswordRecoveryEnabled',
- 0x12 => 'DocumentBrowseEnabled',
- 0x13 => 'AttachmentsEnabled',
- 0x14 => 'MinDevicePasswordLength',
- 0x15 => 'MaxInactivityTimeDeviceLock',
- 0x16 => 'MaxDevicePasswordFailedAttempts',
- 0x17 => 'MaxAttachmentSize',
- 0x18 => 'AllowSimpleDevicePassword',
- 0x19 => 'DevicePasswordExpiration',
- 0x1A => 'DevicePasswordHistory',
- // EAS 12.1
- 0x1B => 'AllowStorageCard',
- 0x1C => 'AllowCamera',
- 0x1D => 'RequireDeviceEncryption',
- 0x1E => 'AllowUnsignedApplications',
- 0x1F => 'AllowUnsignedInstallationPackages',
- 0x20 => 'MinDevicePasswordComplexCharacters',
- 0x21 => 'AllowWiFi',
- 0x22 => 'AllowTextMessaging',
- 0x23 => 'AllowPOPIMAPEmail',
- 0x24 => 'AllowBluetooth',
- 0x25 => 'AllowIrDA',
- 0x26 => 'RequireManualSyncWhenRoaming',
- 0x27 => 'AllowDesktopSync',
- 0x28 => 'MaxCalendarAgeFilter',
- 0x29 => 'AllowHTMLEmail',
- 0x2A => 'MaxEmailAgeFilter',
- 0x2B => 'MaxEmailBodyTruncationSize',
- 0x2C => 'MaxHTMLBodyTruncationSize',
- 0x2D => 'RequireSignedSMIMEMessages',
- 0x2E => 'RequireEncryptedSMIMEMessages',
- 0x2F => 'RequireSignedSMIMEAlgorithm',
- 0x30 => 'RequireEncryptedSMIMEAlgorithm',
- 0x31 => 'AllowSMIMEEncryptionAlgorithmNegotiation',
- 0x32 => 'AllowSMIMESoftCerts',
- 0x33 => 'AllowBrowser',
- 0x34 => 'AllowConsumerEmail',
- 0x35 => 'AllowRemoteDesktop',
- 0x36 => 'AllowInternetSharing',
- 0x37 => 'UnapprovedInROMApplicationList',
- 0x38 => 'ApplicationName',
- 0x39 => 'ApprovedApplicationList',
- 0x3A => 'Hash',
- ],
- // #15 Search
- 0x0F => [
- 0x05 => 'Search',
- 0x07 => 'Store',
- 0x08 => 'Name',
- 0x09 => 'Query',
- 0x0A => 'Options',
- 0x0B => 'Range',
- 0x0C => 'Status',
- 0x0D => 'Response',
- 0x0E => 'Result',
- 0x0F => 'Properties',
- 0x10 => 'Total',
- 0x11 => 'EqualTo',
- 0x12 => 'Value',
- 0x13 => 'And',
- 0x14 => 'Or',
- 0x15 => 'FreeText',
- 0x17 => 'DeepTraversal',
- 0x18 => 'LongId',
- 0x19 => 'RebuildResults',
- 0x1A => 'LessThan',
- 0x1B => 'GreaterThan',
- 0x1C => 'Schema',
- 0x1D => 'Supported',
- // EAS 12.1
- 0x1E => 'UserName',
- 0x1F => 'Password',
- 0x20 => 'ConversationId',
- // EAS 14.1
- 0x21 => 'Picture',
- 0x22 => 'MaxSize',
- 0x23 => 'MaxPictures',
- ],
- // #16 GAL (Global Address List)
- 0x10 => [
- 0x05 => 'DisplayName',
- 0x06 => 'Phone',
- 0x07 => 'Office',
- 0x08 => 'Title',
- 0x09 => 'Company',
- 0x0A => 'Alias',
- 0x0B => 'FirstName',
- 0x0C => 'LastName',
- 0x0D => 'HomePhone',
- 0x0E => 'MobilePhone',
- 0x0F => 'EmailAddress',
- // 14.1
- 0x10 => 'Picture',
- 0x11 => 'Status',
- 0x12 => 'Data',
- ],
- // #17 AirSyncBase (12.0)
- 0x11 => [
- 0x05 => 'BodyPreference',
- 0x06 => 'Type',
- 0x07 => 'TruncationSize',
- 0x08 => 'AllOrNone',
- 0x0A => 'Body',
- 0x0B => 'Data',
- 0x0C => 'EstimatedDataSize',
- 0x0D => 'Truncated',
- 0x0E => 'Attachments',
- 0x0F => 'Attachment',
- 0x10 => 'DisplayName',
- 0x11 => 'FileReference',
- 0x12 => 'Method',
- 0x13 => 'ContentId',
- 0x14 => 'ContentLocation',
- 0x15 => 'IsInline',
- 0x16 => 'NativeBodyType',
- 0x17 => 'ContentType',
- // EAS 14.0
- 0x18 => 'Preview',
- // EAS 14.1
- 0x19 => 'BodyPartPreference',
- 0x1A => 'BodyPart',
- 0x1B => 'Status',
- // EAS 16.0
- 0x1C => 'Add',
- 0x1D => 'Delete',
- 0x1E => 'ClientId',
- 0x1F => 'Content',
- 0x20 => 'Location',
- 0x21 => 'Annontation',
- 0x22 => 'Street',
- 0x23 => 'City',
- 0x24 => 'State',
- 0x25 => 'Country',
- 0x26 => 'PostalCode',
- 0x27 => 'Latitude',
- 0x28 => 'Longitude',
- 0x29 => 'Accuracy',
- 0x2A => 'Altitude',
- 0x2B => 'AltitudeAccuracy',
- 0x2C => 'LocationUri',
- 0x2D => 'InstanceId',
- ],
- // #18 Settings
- 0x12 => [
- 0x05 => 'Settings',
- 0x06 => 'Status',
- 0x07 => 'Get',
- 0x08 => 'Set',
- 0x09 => 'Oof',
- 0x0A => 'OofState',
- 0x0B => 'StartTime',
- 0x0C => 'EndTime',
- 0x0D => 'OofMessage',
- 0x0E => 'AppliesToInternal',
- 0x0F => 'AppliesToExternalKnown',
- 0x10 => 'AppliesToExternalUnknown',
- 0x11 => 'Enabled',
- 0x12 => 'ReplyMessage',
- 0x13 => 'BodyType',
- 0x14 => 'DevicePassword',
- 0x15 => 'Password',
- 0x16 => 'Device',
- 0x17 => 'Model',
- 0x18 => 'IMEI',
- 0x19 => 'FriendlyName',
- 0x1A => 'OS',
- 0x1B => 'OSLanguage',
- 0x1C => 'PhoneNumber',
- 0x1D => 'User',
- 0x1E => 'EmailAddresses',
- 0x1F => 'SmtpAddress',
- // EAS 12.1
- 0x20 => 'UserAgent',
- // EAS 14.0
- 0x21 => 'EnableOutboundSMS',
- 0x22 => 'MobileOperator',
- // EAS 14.1
- 0x23 => 'PrimarySmtpAddress',
- 0x24 => 'Accounts',
- 0x25 => 'Account',
- 0x26 => 'AccountId',
- 0x27 => 'AccountName',
- 0x28 => 'UserDisplayName',
- 0x29 => 'SendDisabled',
- 0x2B => 'RightsManagementInformation',
- ],
- // #19 DocumentLibrary
- 0x13 => [
- 0x05 => 'LinkId',
- 0x06 => 'DisplayName',
- 0x07 => 'IsCollection',
- 0x08 => 'CreationDate',
- 0x09 => 'LastModifiedDate',
- 0x0A => 'IsHidden',
- 0x0B => 'ContentLength',
- 0x0C => 'ContentType'
- ],
- // #20 EntityOperations
- 0x14 => [
- 0x05 => 'EntityOperations',
- 0x06 => 'Fetch',
- 0x07 => 'Store',
- 0x08 => 'Options',
- 0x09 => 'Range',
- 0x0A => 'Total',
- 0x0B => 'Properties',
- 0x0C => 'Data',
- 0x0D => 'Status',
- 0x0E => 'Response',
- 0x0F => 'Version',
- 0x10 => 'Schema',
- 0x11 => 'Part',
- 0x12 => 'EmptyCollectionContent',
- 0x13 => 'DeleteSubCollections',
- // EAS 12.1
- 0x14 => 'UserName',
- 0x15 => 'Password',
- // EAS 14.0
- 0x16 => 'Move',
- 0x17 => 'DstFldId',
- 0x18 => 'ConversationId',
- 0x19 => 'MoveAlways',
- ],
- // #21 ComposeMail (14.0)
- 0x15 => [
- 0x05 => 'SendMail',
- 0x06 => 'SmartForward',
- 0x07 => 'SmartReply',
- 0x08 => 'SaveInSentEntitys',
- 0x09 => 'ReplaceMime',
- 0x0A => 'Type',
- 0x0B => 'Source',
- 0x0C => 'CollectionId',
- 0x0D => 'EntityId',
- 0x0E => 'LongId',
- 0x0F => 'InstanceId',
- 0x10 => 'MIME',
- 0x11 => 'ClientId',
- 0x12 => 'Status',
- // 14.1
- 0x13 => 'AccountId',
- // EAS 16.0
- 0x15 => 'Forwardees',
- 0x16 => 'Forwardee',
- 0x17 => 'ForwardeeName',
- 0x18 => 'ForwardeeEmail'
- ],
- // #22 Email2 (14.0)
- 0x16 => [
- 0x05 => 'UmCallerId',
- 0x06 => 'UmUserNotes',
- 0x07 => 'UmAttDuration',
- 0x08 => 'UmAttOrder',
- 0x09 => 'ConversationId',
- 0x0A => 'ConversationIndex',
- 0x0B => 'LastVerbExecuted',
- 0x0C => 'LastVerbExecutionTime',
- 0x0D => 'ReceivedAsBcc',
- 0x0E => 'Sender',
- 0x0F => 'CalendarType',
- 0x10 => 'IsLeapMonth',
- // 14.1
- 0x11 => 'AccountId',
- 0x12 => 'FirstDayOfWeek',
- 0x13 => 'MeetingMessageType',
- // EAS 16.0
- 0x15 => 'IsDraft',
- 0x16 => 'Bcc',
- 0x17 => 'Send'
- ],
- // #23 Notes (14.0)
- 0x17 => [
- 0x05 => 'Subject',
- 0x06 => 'MessageClass',
- 0x07 => 'LastModifiedDate',
- 0x08 => 'Categories',
- 0x09 => 'Category',
- ],
- // #24 RightsManagement (14.1)
- 0x18 => [
- 0x05 => 'RightsManagementSupport',
- 0x06 => 'RightsManagementTemplates',
- 0x07 => 'RightsManagementTemplate',
- 0x08 => 'RightsManagementLicense',
- 0x09 => 'EditAllowed',
- 0x0A => 'ReplyAllowed',
- 0x0B => 'ReplyAllAllowed',
- 0x0C => 'ForwardAllowed',
- 0x0D => 'ModifyRecipientsAllowed',
- 0x0E => 'ExtractAllowed',
- 0x0F => 'PrintAllowed',
- 0x10 => 'ExportAllowed',
- 0x11 => 'ProgrammaticAccessAllowed',
- 0x12 => 'Owner',
- 0x13 => 'ContentExpiryDate',
- 0x14 => 'TemplateID',
- 0x15 => 'TemplateName',
- 0x16 => 'TemplateDescription',
- 0x17 => 'ContentOwner',
- 0x18 => 'RemoveRightsManagementDistribution'
- ],
- // #25 Find
- 0x19 => [
- 0x05 => 'Find',
- 0x06 => 'SearchId',
- 0x07 => 'Search',
- 0x08 => 'Criterion',
- 0x09 => 'Query',
- 0x0A => 'Status',
- 0x0B => 'FreeText',
- 0x0C => 'Options',
- 0x0D => 'Range',
- 0x0E => 'DeepTraversal',
- 0x11 => 'Response',
- 0x12 => 'Result',
- 0x13 => 'Properties',
- 0x14 => 'Preview',
- 0x15 => 'HasAttachments'
- ],
- // #254 Windows Live
- 0xFE => [
- 0x05 => 'Annotations',
- 0x06 => 'Annotation',
- 0x07 => 'Name',
- 0x08 => 'Value'
- ]
- ];
-
- /**
- * WBXMLDecoder constructor.
- */
- public function __construct() {
-
- }
-
- /**
- * convert string data to object
- *
- * @param $input
- *
- * @throws Throwable
- */
- public function stringToObject($data): object{
-
- // construct stream object
- $stream = fopen('php://temp', 'rw');
- try {
- // write data to stream
- fwrite($stream, $data);
- // rewind stream to start
- rewind($stream);
- // process data
- return $this->streamToObject($stream);
- // close stream
- fclose($stream);
- } catch (\Throwable $e) {
- // close stream
- fclose($stream);
- // throw error
- throw $e;
- }
-
- }
-
- /**
- * convert stream data to object
- *
- * @param $stream data stream
- *
- * @throws Exception
- */
- public function streamToObject($stream): object{
-
- // construct base object
- $o = new \stdClass();
- // version
- $version = $this->_readByte($stream);
- // evaluate, version
- if($version !== EasXml::VERSION_V10 && $version !== EasXml::VERSION_V11 && $version !== EasXml::VERSION_V12 && $version !== EasXml::VERSION_V13){
- throw new \UnexpectedValueException("WBXML version 0x$version not supported");
- }
- // idenitifier
- $identifier = $this->_readMBUInt($stream);
- // evaluate, public identifier
- if ($identifier != EasXml::IDENTIFIER) {
- throw new \UnexpectedValueException("WBXML public idenitifier 0x$identifier not supported");
- }
- // encoding
- $encoding = $this->_readMBUInt($stream);
- // evaluate, character encoding
- if ($encoding != EasXml::ENCODING) {
- throw new \UnexpectedValueException("WBXML character encoding 0x$encoding not supported");
- }
- // evaluate, strings table size
- if ($this->_readMBUInt($stream) > 0) {
- throw new \UnexpectedValueException("WBXML strings tables not supported");
- }
-
- // construct message property
- $o = $this->_readBodyToObject($stream, 0);
-
- return $o;
-
- }
-
- /**
- * read body from stream and convert to object
- *
- * @return string The single byte.
- */
- protected function _readBodyToObject($stream, $page): mixed {
- // construct object place holder
- $node = new EasObject(self::$_namespaces[$page]);
-
- while(!feof($stream)) {
-
- $byte = $this->_readByte($stream);
-
- switch($byte) {
- case EasXml::CODESPACE:
- $page = $this->_readByte($stream);
- if ($page < 0 || $page > 25)
- {
- throw new \UnexpectedValueException("Unknown code page ID 0x$page encountered in WBXML.");
- }
- break;
- case EasXml::NODE_END:
- $token = 'END';
- break 2;
- case EasXml::STRING_INLINE:
- $node = $this->_readString($stream);
- $type = 'S';
- break;
- case EasXml::DATA:
- $node = $this->_readData($stream);
- $type = 'O';
- break;
- // According to MS-ASWBXML, these features are not used
- case EasXml::ENTITY:
- case EasXml::EXT_0:
- case EasXml::EXT_1:
- case EasXml::EXT_2:
- case EasXml::EXT_I_0:
- case EasXml::EXT_I_1:
- case EasXml::EXT_I_2:
- case EasXml::EXT_T_0:
- case EasXml::EXT_T_1:
- case EasXml::EXT_T_2:
- case EasXml::LITERAL:
- case EasXml::LITERAL_A:
- case EasXml::LITERAL_AC:
- case EasXml::LITERAL_C:
- case EasXml::PI:
- case EasXml::STR_T:
- throw new \UnexpectedValueException("Unknown global token 0x$byte.");
- // If it's not a global token, it should be a tag
- default:
- $hasAttributes = false;
- $hasContents = false;
-
- $hasAttributes = ($byte & EasXml::NODE_ATTRIBUTES) > 0;
- $hasContents = ($byte & EasXml::NODE_CONTENTS) > 0;
-
- $code = ($byte & 0x3F);
-
- // evalute, if token has attributes
- if ($hasAttributes) {
- throw new \UnexpectedValueException("Token 0x$code has attributes.");
- }
-
- // evaluate, if namespace is valid
- if (isset(self::$_namespaces[$page])) {
- $namespace = self::$_namespaces[$page];
- }
- else {
- throw new \UnexpectedValueException("Namespace 0x$page is not valid.");
- }
- // evaluate, if token is valid
- if (isset(self::$_codes[$page][$code])) {
- $token = self::$_codes[$page][$code];
- }
- else {
- $token = "UNKNOWN_TAG_$token";
- }
- //$node->setNamespace($namespace);
-
- if ($hasContents) {
- // read next object
- $o = $this->_readBodyToObject($stream, $page);
- // evaluate if object or property already exisits and is not an array
- if (isset($node->{$token}) && !is_array($node->{$token})) {
- // convert tag object or property to array
- $node->{$token} = [clone $node->{$token}];
- }
- elseif (!isset($node->{$token})) {
- // construct object or property place holder from tag
- $node->{$token} = null;
- }
-
- if (is_array($node->{$token})) {
- // add object as property
- if ($o instanceof EasObject) {
- $node->{$token}[] = $o;
- } else {
- $node->{$token}[] = new EasProperty($namespace, $o);
- }
- } else {
- // add object as property
- if ($o instanceof EasObject) {
- $node->{$token} = $o;
- } else {
- $node->{$token} = new EasProperty($namespace, $o);
- }
- }
- }
- break;
- }
- }
-
- return $node;
-
- }
-
- /**
- * read a single byte from the stream.
- *
- * @return string The single byte.
- */
- protected function _readByte($stream): mixed {
- $byte = fread($stream,1);
- if (strlen($byte) > 0) {
- return ord($byte);
- } else {
- return null;
- }
- }
-
- /**
- * read a MBU integer from the stream
- *
- * @return integer
- */
- protected function _readMBUInt($stream): mixed {
- $uint = 0;
- while (1) {
- $byte = $this->_readByte($stream);
- $uint |= $byte & 0x7f;
- if ($byte & 0x80) {
- $uint = $uint << 7;
- } else {
- break;
- }
- }
- return $uint;
- }
-
- /**
- * read a null terminated string from the stream
- *
- * @return string The string
- */
- protected function _readString($stream): ?string {
- $contents = '';
- while(1) {
- $in = $this->_readByte($stream);
- if ($in == 0) {
- break;
- } else {
- $contents .= chr($in);
- }
- }
- return $contents;
- }
-
- /**
- * read an opaque value from the stream
- *
- * @return string A string of bytes representing the opaque value.
- */
- protected function _readData($stream): ?string {
- // See http://php.net/fread for why we can't simply use a single fread()
- // here. Bottom line, for buffered network streams it is possible
- // that fread will only return a portion of the stream if chunk
- // is smaller then $size, so we use a loop to reach $size.
-
- // read string size
- $size = $this->_readMBUInt($stream);
- $contents = '';
- while (1) {
- $length = (($size - strlen($contents)) > 8192) ? 8192 : ($size - strlen($contents));
- if ($length > 0) {
- $chunk = fread($stream, $length);
- // evaluate if read failed or stream ended
- if ($chunk === false || feof($stream)) {
- throw new \Exception(sprintf(
- 'Stream unavailable while trying to read %d bytes from stream. Aborting after %d bytes read.',
- $size,
- strlen($contents)));
- } else {
- $contents .= $chunk;
- }
- }
- if (strlen($contents) >= $size) {
- break;
- }
- }
- return $contents;
- }
-
-}
\ No newline at end of file
diff --git a/lib/Utile/Eas/EasXmlEncoder.php b/lib/Utile/Eas/EasXmlEncoder.php
deleted file mode 100644
index 494ffc5..0000000
--- a/lib/Utile/Eas/EasXmlEncoder.php
+++ /dev/null
@@ -1,1053 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile\Eas;
-
-use OCA\JMAPC\Utile\Eas\EasXml;
-
-class EasXmlEncoder{
-
- //https://learn.microsoft.com/en-us/previous-versions/office/developer/exchange-server-interoperability-guidance/hh361570(v=exchg.140)
-
- /**
- * TODO: Add encode from xml
- */
-
- /**
- * namespace definitions to wbxml codes
- *
- * @var array
- */
- private static $_namespaces = [
- 'AirSync' => 0x00,
- 'Contacts' => 0x01,
- 'Email' => 0x02,
- 'Calendar' => 0x04,
- 'Move' => 0x05,
- 'EntityEstimate' => 0x06,
- 'CollectionHierarchy' => 0x07,
- 'MeetingResponse' => 0x08,
- 'Tasks' => 0x09,
- 'ResolveRecipients' => 0x0A,
- 'ValidateCert' => 0x0B,
- 'Contacts2' => 0x0C,
- 'Ping' => 0x0D,
- 'Provision' => 0x0E,
- 'Search' => 0x0F,
- 'Gal' => 0x10,
- 'AirSyncBase' => 0x11,
- 'Settings' => 0x12,
- 'DocumentLibrary' => 0x13,
- 'EntityOperations' => 0x14,
- 'ComposeMail' => 0x15,
- 'Email2' => 0x16,
- 'Notes' => 0x17,
- 'RightsManagement' => 0x18,
- 'Find' => 0x19,
- 'WindowsLive' => 0xFE
- ];
-
- /**
- * property definitions to wbxml codes
- *
- * @var array
- */
- public static $_codes = [
- // #0 AirSync
- 0x00 => [
- 'Sync' => 0x05,
- 'Responses' => 0x06,
- 'Add' => 0x07,
- 'Modify' => 0x08,
- 'Delete' => 0x09,
- 'Fetch' => 0x0A,
- 'SyncKey' => 0x0B,
- 'ClientId' => 0x0C,
- 'EntityId' => 0x0D,
- 'Status' => 0x0E,
- 'Collection' => 0x0F,
- 'Class' => 0x10,
- 'CollectionId' => 0x12,
- 'GetChanges' => 0x13,
- 'MoreAvailable' => 0x14,
- 'WindowSize' => 0x15,
- 'Commands' => 0x16,
- 'Options' => 0x17,
- 'FilterType' => 0x18,
- 'Truncation' => 0x19,
- 'Conflict' => 0x1B,
- 'Collections' => 0x1C,
- 'Data' => 0x1D,
- 'DeletesAsMoves' => 0x1E,
- 'Supported' => 0x20,
- 'SoftDelete' => 0x21,
- 'MIMESupport' => 0x22,
- 'MIMETruncation' => 0x23,
- 'Wait' => 0x24,
- 'Limit' => 0x25,
- 'Partial' => 0x26,
- // EAS 14.0
- 'ConversationMode' => 0x27,
- 'MaxEntitys' => 0x28,
- 'HeartbeatInterval' => 0x29,
- ],
- // #1 Contacts
- 0x01 => [
- 'Anniversary' => 0x05,
- 'AssistantName' => 0x06,
- 'AssistnamePhoneNumber' => 0x07,
- 'Birthday' => 0x08,
- 'Body' => 0x09,
- 'BodySize' => 0x0A,
- 'BodyTruncated' => 0x0B,
- 'Business2PhoneNumber' => 0x0C,
- 'BusinessAddressCity' => 0x0D,
- 'BusinessAddressCountry' => 0x0E,
- 'BusinessAddressPostalCode' => 0x0F,
- 'BusinessAddressState' => 0x10,
- 'BusinessAddressStreet' => 0x11,
- 'BusinessFaxNumber' => 0x12,
- 'BusinessPhoneNumber' => 0x13,
- 'CarPhoneNumber' => 0x14,
- 'Categories' => 0x15,
- 'Category' => 0x16,
- 'Children' => 0x17,
- 'Child' => 0x18,
- 'CompanyName' => 0x19,
- 'Department' => 0x1A,
- 'Email1Address' => 0x1B,
- 'Email2Address' => 0x1C,
- 'Email3Address' => 0x1D,
- 'FileAs' => 0x1E,
- 'FirstName' => 0x1F,
- 'Home2PhoneNumber' => 0x20,
- 'HomeAddressCity' => 0x21,
- 'HomeAddressCountry' => 0x22,
- 'HomeAddressPostalCode' => 0x23,
- 'HomeAddressState' => 0x24,
- 'HomeAddressStreet' => 0x25,
- 'HomeFaxNumber' => 0x26,
- 'HomePhoneNumber' => 0x27,
- 'JobTitle' => 0x28,
- 'LastName' => 0x29,
- 'MiddleName' => 0x2A,
- 'MobilePhoneNumber' => 0x2B,
- 'OfficeLocation' => 0x2C,
- 'OtherAddressCity' => 0x2D,
- 'OtherAddressCountry' => 0x2E,
- 'OtherAddressPostalCode' => 0x2F,
- 'OtherAddressState' => 0x30,
- 'OtherAddressStreet' => 0x31,
- 'PagerNumber' => 0x32,
- 'RadioPhoneNumber' => 0x33,
- 'Spouse' => 0x34,
- 'Suffix' => 0x35,
- 'Title' => 0x36,
- 'WebPage' => 0x37,
- 'YomiCompanyName' => 0x38,
- 'YomiFirstName' => 0x39,
- 'YomiLastName' => 0x3A,
- 'Rtf' => 0x3B, // EAS 2.5 only.
- 'Picture' => 0x3C,
- // EAS 14.0
- 'Alias' => 0x3D,
- 'WeightedRank' => 0x3E
- ],
- // #2 Email
- 0x02 => [
- 'Attachment' => 0x05,
- 'Attachments' => 0x06,
- 'AttName' => 0x07,
- 'AttSize' => 0x08,
- 'AttOid' => 0x09,
- 'AttMethod' => 0x0A,
- 'AttRemoved' => 0x0B,
- 'Body' => 0x0C,
- 'BodySize' => 0x0D,
- 'BodyTruncated' => 0x0E,
- 'DateReceived' => 0x0F,
- 'DisplayName' => 0x10,
- 'DisplayTo' => 0x11,
- 'Importance' => 0x12,
- 'MessageClass' => 0x13,
- 'Subject' => 0x14,
- 'Read' => 0x15,
- 'To' => 0x16,
- 'Cc' => 0x17,
- 'From' => 0x18,
- 'Reply-To' => 0x19,
- 'AllDayEvent' => 0x1A,
- 'Categories' => 0x1B, // EAS 14.0
- 'Category' => 0x1C, // EAS 14.0
- 'DtStamp' => 0x1D,
- 'EndTime' => 0x1E,
- 'InstanceType' => 0x1F,
- 'BusyStatus' => 0x20,
- 'Location' => 0x21,
- 'MeetingRequest' => 0x22,
- 'Organizer' => 0x23,
- 'RecurrenceId' => 0x24,
- 'Reminder' => 0x25,
- 'ResponseRequested' => 0x26,
- 'Recurrences' => 0x27,
- 'Recurrence' => 0x28,
- 'Type' => 0x29,
- 'Until' => 0x2A,
- 'Occurrences' => 0x2B,
- 'Interval' => 0x2C,
- 'DayOfWeek' => 0x2D,
- 'DayOfMonth' => 0x2E,
- 'WeekOfMonth' => 0x2F,
- 'MonthOfYear' => 0x30,
- 'StartTime' => 0x31,
- 'Sensitivity' => 0x32,
- 'Timezone' => 0x33,
- 'GlobalObjId' => 0x34,
- 'ThreadTopic' => 0x35,
- 'MIMEData' => 0x36,
- 'MIMETruncated' => 0x37,
- 'MIMESize' => 0x38,
- 'InternetCPID' => 0x39,
- // EAS 12.0
- 'Flag' => 0x3A,
- 'FlagStatus' => 0x3B,
- 'ContentClass' => 0x3C,
- 'FlagType' => 0x3D,
- 'CompleteTime' => 0x3E,
- // EAS 14.0
- 'DisallowNewTimeProposal' => 0xF
- ],
- // #3 AirNotify is deprecated
- // #4 Calendar
- 0x04 => [
- 'Timezone' => 0x05,
- 'AllDayEvent' => 0x06,
- 'Attendees' => 0x07,
- 'Attendee' => 0x08,
- 'Email' => 0x09,
- 'Name' => 0x0A,
- 'Body' => 0x0B, // 2.5 Only
- 'BodyTruncated' => 0x0C, // 2.5 Only
- 'BusyStatus' => 0x0D,
- 'Categories' => 0x0E,
- 'Category' => 0x0F,
- 'Rtf' => 0x10, // 2.5 ONly
- 'DtStamp' => 0x11,
- 'EndTime' => 0x12,
- 'Exception' => 0x13,
- 'Exceptions' => 0x14,
- 'Deleted' => 0x15,
- 'ExceptionStartTime' => 0x16,
- 'Location' => 0x17,
- 'MeetingStatus' => 0x18,
- 'OrganizerEmail' => 0x19,
- 'OrganizerName' => 0x1A,
- 'Recurrence' => 0x1B,
- 'Type' => 0x1C,
- 'Until' => 0x1D,
- 'Occurrences' => 0x1E,
- 'Interval' => 0x1F,
- 'DayOfWeek' => 0x20,
- 'DayOfMonth' => 0x21,
- 'WeekOfMonth' => 0x22,
- 'MonthOfYear' => 0x23,
- 'Reminder' => 0x24,
- 'Sensitivity' => 0x25,
- 'Subject' => 0x26,
- 'StartTime' => 0x27,
- 'UID' => 0x28,
- // EAS 12.0
- 'AttendeeStatus' => 0x29,
- 'AttendeeType' => 0x2A,
- // EAS 12.1 (Apparently no longer documented).
- 'Attachment' => 0x2B,
- 'Attachments' => 0x2C,
- 'AttName' => 0x2D,
- 'AttSize' => 0x2E,
- 'AttOid' => 0x2F,
- 'AttMethod' => 0x30,
- 'AttRemoved' => 0x31,
- 'DisplayName' => 0x32,
- // EAS 14
- 'DisallowNewTimeProposal' => 0x33,
- 'ResponseRequested' => 0x34,
- 'AppointmentReplyTime' => 0x35,
- 'ResponseType' => 0x36,
- 'CalendarType' => 0x37,
- 'IsLeapMonth' => 0x38,
- // EAS 14.1
- 'FirstDayOfWeek' => 0x39,
- 'OnlineMeetingConfLink' => 0x3A,
- 'OnlineMeetingExternalLink' => 0x3B,
- // EAS 16.0
- 'ClientUid' => 0x3C
- ],
- // #5 Move
- 0x05 => [
- 'Moves' => 0x05,
- 'Move' => 0x06,
- 'SrcMsgId' => 0x07,
- 'SrcFldId' => 0x08,
- 'DstFldId' => 0x09,
- 'Response' => 0x0A,
- 'Status' => 0x0B,
- 'DstMsgId' => 0x0C,
- ],
- // #6 EntityEstimate
- 0x06 => [
- 'EntityEstimate' => 0x05,
- 'Version' => 0x06, // 12.1
- 'Collections' => 0x07,
- 'Collection' => 0x08,
- 'CollectionClass' => 0x09, // 12.1
- 'CollectionId' => 0x0A,
- 'DateTime' => 0x0B, // 12.1
- 'Estimate' => 0x0C,
- 'Response' => 0x0D,
- 'Status' => 0x0E,
- ],
- // #7 CollectionHierarchy
- 0x07 => [
- 'Collections' => 0x05,
- 'Collection' => 0x06,
- 'Name' => 0x07,
- 'Id' => 0x08,
- 'ParentId' => 0x09,
- 'Type' => 0x0A,
- 'Response' => 0x0B,
- 'Status' => 0x0C,
- 'ContentClass' => 0x0D,
- 'Changes' => 0x0E,
- 'Add' => 0x0F,
- 'Remove' => 0x10,
- 'Update' => 0x11,
- 'SyncKey' => 0x12,
- 'CollectionCreate' => 0x13,
- 'CollectionDelete' => 0x14,
- 'CollectionUpdate' => 0x15,
- 'CollectionSync' => 0x16,
- 'Count' => 0x17,
- 'Version' => 0x18
- ],
- // #8 MeetingResponse
- 0x08 => [
- 'CalendarId' => 0x05,
- 'CollectionId' => 0x06,
- 'MeetingResponse' => 0x07,
- 'RequestId' => 0x08,
- 'Request' => 0x09,
- 'Result' => 0x0A,
- 'Status' => 0x0B,
- 'UserResponse' => 0x0C,
- 'Version' => 0x0D,
- 'InstanceId' => 0x0E, //EAS 14.1
- 'ProposedStartTime' => 0x10, // EAS 16.1
- 'ProposedEndTime' => 0x11, // EAS 16.1
- 'SendResponse' => 0x12, // EAS 16.0
- ],
- // #9 Tasks
- 0x09 => [
- 'Body' => 0x05,
- 'BodySize' => 0x06,
- 'BodyTruncated' => 0x07,
- 'Categories' => 0x08,
- 'Category' => 0x09,
- 'Complete' => 0x0A,
- 'DateCompleted' => 0x0B,
- 'DueDate' => 0x0C,
- 'UtcDueDate' => 0x0D,
- 'Importance' => 0x0E,
- 'Recurrence' => 0x0F,
- 'Type' => 0x10,
- 'Start' => 0x11,
- 'Until' => 0x12,
- 'Occurrences' => 0x13,
- 'Interval' => 0x14,
- 'DayOfMonth' => 0x15,
- 'DayOfWeek' => 0x16,
- 'WeekOfMonth' => 0x17,
- 'MonthOfYear' => 0x18,
- 'Regenerate' => 0x19,
- 'DeadOccur' => 0x1A,
- 'ReminderSet' => 0x1B,
- 'ReminderTime' => 0x1C,
- 'Sensitivity' => 0x1D,
- 'StartDate' => 0x1E,
- 'UtcStartDate' => 0x1F,
- 'Subject' => 0x20,
- 'Rtf' => 0x21,
- 'OrdinalDate' => 0x22, // EAS 12.0
- 'SubOrdinalDate' => 0x23, // EAS 12.0
- 'CalendarType' => 0x24, // EAS 14.0
- 'IsLeapMonth' => 0x25, // EAS 14.0
- 'FirstDayOfWeek' => 0x26 // EAS 14.1
- ],
- // 10 ResolveRecipients
- 0x0A => [
- 'ResolveRecipients' => 0x05,
- 'Response' => 0x06,
- 'Status' => 0x07,
- 'Type' => 0x08,
- 'Recipient' => 0x09,
- 'DisplayName' => 0x0A,
- 'EmailAddress' => 0x0B,
- 'Certificates' => 0x0C,
- 'Certificate' => 0x0D,
- 'MiniCertificate' => 0x0E,
- 'Options' => 0x0F,
- 'To' => 0x10,
- 'CertificateRetrieval' => 0x11,
- 'RecipientCount' => 0x12,
- 'MaxCertificates' => 0x13,
- 'MaxAmbiguousRecipients' => 0x14,
- 'CertificateCount' => 0x15,
- 'Availability' => 0x16,
- 'StartTime' => 0x17,
- 'EndTime' => 0x18,
- 'MergedFreeBusy' => 0x19,
- // 14.1
- 'Picture' => 0x1A,
- 'MaxSize' => 0x1B,
- 'Data' => 0x1C,
- 'MaxPictures' => 0x1D
- ],
- // #11 ValidateCert
- 0x0B => [
- 'ValidateCert' => 0x05,
- 'Certificates' => 0x06,
- 'Certificate' => 0x07,
- 'CertificateChain' => 0x08,
- 'CheckCRL' => 0x09,
- 'Status' => 0x0A,
- ],
- // #12 Contacts2
- 0x0C => [
- 'CustomerId' => 0x05,
- 'GovernmentId' => 0x06,
- 'IMAddress' => 0x07,
- 'IMAddress2' => 0x08,
- 'IMAddress3' => 0x09,
- 'ManagerName' => 0x0A,
- 'CompanyMainPhone' => 0x0B,
- 'AccountName' => 0x0C,
- 'NickName' => 0x0D,
- 'MMS' => 0x0E,
- ],
- // #13 Ping
- 0x0D => [
- 'Ping' => 0x05,
- 'AutdState' => 0x06,
- 'Status' => 0x07,
- 'HeartbeatInterval' => 0x08,
- 'Collections' => 0x09,
- 'Collection' => 0x0A,
- 'EntityId' => 0x0B,
- 'CollectionType' => 0x0C,
- 'MaxCollections' => 0x0D,
- ],
- // #14 Provision
- 0x0E => [
- 'Provision' => 0x05,
- 'Policies' => 0x06,
- 'Policy' => 0x07,
- 'PolicyType' => 0x08,
- 'PolicyKey' => 0x09,
- 'Data' => 0x0A,
- 'Status' => 0x0B,
- 'RemoteWipe' => 0x0C,
- 'EASProvisionDoc' => 0x0D,
- // EAS 12.0
- 'DevicePasswordEnabled' => 0x0E,
- 'AlphanumericDevicePasswordRequired' => 0x0F,
- 'DeviceEncryptionEnabled' => 0x10,
- 'PasswordRecoveryEnabled' => 0x11,
- 'DocumentBrowseEnabled' => 0x12,
- 'AttachmentsEnabled' => 0x13,
- 'MinDevicePasswordLength' => 0x14,
- 'MaxInactivityTimeDeviceLock' => 0x15,
- 'MaxDevicePasswordFailedAttempts' => 0x16,
- 'MaxAttachmentSize' => 0x17,
- 'AllowSimpleDevicePassword' => 0x18,
- 'DevicePasswordExpiration' => 0x19,
- 'DevicePasswordHistory' => 0x1A,
- // EAS 12.1
- 'AllowStorageCard' => 0x1B,
- 'AllowCamera' => 0x1C,
- 'RequireDeviceEncryption' => 0x1D,
- 'AllowUnsignedApplications' => 0x1E,
- 'AllowUnsignedInstallationPackages' => 0x1F,
- 'MinDevicePasswordComplexCharacters' => 0x20,
- 'AllowWiFi' => 0x21,
- 'AllowTextMessaging' => 0x22,
- 'AllowPOPIMAPEmail' => 0x23,
- 'AllowBluetooth' => 0x24,
- 'AllowIrDA' => 0x25,
- 'RequireManualSyncWhenRoaming' => 0x26,
- 'AllowDesktopSync' => 0x27,
- 'MaxCalendarAgeFilter' => 0x28,
- 'AllowHTMLEmail' => 0x29,
- 'MaxEmailAgeFilter' => 0x2A,
- 'MaxEmailBodyTruncationSize' => 0x2B,
- 'MaxHTMLBodyTruncationSize' => 0x2C,
- 'RequireSignedSMIMEMessages' => 0x2D,
- 'RequireEncryptedSMIMEMessages' => 0x2E,
- 'RequireSignedSMIMEAlgorithm' => 0x2F,
- 'RequireEncryptedSMIMEAlgorithm' => 0x30,
- 'AllowSMIMEEncryptionAlgorithmNegotiation' => 0x31,
- 'AllowSMIMESoftCerts' => 0x32,
- 'AllowBrowser' => 0x33,
- 'AllowConsumerEmail' => 0x34,
- 'AllowRemoteDesktop' => 0x35,
- 'AllowInternetSharing' => 0x36,
- 'UnapprovedInROMApplicationList' => 0x37,
- 'ApplicationName' => 0x38,
- 'ApprovedApplicationList' => 0x39,
- 'Hash' => 0x3A,
- ],
- // #15 Search
- 0x0F => [
- 'Search' => 0x05,
- 'Store' => 0x07,
- 'Name' => 0x08,
- 'Query' => 0x09,
- 'Options' => 0x0A,
- 'Range' => 0x0B,
- 'Status' => 0x0C,
- 'Response' => 0x0D,
- 'Result' => 0x0E,
- 'Properties' => 0x0F,
- 'Total' => 0x10,
- 'EqualTo' => 0x11,
- 'Value' => 0x12,
- 'And' => 0x13,
- 'Or' => 0x14,
- 'FreeText' => 0x15,
- 'DeepTraversal' => 0x17,
- 'LongId' => 0x18,
- 'RebuildResults' => 0x19,
- 'LessThan' => 0x1A,
- 'GreaterThan' => 0x1B,
- 'Schema' => 0x1C,
- 'Supported' => 0x1D,
- // EAS 12.1
- 'UserName' => 0x1E,
- 'Password' => 0x1F,
- 'ConversationId' => 0x20,
- // EAS 14.1
- 'Picture' => 0x21,
- 'MaxSize' => 0x22,
- 'MaxPictures' => 0x23,
- ],
- // #16 GAL (Global Address List)
- 0x10 => [
- 'DisplayName' => 0x05,
- 'Phone' => 0x06,
- 'Office' => 0x07,
- 'Title' => 0x08,
- 'Company' => 0x09,
- 'Alias' => 0x0A,
- 'FirstName' => 0x0B,
- 'LastName' => 0x0C,
- 'HomePhone' => 0x0D,
- 'MobilePhone' => 0x0E,
- 'EmailAddress' => 0x0F,
- // 14.1
- 'Picture' => 0x10,
- 'Status' => 0x11,
- 'Data' => 0x12,
- ],
- // #17 AirSyncBase (12.0)
- 0x11 => [
- 'BodyPreference' => 0x05,
- 'Type' => 0x06,
- 'TruncationSize' => 0x07,
- 'AllOrNone' => 0x08,
- 'Body' => 0x0A,
- 'Data' => 0x0B,
- 'EstimatedDataSize' => 0x0C,
- 'Truncated' => 0x0D,
- 'Attachments' => 0x0E,
- 'Attachment' => 0x0F,
- 'DisplayName' => 0x10,
- 'FileReference' => 0x11,
- 'Method' => 0x12,
- 'ContentId' => 0x13,
- 'ContentLocation' => 0x14,
- 'IsInline' => 0x15,
- 'NativeBodyType' => 0x16,
- 'ContentType' => 0x17,
- // EAS 14.0
- 'Preview' => 0x18,
- // EAS 14.1
- 'BodyPartPreference' => 0x19,
- 'BodyPart' => 0x1A,
- 'Status' => 0x1B,
- // EAS 16.0
- 'Add' => 0x1C,
- 'Delete' => 0x1D,
- 'ClientId' => 0x1E,
- 'Content' => 0x1F,
- 'Location' => 0x20,
- 'Annontation' => 0x21,
- 'Street' => 0x22,
- 'City' => 0x23,
- 'State' => 0x24,
- 'Country' => 0x25,
- 'PostalCode' => 0x26,
- 'Latitude' => 0x27,
- 'Longitude' => 0x28,
- 'Accuracy' => 0x29,
- 'Altitude' => 0x2A,
- 'AltitudeAccuracy' => 0x2B,
- 'LocationUri' => 0x2C,
- 'InstanceId' => 0x2D,
- ],
- // #18 Settings
- 0x12 => [
- 'Settings' => 0x05,
- 'Status' => 0x06,
- 'Get' => 0x07,
- 'Set' => 0x08,
- 'Oof' => 0x09,
- 'OofState' => 0x0A,
- 'StartTime' => 0x0B,
- 'EndTime' => 0x0C,
- 'OofMessage' => 0x0D,
- 'AppliesToInternal' => 0x0E,
- 'AppliesToExternalKnown' => 0x0F,
- 'AppliesToExternalUnknown' => 0x10,
- 'Enabled' => 0x11,
- 'ReplyMessage' => 0x12,
- 'BodyType' => 0x13,
- 'DevicePassword' => 0x14,
- 'Password' => 0x15,
- 'Device' => 0x16,
- 'Model' => 0x17,
- 'IMEI' => 0x18,
- 'FriendlyName' => 0x19,
- 'OS' => 0x1A,
- 'OSLanguage' => 0x1B,
- 'PhoneNumber' => 0x1B,
- 'User' => 0x1D,
- 'EmailAddresses' => 0x1E,
- 'SmtpAddress' => 0x1F,
- // EAS 12.1
- 'UserAgent' => 0x20,
- // EAS 14.0
- 'EnableOutboundSMS' => 0x21,
- 'MobileOperator' => 0x22,
- // EAS 14.1
- 'PrimarySmtpAddress' => 0x23,
- 'Accounts' => 0x24,
- 'Account' => 0x25,
- 'AccountId' => 0x26,
- 'AccountName' => 0x27,
- 'UserDisplayName' => 0x28,
- 'SendDisabled' => 0x29,
- 'RightsManagementInformation' => 0x2B,
- ],
- // #19 DocumentLibrary
- 0x13 => [
- 'LinkId' => 0x05,
- 'DisplayName' => 0x06,
- 'IsCollection' => 0x07,
- 'CreationDate' => 0x08,
- 'LastModifiedDate' => 0x09,
- 'IsHidden' => 0x0A,
- 'ContentLength' => 0x0B,
- 'ContentType' => 0x0C,
- ],
- // #20 EntityOperations
- 0x14 => [
- 'EntityOperations' => 0x05,
- 'Fetch' => 0x06,
- 'Store' => 0x07,
- 'Options' => 0x08,
- 'Range' => 0x09,
- 'Total' => 0x0A,
- 'Properties' => 0x0B,
- 'Data' => 0x0C,
- 'Status' => 0x0D,
- 'Response' => 0x0E,
- 'Version' => 0x0F,
- 'Schema' => 0x10,
- 'Part' => 0x11,
- 'EmptyCollectionContent' => 0x12,
- 'DeleteSubCollections' => 0x13,
- // EAS 12.1
- 'UserName' => 0x14,
- 'Password' => 0x15,
- // EAS 14.0
- 'Move' => 0x16,
- 'DstFldId' => 0x17,
- 'ConversationId' => 0x18,
- 'MoveAlways' => 0x19,
- ],
- // #21 ComposeMail (14.0)
- 0x15 => [
- 'SendMail' => 0x05,
- 'SmartForward' => 0x06,
- 'SmartReply' => 0x07,
- 'SaveInSentEntitys' => 0x08,
- 'ReplaceMime' => 0x09,
- 'Type' => 0x0A,
- 'Source' => 0x0B,
- 'CollectionId' => 0x0C,
- 'EntityId' => 0x0D,
- 'LongId' => 0x0E,
- 'InstanceId' => 0x0F,
- 'MIME' => 0x10,
- 'ClientId' => 0x11,
- 'Status' => 0x12,
- // 14.1
- 'AccountId' => 0x13,
- // EAS 16.0
- 'Forwardees' => 0x15,
- 'Forwardee' => 0x16,
- 'ForwardeeName' => 0x17,
- 'ForwardeeEmail' => 0x18
- ],
- // #22 Email2 (14.0)
- 0x16 => [
- 'UmCallerId' => 0x05,
- 'UmUserNotes' => 0x06,
- 'UmAttDuration' => 0x07,
- 'UmAttOrder' => 0x08,
- 'ConversationId' => 0x09,
- 'ConversationIndex' => 0x0A,
- 'LastVerbExecuted' => 0x0B,
- 'LastVerbExecutionTime' => 0x0C,
- 'ReceivedAsBcc' => 0x0D,
- 'Sender' => 0x0E,
- 'CalendarType' => 0x0F,
- 'IsLeapMonth' => 0x10,
- // 14.1
- 'AccountId' => 0x11,
- 'FirstDayOfWeek' => 0x12,
- 'MeetingMessageType' => 0x13,
- // EAS 16.0
- 'IsDraft' => 0x15,
- 'Bcc' => 0x16,
- 'Send' => 0x17
- ],
- // #23 Notes (14.0)
- 0x17 => [
- 'Subject' => 0x05,
- 'MessageClass' => 0x06,
- 'LastModifiedDate' => 0x07,
- 'Categories' => 0x08,
- 'Category' => 0x09
- ],
- // #24 RightsManagement (14.1)
- 0x18 => [
- 'RightsManagementSupport' => 0x05,
- 'RightsManagementTemplates' => 0x06,
- 'RightsManagementTemplate' => 0x07,
- 'RightsManagementLicense' => 0x08,
- 'EditAllowed' => 0x09,
- 'ReplyAllowed' => 0x0A,
- 'ReplyAllAllowed' => 0x0B,
- 'ForwardAllowed' => 0x0C,
- 'ModifyRecipientsAllowed' => 0x0D,
- 'ExtractAllowed' => 0x0E,
- 'PrintAllowed' => 0x0F,
- 'ExportAllowed' => 0x10,
- 'ProgrammaticAccessAllowed' => 0x11,
- 'Owner' => 0x12,
- 'ContentExpiryDate' => 0x13,
- 'TemplateID' => 0x14,
- 'TemplateName' => 0x15,
- 'TemplateDescription' => 0x16,
- 'ContentOwner' => 0x17,
- 'RemoveRightsManagementDistribution' => 0x18
- ],
- // #25 Find
- 0x19 => [
- 'Find' => 0x05,
- 'SearchId' => 0x06,
- 'Search' => 0x07,
- 'Criterion' => 0x08,
- 'Query' => 0x09,
- 'Status' => 0x0A,
- 'FreeText' => 0x0B,
- 'Options' => 0x0C,
- 'Range' => 0x0D,
- 'DeepTraversal' => 0x0E,
- 'Response' => 0x11,
- 'Result' => 0x12,
- 'Properties' => 0x13,
- 'Preview' => 0x14,
- 'HasAttachments' => 0x15
- ],
- // #254 Windows Live
- 0xFE => [
- 'Annotations' => 0x05,
- 'Annotation' => 0x06,
- 'Name' => 0x07,
- 'Value' => 0x08
- ]
- ];
-
- /**
- * WBXMLDecoder constructor
- */
- public function __construct() {
-
- }
-
- /**
- * convert object to string
- *
- * @param $data
- *
- * @throws Throwable
- */
- public function stringFromObject($object): string {
-
- // construct stream object
- $stream = fopen('php://temp', 'rw');
- //
- $this->streamFromObject($stream, $object);
- // rewind to beggining of stream
- rewind($stream);
- //
- $data = stream_get_contents($stream);
- // close stream
- fclose($stream);
-
- return $data;
-
- }
-
- /**
- * convert object to wbxml binary
- *
- * @param $stream output stream
- * @param $object object to convert stream
- *
- */
- public function streamFromObject($stream, $object): void {
-
- // write header
- $this->_writeByte($stream, EasXml::VERSION_V13);
- $this->_writeMBUInt($stream, EasXml::IDENTIFIER);
- $this->_writeMBUInt($stream, EasXml::ENCODING);
- $this->_writeMBUInt($stream, 0);
- // write body
- $page = 0;
- $this->_writeBodyFromObject($stream, $object, $page);
-
- }
-
- /**
- * write eas object as wbxml binary
- *
- * @param $stream output stream
- * @param $object object to convert
- * @param $page namespace code page
- *
- */
- private function _writeBodyFromObject($stream, $object, &$page): void {
-
- foreach (get_object_vars($object) as $token => $property) {
-
- $namespace = $property->getNamespace();
-
- if ($page !== self::$_namespaces[$namespace]) {
- $page = self::$_namespaces[$namespace];
- $this->_writeByte($stream, EasXml::CODESPACE);
- $this->_writeByte($stream, $page);
- }
-
- if ($property instanceof EasObject) {
-
- // write node start
- $this->_writeNodeStart($stream, $page, $token, true, false);
- // write node contents
- $this->_writeBodyFromObject($stream, $property, $page);
- // write node end
- $this->_writeNodeEnd($stream);
-
- }
- elseif ($property instanceof EasProperty) {
-
- if ($property->hasContents()) {
- // write node start
- $this->_writeNodeStart($stream, $page, $token, true, false);
- if ($property->getOpaque()) {
- // write node contents
- $this->_writeData($stream, $property->getContents());
- }
- else {
- // write node contents
- $this->_writeString($stream, $property->getContents());
- }
- // write node end
- $this->_writeNodeEnd($stream);
- }
- else {
- // write node start
- $this->_writeNodeStart($stream, $page, $token, false, false);
- }
-
- }
- elseif ($property instanceof EasCollection) {
- $cpage = $page;
- foreach ($property as $entry) {
- // evaluate if code page changed on the last iteration
- if ($cpage != $page) {
- $page = $cpage;
- $this->_writeByte($stream, EasXml::CODESPACE);
- $this->_writeByte($stream, $page);
- }
- // write node start
- $this->_writeNodeStart($stream, $page, $token, true, false);
- // write node contents
- $this->_writeBodyFromObject($stream, $entry, $page);
- // write node end
- $this->_writeNodeEnd($stream);
- }
-
- }
- }
-
- }
-
- /**
- * write node start as wbxml binary
- *
- * @param $stream output stream
- * @param $space codespace
- * @param $name named token
- * @param $contents contents flag
- * @param $attributes attributes flag
- *
- */
- private function _writeNodeStart($stream, int $space, string $name, bool $contents = false, bool $attributes = false): void {
-
- // convert named token to token code
- $code = self::$_codes[$space][$name];
- // evaluate, if code was found
- if (!isset($code)) {
- throw new \UnexpectedValueException("Unknown token encountered $space:$name");
- }
- // alter code depenting on flags
- if ($attributes) {
- $code |= EasXml::NODE_CONTENTS;
- } elseif ($contents) {
- $code |= EasXml::NODE_CONTENTS;
- }
- // write node start token to stream
- $this->_writeByte($stream, $code);
-
- }
-
- /**
- * write byte as wbxml binary
- *
- * @param $stream output stream
- * @param $byte byte to write
- *
- */
- private function _writeNodeEnd($stream, ): void {
-
- // write node end token to stream
- $this->_writeByte($stream, EasXml::NODE_END);
-
- }
-
- /**
- * write byte as wbxml binary
- *
- * @param $stream output stream
- * @param $byte byte to write
- *
- */
- private function _writeByte($stream, $byte): void {
- // write byte to stream
- fwrite($stream, chr($byte));
- }
-
- /**
- * write integer as wbxml multibyte binary
- *
- * @param $stream output stream
- * @param $int int to write
- *
- */
- private function _writeMBUInt($stream, $int): void {
-
- while (1) {
- $byte = $int & 0x7f;
- $int = $int >> 7;
- if ($int == 0) {
- $this->_writeByte($stream, $byte);
- break;
- } else {
- $this->_writeByte($stream, $byte | 0x80);
- }
- }
-
- }
-
- /**
- * write string as wbxml binary
- *
- * @param $stream output stream
- * @param $content content to write
- *
- */
- private function _writeString($stream, $content): void {
-
- // replace any termination character in string
- $content = str_replace("\0", '', $content);
- // write string start token
- $this->_writeByte($stream, EasXml::STRING_INLINE);
- // write string
- fwrite($stream, $content);
- // write string end token
- $this->_writeByte($stream, 0);
-
- }
-
- /**
- * write opeque data as wbxml binary
- *
- * @param $stream output stream
- * @param $content data to write
- *
- */
- private function _writeData($stream, $content): void {
-
- // write data start token
- $this->_writeByte($stream, EasXml::DATA);
- // write data lenght
- $this->_writeMBUInt($stream, strlen($content));
- // write data
- fwrite($stream, $content);
-
- }
-
-}
\ No newline at end of file
diff --git a/lib/Utile/TimeZoneEAS.php b/lib/Utile/TimeZoneEAS.php
deleted file mode 100644
index af85074..0000000
--- a/lib/Utile/TimeZoneEAS.php
+++ /dev/null
@@ -1,951 +0,0 @@
-
-*
-* @author Sebastian Krupinski
-*
-* @license AGPL-3.0-or-later
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see .
-*
-*/
-
-namespace OCA\JMAPC\Utile;
-
-use DateTimeZone;
-
-class TimeZoneEAS {
-
- /**
- * table of EAS (Microsoft/Windows) time zones information
- * @var array $easzones
- */
- private static $easzones = [
- 'AUS Central Standard Time' => '{"Id":"AUS Central Standard Time","Description":"(UTC+09:30) Darwin","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-570,"Period":"-PT9H30M"}]}]}',
- 'Aus Central W. Standard Time' => '{"Id":"Aus Central W. Standard Time","Description":"(UTC+08:45) Eucla","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-525,"Period":"-PT8H45M"}]}]}',
- 'AUS Eastern Standard Time' => '{"Id":"AUS Eastern Standard Time","Description":"(UTC+10:00) Canberra, Melbourne, Sydney","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2007-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":4,"Week":1,"Day":"Sunday","Time":"PT3H"},{"Id":"2008-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Afghanistan Standard Time' => '{"Id":"Afghanistan Standard Time","Description":"(UTC+04:30) Kabul","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-270,"Period":"-PT4H30M"}]}]}',
- 'Alaskan Standard Time' => '{"Id":"Alaskan Standard Time","Description":"(UTC-09:00) Alaska","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":480,"Period":"PT8H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":540,"Period":"PT9H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":480,"Period":"PT8H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":540,"Period":"PT9H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Aleutian Standard Time' => '{"Id":"Aleutian Standard Time","Description":"(UTC-10:00) Aleutian Islands","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":540,"Period":"PT9H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":600,"Period":"PT10H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":540,"Period":"PT9H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":600,"Period":"PT10H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Altai Standard Time' => '{"Id":"Altai Standard Time","Description":"(UTC+07:00) Barnaul, Gorno-Altaysk","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H"}]},{"Id":"6","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-360,"Period":"-PT6H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]}]}',
- 'Arab Standard Time' => '{"Id":"Arab Standard Time","Description":"(UTC+03:00) Kuwait, Riyadh","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]}]}',
- 'Arabian Standard Time' => '{"Id":"Arabian Standard Time","Description":"(UTC+04:00) Abu Dhabi, Muscat","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]}]}',
- 'Arabic Standard Time' => '{"Id":"Arabic Standard Time","Description":"(UTC+03:00) Baghdad","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2004-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":4,"Week":1,"Day":"Thursday","Time":"PT3H"},{"Id":"2004-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":1,"Day":"Friday","Time":"PT4H"}]},{"Id":"1","Effective":1104537600,"Type":"Dynamic","Alterations":[{"Id":"2005-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":4,"Week":1,"Day":"Friday","Time":"PT3H"},{"Id":"2005-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT4H"}]},{"Id":"2","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":4,"Week":1,"Day":"Saturday","Time":"PT3H"},{"Id":"2006-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":1,"Day":"Sunday","Time":"PT4H"}]},{"Id":"3","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":4,"Week":1,"Day":"Sunday","Time":"PT3H"},{"Id":"2007-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":1,"Day":"Monday","Time":"PT4H"}]},{"Id":"4","Effective":1199145600,"Type":"Static","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]}]}',
- 'Argentina Standard Time' => '{"Id":"Argentina Standard Time","Description":"(UTC-03:00) City of Buenos Aires","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2006-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":1,"Week":1,"Day":"Monday","Time":"PT0H"},{"Id":"2007-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":12,"Week":-1,"Day":"Sunday","Time":"PT0H"}]},{"Id":"2","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":3,"Week":3,"Day":"Sunday","Time":"PT0H"},{"Id":"2008-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2009-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":3,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"4","Effective":1262304000,"Type":"Static","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]}]}',
- 'Astrakhan Standard Time' => '{"Id":"Astrakhan Standard Time","Description":"(UTC+04:00) Astrakhan, Ulyanovsk","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]},{"Id":"6","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]}]}',
- 'Atlantic Standard Time' => '{"Id":"Atlantic Standard Time","Description":"(UTC-04:00) Atlantic Time (Canada)","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Azerbaijan Standard Time' => '{"Id":"Azerbaijan Standard Time","Description":"(UTC+04:00) Baku","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-300,"Period":"-PT5H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT4H"},{"Id":"2015-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT5H"}]},{"Id":"1","Effective":1451606400,"Type":"Static","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]}]}',
- 'Azores Standard Time' => '{"Id":"Azores Standard Time","Description":"(UTC-01:00) Azores","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":0,"Period":"PT0H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT0H"},{"Id":"1-Standard","Class":"Standard","Bias":60,"Period":"PT1H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT1H"}]}]}',
- 'Bahia Standard Time' => '{"Id":"Bahia Standard Time","Description":"(UTC-03:00) Salvador","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":1,"Week":1,"Day":"Sunday","Time":"PT0H"},{"Id":"2012-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]}]}',
- 'Bangladesh Standard Time' => '{"Id":"Bangladesh Standard Time","Description":"(UTC+06:00) Dhaka","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H"}]},{"Id":"1","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":6,"Week":3,"Day":"Friday","Time":"PT23H"},{"Id":"2009-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":12,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1262304000,"Type":"Static","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H"}]}]}',
- 'Belarus Standard Time' => '{"Id":"Belarus Standard Time","Description":"(UTC+03:00) Minsk","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]}]}',
- 'Bougainville Standard Time' => '{"Id":"Bougainville Standard Time","Description":"(UTC+11:00) Bougainville Island","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H"}]},{"Id":"1","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":12,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]}]}',
- 'Canada Central Standard Time' => '{"Id":"Canada Central Standard Time","Description":"(UTC-06:00) Saskatchewan","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":360,"Period":"PT6H"}]}]}',
- 'Cape Verde Standard Time' => '{"Id":"Cape Verde Standard Time","Description":"(UTC-01:00) Cabo Verde Is.","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":60,"Period":"PT1H"}]}]}',
- 'Caucasus Standard Time' => '{"Id":"Caucasus Standard Time","Description":"(UTC+04:00) Yerevan","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":-300,"Period":"-PT5H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2011-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]}]}',
- 'Cen. Australia Standard Time' => '{"Id":"Cen. Australia Standard Time","Description":"(UTC+09:30) Adelaide","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-570,"Period":"-PT9H30M","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2007-Daylight","Class":"Daylight","Bias":-630,"Period":"-PT10H30M","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-570,"Period":"-PT9H30M","Month":4,"Week":1,"Day":"Sunday","Time":"PT3H"},{"Id":"2008-Daylight","Class":"Daylight","Bias":-630,"Period":"-PT10H30M","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Central America Standard Time' => '{"Id":"Central America Standard Time","Description":"(UTC-06:00) Central America","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":360,"Period":"PT6H"}]}]}',
- 'Central Asia Standard Time' => '{"Id":"Central Asia Standard Time","Description":"(UTC+06:00) Astana","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H"}]}]}',
- 'Central Brazilian Standard Time' => '{"Id":"Central Brazilian Standard Time","Description":"(UTC-04:00) Cuiaba","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2004-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2004-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":11,"Week":1,"Day":"Tuesday","Time":"PT0H"}]},{"Id":"1","Effective":1104537600,"Type":"Dynamic","Alterations":[{"Id":"2005-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2005-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Sunday","Time":"PT0H"}]},{"Id":"2","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2006-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":11,"Week":1,"Day":"Sunday","Time":"PT0H"}]},{"Id":"3","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2007-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":2,"Day":"Sunday","Time":"PT0H"}]},{"Id":"4","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2008-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Sunday","Time":"PT0H"}]},{"Id":"5","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2009-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"6","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2010-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"7","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2011-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"8","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2012-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"9","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2013-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"10","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2014-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"11","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2015-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"12","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2016-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"13","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2017-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"14","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2018-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":11,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"15","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":1,"Week":1,"Day":"Tuesday","Time":"PT0H"},{"Id":"2019-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":2,"Week":3,"Day":"Sunday","Time":"PT0H"}]},{"Id":"16","Effective":1577836800,"Type":"Static","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":240,"Period":"PT4H"}]}]}',
- 'Central Europe Standard Time' => '{"Id":"Central Europe Standard Time","Description":"(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":-120,"Period":"-PT2H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"1-Standard","Class":"Standard","Bias":-60,"Period":"-PT1H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]}]}',
- 'Central European Standard Time' => '{"Id":"Central European Standard Time","Description":"(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":-120,"Period":"-PT2H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"1-Standard","Class":"Standard","Bias":-60,"Period":"-PT1H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]}]}',
- 'Central Pacific Standard Time' => '{"Id":"Central Pacific Standard Time","Description":"(UTC+11:00) Solomon Is., New Caledonia","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]}]}',
- 'Central Standard Time' => '{"Id":"Central Standard Time","Description":"(UTC-06:00) Central Time (US & Canada)","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Central Standard Time (Mexico)' => '{"Id":"Central Standard Time (Mexico)","Description":"(UTC-06:00) Guadalajara, Mexico City, Monterrey","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2022-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2022-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1672531200,"Type":"Static","Alterations":[{"Id":"2023-Standard","Class":"Standard","Bias":360,"Period":"PT6H"}]}]}',
- 'Chatham Islands Standard Time' => '{"Id":"Chatham Islands Standard Time","Description":"(UTC+12:45) Chatham Islands","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Standard","Class":"Standard","Bias":-765,"Period":"-PT12H45M","Month":3,"Week":3,"Day":"Sunday","Time":"PT3H45M"},{"Id":"2006-Daylight","Class":"Daylight","Bias":-825,"Period":"-PT13H45M","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H45M"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-765,"Period":"-PT12H45M","Month":3,"Week":3,"Day":"Sunday","Time":"PT3H45M"},{"Id":"2007-Daylight","Class":"Daylight","Bias":-825,"Period":"-PT13H45M","Month":9,"Week":-1,"Day":"Sunday","Time":"PT2H45M"}]},{"Id":"2","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-765,"Period":"-PT12H45M","Month":4,"Week":1,"Day":"Sunday","Time":"PT3H45M"},{"Id":"2008-Daylight","Class":"Daylight","Bias":-825,"Period":"-PT13H45M","Month":9,"Week":-1,"Day":"Sunday","Time":"PT2H45M"}]}]}',
- 'China Standard Time' => '{"Id":"China Standard Time","Description":"(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]}]}',
- 'Cuba Standard Time' => '{"Id":"Cuba Standard Time","Description":"(UTC-05:00) Havana","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2003-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Sunday","Time":"PT0H"},{"Id":"2003-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT1H"}]},{"Id":"1","Effective":1072915200,"Type":"Dynamic","Alterations":[{"Id":"2004-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2004-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT0H"}]},{"Id":"2","Effective":1104537600,"Type":"Static","Alterations":[{"Id":"2005-Standard","Class":"Standard","Bias":240,"Period":"PT4H"}]},{"Id":"3","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":1,"Week":1,"Day":"Sunday","Time":"PT0H"},{"Id":"2006-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT1H"}]},{"Id":"4","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT0H"},{"Id":"2007-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT1H"}]},{"Id":"5","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":3,"Day":"Sunday","Time":"PT0H"},{"Id":"2008-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT1H"}]},{"Id":"6","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT0H"},{"Id":"2009-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT1H"}]},{"Id":"7","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT0H"},{"Id":"2010-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT1H"}]},{"Id":"8","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":3,"Day":"Sunday","Time":"PT0H"},{"Id":"2011-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":2,"Day":"Sunday","Time":"PT1H"}]},{"Id":"9","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Sunday","Time":"PT0H"},{"Id":"2012-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT1H"}]},{"Id":"10","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT0H"},{"Id":"2013-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT1H"}]}]}',
- 'Dateline Standard Time' => '{"Id":"Dateline Standard Time","Description":"(UTC-12:00) International Date Line West","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":720,"Period":"PT12H"}]}]}',
- 'E. Africa Standard Time' => '{"Id":"E. Africa Standard Time","Description":"(UTC+03:00) Nairobi","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]}]}',
- 'E. Australia Standard Time' => '{"Id":"E. Australia Standard Time","Description":"(UTC+10:00) Brisbane","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H"}]}]}',
- 'E. Europe Standard Time' => '{"Id":"E. Europe Standard Time","Description":"(UTC+02:00) Chisinau","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"1-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]}]}',
- 'E. South America Standard Time' => '{"Id":"E. South America Standard Time","Description":"(UTC-03:00) Brasilia","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2004-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2004-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":11,"Week":1,"Day":"Tuesday","Time":"PT0H"}]},{"Id":"1","Effective":1104537600,"Type":"Dynamic","Alterations":[{"Id":"2005-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2005-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Sunday","Time":"PT0H"}]},{"Id":"2","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2006-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":11,"Week":1,"Day":"Sunday","Time":"PT0H"}]},{"Id":"3","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2007-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":2,"Day":"Sunday","Time":"PT0H"}]},{"Id":"4","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2008-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Sunday","Time":"PT0H"}]},{"Id":"5","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2009-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"6","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2010-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"7","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2011-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"8","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2012-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"9","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2013-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"10","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2014-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"11","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2015-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"12","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2016-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"13","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2017-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"14","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2018-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":11,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"15","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":1,"Week":1,"Day":"Tuesday","Time":"PT0H"},{"Id":"2019-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Sunday","Time":"PT0H"}]},{"Id":"16","Effective":1577836800,"Type":"Static","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]}]}',
- 'Easter Island Standard Time' => '{"Id":"Easter Island Standard Time","Description":"(UTC-06:00) Easter Island","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":3,"Week":2,"Day":"Saturday","Time":"PT22H"},{"Id":"2007-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":10,"Week":2,"Day":"Saturday","Time":"PT22H"}]},{"Id":"1","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2008-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":10,"Week":2,"Day":"Saturday","Time":"PT22H"}]},{"Id":"2","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":3,"Week":2,"Day":"Saturday","Time":"PT22H"},{"Id":"2009-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":10,"Week":2,"Day":"Saturday","Time":"PT22H"}]},{"Id":"3","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":4,"Week":1,"Day":"Saturday","Time":"PT22H"},{"Id":"2010-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":10,"Week":2,"Day":"Saturday","Time":"PT22H"}]},{"Id":"4","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":5,"Week":1,"Day":"Saturday","Time":"PT22H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":8,"Week":3,"Day":"Saturday","Time":"PT22H"}]},{"Id":"5","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":4,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2012-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":9,"Week":1,"Day":"Saturday","Time":"PT22H"}]},{"Id":"6","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":4,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2013-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":9,"Week":1,"Day":"Saturday","Time":"PT22H"}]},{"Id":"7","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":4,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2014-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":9,"Week":1,"Day":"Saturday","Time":"PT22H"}]},{"Id":"8","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":300,"Period":"PT5H"}]},{"Id":"9","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":5,"Week":2,"Day":"Saturday","Time":"PT22H"},{"Id":"2016-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":8,"Week":2,"Day":"Saturday","Time":"PT22H"}]},{"Id":"10","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":5,"Week":2,"Day":"Saturday","Time":"PT22H"},{"Id":"2017-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":8,"Week":2,"Day":"Saturday","Time":"PT22H"}]},{"Id":"11","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":5,"Week":2,"Day":"Saturday","Time":"PT22H"},{"Id":"2018-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":8,"Week":2,"Day":"Saturday","Time":"PT22H"}]},{"Id":"12","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":4,"Week":1,"Day":"Saturday","Time":"PT22H"},{"Id":"2019-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":9,"Week":1,"Day":"Saturday","Time":"PT22H"}]},{"Id":"13","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":4,"Week":1,"Day":"Saturday","Time":"PT22H"},{"Id":"2020-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":9,"Week":1,"Day":"Saturday","Time":"PT22H"}]},{"Id":"14","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":4,"Week":1,"Day":"Saturday","Time":"PT22H"},{"Id":"2021-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":9,"Week":1,"Day":"Saturday","Time":"PT22H"}]},{"Id":"15","Effective":1640995200,"Type":"Dynamic","Alterations":[{"Id":"2022-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":4,"Week":1,"Day":"Saturday","Time":"PT22H"},{"Id":"2022-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":9,"Week":2,"Day":"Saturday","Time":"PT22H"}]},{"Id":"16","Effective":1672531200,"Type":"Dynamic","Alterations":[{"Id":"2023-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":4,"Week":1,"Day":"Saturday","Time":"PT22H"},{"Id":"2023-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":9,"Week":1,"Day":"Saturday","Time":"PT22H"}]}]}',
- 'Eastern Standard Time' => '{"Id":"Eastern Standard Time","Description":"(UTC-05:00) Eastern Time (US & Canada)","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Eastern Standard Time (Mexico)' => '{"Id":"Eastern Standard Time (Mexico)","Description":"(UTC-05:00) Chetumal","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2014-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":360,"Period":"PT6H","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2015-Daylight","Class":"Daylight","Bias":300,"Period":"PT5H","Month":2,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1451606400,"Type":"Static","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":300,"Period":"PT5H"}]}]}',
- 'Egypt Standard Time' => '{"Id":"Egypt Standard Time","Description":"(UTC+02:00) Cairo","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2005-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2005-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"1","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2006-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":3,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2007-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2008-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":8,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"4","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":4,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2009-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":8,"Week":3,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"5","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2010-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"6","Effective":1293840000,"Type":"Static","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"7","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"8","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"9","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":5,"Week":3,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2014-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"10","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"11","Effective":1451606400,"Type":"Static","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"12","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"13","Effective":1514764800,"Type":"Static","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"14","Effective":1546300800,"Type":"Static","Alterations":[{"Id":"2019-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"15","Effective":1577836800,"Type":"Static","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"16","Effective":1609459200,"Type":"Static","Alterations":[{"Id":"2021-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"17","Effective":1640995200,"Type":"Static","Alterations":[{"Id":"2022-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"18","Effective":1672531200,"Type":"Dynamic","Alterations":[{"Id":"2023-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2023-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]}]}',
- 'Ekaterinburg Standard Time' => '{"Id":"Ekaterinburg Standard Time","Description":"(UTC+05:00) Ekaterinburg","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-360,"Period":"-PT6H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-360,"Period":"-PT6H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-360,"Period":"-PT6H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H"}]}]}',
- 'FLE Standard Time' => '{"Id":"FLE Standard Time","Description":"(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"1-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT4H"}]}]}',
- 'Fiji Standard Time' => '{"Id":"Fiji Standard Time","Description":"(UTC+12:00) Fiji","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H"}]},{"Id":"1","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2009-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":11,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2010-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":10,"Week":4,"Day":"Sunday","Time":"PT2H"}]},{"Id":"3","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":3,"Week":1,"Day":"Sunday","Time":"PT3H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":10,"Week":4,"Day":"Sunday","Time":"PT2H"}]},{"Id":"4","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":4,"Day":"Sunday","Time":"PT3H"},{"Id":"2012-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":10,"Week":3,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":3,"Day":"Sunday","Time":"PT3H"},{"Id":"2013-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":10,"Week":4,"Day":"Sunday","Time":"PT2H"}]},{"Id":"6","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":3,"Day":"Sunday","Time":"PT2H"},{"Id":"2014-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":3,"Day":"Sunday","Time":"PT3H"},{"Id":"2015-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"8","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":3,"Day":"Sunday","Time":"PT3H"},{"Id":"2016-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"9","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":3,"Day":"Sunday","Time":"PT3H"},{"Id":"2017-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"10","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":2,"Day":"Sunday","Time":"PT3H"},{"Id":"2018-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"11","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":2,"Day":"Sunday","Time":"PT3H"},{"Id":"2019-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":11,"Week":2,"Day":"Sunday","Time":"PT2H"}]},{"Id":"12","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":2,"Day":"Sunday","Time":"PT3H"},{"Id":"2020-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":12,"Week":3,"Day":"Sunday","Time":"PT2H"}]},{"Id":"13","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2021-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":1,"Week":3,"Day":"Sunday","Time":"PT3H"}]},{"Id":"14","Effective":1640995200,"Type":"Static","Alterations":[{"Id":"2022-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H"}]}]}',
- 'GMT Standard Time' => '{"Id":"GMT Standard Time","Description":"(UTC+00:00) Dublin, Edinburgh, Lisbon, London","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT1H"},{"Id":"1-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'GTB Standard Time' => '{"Id":"GTB Standard Time","Description":"(UTC+02:00) Athens, Bucharest","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"1-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT4H"}]}]}',
- 'Georgian Standard Time' => '{"Id":"Georgian Standard Time","Description":"(UTC+04:00) Tbilisi","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]}]}',
- 'Greenland Standard Time' => '{"Id":"Greenland Standard Time","Description":"(UTC-03:00) Greenland","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2004-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2004-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"1","Effective":1104537600,"Type":"Dynamic","Alterations":[{"Id":"2005-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2005-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"2","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2006-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"3","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":4,"Day":"Saturday","Time":"PT22H"},{"Id":"2007-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"4","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2008-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"5","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2009-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":4,"Day":"Saturday","Time":"PT23H"}]},{"Id":"6","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2010-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"7","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2011-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"8","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":4,"Day":"Saturday","Time":"PT22H"},{"Id":"2012-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"9","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2013-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"10","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2014-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"11","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2015-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":4,"Day":"Saturday","Time":"PT23H"}]},{"Id":"12","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2016-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"13","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2017-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"14","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":4,"Day":"Saturday","Time":"PT22H"},{"Id":"2018-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"15","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2019-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]},{"Id":"16","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2020-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":4,"Day":"Saturday","Time":"PT23H"}]},{"Id":"17","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT22H"},{"Id":"2021-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H"}]}]}',
- 'Greenwich Standard Time' => '{"Id":"Greenwich Standard Time","Description":"(UTC+00:00) Monrovia, Reykjavik","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":0,"Period":"PT0H"}]}]}',
- 'Haiti Standard Time' => '{"Id":"Haiti Standard Time","Description":"(UTC-05:00) Haiti","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2006-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"1","Effective":1167609600,"Type":"Static","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":300,"Period":"PT5H"}]},{"Id":"2","Effective":1199145600,"Type":"Static","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":300,"Period":"PT5H"}]},{"Id":"3","Effective":1230768000,"Type":"Static","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":300,"Period":"PT5H"}]},{"Id":"4","Effective":1262304000,"Type":"Static","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":300,"Period":"PT5H"}]},{"Id":"5","Effective":1293840000,"Type":"Static","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":300,"Period":"PT5H"}]},{"Id":"6","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2012-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2013-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"8","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2014-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"9","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2015-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"10","Effective":1451606400,"Type":"Static","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":300,"Period":"PT5H"}]},{"Id":"11","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2017-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Hawaiian Standard Time' => '{"Id":"Hawaiian Standard Time","Description":"(UTC-10:00) Hawaii","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":600,"Period":"PT10H"}]}]}',
- 'India Standard Time' => '{"Id":"India Standard Time","Description":"(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-330,"Period":"-PT5H30M"}]}]}',
- 'Iran Standard Time' => '{"Id":"Iran Standard Time","Description":"(UTC+03:30) Tehran","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2004-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":3,"Day":"Sunday","Time":"PT0H"},{"Id":"2004-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Monday","Time":"PT23H59M59.999S"}]},{"Id":"1","Effective":1104537600,"Type":"Dynamic","Alterations":[{"Id":"2005-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Tuesday","Time":"PT0H"},{"Id":"2005-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Wednesday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1136073600,"Type":"Static","Alterations":[{"Id":"2006-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M"}]},{"Id":"3","Effective":1167609600,"Type":"Static","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M"}]},{"Id":"4","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":3,"Day":"Friday","Time":"PT0H"},{"Id":"2008-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"5","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Sunday","Time":"PT0H"},{"Id":"2009-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Monday","Time":"PT23H59M59.999S"}]},{"Id":"6","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Monday","Time":"PT0H"},{"Id":"2010-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Tuesday","Time":"PT23H59M59.999S"}]},{"Id":"7","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Tuesday","Time":"PT0H"},{"Id":"2011-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Wednesday","Time":"PT23H59M59.999S"}]},{"Id":"8","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":3,"Day":"Wednesday","Time":"PT0H"},{"Id":"2012-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"9","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Friday","Time":"PT0H"},{"Id":"2013-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"10","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Saturday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Sunday","Time":"PT23H59M59.999S"}]},{"Id":"11","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Sunday","Time":"PT0H"},{"Id":"2015-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Monday","Time":"PT23H59M59.999S"}]},{"Id":"12","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":3,"Day":"Monday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Tuesday","Time":"PT23H59M59.999S"}]},{"Id":"13","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Wednesday","Time":"PT0H"},{"Id":"2017-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"14","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Thursday","Time":"PT0H"},{"Id":"2018-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Friday","Time":"PT23H59M59.999S"}]},{"Id":"15","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Friday","Time":"PT0H"},{"Id":"2019-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"16","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":3,"Day":"Saturday","Time":"PT0H"},{"Id":"2020-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Sunday","Time":"PT23H59M59.999S"}]},{"Id":"17","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Monday","Time":"PT0H"},{"Id":"2021-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Tuesday","Time":"PT23H59M59.999S"}]},{"Id":"18","Effective":1640995200,"Type":"Dynamic","Alterations":[{"Id":"2022-Daylight","Class":"Daylight","Bias":-270,"Period":"-PT4H30M","Month":3,"Week":4,"Day":"Tuesday","Time":"PT0H"},{"Id":"2022-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M","Month":9,"Week":3,"Day":"Wednesday","Time":"PT23H59M59.999S"}]},{"Id":"19","Effective":1672531200,"Type":"Static","Alterations":[{"Id":"2023-Standard","Class":"Standard","Bias":-210,"Period":"-PT3H30M"}]}]}',
- 'Israel Standard Time' => '{"Id":"Israel Standard Time","Description":"(UTC+02:00) Jerusalem","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2004-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":1,"Day":"Wednesday","Time":"PT1H"},{"Id":"2004-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":4,"Day":"Wednesday","Time":"PT1H"}]},{"Id":"1","Effective":1104537600,"Type":"Dynamic","Alterations":[{"Id":"2005-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":1,"Day":"Friday","Time":"PT2H"},{"Id":"2005-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":2,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"3","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":3,"Day":"Sunday","Time":"PT2H"}]},{"Id":"4","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2008-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2009-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"6","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":2,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":1,"Day":"Friday","Time":"PT2H"},{"Id":"2011-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"8","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2012-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":4,"Day":"Sunday","Time":"PT2H"}]},{"Id":"9","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2013-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"10","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2014-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"11","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2015-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"12","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2016-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"13","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":4,"Day":"Friday","Time":"PT2H"},{"Id":"2017-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"14","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":4,"Day":"Friday","Time":"PT2H"},{"Id":"2018-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"15","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2019-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"16","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2020-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"17","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2021-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"18","Effective":1640995200,"Type":"Dynamic","Alterations":[{"Id":"2022-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2022-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"19","Effective":1672531200,"Type":"Dynamic","Alterations":[{"Id":"2023-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":4,"Day":"Friday","Time":"PT2H"},{"Id":"2023-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"20","Effective":1704067200,"Type":"Dynamic","Alterations":[{"Id":"2024-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT2H"},{"Id":"2024-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Jordan Standard Time' => '{"Id":"Jordan Standard Time","Description":"(UTC+03:00) Amman","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2011-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Friday","Time":"PT1H"}]},{"Id":"1","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":1,"Week":1,"Day":"Sunday","Time":"PT0H"},{"Id":"2012-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Tuesday","Time":"PT0H"},{"Id":"2013-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":12,"Week":3,"Day":"Friday","Time":"PT0H"}]},{"Id":"3","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2014-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Friday","Time":"PT1H"}]},{"Id":"4","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2015-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Friday","Time":"PT1H"}]},{"Id":"5","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2016-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Friday","Time":"PT1H"}]},{"Id":"6","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2017-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Friday","Time":"PT1H"}]},{"Id":"7","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2018-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Friday","Time":"PT1H"}]},{"Id":"8","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2019-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Friday","Time":"PT1H"}]},{"Id":"9","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2020-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Friday","Time":"PT1H"}]},{"Id":"10","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2021-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Friday","Time":"PT1H"}]},{"Id":"11","Effective":1640995200,"Type":"Dynamic","Alterations":[{"Id":"2022-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2022-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":2,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"12","Effective":1672531200,"Type":"Static","Alterations":[{"Id":"2023-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]}]}',
- 'Kaliningrad Standard Time' => '{"Id":"Kaliningrad Standard Time","Description":"(UTC+02:00) Kaliningrad","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]}]}',
- 'Kamchatka Standard Time' => '{"Id":"Kamchatka Standard Time","Description":"(UTC+12:00) Petropavlovsk-Kamchatsky - Old","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"1-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]}]}',
- 'Korea Standard Time' => '{"Id":"Korea Standard Time","Description":"(UTC+09:00) Seoul","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H"}]}]}',
- 'Libya Standard Time' => '{"Id":"Libya Standard Time","Description":"(UTC+02:00) Tripoli","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]},{"Id":"1","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":-120,"Period":"-PT2H","Month":1,"Week":1,"Day":"Sunday","Time":"PT0H"},{"Id":"2012-Standard","Class":"Standard","Bias":-60,"Period":"-PT1H","Month":11,"Week":2,"Day":"Saturday","Time":"PT2H"}]},{"Id":"2","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-60,"Period":"-PT1H","Month":1,"Week":1,"Day":"Tuesday","Time":"PT0H"},{"Id":"2013-Daylight","Class":"Daylight","Bias":-120,"Period":"-PT2H","Month":3,"Week":-1,"Day":"Friday","Time":"PT1H"}]},{"Id":"3","Effective":1388534400,"Type":"Static","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]}]}',
- 'Line Islands Standard Time' => '{"Id":"Line Islands Standard Time","Description":"(UTC+14:00) Kiritimati Island","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-840,"Period":"-PT14H"}]}]}',
- 'Lord Howe Standard Time' => '{"Id":"Lord Howe Standard Time","Description":"(UTC+10:30) Lord Howe Island","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2005-Standard","Class":"Standard","Bias":-630,"Period":"-PT10H30M","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2005-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Standard","Class":"Standard","Bias":-630,"Period":"-PT10H30M","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-630,"Period":"-PT10H30M","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"3","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-630,"Period":"-PT10H30M","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2008-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Magadan Standard Time' => '{"Id":"Magadan Standard Time","Description":"(UTC+11:00) Magadan","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-720,"Period":"-PT12H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-720,"Period":"-PT12H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-720,"Period":"-PT12H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H"}]},{"Id":"6","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-600,"Period":"-PT10H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":4,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]}]}',
- 'Magallanes Standard Time' => '{"Id":"Magallanes Standard Time","Description":"(UTC-03:00) Punta Arenas","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2007-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"1","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2008-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2009-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2010-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"4","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":5,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2011-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":8,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"5","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2012-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"6","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2013-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"7","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2014-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"8","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]},{"Id":"9","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":5,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2016-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":8,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"10","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]}]}',
- 'Marquesas Standard Time' => '{"Id":"Marquesas Standard Time","Description":"(UTC-09:30) Marquesas Islands","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":570,"Period":"PT9H30M"}]}]}',
- 'Mauritius Standard Time' => '{"Id":"Mauritius Standard Time","Description":"(UTC+04:00) Port Louis","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]},{"Id":"1","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H","Month":1,"Week":1,"Day":"Tuesday","Time":"PT0H"},{"Id":"2008-Daylight","Class":"Daylight","Bias":-300,"Period":"-PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-300,"Period":"-PT5H","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2009-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"3","Effective":1262304000,"Type":"Static","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]}]}',
- 'Mid-Atlantic Standard Time' => '{"Id":"Mid-Atlantic Standard Time","Description":"(UTC-02:00) Mid-Atlantic - Old","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":60,"Period":"PT1H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"1-Standard","Class":"Standard","Bias":120,"Period":"PT2H","Month":9,"Week":-1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Middle East Standard Time' => '{"Id":"Middle East Standard Time","Description":"(UTC+02:00) Beirut","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT0H"},{"Id":"2009-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT0H"}]},{"Id":"1","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2010-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2011-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2012-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"4","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2013-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"5","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2014-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"6","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2015-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"7","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2016-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"8","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2017-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"9","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2018-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"10","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2019-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"11","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2020-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"12","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2021-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]}]}',
- 'Montevideo Standard Time' => '{"Id":"Montevideo Standard Time","Description":"(UTC-03:00) Montevideo","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2014-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2015-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1451606400,"Type":"Static","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]}]}',
- 'Morocco Standard Time' => '{"Id":"Morocco Standard Time","Description":"(UTC+01:00) Casablanca","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":0,"Period":"PT0H"}]},{"Id":"1","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":5,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2008-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":8,"Week":-1,"Day":"Sunday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":5,"Week":-1,"Day":"Sunday","Time":"PT23H59M59.999S"},{"Id":"2009-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":8,"Week":3,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":5,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2010-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":8,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"4","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":4,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2011-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":7,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"5","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":4,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2012-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":9,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"6","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":4,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2013-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"7","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2014-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"8","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2015-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"9","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2016-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"10","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2017-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"11","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":3,"Week":4,"Day":"Sunday","Time":"PT2H"},{"Id":"2018-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":10,"Week":4,"Day":"Sunday","Time":"PT3H"}]},{"Id":"12","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":1,"Week":1,"Day":"Tuesday","Time":"PT0H"},{"Id":"2019-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":6,"Week":2,"Day":"Sunday","Time":"PT2H"}]},{"Id":"13","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":4,"Week":3,"Day":"Sunday","Time":"PT3H"},{"Id":"2020-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":5,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"14","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":4,"Week":2,"Day":"Sunday","Time":"PT3H"},{"Id":"2021-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":5,"Week":3,"Day":"Sunday","Time":"PT2H"}]},{"Id":"15","Effective":1640995200,"Type":"Dynamic","Alterations":[{"Id":"2022-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2022-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":5,"Week":2,"Day":"Sunday","Time":"PT2H"}]},{"Id":"16","Effective":1672531200,"Type":"Dynamic","Alterations":[{"Id":"2023-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":3,"Week":3,"Day":"Sunday","Time":"PT3H"},{"Id":"2023-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":4,"Week":4,"Day":"Sunday","Time":"PT2H"}]},{"Id":"17","Effective":1704067200,"Type":"Dynamic","Alterations":[{"Id":"2024-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":3,"Week":2,"Day":"Sunday","Time":"PT3H"},{"Id":"2024-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":4,"Week":2,"Day":"Sunday","Time":"PT2H"}]},{"Id":"18","Effective":1735689600,"Type":"Dynamic","Alterations":[{"Id":"2025-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":2,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2025-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"19","Effective":1767225600,"Type":"Dynamic","Alterations":[{"Id":"2026-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":2,"Week":3,"Day":"Sunday","Time":"PT3H"},{"Id":"2026-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":3,"Week":4,"Day":"Sunday","Time":"PT2H"}]},{"Id":"20","Effective":1798761600,"Type":"Dynamic","Alterations":[{"Id":"2027-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":2,"Week":1,"Day":"Sunday","Time":"PT3H"},{"Id":"2027-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"}]},{"Id":"21","Effective":1830297600,"Type":"Dynamic","Alterations":[{"Id":"2028-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":1,"Week":4,"Day":"Sunday","Time":"PT3H"},{"Id":"2028-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":3,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"22","Effective":1861920000,"Type":"Dynamic","Alterations":[{"Id":"2029-Standard","Class":"Standard","Bias":0,"Period":"PT0H","Month":1,"Week":2,"Day":"Sunday","Time":"PT3H"},{"Id":"2029-Daylight","Class":"Daylight","Bias":-60,"Period":"-PT1H","Month":2,"Week":3,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Mountain Standard Time' => '{"Id":"Mountain Standard Time","Description":"(UTC-07:00) Mountain Time (US & Canada)","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":360,"Period":"PT6H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":420,"Period":"PT7H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":360,"Period":"PT6H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":420,"Period":"PT7H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Mountain Standard Time (Mexico)' => '{"Id":"Mountain Standard Time (Mexico)","Description":"(UTC-07:00) La Paz, Mazatlan","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2022-Daylight","Class":"Daylight","Bias":360,"Period":"PT6H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2022-Standard","Class":"Standard","Bias":420,"Period":"PT7H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1672531200,"Type":"Static","Alterations":[{"Id":"2023-Standard","Class":"Standard","Bias":420,"Period":"PT7H"}]}]}',
- 'Myanmar Standard Time' => '{"Id":"Myanmar Standard Time","Description":"(UTC+06:30) Yangon (Rangoon)","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-390,"Period":"-PT6H30M"}]}]}',
- 'N. Central Asia Standard Time' => '{"Id":"N. Central Asia Standard Time","Description":"(UTC+07:00) Novosibirsk","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H"}]},{"Id":"6","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-360,"Period":"-PT6H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H","Month":7,"Week":4,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]}]}',
- 'Namibia Standard Time' => '{"Id":"Namibia Standard Time","Description":"(UTC+02:00) Windhoek","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-60,"Period":"-PT1H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2017-Daylight","Class":"Daylight","Bias":-120,"Period":"-PT2H","Month":9,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1514764800,"Type":"Static","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]}]}',
- 'Nepal Standard Time' => '{"Id":"Nepal Standard Time","Description":"(UTC+05:45) Kathmandu","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-345,"Period":"-PT5H45M"}]}]}',
- 'New Zealand Standard Time' => '{"Id":"New Zealand Standard Time","Description":"(UTC+12:00) Auckland, Wellington","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":3,"Week":3,"Day":"Sunday","Time":"PT3H"},{"Id":"2006-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":3,"Week":3,"Day":"Sunday","Time":"PT3H"},{"Id":"2007-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":9,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":4,"Week":1,"Day":"Sunday","Time":"PT3H"},{"Id":"2008-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":9,"Week":-1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Newfoundland Standard Time' => '{"Id":"Newfoundland Standard Time","Description":"(UTC-03:30) Newfoundland","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":150,"Period":"PT2H30M","Month":4,"Week":1,"Day":"Sunday","Time":"PT1M"},{"Id":"2006-Standard","Class":"Standard","Bias":210,"Period":"PT3H30M","Month":10,"Week":-1,"Day":"Sunday","Time":"PT1M"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":150,"Period":"PT2H30M","Month":3,"Week":2,"Day":"Sunday","Time":"PT1M"},{"Id":"2007-Standard","Class":"Standard","Bias":210,"Period":"PT3H30M","Month":11,"Week":1,"Day":"Sunday","Time":"PT1M"}]},{"Id":"2","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Daylight","Class":"Daylight","Bias":150,"Period":"PT2H30M","Month":3,"Week":2,"Day":"Sunday","Time":"PT1M"},{"Id":"2008-Standard","Class":"Standard","Bias":210,"Period":"PT3H30M","Month":11,"Week":1,"Day":"Sunday","Time":"PT1M"}]},{"Id":"3","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":150,"Period":"PT2H30M","Month":3,"Week":2,"Day":"Sunday","Time":"PT1M"},{"Id":"2009-Standard","Class":"Standard","Bias":210,"Period":"PT3H30M","Month":11,"Week":1,"Day":"Sunday","Time":"PT1M"}]},{"Id":"4","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":150,"Period":"PT2H30M","Month":3,"Week":2,"Day":"Sunday","Time":"PT1M"},{"Id":"2010-Standard","Class":"Standard","Bias":210,"Period":"PT3H30M","Month":11,"Week":1,"Day":"Sunday","Time":"PT1M"}]},{"Id":"5","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":150,"Period":"PT2H30M","Month":3,"Week":2,"Day":"Sunday","Time":"PT1M"},{"Id":"2011-Standard","Class":"Standard","Bias":210,"Period":"PT3H30M","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"6","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":150,"Period":"PT2H30M","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2012-Standard","Class":"Standard","Bias":210,"Period":"PT3H30M","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Norfolk Standard Time' => '{"Id":"Norfolk Standard Time","Description":"(UTC+11:00) Norfolk Island","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":-690,"Period":"-PT11H30M"}]},{"Id":"1","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-690,"Period":"-PT11H30M","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2015-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1451606400,"Type":"Static","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]},{"Id":"3","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]},{"Id":"4","Effective":1514764800,"Type":"Static","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]},{"Id":"5","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":1,"Week":1,"Day":"Tuesday","Time":"PT0H"},{"Id":"2019-Daylight","Class":"Daylight","Bias":-720,"Period":"-PT12H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"6","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":4,"Week":1,"Day":"Sunday","Time":"PT3H"},{"Id":"2020-Daylight","Class":"Daylight","Bias":-720,"Period":"-PT12H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'North Asia East Standard Time' => '{"Id":"North Asia East Standard Time","Description":"(UTC+08:00) Irkutsk","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-540,"Period":"-PT9H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-540,"Period":"-PT9H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-540,"Period":"-PT9H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]}]}',
- 'North Asia Standard Time' => '{"Id":"North Asia Standard Time","Description":"(UTC+07:00) Krasnoyarsk","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-480,"Period":"-PT8H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-480,"Period":"-PT8H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-480,"Period":"-PT8H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]}]}',
- 'North Korea Standard Time' => '{"Id":"North Korea Standard Time","Description":"(UTC+09:00) Pyongyang","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H"}]},{"Id":"1","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-540,"Period":"-PT9H","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2015-Standard","Class":"Standard","Bias":-510,"Period":"-PT8H30M","Month":8,"Week":2,"Day":"Friday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1451606400,"Type":"Static","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":-510,"Period":"-PT8H30M"}]},{"Id":"3","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-510,"Period":"-PT8H30M"}]},{"Id":"4","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":-510,"Period":"-PT8H30M","Month":1,"Week":1,"Day":"Monday","Time":"PT0H"},{"Id":"2018-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H","Month":5,"Week":1,"Day":"Friday","Time":"PT23H30M"}]},{"Id":"5","Effective":1546300800,"Type":"Static","Alterations":[{"Id":"2019-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H"}]}]}',
- 'Omsk Standard Time' => '{"Id":"Omsk Standard Time","Description":"(UTC+06:00) Omsk","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H"}]}]}',
- 'Pacific SA Standard Time' => '{"Id":"Pacific SA Standard Time","Description":"(UTC-04:00) Santiago","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2007-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"1","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2008-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2009-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2010-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"4","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":5,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2011-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":8,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"5","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2012-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"6","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2013-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"7","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2014-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"8","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]},{"Id":"9","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":5,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2016-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":8,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"10","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":5,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2017-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":8,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"11","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":5,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2018-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":8,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"12","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2019-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"13","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2020-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"14","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2021-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"15","Effective":1640995200,"Type":"Dynamic","Alterations":[{"Id":"2022-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2022-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"16","Effective":1672531200,"Type":"Dynamic","Alterations":[{"Id":"2023-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2023-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]}]}',
- 'Pacific Standard Time' => '{"Id":"Pacific Standard Time","Description":"(UTC-08:00) Pacific Time (US & Canada)","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Pacific Standard Time (Mexico)' => '{"Id":"Pacific Standard Time (Mexico)","Description":"(UTC-08:00) Baja California","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2009-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Pakistan Standard Time' => '{"Id":"Pakistan Standard Time","Description":"(UTC+05:00) Islamabad, Karachi","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H"}]},{"Id":"1","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Daylight","Class":"Daylight","Bias":-360,"Period":"-PT6H","Month":5,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2008-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H","Month":10,"Week":-1,"Day":"Friday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-360,"Period":"-PT6H","Month":4,"Week":2,"Day":"Tuesday","Time":"PT23H59M59.999S"},{"Id":"2009-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1262304000,"Type":"Static","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H"}]}]}',
- 'Paraguay Standard Time' => '{"Id":"Paraguay Standard Time","Description":"(UTC-04:00) Asuncion","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2008-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"1","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2009-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2010-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":2,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2011-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"4","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2012-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"5","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2013-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"6","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2014-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"7","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2015-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"8","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2016-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"9","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2017-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":9,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"10","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2018-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"11","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":4,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2019-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"12","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2020-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"13","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2021-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"14","Effective":1640995200,"Type":"Dynamic","Alterations":[{"Id":"2022-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT23H59M59.999S"},{"Id":"2022-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"15","Effective":1672531200,"Type":"Dynamic","Alterations":[{"Id":"2023-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":3,"Week":4,"Day":"Sunday","Time":"PT0H"},{"Id":"2023-Daylight","Class":"Daylight","Bias":180,"Period":"PT3H","Month":10,"Week":1,"Day":"Sunday","Time":"PT0H"}]}]}',
- 'Qyzylorda Standard Time' => '{"Id":"Qyzylorda Standard Time","Description":"(UTC+05:00) Qyzylorda","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H"}]},{"Id":"1","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":-360,"Period":"-PT6H","Month":1,"Week":1,"Day":"Monday","Time":"PT0H"},{"Id":"2018-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H","Month":12,"Week":3,"Day":"Friday","Time":"PT0H"}]},{"Id":"2","Effective":1546300800,"Type":"Static","Alterations":[{"Id":"2019-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H"}]}]}',
- 'Romance Standard Time' => '{"Id":"Romance Standard Time","Description":"(UTC+01:00) Brussels, Copenhagen, Madrid, Paris","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":-120,"Period":"-PT2H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"1-Standard","Class":"Standard","Bias":-60,"Period":"-PT1H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]}]}',
- 'Russia Time Zone 10' => '{"Id":"Russia Time Zone 10","Description":"(UTC+11:00) Chokurdakh","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-720,"Period":"-PT12H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-720,"Period":"-PT12H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-720,"Period":"-PT12H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]}]}',
- 'Russia Time Zone 11' => '{"Id":"Russia Time Zone 11","Description":"(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-780,"Period":"-PT13H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2009-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-720,"Period":"-PT12H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2010-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"2","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-720,"Period":"-PT12H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"3","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H"}]}]}',
- 'Russia Time Zone 3' => '{"Id":"Russia Time Zone 3","Description":"(UTC+04:00) Izhevsk, Samara","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-300,"Period":"-PT5H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2009-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2010-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"2","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"3","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]}]}',
- 'Russian Standard Time' => '{"Id":"Russian Standard Time","Description":"(UTC+03:00) Moscow, St. Petersburg","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]}]}',
- 'SA Eastern Standard Time' => '{"Id":"SA Eastern Standard Time","Description":"(UTC-03:00) Cayenne, Fortaleza","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]}]}',
- 'SA Pacific Standard Time' => '{"Id":"SA Pacific Standard Time","Description":"(UTC-05:00) Bogota, Lima, Quito, Rio Branco","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":300,"Period":"PT5H"}]}]}',
- 'SA Western Standard Time' => '{"Id":"SA Western Standard Time","Description":"(UTC-04:00) Georgetown, La Paz, Manaus, San Juan","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":240,"Period":"PT4H"}]}]}',
- 'SE Asia Standard Time' => '{"Id":"SE Asia Standard Time","Description":"(UTC+07:00) Bangkok, Hanoi, Jakarta","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]}]}',
- 'Saint Pierre Standard Time' => '{"Id":"Saint Pierre Standard Time","Description":"(UTC-03:00) Saint Pierre and Miquelon","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Sakhalin Standard Time' => '{"Id":"Sakhalin Standard Time","Description":"(UTC+11:00) Sakhalin","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H"}]},{"Id":"6","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-600,"Period":"-PT10H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]}]}',
- 'Samoa Standard Time' => '{"Id":"Samoa Standard Time","Description":"(UTC+13:00) Samoa","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":660,"Period":"PT11H"}]},{"Id":"1","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":660,"Period":"PT11H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2010-Daylight","Class":"Daylight","Bias":600,"Period":"PT10H","Month":9,"Week":-1,"Day":"Sunday","Time":"PT0H"}]},{"Id":"2","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":660,"Period":"PT11H","Month":4,"Week":1,"Day":"Saturday","Time":"PT4H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":600,"Period":"PT10H","Month":9,"Week":4,"Day":"Saturday","Time":"PT3H"}]},{"Id":"3","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-780,"Period":"-PT13H","Month":4,"Week":1,"Day":"Sunday","Time":"PT4H"},{"Id":"2012-Daylight","Class":"Daylight","Bias":-840,"Period":"-PT14H","Month":9,"Week":-1,"Day":"Sunday","Time":"PT3H"}]}]}',
- 'Saratov Standard Time' => '{"Id":"Saratov Standard Time","Description":"(UTC+04:00) Saratov","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]},{"Id":"6","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H","Month":12,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]}]}',
- 'Singapore Standard Time' => '{"Id":"Singapore Standard Time","Description":"(UTC+08:00) Kuala Lumpur, Singapore","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]}]}',
- 'South Africa Standard Time' => '{"Id":"South Africa Standard Time","Description":"(UTC+02:00) Harare, Pretoria","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]}]}',
- 'South Sudan Standard Time' => '{"Id":"South Sudan Standard Time","Description":"(UTC+02:00) Juba","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]},{"Id":"1","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2021-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":1,"Week":-1,"Day":"Sunday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1640995200,"Type":"Static","Alterations":[{"Id":"2022-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]}]}',
- 'Sri Lanka Standard Time' => '{"Id":"Sri Lanka Standard Time","Description":"(UTC+05:30) Sri Jayawardenepura","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-330,"Period":"-PT5H30M"}]}]}',
- 'Sudan Standard Time' => '{"Id":"Sudan Standard Time","Description":"(UTC+02:00) Khartoum","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]},{"Id":"1","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Sunday","Time":"PT0H"},{"Id":"2017-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Tuesday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1514764800,"Type":"Static","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H"}]}]}',
- 'Syria Standard Time' => '{"Id":"Syria Standard Time","Description":"(UTC+02:00) Damascus","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2004-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2004-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"1","Effective":1104537600,"Type":"Dynamic","Alterations":[{"Id":"2005-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2005-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":-1,"Day":"Friday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2006-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":3,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2007-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":11,"Week":1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"4","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2008-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Friday","Time":"PT23H59M59.999S"}]},{"Id":"5","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2009-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"6","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2010-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"7","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":4,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2011-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"8","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2012-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"9","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2013-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"10","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"11","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2015-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"12","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"13","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2017-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"14","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2018-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"15","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2019-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"16","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2020-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"17","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2021-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"18","Effective":1640995200,"Type":"Dynamic","Alterations":[{"Id":"2022-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2022-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"19","Effective":1672531200,"Type":"Dynamic","Alterations":[{"Id":"2023-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2023-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"20","Effective":1704067200,"Type":"Dynamic","Alterations":[{"Id":"2024-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2024-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Friday","Time":"PT0H"}]}]}',
- 'Taipei Standard Time' => '{"Id":"Taipei Standard Time","Description":"(UTC+08:00) Taipei","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]}]}',
- 'Tasmania Standard Time' => '{"Id":"Tasmania Standard Time","Description":"(UTC+10:00) Hobart","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2007-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":4,"Week":1,"Day":"Sunday","Time":"PT3H"},{"Id":"2008-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":10,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'Tocantins Standard Time' => '{"Id":"Tocantins Standard Time","Description":"(UTC-03:00) Araguaina","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]},{"Id":"1","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":1,"Week":1,"Day":"Sunday","Time":"PT0H"},{"Id":"2012-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":10,"Week":3,"Day":"Sunday","Time":"PT0H"}]},{"Id":"2","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":120,"Period":"PT2H","Month":1,"Week":1,"Day":"Tuesday","Time":"PT0H"},{"Id":"2013-Standard","Class":"Standard","Bias":180,"Period":"PT3H","Month":2,"Week":3,"Day":"Saturday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1388534400,"Type":"Static","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":180,"Period":"PT3H"}]}]}',
- 'Tokyo Standard Time' => '{"Id":"Tokyo Standard Time","Description":"(UTC+09:00) Osaka, Sapporo, Tokyo","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H"}]}]}',
- 'Tomsk Standard Time' => '{"Id":"Tomsk Standard Time","Description":"(UTC+07:00) Tomsk","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-420,"Period":"-PT7H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-360,"Period":"-PT6H"}]},{"Id":"6","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-360,"Period":"-PT6H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H","Month":5,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]}]}',
- 'Tonga Standard Time' => '{"Id":"Tonga Standard Time","Description":"(UTC+13:00) Nuku\'alofa","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-780,"Period":"-PT13H"}]},{"Id":"1","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":-780,"Period":"-PT13H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Daylight","Class":"Daylight","Bias":-840,"Period":"-PT14H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":-840,"Period":"-PT14H","Month":1,"Week":1,"Day":"Sunday","Time":"PT0H"},{"Id":"2017-Standard","Class":"Standard","Bias":-780,"Period":"-PT13H","Month":1,"Week":3,"Day":"Sunday","Time":"PT3H"}]},{"Id":"3","Effective":1514764800,"Type":"Static","Alterations":[{"Id":"2018-Standard","Class":"Standard","Bias":-780,"Period":"-PT13H"}]}]}',
- 'Transbaikal Standard Time' => '{"Id":"Transbaikal Standard Time","Description":"(UTC+09:00) Chita","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-600,"Period":"-PT10H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-600,"Period":"-PT10H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-600,"Period":"-PT10H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]},{"Id":"6","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-480,"Period":"-PT8H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H"}]}]}',
- 'Turkey Standard Time' => '{"Id":"Turkey Standard Time","Description":"(UTC+03:00) Istanbul","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2010-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT4H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Monday","Time":"PT3H"},{"Id":"2011-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT4H"}]},{"Id":"2","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2012-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT4H"}]},{"Id":"3","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2013-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT4H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Monday","Time":"PT3H"},{"Id":"2014-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT4H"}]},{"Id":"5","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2015-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":11,"Week":2,"Day":"Sunday","Time":"PT4H"}]},{"Id":"6","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-120,"Period":"-PT2H","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"7","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]}]}',
- 'Turks And Caicos Standard Time' => '{"Id":"Turks And Caicos Standard Time","Description":"(UTC-05:00) Turks and Caicos","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2014-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2015-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1451606400,"Type":"Static","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":240,"Period":"PT4H"}]},{"Id":"3","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":240,"Period":"PT4H"}]},{"Id":"4","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2018-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2019-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'US Eastern Standard Time' => '{"Id":"US Eastern Standard Time","Description":"(UTC-05:00) Indiana (East)","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2005-Standard","Class":"Standard","Bias":300,"Period":"PT5H"}]},{"Id":"1","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":300,"Period":"PT5H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]}]}',
- 'US Mountain Standard Time' => '{"Id":"US Mountain Standard Time","Description":"(UTC-07:00) Arizona","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":420,"Period":"PT7H"}]}]}',
- 'UTC' => '{"Id":"UTC","Description":"(UTC) Coordinated Universal Time","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":0,"Period":"PT0H"}]}]}',
- 'UTC+12' => '{"Id":"UTC+12","Description":"(UTC+12:00) Coordinated Universal Time+12","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-720,"Period":"-PT12H"}]}]}',
- 'UTC+13' => '{"Id":"UTC+13","Description":"(UTC+13:00) Coordinated Universal Time+13","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-780,"Period":"-PT13H"}]}]}',
- 'UTC-02' => '{"Id":"UTC-02","Description":"(UTC-02:00) Coordinated Universal Time-02","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":120,"Period":"PT2H"}]}]}',
- 'UTC-08' => '{"Id":"UTC-08","Description":"(UTC-08:00) Coordinated Universal Time-08","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":480,"Period":"PT8H"}]}]}',
- 'UTC-09' => '{"Id":"UTC-09","Description":"(UTC-09:00) Coordinated Universal Time-09","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":540,"Period":"PT9H"}]}]}',
- 'UTC-11' => '{"Id":"UTC-11","Description":"(UTC-11:00) Coordinated Universal Time-11","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":660,"Period":"PT11H"}]}]}',
- 'Ulaanbaatar Standard Time' => '{"Id":"Ulaanbaatar Standard Time","Description":"(UTC+08:00) Ulaanbaatar","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]},{"Id":"1","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-540,"Period":"-PT9H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT2H"},{"Id":"2015-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H","Month":9,"Week":-1,"Day":"Friday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-540,"Period":"-PT9H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT2H"},{"Id":"2016-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H","Month":9,"Week":4,"Day":"Friday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]}]}',
- 'Venezuela Standard Time' => '{"Id":"Venezuela Standard Time","Description":"(UTC-04:00) Caracas","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2006-Standard","Class":"Standard","Bias":240,"Period":"PT4H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":240,"Period":"PT4H","Month":1,"Week":1,"Day":"Monday","Time":"PT0H"},{"Id":"2007-Standard","Class":"Standard","Bias":270,"Period":"PT4H30M","Month":12,"Week":2,"Day":"Sunday","Time":"PT3H"}]},{"Id":"2","Effective":1199145600,"Type":"Static","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":270,"Period":"PT4H30M"}]},{"Id":"3","Effective":1230768000,"Type":"Static","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":270,"Period":"PT4H30M"}]},{"Id":"4","Effective":1262304000,"Type":"Static","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":270,"Period":"PT4H30M"}]},{"Id":"5","Effective":1293840000,"Type":"Static","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":270,"Period":"PT4H30M"}]},{"Id":"6","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":270,"Period":"PT4H30M"}]},{"Id":"7","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":270,"Period":"PT4H30M"}]},{"Id":"8","Effective":1388534400,"Type":"Static","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":270,"Period":"PT4H30M"}]},{"Id":"9","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":270,"Period":"PT4H30M"}]},{"Id":"10","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":270,"Period":"PT4H30M","Month":1,"Week":1,"Day":"Friday","Time":"PT0H"},{"Id":"2016-Standard","Class":"Standard","Bias":240,"Period":"PT4H","Month":5,"Week":1,"Day":"Sunday","Time":"PT2H30M"}]},{"Id":"11","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":240,"Period":"PT4H"}]}]}',
- 'Vladivostok Standard Time' => '{"Id":"Vladivostok Standard Time","Description":"(UTC+10:00) Vladivostok","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-660,"Period":"-PT11H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-660,"Period":"-PT11H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H"}]}]}',
- 'Volgograd Standard Time' => '{"Id":"Volgograd Standard Time","Description":"(UTC+03:00) Volgograd","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-240,"Period":"-PT4H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]},{"Id":"6","Effective":1451606400,"Type":"Static","Alterations":[{"Id":"2016-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]},{"Id":"7","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]},{"Id":"8","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":1,"Week":1,"Day":"Monday","Time":"PT0H"},{"Id":"2018-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"9","Effective":1546300800,"Type":"Static","Alterations":[{"Id":"2019-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H"}]},{"Id":"10","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Daylight","Class":"Daylight","Bias":-300,"Period":"-PT5H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2020-Standard","Class":"Standard","Bias":-240,"Period":"-PT4H","Month":12,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"11","Effective":1609459200,"Type":"Static","Alterations":[{"Id":"2021-Standard","Class":"Standard","Bias":-180,"Period":"-PT3H"}]}]}',
- 'W. Australia Standard Time' => '{"Id":"W. Australia Standard Time","Description":"(UTC+08:00) Perth","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"2005-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]},{"Id":"1","Effective":1136073600,"Type":"Dynamic","Alterations":[{"Id":"2006-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H","Month":1,"Week":1,"Day":"Sunday","Time":"PT0H"},{"Id":"2006-Daylight","Class":"Daylight","Bias":-540,"Period":"-PT9H","Month":12,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2007-Daylight","Class":"Daylight","Bias":-540,"Period":"-PT9H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"3","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"},{"Id":"2008-Daylight","Class":"Daylight","Bias":-540,"Period":"-PT9H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"4","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":-540,"Period":"-PT9H","Month":1,"Week":1,"Day":"Thursday","Time":"PT0H"},{"Id":"2009-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"5","Effective":1262304000,"Type":"Static","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":-480,"Period":"-PT8H"}]}]}',
- 'W. Central Africa Standard Time' => '{"Id":"W. Central Africa Standard Time","Description":"(UTC+01:00) West Central Africa","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-60,"Period":"-PT1H"}]}]}',
- 'W. Europe Standard Time' => '{"Id":"W. Europe Standard Time","Description":"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"1-Daylight","Class":"Daylight","Bias":-120,"Period":"-PT2H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"1-Standard","Class":"Standard","Bias":-60,"Period":"-PT1H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]}]}',
- 'W. Mongolia Standard Time' => '{"Id":"W. Mongolia Standard Time","Description":"(UTC+07:00) Hovd","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":-480,"Period":"-PT8H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H","Month":9,"Week":-1,"Day":"Saturday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Static","Alterations":[{"Id":"2007-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"2","Effective":1199145600,"Type":"Static","Alterations":[{"Id":"2008-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"3","Effective":1230768000,"Type":"Static","Alterations":[{"Id":"2009-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"4","Effective":1262304000,"Type":"Static","Alterations":[{"Id":"2010-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"5","Effective":1293840000,"Type":"Static","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"6","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"7","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"8","Effective":1388534400,"Type":"Static","Alterations":[{"Id":"2014-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]},{"Id":"9","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-480,"Period":"-PT8H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT2H"},{"Id":"2015-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H","Month":9,"Week":-1,"Day":"Friday","Time":"PT23H59M59.999S"}]},{"Id":"10","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-480,"Period":"-PT8H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT2H"},{"Id":"2016-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H","Month":9,"Week":4,"Day":"Friday","Time":"PT23H59M59.999S"}]},{"Id":"11","Effective":1483228800,"Type":"Static","Alterations":[{"Id":"2017-Standard","Class":"Standard","Bias":-420,"Period":"-PT7H"}]}]}',
- 'West Asia Standard Time' => '{"Id":"West Asia Standard Time","Description":"(UTC+05:00) Ashgabat, Toshkent","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-300,"Period":"-PT5H"}]}]}',
- 'West Bank Standard Time' => '{"Id":"West Bank Standard Time","Description":"(UTC+02:00) Gaza, Hebron","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2012-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":3,"Day":"Friday","Time":"PT1H"}]},{"Id":"1","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2013-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":9,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"2","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Thursday","Time":"PT23H59M59.999S"},{"Id":"2014-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Thursday","Time":"PT23H59M59.999S"}]},{"Id":"3","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT0H"},{"Id":"2015-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Friday","Time":"PT1H"}]},{"Id":"4","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT1H"},{"Id":"2016-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"5","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT1H"},{"Id":"2017-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"6","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":4,"Day":"Saturday","Time":"PT1H"},{"Id":"2018-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"7","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Friday","Time":"PT0H"},{"Id":"2019-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Saturday","Time":"PT0H"}]},{"Id":"8","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":4,"Day":"Saturday","Time":"PT0H"},{"Id":"2020-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Saturday","Time":"PT1H"}]},{"Id":"9","Effective":1609459200,"Type":"Dynamic","Alterations":[{"Id":"2021-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT0H"},{"Id":"2021-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"10","Effective":1640995200,"Type":"Dynamic","Alterations":[{"Id":"2022-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT0H"},{"Id":"2022-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"11","Effective":1672531200,"Type":"Dynamic","Alterations":[{"Id":"2023-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT0H"},{"Id":"2023-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"12","Effective":1704067200,"Type":"Dynamic","Alterations":[{"Id":"2024-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT0H"},{"Id":"2024-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"13","Effective":1735689600,"Type":"Dynamic","Alterations":[{"Id":"2025-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT0H"},{"Id":"2025-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"14","Effective":1767225600,"Type":"Dynamic","Alterations":[{"Id":"2026-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT0H"},{"Id":"2026-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":4,"Day":"Saturday","Time":"PT1H"}]},{"Id":"15","Effective":1798761600,"Type":"Dynamic","Alterations":[{"Id":"2027-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT0H"},{"Id":"2027-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"16","Effective":1830297600,"Type":"Dynamic","Alterations":[{"Id":"2028-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT0H"},{"Id":"2028-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"17","Effective":1861920000,"Type":"Dynamic","Alterations":[{"Id":"2029-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":4,"Day":"Saturday","Time":"PT0H"},{"Id":"2029-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]},{"Id":"18","Effective":1893456000,"Type":"Dynamic","Alterations":[{"Id":"2030-Daylight","Class":"Daylight","Bias":-180,"Period":"-PT3H","Month":3,"Week":-1,"Day":"Saturday","Time":"PT0H"},{"Id":"2030-Standard","Class":"Standard","Bias":-120,"Period":"-PT2H","Month":10,"Week":-1,"Day":"Saturday","Time":"PT1H"}]}]}',
- 'West Pacific Standard Time' => '{"Id":"West Pacific Standard Time","Description":"(UTC+10:00) Guam, Port Moresby","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Static","Alterations":[{"Id":"1-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H"}]}]}',
- 'Yakutsk Standard Time' => '{"Id":"Yakutsk Standard Time","Description":"(UTC+09:00) Yakutsk","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":-600,"Period":"-PT10H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT3H"}]},{"Id":"1","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H","Month":1,"Week":1,"Day":"Saturday","Time":"PT0H"},{"Id":"2011-Daylight","Class":"Daylight","Bias":-600,"Period":"-PT10H","Month":3,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1325376000,"Type":"Static","Alterations":[{"Id":"2012-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H"}]},{"Id":"3","Effective":1356998400,"Type":"Static","Alterations":[{"Id":"2013-Standard","Class":"Standard","Bias":-600,"Period":"-PT10H"}]},{"Id":"4","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":-600,"Period":"-PT10H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2014-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1420070400,"Type":"Static","Alterations":[{"Id":"2015-Standard","Class":"Standard","Bias":-540,"Period":"-PT9H"}]}]}',
- 'Yukon Standard Time' => '{"Id":"Yukon Standard Time","Description":"(UTC-07:00) Yukon","Mutations":[{"Id":"0","Effective":-2147483648,"Type":"Dynamic","Alterations":[{"Id":"2006-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":4,"Week":1,"Day":"Sunday","Time":"PT2H"},{"Id":"2006-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":10,"Week":-1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"1","Effective":1167609600,"Type":"Dynamic","Alterations":[{"Id":"2007-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2007-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"2","Effective":1199145600,"Type":"Dynamic","Alterations":[{"Id":"2008-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2008-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"3","Effective":1230768000,"Type":"Dynamic","Alterations":[{"Id":"2009-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2009-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"4","Effective":1262304000,"Type":"Dynamic","Alterations":[{"Id":"2010-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2010-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"5","Effective":1293840000,"Type":"Dynamic","Alterations":[{"Id":"2011-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2011-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"6","Effective":1325376000,"Type":"Dynamic","Alterations":[{"Id":"2012-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2012-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"7","Effective":1356998400,"Type":"Dynamic","Alterations":[{"Id":"2013-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2013-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"8","Effective":1388534400,"Type":"Dynamic","Alterations":[{"Id":"2014-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2014-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"9","Effective":1420070400,"Type":"Dynamic","Alterations":[{"Id":"2015-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2015-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"10","Effective":1451606400,"Type":"Dynamic","Alterations":[{"Id":"2016-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2016-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"11","Effective":1483228800,"Type":"Dynamic","Alterations":[{"Id":"2017-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2017-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"12","Effective":1514764800,"Type":"Dynamic","Alterations":[{"Id":"2018-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2018-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"13","Effective":1546300800,"Type":"Dynamic","Alterations":[{"Id":"2019-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"},{"Id":"2019-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":11,"Week":1,"Day":"Sunday","Time":"PT2H"}]},{"Id":"14","Effective":1577836800,"Type":"Dynamic","Alterations":[{"Id":"2020-Standard","Class":"Standard","Bias":480,"Period":"PT8H","Month":1,"Week":1,"Day":"Wednesday","Time":"PT0H"},{"Id":"2020-Daylight","Class":"Daylight","Bias":420,"Period":"PT7H","Month":3,"Week":2,"Day":"Sunday","Time":"PT2H"}]},{"Id":"15","Effective":1609459200,"Type":"Static","Alterations":[{"Id":"2021-Standard","Class":"Standard","Bias":420,"Period":"PT7H"}]}]}',
- ];
-
- /**
- * conversion table of IANA time zones to EAS (Microsoft/Windows) time zones
- * @var array $eastoiana
- */
- private static $ianatoeas = [
- 'Africa/Abidjan' => 'Greenwich Standard Time',
- 'Africa/Accra' => 'Greenwich Standard Time',
- 'Africa/Addis_Ababa' => 'E. Africa Standard Time',
- 'Africa/Algiers' => 'W. Central Africa Standard Time',
- 'Africa/Asmera' => 'E. Africa Standard Time',
- 'Africa/Bamako' => 'Greenwich Standard Time',
- 'Africa/Bangui' => 'W. Central Africa Standard Time',
- 'Africa/Banjul' => 'Greenwich Standard Time',
- 'Africa/Bissau' => 'Greenwich Standard Time',
- 'Africa/Blantyre' => 'South Africa Standard Time',
- 'Africa/Brazzaville' => 'W. Central Africa Standard Time',
- 'Africa/Bujumbura' => 'South Africa Standard Time',
- 'Africa/Cairo' => 'Egypt Standard Time',
- 'Africa/Casablanca' => 'Morocco Standard Time',
- 'Africa/Ceuta' => 'Romance Standard Time',
- 'Africa/Conakry' => 'Greenwich Standard Time',
- 'Africa/Dakar' => 'Greenwich Standard Time',
- 'Africa/Dar_es_Salaam' => 'E. Africa Standard Time',
- 'Africa/Djibouti' => 'E. Africa Standard Time',
- 'Africa/Douala' => 'W. Central Africa Standard Time',
- 'Africa/El_Aaiun' => 'Morocco Standard Time',
- 'Africa/Freetown' => 'Greenwich Standard Time',
- 'Africa/Gaborone' => 'South Africa Standard Time',
- 'Africa/Harare' => 'South Africa Standard Time',
- 'Africa/Johannesburg' => 'South Africa Standard Time',
- 'Africa/Juba' => 'South Sudan Standard Time',
- 'Africa/Kampala' => 'E. Africa Standard Time',
- 'Africa/Khartoum' => 'Sudan Standard Time',
- 'Africa/Kigali' => 'South Africa Standard Time',
- 'Africa/Kinshasa' => 'W. Central Africa Standard Time',
- 'Africa/Lagos' => 'W. Central Africa Standard Time',
- 'Africa/Libreville' => 'W. Central Africa Standard Time',
- 'Africa/Lome' => 'Greenwich Standard Time',
- 'Africa/Luanda' => 'W. Central Africa Standard Time',
- 'Africa/Lubumbashi' => 'South Africa Standard Time',
- 'Africa/Lusaka' => 'South Africa Standard Time',
- 'Africa/Malabo' => 'W. Central Africa Standard Time',
- 'Africa/Maputo' => 'South Africa Standard Time',
- 'Africa/Maseru' => 'South Africa Standard Time',
- 'Africa/Mbabane' => 'South Africa Standard Time',
- 'Africa/Mogadishu' => 'E. Africa Standard Time',
- 'Africa/Monrovia' => 'Greenwich Standard Time',
- 'Africa/Nairobi' => 'E. Africa Standard Time',
- 'Africa/Ndjamena' => 'W. Central Africa Standard Time',
- 'Africa/Niamey' => 'W. Central Africa Standard Time',
- 'Africa/Nouakchott' => 'Greenwich Standard Time',
- 'Africa/Ouagadougou' => 'Greenwich Standard Time',
- 'Africa/Porto-Novo' => 'W. Central Africa Standard Time',
- 'Africa/Sao_Tome' => 'Sao Tome Standard Time',
- 'Africa/Tripoli' => 'Libya Standard Time',
- 'Africa/Tunis' => 'W. Central Africa Standard Time',
- 'Africa/Windhoek' => 'Namibia Standard Time',
- 'America/Adak' => 'Aleutian Standard Time',
- 'America/Anchorage' => 'Alaskan Standard Time',
- 'America/Anguilla' => 'SA Western Standard Time',
- 'America/Antigua' => 'SA Western Standard Time',
- 'America/Araguaina' => 'Tocantins Standard Time',
- 'America/Argentina/La_Rioja' => 'Argentina Standard Time',
- 'America/Argentina/Rio_Gallegos' => 'Argentina Standard Time',
- 'America/Argentina/Salta' => 'Argentina Standard Time',
- 'America/Argentina/San_Juan' => 'Argentina Standard Time',
- 'America/Argentina/San_Luis' => 'Argentina Standard Time',
- 'America/Argentina/Tucuman' => 'Argentina Standard Time',
- 'America/Argentina/Ushuaia' => 'Argentina Standard Time',
- 'America/Aruba' => 'SA Western Standard Time',
- 'America/Asuncion' => 'Paraguay Standard Time',
- 'America/Bahia' => 'Bahia Standard Time',
- 'America/Bahia_Banderas' => 'Central Standard Time (Mexico)',
- 'America/Barbados' => 'SA Western Standard Time',
- 'America/Belem' => 'SA Eastern Standard Time',
- 'America/Belize' => 'Central America Standard Time',
- 'America/Blanc-Sablon' => 'SA Western Standard Time',
- 'America/Boa_Vista' => 'SA Western Standard Time',
- 'America/Bogota' => 'SA Pacific Standard Time',
- 'America/Boise' => 'Mountain Standard Time',
- 'America/Buenos_Aires' => 'Argentina Standard Time',
- 'America/Cambridge_Bay' => 'Mountain Standard Time',
- 'America/Campo_Grande' => 'Central Brazilian Standard Time',
- 'America/Cancun' => 'Eastern Standard Time (Mexico)',
- 'America/Caracas' => 'Venezuela Standard Time',
- 'America/Catamarca' => 'Argentina Standard Time',
- 'America/Cayenne' => 'SA Eastern Standard Time',
- 'America/Cayman' => 'SA Pacific Standard Time',
- 'America/Chicago' => 'Central Standard Time',
- 'America/Chihuahua' => 'Mountain Standard Time (Mexico)',
- 'America/Coral_Harbour' => 'SA Pacific Standard Time',
- 'America/Cordoba' => 'Argentina Standard Time',
- 'America/Costa_Rica' => 'Central America Standard Time',
- 'America/Creston' => 'US Mountain Standard Time',
- 'America/Cuiaba' => 'Central Brazilian Standard Time',
- 'America/Curacao' => 'SA Western Standard Time',
- 'America/Danmarkshavn' => 'GMT Standard Time',
- 'America/Dawson' => 'Pacific Standard Time',
- 'America/Dawson_Creek' => 'US Mountain Standard Time',
- 'America/Denver' => 'Mountain Standard Time',
- 'America/Detroit' => 'Eastern Standard Time',
- 'America/Dominica' => 'SA Western Standard Time',
- 'America/Edmonton' => 'Mountain Standard Time',
- 'America/Eirunepe' => 'SA Pacific Standard Time',
- 'America/El_Salvador' => 'Central America Standard Time',
- 'America/Fort_Nelson' => 'US Mountain Standard Time',
- 'America/Fortaleza' => 'SA Eastern Standard Time',
- 'America/Glace_Bay' => 'Atlantic Standard Time',
- 'America/Godthab' => 'Greenland Standard Time',
- 'America/Goose_Bay' => 'Atlantic Standard Time',
- 'America/Grand_Turk' => 'Turks And Caicos Standard Time',
- 'America/Grenada' => 'SA Western Standard Time',
- 'America/Guadeloupe' => 'SA Western Standard Time',
- 'America/Guatemala' => 'Central America Standard Time',
- 'America/Guayaquil' => 'SA Pacific Standard Time',
- 'America/Guyana' => 'SA Western Standard Time',
- 'America/Halifax' => 'Atlantic Standard Time',
- 'America/Havana' => 'Cuba Standard Time',
- 'America/Hermosillo' => 'US Mountain Standard Time',
- 'America/Indiana/Knox' => 'Central Standard Time',
- 'America/Indiana/Marengo' => 'US Eastern Standard Time',
- 'America/Indiana/Petersburg' => 'Eastern Standard Time',
- 'America/Indiana/Tell_City' => 'Central Standard Time',
- 'America/Indiana/Vevay' => 'US Eastern Standard Time',
- 'America/Indiana/Vincennes' => 'Eastern Standard Time',
- 'America/Indiana/Winamac' => 'Eastern Standard Time',
- 'America/Indianapolis' => 'US Eastern Standard Time',
- 'America/Inuvik' => 'Mountain Standard Time',
- 'America/Iqaluit' => 'Eastern Standard Time',
- 'America/Jamaica' => 'SA Pacific Standard Time',
- 'America/Jujuy' => 'Argentina Standard Time',
- 'America/Juneau' => 'Alaskan Standard Time',
- 'America/Kentucky/Monticello' => 'Eastern Standard Time',
- 'America/Kralendijk' => 'SA Western Standard Time',
- 'America/La_Paz' => 'SA Western Standard Time',
- 'America/Lima' => 'SA Pacific Standard Time',
- 'America/Los_Angeles' => 'Pacific Standard Time',
- 'America/Louisville' => 'Eastern Standard Time',
- 'America/Lower_Princes' => 'SA Western Standard Time',
- 'America/Maceio' => 'SA Eastern Standard Time',
- 'America/Managua' => 'Central America Standard Time',
- 'America/Manaus' => 'SA Western Standard Time',
- 'America/Marigot' => 'SA Western Standard Time',
- 'America/Martinique' => 'SA Western Standard Time',
- 'America/Matamoros' => 'Central Standard Time',
- 'America/Mazatlan' => 'Mountain Standard Time (Mexico)',
- 'America/Mendoza' => 'Argentina Standard Time',
- 'America/Menominee' => 'Central Standard Time',
- 'America/Merida' => 'Central Standard Time (Mexico)',
- 'America/Metlakatla' => 'Alaskan Standard Time',
- 'America/Mexico_City' => 'Central Standard Time (Mexico)',
- 'America/Miquelon' => 'Saint Pierre Standard Time',
- 'America/Moncton' => 'Atlantic Standard Time',
- 'America/Monterrey' => 'Central Standard Time (Mexico)',
- 'America/Montevideo' => 'Montevideo Standard Time',
- 'America/Montreal' => 'Eastern Standard Time',
- 'America/Montserrat' => 'SA Western Standard Time',
- 'America/Nassau' => 'Eastern Standard Time',
- 'America/New_York' => 'Eastern Standard Time',
- 'America/Nipigon' => 'Eastern Standard Time',
- 'America/Nome' => 'Alaskan Standard Time',
- 'America/Noronha' => 'Mid-Atlantic Standard Time',
- 'America/North_Dakota/Beulah' => 'Central Standard Time',
- 'America/North_Dakota/Center' => 'Central Standard Time',
- 'America/North_Dakota/New_Salem' => 'Central Standard Time',
- 'America/Ojinaga' => 'Mountain Standard Time',
- 'America/Panama' => 'SA Pacific Standard Time',
- 'America/Pangnirtung' => 'Eastern Standard Time',
- 'America/Paramaribo' => 'SA Eastern Standard Time',
- 'America/Phoenix' => 'US Mountain Standard Time',
- 'America/Port_of_Spain' => 'SA Western Standard Time',
- 'America/Port-au-Prince' => 'Haiti Standard Time',
- 'America/Porto_Velho' => 'SA Western Standard Time',
- 'America/Puerto_Rico' => 'SA Western Standard Time',
- 'America/Punta_Arenas' => 'Magallanes Standard Time',
- 'America/Rainy_River' => 'Central Standard Time',
- 'America/Rankin_Inlet' => 'Central Standard Time',
- 'America/Recife' => 'SA Eastern Standard Time',
- 'America/Regina' => 'Canada Central Standard Time',
- 'America/Resolute' => 'Central Standard Time',
- 'America/Rio_Branco' => 'SA Pacific Standard Time',
- 'America/Santa_Isabel' => 'Pacific Standard Time (Mexico)',
- 'America/Santarem' => 'SA Eastern Standard Time',
- 'America/Santiago' => 'Pacific SA Standard Time',
- 'America/Santo_Domingo' => 'SA Western Standard Time',
- 'America/Sao_Paulo' => 'E. South America Standard Time',
- 'America/Scoresbysund' => 'Azores Standard Time',
- 'America/Sitka' => 'Alaskan Standard Time',
- 'America/St_Barthelemy' => 'SA Western Standard Time',
- 'America/St_Johns' => 'Newfoundland Standard Time',
- 'America/St_Kitts' => 'SA Western Standard Time',
- 'America/St_Lucia' => 'SA Western Standard Time',
- 'America/St_Thomas' => 'SA Western Standard Time',
- 'America/St_Vincent' => 'SA Western Standard Time',
- 'America/Swift_Current' => 'Canada Central Standard Time',
- 'America/Tegucigalpa' => 'Central America Standard Time',
- 'America/Thule' => 'Atlantic Standard Time',
- 'America/Thunder_Bay' => 'Eastern Standard Time',
- 'America/Tijuana' => 'Pacific Standard Time (Mexico)',
- 'America/Toronto' => 'Eastern Standard Time',
- 'America/Tortola' => 'SA Western Standard Time',
- 'America/Vancouver' => 'Pacific Standard Time',
- 'America/Whitehorse' => 'Pacific Standard Time',
- 'America/Winnipeg' => 'Central Standard Time',
- 'America/Yakutat' => 'Alaskan Standard Time',
- 'America/Yellowknife' => 'Mountain Standard Time',
- 'Antarctica/Casey' => 'Singapore Standard Time',
- 'Antarctica/Davis' => 'SE Asia Standard Time',
- 'Antarctica/DumontDUrville' => 'West Pacific Standard Time',
- 'Antarctica/Macquarie' => 'Central Pacific Standard Time',
- 'Antarctica/Mawson' => 'West Asia Standard Time',
- 'Antarctica/McMurdo' => 'New Zealand Standard Time',
- 'Antarctica/Palmer' => 'SA Eastern Standard Time',
- 'Antarctica/Rothera' => 'SA Eastern Standard Time',
- 'Antarctica/Syowa' => 'E. Africa Standard Time',
- 'Antarctica/Vostok' => 'Central Asia Standard Time',
- 'Arctic/Longyearbyen' => 'W. Europe Standard Time',
- 'Asia/Aden' => 'Arab Standard Time',
- 'Asia/Almaty' => 'Central Asia Standard Time',
- 'Asia/Amman' => 'Jordan Standard Time',
- 'Asia/Anadyr' => 'Kamchatka Standard Time',
- 'Asia/Aqtau' => 'West Asia Standard Time',
- 'Asia/Aqtobe' => 'West Asia Standard Time',
- 'Asia/Ashgabat' => 'West Asia Standard Time',
- 'Asia/Atyrau' => 'West Asia Standard Time',
- 'Asia/Baghdad' => 'Arabic Standard Time',
- 'Asia/Bahrain' => 'Arab Standard Time',
- 'Asia/Baku' => 'Azerbaijan Standard Time',
- 'Asia/Bangkok' => 'SE Asia Standard Time',
- 'Asia/Barnaul' => 'Altai Standard Time',
- 'Asia/Beirut' => 'Middle East Standard Time',
- 'Asia/Bishkek' => 'Central Asia Standard Time',
- 'Asia/Brunei' => 'Singapore Standard Time',
- 'Asia/Calcutta' => 'India Standard Time',
- 'Asia/Chita' => 'Transbaikal Standard Time',
- 'Asia/Choibalsan' => 'Ulaanbaatar Standard Time',
- 'Asia/Colombo' => 'Sri Lanka Standard Time',
- 'Asia/Damascus' => 'Syria Standard Time',
- 'Asia/Dhaka' => 'Bangladesh Standard Time',
- 'Asia/Dili' => 'Tokyo Standard Time',
- 'Asia/Dubai' => 'Arabian Standard Time',
- 'Asia/Dushanbe' => 'West Asia Standard Time',
- 'Asia/Famagusta' => 'GTB Standard Time',
- 'Asia/Gaza' => 'West Bank Standard Time',
- 'Asia/Hebron' => 'West Bank Standard Time',
- 'Asia/Hong_Kong' => 'China Standard Time',
- 'Asia/Hovd' => 'W. Mongolia Standard Time',
- 'Asia/Irkutsk' => 'North Asia East Standard Time',
- 'Asia/Jakarta' => 'SE Asia Standard Time',
- 'Asia/Jayapura' => 'Tokyo Standard Time',
- 'Asia/Jerusalem' => 'Israel Standard Time',
- 'Asia/Kabul' => 'Afghanistan Standard Time',
- 'Asia/Kamchatka' => 'Kamchatka Standard Time',
- 'Asia/Karachi' => 'Pakistan Standard Time',
- 'Asia/Katmandu' => 'Nepal Standard Time',
- 'Asia/Khandyga' => 'Yakutsk Standard Time',
- 'Asia/Krasnoyarsk' => 'North Asia Standard Time',
- 'Asia/Kuala_Lumpur' => 'Malaysia Standard Time',
- 'Asia/Kuching' => 'Malaysia Standard Time',
- 'Asia/Kuwait' => 'Arab Standard Time',
- 'Asia/Macau' => 'China Standard Time',
- 'Asia/Magadan' => 'Magadan Standard Time',
- 'Asia/Makassar' => 'Singapore Standard Time',
- 'Asia/Manila' => 'Singapore Standard Time',
- 'Asia/Muscat' => 'Arabian Standard Time',
- 'Asia/Nicosia' => 'GTB Standard Time',
- 'Asia/Novokuznetsk' => 'North Asia Standard Time',
- 'Asia/Novosibirsk' => 'N. Central Asia Standard Time',
- 'Asia/Omsk' => 'Omsk Standard Time',
- 'Asia/Oral' => 'West Asia Standard Time',
- 'Asia/Phnom_Penh' => 'SE Asia Standard Time',
- 'Asia/Pontianak' => 'SE Asia Standard Time',
- 'Asia/Pyongyang' => 'North Korea Standard Time',
- 'Asia/Qatar' => 'Arab Standard Time',
- 'Asia/Qostanay' => 'Central Asia Standard Time',
- 'Asia/Qyzylorda' => 'Qyzylorda Standard Time',
- 'Asia/Rangoon' => 'Myanmar Standard Time',
- 'Asia/Riyadh' => 'Arab Standard Time',
- 'Asia/Saigon' => 'SE Asia Standard Time',
- 'Asia/Sakhalin' => 'Sakhalin Standard Time',
- 'Asia/Samarkand' => 'West Asia Standard Time',
- 'Asia/Seoul' => 'Korea Standard Time',
- 'Asia/Shanghai' => 'China Standard Time',
- 'Asia/Singapore' => 'Singapore Standard Time',
- 'Asia/Srednekolymsk' => 'Russia Time Zone 10',
- 'Asia/Taipei' => 'Taipei Standard Time',
- 'Asia/Tashkent' => 'West Asia Standard Time',
- 'Asia/Tbilisi' => 'Georgian Standard Time',
- 'Asia/Tehran' => 'Iran Standard Time',
- 'Asia/Thimphu' => 'Bangladesh Standard Time',
- 'Asia/Tokyo' => 'Tokyo Standard Time',
- 'Asia/Tomsk' => 'Tomsk Standard Time',
- 'Asia/Ulaanbaatar' => 'Ulaanbaatar Standard Time',
- 'Asia/Urumqi' => 'Central Asia Standard Time',
- 'Asia/Ust-Nera' => 'Vladivostok Standard Time',
- 'Asia/Vientiane' => 'SE Asia Standard Time',
- 'Asia/Vladivostok' => 'Vladivostok Standard Time',
- 'Asia/Yakutsk' => 'Yakutsk Standard Time',
- 'Asia/Yekaterinburg' => 'Ekaterinburg Standard Time',
- 'Asia/Yerevan' => 'Caucasus Standard Time',
- 'Atlantic/Azores' => 'Azores Standard Time',
- 'Atlantic/Bermuda' => 'Atlantic Standard Time',
- 'Atlantic/Canary' => 'GMT Standard Time',
- 'Atlantic/Cape_Verde' => 'Cape Verde Standard Time',
- 'Atlantic/Faeroe' => 'GMT Standard Time',
- 'Atlantic/Madeira' => 'GMT Standard Time',
- 'Atlantic/Reykjavik' => 'Greenwich Standard Time',
- 'Atlantic/South_Georgia' => 'Mid-Atlantic Standard Time',
- 'Atlantic/St_Helena' => 'Greenwich Standard Time',
- 'Atlantic/Stanley' => 'SA Eastern Standard Time',
- 'Australia/Adelaide' => 'Cen. Australia Standard Time',
- 'Australia/Brisbane' => 'E. Australia Standard Time',
- 'Australia/Broken_Hill' => 'Cen. Australia Standard Time',
- 'Australia/Currie' => 'Tasmania Standard Time',
- 'Australia/Darwin' => 'AUS Central Standard Time',
- 'Australia/Eucla' => 'Aus Central W. Standard Time',
- 'Australia/Hobart' => 'Tasmania Standard Time',
- 'Australia/Lindeman' => 'E. Australia Standard Time',
- 'Australia/Lord_Howe' => 'Lord Howe Standard Time',
- 'Australia/Melbourne' => 'AUS Eastern Standard Time',
- 'Australia/Perth' => 'W. Australia Standard Time',
- 'Australia/Sydney' => 'AUS Eastern Standard Time',
- 'Europe/Amsterdam' => 'W. Europe Standard Time',
- 'Europe/Andorra' => 'W. Europe Standard Time',
- 'Europe/Astrakhan' => 'Astrakhan Standard Time',
- 'Europe/Athens' => 'GTB Standard Time',
- 'Europe/Belgrade' => 'Central Europe Standard Time',
- 'Europe/Berlin' => 'W. Europe Standard Time',
- 'Europe/Bratislava' => 'Central Europe Standard Time',
- 'Europe/Brussels' => 'Romance Standard Time',
- 'Europe/Bucharest' => 'GTB Standard Time',
- 'Europe/Budapest' => 'Central Europe Standard Time',
- 'Europe/Busingen' => 'W. Europe Standard Time',
- 'Europe/Chisinau' => 'E. Europe Standard Time',
- 'Europe/Copenhagen' => 'Romance Standard Time',
- 'Europe/Dublin' => 'GMT Standard Time',
- 'Europe/Gibraltar' => 'W. Europe Standard Time',
- 'Europe/Guernsey' => 'GMT Standard Time',
- 'Europe/Helsinki' => 'FLE Standard Time',
- 'Europe/Isle_of_Man' => 'GMT Standard Time',
- 'Europe/Istanbul' => 'Turkey Standard Time',
- 'Europe/Jersey' => 'GMT Standard Time',
- 'Europe/Kaliningrad' => 'Kaliningrad Standard Time',
- 'Europe/Kiev' => 'FLE Standard Time',
- 'Europe/Kirov' => 'Russian Standard Time',
- 'Europe/Lisbon' => 'GMT Standard Time',
- 'Europe/Ljubljana' => 'Central Europe Standard Time',
- 'Europe/London' => 'GMT Standard Time',
- 'Europe/Luxembourg' => 'W. Europe Standard Time',
- 'Europe/Madrid' => 'Romance Standard Time',
- 'Europe/Malta' => 'W. Europe Standard Time',
- 'Europe/Mariehamn' => 'FLE Standard Time',
- 'Europe/Minsk' => 'Belarus Standard Time',
- 'Europe/Monaco' => 'W. Europe Standard Time',
- 'Europe/Moscow' => 'Russian Standard Time',
- 'Europe/Oslo' => 'W. Europe Standard Time',
- 'Europe/Paris' => 'Romance Standard Time',
- 'Europe/Podgorica' => 'Central Europe Standard Time',
- 'Europe/Prague' => 'Central Europe Standard Time',
- 'Europe/Riga' => 'FLE Standard Time',
- 'Europe/Rome' => 'W. Europe Standard Time',
- 'Europe/Samara' => 'Russia Time Zone 3',
- 'Europe/San_Marino' => 'W. Europe Standard Time',
- 'Europe/Sarajevo' => 'Central European Standard Time',
- 'Europe/Saratov' => 'Saratov Standard Time',
- 'Europe/Simferopol' => 'Russian Standard Time',
- 'Europe/Skopje' => 'Central European Standard Time',
- 'Europe/Sofia' => 'FLE Standard Time',
- 'Europe/Stockholm' => 'W. Europe Standard Time',
- 'Europe/Tallinn' => 'FLE Standard Time',
- 'Europe/Tirane' => 'Central Europe Standard Time',
- 'Europe/Ulyanovsk' => 'Astrakhan Standard Time',
- 'Europe/Uzhgorod' => 'FLE Standard Time',
- 'Europe/Vaduz' => 'W. Europe Standard Time',
- 'Europe/Vatican' => 'W. Europe Standard Time',
- 'Europe/Vienna' => 'W. Europe Standard Time',
- 'Europe/Vilnius' => 'FLE Standard Time',
- 'Europe/Volgograd' => 'Volgograd Standard Time',
- 'Europe/Warsaw' => 'Central European Standard Time',
- 'Europe/Zagreb' => 'Central European Standard Time',
- 'Europe/Zaporozhye' => 'FLE Standard Time',
- 'Europe/Zurich' => 'W. Europe Standard Time',
- 'Indian/Antananarivo' => 'E. Africa Standard Time',
- 'Indian/Chagos' => 'Central Asia Standard Time',
- 'Indian/Christmas' => 'SE Asia Standard Time',
- 'Indian/Cocos' => 'Myanmar Standard Time',
- 'Indian/Comoro' => 'E. Africa Standard Time',
- 'Indian/Kerguelen' => 'West Asia Standard Time',
- 'Indian/Mahe' => 'Mauritius Standard Time',
- 'Indian/Maldives' => 'West Asia Standard Time',
- 'Indian/Mauritius' => 'Mauritius Standard Time',
- 'Indian/Mayotte' => 'E. Africa Standard Time',
- 'Indian/Reunion' => 'Mauritius Standard Time',
- 'Pacific/Apia' => 'Samoa Standard Time',
- 'Pacific/Auckland' => 'New Zealand Standard Time',
- 'Pacific/Bougainville' => 'Bougainville Standard Time',
- 'Pacific/Chatham' => 'Chatham Islands Standard Time',
- 'Pacific/Easter' => 'Easter Island Standard Time',
- 'Pacific/Efate' => 'Central Pacific Standard Time',
- 'Pacific/Enderbury' => 'UTC+13',
- 'Pacific/Fakaofo' => 'UTC+13',
- 'Pacific/Fiji' => 'Fiji Standard Time',
- 'Pacific/Funafuti' => 'UTC+12',
- 'Pacific/Galapagos' => 'Central America Standard Time',
- 'Pacific/Gambier' => 'UTC-09',
- 'Pacific/Guadalcanal' => 'Central Pacific Standard Time',
- 'Pacific/Guam' => 'West Pacific Standard Time',
- 'Pacific/Honolulu' => 'Hawaiian Standard Time',
- 'Pacific/Johnston' => 'Hawaiian Standard Time',
- 'Pacific/Kiritimati' => 'Line Islands Standard Time',
- 'Pacific/Kosrae' => 'Central Pacific Standard Time',
- 'Pacific/Kwajalein' => 'UTC+12',
- 'Pacific/Majuro' => 'UTC+12',
- 'Pacific/Marquesas' => 'Marquesas Standard Time',
- 'Pacific/Midway' => 'UTC-11',
- 'Pacific/Nauru' => 'UTC+12',
- 'Pacific/Niue' => 'UTC-11',
- 'Pacific/Norfolk' => 'Norfolk Standard Time',
- 'Pacific/Noumea' => 'Central Pacific Standard Time',
- 'Pacific/Pago_Pago' => 'UTC-11',
- 'Pacific/Palau' => 'Tokyo Standard Time',
- 'Pacific/Pitcairn' => 'UTC-08',
- 'Pacific/Ponape' => 'Central Pacific Standard Time',
- 'Pacific/Port_Moresby' => 'West Pacific Standard Time',
- 'Pacific/Rarotonga' => 'Hawaiian Standard Time',
- 'Pacific/Saipan' => 'West Pacific Standard Time',
- 'Pacific/Tahiti' => 'Hawaiian Standard Time',
- 'Pacific/Tarawa' => 'UTC+12',
- 'Pacific/Tongatapu' => 'Tonga Standard Time',
- 'Pacific/Truk' => 'West Pacific Standard Time',
- 'Pacific/Wake' => 'UTC+12',
- 'Pacific/Wallis' => 'UTC+12',
- 'Etc/GMT' => 'GMT Standard Time',
- 'Etc/GMT-1' => 'W. Central Africa Standard Time',
- 'Etc/GMT-10' => 'West Pacific Standard Time',
- 'Etc/GMT-11' => 'Central Pacific Standard Time',
- 'Etc/GMT-12' => 'UTC+12',
- 'Etc/GMT-13' => 'UTC+13',
- 'Etc/GMT-14' => 'Line Islands Standard Time',
- 'Etc/GMT-2' => 'South Africa Standard Time',
- 'Etc/GMT-3' => 'E. Africa Standard Time',
- 'Etc/GMT-4' => 'Arabian Standard Time',
- 'Etc/GMT-5' => 'West Asia Standard Time',
- 'Etc/GMT-6' => 'Central Asia Standard Time',
- 'Etc/GMT-7' => 'SE Asia Standard Time',
- 'Etc/GMT-8' => 'Singapore Standard Time',
- 'Etc/GMT-9' => 'Tokyo Standard Time',
- 'Etc/GMT+1' => 'Cape Verde Standard Time',
- 'Etc/GMT+10' => 'Hawaiian Standard Time',
- 'Etc/GMT+11' => 'UTC-11',
- 'Etc/GMT+12' => 'Dateline Standard Time',
- 'Etc/GMT+2' => 'Mid-Atlantic Standard Time',
- 'Etc/GMT+3' => 'SA Eastern Standard Time',
- 'Etc/GMT+4' => 'SA Western Standard Time',
- 'Etc/GMT+5' => 'SA Pacific Standard Time',
- 'Etc/GMT+6' => 'Central America Standard Time',
- 'Etc/GMT+7' => 'US Mountain Standard Time',
- 'Etc/GMT+8' => 'UTC-08',
- 'Etc/GMT+9' => 'UTC-09',
- 'Etc/UTC' => 'UTC',
- 'UTC' => 'UTC',
- 'Z' => 'UTC',
- ];
-
- /**
- * conversion table of EAS (Microsoft/Windows) time zones to IANA time zones
- * @var array $eastoiana
- */
- private static $eastoiana = [
- 'AUS Central Standard Time' => 'Australia/Darwin',
- 'Aus Central W. Standard Time' => 'Australia/Eucla',
- 'AUS Eastern Standard Time' => 'Australia/Sydney',
- 'Afghanistan Standard Time' => 'Asia/Kabul',
- 'Alaskan Standard Time' => 'America/Anchorage',
- 'Aleutian Standard Time' => 'America/Adak',
- 'Altai Standard Time' => 'Asia/Barnaul',
- 'Arab Standard Time' => 'Asia/Riyadh',
- 'Arabian Standard Time' => 'Asia/Dubai',
- 'Arabic Standard Time' => 'Asia/Baghdad',
- 'Argentina Standard Time' => 'America/Buenos_Aires',
- 'Astrakhan Standard Time' => 'Europe/Astrakhan',
- 'Atlantic Standard Time' => 'America/Halifax',
- 'Azerbaijan Standard Time' => 'Asia/Baku',
- 'Azores Standard Time' => 'Atlantic/Azores',
- 'Bahia Standard Time' => 'America/Bahia',
- 'Bangladesh Standard Time' => 'Asia/Dhaka',
- 'Belarus Standard Time' => 'Europe/Minsk',
- 'Bougainville Standard Time' => 'Pacific/Bougainville',
- 'Cape Verde Standard Time' => 'Atlantic/Cape_Verde',
- 'Canada Central Standard Time' => 'America/Regina',
- 'Caucasus Standard Time' => 'Asia/Yerevan',
- 'Cen. Australia Standard Time' => 'Australia/Adelaide',
- 'Central America Standard Time' => 'America/Guatemala',
- 'Central Asia Standard Time' => 'Asia/Almaty',
- 'Central Brazilian Standard Time' => 'America/Cuiaba',
- 'Central Europe Standard Time' => 'Europe/Budapest',
- 'Central European Standard Time' => 'Europe/Warsaw',
- 'Central Pacific Standard Time' => 'Pacific/Guadalcanal',
- 'Central Standard Time' => 'America/Chicago',
- 'Central Standard Time (Mexico)' => 'America/Mexico_City',
- 'Chatham Islands Standard Time' => 'Pacific/Chatham',
- 'China Standard Time' => 'Asia/Shanghai',
- 'Coordinated Universal Time' => 'UTC',
- 'Cuba Standard Time' => 'America/Havana',
- 'Dateline Standard Time' => 'Etc/GMT+12',
- 'E. Africa Standard Time' => 'Africa/Nairobi',
- 'E. Australia Standard Time' => 'Australia/Brisbane',
- 'E. Europe Standard Time' => 'Europe/Chisinau',
- 'E. South America Standard Time' => 'America/Sao_Paulo',
- 'Easter Island Standard Time' => 'Pacific/Easter',
- 'Eastern Standard Time' => 'America/Toronto',
- 'Eastern Standard Time (Mexico)' => 'America/Cancun',
- 'Egypt Standard Time' => 'Africa/Cairo',
- 'Ekaterinburg Standard Time' => 'Asia/Yekaterinburg',
- 'FLE Standard Time' => 'Europe/Kiev',
- 'Fiji Standard Time' => 'Pacific/Fiji',
- 'GMT Standard Time' => 'Europe/London',
- 'GTB Standard Time' => 'Europe/Bucharest',
- 'Georgian Standard Time' => 'Asia/Tbilisi',
- 'Greenland Standard Time' => 'America/Godthab',
- 'Greenland (Danmarkshavn)' => 'America/Godthab',
- 'Greenwich Standard Time' => 'Atlantic/Reykjavik',
- 'Haiti Standard Time' => 'America/Port-au-Prince',
- 'Hawaiian Standard Time' => 'Pacific/Honolulu',
- 'India Standard Time' => 'Asia/Calcutta',
- 'Iran Standard Time' => 'Asia/Tehran',
- 'Israel Standard Time' => 'Asia/Jerusalem',
- 'Jordan Standard Time' => 'Asia/Amman',
- 'Kaliningrad Standard Time' => 'Europe/Kaliningrad',
- 'Kamchatka Standard Time' => 'Asia/Kamchatka',
- 'Korea Standard Time' => 'Asia/Seoul',
- 'Libya Standard Time' => 'Africa/Tripoli',
- 'Line Islands Standard Time' => 'Pacific/Kiritimati',
- 'Lord Howe Standard Time' => 'Australia/Lord_Howe',
- 'Magadan Standard Time' => 'Asia/Magadan',
- 'Magallanes Standard Time' => 'America/Punta_Arenas',
- 'Malaysia Standard Time' => 'Asia/Kuala_Lumpur',
- 'Marquesas Standard Time' => 'Pacific/Marquesas',
- 'Mauritius Standard Time' => 'Indian/Mauritius',
- 'Mid-Atlantic Standard Time' => 'Atlantic/South_Georgia',
- 'Middle East Standard Time' => 'Asia/Beirut',
- 'Montevideo Standard Time' => 'America/Montevideo',
- 'Morocco Standard Time' => 'Africa/Casablanca',
- 'Mountain Standard Time' => 'America/Denver',
- 'Mountain Standard Time (Mexico)' => 'America/Chihuahua',
- 'Myanmar Standard Time' => 'Asia/Rangoon',
- 'N. Central Asia Standard Time' => 'Asia/Novosibirsk',
- 'Namibia Standard Time' => 'Africa/Windhoek',
- 'Nepal Standard Time' => 'Asia/Katmandu',
- 'New Zealand Standard Time' => 'Pacific/Auckland',
- 'Newfoundland Standard Time' => 'America/St_Johns',
- 'Norfolk Standard Time' => 'Pacific/Norfolk',
- 'North Asia East Standard Time' => 'Asia/Irkutsk',
- 'North Asia Standard Time' => 'Asia/Krasnoyarsk',
- 'North Korea Standard Time' => 'Asia/Pyongyang',
- 'Omsk Standard Time' => 'Asia/Omsk',
- 'Pacific SA Standard Time' => 'America/Santiago',
- 'Pacific Standard Time' => 'America/Los_Angeles',
- 'Pacific Standard Time (Mexico)' => 'America/Tijuana',
- 'Pakistan Standard Time' => 'Asia/Karachi',
- 'Paraguay Standard Time' => 'America/Asuncion',
- 'Qyzylorda Standard Time' => 'Asia/Qyzylorda',
- 'Romance Standard Time' => 'Europe/Paris',
- 'Russian Standard Time' => 'Europe/Moscow',
- 'Russia Time Zone 10' => 'Asia/Srednekolymsk',
- 'Kamchatka Standard Time' => 'Asia/Kamchatka',
- 'Russia Time Zone 3' => 'Europe/Samara',
- 'SA Eastern Standard Time' => 'America/Cayenne',
- 'SA Pacific Standard Time' => 'America/Bogota',
- 'SA Western Standard Time' => 'America/La_Paz',
- 'SE Asia Standard Time' => 'Asia/Bangkok',
- 'Saint Pierre Standard Time' => 'America/Miquelon',
- 'Sakhalin Standard Time' => 'Asia/Sakhalin',
- 'Samoa Standard Time' => 'Pacific/Apia',
- 'Sao Tome Standard Time' => 'Africa/Sao_Tome',
- 'Saratov Standard Time' => 'Europe/Saratov',
- 'Singapore Standard Time' => 'Asia/Singapore',
- 'South Africa Standard Time' => 'Africa/Johannesburg',
- 'South Sudan Standard Time' => 'Africa/Juba',
- 'Sri Lanka Standard Time' => 'Asia/Colombo',
- 'Sudan Standard Time' => 'Africa/Khartoum',
- 'Syria Standard Time' => 'Asia/Damascus',
- 'Taipei Standard Time' => 'Asia/Taipei',
- 'Tasmania Standard Time' => 'Australia/Hobart',
- 'Tocantins Standard Time' => 'America/Araguaina',
- 'Tokyo Standard Time' => 'Asia/Tokyo',
- 'Tomsk Standard Time' => 'Asia/Tomsk',
- 'Tonga Standard Time' => 'Pacific/Tongatapu',
- 'Transbaikal Standard Time' => 'Asia/Chita',
- 'Turkey Standard Time' => 'Europe/Istanbul',
- 'Turks And Caicos Standard Time' => 'America/Grand_Turk',
- 'US Eastern Standard Time' => 'America/Indianapolis',
- 'US Mountain Standard Time' => 'America/Phoenix',
- 'UTC' => 'Etc/GMT',
- 'UTC+13' => 'Etc/GMT-13',
- 'UTC+12' => 'Etc/GMT-12',
- 'UTC-02' => 'Etc/GMT+2',
- 'UTC-09' => 'Etc/GMT+9',
- 'UTC-11' => 'Etc/GMT+11',
- 'Ulaanbaatar Standard Time' => 'Asia/Ulaanbaatar',
- 'Venezuela Standard Time' => 'America/Caracas',
- 'Vladivostok Standard Time' => 'Asia/Vladivostok',
- 'Volgograd Standard Time' => 'Europe/Volgograd',
- 'W. Australia Standard Time' => 'Australia/Perth',
- 'W. Central Africa Standard Time' => 'Africa/Lagos',
- 'W. Europe Standard Time' => 'Europe/Berlin',
- 'W. Mongolia Standard Time' => 'Asia/Hovd',
- 'West Asia Standard Time' => 'Asia/Tashkent',
- 'West Bank Standard Time' => 'Asia/Hebron',
- 'West Pacific Standard Time' => 'Pacific/Port_Moresby',
- 'Yakutsk Standard Time' => 'Asia/Yakutsk',
- 'Yukon Standard Time' => 'America/Whitehorse',
- ];
-
- /**
- * Retrieves EAS (Microsoft/Windows) time zone information
- *
- * @since Release 1.0.0
- *
- * @param string $name eas time zone name
- *
- * @return object time zone information object on success, or null on failure
- */
- public static function findZone(?string $name) : ?object {
-
- if (isset(self::$easzones[$name])) {
- return json_decode(self::$easzones[$name]);
- } else {
- return null;
- }
-
- }
-
- /**
- * Retrieves EAS (Microsoft/Windows) time zone mutation information
- *
- * @since Release 1.0.0
- *
- * @param string|null $name eas time zone name
- * @param DateTime|Int|null $date date to find mutation for
- *
- * @return object time zone information object on success, or null on failure
- */
- public static function findZoneMutation(string|null $name, \DateTime|Int|null $date = null, bool $flag = false) : object|null {
-
- $zone = self::findZone($name);
-
- // evaluate if time zone was found
- if (!isset($zone)) {
- // evaluate if default flag was set
- if ($flag) {
- $zone = self::findZone('UTC');
- }
- else {
- return null;
- }
- }
-
- // evaluate if date is in DateTime format
- if ($date instanceof \DateTime) {
- // convert date to epoch time stamp
- $date = $date->getTimestamp();
- }
- // evaluate if date is null
- elseif ($date === null) {
- // assign current epoch time stamp if one was not provided
- $date = time();
- }
-
- foreach ($zone->Mutations as $entry) {
- if ($entry->Effective > $date) {
- break;
- } else {
- $mutation = $entry;
- }
- }
-
- return $mutation;
-
- }
-
- /**
- * Converts IANA time zone name to EAS (Microsoft/Windows) time zone name
- *
- * @since Release 1.0.0
- *
- * @param string $name iana time zone name
- *
- * @return string valid EWS time zone name on success, or null on failure
- */
- public static function fromIANA(?string $name): ?string {
-
- if (isset(self::$ianatoeas[$name])) {
- return self::$ianatoeas[$name];
- } else {
- return null;
- }
-
- }
-
- /**
- * Converts EAS (Microsoft/Windows) time zone name to IANA time zone name
- *
- * @since Release 1.0.0
- *
- * @param string $name eas time zone name
- *
- * @return string valid IANA time zone name on success, or null on failure
- */
- public static function toIANA(?string $name): ?string {
-
- if (isset(self::$eastoiana[$name])) {
- return self::$eastoiana[$name];
- } else {
- return null;
- }
-
- }
-
- /**
- * Converts DateTimeZone object to EAS (Microsoft/Windows) time zone name
- *
- * @since Release 1.0.0
- *
- * @param DateTimeZone $zone
- *
- * @return string valid EWS time zone name on success, or null on failure
- */
- public static function fromDateTimeZone(DateTimeZone $zone): ?string {
-
- // convert IANA time zone name to EWS
- $zone = self::fromIANA($zone->getName());
- // evaluate if we recieve a converted name
- // return time zone name if zone was found
- if (!empty($zone)) {
- return $zone;
- }
- else {
- return null;
- }
-
- }
-
- /**
- * Converts EAS (Microsoft/Windows) time zone name to DateTimeZone object
- *
- * @since Release 1.0.0
- *
- * @param string $name eas time zone name
- *
- * @return DateTimeZone valid DateTimeZone object on success, or null on failure
- */
- public static function toDateTimeZone(string $name): ?DateTimeZone {
-
- // evaluate if name exists in conversion table
- if (isset(self::$eastoiana[$name])) {
- $zone = @timezone_open(self::$eastoiana[$name]);
- }
- // otherwise attempt to convert time zone name
- else {
- $zone = @timezone_open($name);
- }
- // return time zone object if zone was found
- if ($zone instanceof DateTimeZone) {
- return $zone;
- }
- else {
- return null;
- }
-
- }
-
-}
\ No newline at end of file
diff --git a/src/components/AdminSettings.vue b/src/components/AdminSettings.vue
index f70f699..051ca03 100644
--- a/src/components/AdminSettings.vue
+++ b/src/components/AdminSettings.vue
@@ -23,11 +23,11 @@
-
-
{{ t('integration_jmapc', 'Exchange EAS Connector (Exchange Active Sync)') }}
+
+
{{ t('integration_jmapc', 'JMAP Connector') }}
- {{ t('integration_jmapc', 'Select the system settings for Exchange Integration') }}
+ {{ t('integration_jmapc', 'Select the system settings for JMAP Integration') }}