diff options
author | George Wang <gwang@php.net> | 2014-10-03 16:43:08 -0400 |
---|---|---|
committer | George Wang <gwang@php.net> | 2014-10-03 16:43:08 -0400 |
commit | ef0eed7f5ff34236b39d9c5914e1627ef30c7cb7 (patch) | |
tree | aa1b356321816109d462cacbb0c7986e3abe3153 | |
parent | 0cc2600ec64d882df7f44390bfd5411750f86947 (diff) | |
parent | d67c05bb899f4db42dd568376112b9144de2b5f1 (diff) | |
download | php-git-ef0eed7f5ff34236b39d9c5914e1627ef30c7cb7.tar.gz |
Merge branch 'PHP-5.5' of git.php.net:php-src into PHP-5.5
35 files changed, 1380 insertions, 735 deletions
diff --git a/.gitignore b/.gitignore index 8d0e7565f2..f696b15ebf 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ *.tgz *.tar.gz *.tar.bz2 +*.tar.xz .FBCIndex .FBCLockFolder .deps diff --git a/EXTENSIONS b/EXTENSIONS index 61a1688b3c..af9007732b 100644 --- a/EXTENSIONS +++ b/EXTENSIONS @@ -385,6 +385,12 @@ MAINTENANCE: Maintained STATUS: Working SINCE: 4.0.4 ------------------------------------------------------------------------------- +EXTENSION: hash +PRIMARY MAINTAINER: Sara Golemon <pollita@php.net>, Mike Wallner <mike@php.net>, Anatol Belski <ab@php.net> +MAINTENANCE: Maintained +STATUS: Working +SINCE: 5.1.2 +------------------------------------------------------------------------------- EXTENSION: iconv PRIMARY MAINTAINER: Moriyoshi Koizumi <moriyoshi@php.net> MAINTENANCE: Maintained @@ -1,11 +1,35 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +?? ??? 2014, PHP 5.5.19 + +- Core: + . Fixed bug #68118 ($a->foo .= 'test'; can leave $a->foo undefined). (Nikita) + + ?? ??? 2014, PHP 5.5.18 +- Core: + . Fixed bug #67985 (Incorrect last used array index copied to new array after + unset). (Tjerk) + . Fixed bug #67739 (Windows 8.1/Server 2012 R2 OS build number reported + as 6.2 (instead of 6.3)). (Christian Wenz) + . Fixed bug #67633 (A foreach on an array returned from a function not doing + copy-on-write). (Nikita) + . Fixed bug #51800 (proc_open on Windows hangs forever). (Anatol) + +- FPM: + . Fixed bug #65641 (PHP-FPM incorrectly defines the SCRIPT_NAME variable + when using Apache, mod_proxy-fcgi and ProxyPass). (Remi) + . Implemented FR #55508 (listen and listen.allowed_clients should take IPv6 + addresses). (Robin Gloster) + +- Reflection: + . Fixed bug #68103 (Duplicate entry in Reflection for class alias). (Remi) + - Session: . Fixed bug #67972 (SessionHandler Invalid memory read create_sid()). (Adam) -11 Sep 2014, PHP 5.5.17 +18 Sep 2014, PHP 5.5.17 - Core: . Fixed bug #47358 (glob returns error, should be empty array()). (Pierre) @@ -18,8 +42,7 @@ PHP NEWS (Aidas Kasparas) - FPM: - . Fixed #65641 (PHP-FPM incorrectly defines the SCRIPT_NAME variable when - using Apache). (David Zuelke) + . Fixed #67606 (FPM with mod_fastcgi/apache2.4 is broken). (David Zuelke) - OpenSSL: . Fixed bug #41631 (socket timeouts not honored in blocking SSL reads). diff --git a/Zend/tests/bug67633.phpt b/Zend/tests/bug67633.phpt new file mode 100644 index 0000000000..a9e05d10ab --- /dev/null +++ b/Zend/tests/bug67633.phpt @@ -0,0 +1,44 @@ +--TEST-- +Bug #67633: A foreach on an array returned from a function not doing copy-on-write +--FILE-- +<?php + +function id($x) { + return $x; +} + +function &ref_id(&$x) { + return $x; +} + +$c = 'c'; +$array = ['a', 'b', $c]; + +foreach(id($array) as &$v) { + $v .= 'q'; +} +var_dump($array); + +foreach(ref_id($array) as &$v) { + $v .= 'q'; +} +var_dump($array); + +?> +--EXPECT-- +array(3) { + [0]=> + string(1) "a" + [1]=> + string(1) "b" + [2]=> + string(1) "c" +} +array(3) { + [0]=> + string(2) "aq" + [1]=> + string(2) "bq" + [2]=> + &string(2) "cq" +} diff --git a/Zend/tests/bug67985.phpt b/Zend/tests/bug67985.phpt new file mode 100644 index 0000000000..6f032643f4 --- /dev/null +++ b/Zend/tests/bug67985.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #67985 - Last used array index not copied to new array at assignment +--FILE-- +<?php + +$a = ['zero', 'one', 'two']; +unset($a[2]); +$b = $a; +$a[] = 'three'; +$b[] = 'three'; + +var_dump($a === $b); + +?> +--EXPECT-- +bool(true) diff --git a/Zend/tests/bug68118.phpt b/Zend/tests/bug68118.phpt new file mode 100644 index 0000000000..c56e70a112 --- /dev/null +++ b/Zend/tests/bug68118.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #68118: $a->foo .= 'test'; can leave $a->foo undefined +--FILE-- +<?php + +set_error_handler(function() { + $obj = new stdClass; + $obj->test = 'meow'; + return true; +}); + +$a = new stdClass; +$a->undefined .= 'test'; +var_dump($a); + +?> +--EXPECT-- +object(stdClass)#2 (1) { + ["undefined"]=> + string(4) "test" +} diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 0ac3bceddc..bd3e1dd813 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -6231,6 +6231,15 @@ void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, zno /* save the location of FETCH_W instruction(s) */ open_brackets_token->u.op.opline_num = get_next_op_number(CG(active_op_array)); zend_do_end_variable_parse(array, BP_VAR_W, 0 TSRMLS_CC); + + if (zend_is_function_or_method_call(array)) { + opline = get_next_op(CG(active_op_array) TSRMLS_CC); + opline->opcode = ZEND_SEPARATE; + SET_NODE(opline->op1, array); + SET_UNUSED(opline->op2); + opline->result_type = IS_VAR; + opline->result.var = opline->op1.var; + } } else { is_variable = 0; open_brackets_token->u.op.opline_num = get_next_op_number(CG(active_op_array)); diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 093951eeca..a7b761fa38 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -754,9 +754,6 @@ static zval **zend_std_get_property_ptr_ptr(zval *object, zval *member, int type /* we don't have access controls - will just add it */ new_zval = &EG(uninitialized_zval); - if(UNEXPECTED(type == BP_VAR_RW || type == BP_VAR_R)) { - zend_error(E_NOTICE, "Undefined property: %s::$%s", zobj->ce->name, Z_STRVAL_P(member)); - } Z_ADDREF_P(new_zval); if (EXPECTED((property_info->flags & ZEND_ACC_STATIC) == 0) && property_info->offset >= 0) { @@ -776,6 +773,12 @@ static zval **zend_std_get_property_ptr_ptr(zval *object, zval *member, int type } zend_hash_quick_update(zobj->properties, property_info->name, property_info->name_length+1, property_info->h, &new_zval, sizeof(zval *), (void **) &retval); } + + /* Notice is thrown after creation of the property, to avoid EG(std_property_info) + * being overwritten in an error handler. */ + if (UNEXPECTED(type == BP_VAR_RW || type == BP_VAR_R)) { + zend_error(E_NOTICE, "Undefined property: %s::$%s", zobj->ce->name, Z_STRVAL_P(member)); + } } else { /* we do have getter - fail and let it try again with usual get/set */ retval = NULL; diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index b875445120..9674de5246 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -136,6 +136,7 @@ ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC) ALLOC_HASHTABLE_REL(tmp_ht); zend_hash_init(tmp_ht, zend_hash_num_elements(original_ht), NULL, ZVAL_PTR_DTOR, 0); zend_hash_copy(tmp_ht, original_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); + tmp_ht->nNextFreeElement = original_ht->nNextFreeElement; zvalue->value.ht = tmp_ht; } break; diff --git a/configure.in b/configure.in index dff05e54b4..cc5ec47ac7 100644 --- a/configure.in +++ b/configure.in @@ -119,7 +119,7 @@ int zend_sprintf(char *buffer, const char *format, ...); PHP_MAJOR_VERSION=5 PHP_MINOR_VERSION=5 -PHP_RELEASE_VERSION=18 +PHP_RELEASE_VERSION=19 PHP_EXTRA_VERSION="-dev" PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION" PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION` @@ -784,7 +784,12 @@ if test "$PHP_GCOV" = "yes"; then AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.]) fi - ltp_version_list="1.5 1.6 1.7 1.9 1.10" + dnl min: 1.5 (i.e. 105, major * 100 + minor for easier comparison) + ltp_version_min="105" + dnl non-working versions, e.g. "1.8 1.18"; + dnl remove "none" when introducing the first incompatible LTP version an + dnl separate any following additions by spaces + ltp_version_exclude="1.8" AC_CHECK_PROG(LTP, lcov, lcov) AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml) @@ -794,21 +799,30 @@ if test "$PHP_GCOV" = "yes"; then if test "$LTP"; then AC_CACHE_CHECK([for ltp version], php_cv_ltp_version, [ php_cv_ltp_version=invalid - ltp_version=`$LTP -v 2>/dev/null | $SED -e 's/^.* //'` - for ltp_check_version in $ltp_version_list; do - if test "$ltp_version" = "$ltp_check_version"; then - php_cv_ltp_version="$ltp_check_version (ok)" + ltp_version_vars=`$LTP -v 2>/dev/null | $SED -e 's/^.* //' -e 's/\./ /g' | tr -d a-z` + if test -n "$ltp_version_vars"; then + set $ltp_version_vars + ltp_version="${1}.${2}" + ltp_version_num="`expr ${1} \* 100 + ${2}`" + if test $ltp_version_num -ge $ltp_version_min; then + php_cv_ltp_version="$ltp_version (ok)" + for ltp_check_version in $ltp_version_exclude; do + if test "$ltp_version" = "$ltp_check_version"; then + php_cv_ltp_version=invalid + break + fi + done fi - done + fi ]) else - ltp_msg="To enable code coverage reporting you must have one of the following LTP versions installed: $ltp_version_list" + ltp_msg="To enable code coverage reporting you must have LTP installed" AC_MSG_ERROR([$ltp_msg]) fi case $php_cv_ltp_version in ""|invalid[)] - ltp_msg="You must have one of the following versions of LTP: $ltp_version_list (found: $ltp_version)." + ltp_msg="This LTP version is not supported (found: $ltp_version, min: $ltp_version_min, excluded: $ltp_version_exclude)." AC_MSG_ERROR([$ltp_msg]) LTP="exit 0;" ;; diff --git a/ext/curl/tests/check_win_config.phpt b/ext/curl/tests/check_win_config.phpt index 103f1cf692..d82fe6f41a 100644 --- a/ext/curl/tests/check_win_config.phpt +++ b/ext/curl/tests/check_win_config.phpt @@ -28,7 +28,7 @@ Features AsynchDNS => Yes
CharConv => No
Debug => No
-GSS-Negotiate => Yes
+GSS-Negotiate => No
IDN => Yes
IPv6 => Yes
krb4 => No
diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index a23104f68c..98e7b2292c 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -12,578 +12,578 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[582] = { { "Africa/Blantyre" , 0x00052F }, { "Africa/Brazzaville" , 0x000584 }, { "Africa/Bujumbura" , 0x0005D9 }, - { "Africa/Cairo" , 0x00061D }, - { "Africa/Casablanca" , 0x000A04 }, - { "Africa/Ceuta" , 0x000C66 }, - { "Africa/Conakry" , 0x000F6D }, - { "Africa/Dakar" , 0x000FC2 }, - { "Africa/Dar_es_Salaam" , 0x001017 }, - { "Africa/Djibouti" , 0x001084 }, - { "Africa/Douala" , 0x0010D9 }, - { "Africa/El_Aaiun" , 0x00112E }, - { "Africa/Freetown" , 0x001359 }, - { "Africa/Gaborone" , 0x0013AE }, - { "Africa/Harare" , 0x00141B }, - { "Africa/Johannesburg" , 0x001470 }, - { "Africa/Juba" , 0x0014DE }, - { "Africa/Kampala" , 0x0015F1 }, - { "Africa/Khartoum" , 0x001670 }, - { "Africa/Kigali" , 0x001783 }, - { "Africa/Kinshasa" , 0x0017D8 }, - { "Africa/Lagos" , 0x001844 }, - { "Africa/Libreville" , 0x001899 }, - { "Africa/Lome" , 0x0018EE }, - { "Africa/Luanda" , 0x001943 }, - { "Africa/Lubumbashi" , 0x001998 }, - { "Africa/Lusaka" , 0x0019F3 }, - { "Africa/Malabo" , 0x001A48 }, - { "Africa/Maputo" , 0x001A9D }, - { "Africa/Maseru" , 0x001AF2 }, - { "Africa/Mbabane" , 0x001B5A }, - { "Africa/Mogadishu" , 0x001BB0 }, - { "Africa/Monrovia" , 0x001C0B }, - { "Africa/Nairobi" , 0x001C71 }, - { "Africa/Ndjamena" , 0x001CF0 }, - { "Africa/Niamey" , 0x001D5C }, - { "Africa/Nouakchott" , 0x001DB1 }, - { "Africa/Ouagadougou" , 0x001E06 }, - { "Africa/Porto-Novo" , 0x001E5B }, - { "Africa/Sao_Tome" , 0x001EB0 }, - { "Africa/Timbuktu" , 0x001F05 }, - { "Africa/Tripoli" , 0x001F5A }, - { "Africa/Tunis" , 0x002063 }, - { "Africa/Windhoek" , 0x002175 }, - { "America/Adak" , 0x0023BC }, - { "America/Anchorage" , 0x002732 }, - { "America/Anguilla" , 0x002AA6 }, - { "America/Antigua" , 0x002AFB }, - { "America/Araguaina" , 0x002B61 }, - { "America/Argentina/Buenos_Aires" , 0x002CC6 }, - { "America/Argentina/Catamarca" , 0x002E74 }, - { "America/Argentina/ComodRivadavia" , 0x003035 }, - { "America/Argentina/Cordoba" , 0x0031DB }, - { "America/Argentina/Jujuy" , 0x0033B0 }, - { "America/Argentina/La_Rioja" , 0x003564 }, - { "America/Argentina/Mendoza" , 0x00371C }, - { "America/Argentina/Rio_Gallegos" , 0x0038DC }, - { "America/Argentina/Salta" , 0x003A91 }, - { "America/Argentina/San_Juan" , 0x003C3D }, - { "America/Argentina/San_Luis" , 0x003DF5 }, - { "America/Argentina/Tucuman" , 0x003FBB }, - { "America/Argentina/Ushuaia" , 0x004177 }, - { "America/Aruba" , 0x004332 }, - { "America/Asuncion" , 0x004398 }, - { "America/Atikokan" , 0x00467D }, - { "America/Atka" , 0x004753 }, - { "America/Bahia" , 0x004AB9 }, - { "America/Bahia_Banderas" , 0x004C4C }, - { "America/Barbados" , 0x004EC5 }, - { "America/Belem" , 0x004F5F }, - { "America/Belize" , 0x00505A }, - { "America/Blanc-Sablon" , 0x0051D6 }, - { "America/Boa_Vista" , 0x00528A }, - { "America/Bogota" , 0x005393 }, - { "America/Boise" , 0x0053FF }, - { "America/Buenos_Aires" , 0x005796 }, - { "America/Cambridge_Bay" , 0x00592F }, - { "America/Campo_Grande" , 0x005C57 }, - { "America/Cancun" , 0x005F46 }, - { "America/Caracas" , 0x006188 }, - { "America/Catamarca" , 0x0061EF }, - { "America/Cayenne" , 0x006395 }, - { "America/Cayman" , 0x0063F7 }, - { "America/Chicago" , 0x00644C }, - { "America/Chihuahua" , 0x006963 }, - { "America/Coral_Harbour" , 0x006BCE }, - { "America/Cordoba" , 0x006C60 }, - { "America/Costa_Rica" , 0x006E06 }, - { "America/Creston" , 0x006E90 }, - { "America/Cuiaba" , 0x006F1C }, - { "America/Curacao" , 0x0071FA }, - { "America/Danmarkshavn" , 0x007260 }, - { "America/Dawson" , 0x0073A4 }, - { "America/Dawson_Creek" , 0x0076C1 }, - { "America/Denver" , 0x00789B }, - { "America/Detroit" , 0x007C21 }, - { "America/Dominica" , 0x007F80 }, - { "America/Edmonton" , 0x007FD5 }, - { "America/Eirunepe" , 0x00838D }, - { "America/El_Salvador" , 0x0084A5 }, - { "America/Ensenada" , 0x00851A }, - { "America/Fort_Wayne" , 0x0089C1 }, - { "America/Fortaleza" , 0x008883 }, - { "America/Glace_Bay" , 0x008C2B }, - { "America/Godthab" , 0x008FA2 }, - { "America/Goose_Bay" , 0x009266 }, - { "America/Grand_Turk" , 0x009723 }, - { "America/Grenada" , 0x0098F8 }, - { "America/Guadeloupe" , 0x00994D }, - { "America/Guatemala" , 0x0099A2 }, - { "America/Guayaquil" , 0x009A2B }, - { "America/Guyana" , 0x009A88 }, - { "America/Halifax" , 0x009B09 }, - { "America/Havana" , 0x00A01F }, - { "America/Hermosillo" , 0x00A392 }, - { "America/Indiana/Indianapolis" , 0x00A470 }, - { "America/Indiana/Knox" , 0x00A701 }, - { "America/Indiana/Marengo" , 0x00AA98 }, - { "America/Indiana/Petersburg" , 0x00AD3E }, - { "America/Indiana/Tell_City" , 0x00B28B }, - { "America/Indiana/Vevay" , 0x00B524 }, - { "America/Indiana/Vincennes" , 0x00B75F }, - { "America/Indiana/Winamac" , 0x00BA13 }, - { "America/Indianapolis" , 0x00B021 }, - { "America/Inuvik" , 0x00BCCC }, - { "America/Iqaluit" , 0x00BFC3 }, - { "America/Jamaica" , 0x00C2E5 }, - { "America/Jujuy" , 0x00C3AA }, - { "America/Juneau" , 0x00C554 }, - { "America/Kentucky/Louisville" , 0x00C8D2 }, - { "America/Kentucky/Monticello" , 0x00CCF0 }, - { "America/Knox_IN" , 0x00D075 }, - { "America/Kralendijk" , 0x00D3E6 }, - { "America/La_Paz" , 0x00D44C }, - { "America/Lima" , 0x00D4B3 }, - { "America/Los_Angeles" , 0x00D55B }, - { "America/Louisville" , 0x00D96C }, - { "America/Lower_Princes" , 0x00DD61 }, - { "America/Maceio" , 0x00DDC7 }, - { "America/Managua" , 0x00DF01 }, - { "America/Manaus" , 0x00DFB4 }, - { "America/Marigot" , 0x00E0B6 }, - { "America/Martinique" , 0x00E10B }, - { "America/Matamoros" , 0x00E177 }, - { "America/Mazatlan" , 0x00E3D0 }, - { "America/Mendoza" , 0x00E63D }, - { "America/Menominee" , 0x00E7F1 }, - { "America/Merida" , 0x00EB72 }, - { "America/Metlakatla" , 0x00EDAD }, - { "America/Mexico_City" , 0x00EEE8 }, - { "America/Miquelon" , 0x00F163 }, - { "America/Moncton" , 0x00F3D5 }, - { "America/Monterrey" , 0x00F86C }, - { "America/Montevideo" , 0x00FACF }, - { "America/Montreal" , 0x00FDE1 }, - { "America/Montserrat" , 0x0102D1 }, - { "America/Nassau" , 0x010326 }, - { "America/New_York" , 0x01066B }, - { "America/Nipigon" , 0x010B76 }, - { "America/Nome" , 0x010EC7 }, - { "America/Noronha" , 0x011245 }, - { "America/North_Dakota/Beulah" , 0x011375 }, - { "America/North_Dakota/Center" , 0x011709 }, - { "America/North_Dakota/New_Salem" , 0x011A9D }, - { "America/Ojinaga" , 0x011E46 }, - { "America/Panama" , 0x0120A7 }, - { "America/Pangnirtung" , 0x0120FC }, - { "America/Paramaribo" , 0x012432 }, - { "America/Phoenix" , 0x0124C4 }, - { "America/Port-au-Prince" , 0x012582 }, - { "America/Port_of_Spain" , 0x0128A6 }, - { "America/Porto_Acre" , 0x0127A2 }, - { "America/Porto_Velho" , 0x0128FB }, - { "America/Puerto_Rico" , 0x0129F1 }, - { "America/Rainy_River" , 0x012A5C }, - { "America/Rankin_Inlet" , 0x012D94 }, - { "America/Recife" , 0x01307A }, - { "America/Regina" , 0x0131A4 }, - { "America/Resolute" , 0x013362 }, - { "America/Rio_Branco" , 0x01364A }, - { "America/Rosario" , 0x013752 }, - { "America/Santa_Isabel" , 0x0138F8 }, - { "America/Santarem" , 0x013C9B }, - { "America/Santiago" , 0x013DA0 }, - { "America/Santo_Domingo" , 0x014149 }, - { "America/Sao_Paulo" , 0x01420F }, - { "America/Scoresbysund" , 0x01451E }, - { "America/Shiprock" , 0x01480C }, - { "America/Sitka" , 0x014B85 }, - { "America/St_Barthelemy" , 0x014F0D }, - { "America/St_Johns" , 0x014F62 }, - { "America/St_Kitts" , 0x0154B5 }, - { "America/St_Lucia" , 0x01550A }, - { "America/St_Thomas" , 0x01555F }, - { "America/St_Vincent" , 0x0155B4 }, - { "America/Swift_Current" , 0x015609 }, - { "America/Tegucigalpa" , 0x01572A }, - { "America/Thule" , 0x0157A9 }, - { "America/Thunder_Bay" , 0x0159F0 }, - { "America/Tijuana" , 0x015D39 }, - { "America/Toronto" , 0x0160D2 }, - { "America/Tortola" , 0x0165F2 }, - { "America/Vancouver" , 0x016647 }, - { "America/Virgin" , 0x016A84 }, - { "America/Whitehorse" , 0x016AD9 }, - { "America/Winnipeg" , 0x016DF6 }, - { "America/Yakutat" , 0x017236 }, - { "America/Yellowknife" , 0x0175A1 }, - { "Antarctica/Casey" , 0x0178B1 }, - { "Antarctica/Davis" , 0x01794F }, - { "Antarctica/DumontDUrville" , 0x0179F0 }, - { "Antarctica/Macquarie" , 0x017A81 }, - { "Antarctica/Mawson" , 0x017CCE }, - { "Antarctica/McMurdo" , 0x017D4A }, - { "Antarctica/Palmer" , 0x0180F5 }, - { "Antarctica/Rothera" , 0x018411 }, - { "Antarctica/South_Pole" , 0x018487 }, - { "Antarctica/Syowa" , 0x018805 }, - { "Antarctica/Troll" , 0x018873 }, - { "Antarctica/Vostok" , 0x018A45 }, - { "Arctic/Longyearbyen" , 0x018AB6 }, - { "Asia/Aden" , 0x018DE8 }, - { "Asia/Almaty" , 0x018E3D }, - { "Asia/Amman" , 0x018FBC }, - { "Asia/Anadyr" , 0x019272 }, - { "Asia/Aqtau" , 0x019474 }, - { "Asia/Aqtobe" , 0x019673 }, - { "Asia/Ashgabat" , 0x01982B }, - { "Asia/Ashkhabad" , 0x019948 }, - { "Asia/Baghdad" , 0x019A65 }, - { "Asia/Bahrain" , 0x019BDA }, - { "Asia/Baku" , 0x019C40 }, - { "Asia/Bangkok" , 0x019F28 }, - { "Asia/Beirut" , 0x019F7D }, - { "Asia/Bishkek" , 0x01A28A }, - { "Asia/Brunei" , 0x01A436 }, - { "Asia/Calcutta" , 0x01A498 }, - { "Asia/Chita" , 0x01A511 }, - { "Asia/Choibalsan" , 0x01A726 }, - { "Asia/Chongqing" , 0x01A89F }, - { "Asia/Chungking" , 0x01A93F }, - { "Asia/Colombo" , 0x01A9DF }, - { "Asia/Dacca" , 0x01AA7B }, - { "Asia/Damascus" , 0x01AB21 }, - { "Asia/Dhaka" , 0x01AE71 }, - { "Asia/Dili" , 0x01AF17 }, - { "Asia/Dubai" , 0x01AFA1 }, - { "Asia/Dushanbe" , 0x01AFF6 }, - { "Asia/Gaza" , 0x01B0F9 }, - { "Asia/Harbin" , 0x01B44C }, - { "Asia/Hebron" , 0x01B4EC }, - { "Asia/Ho_Chi_Minh" , 0x01B848 }, - { "Asia/Hong_Kong" , 0x01B8C0 }, - { "Asia/Hovd" , 0x01BA82 }, - { "Asia/Irkutsk" , 0x01BBFA }, - { "Asia/Istanbul" , 0x01BDE5 }, - { "Asia/Jakarta" , 0x01C1D2 }, - { "Asia/Jayapura" , 0x01C27C }, - { "Asia/Jerusalem" , 0x01C319 }, - { "Asia/Kabul" , 0x01C648 }, - { "Asia/Kamchatka" , 0x01C699 }, - { "Asia/Karachi" , 0x01C892 }, - { "Asia/Kashgar" , 0x01C947 }, - { "Asia/Kathmandu" , 0x01C99C }, - { "Asia/Katmandu" , 0x01CA02 }, - { "Asia/Khandyga" , 0x01CA68 }, - { "Asia/Kolkata" , 0x01CC92 }, - { "Asia/Krasnoyarsk" , 0x01CD0B }, - { "Asia/Kuala_Lumpur" , 0x01CEF8 }, - { "Asia/Kuching" , 0x01CFB5 }, - { "Asia/Kuwait" , 0x01D0A3 }, - { "Asia/Macao" , 0x01D0F8 }, - { "Asia/Macau" , 0x01D233 }, - { "Asia/Magadan" , 0x01D36E }, - { "Asia/Makassar" , 0x01D572 }, - { "Asia/Manila" , 0x01D637 }, - { "Asia/Muscat" , 0x01D6BC }, - { "Asia/Nicosia" , 0x01D711 }, - { "Asia/Novokuznetsk" , 0x01D9F9 }, - { "Asia/Novosibirsk" , 0x01DC19 }, - { "Asia/Omsk" , 0x01DE09 }, - { "Asia/Oral" , 0x01DFF5 }, - { "Asia/Phnom_Penh" , 0x01E1C5 }, - { "Asia/Pontianak" , 0x01E23D }, - { "Asia/Pyongyang" , 0x01E2FF }, - { "Asia/Qatar" , 0x01E38F }, - { "Asia/Qyzylorda" , 0x01E3F5 }, - { "Asia/Rangoon" , 0x01E5CB }, - { "Asia/Riyadh" , 0x01E643 }, - { "Asia/Saigon" , 0x01E698 }, - { "Asia/Sakhalin" , 0x01E710 }, - { "Asia/Samarkand" , 0x01E90D }, - { "Asia/Seoul" , 0x01EA43 }, - { "Asia/Shanghai" , 0x01EB0A }, - { "Asia/Singapore" , 0x01EBB6 }, - { "Asia/Srednekolymsk" , 0x01EC6D }, - { "Asia/Taipei" , 0x01EE6D }, - { "Asia/Tashkent" , 0x01EF9E }, - { "Asia/Tbilisi" , 0x01F0CF }, - { "Asia/Tehran" , 0x01F289 }, - { "Asia/Tel_Aviv" , 0x01F4F7 }, - { "Asia/Thimbu" , 0x01F826 }, - { "Asia/Thimphu" , 0x01F88C }, - { "Asia/Tokyo" , 0x01F8F2 }, - { "Asia/Ujung_Pandang" , 0x01F97C }, - { "Asia/Ulaanbaatar" , 0x01F9F9 }, - { "Asia/Ulan_Bator" , 0x01FB54 }, - { "Asia/Urumqi" , 0x01FCA1 }, - { "Asia/Ust-Nera" , 0x01FD03 }, - { "Asia/Vientiane" , 0x01FF15 }, - { "Asia/Vladivostok" , 0x01FF8D }, - { "Asia/Yakutsk" , 0x020177 }, - { "Asia/Yekaterinburg" , 0x020361 }, - { "Asia/Yerevan" , 0x020582 }, - { "Atlantic/Azores" , 0x020782 }, - { "Atlantic/Bermuda" , 0x020C85 }, - { "Atlantic/Canary" , 0x020F66 }, - { "Atlantic/Cape_Verde" , 0x02123C }, - { "Atlantic/Faeroe" , 0x0212B5 }, - { "Atlantic/Faroe" , 0x021559 }, - { "Atlantic/Jan_Mayen" , 0x0217FD }, - { "Atlantic/Madeira" , 0x021B2F }, - { "Atlantic/Reykjavik" , 0x022038 }, - { "Atlantic/South_Georgia" , 0x0221F1 }, - { "Atlantic/St_Helena" , 0x022403 }, - { "Atlantic/Stanley" , 0x022235 }, - { "Australia/ACT" , 0x022458 }, - { "Australia/Adelaide" , 0x02277B }, - { "Australia/Brisbane" , 0x022AAD }, - { "Australia/Broken_Hill" , 0x022B7A }, - { "Australia/Canberra" , 0x022EBE }, - { "Australia/Currie" , 0x0231E1 }, - { "Australia/Darwin" , 0x02351A }, - { "Australia/Eucla" , 0x0235A6 }, - { "Australia/Hobart" , 0x023682 }, - { "Australia/LHI" , 0x0239E6 }, - { "Australia/Lindeman" , 0x023C87 }, - { "Australia/Lord_Howe" , 0x023D6E }, - { "Australia/Melbourne" , 0x02401F }, - { "Australia/North" , 0x02434A }, - { "Australia/NSW" , 0x0243C4 }, - { "Australia/Perth" , 0x0246E7 }, - { "Australia/Queensland" , 0x0247C5 }, - { "Australia/South" , 0x024877 }, - { "Australia/Sydney" , 0x024B9A }, - { "Australia/Tasmania" , 0x024EDD }, - { "Australia/Victoria" , 0x025228 }, - { "Australia/West" , 0x02554B }, - { "Australia/Yancowinna" , 0x025607 }, - { "Brazil/Acre" , 0x02592F }, - { "Brazil/DeNoronha" , 0x025A33 }, - { "Brazil/East" , 0x025B53 }, - { "Brazil/West" , 0x025E30 }, - { "Canada/Atlantic" , 0x025F28 }, - { "Canada/Central" , 0x026410 }, - { "Canada/East-Saskatchewan" , 0x026D1A }, - { "Canada/Eastern" , 0x02682A }, - { "Canada/Mountain" , 0x026EA3 }, - { "Canada/Newfoundland" , 0x027219 }, - { "Canada/Pacific" , 0x027744 }, - { "Canada/Saskatchewan" , 0x027B5D }, - { "Canada/Yukon" , 0x027CE6 }, - { "CET" , 0x027FE9 }, - { "Chile/Continental" , 0x0282F2 }, - { "Chile/EasterIsland" , 0x02868D }, - { "CST6CDT" , 0x0289CF }, - { "Cuba" , 0x028D20 }, - { "EET" , 0x029093 }, - { "Egypt" , 0x029346 }, - { "Eire" , 0x02972D }, - { "EST" , 0x029C3E }, - { "EST5EDT" , 0x029C82 }, - { "Etc/GMT" , 0x029FD3 }, - { "Etc/GMT+0" , 0x02A09F }, - { "Etc/GMT+1" , 0x02A129 }, - { "Etc/GMT+10" , 0x02A1B6 }, - { "Etc/GMT+11" , 0x02A244 }, - { "Etc/GMT+12" , 0x02A2D2 }, - { "Etc/GMT+2" , 0x02A3ED }, - { "Etc/GMT+3" , 0x02A479 }, - { "Etc/GMT+4" , 0x02A505 }, - { "Etc/GMT+5" , 0x02A591 }, - { "Etc/GMT+6" , 0x02A61D }, - { "Etc/GMT+7" , 0x02A6A9 }, - { "Etc/GMT+8" , 0x02A735 }, - { "Etc/GMT+9" , 0x02A7C1 }, - { "Etc/GMT-0" , 0x02A05B }, - { "Etc/GMT-1" , 0x02A0E3 }, - { "Etc/GMT-10" , 0x02A16F }, - { "Etc/GMT-11" , 0x02A1FD }, - { "Etc/GMT-12" , 0x02A28B }, - { "Etc/GMT-13" , 0x02A319 }, - { "Etc/GMT-14" , 0x02A360 }, - { "Etc/GMT-2" , 0x02A3A7 }, - { "Etc/GMT-3" , 0x02A433 }, - { "Etc/GMT-4" , 0x02A4BF }, - { "Etc/GMT-5" , 0x02A54B }, - { "Etc/GMT-6" , 0x02A5D7 }, - { "Etc/GMT-7" , 0x02A663 }, - { "Etc/GMT-8" , 0x02A6EF }, - { "Etc/GMT-9" , 0x02A77B }, - { "Etc/GMT0" , 0x02A017 }, - { "Etc/Greenwich" , 0x02A807 }, - { "Etc/UCT" , 0x02A84B }, - { "Etc/Universal" , 0x02A88F }, - { "Etc/UTC" , 0x02A8D3 }, - { "Etc/Zulu" , 0x02A917 }, - { "Europe/Amsterdam" , 0x02A95B }, - { "Europe/Andorra" , 0x02AD99 }, - { "Europe/Athens" , 0x02B015 }, - { "Europe/Belfast" , 0x02B358 }, - { "Europe/Belgrade" , 0x02B88F }, - { "Europe/Berlin" , 0x02BB58 }, - { "Europe/Bratislava" , 0x02BEBC }, - { "Europe/Brussels" , 0x02C1EE }, - { "Europe/Bucharest" , 0x02C625 }, - { "Europe/Budapest" , 0x02C94F }, - { "Europe/Busingen" , 0x02CCB8 }, - { "Europe/Chisinau" , 0x02CF6F }, - { "Europe/Copenhagen" , 0x02D2FD }, - { "Europe/Dublin" , 0x02D607 }, - { "Europe/Gibraltar" , 0x02DB18 }, - { "Europe/Guernsey" , 0x02DF6F }, - { "Europe/Helsinki" , 0x02E4A6 }, - { "Europe/Isle_of_Man" , 0x02E75C }, - { "Europe/Istanbul" , 0x02EC93 }, - { "Europe/Jersey" , 0x02F080 }, - { "Europe/Kaliningrad" , 0x02F5B7 }, - { "Europe/Kiev" , 0x02F822 }, - { "Europe/Lisbon" , 0x02FB3E }, - { "Europe/Ljubljana" , 0x030042 }, - { "Europe/London" , 0x03030B }, - { "Europe/Luxembourg" , 0x030842 }, - { "Europe/Madrid" , 0x030C98 }, - { "Europe/Malta" , 0x03105E }, - { "Europe/Mariehamn" , 0x031417 }, - { "Europe/Minsk" , 0x0316CD }, - { "Europe/Monaco" , 0x0318DB }, - { "Europe/Moscow" , 0x031D16 }, - { "Europe/Nicosia" , 0x031F70 }, - { "Europe/Oslo" , 0x032258 }, - { "Europe/Paris" , 0x03258A }, - { "Europe/Podgorica" , 0x0329D0 }, - { "Europe/Prague" , 0x032C99 }, - { "Europe/Riga" , 0x032FCB }, - { "Europe/Rome" , 0x033310 }, - { "Europe/Samara" , 0x0336D3 }, - { "Europe/San_Marino" , 0x03393C }, - { "Europe/Sarajevo" , 0x033CFF }, - { "Europe/Simferopol" , 0x033FC8 }, - { "Europe/Skopje" , 0x034219 }, - { "Europe/Sofia" , 0x0344E2 }, - { "Europe/Stockholm" , 0x0347EA }, - { "Europe/Tallinn" , 0x034A99 }, - { "Europe/Tirane" , 0x034DD3 }, - { "Europe/Tiraspol" , 0x0350D9 }, - { "Europe/Uzhgorod" , 0x035467 }, - { "Europe/Vaduz" , 0x03577E }, - { "Europe/Vatican" , 0x035A2D }, - { "Europe/Vienna" , 0x035DF0 }, - { "Europe/Vilnius" , 0x03611D }, - { "Europe/Volgograd" , 0x03645C }, - { "Europe/Warsaw" , 0x03667D }, - { "Europe/Zagreb" , 0x036A5E }, - { "Europe/Zaporozhye" , 0x036D27 }, - { "Europe/Zurich" , 0x037068 }, - { "Factory" , 0x037317 }, - { "GB" , 0x037388 }, - { "GB-Eire" , 0x0378BF }, - { "GMT" , 0x037DF6 }, - { "GMT+0" , 0x037EC2 }, - { "GMT-0" , 0x037E7E }, - { "GMT0" , 0x037E3A }, - { "Greenwich" , 0x037F06 }, - { "Hongkong" , 0x037F4A }, - { "HST" , 0x03810C }, - { "Iceland" , 0x038150 }, - { "Indian/Antananarivo" , 0x038309 }, - { "Indian/Chagos" , 0x03837D }, - { "Indian/Christmas" , 0x0383DF }, - { "Indian/Cocos" , 0x038423 }, - { "Indian/Comoro" , 0x038467 }, - { "Indian/Kerguelen" , 0x0384BC }, - { "Indian/Mahe" , 0x038511 }, - { "Indian/Maldives" , 0x038566 }, - { "Indian/Mauritius" , 0x0385BB }, - { "Indian/Mayotte" , 0x038631 }, - { "Indian/Reunion" , 0x038686 }, - { "Iran" , 0x0386DB }, - { "Israel" , 0x038949 }, - { "Jamaica" , 0x038C78 }, - { "Japan" , 0x038D3D }, - { "Kwajalein" , 0x038DC7 }, - { "Libya" , 0x038E2A }, - { "MET" , 0x038F33 }, - { "Mexico/BajaNorte" , 0x03923C }, - { "Mexico/BajaSur" , 0x0395A5 }, - { "Mexico/General" , 0x0397EA }, - { "MST" , 0x039A48 }, - { "MST7MDT" , 0x039A8C }, - { "Navajo" , 0x039DDD }, - { "NZ" , 0x03A156 }, - { "NZ-CHAT" , 0x03A4D4 }, - { "Pacific/Apia" , 0x03A7B8 }, - { "Pacific/Auckland" , 0x03A954 }, - { "Pacific/Chatham" , 0x03ACE0 }, - { "Pacific/Chuuk" , 0x03AFD3 }, - { "Pacific/Easter" , 0x03B02C }, - { "Pacific/Efate" , 0x03B37B }, - { "Pacific/Enderbury" , 0x03B441 }, - { "Pacific/Fakaofo" , 0x03B4AF }, - { "Pacific/Fiji" , 0x03B500 }, - { "Pacific/Funafuti" , 0x03B693 }, - { "Pacific/Galapagos" , 0x03B6D7 }, - { "Pacific/Gambier" , 0x03B74F }, - { "Pacific/Guadalcanal" , 0x03B7B4 }, - { "Pacific/Guam" , 0x03B809 }, - { "Pacific/Honolulu" , 0x03B85F }, - { "Pacific/Johnston" , 0x03B8D6 }, - { "Pacific/Kiritimati" , 0x03B955 }, - { "Pacific/Kosrae" , 0x03B9C0 }, - { "Pacific/Kwajalein" , 0x03BA1D }, - { "Pacific/Majuro" , 0x03BA89 }, - { "Pacific/Marquesas" , 0x03BAE8 }, - { "Pacific/Midway" , 0x03BB4F }, - { "Pacific/Nauru" , 0x03BBD9 }, - { "Pacific/Niue" , 0x03BC51 }, - { "Pacific/Norfolk" , 0x03BCAF }, - { "Pacific/Noumea" , 0x03BD04 }, - { "Pacific/Pago_Pago" , 0x03BD94 }, - { "Pacific/Palau" , 0x03BE0B }, - { "Pacific/Pitcairn" , 0x03BE4F }, - { "Pacific/Pohnpei" , 0x03BEA4 }, - { "Pacific/Ponape" , 0x03BEF9 }, - { "Pacific/Port_Moresby" , 0x03BF3E }, - { "Pacific/Rarotonga" , 0x03BF82 }, - { "Pacific/Saipan" , 0x03C05E }, - { "Pacific/Samoa" , 0x03C0C1 }, - { "Pacific/Tahiti" , 0x03C138 }, - { "Pacific/Tarawa" , 0x03C19D }, - { "Pacific/Tongatapu" , 0x03C1F1 }, - { "Pacific/Truk" , 0x03C27D }, - { "Pacific/Wake" , 0x03C2C2 }, - { "Pacific/Wallis" , 0x03C312 }, - { "Pacific/Yap" , 0x03C356 }, - { "Poland" , 0x03C39B }, - { "Portugal" , 0x03C77C }, - { "PRC" , 0x03CC78 }, - { "PST8PDT" , 0x03CD18 }, - { "ROC" , 0x03D069 }, - { "ROK" , 0x03D19A }, - { "Singapore" , 0x03D261 }, - { "Turkey" , 0x03D318 }, - { "UCT" , 0x03D705 }, - { "Universal" , 0x03D749 }, - { "US/Alaska" , 0x03D78D }, - { "US/Aleutian" , 0x03DAF6 }, - { "US/Arizona" , 0x03DE5C }, - { "US/Central" , 0x03DEEA }, - { "US/East-Indiana" , 0x03E8F4 }, - { "US/Eastern" , 0x03E3F5 }, - { "US/Hawaii" , 0x03EB5E }, - { "US/Indiana-Starke" , 0x03EBCF }, - { "US/Michigan" , 0x03EF40 }, - { "US/Mountain" , 0x03F277 }, - { "US/Pacific" , 0x03F5F0 }, - { "US/Pacific-New" , 0x03F9F5 }, - { "US/Samoa" , 0x03FDFA }, - { "UTC" , 0x03FE71 }, - { "W-SU" , 0x040168 }, - { "WET" , 0x03FEB5 }, - { "Zulu" , 0x0403AB }, + { "Africa/Cairo" , 0x00062E }, + { "Africa/Casablanca" , 0x000A15 }, + { "Africa/Ceuta" , 0x000C77 }, + { "Africa/Conakry" , 0x000F7E }, + { "Africa/Dakar" , 0x000FD3 }, + { "Africa/Dar_es_Salaam" , 0x001028 }, + { "Africa/Djibouti" , 0x001095 }, + { "Africa/Douala" , 0x0010EA }, + { "Africa/El_Aaiun" , 0x00113F }, + { "Africa/Freetown" , 0x00136A }, + { "Africa/Gaborone" , 0x0013BF }, + { "Africa/Harare" , 0x001414 }, + { "Africa/Johannesburg" , 0x001469 }, + { "Africa/Juba" , 0x0014D7 }, + { "Africa/Kampala" , 0x0015EA }, + { "Africa/Khartoum" , 0x001669 }, + { "Africa/Kigali" , 0x00177C }, + { "Africa/Kinshasa" , 0x0017D1 }, + { "Africa/Lagos" , 0x00183D }, + { "Africa/Libreville" , 0x001892 }, + { "Africa/Lome" , 0x0018E7 }, + { "Africa/Luanda" , 0x00193C }, + { "Africa/Lubumbashi" , 0x001991 }, + { "Africa/Lusaka" , 0x0019FD }, + { "Africa/Malabo" , 0x001A52 }, + { "Africa/Maputo" , 0x001AA7 }, + { "Africa/Maseru" , 0x001AFC }, + { "Africa/Mbabane" , 0x001B6A }, + { "Africa/Mogadishu" , 0x001BD8 }, + { "Africa/Monrovia" , 0x001C33 }, + { "Africa/Nairobi" , 0x001C99 }, + { "Africa/Ndjamena" , 0x001D18 }, + { "Africa/Niamey" , 0x001D84 }, + { "Africa/Nouakchott" , 0x001DD9 }, + { "Africa/Ouagadougou" , 0x001E2E }, + { "Africa/Porto-Novo" , 0x001E83 }, + { "Africa/Sao_Tome" , 0x001ED8 }, + { "Africa/Timbuktu" , 0x001F2D }, + { "Africa/Tripoli" , 0x001F82 }, + { "Africa/Tunis" , 0x00208B }, + { "Africa/Windhoek" , 0x00219D }, + { "America/Adak" , 0x0023E4 }, + { "America/Anchorage" , 0x00275A }, + { "America/Anguilla" , 0x002ACE }, + { "America/Antigua" , 0x002B23 }, + { "America/Araguaina" , 0x002B89 }, + { "America/Argentina/Buenos_Aires" , 0x002CEE }, + { "America/Argentina/Catamarca" , 0x002E9C }, + { "America/Argentina/ComodRivadavia" , 0x00305D }, + { "America/Argentina/Cordoba" , 0x003203 }, + { "America/Argentina/Jujuy" , 0x0033D8 }, + { "America/Argentina/La_Rioja" , 0x00358C }, + { "America/Argentina/Mendoza" , 0x003744 }, + { "America/Argentina/Rio_Gallegos" , 0x003904 }, + { "America/Argentina/Salta" , 0x003AB9 }, + { "America/Argentina/San_Juan" , 0x003C65 }, + { "America/Argentina/San_Luis" , 0x003E1D }, + { "America/Argentina/Tucuman" , 0x003FE3 }, + { "America/Argentina/Ushuaia" , 0x00419F }, + { "America/Aruba" , 0x00435A }, + { "America/Asuncion" , 0x0043C0 }, + { "America/Atikokan" , 0x0046A5 }, + { "America/Atka" , 0x00477B }, + { "America/Bahia" , 0x004AE1 }, + { "America/Bahia_Banderas" , 0x004C74 }, + { "America/Barbados" , 0x004EED }, + { "America/Belem" , 0x004F87 }, + { "America/Belize" , 0x005082 }, + { "America/Blanc-Sablon" , 0x0051FE }, + { "America/Boa_Vista" , 0x0052B2 }, + { "America/Bogota" , 0x0053BB }, + { "America/Boise" , 0x005427 }, + { "America/Buenos_Aires" , 0x0057BE }, + { "America/Cambridge_Bay" , 0x005957 }, + { "America/Campo_Grande" , 0x005C7F }, + { "America/Cancun" , 0x005F6E }, + { "America/Caracas" , 0x0061B0 }, + { "America/Catamarca" , 0x006217 }, + { "America/Cayenne" , 0x0063BD }, + { "America/Cayman" , 0x00641F }, + { "America/Chicago" , 0x006474 }, + { "America/Chihuahua" , 0x00698B }, + { "America/Coral_Harbour" , 0x006BF6 }, + { "America/Cordoba" , 0x006C88 }, + { "America/Costa_Rica" , 0x006E2E }, + { "America/Creston" , 0x006EB8 }, + { "America/Cuiaba" , 0x006F44 }, + { "America/Curacao" , 0x007222 }, + { "America/Danmarkshavn" , 0x007288 }, + { "America/Dawson" , 0x0073CC }, + { "America/Dawson_Creek" , 0x0076E9 }, + { "America/Denver" , 0x0078C3 }, + { "America/Detroit" , 0x007C49 }, + { "America/Dominica" , 0x007FA8 }, + { "America/Edmonton" , 0x007FFD }, + { "America/Eirunepe" , 0x0083B5 }, + { "America/El_Salvador" , 0x0084CD }, + { "America/Ensenada" , 0x008542 }, + { "America/Fort_Wayne" , 0x0089E9 }, + { "America/Fortaleza" , 0x0088AB }, + { "America/Glace_Bay" , 0x008C53 }, + { "America/Godthab" , 0x008FCA }, + { "America/Goose_Bay" , 0x00928E }, + { "America/Grand_Turk" , 0x00974B }, + { "America/Grenada" , 0x009920 }, + { "America/Guadeloupe" , 0x009975 }, + { "America/Guatemala" , 0x0099CA }, + { "America/Guayaquil" , 0x009A53 }, + { "America/Guyana" , 0x009AB0 }, + { "America/Halifax" , 0x009B31 }, + { "America/Havana" , 0x00A047 }, + { "America/Hermosillo" , 0x00A3BA }, + { "America/Indiana/Indianapolis" , 0x00A498 }, + { "America/Indiana/Knox" , 0x00A729 }, + { "America/Indiana/Marengo" , 0x00AAC0 }, + { "America/Indiana/Petersburg" , 0x00AD66 }, + { "America/Indiana/Tell_City" , 0x00B2B3 }, + { "America/Indiana/Vevay" , 0x00B54C }, + { "America/Indiana/Vincennes" , 0x00B787 }, + { "America/Indiana/Winamac" , 0x00BA3B }, + { "America/Indianapolis" , 0x00B049 }, + { "America/Inuvik" , 0x00BCF4 }, + { "America/Iqaluit" , 0x00BFEB }, + { "America/Jamaica" , 0x00C30D }, + { "America/Jujuy" , 0x00C3D2 }, + { "America/Juneau" , 0x00C57C }, + { "America/Kentucky/Louisville" , 0x00C8FA }, + { "America/Kentucky/Monticello" , 0x00CD18 }, + { "America/Knox_IN" , 0x00D09D }, + { "America/Kralendijk" , 0x00D40E }, + { "America/La_Paz" , 0x00D474 }, + { "America/Lima" , 0x00D4DB }, + { "America/Los_Angeles" , 0x00D583 }, + { "America/Louisville" , 0x00D994 }, + { "America/Lower_Princes" , 0x00DD89 }, + { "America/Maceio" , 0x00DDEF }, + { "America/Managua" , 0x00DF29 }, + { "America/Manaus" , 0x00DFDC }, + { "America/Marigot" , 0x00E0DE }, + { "America/Martinique" , 0x00E133 }, + { "America/Matamoros" , 0x00E19F }, + { "America/Mazatlan" , 0x00E3F8 }, + { "America/Mendoza" , 0x00E665 }, + { "America/Menominee" , 0x00E819 }, + { "America/Merida" , 0x00EB9A }, + { "America/Metlakatla" , 0x00EDD5 }, + { "America/Mexico_City" , 0x00EF10 }, + { "America/Miquelon" , 0x00F18B }, + { "America/Moncton" , 0x00F3FD }, + { "America/Monterrey" , 0x00F894 }, + { "America/Montevideo" , 0x00FAF7 }, + { "America/Montreal" , 0x00FE09 }, + { "America/Montserrat" , 0x0102F9 }, + { "America/Nassau" , 0x01034E }, + { "America/New_York" , 0x010693 }, + { "America/Nipigon" , 0x010B9E }, + { "America/Nome" , 0x010EEF }, + { "America/Noronha" , 0x01126D }, + { "America/North_Dakota/Beulah" , 0x01139D }, + { "America/North_Dakota/Center" , 0x011731 }, + { "America/North_Dakota/New_Salem" , 0x011AC5 }, + { "America/Ojinaga" , 0x011E6E }, + { "America/Panama" , 0x0120CF }, + { "America/Pangnirtung" , 0x012124 }, + { "America/Paramaribo" , 0x01245A }, + { "America/Phoenix" , 0x0124EC }, + { "America/Port-au-Prince" , 0x0125AA }, + { "America/Port_of_Spain" , 0x0128CE }, + { "America/Porto_Acre" , 0x0127CA }, + { "America/Porto_Velho" , 0x012923 }, + { "America/Puerto_Rico" , 0x012A19 }, + { "America/Rainy_River" , 0x012A84 }, + { "America/Rankin_Inlet" , 0x012DBC }, + { "America/Recife" , 0x0130A2 }, + { "America/Regina" , 0x0131CC }, + { "America/Resolute" , 0x01338A }, + { "America/Rio_Branco" , 0x013672 }, + { "America/Rosario" , 0x01377A }, + { "America/Santa_Isabel" , 0x013920 }, + { "America/Santarem" , 0x013CC3 }, + { "America/Santiago" , 0x013DC8 }, + { "America/Santo_Domingo" , 0x014171 }, + { "America/Sao_Paulo" , 0x014237 }, + { "America/Scoresbysund" , 0x014546 }, + { "America/Shiprock" , 0x014834 }, + { "America/Sitka" , 0x014BAD }, + { "America/St_Barthelemy" , 0x014F35 }, + { "America/St_Johns" , 0x014F8A }, + { "America/St_Kitts" , 0x0154DD }, + { "America/St_Lucia" , 0x015532 }, + { "America/St_Thomas" , 0x015587 }, + { "America/St_Vincent" , 0x0155DC }, + { "America/Swift_Current" , 0x015631 }, + { "America/Tegucigalpa" , 0x015752 }, + { "America/Thule" , 0x0157D1 }, + { "America/Thunder_Bay" , 0x015A18 }, + { "America/Tijuana" , 0x015D61 }, + { "America/Toronto" , 0x0160FA }, + { "America/Tortola" , 0x01661A }, + { "America/Vancouver" , 0x01666F }, + { "America/Virgin" , 0x016AAC }, + { "America/Whitehorse" , 0x016B01 }, + { "America/Winnipeg" , 0x016E1E }, + { "America/Yakutat" , 0x01725E }, + { "America/Yellowknife" , 0x0175C9 }, + { "Antarctica/Casey" , 0x0178D9 }, + { "Antarctica/Davis" , 0x017977 }, + { "Antarctica/DumontDUrville" , 0x017A18 }, + { "Antarctica/Macquarie" , 0x017AA9 }, + { "Antarctica/Mawson" , 0x017CF6 }, + { "Antarctica/McMurdo" , 0x017D72 }, + { "Antarctica/Palmer" , 0x01811D }, + { "Antarctica/Rothera" , 0x018439 }, + { "Antarctica/South_Pole" , 0x0184AF }, + { "Antarctica/Syowa" , 0x01882D }, + { "Antarctica/Troll" , 0x01889B }, + { "Antarctica/Vostok" , 0x018A6D }, + { "Arctic/Longyearbyen" , 0x018ADE }, + { "Asia/Aden" , 0x018E10 }, + { "Asia/Almaty" , 0x018E65 }, + { "Asia/Amman" , 0x018FE4 }, + { "Asia/Anadyr" , 0x01929A }, + { "Asia/Aqtau" , 0x01949C }, + { "Asia/Aqtobe" , 0x01969B }, + { "Asia/Ashgabat" , 0x019853 }, + { "Asia/Ashkhabad" , 0x019970 }, + { "Asia/Baghdad" , 0x019A8D }, + { "Asia/Bahrain" , 0x019C02 }, + { "Asia/Baku" , 0x019C68 }, + { "Asia/Bangkok" , 0x019F50 }, + { "Asia/Beirut" , 0x019FA5 }, + { "Asia/Bishkek" , 0x01A2B2 }, + { "Asia/Brunei" , 0x01A45E }, + { "Asia/Calcutta" , 0x01A4C0 }, + { "Asia/Chita" , 0x01A539 }, + { "Asia/Choibalsan" , 0x01A74E }, + { "Asia/Chongqing" , 0x01A8C7 }, + { "Asia/Chungking" , 0x01A967 }, + { "Asia/Colombo" , 0x01AA07 }, + { "Asia/Dacca" , 0x01AAA3 }, + { "Asia/Damascus" , 0x01AB49 }, + { "Asia/Dhaka" , 0x01AE99 }, + { "Asia/Dili" , 0x01AF3F }, + { "Asia/Dubai" , 0x01AFC9 }, + { "Asia/Dushanbe" , 0x01B01E }, + { "Asia/Gaza" , 0x01B121 }, + { "Asia/Harbin" , 0x01B474 }, + { "Asia/Hebron" , 0x01B514 }, + { "Asia/Ho_Chi_Minh" , 0x01B870 }, + { "Asia/Hong_Kong" , 0x01B8E8 }, + { "Asia/Hovd" , 0x01BAAA }, + { "Asia/Irkutsk" , 0x01BC22 }, + { "Asia/Istanbul" , 0x01BE0D }, + { "Asia/Jakarta" , 0x01C1FA }, + { "Asia/Jayapura" , 0x01C2A4 }, + { "Asia/Jerusalem" , 0x01C341 }, + { "Asia/Kabul" , 0x01C670 }, + { "Asia/Kamchatka" , 0x01C6C1 }, + { "Asia/Karachi" , 0x01C8BA }, + { "Asia/Kashgar" , 0x01C96F }, + { "Asia/Kathmandu" , 0x01C9C4 }, + { "Asia/Katmandu" , 0x01CA2A }, + { "Asia/Khandyga" , 0x01CA90 }, + { "Asia/Kolkata" , 0x01CCBA }, + { "Asia/Krasnoyarsk" , 0x01CD33 }, + { "Asia/Kuala_Lumpur" , 0x01CF20 }, + { "Asia/Kuching" , 0x01CFDD }, + { "Asia/Kuwait" , 0x01D0CB }, + { "Asia/Macao" , 0x01D120 }, + { "Asia/Macau" , 0x01D25B }, + { "Asia/Magadan" , 0x01D396 }, + { "Asia/Makassar" , 0x01D59A }, + { "Asia/Manila" , 0x01D65F }, + { "Asia/Muscat" , 0x01D6E4 }, + { "Asia/Nicosia" , 0x01D739 }, + { "Asia/Novokuznetsk" , 0x01DA21 }, + { "Asia/Novosibirsk" , 0x01DC41 }, + { "Asia/Omsk" , 0x01DE31 }, + { "Asia/Oral" , 0x01E01D }, + { "Asia/Phnom_Penh" , 0x01E1ED }, + { "Asia/Pontianak" , 0x01E265 }, + { "Asia/Pyongyang" , 0x01E327 }, + { "Asia/Qatar" , 0x01E3B7 }, + { "Asia/Qyzylorda" , 0x01E41D }, + { "Asia/Rangoon" , 0x01E5F3 }, + { "Asia/Riyadh" , 0x01E66B }, + { "Asia/Saigon" , 0x01E6C0 }, + { "Asia/Sakhalin" , 0x01E738 }, + { "Asia/Samarkand" , 0x01E935 }, + { "Asia/Seoul" , 0x01EA6B }, + { "Asia/Shanghai" , 0x01EB32 }, + { "Asia/Singapore" , 0x01EBDE }, + { "Asia/Srednekolymsk" , 0x01EC95 }, + { "Asia/Taipei" , 0x01EE95 }, + { "Asia/Tashkent" , 0x01EFC6 }, + { "Asia/Tbilisi" , 0x01F0F7 }, + { "Asia/Tehran" , 0x01F2B1 }, + { "Asia/Tel_Aviv" , 0x01F51F }, + { "Asia/Thimbu" , 0x01F84E }, + { "Asia/Thimphu" , 0x01F8B4 }, + { "Asia/Tokyo" , 0x01F91A }, + { "Asia/Ujung_Pandang" , 0x01F9A4 }, + { "Asia/Ulaanbaatar" , 0x01FA21 }, + { "Asia/Ulan_Bator" , 0x01FB7C }, + { "Asia/Urumqi" , 0x01FCC9 }, + { "Asia/Ust-Nera" , 0x01FD2B }, + { "Asia/Vientiane" , 0x01FF3D }, + { "Asia/Vladivostok" , 0x01FFB5 }, + { "Asia/Yakutsk" , 0x02019F }, + { "Asia/Yekaterinburg" , 0x020389 }, + { "Asia/Yerevan" , 0x0205AA }, + { "Atlantic/Azores" , 0x0207AA }, + { "Atlantic/Bermuda" , 0x020CAD }, + { "Atlantic/Canary" , 0x020F8E }, + { "Atlantic/Cape_Verde" , 0x021264 }, + { "Atlantic/Faeroe" , 0x0212DD }, + { "Atlantic/Faroe" , 0x021581 }, + { "Atlantic/Jan_Mayen" , 0x021825 }, + { "Atlantic/Madeira" , 0x021B57 }, + { "Atlantic/Reykjavik" , 0x022060 }, + { "Atlantic/South_Georgia" , 0x022219 }, + { "Atlantic/St_Helena" , 0x02242B }, + { "Atlantic/Stanley" , 0x02225D }, + { "Australia/ACT" , 0x022480 }, + { "Australia/Adelaide" , 0x0227A3 }, + { "Australia/Brisbane" , 0x022AD5 }, + { "Australia/Broken_Hill" , 0x022BA2 }, + { "Australia/Canberra" , 0x022EE6 }, + { "Australia/Currie" , 0x023209 }, + { "Australia/Darwin" , 0x023542 }, + { "Australia/Eucla" , 0x0235CE }, + { "Australia/Hobart" , 0x0236AA }, + { "Australia/LHI" , 0x023A0E }, + { "Australia/Lindeman" , 0x023CAF }, + { "Australia/Lord_Howe" , 0x023D96 }, + { "Australia/Melbourne" , 0x024047 }, + { "Australia/North" , 0x024372 }, + { "Australia/NSW" , 0x0243EC }, + { "Australia/Perth" , 0x02470F }, + { "Australia/Queensland" , 0x0247ED }, + { "Australia/South" , 0x02489F }, + { "Australia/Sydney" , 0x024BC2 }, + { "Australia/Tasmania" , 0x024F05 }, + { "Australia/Victoria" , 0x025250 }, + { "Australia/West" , 0x025573 }, + { "Australia/Yancowinna" , 0x02562F }, + { "Brazil/Acre" , 0x025957 }, + { "Brazil/DeNoronha" , 0x025A5B }, + { "Brazil/East" , 0x025B7B }, + { "Brazil/West" , 0x025E58 }, + { "Canada/Atlantic" , 0x025F50 }, + { "Canada/Central" , 0x026438 }, + { "Canada/East-Saskatchewan" , 0x026D42 }, + { "Canada/Eastern" , 0x026852 }, + { "Canada/Mountain" , 0x026ECB }, + { "Canada/Newfoundland" , 0x027241 }, + { "Canada/Pacific" , 0x02776C }, + { "Canada/Saskatchewan" , 0x027B85 }, + { "Canada/Yukon" , 0x027D0E }, + { "CET" , 0x028011 }, + { "Chile/Continental" , 0x02831A }, + { "Chile/EasterIsland" , 0x0286B5 }, + { "CST6CDT" , 0x0289F7 }, + { "Cuba" , 0x028D48 }, + { "EET" , 0x0290BB }, + { "Egypt" , 0x02936E }, + { "Eire" , 0x029755 }, + { "EST" , 0x029C66 }, + { "EST5EDT" , 0x029CAA }, + { "Etc/GMT" , 0x029FFB }, + { "Etc/GMT+0" , 0x02A0C7 }, + { "Etc/GMT+1" , 0x02A151 }, + { "Etc/GMT+10" , 0x02A1DE }, + { "Etc/GMT+11" , 0x02A26C }, + { "Etc/GMT+12" , 0x02A2FA }, + { "Etc/GMT+2" , 0x02A415 }, + { "Etc/GMT+3" , 0x02A4A1 }, + { "Etc/GMT+4" , 0x02A52D }, + { "Etc/GMT+5" , 0x02A5B9 }, + { "Etc/GMT+6" , 0x02A645 }, + { "Etc/GMT+7" , 0x02A6D1 }, + { "Etc/GMT+8" , 0x02A75D }, + { "Etc/GMT+9" , 0x02A7E9 }, + { "Etc/GMT-0" , 0x02A083 }, + { "Etc/GMT-1" , 0x02A10B }, + { "Etc/GMT-10" , 0x02A197 }, + { "Etc/GMT-11" , 0x02A225 }, + { "Etc/GMT-12" , 0x02A2B3 }, + { "Etc/GMT-13" , 0x02A341 }, + { "Etc/GMT-14" , 0x02A388 }, + { "Etc/GMT-2" , 0x02A3CF }, + { "Etc/GMT-3" , 0x02A45B }, + { "Etc/GMT-4" , 0x02A4E7 }, + { "Etc/GMT-5" , 0x02A573 }, + { "Etc/GMT-6" , 0x02A5FF }, + { "Etc/GMT-7" , 0x02A68B }, + { "Etc/GMT-8" , 0x02A717 }, + { "Etc/GMT-9" , 0x02A7A3 }, + { "Etc/GMT0" , 0x02A03F }, + { "Etc/Greenwich" , 0x02A82F }, + { "Etc/UCT" , 0x02A873 }, + { "Etc/Universal" , 0x02A8B7 }, + { "Etc/UTC" , 0x02A8FB }, + { "Etc/Zulu" , 0x02A93F }, + { "Europe/Amsterdam" , 0x02A983 }, + { "Europe/Andorra" , 0x02ADC1 }, + { "Europe/Athens" , 0x02B03D }, + { "Europe/Belfast" , 0x02B380 }, + { "Europe/Belgrade" , 0x02B8B7 }, + { "Europe/Berlin" , 0x02BB80 }, + { "Europe/Bratislava" , 0x02BEE4 }, + { "Europe/Brussels" , 0x02C216 }, + { "Europe/Bucharest" , 0x02C64D }, + { "Europe/Budapest" , 0x02C977 }, + { "Europe/Busingen" , 0x02CCE0 }, + { "Europe/Chisinau" , 0x02CF97 }, + { "Europe/Copenhagen" , 0x02D325 }, + { "Europe/Dublin" , 0x02D62F }, + { "Europe/Gibraltar" , 0x02DB40 }, + { "Europe/Guernsey" , 0x02DF97 }, + { "Europe/Helsinki" , 0x02E4CE }, + { "Europe/Isle_of_Man" , 0x02E784 }, + { "Europe/Istanbul" , 0x02ECBB }, + { "Europe/Jersey" , 0x02F0A8 }, + { "Europe/Kaliningrad" , 0x02F5DF }, + { "Europe/Kiev" , 0x02F84A }, + { "Europe/Lisbon" , 0x02FB66 }, + { "Europe/Ljubljana" , 0x03006A }, + { "Europe/London" , 0x030333 }, + { "Europe/Luxembourg" , 0x03086A }, + { "Europe/Madrid" , 0x030CC0 }, + { "Europe/Malta" , 0x031086 }, + { "Europe/Mariehamn" , 0x03143F }, + { "Europe/Minsk" , 0x0316F5 }, + { "Europe/Monaco" , 0x031903 }, + { "Europe/Moscow" , 0x031D3E }, + { "Europe/Nicosia" , 0x031F98 }, + { "Europe/Oslo" , 0x032280 }, + { "Europe/Paris" , 0x0325B2 }, + { "Europe/Podgorica" , 0x0329F8 }, + { "Europe/Prague" , 0x032CC1 }, + { "Europe/Riga" , 0x032FF3 }, + { "Europe/Rome" , 0x033338 }, + { "Europe/Samara" , 0x0336FB }, + { "Europe/San_Marino" , 0x033964 }, + { "Europe/Sarajevo" , 0x033D27 }, + { "Europe/Simferopol" , 0x033FF0 }, + { "Europe/Skopje" , 0x034241 }, + { "Europe/Sofia" , 0x03450A }, + { "Europe/Stockholm" , 0x034812 }, + { "Europe/Tallinn" , 0x034AC1 }, + { "Europe/Tirane" , 0x034DFB }, + { "Europe/Tiraspol" , 0x035101 }, + { "Europe/Uzhgorod" , 0x03548F }, + { "Europe/Vaduz" , 0x0357A6 }, + { "Europe/Vatican" , 0x035A55 }, + { "Europe/Vienna" , 0x035E18 }, + { "Europe/Vilnius" , 0x036145 }, + { "Europe/Volgograd" , 0x036484 }, + { "Europe/Warsaw" , 0x0366A5 }, + { "Europe/Zagreb" , 0x036A86 }, + { "Europe/Zaporozhye" , 0x036D4F }, + { "Europe/Zurich" , 0x037090 }, + { "Factory" , 0x03733F }, + { "GB" , 0x0373B0 }, + { "GB-Eire" , 0x0378E7 }, + { "GMT" , 0x037E1E }, + { "GMT+0" , 0x037EEA }, + { "GMT-0" , 0x037EA6 }, + { "GMT0" , 0x037E62 }, + { "Greenwich" , 0x037F2E }, + { "Hongkong" , 0x037F72 }, + { "HST" , 0x038134 }, + { "Iceland" , 0x038178 }, + { "Indian/Antananarivo" , 0x038331 }, + { "Indian/Chagos" , 0x0383A5 }, + { "Indian/Christmas" , 0x038407 }, + { "Indian/Cocos" , 0x03844B }, + { "Indian/Comoro" , 0x03848F }, + { "Indian/Kerguelen" , 0x0384E4 }, + { "Indian/Mahe" , 0x038539 }, + { "Indian/Maldives" , 0x03858E }, + { "Indian/Mauritius" , 0x0385E3 }, + { "Indian/Mayotte" , 0x038659 }, + { "Indian/Reunion" , 0x0386AE }, + { "Iran" , 0x038703 }, + { "Israel" , 0x038971 }, + { "Jamaica" , 0x038CA0 }, + { "Japan" , 0x038D65 }, + { "Kwajalein" , 0x038DEF }, + { "Libya" , 0x038E52 }, + { "MET" , 0x038F5B }, + { "Mexico/BajaNorte" , 0x039264 }, + { "Mexico/BajaSur" , 0x0395CD }, + { "Mexico/General" , 0x039812 }, + { "MST" , 0x039A70 }, + { "MST7MDT" , 0x039AB4 }, + { "Navajo" , 0x039E05 }, + { "NZ" , 0x03A17E }, + { "NZ-CHAT" , 0x03A4FC }, + { "Pacific/Apia" , 0x03A7E0 }, + { "Pacific/Auckland" , 0x03A97C }, + { "Pacific/Chatham" , 0x03AD08 }, + { "Pacific/Chuuk" , 0x03AFFB }, + { "Pacific/Easter" , 0x03B054 }, + { "Pacific/Efate" , 0x03B3A3 }, + { "Pacific/Enderbury" , 0x03B469 }, + { "Pacific/Fakaofo" , 0x03B4D7 }, + { "Pacific/Fiji" , 0x03B528 }, + { "Pacific/Funafuti" , 0x03B6BB }, + { "Pacific/Galapagos" , 0x03B6FF }, + { "Pacific/Gambier" , 0x03B777 }, + { "Pacific/Guadalcanal" , 0x03B7DC }, + { "Pacific/Guam" , 0x03B831 }, + { "Pacific/Honolulu" , 0x03B887 }, + { "Pacific/Johnston" , 0x03B8FE }, + { "Pacific/Kiritimati" , 0x03B97D }, + { "Pacific/Kosrae" , 0x03B9E8 }, + { "Pacific/Kwajalein" , 0x03BA45 }, + { "Pacific/Majuro" , 0x03BAB1 }, + { "Pacific/Marquesas" , 0x03BB10 }, + { "Pacific/Midway" , 0x03BB77 }, + { "Pacific/Nauru" , 0x03BC01 }, + { "Pacific/Niue" , 0x03BC79 }, + { "Pacific/Norfolk" , 0x03BCD7 }, + { "Pacific/Noumea" , 0x03BD2C }, + { "Pacific/Pago_Pago" , 0x03BDBC }, + { "Pacific/Palau" , 0x03BE33 }, + { "Pacific/Pitcairn" , 0x03BE77 }, + { "Pacific/Pohnpei" , 0x03BECC }, + { "Pacific/Ponape" , 0x03BF21 }, + { "Pacific/Port_Moresby" , 0x03BF66 }, + { "Pacific/Rarotonga" , 0x03BFAA }, + { "Pacific/Saipan" , 0x03C086 }, + { "Pacific/Samoa" , 0x03C0E9 }, + { "Pacific/Tahiti" , 0x03C160 }, + { "Pacific/Tarawa" , 0x03C1C5 }, + { "Pacific/Tongatapu" , 0x03C219 }, + { "Pacific/Truk" , 0x03C2A5 }, + { "Pacific/Wake" , 0x03C2EA }, + { "Pacific/Wallis" , 0x03C33A }, + { "Pacific/Yap" , 0x03C37E }, + { "Poland" , 0x03C3C3 }, + { "Portugal" , 0x03C7A4 }, + { "PRC" , 0x03CCA0 }, + { "PST8PDT" , 0x03CD40 }, + { "ROC" , 0x03D091 }, + { "ROK" , 0x03D1C2 }, + { "Singapore" , 0x03D289 }, + { "Turkey" , 0x03D340 }, + { "UCT" , 0x03D72D }, + { "Universal" , 0x03D771 }, + { "US/Alaska" , 0x03D7B5 }, + { "US/Aleutian" , 0x03DB1E }, + { "US/Arizona" , 0x03DE84 }, + { "US/Central" , 0x03DF12 }, + { "US/East-Indiana" , 0x03E91C }, + { "US/Eastern" , 0x03E41D }, + { "US/Hawaii" , 0x03EB86 }, + { "US/Indiana-Starke" , 0x03EBF7 }, + { "US/Michigan" , 0x03EF68 }, + { "US/Mountain" , 0x03F29F }, + { "US/Pacific" , 0x03F618 }, + { "US/Pacific-New" , 0x03FA1D }, + { "US/Samoa" , 0x03FE22 }, + { "UTC" , 0x03FE99 }, + { "W-SU" , 0x040190 }, + { "WET" , 0x03FEDD }, + { "Zulu" , 0x0403D3 }, }; /* This is a generated file, do not modify */ -const unsigned char timelib_timezone_db_data_builtin[263151] = { +const unsigned char timelib_timezone_db_data_builtin[263191] = { /* Africa/Abidjan */ @@ -698,8 +698,8 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { /* Africa/Blantyre */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC3, 0xB0, -0x01, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, +0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4, +0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x3E, 0xE2, 0x01, 0x48, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, @@ -713,10 +713,11 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { /* Africa/Bujumbura */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, -0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x84, 0x2A, 0xA2, 0x01, 0x3F, 0x77, 0xDA, -0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4, +0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, +0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x2A, 0xA2, 0x01, 0x3F, 0x77, +0xDA, 0x00, 0x00, 0x00, 0x00, /* Africa/Cairo */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -963,18 +964,17 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { /* Africa/Gaborone */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0E, 0x82, 0x46, 0xCF, 0x68, -0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, 0x01, 0x02, 0x01, 0x00, 0x00, 0x15, 0x18, 0x00, -0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x09, 0x53, 0x41, 0x53, -0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x63, 0xB7, 0x57, 0x01, 0x3A, 0x34, 0x32, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4, +0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, +0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xB7, 0x57, 0x01, 0x3A, 0x34, +0x32, 0x00, 0x00, 0x00, 0x00, /* Africa/Harare */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC7, 0x64, -0x01, 0x00, 0x00, 0x1D, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, +0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4, +0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x1E, 0x1A, 0x01, 0x42, 0x09, 0x68, 0x00, 0x00, 0x00, 0x00, @@ -1040,8 +1040,8 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { /* Africa/Kigali */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xBE, 0xF1, 0x0E, 0x50, -0x01, 0x00, 0x00, 0x1C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, +0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4, +0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x5A, 0x88, 0x01, 0x40, 0x89, 0x4A, 0x00, 0x00, 0x00, 0x00, @@ -1088,17 +1088,18 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { /* Africa/Lubumbashi */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, -0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x77, 0x86, 0xF5, 0x01, 0x3C, 0x91, 0xAA, -0x00, 0x00, 0x00, 0x17, 0x65, 0x61, 0x73, 0x74, 0x20, 0x44, 0x65, 0x6D, 0x2E, 0x20, 0x52, 0x65, -0x70, 0x2E, 0x20, 0x6F, 0x66, 0x20, 0x43, 0x6F, 0x6E, 0x67, 0x6F, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4, +0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, +0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x86, 0xF5, 0x01, 0x3C, 0x91, +0xAA, 0x00, 0x00, 0x00, 0x17, 0x65, 0x61, 0x73, 0x74, 0x20, 0x44, 0x65, 0x6D, 0x2E, 0x20, 0x52, +0x65, 0x70, 0x2E, 0x20, 0x6F, 0x66, 0x20, 0x43, 0x6F, 0x6E, 0x67, 0x6F, /* Africa/Lusaka */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x5A, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC9, 0xFC, -0x01, 0x00, 0x00, 0x1A, 0x84, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, +0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4, +0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xCE, 0x1D, 0x01, 0x3D, 0xD0, 0xAD, 0x00, 0x00, 0x00, 0x00, @@ -1121,19 +1122,20 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { /* Africa/Maseru */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x82, 0x46, 0xCA, 0xB8, -0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, 0x01, 0x02, 0x01, 0x00, 0x00, 0x19, 0xC8, 0x00, -0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x5D, 0xD5, -0x01, 0x3C, 0x9E, 0xB0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x82, 0x46, 0xCF, 0x68, +0xCC, 0xAE, 0x8C, 0x80, 0xCD, 0x9E, 0x6F, 0x70, 0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, +0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x5C, 0x5D, 0xD5, 0x01, 0x3C, 0x9E, 0xB0, 0x00, 0x00, 0x00, 0x00, /* Africa/Mbabane */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x82, 0x46, 0xC7, 0x58, -0x01, 0x00, 0x00, 0x1D, 0x28, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x32, 0xD0, 0x01, 0x42, -0x1C, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x82, 0x46, 0xCF, 0x68, +0xCC, 0xAE, 0x8C, 0x80, 0xCD, 0x9E, 0x6F, 0x70, 0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, +0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x61, 0x32, 0xD0, 0x01, 0x42, 0x1C, 0xF0, 0x00, 0x00, 0x00, 0x00, /* Africa/Mogadishu */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -4056,7 +4058,7 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { 0x50, 0x48, 0x50, 0x31, 0x01, 0x4A, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x0F, 0xB4, 0xFF, -0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, +0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, @@ -8909,7 +8911,7 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { /* Asia/Novokuznetsk */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1A, 0xA1, 0xF9, 0x13, 0x40, +0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1A, 0xAA, 0x18, 0x20, 0xC0, 0xB5, 0xA3, 0xE1, 0x20, 0x15, 0x27, 0x6F, 0x90, 0x16, 0x18, 0xA4, 0x00, 0x17, 0x08, 0xA3, 0x10, 0x17, 0xF9, 0xD7, 0x80, 0x18, 0xE9, 0xD6, 0x90, 0x19, 0xDB, 0x0B, 0x00, 0x1A, 0xCC, 0x5B, 0x90, 0x1B, 0xBC, 0x68, 0xB0, 0x1C, 0xAC, 0x59, 0xB0, 0x1D, 0x9C, 0x4A, 0xB0, 0x1E, 0x8C, 0x3B, 0xB0, @@ -8934,7 +8936,7 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x0F, 0x00, 0x00, 0x54, 0x60, 0x00, 0x15, 0x00, 0x00, 0x62, -0x70, 0x00, 0x15, 0x4E, 0x4D, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x53, +0x70, 0x00, 0x15, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x53, 0x54, 0x00, 0x4E, 0x4F, 0x56, 0x53, 0x54, 0x00, 0x4E, 0x4F, 0x56, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0x58, 0x58, 0x01, 0x97, 0x96, 0x72, 0x00, 0x00, 0x00, 0x31, 0x4D, @@ -16412,7 +16414,7 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x0F, 0xB4, 0xFF, -0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, +0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, @@ -18530,4 +18532,4 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = { 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, }; -const timelib_tzdb timezonedb_builtin = { "2014.7", 582, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2014.8", 582, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/ext_skel b/ext/ext_skel index 650dae1e57..cd545ecf39 100755 --- a/ext/ext_skel +++ b/ext/ext_skel @@ -156,12 +156,12 @@ if test "\$PHP_$EXTNAME" != "no"; then dnl PHP_CHECK_LIBRARY(\$LIBNAME,\$LIBSYMBOL, dnl [ - dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/lib, ${EXTNAME}_SHARED_LIBADD) + dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/\$PHP_LIBDIR, ${EXTNAME}_SHARED_LIBADD) dnl AC_DEFINE(HAVE_${EXTNAME}LIB,1,[ ]) dnl ],[ dnl AC_MSG_ERROR([wrong $extname lib version or lib not found]) dnl ],[ - dnl -L\$${EXTNAME}_DIR/lib -lm + dnl -L\$${EXTNAME}_DIR/\$PHP_LIBDIR -lm dnl ]) dnl dnl PHP_SUBST(${EXTNAME}_SHARED_LIBADD) diff --git a/ext/fileinfo/libmagic/apprentice.c b/ext/fileinfo/libmagic/apprentice.c index fd82564bff..b137405da2 100644 --- a/ext/fileinfo/libmagic/apprentice.c +++ b/ext/fileinfo/libmagic/apprentice.c @@ -1269,7 +1269,7 @@ file_signextend(struct magic_set *ms, struct magic *m, uint64_t v) * the sign extension must have happened. */ case FILE_BYTE: - v = (char) v; + v = (signed char) v; break; case FILE_SHORT: case FILE_BESHORT: diff --git a/ext/gd/tests/bug48801_1.phpt b/ext/gd/tests/bug48801_1.phpt index ef2aa1dba7..0ab6d7cdd9 100644 --- a/ext/gd/tests/bug48801_1.phpt +++ b/ext/gd/tests/bug48801_1.phpt @@ -1,13 +1,12 @@ --TEST-- -Bug #48801 (Problem with imagettfbbox) freetype >= 2.4.10 and < 2.4.12 +Bug #48801 (Problem with imagettfbbox) freetype >= 2.4.10 --SKIPIF-- <?php if(!extension_loaded('gd')){ die('skip gd extension not available'); } if(!function_exists('imageftbbox')) die('skip imageftbbox() not available'); include dirname(__FILE__) . '/func.inc'; - if(version_compare(get_freetype_version(), '2.4.10') < 0) die('skip for freetype >= 2.4.10'); - if(version_compare(get_freetype_version(), '2.4.12') >= 0) die('skip for freetype < 2.4.12'); + if(version_compare(get_freetype_version(), '2.4.10') == -1) die('skip for freetype >= 2.4.10'); ?> --FILE-- <?php @@ -21,6 +20,6 @@ echo '(' . $bbox[6] . ', ' . $bbox[7] . ")\n"; ?> --EXPECTF-- (-1, 15) -(156, 15) -(156, -48) +(15%d, 15) +(15%d, -48) (-1, -48) diff --git a/ext/gd/tests/bug48801_2.phpt b/ext/gd/tests/bug48801_2.phpt deleted file mode 100644 index b2a719fa02..0000000000 --- a/ext/gd/tests/bug48801_2.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -Bug #48801 (Problem with imagettfbbox) freetype >= 2.4.12 ---SKIPIF-- -<?php - if(!extension_loaded('gd')){ die('skip gd extension not available'); } - if(!function_exists('imageftbbox')) die('skip imageftbbox() not available'); - - include dirname(__FILE__) . '/func.inc'; - if(version_compare(get_freetype_version(), '2.4.12') < 0) die('skip for freetype >= 2.4.12'); -?> ---FILE-- -<?php -$cwd = dirname(__FILE__); -$font = "$cwd/Tuffy.ttf"; -$bbox = imageftbbox(50, 0, $font, "image"); -echo '(' . $bbox[0] . ', ' . $bbox[1] . ")\n"; -echo '(' . $bbox[2] . ', ' . $bbox[3] . ")\n"; -echo '(' . $bbox[4] . ', ' . $bbox[5] . ")\n"; -echo '(' . $bbox[6] . ', ' . $bbox[7] . ")\n"; -?> ---EXPECTF-- -(-1, 15) -(155, 15) -(155, -48) -(-1, -48) diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index da5aa5f9cd..6de334df54 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -385,6 +385,23 @@ static int _get_lderrno(LDAP *ldap) } /* }}} */ +/* {{{ _set_lderrno + */ +static void _set_lderrno(LDAP *ldap, int lderr) +{ +#if !HAVE_NSLDAP +#if LDAP_API_VERSION > 2000 || HAVE_ORALDAP + /* New versions of OpenLDAP do it this way */ + ldap_set_option(ldap, LDAP_OPT_ERROR_NUMBER, &lderr); +#else + ldap->ld_errno = lderr; +#endif +#else + ldap_set_lderrno(ldap, lderr, NULL, NULL); +#endif +} +/* }}} */ + /* {{{ proto bool ldap_bind(resource link [, string dn [, string password]]) Bind to LDAP directory */ PHP_FUNCTION(ldap_bind) @@ -399,18 +416,20 @@ PHP_FUNCTION(ldap_bind) RETURN_FALSE; } + ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link); + if (ldap_bind_dn != NULL && memchr(ldap_bind_dn, '\0', ldap_bind_dnlen) != NULL) { + _set_lderrno(ld->link, LDAP_INVALID_CREDENTIALS); php_error_docref(NULL TSRMLS_CC, E_WARNING, "DN contains a null byte"); RETURN_FALSE; } if (ldap_bind_pw != NULL && memchr(ldap_bind_pw, '\0', ldap_bind_pwlen) != NULL) { + _set_lderrno(ld->link, LDAP_INVALID_CREDENTIALS); php_error_docref(NULL TSRMLS_CC, E_WARNING, "Password contains a null byte"); RETURN_FALSE; } - ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link); - if ((rc = ldap_bind_s(ld->link, ldap_bind_dn, ldap_bind_pw, LDAP_AUTH_SIMPLE)) != LDAP_SUCCESS) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to bind to server: %s", ldap_err2string(rc)); RETURN_FALSE; diff --git a/ext/mysqlnd/mysqlnd_ps_codec.c b/ext/mysqlnd/mysqlnd_ps_codec.c index fa4ed9da6f..d96091210b 100644 --- a/ext/mysqlnd/mysqlnd_ps_codec.c +++ b/ext/mysqlnd/mysqlnd_ps_codec.c @@ -200,17 +200,27 @@ ps_fetch_float(zval * zv, const MYSQLND_FIELD * const field, unsigned int pack_l /* The following cast is guaranteed to do the right thing */ dval = (double) d32val; } +#elif defined(PHP_WIN32) + { + /* float datatype on Winows is already 4 byte but has a precision of 7 digits */ + char num_buf[2048]; + (void)_gcvt_s(num_buf, 2048, fval, field->decimals >= 31 ? 7 : field->decimals); + dval = zend_strtod(num_buf, NULL); + } #else { char num_buf[2048]; /* Over allocated */ char *s; +#ifndef FLT_DIG +# define FLT_DIG 6 +#endif /* Convert to string. Ignoring localization, etc. * Following MySQL's rules. If precision is undefined (NOT_FIXED_DEC i.e. 31) * or larger than 31, the value is limited to 6 (FLT_DIG). */ s = php_gcvt(fval, - field->decimals >= 31 ? 6 : field->decimals, + field->decimals >= 31 ? FLT_DIG : field->decimals, '.', 'e', num_buf); diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index 79d4a09f66..5736caa2e5 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -249,7 +249,7 @@ static size_t php_openssl_sockop_read(php_stream *stream, char *buf, size_t coun to hang forever. To avoid this scenario we poll with a timeout before performing the actual read. If it times out we're finished. */ - if (sock->is_blocked) { + if (sock->is_blocked && SSL_pending(sslsock->ssl_handle) == 0) { php_openssl_stream_wait_for_data(sock); if (sock->timeout_event) { stream->eof = 1; @@ -881,17 +881,19 @@ static int php_openssl_sockop_cast(php_stream *stream, int castas, void **ret TS case PHP_STREAM_AS_FD_FOR_SELECT: if (ret) { - if (sslsock->ssl_active) { - /* OpenSSL has an internal buffer which select() cannot see. If we don't - fetch it into the stream's buffer, no activity will be reported on the - stream even though there is data waiting to be read - but we only fetch - the number of bytes OpenSSL has ready to give us since we weren't asked - for any data at this stage. This is only likely to cause issues with - non-blocking streams, but it's harmless to always do it. */ - int bytes; - while ((bytes = SSL_pending(sslsock->ssl_handle)) > 0) { - php_stream_fill_read_buffer(stream, (size_t)bytes); - } + /* OpenSSL has an internal buffer which select() cannot see. If we don't + * fetch it into the stream's buffer, no activity will be reported on the + * stream even though there is data waiting to be read - but we only fetch + * the lower of bytes OpenSSL has ready to give us or chunk_size since we + * weren't asked for any data at this stage. This is only likely to cause + * issues with non-blocking streams, but it's harmless to always do it. */ + size_t pending; + if (stream->writepos == stream->readpos + && sslsock->ssl_active + && (pending = (size_t)SSL_pending(sslsock->ssl_handle)) > 0) { + php_stream_fill_read_buffer(stream, pending < stream->chunk_size + ? pending + : stream->chunk_size); } *(php_socket_t *)ret = sslsock->s.socket; diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 31d836a7ac..4294ceac81 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1007,9 +1007,12 @@ static int _extension_class_string(zend_class_entry **pce TSRMLS_DC, int num_arg int *num_classes = va_arg(args, int*); if (((*pce)->type == ZEND_INTERNAL_CLASS) && (*pce)->info.internal.module && !strcasecmp((*pce)->info.internal.module->name, module->name)) { - string_printf(str, "\n"); - _class_string(str, *pce, NULL, indent TSRMLS_CC); - (*num_classes)++; + /* dump class if it is not an alias */ + if (!zend_binary_strcasecmp((*pce)->name, (*pce)->name_length, hash_key->arKey, hash_key->nKeyLength-1)) { + string_printf(str, "\n"); + _class_string(str, *pce, NULL, indent TSRMLS_CC); + (*num_classes)++; + } } return ZEND_HASH_APPLY_KEEP; } @@ -5360,12 +5363,24 @@ static int add_extension_class(zend_class_entry **pce TSRMLS_DC, int num_args, v int add_reflection_class = va_arg(args, int); if (((*pce)->type == ZEND_INTERNAL_CLASS) && (*pce)->info.internal.module && !strcasecmp((*pce)->info.internal.module->name, module->name)) { + const char *name; + int nlen; + + if (zend_binary_strcasecmp((*pce)->name, (*pce)->name_length, hash_key->arKey, hash_key->nKeyLength-1)) { + /* This is an class alias, use alias name */ + name = hash_key->arKey; + nlen = hash_key->nKeyLength-1; + } else { + /* Use class name */ + name = (*pce)->name; + nlen = (*pce)->name_length; + } if (add_reflection_class) { ALLOC_ZVAL(zclass); zend_reflection_class_factory(*pce, zclass TSRMLS_CC); - add_assoc_zval_ex(class_array, (*pce)->name, (*pce)->name_length + 1, zclass); + add_assoc_zval_ex(class_array, name, nlen+1, zclass); } else { - add_next_index_stringl(class_array, (*pce)->name, (*pce)->name_length, 1); + add_next_index_stringl(class_array, name, nlen, 1); } } return ZEND_HASH_APPLY_KEEP; diff --git a/ext/standard/image.c b/ext/standard/image.c index 02246c6268..f1910d2191 100644 --- a/ext/standard/image.c +++ b/ext/standard/image.c @@ -365,8 +365,8 @@ static unsigned short php_read2(php_stream * stream TSRMLS_DC) { unsigned char a[2]; - /* just return 0 if we hit the end-of-file */ - if((php_stream_read(stream, a, sizeof(a))) <= 0) return 0; + /* return 0 if we couldn't read enough data */ + if((php_stream_read(stream, a, sizeof(a))) < sizeof(a)) return 0; return (((unsigned short)a[0]) << 8) + ((unsigned short)a[1]); } @@ -646,7 +646,7 @@ static struct gfxinfo *php_handle_jpc(php_stream * stream TSRMLS_DC) #endif result->channels = php_read2(stream TSRMLS_CC); /* Csiz */ - if (result->channels < 0 || result->channels > 256) { + if (result->channels == 0 && php_stream_eof(stream) || result->channels > 256) { efree(result); return NULL; } diff --git a/ext/standard/tests/streams/proc_open_bug51800.phpt b/ext/standard/tests/streams/proc_open_bug51800.phpt new file mode 100644 index 0000000000..53cafd8555 --- /dev/null +++ b/ext/standard/tests/streams/proc_open_bug51800.phpt @@ -0,0 +1,95 @@ +--TEST-- +Bug #51800 proc_open on Windows hangs forever +--SKIPIF-- +<?php + echo 'skip expected to fail or take too long'; + if (getenv("SKIP_SLOW_TESTS")) { + die("skip slow test"); + } +?> +--XFAIL-- +pipes have to be read/written simultaneously +--FILE-- +<?php +/* This is the wrong way to do it. The parent will block till it has read all the STDIN. +The smaller the pipe buffer is, the longer it will take. It might even pass at the end, +after taking inappropriately long. Pipes have to be read simultaneously in smaller chunks, +so then the pipe buffer is emptied more often and the child has chance to continue its +write. The behaviour might look some better if write/read in a separate thread, however +this is much more resource greedy and complexer to integrate into the user script. */ + +$callee = dirname(__FILE__) . "/process_proc_open_bug51800.php"; +$php = PHP_BINARY; +$cmd = "$php $callee"; + +$status; +$stdout = ""; +$stderr = ""; +$pipes = array(); + +$descriptors = array( + 0 => array("pipe", "rb"), // stdin + 1 => array("pipe", "wb"), // stdout + 2 => array("pipe", "wb") // stderr + ); + +/* create the proc file */ +$r = file_put_contents($callee, '<?php + +$how_much = 10000; + +$data0 = str_repeat("a", $how_much); +$data1 = str_repeat("b", $how_much); +fwrite(STDOUT, $data0); +fwrite(STDERR, $data1); + +exit(0); +'); + +if (!$r) { + die("couldn't create helper script '$callee'"); +} + +$process = proc_open($cmd, $descriptors, $pipes); + +if (is_resource($process)) +{ + fclose($pipes[0]); + + while (!feof($pipes[1])) + $stdout .= fread($pipes[1], 1024); + fclose($pipes[1]); + + while (!feof($pipes[2])) + $stderr .= fread($pipes[2], 1024); + fclose($pipes[2]); + + $status = proc_close($process); +} + +var_dump(array( + "status" => $status, + "stdout" => $stdout, + "stderr" => $stderr, +), strlen($stdout), strlen($stderr)); + +?> +===DONE=== +--CLEAN-- +<?php +$callee = dirname(__FILE__) . "/process_proc_open_bug51800.php"; +unlink($callee); +?> +--EXPECTF-- +array(3) { + ["status"]=> + int(0) + ["stdout"]=> + string(10000) "a%s" + ["stderr"]=> + string(10000) "b%s" +} +int(10000) +int(10000) +===DONE=== + diff --git a/ext/standard/tests/streams/proc_open_bug51800_right.phpt b/ext/standard/tests/streams/proc_open_bug51800_right.phpt new file mode 100644 index 0000000000..b14fed2e5d --- /dev/null +++ b/ext/standard/tests/streams/proc_open_bug51800_right.phpt @@ -0,0 +1,78 @@ +--TEST-- +Bug #51800 proc_open on Windows hangs forever, the right way to do it +--FILE-- +<?php +$callee = dirname(__FILE__) . "/process_proc_open_bug51800_right.php"; +$php = PHP_BINARY; +$cmd = "$php $callee"; + +$status; +$stdout = ""; +$stderr = ""; +$pipes = array(); + +$descriptors = array( + 0 => array("pipe", "rb"), // stdin + 1 => array("pipe", "wb"), // stdout + 2 => array("pipe", "wb") // stderr + ); + +/* create the proc file */ +$r = file_put_contents($callee, '<?php + +$how_much = 10000; + +$data0 = str_repeat("a", $how_much); +$data1 = str_repeat("b", $how_much); +fwrite(STDOUT, $data0); +fwrite(STDERR, $data1); + +exit(0); +'); + +if (!$r) { + die("couldn't create helper script '$callee'"); +} + +$process = proc_open($cmd, $descriptors, $pipes); + +if (is_resource($process)) +{ + fclose($pipes[0]); + + while (!feof($pipes[1]) || !feof($pipes[2])) { + $stdout .= fread($pipes[1], 1024); + $stderr .= fread($pipes[2], 1024); + } + fclose($pipes[1]); + fclose($pipes[2]); + + $status = proc_close($process); +} + +var_dump(array( + "status" => $status, + "stdout" => $stdout, + "stderr" => $stderr, +), strlen($stdout), strlen($stderr)); + +?> +===DONE=== +--CLEAN-- +<?php +$callee = dirname(__FILE__) . "/process_proc_open_bug51800_right.php"; +unlink($callee); +?> +--EXPECTF-- +array(3) { + ["status"]=> + int(0) + ["stdout"]=> + string(10000) "a%s" + ["stderr"]=> + string(10000) "b%s" +} +int(10000) +int(10000) +===DONE=== + diff --git a/ext/standard/tests/streams/proc_open_bug51800_right2.phpt b/ext/standard/tests/streams/proc_open_bug51800_right2.phpt new file mode 100644 index 0000000000..1e742745c1 --- /dev/null +++ b/ext/standard/tests/streams/proc_open_bug51800_right2.phpt @@ -0,0 +1,84 @@ +--TEST-- +Bug #51800 proc_open on Windows hangs forever, the right way to do it with more data +--FILE-- +<?php +$callee = dirname(__FILE__) . "/process_proc_open_bug51800_right2.php"; +$php = PHP_BINARY; +$cmd = "$php $callee"; + +$status; +$stdout = ""; +$stderr = ""; +$pipes = array(); + +$descriptors = array( + 0 => array("pipe", "rb"), // stdin + 1 => array("pipe", "wb"), // stdout + 2 => array("pipe", "wb") // stderr + ); + +/* create the proc file */ +$r = file_put_contents($callee, '<?php +$how_much = 1000000; + +$data0 = str_repeat("a", $how_much); +$data1 = str_repeat("b", $how_much); +$i0 = $i1 = 0; +$step = 1024; + +while ($i0 < strlen($data0) && $i1 < strlen($data1)) { + fwrite(STDOUT, substr($data0, $i0, $step)); + fwrite(STDERR, substr($data1, $i1, $step)); + $i0 += $step; + $i1 += $step; +} + +exit(0); +'); + +if (!$r) { + die("couldn't create helper script '$callee'"); +} + +$process = proc_open($cmd, $descriptors, $pipes); + +if (is_resource($process)) +{ + fclose($pipes[0]); + + while (!feof($pipes[1]) || !feof($pipes[2])) { + $stdout .= fread($pipes[1], 1024); + $stderr .= fread($pipes[2], 1024); + } + fclose($pipes[1]); + fclose($pipes[2]); + + $status = proc_close($process); +} + +var_dump(array( + "status" => $status, + "stdout" => $stdout, + "stderr" => $stderr, +), strlen($stdout), strlen($stderr)); + +?> +===DONE=== +--CLEAN-- +<?php +$callee = dirname(__FILE__) . "/process_proc_open_bug51800_right2.php"; +unlink($callee); +?> +--EXPECTF-- +array(3) { + ["status"]=> + int(0) + ["stdout"]=> + string(1000000) "a%s" + ["stderr"]=> + string(1000000) "b%s" +} +int(1000000) +int(1000000) +===DONE=== + diff --git a/ext/standard/tests/streams/proc_open_bug60120.phpt b/ext/standard/tests/streams/proc_open_bug60120.phpt new file mode 100644 index 0000000000..8768257a2e --- /dev/null +++ b/ext/standard/tests/streams/proc_open_bug60120.phpt @@ -0,0 +1,71 @@ +--TEST-- +Bug #60120 proc_open hangs with stdin/out with 2048+ bytes +--FILE-- +<?php +error_reporting(E_ALL); + +if (substr(PHP_OS, 0, 3) == 'WIN') { + $cmd = PHP_BINARY . ' -n -r "fwrite(STDOUT, $in = file_get_contents(\'php://stdin\')); fwrite(STDERR, $in);"'; +} else { + $cmd = PHP_BINARY . ' -n -r \'fwrite(STDOUT, $in = file_get_contents("php://stdin")); fwrite(STDERR, $in);\''; +} +$descriptors = array(array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w')); +$stdin = str_repeat('*', 1024 * 16) . '!'; +$stdin = str_repeat('*', 2049 ); + +$options = array_merge(array('suppress_errors' => true, 'binary_pipes' => true, 'bypass_shell' => false)); +$process = proc_open($cmd, $descriptors, $pipes, getcwd(), array(), $options); + +foreach ($pipes as $pipe) { + stream_set_blocking($pipe, false); +} +$writePipes = array($pipes[0]); +$stdinLen = strlen($stdin); +$stdinOffset = 0; + +unset($pipes[0]); + +while ($pipes || $writePipes) { + $r = $pipes; + $w = $writePipes; + $e = null; + $n = stream_select($r, $w, $e, 60); + + if (false === $n) { + break; + } elseif ($n === 0) { + proc_terminate($process); + + } + if ($w) { + $written = fwrite($writePipes[0], (binary)substr($stdin, $stdinOffset), 8192); + if (false !== $written) { + $stdinOffset += $written; + } + if ($stdinOffset >= $stdinLen) { + fclose($writePipes[0]); + $writePipes = null; + } + } + + foreach ($r as $pipe) { + $type = array_search($pipe, $pipes); + $data = fread($pipe, 8192); + var_dump($data); + if (false === $data || feof($pipe)) { + fclose($pipe); + unset($pipes[$type]); + } + } +} + + +?> +===DONE=== +--EXPECTF-- +string(2049) "%s" +string(2049) "%s" +string(0) "" +string(0) "" +===DONE=== + diff --git a/ext/standard/tests/streams/proc_open_bug64438.phpt b/ext/standard/tests/streams/proc_open_bug64438.phpt new file mode 100644 index 0000000000..b3857d09d4 --- /dev/null +++ b/ext/standard/tests/streams/proc_open_bug64438.phpt @@ -0,0 +1,70 @@ +--TEST-- +Bug #64438 proc_open hangs with stdin/out with 4097+ bytes +--FILE-- +<?php + +error_reporting(E_ALL); + +if (substr(PHP_OS, 0, 3) == 'WIN') { + $cmd = PHP_BINARY . ' -n -r "fwrite(STDOUT, $in = file_get_contents(\'php://stdin\')); fwrite(STDERR, $in);"'; +} else { + $cmd = PHP_BINARY . ' -n -r \'fwrite(STDOUT, $in = file_get_contents("php://stdin")); fwrite(STDERR, $in);\''; +} +$descriptors = array(array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w')); +$stdin = str_repeat('*', 4097); + +$options = array_merge(array('suppress_errors' => true, 'binary_pipes' => true, 'bypass_shell' => false)); +$process = proc_open($cmd, $descriptors, $pipes, getcwd(), array(), $options); + +foreach ($pipes as $pipe) { + stream_set_blocking($pipe, false); +} +$writePipes = array($pipes[0]); +$stdinLen = strlen($stdin); +$stdinOffset = 0; + +unset($pipes[0]); + +while ($pipes || $writePipes) { + $r = $pipes; + $w = $writePipes; + $e = null; + $n = stream_select($r, $w, $e, 60); + + if (false === $n) { + break; + } elseif ($n === 0) { + proc_terminate($process); + + } + if ($w) { + $written = fwrite($writePipes[0], (binary)substr($stdin, $stdinOffset), 8192); + if (false !== $written) { + $stdinOffset += $written; + } + if ($stdinOffset >= $stdinLen) { + fclose($writePipes[0]); + $writePipes = null; + } + } + + foreach ($r as $pipe) { + $type = array_search($pipe, $pipes); + $data = fread($pipe, 8192); + var_dump($data); + if (false === $data || feof($pipe)) { + fclose($pipe); + unset($pipes[$type]); + } + } +} + +?> +===DONE=== +--EXPECTF-- +string(4097) "%s" +string(4097) "%s" +string(0) "" +string(0) "" +===DONE=== + diff --git a/main/php_version.h b/main/php_version.h index e7478d5ce6..b198ad69b1 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -2,7 +2,7 @@ /* edit configure.in to change version number */ #define PHP_MAJOR_VERSION 5 #define PHP_MINOR_VERSION 5 -#define PHP_RELEASE_VERSION 18 +#define PHP_RELEASE_VERSION 19 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "5.5.18-dev" -#define PHP_VERSION_ID 50518 +#define PHP_VERSION "5.5.19-dev" +#define PHP_VERSION_ID 50519 diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c index a50662b78e..4b5dc55276 100644 --- a/main/streams/plain_wrapper.c +++ b/main/streams/plain_wrapper.c @@ -348,6 +348,34 @@ static size_t php_stdiop_read(php_stream *stream, char *buf, size_t count TSRMLS assert(data != NULL); if (data->fd >= 0) { +#ifdef PHP_WIN32 + php_stdio_stream_data *self = (php_stdio_stream_data*)stream->abstract; + + if (self->is_pipe || self->is_process_pipe) { + HANDLE ph = (HANDLE)_get_osfhandle(data->fd); + int retry = 0; + DWORD avail_read = 0; + + do { + /* Look ahead to get the available data amount to read. Do the same + as read() does, however not blocking forever. In case it failed, + no data will be read (better than block). */ + if (!PeekNamedPipe(ph, NULL, 0, NULL, &avail_read, NULL)) { + break; + } + /* If there's nothing to read, wait in 100ms periods. */ + if (0 == avail_read) { + usleep(100000); + } + } while (0 == avail_read && retry++ < 320); + + /* Reduce the required data amount to what is available, otherwise read() + will block.*/ + if (avail_read < count) { + count = avail_read; + } + } +#endif ret = read(data->fd, buf, count); if (ret == (size_t)-1 && errno == EINTR) { diff --git a/sapi/cgi/fastcgi.c b/sapi/cgi/fastcgi.c index 8ddc2e4577..6133668306 100644 --- a/sapi/cgi/fastcgi.c +++ b/sapi/cgi/fastcgi.c @@ -1112,7 +1112,7 @@ static inline void fcgi_close(fcgi_request *req, int force, int destroy) shutdown(req->fd, 1); /* read the last FCGI_STDIN header (it may be omitted) */ - recv(req->fd, &buf, sizeof(buf), 0); + recv(req->fd, (char *)(&buf), sizeof(buf), 0); } closesocket(req->fd); } @@ -1122,7 +1122,7 @@ static inline void fcgi_close(fcgi_request *req, int force, int destroy) shutdown(req->fd, 1); /* read the last FCGI_STDIN header (it may be omitted) */ - recv(req->fd, &buf, sizeof(buf), 0); + recv(req->fd, (char *)(&buf), sizeof(buf), 0); } close(req->fd); #endif diff --git a/sapi/cli/tests/016.phpt b/sapi/cli/tests/016.phpt index 31c1a40e4a..9c28d15a30 100644 --- a/sapi/cli/tests/016.phpt +++ b/sapi/cli/tests/016.phpt @@ -59,8 +59,6 @@ foreach ($codes as $key => $code) { echo "\nDone\n"; ?> ---XFAIL-- -https://bugs.php.net/bug.php?id=55496 --EXPECTF-- -------------- Snippet no. 1: diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index 56a06f90ee..331342c2a2 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -1231,6 +1231,17 @@ static void init_request_info(TSRMLS_D) SG(request_info).request_uri = orig_script_name; } path_info[0] = old; + } else if (apache_was_here && env_script_name) { + /* Using mod_proxy_fcgi and ProxyPass, apache cannot set PATH_INFO + * As we can extract PATH_INFO from PATH_TRANSLATED + * it is probably also in SCRIPT_NAME and need to be removed + */ + int snlen = strlen(env_script_name); + if (snlen>slen && !strcmp(env_script_name+snlen-slen, path_info)) { + _sapi_cgibin_putenv("ORIG_SCRIPT_NAME", orig_script_name TSRMLS_CC); + env_script_name[snlen-slen] = 0; + SG(request_info).request_uri = _sapi_cgibin_putenv("SCRIPT_NAME", env_script_name TSRMLS_CC); + } } env_path_info = _sapi_cgibin_putenv("PATH_INFO", path_info TSRMLS_CC); } diff --git a/sapi/fpm/fpm/fpm_sockets.c b/sapi/fpm/fpm/fpm_sockets.c index e056565ea4..da14d63d8c 100644 --- a/sapi/fpm/fpm/fpm_sockets.c +++ b/sapi/fpm/fpm/fpm_sockets.c @@ -39,29 +39,6 @@ struct listening_socket_s { static struct fpm_array_s sockets_list; -static int fpm_sockets_resolve_af_inet(char *node, char *service, struct sockaddr_in *addr) /* {{{ */ -{ - struct addrinfo *res; - struct addrinfo hints; - int ret; - - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_INET; - ret = getaddrinfo(node, service, &hints, &res); - - if (ret != 0) { - zlog(ZLOG_ERROR, "can't resolve hostname '%s%s%s': getaddrinfo said: %s%s%s\n", - node, service ? ":" : "", service ? service : "", - gai_strerror(ret), ret == EAI_SYSTEM ? ", system error: " : "", ret == EAI_SYSTEM ? strerror(errno) : ""); - return -1; - } - - *addr = *(struct sockaddr_in *) res->ai_addr; - freeaddrinfo(res); - return 0; -} -/* }}} */ - enum { FPM_GET_USE_SOCKET = 1, FPM_STORE_SOCKET = 2, FPM_STORE_USE_SOCKET = 3 }; static void fpm_sockets_cleanup(int which, void *arg) /* {{{ */ @@ -98,14 +75,23 @@ static void fpm_sockets_cleanup(int which, void *arg) /* {{{ */ } /* }}} */ +static void *fpm_get_in_addr(struct sockaddr *sa) /* {{{ */ +{ + if (sa->sa_family == AF_INET) { + return &(((struct sockaddr_in*)sa)->sin_addr); + } + + return &(((struct sockaddr_in6*)sa)->sin6_addr); +} +/* }}} */ + static int fpm_sockets_hash_op(int sock, struct sockaddr *sa, char *key, int type, int op) /* {{{ */ { if (key == NULL) { switch (type) { case FPM_AF_INET : { - struct sockaddr_in *sa_in = (struct sockaddr_in *) sa; - key = alloca(sizeof("xxx.xxx.xxx.xxx:ppppp")); - sprintf(key, "%u.%u.%u.%u:%u", IPQUAD(&sa_in->sin_addr), (unsigned int) ntohs(sa_in->sin_port)); + key = alloca(INET6_ADDRSTRLEN); + inet_ntop(sa->sa_family, fpm_get_in_addr(sa), key, sizeof key); break; } @@ -254,11 +240,14 @@ enum fpm_address_domain fpm_sockets_domain_from_address(char *address) /* {{{ */ static int fpm_socket_af_inet_listening_socket(struct fpm_worker_pool_s *wp) /* {{{ */ { - struct sockaddr_in sa_in; + struct addrinfo hints, *servinfo, *p; char *dup_address = strdup(wp->config->listen_address); - char *port_str = strchr(dup_address, ':'); + char *port_str = strrchr(dup_address, ':'); char *addr = NULL; + int addr_len; int port = 0; + int sock; + int status; if (port_str) { /* this is host:port pair */ *port_str++ = '\0'; @@ -274,23 +263,35 @@ static int fpm_socket_af_inet_listening_socket(struct fpm_worker_pool_s *wp) /* return -1; } - memset(&sa_in, 0, sizeof(sa_in)); - - if (addr) { - sa_in.sin_addr.s_addr = inet_addr(addr); - if (sa_in.sin_addr.s_addr == INADDR_NONE) { /* do resolve */ - if (0 > fpm_sockets_resolve_af_inet(addr, NULL, &sa_in)) { - return -1; - } - zlog(ZLOG_NOTICE, "address '%s' resolved as %u.%u.%u.%u", addr, IPQUAD(&sa_in.sin_addr)); + // strip brackets from address for getaddrinfo + if (addr != NULL) { + addr_len = strlen(addr); + if (addr[0] == '[' && addr[addr_len - 1] == ']') { + addr[addr_len - 1] = '\0'; + addr++; } - } else { - sa_in.sin_addr.s_addr = htonl(INADDR_ANY); } - sa_in.sin_family = AF_INET; - sa_in.sin_port = htons(port); + + memset(&hints, 0, sizeof hints); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + + if ((status = getaddrinfo(addr, port_str, &hints, &servinfo)) != 0) { + zlog(ZLOG_ERROR, "getaddrinfo: %s\n", gai_strerror(status)); + return -1; + } + free(dup_address); - return fpm_sockets_get_listening_socket(wp, (struct sockaddr *) &sa_in, sizeof(struct sockaddr_in)); + + for (p = servinfo; p != NULL; p = p->ai_next) { + if ((sock = fpm_sockets_get_listening_socket(wp, p->ai_addr, p->ai_addrlen)) != -1) { + break; + } + } + + freeaddrinfo(servinfo); + + return sock; } /* }}} */ diff --git a/sapi/fpm/fpm/fpm_sockets.h b/sapi/fpm/fpm/fpm_sockets.h index 121c016a7b..446c78e410 100644 --- a/sapi/fpm/fpm/fpm_sockets.h +++ b/sapi/fpm/fpm/fpm_sockets.h @@ -45,10 +45,4 @@ static inline int fd_set_blocked(int fd, int blocked) /* {{{ */ } /* }}} */ -#define IPQUAD(sin_addr) \ - (unsigned int) ((unsigned char *) &(sin_addr)->s_addr)[0], \ - (unsigned int) ((unsigned char *) &(sin_addr)->s_addr)[1], \ - (unsigned int) ((unsigned char *) &(sin_addr)->s_addr)[2], \ - (unsigned int) ((unsigned char *) &(sin_addr)->s_addr)[3] - #endif diff --git a/sapi/fpm/php-fpm.conf.in b/sapi/fpm/php-fpm.conf.in index c5f4abc59c..631bc46f42 100644 --- a/sapi/fpm/php-fpm.conf.in +++ b/sapi/fpm/php-fpm.conf.in @@ -152,6 +152,8 @@ group = @php_fpm_group@ ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on ; a specific port; +; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on +; a specific port; ; 'port' - to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. diff --git a/sapi/fpm/tests/003.phpt b/sapi/fpm/tests/003.phpt new file mode 100644 index 0000000000..389cb2401e --- /dev/null +++ b/sapi/fpm/tests/003.phpt @@ -0,0 +1,53 @@ +--TEST-- +FPM: Test IPv6 support +--SKIPIF-- +<?php include "skipif.inc"; ?> +--FILE-- +<?php + +include "include.inc"; + +$logfile = dirname(__FILE__).'/php-fpm.log.tmp'; + +$cfg = <<<EOT +[global] +error_log = $logfile +[unconfined] +listen = [::1]:9000 +pm = dynamic +pm.max_children = 5 +pm.start_servers = 2 +pm.min_spare_servers = 1 +pm.max_spare_servers = 3 +EOT; + +$fpm = run_fpm($cfg, $tail); +if (is_resource($fpm)) { + var_dump(fgets($tail)); + var_dump(fgets($tail)); + $i = 0; + while (($i++ < 30) && !($fp = fsockopen('[::1]', 9000))) { + usleep(10000); + } + if ($fp) { + echo "Done\n"; + fclose($fp); + } + proc_terminate($fpm); + stream_get_contents($tail); + fclose($tail); + proc_close($fpm); +} + +?> +--EXPECTF-- +string(%d) "[%d-%s-%d %d:%d:%d] NOTICE: fpm is running, pid %d +" +string(%d) "[%d-%s-%d %d:%d:%d] NOTICE: ready to handle connections +" +Done +--CLEAN-- +<?php + $logfile = dirname(__FILE__).'/php-fpm.log.tmp'; + @unlink($logfile); +?> |