# HG changeset patch # User Omair Majid # Date 1372908526 14400 # Node ID d146c22f9e46e1f35d84c20c729775890e809159 # Parent d59bbf7333e09e8bb15065329e4287df53baea99 Additional fixes that go along with the security update Backport additional fixes from 7 that went along with the security update. 2013-07-03 Omair Majid * patches/openjdk/6541350-tz_display_names_l10n.patch, * patches/openjdk/6821191-tz_display_names_l10n.patch, * patches/openjdk/6977550-tzdata2010l.patch, * patches/openjdk/6996686-tzdata2010o.patch, * patches/openjdk/7017800-tzdata2011b.patch, * patches/openjdk/7027387-tzdata2011d.patch, * patches/openjdk/7033174-tzdata2011e.patch, * patches/openjdk/7039469-tzdata2011g.patch, * patches/openjdk/7090843-tzdata2011j.patch, * patches/openjdk/7103108-tzdata2011l.patch, * patches/openjdk/7103405-correct_display_names.patch, * patches/openjdk/7104126-headers_tzdata.patch, * patches/openjdk/7158483-tzdata2012c.patch, * patches/openjdk/7198570-tzdata2012f.patch, * patches/openjdk/8002070-remove_logger_stack_search.patch, * patches/openjdk/8002070-remove_logger_stack_search_2.patch, * patches/openjdk/8002225-tzdata2012i.patch, * patches/openjdk/8009987-tzdata2013b.patch, * patches/openjdk/8009996-emitter_bean.patch, * patches/openjdk/8010118-caller_sensitive.patch, * patches/openjdk/8010727-empty_logger_name.patch, * patches/openjdk/8010939-logmanager_deadlock.patch, * patches/openjdk/8011139-revise_checking_getenclosingclass.patch, * patches/openjdk/8011990-logger_test_urls.patch, * patches/openjdk/8012243-serial_regression.patch, * patches/openjdk/8013380-handle_renames.patch, * patches/openjdk/8013380-logger_stack_walk_glassfish.patch, * patches/openjdk/8014718-remove_logging_suntoolkit.patch, * patches/openjdk/8014745-logger_stack_walk_switch.patch: New file. Backport from icedtea/openjdk 7. * Makefile.am (ICEDTEA_PATCHES): Apply the above. * NEWS: Update with fixes. diff -r d59bbf7333e0 -r d146c22f9e46 ChangeLog --- a/ChangeLog Mon Jul 01 21:05:04 2013 -0400 +++ b/ChangeLog Wed Jul 03 23:28:46 2013 -0400 @@ -1,3 +1,38 @@ +2013-07-03 Omair Majid + + * patches/openjdk/6541350-tz_display_names_l10n.patch, + * patches/openjdk/6821191-tz_display_names_l10n.patch, + * patches/openjdk/6977550-tzdata2010l.patch, + * patches/openjdk/6996686-tzdata2010o.patch, + * patches/openjdk/7017800-tzdata2011b.patch, + * patches/openjdk/7027387-tzdata2011d.patch, + * patches/openjdk/7033174-tzdata2011e.patch, + * patches/openjdk/7039469-tzdata2011g.patch, + * patches/openjdk/7090843-tzdata2011j.patch, + * patches/openjdk/7103108-tzdata2011l.patch, + * patches/openjdk/7103405-correct_display_names.patch, + * patches/openjdk/7104126-headers_tzdata.patch, + * patches/openjdk/7158483-tzdata2012c.patch, + * patches/openjdk/7198570-tzdata2012f.patch, + * patches/openjdk/8002070-remove_logger_stack_search.patch, + * patches/openjdk/8002070-remove_logger_stack_search_2.patch, + * patches/openjdk/8002225-tzdata2012i.patch, + * patches/openjdk/8009987-tzdata2013b.patch, + * patches/openjdk/8009996-emitter_bean.patch, + * patches/openjdk/8010118-caller_sensitive.patch, + * patches/openjdk/8010727-empty_logger_name.patch, + * patches/openjdk/8010939-logmanager_deadlock.patch, + * patches/openjdk/8011139-revise_checking_getenclosingclass.patch, + * patches/openjdk/8011990-logger_test_urls.patch, + * patches/openjdk/8012243-serial_regression.patch, + * patches/openjdk/8013380-handle_renames.patch, + * patches/openjdk/8013380-logger_stack_walk_glassfish.patch, + * patches/openjdk/8014718-remove_logging_suntoolkit.patch, + * patches/openjdk/8014745-logger_stack_walk_switch.patch: + New file. Backport from icedtea/openjdk 7. + * Makefile.am (ICEDTEA_PATCHES): Apply the above. + * NEWS: Update with fixes. + 2013-07-01 Omair Majid * patches/openjdk/7188114-alternate_command_line_parser.patch, diff -r d59bbf7333e0 -r d146c22f9e46 Makefile.am --- a/Makefile.am Mon Jul 01 21:05:04 2013 -0400 +++ b/Makefile.am Wed Jul 03 23:28:46 2013 -0400 @@ -641,7 +641,37 @@ patches/openjdk/8014427-raster_regresssion.patch \ patches/openjdk/8014618-strip_leading_zeros_premastersecret.patch \ patches/openjdk/8014676-javadebugger_space_in_paths.patch \ - patches/openjdk/8014968-OCSP_timeout_default.patch + patches/openjdk/8014968-OCSP_timeout_default.patch \ + patches/openjdk/8002070-remove_logger_stack_search.patch \ + patches/openjdk/8002070-remove_logger_stack_search_2.patch \ + patches/openjdk/8010118-caller_sensitive.patch \ + patches/openjdk/8010727-empty_logger_name.patch \ + patches/openjdk/8010939-logmanager_deadlock.patch \ + patches/openjdk/8011990-logger_test_urls.patch \ + patches/openjdk/8013380-logger_stack_walk_glassfish.patch \ + patches/openjdk/8013380-handle_renames.patch \ + patches/openjdk/8014745-logger_stack_walk_switch.patch \ + patches/openjdk/8012243-serial_regression.patch \ + patches/openjdk/8014718-remove_logging_suntoolkit.patch \ + patches/openjdk/8011139-revise_checking_getenclosingclass.patch \ + patches/openjdk/8009996-emitter_bean.patch \ + patches/openjdk/6541350-tz_display_names_l10n.patch \ + patches/openjdk/6821191-tz_display_names_l10n.patch \ + patches/openjdk/6977550-tzdata2010l.patch \ + patches/openjdk/6996686-tzdata2010o.patch \ + patches/openjdk/7017800-tzdata2011b.patch \ + patches/openjdk/7027387-tzdata2011d.patch \ + patches/openjdk/7033174-tzdata2011e.patch \ + patches/openjdk/7039469-tzdata2011g.patch \ + patches/openjdk/7090843-tzdata2011j.patch \ + patches/openjdk/7103108-tzdata2011l.patch \ + patches/openjdk/7104126-headers_tzdata.patch \ + patches/openjdk/7103405-correct_display_names.patch \ + patches/openjdk/7158483-tzdata2012c.patch \ + patches/openjdk/7198570-tzdata2012f.patch \ + patches/openjdk/8002225-tzdata2012i.patch \ + patches/openjdk/8009987-tzdata2013b.patch + if WITH_RHINO ICEDTEA_PATCHES += \ diff -r d59bbf7333e0 -r d146c22f9e46 NEWS --- a/NEWS Mon Jul 01 21:05:04 2013 -0400 +++ b/NEWS Wed Jul 03 23:28:46 2013 -0400 @@ -14,27 +14,55 @@ New in release 1.11.12 (2013-07-XX): * Security fixes * Backports + - S6541350: TimeZone display names localization + - S6821191: Timezone display name localization + - S6977550: (tz) Support tzdata2010l + - S6996686: (tz) Support tzdata2010o + - S7017800: (tz) Support tzdata2011b + - S7027387: (tz) Support tzdata2011d + - S7033174: (tz) Support tzdata2011e + - S7039469: (tz) Support tzdata2011g + - S7090843: (tz) Support tzdata2011j + - S7103108: (tz) Support tzdata2011l + - S7103405: Correct display names for Pacific/Apia timezone + - S7104126: Insert openjdk copyright header back into TZdata files + - S7158483: (tz) Support tzdata2012c + - S7198570: (tz) Support tzdata2012f - S7188114: (launcher) need an alternate command line parser for Windows + - S7195301: XML Signature DOM implementation should not use instanceof to determine type of Node - S7199143: RFE: OCSP revocation checker should provide possibility to specify connection timeout + - S8002070: Remove the stack search for a resource bundle for Logger to use + - S8002225: (tz) Support tzdata2012i - S8006120: Provide "Server JRE" for 7u train - S8006536: [launcher] removes trailing slashes on arguments - S8009165: Fix for 8006435 needs revision - S8009217: REGRESSION: test com/sun/org/apache/xml/internal/security/transforms/ClassLoaderTest.java fails to compile since 7u21b03 - S8009463: Regression test test\java\lang\Runtime\exec\ArgWithSpaceAndFinalBackslash.java failing. - S8009610: Blacklist certificate used with malware. + - S8009987: (tz) Support tzdata2013b + - S8009996: tests javax/management/mxbean/MiscTest.java and javax/management/mxbean/StandardMBeanOverrideTest.java fail + - S8010118: Annotate jdk caller sensitive methods with @sun.reflect.CallerSensitive - S8010213: Some api/javax_net/SocketFactory tests fail in 7u25 nightly build - S8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod + - S8010727: WLS fails to add a logger with "" in its own LogManager subclass instance + - S8010939: Deadlock in LogManager + - S8011139: (reflect) Revise checking in getEnclosingClass - S8011154: java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java failed since 7u25b03 on windows - S8011313: OCSP timeout set to wrong value if com.sun.security.ocsp.timeout not defined + - S8011990: TEST_BUG: java/util/logging/bundlesearch/ResourceBundleSearchTest.java fails on Windows - S8011992: java/awt/image/mlib/MlibOpsTest.java failed since jdk7u25b05 - S8012112: java/awt/image/mlib/MlibOpsTest.java fails on sparc solaris + - S8012243: about 30% regression on specjvm2008.serial on 7u25 comparing 7u21 - S8012617: ArrayIndexOutOfBoundsException with some fonts using LineBreakMeasurer - S8012933: Test closed/java/awt/Dialog/DialogAnotherThread/JaWSTest.java fails since jdk 7u25 b07 - S8013196: TimeZone.getDefault() throws NPE due to sun.awt.AppContext.getAppContext() + - S8013380: Removal of stack walk to find resource bundle breaks Glassfish startup - S8014205: Most of the Swing dialogs are blank on one win7 MUI - S8014427: REGRESSION: closed/javax/imageio/plugins/bmp/Write3ByteBgrTest.java fails since 7u25 b09 - - S8014618: Need to strip leading zeros in TlsPremasterSecret of DHKeyAgreement + - S8014618, RH868136: Need to strip leading zeros in TlsPremasterSecret of DHKeyAgreement - S8014676: Java debugger may fail to run + - S8014718: Netbeans IDE begins to throw a lot exceptions since 7u25 b10 + - S8014745: Provide a switch to allow stack walk search of resource bundle - S8014968: OCSP and CRL connection timeout is set to four hours by default New in release 1.11.11 (2013-04-24): diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/6541350-tz_display_names_l10n.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/6541350-tz_display_names_l10n.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,300 @@ +# HG changeset patch +# User yhuang +# Date 1261700777 28800 +# Node ID 1397ae8dc558c9128d84818afc9ec55d23714c35 +# Parent 7bf839e2e9ce58d5f205280bf5a06f00227f2240 +6541350: TimeZone display names localization +Reviewed-by: yhuang, peytoia + +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java +@@ -83,8 +83,8 @@ + "Zentrale Sommerzeit", "CDT"}; + String CTT[] = new String[] {"Chinesische Normalzeit", "CST", + "Chinesische Sommerzeit", "CDT"}; +- String CUBA[] = new String[] {"Cuba Standard Time", "CST", +- "Cuba Daylight Time", "CDT"}; ++ String CUBA[] = new String[] {"Kubanische Normalzeit", "CST", ++ "Kubanische Sommerzeit", "CDT"}; + String DARWIN[] = new String[] {"Zentrale Normalzeit (Northern Territory)", "CST", + "Zentrale Sommerzeit (Northern Territory)", "CST"}; + String DUBLIN[] = new String[] {"Greenwich Zeit", "GMT", +@@ -594,8 +594,8 @@ + {"Australia/Canberra", EST_NSW}, + {"Australia/Currie", EST_NSW}, + {"Australia/Darwin", DARWIN}, +- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", +- "Central Western Summer Time (Australia)", "CWST"}}, ++ {"Australia/Eucla", new String[] {"Zentral-Westliche Normalzeit (Australien)", "CWST", ++ "Zentral-Westliche Sommerzeit (Australien)", "CWST"}}, + {"Australia/Hobart", TASMANIA}, + {"Australia/LHI", LORD_HOWE}, + {"Australia/Lindeman", BRISBANE}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java +@@ -83,8 +83,8 @@ + "Hora de verano Central", "CDT"}; + String CTT[] = new String[] {"Hora est\u00e1ndar de China", "CST", + "Hora de verano de China", "CDT"}; +- String CUBA[] = new String[] {"Cuba Standard Time", "CST", +- "Cuba Daylight Time", "CDT"}; ++ String CUBA[] = new String[] {"Hora est\u00e1ndar de Cuba", "CST", ++ "Hora de verano de Cuba", "CDT"}; + String DARWIN[] = new String[] {"Hora est\u00e1ndar Central (territorio del Norte)", "CST", + "Hora de verano Central (territorio del Norte)", "CST"}; + String DUBLIN[] = new String[] {"Hora del Meridiano de Greenwich", "GMT", +@@ -595,8 +595,8 @@ + {"Australia/Canberra", EST_NSW}, + {"Australia/Currie", EST_NSW}, + {"Australia/Darwin", DARWIN}, +- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", +- "Central Western Summer Time (Australia)", "CWST"}}, ++ {"Australia/Eucla", new String[] {"Hora est\u00e1ndar de Australia Central y Occidental", "CWST", ++ "Hora de verano de Australia Central y Occidental", "CWST"}}, + {"Australia/Hobart", TASMANIA}, + {"Australia/LHI", LORD_HOWE}, + {"Australia/Lindeman", BRISBANE}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java +@@ -83,8 +83,8 @@ + "Heure avanc\u00e9e du Centre", "CDT"} ; + String CTT[] = new String[] {"Heure normale de Chine", "CST", + "Heure avanc\u00e9e de Chine", "CDT"} ; +- String CUBA[] = new String[] {"Cuba Standard Time", "CST", +- "Cuba Daylight Time", "CDT"}; ++ String CUBA[] = new String[] {"Heure standard de Cuba", "CST", ++ "Heure d'\u00e9t\u00e9 de Cuba", "CDT"}; + String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST", + "Heure d'\u00e9t\u00e9 d'Australie centrale (Territoire du Nord)", "CST"}; + String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT", +@@ -594,8 +594,8 @@ + {"Australia/Canberra", EST_NSW}, + {"Australia/Currie", EST_NSW}, + {"Australia/Darwin", DARWIN}, +- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", +- "Central Western Summer Time (Australia)", "CWST"}}, ++ {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "CWST", ++ "Heure d'\u00e9t\u00e9 de l'Australie occidentale (centre)", "CWST"}}, + {"Australia/Hobart", TASMANIA}, + {"Australia/LHI", LORD_HOWE}, + {"Australia/Lindeman", BRISBANE}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java +@@ -83,8 +83,8 @@ + "Ora legale USA centrale", "CDT"}; + String CTT[] = new String[] {"Ora solare della Cina", "CST", + "Ora legale della Cina", "CDT"}; +- String CUBA[] = new String[] {"Cuba Standard Time", "CST", +- "Cuba Daylight Time", "CDT"}; ++ String CUBA[] = new String[] {"Ora solare Cuba", "CST", ++ "Ora legale Cuba", "CDT"}; + String DARWIN[] = new String[] {"Ora centrale standard (Territori del Nord)", "CST", + "Ora estiva centrale (Territori del Nord)", "CST"}; + String DUBLIN[] = new String[] {"Ora media di Greenwich", "GMT", +@@ -594,8 +594,8 @@ + {"Australia/Canberra", EST_NSW}, + {"Australia/Currie", EST_NSW}, + {"Australia/Darwin", DARWIN}, +- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", +- "Central Western Summer Time (Australia)", "CWST"}}, ++ {"Australia/Eucla", new String[] {"Ora solare Australia centrorientale", "CWST", ++ "Ora estiva Australia centrorientale", "CWST"}}, + {"Australia/Hobart", TASMANIA}, + {"Australia/LHI", LORD_HOWE}, + {"Australia/Lindeman", BRISBANE}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java +@@ -83,8 +83,8 @@ + "\u4e2d\u90e8\u590f\u6642\u9593", "CDT"}; + String CTT[] = new String[] {"\u4e2d\u56fd\u6a19\u6e96\u6642", "CST", + "\u4e2d\u56fd\u590f\u6642\u9593", "CDT"}; +- String CUBA[] = new String[] {"Cuba Standard Time", "CST", +- "Cuba Daylight Time", "CDT"}; ++ String CUBA[] = new String[] {"\u30ad\u30e5\u30fc\u30d0\u6a19\u6e96\u6642", "CST", ++ "\u30ad\u30e5\u30fc\u30d0\u590f\u6642\u9593", "CDT"}; + String DARWIN[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u30ce\u30fc\u30b6\u30f3\u30c6\u30ea\u30c8\u30ea\u30fc)", "CST", + "\u4e2d\u90e8\u590f\u6642\u9593 (\u30ce\u30fc\u30b6\u30f3\u30c6\u30ea\u30c8\u30ea\u30fc)", "CST"}; + String DUBLIN[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT", +@@ -594,8 +594,8 @@ + {"Australia/Canberra", EST_NSW}, + {"Australia/Currie", EST_NSW}, + {"Australia/Darwin", DARWIN}, +- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", +- "Central Western Summer Time (Australia)", "CWST"}}, ++ {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6a19\u6e96\u6642 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CWST", ++ "\u4e2d\u897f\u90e8\u590f\u6642\u9593 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CWST"}}, + {"Australia/Hobart", TASMANIA}, + {"Australia/LHI", LORD_HOWE}, + {"Australia/Lindeman", BRISBANE}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java +@@ -83,8 +83,8 @@ + "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; + String CTT[] = new String[] {"\uc911\uad6d \ud45c\uc900\uc2dc", "CST", + "\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; +- String CUBA[] = new String[] {"Cuba Standard Time", "CST", +- "Cuba Daylight Time", "CDT"}; ++ String CUBA[] = new String[] {"\ucfe0\ubc14 \ud45c\uc900\uc2dc", "CST", ++ "\ucfe0\ubc14 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; + String DARWIN[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\ub178\ub358 \uc9c0\uc5ed)", "CST", + "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ub178\ub358 \uc9c0\uc5ed)", "CST"}; + String DUBLIN[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT", +@@ -594,8 +594,8 @@ + {"Australia/Canberra", EST_NSW}, + {"Australia/Currie", EST_NSW}, + {"Australia/Darwin", DARWIN}, +- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", +- "Central Western Summer Time (Australia)", "CWST"}}, ++ {"Australia/Eucla", new String[] {"\uc911\uc11c\ubd80 \ud45c\uc900\uc2dc(\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CWST", ++ "\uc911\uc11c\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CWST"}}, + {"Australia/Hobart", TASMANIA}, + {"Australia/LHI", LORD_HOWE}, + {"Australia/Lindeman", BRISBANE}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java +@@ -45,8 +45,8 @@ + protected final Object[][] getContents() { + String ACT[] = new String[] {"Acre, normaltid", "ACT", + "Acre, sommartid", "ACST"}; +- String ADELAIDE[] = new String[] {"Central Standard Time (S\u00f6dra Australien)", "CST", +- "Central Summer Time (S\u00f6dra Australien)", "CST"}; ++ String ADELAIDE[] = new String[] {"Central normaltid (S\u00f6dra Australien)", "CST", ++ "Central sommartid (S\u00f6dra Australien)", "CST"}; + String AGT[] = new String[] {"Argentina, normaltid", "ART", + "Argentina, sommartid", "ARST"}; + String AKST[] = new String[] {"Alaska, normaltid", "AKST", +@@ -61,10 +61,10 @@ + "Atlantisk sommartid", "ADT"}; + String BDT[] = new String[] {"Bangladesh, normaltid", "BDT", + "Bangladesh, sommartid", "BDST"}; +- String BRISBANE[] = new String[] {"Eastern Standard Time (Queensland)", "EST", +- "Eastern Summer Time (Queensland)", "EST"}; +- String BROKEN_HILL[] = new String[] {"Central Standard Time (S\u00f6dra Australien/Nya Sydwales)", "CST", +- "Central Summer Time (S\u00f6dra Australien/Nya Sydwales)", "CST"}; ++ String BRISBANE[] = new String[] {"\u00d6stlig normaltid (Queensland)", "EST", ++ "\u00d6stlig sommartid (Queensland)", "EST"}; ++ String BROKEN_HILL[] = new String[] {"Central normaltid (S\u00f6dra Australien/Nya Sydwales)", "CST", ++ "Central sommartid (S\u00f6dra Australien/Nya Sydwales)", "CST"}; + String BRT[] = new String[] {"Brasilien, normaltid", "BRT", + "Brasilien, sommartid", "BRST"}; + String BTT[] = new String[] {"Bhutan, normaltid", "BTT", +@@ -83,10 +83,10 @@ + "Central sommartid", "CDT"}; + String CTT[] = new String[] {"Kina, normaltid", "CST", + "Kina, sommartid", "CDT"}; +- String CUBA[] = new String[] {"Cuba Standard Time", "CST", +- "Cuba Daylight Time", "CDT"}; +- String DARWIN[] = new String[] {"Central Standard Time (Nordterritoriet)", "CST", +- "Central Summer Time (Nordterritoriet)", "CST"}; ++ String CUBA[] = new String[] {"Kuba, normaltid", "CST", ++ "Kuba, sommartid", "CDT"}; ++ String DARWIN[] = new String[] {"Central normaltid (Nordterritoriet)", "CST", ++ "Central sommartid (Nordterritoriet)", "CST"}; + String DUBLIN[] = new String[] {"Greenwichtid", "GMT", + "Irland, sommartid", "IST"}; + String EAT[] = new String[] {"\u00d6stafrikansk tid", "EAT", +@@ -99,8 +99,8 @@ + "\u00d6stgr\u00f6nl\u00e4ndsk sommartid", "EGST"}; + String EST[] = new String[] {"Eastern, normaltid", "EST", + "Eastern, sommartid", "EDT"}; +- String EST_NSW[] = new String[] {"Eastern Standard Time (Nya Sydwales)", "EST", +- "Eastern Summer Time (Nya Sydwales)", "EST"}; ++ String EST_NSW[] = new String[] {"Eastern, normaltid (Nya Sydwales)", "EST", ++ "Eastern, sommartid (Nya Sydwales)", "EST"}; + String GHMT[] = new String[] {"Ghana, normaltid", "GMT", + "Ghana, sommartid", "GHST"}; + String GAMBIER[] = new String[] {"Gambier, normaltid", "GAMT", +@@ -163,10 +163,10 @@ + "Salomon\u00f6arna, sommartid", "SBST"}; + String SGT[] = new String[] {"Singapore, normaltid", "SGT", + "Singapore, sommartid", "SGST"}; +- String SLST[] = new String[] {"Greenwich Mean Time", "GMT", ++ String SLST[] = new String[] {"Greenwichtid", "GMT", + "Sierra Leone, sommartid", "SLST"}; +- String TASMANIA[] = new String[] {"Eastern Standard Time (Tasmanien)", "EST", +- "Eastern Summer Time (Tasmanien)", "EST"}; ++ String TASMANIA[] = new String[] {"Eastern, normaltid (Tasmanien)", "EST", ++ "Eastern, sommartid (Tasmanien)", "EST"}; + String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT", + "Turkmenistan, sommartid", "TMST"}; + String TRUT[] = new String[] {"Truk, normaltid", "TRUT", +@@ -181,16 +181,16 @@ + "V\u00e4steuropeisk sommartid", "WEST"}; + String WIT[] = new String[] {"V\u00e4stindonesisk tid", "WIT", + "V\u00e4stindonesisk sommartid", "WIST"}; +- String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "WST", +- "Western Summer Time (Australien)", "WST"}; ++ String WST_AUS[] = new String[] {"V\u00e4stlig normaltid (Australien)", "WST", ++ "V\u00e4stlig sommartid (Australien)", "WST"}; + String SAMOA[] = new String[] {"Samoa, normaltid", "SST", + "Samoa, sommartid", "SDT"}; + String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST", + "V\u00e4stsamoansk sommartid", "WSST"}; + String ChST[] = new String[] {"Chamorro, normaltid", "ChST", + "Chamorro, sommartid", "ChDT"}; +- String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST", +- "Eastern Summer Time (Victoria)", "EST"}; ++ String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST", ++ "\u00d6stlig sommartid (Victoria)", "EST"}; + String UTC[] = new String[] {"Koordinerad universell tid", "UTC", + "Koordinerad universell tid", "UTC"}; + String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT", +@@ -594,8 +594,8 @@ + {"Australia/Canberra", EST_NSW}, + {"Australia/Currie", EST_NSW}, + {"Australia/Darwin", DARWIN}, +- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", +- "Central Western Summer Time (Australia)", "CWST"}}, ++ {"Australia/Eucla", new String[] {"Central v\u00e4stlig normaltid (Australien)", "CWST", ++ "Central v\u00e4stlig sommartid (Australien)", "CWST"}}, + {"Australia/Hobart", TASMANIA}, + {"Australia/LHI", LORD_HOWE}, + {"Australia/Lindeman", BRISBANE}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java +@@ -83,8 +83,8 @@ + "\u4e2d\u592e\u590f\u4ee4\u65f6", "CDT"}; + String CTT[] = new String[] {"\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", "CST", + "\u4e2d\u56fd\u590f\u4ee4\u65f6", "CDT"}; +- String CUBA[] = new String[] {"Cuba Standard Time", "CST", +- "Cuba Daylight Time", "CDT"}; ++ String CUBA[] = new String[] {"\u53e4\u5df4\u6807\u51c6\u65f6\u95f4", "CST", ++ "\u53e4\u5df4\u590f\u4ee4\u65f6", "CDT"}; + String DARWIN[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5317\u9886\u5730\uff09", "CST", + "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5317\u9886\u5730\uff09", "CST"}; + String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT", +@@ -594,8 +594,8 @@ + {"Australia/Canberra", EST_NSW}, + {"Australia/Currie", EST_NSW}, + {"Australia/Darwin", DARWIN}, +- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", +- "Central Western Summer Time (Australia)", "CWST"}}, ++ {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "CWST", ++ "\u4e2d\u897f\u90e8\u590f\u4ee4\u65f6\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "CWST"}}, + {"Australia/Hobart", TASMANIA}, + {"Australia/LHI", LORD_HOWE}, + {"Australia/Lindeman", BRISBANE}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java +@@ -83,8 +83,8 @@ + "\u4e2d\u592e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; + String CTT[] = new String[] {"\u4e2d\u570b\u6a19\u6e96\u6642\u9593", "CST", + "\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; +- String CUBA[] = new String[] {"Cuba Standard Time", "CST", +- "Cuba Daylight Time", "CDT"}; ++ String CUBA[] = new String[] {"\u53e4\u5df4\u6a19\u6e96\u6642\u9593", "CST", ++ "\u53e4\u5df4\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; + String DARWIN[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u5317\u90e8\u5404\u5730\u5340)", "CST", + "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u5317\u90e8\u5404\u5730\u5340)", "CST"}; + String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT", +@@ -595,8 +595,8 @@ + {"Australia/Canberra", EST_NSW}, + {"Australia/Currie", EST_NSW}, + {"Australia/Darwin", DARWIN}, +- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", +- "Central Western Summer Time (Australia)", "CWST"}}, ++ {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "CWST", ++ "\u4e2d\u897f\u90e8\u65e5\u5149\u7bc0\u7d04\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "CWST"}}, + {"Australia/Hobart", TASMANIA}, + {"Australia/LHI", LORD_HOWE}, + {"Australia/Lindeman", BRISBANE}, diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/6821191-tz_display_names_l10n.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/6821191-tz_display_names_l10n.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,125 @@ +# HG changeset patch +# User yhuang +# Date 1262835175 28800 +# Node ID eea1cc096889cec5151c08de842a5493724cdc1c +# Parent 8bf6b2173e9f5b54ecf393e24b23d3f79968c6da +6821191: Timezone display name localization +Reviewed-by: yhuang, ogino + +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java +@@ -173,8 +173,8 @@ + "Truk Sommerzeit", "TRUST"}; + String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT", + "Ulaanbaatar Sommerzeit", "ULAST"}; +- String WART[] = new String[] {"Argentinische Zeit", "WART", +- "Argentinische Sommerzeit", "WARST"}; ++ String WART[] = new String[] {"Westargentinische Zeit", "WART", ++ "Westargentinische Sommerzeit", "WARST"}; + String WAT[] = new String[] {"Westafrikanische Zeit", "WAT", + "Westafrikanische Sommerzeit", "WAST"}; + String WET[] = new String[] {"Westeurop\u00e4ische Zeit", "WEZ", +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java +@@ -173,8 +173,8 @@ + "Hora de verano de Truk", "TRUST"}; + String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT", + "Hora de verano de Ulan Bator", "ULAST"}; +- String WART[] = new String[] {"Hora de Argentina", "WART", +- "Hora de verano de Argentina", "WARST"}; ++ String WART[] = new String[] {"Hora de Argentina Occidental", "WART", ++ "Hora de verano de Argentina Occidental", "WARST"}; + String WAT[] = new String[] {"Hora de \u00c1frica Occidental", "WAT", + "Hora de verano de \u00c1frica Occidental", "WAST"}; + String WET[] = new String[] {"Hora de Europa Occidental", "WET", +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java +@@ -173,8 +173,8 @@ + "Heure d'\u00e9t\u00e9 de Truk", "TRUST"}; + String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT", + "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"} ; +- String WART[] = new String[] {"Heure D'Argentine", "WART", +- "Heure d'\u00e9t\u00e9 D'Argentine", "WARST"} ; ++ String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART", ++ "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"} ; + String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT", + "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"} ; + String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET", +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java +@@ -173,8 +173,8 @@ + "Ora estiva di Truk", "TRUST"}; + String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT", + "Ora estiva di Ulaanbaatar", "ULAST"}; +- String WART[] = new String[] {"Ora dell'Argentina", "WART", +- "Ora estiva dell'Argentina", "WARST"}; ++ String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART", ++ "Ora estiva dell'Argentina occidentale", "WARST"}; + String WAT[] = new String[] {"Ora dell'Africa occidentale", "WAT", + "Ora estiva dell'Africa occidentale", "WAST"}; + String WET[] = new String[] {"Ora dell'Europa occidentale", "WET", +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java +@@ -173,8 +173,8 @@ + "\u30c8\u30e9\u30c3\u30af\u590f\u6642\u9593", "TRUST"}; + String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT", + "\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"}; +- String WART[] = new String[] {"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART", +- "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"}; ++ String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART", ++ "\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"}; + String WAT[] = new String[] {"\u897f\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "WAT", + "\u897f\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "WAST"}; + String WET[] = new String[] {"\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "WET", +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java +@@ -173,8 +173,8 @@ + "\ud2b8\ub8e8\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TRUST"}; + String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT", + "\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"}; +- String WART[] = new String[] {"\uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART", +- "\uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"}; ++ String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART", ++ "\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"}; + String WAT[] = new String[] {"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "WAT", + "\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAST"}; + String WET[] = new String[] {"\uc11c\uc720\ub7fd \uc2dc\uac04", "WET", +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java +@@ -173,8 +173,8 @@ + "Truk, sommartid", "TRUST"}; + String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT", + "Ulaanbaatar, sommartid", "ULAST"}; +- String WART[] = new String[] {"Argentina, normaltid", "WART", +- "Argentina, sommartid", "WARST"}; ++ String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART", ++ "V\u00e4stargentina, sommartid", "WARST"}; + String WAT[] = new String[] {"V\u00e4stafrikansk tid", "WAT", + "V\u00e4stafrikansk sommartid", "WAST"}; + String WET[] = new String[] {"V\u00e4steuropeisk tid", "WET", +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java +@@ -173,8 +173,8 @@ + "\u7279\u9c81\u514b\u590f\u4ee4\u65f6", "TRUST"}; + String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT", + "\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"}; +- String WART[] = new String[] {"\u963f\u6839\u5ef7\u65f6\u95f4", "WART", +- "\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"}; ++ String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART", ++ "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"}; + String WAT[] = new String[] {"\u897f\u975e\u65f6\u95f4", "WAT", + "\u897f\u975e\u590f\u4ee4\u65f6", "WAST"}; + String WET[] = new String[] {"\u897f\u6b27\u65f6\u95f4", "WET", +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java +@@ -173,8 +173,8 @@ + "\u7279\u9b6f\u514b\u590f\u4ee4\u6642\u9593", "TRUST"}; + String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT", + "\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"}; +- String WART[] = new String[] {"\u963f\u6839\u5ef7\u6642\u9593", "WART", +- "\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"}; ++ String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART", ++ "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"}; + String WAT[] = new String[] {"\u897f\u975e\u6642\u9593", "WAT", + "\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST"}; + String WET[] = new String[] {"\u897f\u6b50\u6642\u9593", "WET", diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/6977550-tzdata2010l.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/6977550-tzdata2010l.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,1208 @@ +# HG changeset patch +# User peytoia +# Date 1282540492 -32400 +# Node ID 23f72ec0d8e83e9f7e05c450e1ec230e31f579ed +# Parent 58626b4eedcbd0a316ae2bd6f5a7818702e3d97c +6977550: (tz) Support tzdata2010l +Reviewed-by: okutsu + +--- openjdk/jdk/make/sun/javazic/tzdata/VERSION ++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2010i ++tzdata2010l +--- openjdk/jdk/make/sun/javazic/tzdata/africa ++++ openjdk/jdk/make/sun/javazic/tzdata/africa +@@ -316,8 +316,25 @@ + # and can be found by searching for "winter" in their search engine + # (at least today). + ++# From Alexander Krivenyshev (2010-07-20): ++# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has ++# decided that Daylight Saving Time will not be used in Egypt during ++# Ramadan. ++# ++# Arabic translation: ++# "Clocks to go back during Ramadan--and then forward again" ++# ++# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again ++# ++# or ++# ++# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html ++# ++ + Rule Egypt 2008 only - Aug lastThu 23:00s 0 - + Rule Egypt 2009 only - Aug 20 23:00s 0 - ++Rule Egypt 2010 only - Aug 11 0:00 0 - ++Rule Egypt 2010 only - Sep 10 0:00 1:00 S + Rule Egypt 2010 max - Sep lastThu 23:00s 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +--- openjdk/jdk/make/sun/javazic/tzdata/asia ++++ openjdk/jdk/make/sun/javazic/tzdata/asia +@@ -2200,6 +2200,18 @@ + # "At 12:01am Friday, clocks in Israel and the West Bank will change to + # 1:01am, while Gaza clocks will change at 12:01am Saturday morning." + ++# From Steffen Thorsen (2010-08-11): ++# According to several sources, including ++# ++# http://www.maannews.net/eng/ViewDetails.aspx?ID=306795 ++# ++# the clocks were set back one hour at 2010-08-11 00:00:00 local time in ++# Gaza and the West Bank. ++# Some more background info: ++# ++# http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html ++# ++ + # The rules for Egypt are stolen from the `africa' file. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule EgyptAsia 1957 only - May 10 0:00 1:00 S +@@ -2220,6 +2232,7 @@ + Rule Palestine 2009 only - Mar lastFri 0:00 1:00 S + Rule Palestine 2010 max - Mar lastSat 0:01 1:00 S + Rule Palestine 2009 max - Sep Fri>=1 2:00 0 - ++Rule Palestine 2010 only - Aug 11 0:00 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Gaza 2:17:52 - LMT 1900 Oct +--- openjdk/jdk/make/sun/javazic/tzdata/australasia ++++ openjdk/jdk/make/sun/javazic/tzdata/australasia +@@ -368,10 +368,10 @@ + + # Micronesia + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Pacific/Truk 10:07:08 - LMT 1901 +- 10:00 - TRUT # Truk Time +-Zone Pacific/Ponape 10:32:52 - LMT 1901 # Kolonia +- 11:00 - PONT # Ponape Time ++Zone Pacific/Chuuk 10:07:08 - LMT 1901 ++ 10:00 - CHUT # Chuuk Time ++Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia ++ 11:00 - PONT # Pohnpei Time + Zone Pacific/Kosrae 10:51:56 - LMT 1901 + 11:00 - KOST 1969 Oct # Kosrae Time + 12:00 - KOST 1999 +--- openjdk/jdk/make/sun/javazic/tzdata/backward ++++ openjdk/jdk/make/sun/javazic/tzdata/backward +@@ -112,7 +112,9 @@ + Link America/Denver Navajo + Link Asia/Shanghai PRC + Link Pacific/Pago_Pago Pacific/Samoa +-Link Pacific/Truk Pacific/Yap ++Link Pacific/Chuuk Pacific/Yap ++Link Pacific/Chuuk Pacific/Truk ++Link Pacific/Pohnpei Pacific/Ponape + Link Europe/Warsaw Poland + Link Europe/Lisbon Portugal + Link Asia/Taipei ROC +--- openjdk/jdk/make/sun/javazic/tzdata/europe ++++ openjdk/jdk/make/sun/javazic/tzdata/europe +@@ -1035,22 +1035,47 @@ + 2:00 EU EE%sT + + # Finland +-# ++ + # From Hannu Strang (1994-09-25 06:03:37 UTC): + # Well, here in Helsinki we're just changing from summer time to regular one, + # and it's supposed to change at 4am... ++ ++# From Janne Snabb (2010-0715): + # +-# From Paul Eggert (2006-03-22): +-# Shanks & Pottenger say Finland has switched at 02:00 standard time +-# since 1981. Go with Strang instead. ++# I noticed that the Finland data is not accurate for years 1981 and 1982. ++# During these two first trial years the DST adjustment was made one hour ++# earlier than in forthcoming years. Starting 1983 the adjustment was made ++# according to the central European standards. + # ++# This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac ++# Office of University of Helsinki, ISBN 952-10-3221-9, available online (in ++# Finnish) at ++# ++# ++# http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf ++# ++# ++# Page 105 (56 in PDF version) has a handy table of all past daylight savings ++# transitions. It is easy enough to interpret without Finnish skills. ++# ++# This is also confirmed by Finnish Broadcasting Company's archive at: ++# ++# ++# http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401 ++# ++# ++# The news clip from 1981 says that "the time between 2 and 3 o'clock does not ++# exist tonight." ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Finland 1942 only - Apr 3 0:00 1:00 S + Rule Finland 1942 only - Oct 3 0:00 0 - ++Rule Finland 1981 1982 - Mar lastSun 2:00 1:00 S ++Rule Finland 1981 1982 - Sep lastSun 3:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31 + 1:39:52 - HMT 1921 May # Helsinki Mean Time +- 2:00 Finland EE%sT 1981 Mar 29 2:00 ++ 2:00 Finland EE%sT 1983 + 2:00 EU EE%sT + + # Aaland Is +--- openjdk/jdk/make/sun/javazic/tzdata/leapseconds ++++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds +@@ -82,9 +82,9 @@ + # FAX : 33 (0) 1 40 51 22 91 + # Internet : services.iers@obspm.fr + # +-# Paris, 4 July 2009 ++# Paris, 14 July 2010 + # +-# Bulletin C 38 ++# Bulletin C 40 + # + # To authorities responsible + # for the measurement and +@@ -92,9 +92,9 @@ + # + # INFORMATION ON UTC - TAI + # +-# NO positive leap second will be introduced at the end of December 2009. ++# NO positive leap second will be introduced at the end of December 2010. + # The difference between Coordinated Universal Time UTC and the +-# International Atomic Time TAI is : ++# International Atomic Time TAI is : + # + # from 2009 January 1, 0h UTC, until further notice : UTC-TAI = -34 s + # +@@ -104,6 +104,6 @@ + # will be no time step at the next possible date. + # + # Daniel GAMBIS +-# Director ++# Director + # Earth Orientation Center of IERS + # Observatoire de Paris, France +--- openjdk/jdk/make/sun/javazic/tzdata/northamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/northamerica +@@ -1346,6 +1346,83 @@ + # entry since our cutoff date of 1970, so we can move + # America/Coral_Harbour to the 'backward' file. + ++# From Mark Brader (2010-03-06): ++# ++# Currently the database has: ++# ++# # Ontario ++# ++# # From Paul Eggert (2006-07-09): ++# # Shanks & Pottenger write that since 1970 most of Ontario has been like ++# # Toronto. ++# # Thunder Bay skipped DST in 1973. ++# # Many smaller locales did not observe peacetime DST until 1974; ++# # Nipigon (EST) and Rainy River (CST) are the largest that we know of. ++# ++# In the (Toronto) Globe and Mail for Saturday, 1955-09-24, in the bottom ++# right corner of page 1, it says that Toronto will return to standard ++# time at 2 am Sunday morning (which agrees with the database), and that: ++# ++# The one-hour setback will go into effect throughout most of Ontario, ++# except in areas like Windsor which remains on standard time all year. ++# ++# Windsor is, of course, a lot larger than Nipigon. ++# ++# I only came across this incidentally. I don't know if Windsor began ++# observing DST when Detroit did, or in 1974, or on some other date. ++# ++# By the way, the article continues by noting that: ++# ++# Some cities in the United States have pushed the deadline back ++# three weeks and will change over from daylight saving in October. ++ ++# From Arthur David Olson (2010-07-17): ++# ++# "Standard Time and Time Zones in Canada" appeared in ++# The Journal of The Royal Astronomical Society of Canada, ++# volume 26, number 2 (February 1932) and, as of 2010-07-17, ++# was available at ++# ++# http://adsabs.harvard.edu/full/1932JRASC..26...49S ++# ++# ++# It includes the text below (starting on page 57): ++# ++# A list of the places in Canada using daylight saving time would ++# require yearly revision. From information kindly furnished by ++# the provincial governments and by the postmasters in many cities ++# and towns, it is found that the following places used daylight sav- ++# ing in 1930. The information for the province of Quebec is definite, ++# for the other provinces only approximate: ++# ++# Province Daylight saving time used ++# Prince Edward Island Not used. ++# Nova Scotia In Halifax only. ++# New Brunswick In St. John only. ++# Quebec In the following places: ++# Montreal Lachine ++# Quebec Mont-Royal ++# Levis Iberville ++# St. Lambert Cap de la Madeleine ++# Verdun Loretteville ++# Westmount Richmond ++# Outremont St. Jerome ++# Longueuil Greenfield Park ++# Arvida Waterloo ++# Chambly-Canton Beaulieu ++# Melbourne La Tuque ++# St. Theophile Buckingham ++# Ontario Used generally in the cities and towns along ++# the southerly part of the province. Not ++# used in the northwesterlhy part. ++# Manitoba Not used. ++# Saskatchewan In Regina only. ++# Alberta Not used. ++# British Columbia Not used. ++# ++# With some exceptions, the use of daylight saving may be said to be limited ++# to those cities and towns lying between Quebec city and Windsor, Ont. ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Toronto 1919 only - Mar 30 23:30 1:00 D + Rule Toronto 1919 only - Oct 26 0:00 0 S +@@ -2111,7 +2188,44 @@ + -8:00 - PST 1970 + -7:00 Mexico M%sT 1999 + -7:00 - MST ++ ++# From Alexander Krivenyshev (2010-04-21): ++# According to news, Bahía de Banderas (Mexican state of Nayarit) ++# changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to ++# share the same time zone as nearby city Puerto Vallarta, Jalisco). ++# ++# (Spanish) ++# Bahía de Banderas homologa su horario al del centro del ++# país, a partir de este domingo ++# ++# http://www.nayarit.gob.mx/notes.asp?id=20748 ++# ++# ++# Bahía de Banderas homologa su horario con el del Centro del ++# País ++# ++# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50" ++# ++# ++# (English) ++# Puerto Vallarta and Bahía de Banderas: One Time Zone ++# ++# http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml ++# ++# ++# or ++# ++# http://www.worldtimezone.com/dst_news/dst_news_mexico08.html ++# ++# ++# "Mexico's Senate approved the amendments to the Mexican Schedule System that ++# will allow Bahía de Banderas and Puerto Vallarta to share the same time ++# zone ..." + # Baja California Sur, Nayarit, Sinaloa ++ ++# From Arthur David Olson (2010-05-01): ++# Use "Bahia_Banderas" to keep the name to fourteen characters. ++ + Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 +@@ -2122,6 +2236,19 @@ + -7:00 - MST 1949 Jan 14 + -8:00 - PST 1970 + -7:00 Mexico M%sT ++ ++Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00 ++ -7:00 - MST 1927 Jun 10 23:00 ++ -6:00 - CST 1930 Nov 15 ++ -7:00 - MST 1931 May 1 23:00 ++ -6:00 - CST 1931 Oct ++ -7:00 - MST 1932 Apr 1 ++ -6:00 - CST 1942 Apr 24 ++ -7:00 - MST 1949 Jan 14 ++ -8:00 - PST 1970 ++ -7:00 Mexico M%sT 2010 Apr 4 2:00 ++ -6:00 Mexico C%sT ++ + # Baja California (near US border) + Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56 + -7:00 - MST 1924 +--- openjdk/jdk/make/sun/javazic/tzdata/zone.tab ++++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab +@@ -199,8 +199,8 @@ + FI +6010+02458 Europe/Helsinki + FJ -1808+17825 Pacific/Fiji + FK -5142-05751 Atlantic/Stanley +-FM +0725+15147 Pacific/Truk Truk (Chuuk) and Yap +-FM +0658+15813 Pacific/Ponape Ponape (Pohnpei) ++FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap ++FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape) + FM +0519+16259 Pacific/Kosrae Kosrae + FO +6201-00646 Atlantic/Faroe + FR +4852+00220 Europe/Paris +@@ -310,6 +310,7 @@ + MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora + MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border + MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border ++MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahia de Banderas + MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia + MY +0133+11020 Asia/Kuching Sabah & Sarawak + MZ -2558+03235 Africa/Maputo +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java +@@ -75,6 +75,8 @@ + "Central European Summer Time", "CEST"}; + String CHAST[] = new String[] {"Chatham Standard Time", "CHAST", + "Chatham Daylight Time", "CHADT"}; ++ String CHUT[] = new String[] {"Chuuk Time", "CHUT", ++ "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Central Indonesia Time", "CIT", + "Central Indonesia Summer Time", "CIST"}; + String CLT[] = new String[] {"Chile Time", "CLT", +@@ -153,6 +155,8 @@ + "Pitcairn Daylight Time", "PDT"}; + String PKT[] = new String[] {"Pakistan Time", "PKT", + "Pakistan Summer Time", "PKST"}; ++ String PONT[] = new String[] {"Pohnpei Time", "PONT", ++ "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Pacific Standard Time", "PST", + "Pacific Daylight Time", "PDT"}; + String RST[] = new String[] {"Eastern Standard Time", "EST", +@@ -169,8 +173,6 @@ + "Eastern Summer Time (Tasmania)", "EST"}; + String TMT[] = new String[] {"Turkmenistan Time", "TMT", + "Turkmenistan Summer Time", "TMST"}; +- String TRUT[] = new String[] {"Truk Time", "TRUT", +- "Truk Summer Time", "TRUST"}; + String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT", + "Ulaanbaatar Summer Time", "ULAST"}; + String WART[] = new String[] {"Western Argentine Time", "WART", +@@ -309,6 +311,7 @@ + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, ++ {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, +@@ -755,6 +758,7 @@ + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Chatham", CHAST}, ++ {"Pacific/Chuuk", CHUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"Vanuatu Time", "VUT", + "Vanuatu Summer Time", "VUST"}}, +@@ -793,8 +797,8 @@ + {"Pacific/Palau", new String[] {"Palau Time", "PWT", + "Palau Summer Time", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, +- {"Pacific/Ponape", new String[] {"Ponape Time", "PONT", +- "Ponape Summer Time", "PONST"}}, ++ {"Pacific/Pohnpei", PONT}, ++ {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"Papua New Guinea Time", "PGT", + "Papua New Guinea Summer Time", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"Cook Is. Time", "CKT", +@@ -807,12 +811,12 @@ + "Gilbert Is. Summer Time", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"Tonga Time", "TOT", + "Tonga Summer Time", "TOST"}}, +- {"Pacific/Truk", TRUT}, ++ {"Pacific/Truk", CHUT}, + {"Pacific/Wake", new String[] {"Wake Time", "WAKT", + "Wake Summer Time", "WAKST"}}, + {"Pacific/Wallis", new String[] {"Wallis & Futuna Time", "WFT", + "Wallis & Futuna Summer Time", "WFST"}}, +- {"Pacific/Yap", TRUT}, ++ {"Pacific/Yap", CHUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java +@@ -75,6 +75,8 @@ + "Mitteleurop\u00e4ische Sommerzeit", "MESZ"}; + String CHAST[] = new String[] {"Chatham Normalzeit", "CHAST", + "Chatham Sommerzeit", "CHADT"}; ++ String CHUT[] = new String[] {"Chuuk Time", "CHUT", ++ "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Zentralindonesische Zeit", "CIT", + "Zentralindonesische Sommerzeit", "CIST"}; + String CLT[] = new String[] {"Chilenische Zeit", "CLT", +@@ -153,6 +155,8 @@ + "Pitcairn Sommerzeit", "PDT"}; + String PKT[] = new String[] {"Pakistanische Zeit", "PKT", + "Pakistanische Sommerzeit", "PKST"}; ++ String PONT[] = new String[] {"Pohnpei Time", "PONT", ++ "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Pazifische Normalzeit", "PST", + "Pazifische Sommerzeit", "PDT"}; + String RST[] = new String[] {"\u00d6stliche Normalzeit", "EST", +@@ -169,8 +173,6 @@ + "\u00d6stliche Sommerzeit (Tasmanien)", "EST"}; + String TMT[] = new String[] {"Turkmenische Zeit", "TMT", + "Turkmenische Sommerzeit", "TMST"}; +- String TRUT[] = new String[] {"Truk Zeit", "TRUT", +- "Truk Sommerzeit", "TRUST"}; + String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT", + "Ulaanbaatar Sommerzeit", "ULAST"}; + String WART[] = new String[] {"Westargentinische Zeit", "WART", +@@ -309,6 +311,7 @@ + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, ++ {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, +@@ -446,10 +449,13 @@ + {"America/Winnipeg", CST}, + {"America/Yakutat", AKST}, + {"America/Yellowknife", MST}, ++ {"Antarctica/Casey", WST_AUS}, + {"Antarctica/Davis", new String[] {"Davis Zeit", "DAVT", + "Davis Sommerzeit", "DAVST"}}, + {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Zeit", "DDUT", + "Dumont-d'Urville Sommerzeit", "DDUST"}}, ++ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", ++ "Macquarie Island Summer Time", "MIST"}}, + {"Antarctica/Mawson", new String[] {"Mawson Zeit", "MAWT", + "Mawson Sommerzeit", "MAWST"}}, + {"Antarctica/McMurdo", NZST}, +@@ -752,6 +758,7 @@ + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Chatham", CHAST}, ++ {"Pacific/Chuuk", CHUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"Vanuatu Zeit", "VUT", + "Vanuatu Sommerzeit", "VUST"}}, +@@ -790,8 +797,8 @@ + {"Pacific/Palau", new String[] {"Palau Zeit", "PWT", + "Palau Sommerzeit", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, +- {"Pacific/Ponape", new String[] {"Ponape Zeit", "PONT", +- "Ponape Sommerzeit", "PONST"}}, ++ {"Pacific/Pohnpei", PONT}, ++ {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"Papua-Neuguinea Zeit", "PGT", + "Papua-Neuguinea Sommerzeit", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"Cook-Inseln Zeit", "CKT", +@@ -804,12 +811,12 @@ + "Gilbert-Inseln Sommerzeit", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"Tonga Zeit", "TOT", + "Tonga Sommerzeit", "TOST"}}, +- {"Pacific/Truk", TRUT}, ++ {"Pacific/Truk", CHUT}, + {"Pacific/Wake", new String[] {"Wake Zeit", "WAKT", + "Wake Sommerzeit", "WAKST"}}, + {"Pacific/Wallis", new String[] {"Wallis u. Futuna Zeit", "WFT", + "Wallis u. Futuna Sommerzeit", "WFST"}}, +- {"Pacific/Yap", TRUT}, ++ {"Pacific/Yap", CHUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java +@@ -75,6 +75,8 @@ + "Hora de verano de Europa Central", "CEST"}; + String CHAST[] = new String[] {"Hora est\u00e1ndar de Chatham", "CHAST", + "Hora de verano de Chatham", "CHADT"}; ++ String CHUT[] = new String[] {"Chuuk Time", "CHUT", ++ "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Hora de Indonesia Central", "CIT", + "Hora de verano de Indonesia Central", "CIST"}; + String CLT[] = new String[] {"Hora de Chile", "CLT", +@@ -153,6 +155,8 @@ + "Hora de verano de Pitcairn", "PDT"}; + String PKT[] = new String[] {"Hora de Pakist\u00e1n", "PKT", + "Hora de verano de Pakist\u00e1n", "PKST"}; ++ String PONT[] = new String[] {"Pohnpei Time", "PONT", ++ "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST", + "Hora de verano del Pac\u00edfico", "PDT"}; + String RST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST", +@@ -169,8 +173,6 @@ + "Hora de verano del Este (Tasmania)", "EST"}; + String TMT[] = new String[] {"Hora de Turkmenist\u00e1n", "TMT", + "Hora de verano de Turkmenist\u00e1n", "TMST"}; +- String TRUT[] =new String[] {"Hora de Truk", "TRUT", +- "Hora de verano de Truk", "TRUST"}; + String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT", + "Hora de verano de Ulan Bator", "ULAST"}; + String WART[] = new String[] {"Hora de Argentina Occidental", "WART", +@@ -309,6 +311,7 @@ + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, ++ {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, +@@ -446,10 +449,13 @@ + {"America/Winnipeg", CST}, + {"America/Yakutat", AKST}, + {"America/Yellowknife", MST}, ++ {"Antarctica/Casey", WST_AUS}, + {"Antarctica/Davis", new String[] {"Hora de Davis", "DAVT", + "Hora de verano de Davis", "DAVST"}}, + {"Antarctica/DumontDUrville", new String[] {"Hora de Dumont-d'Urville", "DDUT", + "Hora de verano de Dumont-d'Urville", "DDUST"}}, ++ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", ++ "Macquarie Island Summer Time", "MIST"}}, + {"Antarctica/Mawson", new String[] {"Hora de Mawson", "MAWT", + "Hora de verano de Mawson", "MAWST"}}, + {"Antarctica/McMurdo", NZST}, +@@ -533,7 +539,6 @@ + "Hora de verano de Filipinas", "PHST"}}, + {"Asia/Muscat", GST}, + {"Asia/Nicosia", EET}, +- + {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novosibirsk", NOVT}, + {"Asia/Oral", new String[] {"Hora de Uralsk", "ORAT", +@@ -753,6 +758,7 @@ + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Chatham", CHAST}, ++ {"Pacific/Chuuk", CHUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"Hora de Vanuatu", "VUT", + "Hora de verano de Vanuatu", "VUST"}}, +@@ -791,8 +797,8 @@ + {"Pacific/Palau", new String[] {"Hora de Palau", "PWT", + "Hora de verano de Palau", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, +- {"Pacific/Ponape", new String[] {"Hora de Ponape", "PONT", +- "Hora de verano de Ponape", "PONST"}}, ++ {"Pacific/Pohnpei", PONT}, ++ {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"Hora de Pap\u00faa-Nueva Guinea", "PGT", + "Hora de verano de Pap\u00faa-Nueva Guinea", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"Hora de las islas Cook", "CKT", +@@ -805,12 +811,12 @@ + "Hora de verano de las islas Gilbert", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"Hora de Tonga", "TOT", + "Hora de verano de Tonga", "TOST"}}, +- {"Pacific/Truk", TRUT}, ++ {"Pacific/Truk", CHUT}, + {"Pacific/Wake", new String[] {"Hora de Wake", "WAKT", + "Hora de verano de Wake", "WAKST"}}, + {"Pacific/Wallis", new String[] {"Hora de Wallis y Futuna", "WFT", + "Hora de verano de Wallis y Futuna", "WFST"}}, +- {"Pacific/Yap", TRUT}, ++ {"Pacific/Yap", CHUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java +@@ -75,6 +75,8 @@ + "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"} ; + String CHAST[] = new String[] {"Heure standard de Chatham", "CHAST", + "Heure avanc\u00e9e de Chatham", "CHADT"}; ++ String CHUT[] = new String[] {"Chuuk Time", "CHUT", ++ "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "CIT", + "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie centrale", "CIST"}; + String CLT[] = new String[] {"Heure du Chili", "CLT", +@@ -153,6 +155,8 @@ + "heure avanc\u00e9e des Pitcairn", "PDT"}; + String PKT[] = new String[] {"Heure du Pakistan", "PKT", + "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"} ; ++ String PONT[] = new String[] {"Pohnpei Time", "PONT", ++ "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Heure normale du Pacifique", "PST", + "Heure avanc\u00e9e du Pacifique", "PDT"} ; + String RST[] = new String[] {"Heure normale de l'Est", "EST", +@@ -169,8 +173,6 @@ + "Heure d'\u00e9t\u00e9 d'Australie orientale (Tasmanie)", "EST"}; + String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT", + "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"} ; +- String TRUT[] = new String[] {"Heure de Truk", "TRUT", +- "Heure d'\u00e9t\u00e9 de Truk", "TRUST"}; + String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT", + "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"} ; + String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART", +@@ -309,6 +311,7 @@ + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, ++ {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, +@@ -446,10 +449,13 @@ + {"America/Winnipeg", CST}, + {"America/Yakutat", AKST}, + {"America/Yellowknife", MST}, ++ {"Antarctica/Casey", WST_AUS}, + {"Antarctica/Davis", new String[] {"Heure de Davis", "DAVT", + "Heure d'\u00e9t\u00e9 de Davis", "DAVST"}}, + {"Antarctica/DumontDUrville", new String[] {"Heure de Dumont-d'Urville", "DDUT", + "Heure d'\u00e9t\u00e9 de Dumont-d'Urville", "DDUST"}}, ++ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", ++ "Macquarie Island Summer Time", "MIST"}}, + {"Antarctica/Mawson", new String[] {"Heure de Mawson", "MAWT", + "Heure d'\u00e9t\u00e9 de Mawson", "MAWST"}}, + {"Antarctica/McMurdo", NZST}, +@@ -752,6 +758,7 @@ + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Chatham", CHAST}, ++ {"Pacific/Chuuk", CHUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"Heure du Vanuatu", "VUT", + "Heure d'\u00e9t\u00e9 du Vanuatu", "VUST"}}, +@@ -790,8 +797,8 @@ + {"Pacific/Palau", new String[] {"Heure de Palaos", "PWT", + "Heure d'\u00e9t\u00e9 de Palaos", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, +- {"Pacific/Ponape", new String[] {"Heure de Ponap\u00e9", "PONT", +- "Heure d'\u00e9t\u00e9 de Ponap\u00e9", "PONST"}}, ++ {"Pacific/Pohnpei", PONT}, ++ {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"Heure de Papouasie-Nouvelle-Guin\u00e9e", "PGT", + "Heure d'\u00e9t\u00e9 de de Papouasie-Nouvelle-Guin\u00e9e", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"Heure des \u00celes Cook", "CKT", +@@ -804,12 +811,12 @@ + "Heure d'\u00e9t\u00e9 de Kiribati", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"Heure de Tonga", "TOT", + "Heure d'\u00e9t\u00e9 de Tonga", "TOST"}}, +- {"Pacific/Truk", TRUT}, ++ {"Pacific/Truk", CHUT}, + {"Pacific/Wake", new String[] {"Heure de Wake", "WAKT", + "Heure d'\u00e9t\u00e9 de Wake", "WAKST"}}, + {"Pacific/Wallis", new String[] {"Heure de Wallis et Futuna", "WFT", + "Heure d'\u00e9t\u00e9 de Wallis et Futuna", "WFST"}}, +- {"Pacific/Yap", TRUT}, ++ {"Pacific/Yap", CHUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java +@@ -75,6 +75,8 @@ + "Ora estiva dell'Europa centrale", "CEST"}; + String CHAST[] = new String[] {"Ora di Chatham standard", "CHAST", + "Ora legale di Chatham", "CHADT"}; ++ String CHUT[] = new String[] {"Chuuk Time", "CHUT", ++ "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Ora dell'Indonesia centrale", "CIT", + "Ora estiva dell'Indonesia centrale", "CIST"}; + String CLT[] = new String[] {"Ora del Cile", "CLT", +@@ -153,6 +155,8 @@ + "Ora legale di Pitcairn", "PDT"}; + String PKT[] = new String[] {"Ora del Pakistan", "PKT", + "Ora estiva del Pakistan", "PKST"}; ++ String PONT[] = new String[] {"Pohnpei Time", "PONT", ++ "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST", + "Ora legale della costa occidentale USA", "PDT"}; + String RST[] = new String[] {"Ora solare USA orientale", "EST", +@@ -169,8 +173,6 @@ + "Ora estiva orientale (Tasmania)", "EST"}; + String TMT[] = new String[] {"Ora del Turkmenistan", "TMT", + "Ora estiva del Turkmenistan", "TMST"}; +- String TRUT[] = new String[] {"Ora di Truk", "TRUT", +- "Ora estiva di Truk", "TRUST"}; + String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT", + "Ora estiva di Ulaanbaatar", "ULAST"}; + String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART", +@@ -309,6 +311,7 @@ + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, ++ {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, +@@ -446,10 +449,13 @@ + {"America/Winnipeg", CST}, + {"America/Yakutat", AKST}, + {"America/Yellowknife", MST}, ++ {"Antarctica/Casey", WST_AUS}, + {"Antarctica/Davis", new String[] {"Ora di Davis", "DAVT", + "Ora estiva di Davis", "DAVST"}}, + {"Antarctica/DumontDUrville", new String[] {"Ora di Dumont-d'Urville", "DDUT", + "Ora estiva di Dumont-d'Urville", "DDUST"}}, ++ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", ++ "Macquarie Island Summer Time", "MIST"}}, + {"Antarctica/Mawson", new String[] {"Ora di Mawson", "MAWT", + "Ora estiva di Mawson", "MAWST"}}, + {"Antarctica/McMurdo", NZST}, +@@ -752,6 +758,7 @@ + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Chatham", CHAST}, ++ {"Pacific/Chuuk", CHUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"Ora di Vanuatu", "VUT", + "Ora estiva di Vanuatu", "VUST"}}, +@@ -790,8 +797,8 @@ + {"Pacific/Palau", new String[] {"Ora di Palau", "PWT", + "Ora estiva di Palau", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, +- {"Pacific/Ponape", new String[] {"Ora di Ponape", "PONT", +- "Ora estiva di Ponape", "PONST"}}, ++ {"Pacific/Pohnpei", PONT}, ++ {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"Ora di Papua Nuova Guinea", "PGT", + "Ora estiva di Papua Nuova Guinea", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"Ora delle Isole Cook", "CKT", +@@ -804,12 +811,12 @@ + "Ora estiva delle Isole Gilbert", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"Ora di Tonga", "TOT", + "Ora estiva di Tonga", "TOST"}}, +- {"Pacific/Truk", TRUT}, ++ {"Pacific/Truk", CHUT}, + {"Pacific/Wake", new String[] {"Ora di Wake", "WAKT", + "Ora estiva di Wake", "WAKST"}}, + {"Pacific/Wallis", new String[] {"Ora di Wallis e Futuna", "WFT", + "Ora estiva di Wallis e Futuna", "WFST"}}, +- {"Pacific/Yap", TRUT}, ++ {"Pacific/Yap", CHUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java +@@ -75,6 +75,8 @@ + "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"}; + String CHAST[] = new String[] {"\u30c1\u30e3\u30bf\u30e0\u6a19\u6e96\u6642", "CHAST", + "\u30c1\u30e3\u30bf\u30e0\u590f\u6642\u9593", "CHADT"}; ++ String CHUT[] = new String[] {"Chuuk Time", "CHUT", ++ "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "CIT", + "\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "CIST"}; + String CLT[] = new String[] {"\u30c1\u30ea\u6642\u9593", "CLT", +@@ -153,6 +155,8 @@ + "\u30d4\u30c8\u30b1\u30eb\u30f3\u5cf6\u590f\u6642\u9593", "PDT"}; + String PKT[] = new String[] {"\u30d1\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "PKT", + "\u30d1\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "PKST"}; ++ String PONT[] = new String[] {"Pohnpei Time", "PONT", ++ "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST", + "\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"}; + String RST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST", +@@ -169,8 +173,6 @@ + "\u6771\u90e8\u590f\u6642\u9593 (\u30bf\u30b9\u30de\u30cb\u30a2)", "EST"}; + String TMT[] = new String[] {"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "TMT", + "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"}; +- String TRUT[] = new String[] {"\u30c8\u30e9\u30c3\u30af\u6642\u9593", "TRUT", +- "\u30c8\u30e9\u30c3\u30af\u590f\u6642\u9593", "TRUST"}; + String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT", + "\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"}; + String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART", +@@ -309,6 +311,7 @@ + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, ++ {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, +@@ -446,10 +449,13 @@ + {"America/Winnipeg", CST}, + {"America/Yakutat", AKST}, + {"America/Yellowknife", MST}, ++ {"Antarctica/Casey", WST_AUS}, + {"Antarctica/Davis", new String[] {"\u30c7\u30a4\u30d3\u30b9\u6642\u9593", "DAVT", + "\u30c7\u30a4\u30d3\u30b9\u590f\u6642\u9593", "DAVST"}}, + {"Antarctica/DumontDUrville", new String[] {"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u6642\u9593", "DDUT", + "\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u590f\u6642\u9593", "DDUST"}}, ++ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", ++ "Macquarie Island Summer Time", "MIST"}}, + {"Antarctica/Mawson", new String[] {"\u30e2\u30fc\u30bd\u30f3\u6642\u9593", "MAWT", + "\u30e2\u30fc\u30bd\u30f3\u590f\u6642\u9593", "MAWST"}}, + {"Antarctica/McMurdo", NZST}, +@@ -752,6 +758,7 @@ + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Chatham", CHAST}, ++ {"Pacific/Chuuk", CHUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"\u30d0\u30cc\u30a2\u30c4\u6642\u9593", "VUT", + "\u30d0\u30cc\u30a2\u30c4\u590f\u6642\u9593", "VUST"}}, +@@ -790,8 +797,8 @@ + {"Pacific/Palau", new String[] {"\u30d1\u30e9\u30aa\u6642\u9593", "PWT", + "\u30d1\u30e9\u30aa\u590f\u6642\u9593", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, +- {"Pacific/Ponape", new String[] {"\u30dd\u30ca\u30da\u6642\u9593", "PONT", +- "\u30dd\u30ca\u30da\u590f\u6642\u9593", "PONST"}}, ++ {"Pacific/Pohnpei", PONT}, ++ {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u6642\u9593", "PGT", + "\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u590f\u6642\u9593", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"\u30af\u30c3\u30af\u8af8\u5cf6\u6642\u9593", "CKT", +@@ -804,12 +811,12 @@ + "\u30ae\u30eb\u30d0\u30fc\u30c8\u8af8\u5cf6\u590f\u6642\u9593", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"\u30c8\u30f3\u30ac\u6642\u9593", "TOT", + "\u30c8\u30f3\u30ac\u590f\u6642\u9593", "TOST"}}, +- {"Pacific/Truk", TRUT}, ++ {"Pacific/Truk", CHUT}, + {"Pacific/Wake", new String[] {"\u30a6\u30a7\u30fc\u30af\u6642\u9593", "WAKT", + "\u30a6\u30a7\u30fc\u30af\u590f\u6642\u9593", "WAKST"}}, + {"Pacific/Wallis", new String[] {"\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u6642\u9593", "WFT", + "\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u590f\u6642\u9593", "WFST"}}, +- {"Pacific/Yap", TRUT}, ++ {"Pacific/Yap", CHUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java +@@ -75,6 +75,8 @@ + "\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"}; + String CHAST[] = new String[] {"Chatham \ud45c\uc900\uc2dc", "CHAST", + "Chatham \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHADT"}; ++ String CHUT[] = new String[] {"Chuuk Time", "CHUT", ++ "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "CIT", + "\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CIST"}; + String CLT[] = new String[] {"\uce60\ub808 \uc2dc\uac04", "CLT", +@@ -153,6 +155,8 @@ + "Pitcairn \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; + String PKT[] = new String[] {"\ud30c\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "PKT", + "\ud30c\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PKST"}; ++ String PONT[] = new String[] {"Pohnpei Time", "PONT", ++ "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST", + "\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; + String RST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST", +@@ -169,8 +173,6 @@ + "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud0dc\uc988\uba54\uc774\ub2c8\uc544)", "EST"}; + String TMT[] = new String[] {"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "TMT", + "\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"}; +- String TRUT[] = new String[] {"\ud2b8\ub8e8\ud06c \uc2dc\uac04", "TRUT", +- "\ud2b8\ub8e8\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TRUST"}; + String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT", + "\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"}; + String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART", +@@ -309,6 +311,7 @@ + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, ++ {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, +@@ -446,10 +449,13 @@ + {"America/Winnipeg", CST}, + {"America/Yakutat", AKST}, + {"America/Yellowknife", MST}, ++ {"Antarctica/Casey", WST_AUS}, + {"Antarctica/Davis", new String[] {"Davis \uc2dc\uac04", "DAVT", + "Davis \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DAVST"}}, + {"Antarctica/DumontDUrville", new String[] {"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc2dc\uac04", "DDUT", + "\ub4a4\ubabd \ub4a4\ub974\ube4c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DDUST"}}, ++ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", ++ "Macquarie Island Summer Time", "MIST"}}, + {"Antarctica/Mawson", new String[] {"\ubaa8\uc2a8 \uc2dc\uac04", "MAWT", + "\ubaa8\uc2a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAWST"}}, + {"Antarctica/McMurdo", NZST}, +@@ -752,6 +758,7 @@ + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Chatham", CHAST}, ++ {"Pacific/Chuuk", CHUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"\ube44\ub204\uc544\ud22c \uc2dc\uac04", "VUT", + "\ubc14\ub204\uc544\ud22c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VUST"}}, +@@ -790,8 +797,8 @@ + {"Pacific/Palau", new String[] {"\ud314\ub77c\uc6b0 \uc2dc\uac04", "PWT", + "\ud314\ub77c\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, +- {"Pacific/Ponape", new String[] {"\ud3ec\ub098\ud504 \uc2dc\uac04", "PONT", +- "\ud3ec\ub098\ud504 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PONST"}}, ++ {"Pacific/Pohnpei", PONT}, ++ {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc2dc\uac04", "PGT", + "\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"\ucfe0\ud06c \uad70\ub3c4 \uc2dc\uac04", "CKT", +@@ -804,12 +811,12 @@ + "\uae38\ubc84\ud2b8 \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"\ud1b5\uac00 \uc2dc\uac04", "TOT", + "\ud1b5\uac00 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TOST"}}, +- {"Pacific/Truk", TRUT}, ++ {"Pacific/Truk", CHUT}, + {"Pacific/Wake", new String[] {"\uc6e8\uc774\ud06c \uc2dc\uac04", "WAKT", + "\uc6e8\uc774\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAKST"}}, + {"Pacific/Wallis", new String[] {"\uc6d4\ub9ac\uc2a4 \ud6c4\ud22c\ub098 \uc2dc\uac04", "WFT", + "\uc6d4\ub9ac\uc2a4 \ud6c4\ud2b8\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WFST"}}, +- {"Pacific/Yap", TRUT}, ++ {"Pacific/Yap", CHUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java +@@ -75,6 +75,8 @@ + "Centraleuropeisk sommartid", "CEST"}; + String CHAST[] = new String[] {"Chatham, normaltid", "CHAST", + "Chatham, sommartid", "CHADT"}; ++ String CHUT[] = new String[] {"Chuuk Time", "CHUT", ++ "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Centralindonesisk tid", "CIT", + "Centralindonesisk sommartid", "CIST"}; + String CLT[] = new String[] {"Chile, normaltid", "CLT", +@@ -153,6 +155,8 @@ + "Pitcairn, sommartid", "PDT"}; + String PKT[] = new String[] {"Pakistan, normaltid", "PKT", + "Pakistan, sommartid", "PKST"}; ++ String PONT[] = new String[] {"Pohnpei Time", "PONT", ++ "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Stilla havet, normaltid", "PST", + "Stilla havet, sommartid", "PDT"}; + String RST[] = new String[] {"Eastern, normaltid", "EST", +@@ -169,8 +173,6 @@ + "Eastern, sommartid (Tasmanien)", "EST"}; + String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT", + "Turkmenistan, sommartid", "TMST"}; +- String TRUT[] = new String[] {"Truk, normaltid", "TRUT", +- "Truk, sommartid", "TRUST"}; + String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT", + "Ulaanbaatar, sommartid", "ULAST"}; + String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART", +@@ -309,6 +311,7 @@ + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, ++ {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, +@@ -446,10 +449,13 @@ + {"America/Winnipeg", CST}, + {"America/Yakutat", AKST}, + {"America/Yellowknife", MST}, ++ {"Antarctica/Casey", WST_AUS}, + {"Antarctica/Davis", new String[] {"Davis, normaltid", "DAVT", + "Davis, sommartid", "DAVST"}}, + {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville, normaltid", "DDUT", + "Dumont-d'Urville, sommartid", "DDUST"}}, ++ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", ++ "Macquarie Island Summer Time", "MIST"}}, + {"Antarctica/Mawson", new String[] {"Mawson, normaltid", "MAWT", + "Mawson, sommartid", "MAWST"}}, + {"Antarctica/McMurdo", NZST}, +@@ -752,6 +758,7 @@ + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Chatham", CHAST}, ++ {"Pacific/Chuuk", CHUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"Vanuatu, normaltid", "VUT", + "Vanuatu, sommartid", "VUST"}}, +@@ -790,8 +797,8 @@ + {"Pacific/Palau", new String[] {"Palau, normaltid", "PWT", + "Palau, sommartid", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, +- {"Pacific/Ponape", new String[] {"Ponape, normaltid", "PONT", +- "Ponape, sommartid", "PONST"}}, ++ {"Pacific/Pohnpei", PONT}, ++ {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"Papua Nya Guinea, normaltid", "PGT", + "Papua Nya Guinea, sommartid", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"Cook\u00f6arna, normaltid", "CKT", +@@ -804,12 +811,12 @@ + "Gilbert\u00f6arna, sommartid", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"Tonga, normaltid", "TOT", + "Tonga, sommartid", "TOST"}}, +- {"Pacific/Truk", TRUT}, ++ {"Pacific/Truk", CHUT}, + {"Pacific/Wake", new String[] {"Wake, normaltid", "WAKT", + "Wake, sommartid", "WAKST"}}, + {"Pacific/Wallis", new String[] {"Wallis & Futuna, normaltid", "WFT", + "Wallis & Futuna, sommartid", "WFST"}}, +- {"Pacific/Yap", TRUT}, ++ {"Pacific/Yap", CHUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java +@@ -75,6 +75,8 @@ + "\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"}; + String CHAST[] = new String[] {"\u67e5\u8428\u59c6\u6807\u51c6\u65f6\u95f4", "CHAST", + "\u67e5\u8428\u59c6\u590f\u4ee4\u65f6", "CHADT"}; ++ String CHUT[] = new String[] {"Chuuk Time", "CHUT", ++ "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "CIT", + "\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "CIST"}; + String CLT[] = new String[] {"\u667a\u5229\u65f6\u95f4", "CLT", +@@ -153,6 +155,8 @@ + "\u76ae\u7279\u5eb7\u5c9b\u590f\u4ee4\u65f6", "PDT"}; + String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u65f6\u95f4", "PKT", + "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u65f6", "PKST"}; ++ String PONT[] = new String[] {"Pohnpei Time", "PONT", ++ "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST", + "\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"}; + String RST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST", +@@ -169,8 +173,6 @@ + "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u5854\u65af\u9a6c\u5c3c\u4e9a\uff09", "EST"}; + String TMT[] = new String[] {"\u571f\u5e93\u66fc\u65f6\u95f4", "TMT", + "\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"}; +- String TRUT[] = new String[] {"\u7279\u9c81\u514b\u65f6\u95f4", "TRUT", +- "\u7279\u9c81\u514b\u590f\u4ee4\u65f6", "TRUST"}; + String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT", + "\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"}; + String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART", +@@ -309,6 +311,7 @@ + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, ++ {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, +@@ -446,10 +449,13 @@ + {"America/Winnipeg", CST}, + {"America/Yakutat", AKST}, + {"America/Yellowknife", MST}, ++ {"Antarctica/Casey", WST_AUS}, + {"Antarctica/Davis", new String[] {"\u6234\u7ef4\u65af\u65f6\u95f4", "DAVT", + "\u6234\u7ef4\u65af\u590f\u4ee4\u65f6", "DAVST"}}, + {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u65f6\u95f4", "DDUT", + "Dumont-d'Urville \u590f\u4ee4\u65f6", "DDUST"}}, ++ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", ++ "Macquarie Island Summer Time", "MIST"}}, + {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u65f6\u95f4", "MAWT", + "\u83ab\u68ee\u590f\u4ee4\u65f6", "MAWST"}}, + {"Antarctica/McMurdo", NZST}, +@@ -752,6 +758,7 @@ + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Chatham", CHAST}, ++ {"Pacific/Chuuk", CHUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u56fe\u65f6\u95f4", "VUT", + "\u74e6\u5974\u963f\u56fe\u590f\u4ee4\u65f6", "VUST"}}, +@@ -790,8 +797,8 @@ + {"Pacific/Palau", new String[] {"\u5e1b\u7409\u65f6\u95f4", "PWT", + "\u5e1b\u7409\u590f\u4ee4\u65f6", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, +- {"Pacific/Ponape", new String[] {"Ponape \u65f6\u95f4", "PONT", +- "Ponape \u590f\u4ee4\u65f6", "PONST"}}, ++ {"Pacific/Pohnpei", PONT}, ++ {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u65f6\u95f4", "PGT", + "\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u590f\u4ee4\u65f6", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"\u5e93\u514b\u7fa4\u5c9b\u65f6\u95f4", "CKT", +@@ -804,12 +811,12 @@ + "\u5409\u4f2f\u7279\u7fa4\u5c9b\u590f\u4ee4\u65f6", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"\u4e1c\u52a0\u65f6\u95f4", "TOT", + "\u4e1c\u52a0\u590f\u4ee4\u65f6", "TOST"}}, +- {"Pacific/Truk", TRUT}, ++ {"Pacific/Truk", CHUT}, + {"Pacific/Wake", new String[] {"\u5a01\u514b\u65f6\u95f4", "WAKT", + "\u5a01\u514b\u590f\u4ee4\u65f6", "WAKST"}}, + {"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u65f6\u95f4", "WFT", + "\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u590f\u4ee4\u65f6", "WFST"}}, +- {"Pacific/Yap", TRUT}, ++ {"Pacific/Yap", CHUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java +@@ -75,6 +75,8 @@ + "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"}; + String CHAST[] = new String[] {"\u67e5\u5766\u6a19\u6e96\u6642\u9593", "CHAST", + "\u67e5\u5766\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CHADT"}; ++ String CHUT[] = new String[] {"Chuuk Time", "CHUT", ++ "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "CIT", + "\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u4ee4\u6642\u9593", "CIST"}; + String CLT[] = new String[] {"\u667a\u5229\u6642\u9593", "CLT", +@@ -153,6 +155,8 @@ + "\u76ae\u7279\u5eb7\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; + String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u6642\u9593", "PKT", + "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u6642\u9593", "PKST"}; ++ String PONT[] = new String[] {"Pohnpei Time", "PONT", ++ "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST", + "\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; + String RST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST", +@@ -169,8 +173,6 @@ + "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u5854\u65af\u6885\u5c3c\u4e9e\u5cf6)", "EST"}; + String TMT[] = new String[] {"\u571f\u5eab\u66fc\u6642\u9593", "TMT", + "\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"}; +- String TRUT[] = new String[] {"\u7279\u9b6f\u514b\u6642\u9593", "TRUT", +- "\u7279\u9b6f\u514b\u590f\u4ee4\u6642\u9593", "TRUST"}; + String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT", + "\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"}; + String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART", +@@ -309,6 +311,7 @@ + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, ++ {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, +@@ -446,10 +449,13 @@ + {"America/Winnipeg", CST}, + {"America/Yakutat", AKST}, + {"America/Yellowknife", MST}, ++ {"Antarctica/Casey", WST_AUS}, + {"Antarctica/Davis", new String[] {"\u81fa\u7dad\u65af\u6642\u9593", "DAVT", + "\u81fa\u7dad\u65af\u590f\u4ee4\u6642\u9593", "DAVST"}}, + {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u6642\u9593", "DDUT", + "Dumont-d'Urville \u590f\u4ee4\u6642\u9593", "DDUST"}}, ++ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", ++ "Macquarie Island Summer Time", "MIST"}}, + {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u6642\u9593", "MAWT", + "\u83ab\u68ee\u590f\u4ee4\u6642\u9593", "MAWST"}}, + {"Antarctica/McMurdo", NZST}, +@@ -753,6 +759,7 @@ + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Chatham", CHAST}, ++ {"Pacific/Chuuk", CHUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u5716\u6642\u9593", "VUT", + "\u74e6\u5974\u963f\u5716\u590f\u4ee4\u6642\u9593", "VUST"}}, +@@ -791,8 +798,8 @@ + {"Pacific/Palau", new String[] {"\u5e1b\u7409\u6642\u9593", "PWT", + "\u5e1b\u7409\u590f\u4ee4\u6642\u9593", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, +- {"Pacific/Ponape", new String[] {"Ponape \u6642\u9593", "PONT", +- "Ponape \u590f\u4ee4\u6642\u9593", "PONST"}}, ++ {"Pacific/Pohnpei", PONT}, ++ {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u6642\u9593", "PGT", + "\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u590f\u4ee4\u6642\u9593", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"\u5eab\u514b\u7fa4\u5cf6\u6642\u9593", "CKT", +@@ -805,12 +812,12 @@ + "\u5409\u4f2f\u7279\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"\u6771\u52a0\u6642\u9593", "TOT", + "\u6771\u52a0\u590f\u4ee4\u6642\u9593", "TOST"}}, +- {"Pacific/Truk", TRUT}, ++ {"Pacific/Truk", CHUT}, + {"Pacific/Wake", new String[] {"\u5a01\u514b\u6642\u9593", "WAKT", + "\u5a01\u514b\u590f\u4ee4\u6642\u9593", "WAKST"}}, + {"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u6642\u9593", "WFT", + "\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "WFST"}}, +- {"Pacific/Yap", TRUT}, ++ {"Pacific/Yap", CHUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/6996686-tzdata2010o.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/6996686-tzdata2010o.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,93 @@ +# HG changeset patch +# User peytoia +# Date 1288678136 -32400 +# Node ID 30bc265fa0d0385857c106a5f9bdafa19cbf2ac5 +# Parent de89eec422c3ce434605255170459e57f940d369 +6996686: (tz) Support tzdata2010o +Reviewed-by: okutsu + +--- openjdk/jdk/make/sun/javazic/tzdata/VERSION ++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2010l ++tzdata2010o +--- openjdk/jdk/make/sun/javazic/tzdata/asia ++++ openjdk/jdk/make/sun/javazic/tzdata/asia +@@ -569,8 +569,8 @@ + Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S + Rule HK 1954 only - Oct 31 3:30 0 - + Rule HK 1955 1964 - Nov Sun>=1 3:30 0 - +-Rule HK 1965 1977 - Apr Sun>=16 3:30 1:00 S +-Rule HK 1965 1977 - Oct Sun>=16 3:30 0 - ++Rule HK 1965 1976 - Apr Sun>=16 3:30 1:00 S ++Rule HK 1965 1976 - Oct Sun>=16 3:30 0 - + Rule HK 1973 only - Dec 30 3:30 1:00 S + Rule HK 1979 only - May Sun>=8 3:30 1:00 S + Rule HK 1979 only - Oct Sun>=16 3:30 0 - +--- openjdk/jdk/make/sun/javazic/tzdata/australasia ++++ openjdk/jdk/make/sun/javazic/tzdata/australasia +@@ -306,13 +306,26 @@ + # http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html + # + ++# From Alexander Krivenyshev (2010-10-24): ++# According to Radio Fiji and Fiji Times online, Fiji will end DST 3 ++# weeks earlier than expected - on March 6, 2011, not March 27, 2011... ++# Here is confirmation from Government of the Republic of the Fiji Islands, ++# Ministry of Information (fiji.gov.fj) web site: ++# ++# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155 ++# ++# or ++# ++# http://www.worldtimezone.com/dst_news/dst_news_fiji04.html ++# ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S + Rule Fiji 1999 2000 - Feb lastSun 3:00 0 - + Rule Fiji 2009 only - Nov 29 2:00 1:00 S + Rule Fiji 2010 only - Mar lastSun 3:00 0 - + Rule Fiji 2010 only - Oct 24 2:00 1:00 S +-Rule Fiji 2011 only - Mar lastSun 3:00 0 - ++Rule Fiji 2011 only - Mar Sun>=1 3:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva + 12:00 Fiji FJ%sT # Fiji Time +@@ -509,11 +522,21 @@ + # http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf + # + ++# From Raymond Hughes (2010-10-07): ++# Please see ++# ++# http://www.mcil.gov.ws ++# , ++# the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday ++# September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight ++# to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks ++# backwards from 1:00am to 12:00am" ++ + Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5 + -11:26:56 - LMT 1911 + -11:30 - SAMT 1950 # Samoa Time + -11:00 - WST 2010 Sep 26 +- -11:00 1:00 WSDT 2011 Apr 3 ++ -11:00 1:00 WSDT 2011 Apr 3 1:00 + -11:00 - WST + + # Solomon Is +--- openjdk/jdk/make/sun/javazic/tzdata/zone.tab ++++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab +@@ -63,7 +63,7 @@ + AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay + AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills + AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula +-AQ -7824+10654 Antarctica/Vostok Vostok Station, S Magnetic Pole ++AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok + AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie + AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I + AQ -5430+15857 Antarctica/Macquarie Macquarie Island Station, Macquarie Island diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/7017800-tzdata2011b.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/7017800-tzdata2011b.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,254 @@ +# HG changeset patch +# User peytoia +# Date 1297242029 -32400 +# Node ID eeaad0d340b285fa17e438bb2b9de6fa39289dd1 +# Parent 842a0f8c89ea5d5b4702502594a7fe37c509aec7 +7017800: (tz) Support tzdata2011b +Reviewed-by: okutsu + +--- openjdk/jdk/make/sun/javazic/tzdata/VERSION ++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2010o ++tzdata2011b +--- openjdk/jdk/make/sun/javazic/tzdata/australasia ++++ openjdk/jdk/make/sun/javazic/tzdata/australasia +@@ -106,14 +106,13 @@ + Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 - + Rule AS 1972 only - Feb 27 2:00s 0 - + Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 - +-Rule AS 1986 1989 - Mar Sun>=15 2:00s 0 - +-Rule AS 1990 only - Mar Sun>=18 2:00s 0 - +-Rule AS 1991 only - Mar Sun>=1 2:00s 0 - +-Rule AS 1992 only - Mar Sun>=18 2:00s 0 - +-Rule AS 1993 only - Mar Sun>=1 2:00s 0 - +-Rule AS 1994 only - Mar Sun>=18 2:00s 0 - ++Rule AS 1986 1990 - Mar Sun>=15 2:00s 0 - ++Rule AS 1991 only - Mar 3 2:00s 0 - ++Rule AS 1992 only - Mar 22 2:00s 0 - ++Rule AS 1993 only - Mar 7 2:00s 0 - ++Rule AS 1994 only - Mar 20 2:00s 0 - + Rule AS 1995 2005 - Mar lastSun 2:00s 0 - +-Rule AS 2006 only - Apr Sun>=1 2:00s 0 - ++Rule AS 2006 only - Apr 2 2:00s 0 - + Rule AS 2007 only - Mar lastSun 2:00s 0 - + Rule AS 2008 max - Apr Sun>=1 2:00s 0 - + Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 - +--- openjdk/jdk/make/sun/javazic/tzdata/northamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/northamerica +@@ -368,6 +368,27 @@ + -7:00 US M%sT 2003 Oct 26 02:00 + -6:00 US C%sT + ++# From Josh Findley (2011-01-21): ++# ...it appears that Mercer County, North Dakota, changed from the ++# mountain time zone to the central time zone at the last transition from ++# daylight-saving to standard time (on Nov. 7, 2010): ++# ++# http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm ++# ++# ++# http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html ++# ++ ++# From Andy Lipscomb (2011-01-24): ++# ...according to the Census Bureau, the largest city is Beulah (although ++# it's commonly referred to as Beulah-Hazen, with Hazen being the next ++# largest city in Mercer County). Google Maps places Beulah's city hall ++# at 4715'51" north, 10146'40" west, which yields an offset of 6h47'07". ++ ++Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53 ++ -7:00 US M%sT 2010 Nov 7 2:00 ++ -6:00 US C%sT ++ + # US mountain time, represented by Denver + # + # Colorado, far western Kansas, Montana, western +@@ -493,20 +514,50 @@ + # three votes for and one against." + + # Hawaii ++ ++# From Arthur David Olson (2010-12-09): ++# "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225 ++# of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09, ++# the article is available at ++# ++# http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf ++# ++# and indicates that standard time was adopted effective noon, January ++# 13, 1896 (page 218), that in "1933, the Legislature decreed daylight ++# saving for the period between the last Sunday of each April and the ++# last Sunday of each September, but less than a month later repealed the ++# act," (page 220), that year-round daylight saving time was in effect ++# from 1942-02-09 to 1945-09-30 (page 221, with no time of day given for ++# when clocks changed) and that clocks were changed by 30 minutes ++# effective the second Sunday of June, 1947 (page 219, with no time of ++# day given for when clocks changed). A footnote for the 1933 changes ++# cites Session Laws of Hawaii 1933, "Act. 90 (approved 26 Apr. 1933) ++# and Act 163 (approved 21 May 1933)." ++ ++# From Arthur David Olson (2011-01-19): ++# The following is from "Laws of the Territory of Hawaii Passed by the ++# Seventeenth Legislature: Regular Session 1933," available (as of ++# 2011-01-19) at American University's Pence Law Library. Page 85: "Act ++# 90...At 2 o'clock ante meridian of the last Sunday in April of each ++# year, the standard time of this Territory shall be advanced one ++# hour...This Act shall take effect upon its approval. Approved this 26th ++# day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of ++# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is ++# hereby repealed...This Act shall take effect upon its approval, upon ++# which date the standard time of this Territory shall be restored to ++# that existing immediately prior to the taking effect of said Act 90. ++# Approved this 21st day of May, A. D. 1933. LAWRENCE M. JUDD, Governor ++# of the Territory of Hawaii." + # +-# From Arthur David Olson: +-# And then there's Hawaii. +-# DST was observed for one day in 1933; +-# standard time was changed by half an hour in 1947; +-# it's always standard as of 1986. +-# +-# From Paul Eggert: +-# Shanks says the 1933 experiment lasted for three weeks. Go with Shanks. +-# +-Zone Pacific/Honolulu -10:31:26 - LMT 1900 Jan 1 12:00 +- -10:30 - HST 1933 Apr 30 2:00 +- -10:30 1:00 HDT 1933 May 21 2:00 +- -10:30 US H%sT 1947 Jun 8 2:00 ++# Note that 1933-05-21 was a Sunday. ++# We're left to guess the time of day when Act 163 was approved; guess noon. ++ ++Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00 #Schmitt&Cox ++ -10:30 - HST 1933 Apr 30 2:00 #Laws 1933 ++ -10:30 1:00 HDT 1933 May 21 12:00 #Laws 1933+12 ++ -10:30 - HST 1942 Feb 09 2:00 #Schmitt&Cox+2 ++ -10:30 1:00 HDT 1945 Sep 30 2:00 #Schmitt&Fox+2 ++ -10:30 US H%sT 1947 Jun 8 2:00 #Schmitt&Fox+2 + -10:00 - HST + + # Now we turn to US areas that have diverged from the consensus since 1970. +--- openjdk/jdk/make/sun/javazic/tzdata/zone.tab ++++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab +@@ -233,8 +233,8 @@ + HU +4730+01905 Europe/Budapest + ID -0610+10648 Asia/Jakarta Java & Sumatra + ID -0002+10920 Asia/Pontianak west & central Borneo +-ID -0507+11924 Asia/Makassar east & south Borneo, Celebes, Bali, Nusa Tengarra, west Timor +-ID -0232+14042 Asia/Jayapura Irian Jaya & the Moluccas ++ID -0507+11924 Asia/Makassar east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor ++ID -0232+14042 Asia/Jayapura west New Guinea (Irian Jaya) & Malukus (Moluccas) + IE +5320-00615 Europe/Dublin + IL +3146+03514 Asia/Jerusalem + IM +5409-00428 Europe/Isle_of_Man +@@ -426,6 +426,7 @@ + US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties + US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County + US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area) ++US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County + US +394421-1045903 America/Denver Mountain Time + US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon + US +364708-1084111 America/Shiprock Mountain Time - Navajo +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java +@@ -405,6 +405,7 @@ + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, ++ {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java +@@ -405,6 +405,7 @@ + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, ++ {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java +@@ -405,6 +405,7 @@ + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, ++ {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java +@@ -405,6 +405,7 @@ + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, ++ {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java +@@ -405,6 +405,7 @@ + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, ++ {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java +@@ -405,6 +405,7 @@ + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, ++ {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java +@@ -405,6 +405,7 @@ + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, ++ {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java +@@ -405,6 +405,7 @@ + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, ++ {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java +@@ -405,6 +405,7 @@ + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, ++ {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java +@@ -405,6 +405,7 @@ + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, ++ {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/7027387-tzdata2011d.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/7027387-tzdata2011d.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,502 @@ +# HG changeset patch +# User peytoia +# Date 1300405325 -32400 +# Node ID 55f97ad0a36eeb8b2dff095760c8b427188a761b +# Parent c53260a00454507cf651b03ad165e32a5be8298d +7027387: (tz) Support tzdata2011d +Reviewed-by: okutsu + +--- openjdk/jdk/make/sun/javazic/tzdata/VERSION ++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2011b ++tzdata2011d +--- openjdk/jdk/make/sun/javazic/tzdata/australasia ++++ openjdk/jdk/make/sun/javazic/tzdata/australasia +@@ -531,11 +531,31 @@ + # to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks + # backwards from 1:00am to 12:00am" + ++# From Raymond Hughes (2011-03-07) ++# I believe this will be posted shortly on the website ++# ++# www.mcil.gov.ws ++# ++# ++# PUBLIC NOTICE ON DAYLIGHT SAVING TIME ++# ++# Pursuant to the Daylight Saving Act 2009 and Cabinets decision, ++# businesses and the general public are hereby advised that daylight ++# saving time is on the first Saturday of April 2011 (02/04/11). ++# ++# The public is therefore advised that when the standard time strikes ++# the hour of four oclock (4.00am or 0400 Hours) on the 2nd April 2011, ++# then all instruments used to measure standard time are to be ++# adjusted/changed to three oclock (3:00am or 0300Hrs). ++# ++# Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE, ++# INDUSTRY AND LABOUR 28th February 2011 ++ + Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5 + -11:26:56 - LMT 1911 + -11:30 - SAMT 1950 # Samoa Time + -11:00 - WST 2010 Sep 26 +- -11:00 1:00 WSDT 2011 Apr 3 1:00 ++ -11:00 1:00 WSDT 2011 Apr 2 4:00 + -11:00 - WST + + # Solomon Is +--- openjdk/jdk/make/sun/javazic/tzdata/etcetera ++++ openjdk/jdk/make/sun/javazic/tzdata/etcetera +@@ -58,8 +58,7 @@ + # (i.e. west of Greenwich) even though many people would expect it to + # mean 4 hours ahead of UTC (i.e. east of Greenwich). + # +-# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation +-# (which is not yet supported by the tz code) allows for ++# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation allows for + # TZ='+4'; if you want time zone abbreviations conforming to + # ISO 8601 you can use TZ='<-0400>+4'. Thus the commonly-expected + # offset is kept within the angle bracket (and is used for display) +--- openjdk/jdk/make/sun/javazic/tzdata/europe ++++ openjdk/jdk/make/sun/javazic/tzdata/europe +@@ -2505,25 +2505,18 @@ + # (on a non-government server though) describing dates between 2002 and 2006: + # http://www.alomaliye.com/bkk_2002_3769.htm + +-# From Sue Williams (2008-08-11): +-# I spotted this news article about a potential change in Turkey. +-# +-# +-# http://www.hurriyet.com.tr/english/domestic/9626174.asp?scr=1 ++# From Gökdeniz Karadağ (2011-03-10): ++# ++# According to the articles linked below, Turkey will change into summer ++# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27. ++# This change is due to a nationwide exam on 27th. ++# ++# ++# http://www.worldbulletin.net/?aType=haber&ArticleID=70872 + # +- +-# From Sue Williams (2008-08-20): +-# This article says that around the end of March 2011, Turkey wants to +-# adjust the clocks forward by 1/2 hour and stay that way permanently. +-# The article indicates that this is a change in timezone offset in addition +-# to stopping observance of DST. +-# This proposal has not yet been approved. +-# +-# Read more here... +-# +-# Turkey to abandon daylight saving time in 2011 +-# +-# http://www.turkishdailynews.com.tr/article.php?enewsid=112989 ++# Turkish: ++# ++# http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373 + # + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +@@ -2591,6 +2584,8 @@ + 2:00 Turkey EE%sT 1978 Oct 15 + 3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time + 2:00 Turkey EE%sT 2007 ++ 2:00 EU EE%sT 2011 Mar 27 1:00u ++ 2:00 - EET 2011 Mar 28 1:00u + 2:00 EU EE%sT + Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. + +--- openjdk/jdk/make/sun/javazic/tzdata/leapseconds ++++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds +@@ -78,13 +78,13 @@ + # SERVICE DE LA ROTATION TERRESTRE + # OBSERVATOIRE DE PARIS + # 61, Av. de l'Observatoire 75014 PARIS (France) +-# Tel. : 33 (0) 1 40 51 22 26 ++# Tel. : 33 (0) 1 40 51 22 29 + # FAX : 33 (0) 1 40 51 22 91 + # Internet : services.iers@obspm.fr + # +-# Paris, 14 July 2010 ++# Paris, 2 February 2011 + # +-# Bulletin C 40 ++# Bulletin C 41 + # + # To authorities responsible + # for the measurement and +@@ -92,9 +92,9 @@ + # + # INFORMATION ON UTC - TAI + # +-# NO positive leap second will be introduced at the end of December 2010. ++# NO positive leap second will be introduced at the end of June 2011. + # The difference between Coordinated Universal Time UTC and the +-# International Atomic Time TAI is : ++# International Atomic Time TAI is : + # + # from 2009 January 1, 0h UTC, until further notice : UTC-TAI = -34 s + # +@@ -104,6 +104,6 @@ + # will be no time step at the next possible date. + # + # Daniel GAMBIS +-# Director +-# Earth Orientation Center of IERS ++# Head ++# Earth Orientation Center of the IERS + # Observatoire de Paris, France +--- openjdk/jdk/make/sun/javazic/tzdata/northamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/northamerica +@@ -448,15 +448,74 @@ + # were nearby inhabitants in some cases and for our purposes perhaps + # it's best to simply use the official transition. + # ++ ++# From Steve Ferguson (2011-01-31): ++# The author lives in Alaska and many of the references listed are only ++# available to Alaskan residents. ++# ++# ++# http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98 ++# ++ ++# From Arthur David Olson (2011-02-01): ++# Here's database-relevant material from the 2001 "Alaska History" article: ++# ++# On September 20 [1979]...DOT...officials decreed that on April 27, ++# 1980, Juneau and other nearby communities would move to Yukon Time. ++# Sitka, Petersburg, Wrangell, and Ketchikan, however, would remain on ++# Pacific Time. ++# ++# ...on September 22, 1980, DOT Secretary Neil E. Goldschmidt rescinded the ++# Department's September 1979 decision. Juneau and other communities in ++# northern Southeast reverted to Pacific Time on October 26. ++# ++# On October 28 [1983]...the Metlakatla Indian Community Council voted ++# unanimously to keep the reservation on Pacific Time. ++# ++# According to DOT official Joanne Petrie, Indian reservations are not ++# bound to follow time zones imposed by neighboring jurisdictions. ++# ++# (The last is consistent with how the database now handles the Navajo ++# Nation.) ++ ++# From Arthur David Olson (2011-02-09): ++# I just spoke by phone with a staff member at the Metlakatla Indian ++# Community office (using contact information available at ++# ++# http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla ++# ). ++# It's shortly after 1:00 here on the east coast of the United States; ++# the staffer said it was shortly after 10:00 there. When I asked whether ++# that meant they were on Pacific time, they said no--they were on their ++# own time. I asked about daylight saving; they said it wasn't used. I ++# did not inquire about practices in the past. ++ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Juneau 15:02:19 - LMT 1867 Oct 18 + -8:57:41 - LMT 1900 Aug 20 12:00 + -8:00 - PST 1942 + -8:00 US P%sT 1946 + -8:00 - PST 1969 ++ -8:00 US P%sT 1980 Apr 27 2:00 ++ -9:00 US Y%sT 1980 Oct 26 2:00 + -8:00 US P%sT 1983 Oct 30 2:00 + -9:00 US Y%sT 1983 Nov 30 + -9:00 US AK%sT ++Zone America/Sitka -14:58:47 - LMT 1867 Oct 18 ++ -9:01:13 - LMT 1900 Aug 20 12:00 ++ -8:00 - PST 1942 ++ -8:00 US P%sT 1946 ++ -8:00 - PST 1969 ++ -8:00 US P%sT 1983 Oct 30 2:00 ++ -9:00 US Y%sT 1983 Nov 30 ++ -9:00 US AK%sT ++Zone America/Metlakatla 15:13:42 - LMT 1867 Oct 18 ++ -8:46:18 - LMT 1900 Aug 20 12:00 ++ -8:00 - PST 1942 ++ -8:00 US P%sT 1946 ++ -8:00 - PST 1969 ++ -8:00 US P%sT 1983 Oct 30 2:00 ++ -8:00 US MeST + Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18 + -9:18:55 - LMT 1900 Aug 20 12:00 + -9:00 - YST 1942 +@@ -2569,6 +2628,21 @@ + # the time was announced as "diez cinco"--the same time as here, indicating + # that has indeed switched to DST. Assume second Sunday from 2009 forward. + ++# From Steffen Thorsen (2011-03-08): ++# Granma announced that Cuba is going to start DST on 2011-03-20 00:00:00 ++# this year. Nothing about the end date known so far (if that has ++# changed at all). ++# ++# Source: ++# ++# http://granma.co.cu/2011/03/08/nacional/artic01.html ++# ++# ++# Our info: ++# ++# http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html ++# ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Cuba 1928 only - Jun 10 0:00 1:00 D + Rule Cuba 1928 only - Oct 10 0:00 0 S +@@ -2602,7 +2676,9 @@ + Rule Cuba 2006 max - Oct lastSun 0:00s 0 S + Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D + Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D +-Rule Cuba 2009 max - Mar Sun>=8 0:00s 1:00 D ++Rule Cuba 2009 2010 - Mar Sun>=8 0:00s 1:00 D ++Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D ++Rule Cuba 2012 max - Mar Sun>=8 0:00s 1:00 D + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Havana -5:29:28 - LMT 1890 +--- openjdk/jdk/make/sun/javazic/tzdata/southamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/southamerica +@@ -1176,6 +1176,23 @@ + # From Arthur Daivd Olson (2010-03-06): + # Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch. + ++# From Glenn Eychaner (2011-03-02): [geychaner@mac.com] ++# It appears that the Chilean government has decided to postpone the ++# change from summer time to winter time again, by three weeks to April ++# 2nd: ++# ++# http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651 ++# ++# ++# This is not yet reflected in the offical "cambio de hora" site, but ++# probably will be soon: ++# ++# http://www.horaoficial.cl/cambio.htm ++# ++ ++# From Arthur David Olson (2011-03-02): ++# The emol.com article mentions a water shortage as the cause of the ++# postponement, which may mean that it's not a permanent change. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Chile 1927 1932 - Sep 1 0:00 1:00 S + Rule Chile 1928 1932 - Apr 1 0:00 0 - +@@ -1211,8 +1228,8 @@ + # which is used below in specifying the transition. + Rule Chile 2008 only - Mar 30 3:00u 0 - + Rule Chile 2009 only - Mar Sun>=9 3:00u 0 - +-Rule Chile 2010 only - Apr 4 3:00u 0 - +-Rule Chile 2011 max - Mar Sun>=9 3:00u 0 - ++Rule Chile 2010 2011 - Apr Sun>=1 3:00u 0 - ++Rule Chile 2012 max - Mar Sun>=9 3:00u 0 - + # IATA SSIM anomalies: (1992-02) says 1992-03-14; + # (1996-09) says 1998-03-08. Ignore these. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +--- openjdk/jdk/make/sun/javazic/tzdata/zone.tab ++++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab +@@ -434,9 +434,11 @@ + US +340308-1181434 America/Los_Angeles Pacific Time + US +611305-1495401 America/Anchorage Alaska Time + US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle ++US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle + US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck + US +643004-1652423 America/Nome Alaska Time - west Alaska + US +515248-1763929 America/Adak Aleutian Islands ++US +550737-1313435 America/Metlakatla Metlakatla Time - Annette Island + US +211825-1575130 Pacific/Honolulu Hawaii + UY -3453-05611 America/Montevideo + UZ +3940+06648 Asia/Samarkand west Uzbekistan +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java +@@ -216,6 +216,7 @@ + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, ++ {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, +@@ -392,6 +393,8 @@ + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, ++ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", ++ "Metlakatla Daylight Time", "MeDT"}}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"Pierre & Miquelon Standard Time", "PMST", + "Pierre & Miquelon Daylight Time", "PMDT"}}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java +@@ -216,6 +216,7 @@ + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, ++ {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, +@@ -392,6 +393,8 @@ + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, ++ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", ++ "Metlakatla Daylight Time", "MeDT"}}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"Pierre & Miquelon Normalzeit", "PMST", + "Pierre & Miquelon Sommerzeit", "PMDT"}}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java +@@ -216,6 +216,7 @@ + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, ++ {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, +@@ -392,6 +393,8 @@ + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, ++ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", ++ "Metlakatla Daylight Time", "MeDT"}}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"Hora est\u00e1ndar de Pierre & Miquelon", "PMST", + "Hora de verano de Pierre & Miquelon", "PMDT"}}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java +@@ -216,6 +216,7 @@ + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, ++ {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, +@@ -392,6 +393,8 @@ + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, ++ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", ++ "Metlakatla Daylight Time", "MeDT"}}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"Heure normale de Saint-Pierre et Miquelon", "PMST", + "Heure avanc\u00e9e de Saint-Pierre et Miquelon", "PMDT"}}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java +@@ -216,6 +216,7 @@ + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, ++ {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, +@@ -392,6 +393,8 @@ + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, ++ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", ++ "Metlakatla Daylight Time", "MeDT"}}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"Ora solare di Saint-Pierre e Miquelon", "PMST", + "Ora legale di Saint-Pierre e Miquelon", "PMDT"}}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java +@@ -216,6 +216,7 @@ + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, ++ {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, +@@ -392,6 +393,8 @@ + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, ++ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", ++ "Metlakatla Daylight Time", "MeDT"}}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u6a19\u6e96\u6642", "PMST", + "\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "PMDT"}}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java +@@ -216,6 +216,7 @@ + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, ++ {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, +@@ -392,6 +393,8 @@ + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, ++ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", ++ "Metlakatla Daylight Time", "MeDT"}}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \ud45c\uc900\uc2dc", "PMST", + "\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PMDT"}}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java +@@ -216,6 +216,7 @@ + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, ++ {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, +@@ -392,6 +393,8 @@ + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, ++ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", ++ "Metlakatla Daylight Time", "MeDT"}}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"Saint-Pierre-et-Miquelon, normaltid", "PMST", + "Saint-Pierre-et-Miquelon, sommartid", "PMDT"}}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java +@@ -216,6 +216,7 @@ + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, ++ {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, +@@ -392,6 +393,8 @@ + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, ++ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", ++ "Metlakatla Daylight Time", "MeDT"}}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u6807\u51c6\u65f6\u95f4", "PMST", + "\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u590f\u4ee4\u65f6", "PMDT"}}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java +@@ -216,6 +216,7 @@ + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, ++ {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, +@@ -392,6 +393,8 @@ + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, ++ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", ++ "Metlakatla Daylight Time", "MeDT"}}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u6a19\u6e96\u6642\u9593", "PMST", + "\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PMDT"}}, diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/7033174-tzdata2011e.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/7033174-tzdata2011e.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,117 @@ +# HG changeset patch +# User peytoia +# Date 1301898245 -32400 +# Node ID 8093f407d57d53d9744e3eb14a63c353a15896ff +# Parent 379a6504216e77569ee257cd5c1ece67521e9d3a +7033174: (tz) Support tzdata2011e +Reviewed-by: okutsu + +--- openjdk/jdk/make/sun/javazic/tzdata/VERSION ++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2011d ++tzdata2011e +--- openjdk/jdk/make/sun/javazic/tzdata/africa ++++ openjdk/jdk/make/sun/javazic/tzdata/africa +@@ -734,6 +734,48 @@ + # http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html + # + ++# From Dan Abitol (2011-03-30): ++# ...Rules for Africa/Casablanca are the following (24h format) ++# The 3rd april 2011 at 00:00:00, [it] will be 3rd april 1:00:00 ++# The 31th july 2011 at 00:59:59, [it] will be 31th July 00:00:00 ++# ...Official links of change in morocco ++# The change was broadcast on the FM Radio ++# I ve called ANRT (telecom regulations in Morocco) at ++# +212.537.71.84.00 ++# ++# http://www.anrt.net.ma/fr/ ++# ++# They said that ++# ++# http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view ++# ++# is the official publication to look at. ++# They said that the decision was already taken. ++# ++# More articles in the press ++# ++# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev ++# ++# e.html ++# ++# http://www.lematin.ma/Actualite/Express/Article.asp?id=148923 ++# ++# ++# http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim ++# anche-prochain-5538.html ++# ++ ++# From Petr Machata (2011-03-30): ++# They have it written in English here: ++# ++# http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view ++# ++# ++# It says there that "Morocco will resume its standard time on July 31, ++# 2011 at midnight." Now they don't say whether they mean midnight of ++# wall clock time (i.e. 11pm UTC), but that's what I would assume. It has ++# also been like that in the past. ++ + # RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S + + Rule Morocco 1939 only - Sep 12 0:00 1:00 S +@@ -757,6 +799,8 @@ + Rule Morocco 2009 only - Aug 21 0:00 0 - + Rule Morocco 2010 only - May 2 0:00 1:00 S + Rule Morocco 2010 only - Aug 8 0:00 0 - ++Rule Morocco 2011 only - Apr 3 0:00 1:00 S ++Rule Morocco 2011 only - Jul 31 0 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26 + 0:00 Morocco WE%sT 1984 Mar 16 +--- openjdk/jdk/make/sun/javazic/tzdata/southamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/southamerica +@@ -1193,6 +1193,19 @@ + # From Arthur David Olson (2011-03-02): + # The emol.com article mentions a water shortage as the cause of the + # postponement, which may mean that it's not a permanent change. ++ ++# From Glenn Eychaner (2011-03-28): ++# The article: ++# ++# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E} ++# ++# ++# In English: ++# Chile's clocks will go back an hour this year on the 7th of May instead ++# of this Saturday. They will go forward again the 3rd Saturday in ++# August, not in October as they have since 1968. This is a pilot plan ++# which will be reevaluated in 2012. ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Chile 1927 1932 - Sep 1 0:00 1:00 S + Rule Chile 1928 1932 - Apr 1 0:00 0 - +@@ -1222,13 +1235,16 @@ + Rule Chile 1998 only - Mar Sun>=9 3:00u 0 - + Rule Chile 1998 only - Sep 27 4:00u 1:00 S + Rule Chile 1999 only - Apr 4 3:00u 0 - +-Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S ++Rule Chile 2012 max - Oct Sun>=9 4:00u 1:00 S + Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 - + # N.B.: the end of March 29 in Chile is March 30 in Universal time, + # which is used below in specifying the transition. + Rule Chile 2008 only - Mar 30 3:00u 0 - + Rule Chile 2009 only - Mar Sun>=9 3:00u 0 - +-Rule Chile 2010 2011 - Apr Sun>=1 3:00u 0 - ++Rule Chile 2010 only - Apr Sun>=1 3:00u 0 - ++Rule Chile 2011 only - May Sun>=2 3:00u 0 - + Rule Chile 2012 max - Mar Sun>=9 3:00u 0 - + # IATA SSIM anomalies: (1992-02) says 1992-03-14; + # (1996-09) says 1998-03-08. Ignore these. diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/7039469-tzdata2011g.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/7039469-tzdata2011g.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,116 @@ +# HG changeset patch +# User peytoia +# Date 1303782379 -32400 +# Node ID 78890acd99e4981483a90a218fd19f8773ed6b68 +# Parent 91a590306e020f9cee4d0a96245e2a27235ba23d +7039469: (tz) Support tzdata2011g +Reviewed-by: okutsu + +--- openjdk/jdk/make/sun/javazic/tzdata/VERSION ++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2011e ++tzdata2011g +--- openjdk/jdk/make/sun/javazic/tzdata/africa ++++ openjdk/jdk/make/sun/javazic/tzdata/africa +@@ -234,7 +234,21 @@ + Rule Egypt 1990 1994 - May 1 1:00 1:00 S + # IATA (after 1990) says transitions are at 0:00. + # Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29. +-Rule Egypt 1995 max - Apr lastFri 0:00s 1:00 S ++ ++# From Alexander Krivenyshev (2011-04-20): ++# "...Egypt's interim cabinet decided on Wednesday to cancel daylight ++# saving time after a poll posted on its website showed the majority of ++# Egyptians would approve the cancellation." ++# ++# Egypt to cancel daylight saving time ++# ++# http://www.almasryalyoum.com/en/node/407168 ++# ++# or ++# ++# http://www.worldtimezone.com/dst_news/dst_news_egypt04.html ++# ++Rule Egypt 1995 2010 - Apr lastFri 0:00s 1:00 S + Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 - + # From Steffen Thorsen (2006-09-19): + # The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports: +@@ -335,7 +349,7 @@ + Rule Egypt 2009 only - Aug 20 23:00s 0 - + Rule Egypt 2010 only - Aug 11 0:00 0 - + Rule Egypt 2010 only - Sep 10 0:00 1:00 S +-Rule Egypt 2010 max - Sep lastThu 23:00s 0 - ++Rule Egypt 2010 only - Sep lastThu 23:00s 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Cairo 2:05:00 - LMT 1900 Oct +--- openjdk/jdk/make/sun/javazic/tzdata/europe ++++ openjdk/jdk/make/sun/javazic/tzdata/europe +@@ -168,7 +168,7 @@ + # A monument to Willett was unveiled on 1927-05-21, in an open space in + # a 45-acre wood near Chislehurst, Kent that was purchased by popular + # subscription and open to the public. On the south face of the monolith, +-# designed by G. W. Miller, is the the William Willett Memorial Sundial, ++# designed by G. W. Miller, is the...William Willett Memorial Sundial, + # which is permanently set to Summer Time. + + # From Winston Churchill (1934-04-28): +@@ -1808,7 +1808,7 @@ + # + # All these events predate our cutoff date of 1970. Unless we can + # come up with more definitive info about the timekeeping during the +-# war years it's probably best just do do the following for now: ++# war years it's probably best just do...the following for now: + Link Europe/Oslo Arctic/Longyearbyen + + # Poland +--- openjdk/jdk/make/sun/javazic/tzdata/southamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/southamerica +@@ -767,7 +767,7 @@ + # + # As a result of the above Decree I believe the America/Rio_Branco + # timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall +-# be created to represent the the west side of the Para State. I ++# be created to represent the...west side of the Para State. I + # suggest this new timezone be called Santarem as the most + # important/populated city in the affected area. + # +@@ -1365,6 +1365,24 @@ + # For now, we'll just record the time in Stanley, since we have no + # better info. + ++# From Steffen Thorsen (2011-04-01): ++# The Falkland Islands will not turn back clocks this winter, but stay on ++# daylight saving time. ++# ++# One source: ++# ++# http://www.falklandnews.com/public/story.cfm?get=5914&source=3 ++# ++# ++# We have gotten this confirmed by a clerk of the legislative assembly: ++# Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the ++# third Sunday of April at 0200hrs and advance to Summer Time (UTC/GMT -3 ++# hours) on the first Sunday of September at 0200hrs. ++# ++# IMPORTANT NOTE: During 2011, on a trial basis, the Falkland Islands ++# will not revert to local mean time, but clocks will remain on Summer ++# time (UTC/GMT - 3 hours) throughout the whole of 2011. Any long term ++# change to local time following the trial period will be notified. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S + Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 - +@@ -1376,7 +1394,8 @@ + Rule Falk 1984 only - Sep 16 0:00 1:00 S + Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S + Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 - +-Rule Falk 2001 max - Apr Sun>=15 2:00 0 - ++Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 - ++Rule Falk 2012 max - Apr Sun>=15 2:00 0 - + Rule Falk 2001 max - Sep Sun>=1 2:00 1:00 S + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Atlantic/Stanley -3:51:24 - LMT 1890 diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/7090843-tzdata2011j.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/7090843-tzdata2011j.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,1228 @@ +# HG changeset patch +# User peytoia +# Date 1316071034 -32400 +# Node ID e97325a7fe7b037be1cfcb33acd5ed5aea25a24e +# Parent 6b1e65e73b804bb5eeee4cb2d8ba15db7e6ad73f +7090843: (tz) Support tzdata2011j +Reviewed-by: okutsu + +--- openjdk/jdk/make/sun/javazic/tzdata/VERSION ++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2011g ++tzdata2011j +--- openjdk/jdk/make/sun/javazic/tzdata/africa ++++ openjdk/jdk/make/sun/javazic/tzdata/africa +@@ -80,7 +80,7 @@ + # I invented the following abbreviations; corrections are welcome! + # 2:00 WAST West Africa Summer Time + # 2:30 BEAT British East Africa Time (no longer used) +-# 2:44:45 BEAUT British East Africa Unified Time (no longer used) ++# 2:45 BEAUT British East Africa Unified Time (no longer used) + # 3:00 CAST Central Africa Summer Time (no longer used) + # 3:00 SAST South Africa Summer Time (no longer used) + # 3:00 EAT East Africa Time +@@ -418,7 +418,7 @@ + Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul + 3:00 - EAT 1930 + 2:30 - BEAT 1940 +- 2:44:45 - BEAUT 1960 ++ 2:45 - BEAUT 1960 + 3:00 - EAT + + # Lesotho +@@ -979,6 +979,11 @@ + 2:00 Sudan CA%sT 2000 Jan 15 12:00 + 3:00 - EAT + ++# South Sudan ++Zone Africa/Juba 2:06:24 - LMT 1931 ++ 2:00 Sudan CA%sT 2000 Jan 15 12:00 ++ 3:00 - EAT ++ + # Swaziland + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar +@@ -988,7 +993,7 @@ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931 + 3:00 - EAT 1948 +- 2:44:45 - BEAUT 1961 ++ 2:45 - BEAUT 1961 + 3:00 - EAT + + # Togo +@@ -1114,7 +1119,7 @@ + Zone Africa/Kampala 2:09:40 - LMT 1928 Jul + 3:00 - EAT 1930 + 2:30 - BEAT 1948 +- 2:44:45 - BEAUT 1957 ++ 2:45 - BEAUT 1957 + 3:00 - EAT + + # Zambia +--- openjdk/jdk/make/sun/javazic/tzdata/antarctica ++++ openjdk/jdk/make/sun/javazic/tzdata/antarctica +@@ -41,18 +41,6 @@ + # I made up all time zone abbreviations mentioned here; corrections welcome! + # FORMAT is `zzz' and GMTOFF is 0 for locations while uninhabited. + +-# These rules are stolen from the `europe' file. +-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule RussAQ 1981 1984 - Apr 1 0:00 1:00 S +-Rule RussAQ 1981 1983 - Oct 1 0:00 0 - +-Rule RussAQ 1984 1991 - Sep lastSun 2:00s 0 - +-Rule RussAQ 1985 1991 - Mar lastSun 2:00s 1:00 S +-Rule RussAQ 1992 only - Mar lastSat 23:00 1:00 S +-Rule RussAQ 1992 only - Sep lastSat 23:00 0 - +-Rule RussAQ 1993 max - Mar lastSun 2:00s 1:00 S +-Rule RussAQ 1993 1995 - Sep lastSun 2:00s 0 - +-Rule RussAQ 1996 max - Oct lastSun 2:00s 0 - +- + # These rules are stolen from the `southamerica' file. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule ArgAQ 1964 1966 - Mar 1 0:00 0 - +--- openjdk/jdk/make/sun/javazic/tzdata/asia ++++ openjdk/jdk/make/sun/javazic/tzdata/asia +@@ -99,6 +99,10 @@ + Rule RussiaAsia 1993 1995 - Sep lastSun 2:00s 0 - + Rule RussiaAsia 1996 max - Oct lastSun 2:00s 0 - + ++# From Arthur David Olson (2011-06-15): ++# While Russia abandoned DST in 2011, Armenia may choose to ++# follow Russia's "old" rules. ++ + # Afghanistan + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Kabul 4:36:48 - LMT 1890 +--- openjdk/jdk/make/sun/javazic/tzdata/australasia ++++ openjdk/jdk/make/sun/javazic/tzdata/australasia +@@ -521,7 +521,7 @@ + # http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf + # + +-# From Raymond Hughes (2010-10-07): ++# From Laupue Raymond Hughes (2010-10-07): + # Please see + # + # http://www.mcil.gov.ws +@@ -531,7 +531,7 @@ + # to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks + # backwards from 1:00am to 12:00am" + +-# From Raymond Hughes (2011-03-07) ++# From Laupue Raymond Hughes (2011-03-07): + # I believe this will be posted shortly on the website + # + # www.mcil.gov.ws +@@ -551,12 +551,74 @@ + # Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE, + # INDUSTRY AND LABOUR 28th February 2011 + ++# From David Zuelke (2011-05-09): ++# Subject: Samoa to move timezone from east to west of international date line ++# ++# ++# http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963 ++# ++ ++# From Mark Sim-Smith (2011-08-17): ++# I have been in contact with Leilani Tuala Warren from the Samoa Law ++# Reform Commission, and she has sent me a copy of the Bill that she ++# confirmed has been passed...Most of the sections are about maps rather ++# than the time zone change, but I'll paste the relevant bits below. But ++# the essence is that at midnight 29 Dec (UTC-11 I suppose), Samoa ++# changes from UTC-11 to UTC+13: ++# ++# International Date Line Bill 2011 ++# ++# AN ACT to provide for the change to standard time in Samoa and to make ++# consequential amendments to the position of the International Date ++# Line, and for related purposes. ++# ++# BE IT ENACTED by the Legislative Assembly of Samoa in Parliament ++# assembled as follows: ++# ++# 1. Short title and commencement-(1) This Act may be cited as the ++# International Date Line Act 2011. (2) Except for section 5(3) this Act ++# commences at 12 o'clock midnight, on Thursday 29th December 2011. (3) ++# Section 5(3) commences on the date of assent by the Head of State. ++# ++# [snip] ++# ++# 3. Interpretation - [snip] "Samoa standard time" in this Act and any ++# other statute of Samoa which refers to 'Samoa standard time' means the ++# time 13 hours in advance of Co-ordinated Universal Time. ++# ++# 4. Samoa standard time - (1) Upon the commencement of this Act, Samoa ++# standard time shall be set at 13 hours in advance of Co-ordinated ++# Universal Time for the whole of Samoa. (2) All references to Samoa's ++# time zone and to Samoa standard time in Samoa in all legislation and ++# instruments after the commencement of this Act shall be references to ++# Samoa standard time as provided for in this Act. (3) Nothing in this ++# Act affects the provisions of the Daylight Saving Act 2009, except that ++# it defines Samoa standard time.... ++ ++# From Laupue Raymond Hughes (2011-09-02): ++# ++# http://www.mcil.gov.ws/mcil_publications.html ++# ++# ++# here is the official website publication for Samoa DST and dateline change ++# ++# DST ++# Year End Time Start Time ++# 2011 - - - - - - 24 September 3:00am to 4:00am ++# 2012 01 April 4:00am to 3:00am - - - - - - ++# ++# Dateline Change skip Friday 30th Dec 2011 ++# Thursday 29th December 2011 23:59:59 Hours ++# Saturday 31st December 2011 00:00:00 Hours + Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5 + -11:26:56 - LMT 1911 + -11:30 - SAMT 1950 # Samoa Time + -11:00 - WST 2010 Sep 26 + -11:00 1:00 WSDT 2011 Apr 2 4:00 +- -11:00 - WST ++ -11:00 - WST 2011 Sep 24 3:00 ++ -11:00 1:00 WSDT 2011 Dec 30 ++ 13:00 1:00 WSDT 2012 Apr 1 4:00 ++ 13:00 - WST + + # Solomon Is + # excludes Bougainville, for which see Papua New Guinea +@@ -1228,7 +1290,7 @@ + # Lord Howe Island Board (controlling authority for the Island) is + # seeking the community's views on various options for summer time + # arrangements on the Island, e.g. advance clocks by 1 full hour +-# instead of only 30 minutes. Dependant on the wishes of residents ++# instead of only 30 minutes. [Dependent] on the wishes of residents + # the Board may approach the NSW government to change the existing + # arrangements. The starting date for summer time on the Island will + # however always coincide with the rest of NSW. +@@ -1354,7 +1416,7 @@ + + # From Paul Eggert (1996-01-22): + # Today's _Wall Street Journal_ (page 1) reports that Kiribati +-# ``declared it the same day throught the country as of Jan. 1, 1995'' ++# ``declared it the same day [throughout] the country as of Jan. 1, 1995'' + # as part of the competition to be first into the 21st century. + + +--- openjdk/jdk/make/sun/javazic/tzdata/europe ++++ openjdk/jdk/make/sun/javazic/tzdata/europe +@@ -587,6 +587,26 @@ + Rule Russia 1993 1995 - Sep lastSun 2:00s 0 - + Rule Russia 1996 max - Oct lastSun 2:00s 0 - + ++# From Alexander Krivenyshev (2011-06-14): ++# According to Kremlin press service, Russian President Dmitry Medvedev ++# signed a federal law "On calculation of time" on June 9, 2011. ++# According to the law Russia is abolishing daylight saving time. ++# ++# Medvedev signed a law "On the Calculation of Time" (in russian): ++# ++# http://bmockbe.ru/events/?ID=7583 ++# ++# ++# Medvedev signed a law on the calculation of the time (in russian): ++# ++# http://www.regnum.ru/news/polit/1413906.html ++# ++ ++# From Arthur David Olson (2011-06-15): ++# Take "abolishing daylight saving time" to mean that time is now considered ++# to be standard. ++# At least for now, keep the "old" Russia rules for the benefit of Belarus. ++ + # These are for backward compatibility with older versions. + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -2035,7 +2055,8 @@ + 1:00 C-Eur CE%sT 1945 + 2:00 Poland CE%sT 1946 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s +- 2:00 Russia EE%sT ++ 2:00 Russia EE%sT 2011 Mar 27 2:00s ++ 3:00 - KALT + # + # From Oscar van Vlijmen (2001-08-25): [This region consists of] + # Respublika Adygeya, Arkhangel'skaya oblast', +@@ -2064,7 +2085,8 @@ + 2:00 - EET 1930 Jun 21 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s + 2:00 Russia EE%sT 1992 Jan 19 2:00s +- 3:00 Russia MSK/MSD ++ 3:00 Russia MSK/MSD 2011 Mar 27 2:00s ++ 4:00 - MSK + # + # Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast', + # Volgogradskaya oblast'. Shanks & Pottenger say Kirov is still at +0400 +@@ -2077,7 +2099,8 @@ + 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T + 3:00 Russia VOL%sT 1991 Mar 31 2:00s + 4:00 - VOLT 1992 Mar 29 2:00s +- 3:00 Russia VOL%sT ++ 3:00 Russia VOL%sT 2011 Mar 27 2:00s ++ 4:00 - VOLT + # + # From Oscar van Vlijmen (2001-08-25): [This region consists of] + # Samarskaya oblast', Udmyrtskaya respublika +@@ -2089,7 +2112,8 @@ + 2:00 Russia KUY%sT 1991 Sep 29 2:00s + 3:00 - KUYT 1991 Oct 20 3:00 + 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time +- 3:00 Russia SAM%sT ++ 3:00 Russia SAM%sT 2011 Mar 27 2:00s ++ 4:00 - SAMT + + # + # From Oscar van Vlijmen (2001-08-25): [This region consists of] +@@ -2102,7 +2126,8 @@ + 4:00 - SVET 1930 Jun 21 # Sverdlovsk Time + 5:00 Russia SVE%sT 1991 Mar 31 2:00s + 4:00 Russia SVE%sT 1992 Jan 19 2:00s +- 5:00 Russia YEK%sT # Yekaterinburg Time ++ 5:00 Russia YEK%sT 2011 Mar 27 2:00s ++ 6:00 - YEKT # Yekaterinburg Time + # + # From Oscar van Vlijmen (2001-08-25): [This region consists of] + # Respublika Altaj, Altajskij kraj, Omskaya oblast'. +@@ -2110,7 +2135,8 @@ + 5:00 - OMST 1930 Jun 21 # Omsk TIme + 6:00 Russia OMS%sT 1991 Mar 31 2:00s + 5:00 Russia OMS%sT 1992 Jan 19 2:00s +- 6:00 Russia OMS%sT ++ 6:00 Russia OMS%sT 2011 Mar 27 2:00s ++ 7:00 - OMST + # + # From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's + # not clear when it switched from +7 to +6. +@@ -2120,7 +2146,8 @@ + 7:00 Russia NOV%sT 1991 Mar 31 2:00s + 6:00 Russia NOV%sT 1992 Jan 19 2:00s + 7:00 Russia NOV%sT 1993 May 23 # say Shanks & P. +- 6:00 Russia NOV%sT ++ 6:00 Russia NOV%sT 2011 Mar 27 2:00s ++ 7:00 - NOVT + + # From Alexander Krivenyshev (2009-10-13): + # Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on +@@ -2153,7 +2180,8 @@ + 7:00 Russia KRA%sT 1991 Mar 31 2:00s + 6:00 Russia KRA%sT 1992 Jan 19 2:00s + 7:00 Russia KRA%sT 2010 Mar 28 2:00s +- 6:00 Russia NOV%sT # Novosibirsk/Novokuznetsk Time ++ 6:00 Russia NOV%sT 2011 Mar 27 2:00s ++ 7:00 - NOVT # Novosibirsk/Novokuznetsk Time + + # + # From Oscar van Vlijmen (2001-08-25): [This region consists of] +@@ -2164,7 +2192,8 @@ + 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time + 7:00 Russia KRA%sT 1991 Mar 31 2:00s + 6:00 Russia KRA%sT 1992 Jan 19 2:00s +- 7:00 Russia KRA%sT ++ 7:00 Russia KRA%sT 2011 Mar 27 2:00s ++ 8:00 - KRAT + # + # From Oscar van Vlijmen (2001-08-25): [This region consists of] + # Respublika Buryatiya, Irkutskaya oblast', +@@ -2174,7 +2203,8 @@ + 7:00 - IRKT 1930 Jun 21 # Irkutsk Time + 8:00 Russia IRK%sT 1991 Mar 31 2:00s + 7:00 Russia IRK%sT 1992 Jan 19 2:00s +- 8:00 Russia IRK%sT ++ 8:00 Russia IRK%sT 2011 Mar 27 2:00s ++ 9:00 - IRKT + # + # From Oscar van Vlijmen (2003-10-18): [This region consists of] + # Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast', +@@ -2197,7 +2227,8 @@ + 8:00 - YAKT 1930 Jun 21 # Yakutsk Time + 9:00 Russia YAK%sT 1991 Mar 31 2:00s + 8:00 Russia YAK%sT 1992 Jan 19 2:00s +- 9:00 Russia YAK%sT ++ 9:00 Russia YAK%sT 2011 Mar 27 2:00s ++ 10:00 - YAKT + # + # From Oscar van Vlijmen (2003-10-18): [This region consists of] + # Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj, +@@ -2210,7 +2241,8 @@ + 9:00 - VLAT 1930 Jun 21 # Vladivostok Time + 10:00 Russia VLA%sT 1991 Mar 31 2:00s + 9:00 Russia VLA%sST 1992 Jan 19 2:00s +- 10:00 Russia VLA%sT ++ 10:00 Russia VLA%sT 2011 Mar 27 2:00s ++ 11:00 - VLAT + # + # Sakhalinskaya oblast'. + # The Zone name should be Yuzhno-Sakhalinsk, but that's too long. +@@ -2220,7 +2252,8 @@ + 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T. + 10:00 Russia SAK%sT 1992 Jan 19 2:00s + 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s +- 10:00 Russia SAK%sT ++ 10:00 Russia SAK%sT 2011 Mar 27 2:00s ++ 11:00 - SAKT + # + # From Oscar van Vlijmen (2003-10-18): [This region consists of] + # Magadanskaya oblast', Respublika Sakha (Yakutiya). +@@ -2233,7 +2266,8 @@ + 10:00 - MAGT 1930 Jun 21 # Magadan Time + 11:00 Russia MAG%sT 1991 Mar 31 2:00s + 10:00 Russia MAG%sT 1992 Jan 19 2:00s +- 11:00 Russia MAG%sT ++ 11:00 Russia MAG%sT 2011 Mar 27 2:00s ++ 12:00 - MAGT + # + # From Oscar van Vlijmen (2001-08-25): [This region consists of] + # Kamchatskaya oblast', Koryakskij avtonomnyj okrug. +@@ -2244,7 +2278,8 @@ + 12:00 Russia PET%sT 1991 Mar 31 2:00s + 11:00 Russia PET%sT 1992 Jan 19 2:00s + 12:00 Russia PET%sT 2010 Mar 28 2:00s +- 11:00 Russia PET%sT ++ 11:00 Russia PET%sT 2011 Mar 27 2:00s ++ 12:00 - PETT + # + # Chukotskij avtonomnyj okrug + Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2 +@@ -2253,7 +2288,8 @@ + 12:00 Russia ANA%sT 1991 Mar 31 2:00s + 11:00 Russia ANA%sT 1992 Jan 19 2:00s + 12:00 Russia ANA%sT 2010 Mar 28 2:00s +- 11:00 Russia ANA%sT ++ 11:00 Russia ANA%sT 2011 Mar 27 2:00s ++ 12:00 - ANAT + + # Serbia + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +--- openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab ++++ openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab +@@ -43,6 +43,9 @@ + # + # Lines beginning with `#' are comments. + # ++# From Arthur David Olson (2011-08-17): ++# Resynchronized today with the ISO 3166 site (adding SS for South Sudan). ++# + #country- + #code country name + AD Andorra +@@ -52,7 +55,6 @@ + AI Anguilla + AL Albania + AM Armenia +-AN Netherlands Antilles + AO Angola + AQ Antarctica + AR Argentina +@@ -75,6 +77,7 @@ + BM Bermuda + BN Brunei + BO Bolivia ++BQ Bonaire Sint Eustatius & Saba + BR Brazil + BS Bahamas + BT Bhutan +@@ -97,6 +100,7 @@ + CR Costa Rica + CU Cuba + CV Cape Verde ++CW Curacao + CX Christmas Island + CY Cyprus + CZ Czech Republic +@@ -251,8 +255,10 @@ + SN Senegal + SO Somalia + SR Suriname ++SS South Sudan + ST Sao Tome & Principe + SV El Salvador ++SX Sint Maarten + SY Syria + SZ Swaziland + TC Turks & Caicos Is +--- openjdk/jdk/make/sun/javazic/tzdata/northamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/northamerica +@@ -490,6 +490,10 @@ + # own time. I asked about daylight saving; they said it wasn't used. I + # did not inquire about practices in the past. + ++# From Arthur David Olson (2011-08-17): ++# For lack of better information, assume that Metlakatla's ++# abandonment of use of daylight saving resulted from the 1983 vote. ++ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Juneau 15:02:19 - LMT 1867 Oct 18 + -8:57:41 - LMT 1900 Aug 20 12:00 +@@ -515,7 +519,7 @@ + -8:00 US P%sT 1946 + -8:00 - PST 1969 + -8:00 US P%sT 1983 Oct 30 2:00 +- -8:00 US MeST ++ -8:00 - MeST + Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18 + -9:18:55 - LMT 1900 Aug 20 12:00 + -9:00 - YST 1942 +@@ -615,8 +619,8 @@ + -10:30 - HST 1933 Apr 30 2:00 #Laws 1933 + -10:30 1:00 HDT 1933 May 21 12:00 #Laws 1933+12 + -10:30 - HST 1942 Feb 09 2:00 #Schmitt&Cox+2 +- -10:30 1:00 HDT 1945 Sep 30 2:00 #Schmitt&Fox+2 +- -10:30 US H%sT 1947 Jun 8 2:00 #Schmitt&Fox+2 ++ -10:30 1:00 HDT 1945 Sep 30 2:00 #Schmitt&Cox+2 ++ -10:30 - HST 1947 Jun 8 2:00 #Schmitt&Cox+2 + -10:00 - HST + + # Now we turn to US areas that have diverged from the consensus since 1970. +@@ -1185,12 +1189,39 @@ + # From Paul Eggert (2000-10-02): + # INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches + # at 00:01 local time. For now, assume it started in 1987. ++ ++# From Michael Pelley (2011-08-05): ++# The Government of Newfoundland and Labrador has pending changes to ++# modify the hour for daylight savings time to come into effect in ++# November 2011. This modification would change the time from 12:01AM to ++# 2:00AM on the dates of the switches of Daylight Savings Time to/from ++# Standard Time. ++# ++# As a matter of reference, in Canada provinces have the authority of ++# setting time zone information. The legislation has passed our ++# legislative body (The House of Assembly) and is awaiting the ++# proclamation to come into effect. You may find this information at: ++# ++# http://www.assembly.nl.ca/legislation/sr/lists/Proclamation.htm ++# ++# and ++# search within that web page for Standard Time (Amendment) Act. The Act ++# may be found at: ++# ++# http://www.assembly.nl.ca/business/bills/Bill1106.htm ++# ++# ... ++# MICHAEL PELLEY | Manager of Enterprise Architecture - Solution Delivery ++# Office of the Chief Information Officer Executive Council Government of ++# Newfoundland & Labrador P.O. Box 8700, 40 Higgins Line, St. John's NL ++# A1B 4J6 ++ + Rule StJohns 1987 only - Apr Sun>=1 0:01 1:00 D + Rule StJohns 1987 2006 - Oct lastSun 0:01 0 S + Rule StJohns 1988 only - Apr Sun>=1 0:01 2:00 DD + Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D +-Rule StJohns 2007 max - Mar Sun>=8 0:01 1:00 D +-Rule StJohns 2007 max - Nov Sun>=1 0:01 0 S ++Rule StJohns 2007 2011 - Mar Sun>=8 0:01 1:00 D ++Rule StJohns 2007 2010 - Nov Sun>=1 0:01 0 S + # + # St John's has an apostrophe, but Posix file names can't have apostrophes. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -1200,7 +1231,8 @@ + -3:30:52 StJohns N%sT 1935 Mar 30 + -3:30 StJohns N%sT 1942 May 11 + -3:30 Canada N%sT 1946 +- -3:30 StJohns N%sT ++ -3:30 StJohns N%sT 2011 Nov ++ -3:30 Canada N%sT + + # most of east Labrador + +@@ -1214,7 +1246,8 @@ + -3:30 StJohns N%sT 1942 May 11 + -3:30 Canada N%sT 1946 + -3:30 StJohns N%sT 1966 Mar 15 2:00 +- -4:00 StJohns A%sT ++ -4:00 StJohns A%sT 2011 Nov ++ -4:00 Canada A%sT + + + # west Labrador, Nova Scotia, Prince Edward I +@@ -1946,20 +1979,69 @@ + # daylight saving.... + # http://www.nnsl.com/frames/newspapers/2006-11/nov13_06none.html + +-# From Chris Walton (2007-03-14): +-# Today I phoned the "hamlet office" to find out what Resolute was doing with +-# its clocks. ++# From Chris Walton (2011-03-21): ++# Back in 2007 I initiated the creation of a new "zone file" for Resolute ++# Bay. Resolute Bay is a small community located about 900km north of ++# the Arctic Circle. The zone file was required because Resolute Bay had ++# decided to use UTC-5 instead of UTC-6 for the winter of 2006-2007. + # +-# The individual that answered the phone confirmed that the clocks did not +-# move at the end of daylight saving on October 29/2006. He also told me that +-# the clocks did not move this past weekend (March 11/2007).... +- +-# From Chris Walton (2008-11-13): +-# ...the residents of Resolute believe that they are changing "time zones" +-# twice a year. In winter months, local time is qualified with "Eastern +-# Time" which is really "Eastern Standard Time (UTC-5)". In summer +-# months, local time is qualified with "Central Time" which is really +-# "Central Daylight Time (UTC-5)"... ++# According to new information which I received last week, Resolute Bay ++# went back to using UTC-6 in the winter of 2007-2008... ++# ++# On March 11/2007 most of Canada went onto daylight saving. On March ++# 14/2007 I phoned the Resolute Bay hamlet office to do a "time check." I ++# talked to somebody that was both knowledgeable and helpful. I was able ++# to confirm that Resolute Bay was still operating on UTC-5. It was ++# explained to me that Resolute Bay had been on the Eastern Time zone ++# (EST) in the winter, and was now back on the Central Time zone (CDT). ++# i.e. the time zone had changed twice in the last year but the clocks ++# had not moved. The residents had to know which time zone they were in ++# so they could follow the correct TV schedule... ++# ++# On Nov 02/2008 most of Canada went onto standard time. On Nov 03/2008 I ++# phoned the Resolute Bay hamlet office...[D]ue to the challenging nature ++# of the phone call, I decided to seek out an alternate source of ++# information. I found an e-mail address for somebody by the name of ++# Stephanie Adams whose job was listed as "Inns North Support Officer for ++# Arctic Co-operatives." I was under the impression that Stephanie lived ++# and worked in Resolute Bay... ++# ++# On March 14/2011 I phoned the hamlet office again. I was told that ++# Resolute Bay had been using Central Standard Time over the winter of ++# 2010-2011 and that the clocks had therefore been moved one hour ahead ++# on March 13/2011. The person I talked to was aware that Resolute Bay ++# had previously experimented with Eastern Standard Time but he could not ++# tell me when the practice had stopped. ++# ++# On March 17/2011 I searched the Web to find an e-mail address of ++# somebody that might be able to tell me exactly when Resolute Bay went ++# off Eastern Standard Time. I stumbled on the name "Aziz Kheraj." Aziz ++# used to be the mayor of Resolute Bay and he apparently owns half the ++# businesses including "South Camp Inn." This website has some info on ++# Aziz: ++# ++# http://www.uphere.ca/node/493 ++# ++# ++# I sent Aziz an e-mail asking when Resolute Bay had stopped using ++# Eastern Standard Time. ++# ++# Aziz responded quickly with this: "hi, The time was not changed for the ++# 1 year only, the following year, the community went back to the old way ++# of "spring ahead-fall behind" currently we are zulu plus 5 hrs and in ++# the winter Zulu plus 6 hrs" ++# ++# This of course conflicted with everything I had ascertained in November 2008. ++# ++# I sent Aziz a copy of my 2008 e-mail exchange with Stephanie. Aziz ++# responded with this: "Hi, Stephanie lives in Winnipeg. I live here, You ++# may want to check with the weather office in Resolute Bay or do a ++# search on the weather through Env. Canada. web site" ++# ++# If I had realized the Stephanie did not live in Resolute Bay I would ++# never have contacted her. I now believe that all the information I ++# obtained in November 2008 should be ignored... ++# I apologize for reporting incorrect information in 2008. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule NT_YK 1918 only - Apr 14 2:00 1:00 D +@@ -1987,14 +2069,12 @@ + -6:00 Canada C%sT 2000 Oct 29 2:00 + -5:00 Canada E%sT + # aka Qausuittuq +-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Resolute 2006 max - Nov Sun>=1 2:00 0 ES +-Rule Resolute 2007 max - Mar Sun>=8 2:00 0 CD + Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded + -6:00 NT_YK C%sT 2000 Oct 29 2:00 + -5:00 - EST 2001 Apr 1 3:00 + -6:00 Canada C%sT 2006 Oct 29 2:00 +- -5:00 Resolute %sT ++ -5:00 - EST 2007 Mar 11 3:00 ++ -6:00 Canada C%sT + # aka Kangiqiniq + Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded + -6:00 NT_YK C%sT 2000 Oct 29 2:00 +--- openjdk/jdk/make/sun/javazic/tzdata/southamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/southamerica +@@ -1298,6 +1298,14 @@ + -4:30 - ANT 1965 # Netherlands Antilles Time + -4:00 - AST + ++# From Arthur David Olson (2011-06-15): ++# At least for now, use links for places with new iso3166 codes. ++# The name "Lower Prince's Quarter" is both longer than fourteen charaters ++# and contains an apostrophe; use "Lower_Princes" below. ++ ++Link America/Curacao America/Lower_Princes # Sint Maarten ++Link America/Curacao America/Kralendijk # Bonaire, Sint Estatius and Saba ++ + # Ecuador + # + # From Paul Eggert (2007-03-04): +--- openjdk/jdk/make/sun/javazic/tzdata/zone.tab ++++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab +@@ -54,7 +54,6 @@ + AI +1812-06304 America/Anguilla + AL +4120+01950 Europe/Tirane + AM +4011+04430 Asia/Yerevan +-AN +1211-06900 America/Curacao + AO -0848+01314 Africa/Luanda + AQ -7750+16636 Antarctica/McMurdo McMurdo Station, Ross Island + AQ -9000+00000 Antarctica/South_Pole Amundsen-Scott Station, South Pole +@@ -109,6 +108,7 @@ + BM +3217-06446 Atlantic/Bermuda + BN +0456+11455 Asia/Brunei + BO -1630-06809 America/La_Paz ++BQ +120903-0681636 America/Kralendijk + BR -0351-03225 America/Noronha Atlantic islands + BR -0127-04829 America/Belem Amapa, E Para + BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB) +@@ -142,7 +142,7 @@ + CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario + CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations + CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut +-CA +744144-0944945 America/Resolute Eastern Standard Time - Resolute, Nunavut ++CA +744144-0944945 America/Resolute Central Standard Time - Resolute, Nunavut + CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut + CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut + CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario +@@ -177,6 +177,7 @@ + CR +0956-08405 America/Costa_Rica + CU +2308-08222 America/Havana + CV +1455-02331 Atlantic/Cape_Verde ++CW +1211-06900 America/Curacao + CX -1025+10543 Indian/Christmas + CY +3510+03322 Asia/Nicosia + CZ +5005+01426 Europe/Prague +@@ -382,8 +383,10 @@ + SN +1440-01726 Africa/Dakar + SO +0204+04522 Africa/Mogadishu + SR +0550-05510 America/Paramaribo ++SS +0451+03136 Africa/Juba + ST +0020+00644 Africa/Sao_Tome + SV +1342-08912 America/El_Salvador ++SX +180305-0630250 America/Lower_Princes + SY +3330+03618 Asia/Damascus + SZ -2618+03106 Africa/Mbabane + TC +2128-07108 America/Grand_Turk +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java +@@ -159,8 +159,6 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Pacific Standard Time", "PST", + "Pacific Daylight Time", "PDT"}; +- String RST[] = new String[] {"Eastern Standard Time", "EST", +- "Central Daylight Time", "CDT"}; + String SAST[] = new String[] {"South Africa Standard Time", "SAST", + "South Africa Summer Time", "SAST"}; + String SBT[] = new String[] {"Solomon Is. Time", "SBT", +@@ -262,6 +260,7 @@ + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, ++ {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, +@@ -378,11 +377,13 @@ + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, ++ {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"Bolivia Time", "BOT", + "Bolivia Summer Time", "BOST"}}, + {"America/Lima", new String[] {"Peru Time", "PET", + "Peru Summer Time", "PEST"}}, + {"America/Louisville", EST}, ++ {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, +@@ -425,7 +426,7 @@ + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, +- {"America/Resolute", RST}, ++ {"America/Resolute", CST}, + {"America/Rio_Branco", AMT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, +@@ -673,7 +674,8 @@ + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, +- {"Europe/Kaliningrad", EET}, ++ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", ++ "Kaliningrad Summer Time", "KALST"}}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java +@@ -159,8 +159,6 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Pazifische Normalzeit", "PST", + "Pazifische Sommerzeit", "PDT"}; +- String RST[] = new String[] {"\u00d6stliche Normalzeit", "EST", +- "Zentrale Sommerzeit", "CDT"}; + String SAST[] = new String[] {"S\u00fcdafrikanische Normalzeit", "SAST", + "S\u00fcdafrikanische Sommerzeit", "SAST"}; + String SBT[] = new String[] {"Salomoninseln Zeit", "SBT", +@@ -262,6 +260,7 @@ + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, ++ {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, +@@ -378,11 +377,13 @@ + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, ++ {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"Bolivianische Zeit", "BOT", + "Bolivianische Sommerzeit", "BOST"}}, + {"America/Lima", new String[] {"Peruanische Zeit", "PET", + "Peruanische Sommerzeit", "PEST"}}, + {"America/Louisville", EST}, ++ {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, +@@ -425,7 +426,7 @@ + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, +- {"America/Resolute", RST}, ++ {"America/Resolute", CST}, + {"America/Rio_Branco", AMT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, +@@ -673,7 +674,8 @@ + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, +- {"Europe/Kaliningrad", EET}, ++ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", ++ "Kaliningrad Summer Time", "KALST"}}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java +@@ -159,8 +159,6 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST", + "Hora de verano del Pac\u00edfico", "PDT"}; +- String RST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST", +- "Hora de verano Central", "CDT"}; + String SAST[] = new String[] {"Hora est\u00e1ndar de Sud\u00e1frica", "SAST", + "Hora de verano de Sud\u00e1frica", "SAST"}; + String SBT[] = new String[] {"Hora de las Islas Solomon", "SBT", +@@ -262,6 +260,7 @@ + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, ++ {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, +@@ -378,11 +377,13 @@ + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, ++ {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"Hora de Bolivia", "BOT", + "Hora de verano de Bolivia", "BOST"}}, + {"America/Lima", new String[] {"Hora de Per\u00fa", "PET", + "Hora de verano de Per\u00fa", "PEST"}}, + {"America/Louisville", EST}, ++ {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, +@@ -425,7 +426,7 @@ + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, +- {"America/Resolute", RST}, ++ {"America/Resolute", CST}, + {"America/Rio_Branco", AMT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, +@@ -673,7 +674,8 @@ + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, +- {"Europe/Kaliningrad", EET}, ++ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", ++ "Kaliningrad Summer Time", "KALST"}}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java +@@ -159,8 +159,6 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Heure normale du Pacifique", "PST", + "Heure avanc\u00e9e du Pacifique", "PDT"} ; +- String RST[] = new String[] {"Heure normale de l'Est", "EST", +- "Heure avanc\u00e9e du Centre", "CDT"} ; + String SAST[] = new String[] {"Heure normale d'Afrique du Sud", "SAST", + "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"} ; + String SBT[] = new String[] {"Heure des \u00celes Salomon", "SBT", +@@ -262,6 +260,7 @@ + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, ++ {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, +@@ -378,11 +377,13 @@ + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, ++ {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"Heure de Bolivie", "BOT", + "Heure d'\u00e9t\u00e9 de Bolivie", "BOST"}}, + {"America/Lima", new String[] {"Heure du P\u00e9rou", "PET", + "Heure d'\u00e9t\u00e9 du P\u00e9rou", "PEST"}}, + {"America/Louisville", EST}, ++ {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, +@@ -425,7 +426,7 @@ + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, +- {"America/Resolute", RST}, ++ {"America/Resolute", CST}, + {"America/Rio_Branco", AMT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, +@@ -673,7 +674,8 @@ + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, +- {"Europe/Kaliningrad", EET}, ++ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", ++ "Kaliningrad Summer Time", "KALST"}}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java +@@ -159,8 +159,6 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST", + "Ora legale della costa occidentale USA", "PDT"}; +- String RST[] = new String[] {"Ora solare USA orientale", "EST", +- "Ora legale USA centrale", "CDT"}; + String SAST[] = new String[] {"Ora solare del Sudafrica", "SAST", + "Ora estiva del Sudafrica", "SAST"}; + String SBT[] = new String[] {"Ora delle Isole Salomone", "SBT", +@@ -262,6 +260,7 @@ + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, ++ {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, +@@ -378,11 +377,13 @@ + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, ++ {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"Ora della Bolivia", "BOT", + "Ora estiva della Bolivia", "BOST"}}, + {"America/Lima", new String[] {"Ora del Per\u00f9", "PET", + "Ora estiva del Per\u00f9", "PEST"}}, + {"America/Louisville", EST}, ++ {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, +@@ -425,7 +426,7 @@ + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, +- {"America/Resolute", RST}, ++ {"America/Resolute", CST}, + {"America/Rio_Branco", AMT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, +@@ -673,7 +674,8 @@ + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, +- {"Europe/Kaliningrad", EET}, ++ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", ++ "Kaliningrad Summer Time", "KALST"}}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java +@@ -159,8 +159,6 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST", + "\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"}; +- String RST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST", +- "\u4e2d\u90e8\u590f\u6642\u9593", "CDT"}; + String SAST[] = new String[] {"\u5357\u30a2\u30d5\u30ea\u30ab\u6a19\u6e96\u6642", "SAST", + "\u5357\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "SAST"}; + String SBT[] = new String[] {"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u6642\u9593", "SBT", +@@ -262,6 +260,7 @@ + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, ++ {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, +@@ -378,11 +377,13 @@ + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, ++ {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"\u30dc\u30ea\u30d3\u30a2\u6642\u9593", "BOT", + "\u30dc\u30ea\u30d3\u30a2\u590f\u6642\u9593", "BOST"}}, + {"America/Lima", new String[] {"\u30da\u30eb\u30fc\u6642\u9593", "PET", + "\u30da\u30eb\u30fc\u590f\u6642\u9593", "PEST"}}, + {"America/Louisville", EST}, ++ {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, +@@ -425,7 +426,7 @@ + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, +- {"America/Resolute", RST}, ++ {"America/Resolute", CST}, + {"America/Rio_Branco", AMT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, +@@ -673,7 +674,8 @@ + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, +- {"Europe/Kaliningrad", EET}, ++ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", ++ "Kaliningrad Summer Time", "KALST"}}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java +@@ -159,8 +159,6 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST", + "\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; +- String RST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST", +- "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; + String SAST[] = new String[] {"\ub0a8\uc544\ud504\ub9ac\uce74 \ud45c\uc900\uc2dc", "SAST", + "\ub0a8\uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAST"}; + String SBT[] = new String[] {"\uc194\ub85c\ubaac \uad70\ub3c4 \uc2dc\uac04", "SBT", +@@ -262,6 +260,7 @@ + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, ++ {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, +@@ -378,11 +377,13 @@ + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, ++ {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"\ubcfc\ub9ac\ube44\uc544 \uc2dc\uac04", "BOT", + "\ubcfc\ub9ac\ube44\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BOST"}}, + {"America/Lima", new String[] {"\ud398\ub8e8 \uc2dc\uac04", "PET", + "\ud398\ub8e8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PEST"}}, + {"America/Louisville", EST}, ++ {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, +@@ -425,7 +426,7 @@ + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, +- {"America/Resolute", RST}, ++ {"America/Resolute", CST}, + {"America/Rio_Branco", AMT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, +@@ -673,7 +674,8 @@ + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, +- {"Europe/Kaliningrad", EET}, ++ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", ++ "Kaliningrad Summer Time", "KALST"}}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java +@@ -159,8 +159,6 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Stilla havet, normaltid", "PST", + "Stilla havet, sommartid", "PDT"}; +- String RST[] = new String[] {"Eastern, normaltid", "EST", +- "Central sommartid", "CDT"}; + String SAST[] = new String[] {"Sydafrika, normaltid", "SAST", + "Sydafrika, sommartid", "SAST"}; + String SBT[] = new String[] {"Salomon\u00f6arna, normaltid", "SBT", +@@ -262,6 +260,7 @@ + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, ++ {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, +@@ -378,11 +377,13 @@ + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, ++ {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"Bolivia, normaltid", "BOT", + "Bolivia, sommartid", "BOST"}}, + {"America/Lima", new String[] {"Peru, normaltid", "PET", + "Peru, sommartid", "PEST"}}, + {"America/Louisville", EST}, ++ {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, +@@ -425,7 +426,7 @@ + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, +- {"America/Resolute", RST}, ++ {"America/Resolute", CST}, + {"America/Rio_Branco", AMT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, +@@ -673,7 +674,8 @@ + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, +- {"Europe/Kaliningrad", EET}, ++ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", ++ "Kaliningrad Summer Time", "KALST"}}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java +@@ -159,8 +159,6 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST", + "\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"}; +- String RST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST", +- "\u4e2d\u592e\u590f\u4ee4\u65f6", "CDT"}; + String SAST[] = new String[] {"\u5357\u975e\u6807\u51c6\u65f6\u95f4", "SAST", + "\u5357\u975e\u590f\u4ee4\u65f6", "SAST"}; + String SBT[] = new String[] {"\u6240\u7f57\u95e8\u7fa4\u5c9b\u65f6\u95f4", "SBT", +@@ -262,6 +260,7 @@ + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, ++ {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, +@@ -378,11 +377,13 @@ + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, ++ {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"\u73bb\u5229\u7ef4\u4e9a\u65f6\u95f4", "BOT", + "\u73bb\u5229\u7ef4\u4e9a\u590f\u4ee4\u65f6", "BOST"}}, + {"America/Lima", new String[] {"\u79d8\u9c81\u65f6\u95f4", "PET", + "\u79d8\u9c81\u590f\u4ee4\u65f6", "PEST"}}, + {"America/Louisville", EST}, ++ {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, +@@ -425,7 +426,7 @@ + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, +- {"America/Resolute", RST}, ++ {"America/Resolute", CST}, + {"America/Rio_Branco", AMT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, +@@ -673,7 +674,8 @@ + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, +- {"Europe/Kaliningrad", EET}, ++ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", ++ "Kaliningrad Summer Time", "KALST"}}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java +@@ -159,8 +159,6 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST", + "\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; +- String RST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST", +- "\u4e2d\u592e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; + String SAST[] = new String[] {"\u5357\u975e\u6a19\u6e96\u6642\u9593", "SAST", + "\u5357\u975e\u590f\u4ee4\u6642\u9593", "SAST"}; + String SBT[] = new String[] {"\u6240\u7f85\u9580\u7fa4\u5cf6\u6642\u9593", "SBT", +@@ -262,6 +260,7 @@ + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, ++ {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, +@@ -378,11 +377,13 @@ + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, ++ {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"\u73bb\u5229\u7dad\u4e9e\u6642\u9593", "BOT", + "\u73bb\u5229\u7dad\u4e9e\u590f\u4ee4\u6642\u9593", "BOST"}}, + {"America/Lima", new String[] {"\u7955\u9b6f\u6642\u9593", "PET", + "\u7955\u9b6f\u590f\u4ee4\u6642\u9593", "PEST"}}, + {"America/Louisville", EST}, ++ {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, +@@ -425,7 +426,7 @@ + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, +- {"America/Resolute", RST}, ++ {"America/Resolute", CST}, + {"America/Rio_Branco", AMT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, +@@ -674,7 +675,8 @@ + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, +- {"Europe/Kaliningrad", EET}, ++ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", ++ "Kaliningrad Summer Time", "KALST"}}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/7103108-tzdata2011l.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/7103108-tzdata2011l.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,1593 @@ +# HG changeset patch +# User asaha +# Date 1319235923 25200 +# Node ID dd8350c61d3669eed93507e46e877affe18c2d41 +# Parent 426499ae8e0465161186dfee107ca30f6f6d833c +7103108: (tz) Support tzdata2011l +Reviewed-by: coffeys, peytoia + +--- openjdk/jdk/make/sun/javazic/tzdata/VERSION ++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2011j ++tzdata2011l +--- openjdk/jdk/make/sun/javazic/tzdata/africa ++++ openjdk/jdk/make/sun/javazic/tzdata/africa +@@ -1,27 +1,5 @@ +-# +-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +-# +-# This code is free software; you can redistribute it and/or modify it +-# under the terms of the GNU General Public License version 2 only, as +-# published by the Free Software Foundation. Oracle designates this +-# particular file as subject to the "Classpath" exception as provided +-# by Oracle in the LICENSE file that accompanied this code. +-# +-# This code is distributed in the hope that it will be useful, but WITHOUT +-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +-# version 2 for more details (a copy is included in the LICENSE file that +-# accompanied this code). +-# +-# You should have received a copy of the GNU General Public License version +-# 2 along with this work; if not, write to the Free Software Foundation, +-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +-# +-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +-# or visit www.oracle.com if you need additional information or have any +-# questions. +-# + #
++# @(#)africa	8.33
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/antarctica
++++ openjdk/jdk/make/sun/javazic/tzdata/antarctica
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)antarctica	8.9
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/asia
++++ openjdk/jdk/make/sun/javazic/tzdata/asia
+@@ -1,26 +1,4 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
++# @(#)asia	8.68
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -2216,7 +2194,47 @@
+ # http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html
+ # 
+ 
++# From Steffen Thorsen (2011-08-26):
++# Gaza and the West Bank did go back to standard time in the beginning of
++# August, and will now enter daylight saving time again on 2011-08-30
++# 00:00 (so two periods of DST in 2011). The pause was because of
++# Ramadan.
++#
++# 
++# http://www.maannews.net/eng/ViewDetails.aspx?ID=416217
++# 
++# Additional info:
++# 
++# http://www.timeanddate.com/news/time/palestine-dst-2011.html
++# 
++
++# From Alexander Krivenyshev (2011-08-27):
++# According to the article in The Jerusalem Post:
++# "...Earlier this month, the Palestinian government in the West Bank decided to
++# move to standard time for 30 days, during Ramadan. The Palestinians in the
++# Gaza Strip accepted the change and also moved their clocks one hour back.
++# The Hamas government said on Saturday that it won't observe summertime after
++# the Muslim feast of Id al-Fitr, which begins on Tuesday..."
++# ...
++# 
++# http://www.jpost.com/MiddleEast/Article.aspx?id=235650
++# 
++# or
++# 
++# http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html
++# 
+ # The rules for Egypt are stolen from the `africa' file.
++
++# From Steffen Thorsen (2011-09-30):
++# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30 
++# 00:00).
++# So West Bank and Gaza now have the same time again.
++#
++# Many sources, including:
++# 
++# http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
++# 
++
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
+ Rule EgyptAsia	1957	1958	-	Oct	 1	0:00	0	-
+@@ -2232,19 +2250,37 @@
+ Rule Palestine	2006	2008	-	Apr	 1	0:00	1:00	S
+ Rule Palestine	2006	only	-	Sep	22	0:00	0	-
+ Rule Palestine	2007	only	-	Sep	Thu>=8	2:00	0	-
+-Rule Palestine	2008	only	-	Aug	lastFri	2:00	0	-
++Rule Palestine	2008	only	-	Aug	lastFri	0:00	0	-
+ Rule Palestine	2009	only	-	Mar	lastFri	0:00	1:00	S
+-Rule Palestine	2010	max	-	Mar	lastSat	0:01	1:00	S
+-Rule Palestine	2009	max	-	Sep	Fri>=1	2:00	0	-
++Rule Palestine	2009	only	-	Sep	Fri>=1	2:00	0	-
++Rule Palestine	2010	only	-	Mar	lastSat	0:01	1:00	S
+ Rule Palestine	2010	only	-	Aug	11	0:00	0	-
+ 
++# From Arthur David Olson (2011-09-20):
++# 2011 transitions per http://www.timeanddate.com as of 2011-09-20.
++
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
+ 			2:00	Zion	EET	1948 May 15
+ 			2:00 EgyptAsia	EE%sT	1967 Jun  5
+ 			2:00	Zion	I%sT	1996
+ 			2:00	Jordan	EE%sT	1999
+-			2:00 Palestine	EE%sT
++			2:00 Palestine	EE%sT	2011 Apr  2 12:01
++			2:00	1:00	EEST	2011 Aug  1
++			2:00	-	EET
++
++Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
++			2:00	Zion	EET	1948 May 15
++			2:00 EgyptAsia	EE%sT	1967 Jun  5
++			2:00	Zion	I%sT	1996
++			2:00	Jordan	EE%sT	1999
++			2:00 Palestine	EE%sT	2008 Aug
++			2:00 	1:00	EEST	2008 Sep
++			2:00 Palestine	EE%sT	2011 Apr  1 12:01
++			2:00	1:00	EEST	2011 Aug  1
++			2:00	-	EET	2011 Aug 30
++			2:00	1:00	EEST	2011 Sep 30 3:00
++			2:00	-	EET
+ 
+ # Paracel Is
+ # no information
+--- openjdk/jdk/make/sun/javazic/tzdata/australasia
++++ openjdk/jdk/make/sun/javazic/tzdata/australasia
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)australasia	8.27
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -318,6 +296,18 @@
+ # http://www.worldtimezone.com/dst_news/dst_news_fiji04.html
+ # 
+ 
++# From Steffen Thorsen (2011-10-03):
++# Now the dates have been confirmed, and at least our start date 
++# assumption was correct (end date was one week wrong).
++#
++# 
++# www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
++# 
++# which says
++# Members of the public are reminded to change their time to one hour in 
++# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to 
++# 2am on February 26 next year.
++
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
+ Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
+@@ -325,6 +315,8 @@
+ Rule	Fiji	2010	only	-	Mar	lastSun	3:00	0	-
+ Rule	Fiji	2010	only	-	Oct	24	2:00	1:00	S
+ Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
++Rule	Fiji	2011	only	-	Oct	23	2:00	1:00	S
++Rule	Fiji	2012	only	-	Feb	26	3:00	0	-
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
+ 			12:00	Fiji	FJ%sT	# Fiji Time
+--- openjdk/jdk/make/sun/javazic/tzdata/backward
++++ openjdk/jdk/make/sun/javazic/tzdata/backward
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)backward	8.9
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/etcetera
++++ openjdk/jdk/make/sun/javazic/tzdata/etcetera
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)etcetera	8.3
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/europe
++++ openjdk/jdk/make/sun/javazic/tzdata/europe
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)europe	8.38
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -583,9 +561,9 @@
+ #
+ Rule	Russia	1992	only	-	Mar	lastSat	 23:00	1:00	S
+ Rule	Russia	1992	only	-	Sep	lastSat	 23:00	0	-
+-Rule	Russia	1993	max	-	Mar	lastSun	 2:00s	1:00	S
++Rule	Russia	1993	2010	-	Mar	lastSun	 2:00s	1:00	S
+ Rule	Russia	1993	1995	-	Sep	lastSun	 2:00s	0	-
+-Rule	Russia	1996	max	-	Oct	lastSun	 2:00s	0	-
++Rule	Russia	1996	2010	-	Oct	lastSun	 2:00s	0	-
+ 
+ # From Alexander Krivenyshev (2011-06-14):
+ # According to Kremlin press service, Russian President Dmitry Medvedev
+@@ -605,7 +583,6 @@
+ # From Arthur David Olson (2011-06-15):
+ # Take "abolishing daylight saving time" to mean that time is now considered
+ # to be standard.
+-# At least for now, keep the "old" Russia rules for the benefit of Belarus.
+ 
+ # These are for backward compatibility with older versions.
+ 
+@@ -711,6 +688,23 @@
+ 			1:00	EU	CE%sT
+ 
+ # Belarus
++# From Yauhen Kharuzhy (2011-09-16):
++# By latest Belarus government act Europe/Minsk timezone was changed to
++# GMT+3 without DST (was GMT+2 with DST).
++#
++# Sources (Russian language):
++# 1.
++# 
++# http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html
++# 
++# 2.
++# 
++# http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/
++# 
++# 3.
++# 
++# http://news.tut.by/society/250578.html
++# 
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	Europe/Minsk	1:50:16 -	LMT	1880
+ 			1:50	-	MMT	1924 May 2 # Minsk Mean Time
+@@ -722,7 +716,8 @@
+ 			2:00	1:00	EEST	1991 Sep 29 2:00s
+ 			2:00	-	EET	1992 Mar 29 0:00s
+ 			2:00	1:00	EEST	1992 Sep 27 0:00s
+-			2:00	Russia	EE%sT
++			2:00	Russia	EE%sT	2011 Mar 27 2:00s
++			3:00	-	FET # Further-eastern European Time
+ 
+ # Belgium
+ #
+@@ -2056,7 +2051,7 @@
+ 			 2:00	Poland	CE%sT	1946
+ 			 3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
+ 			 2:00	Russia	EE%sT	2011 Mar 27 2:00s
+-			 3:00	-	KALT
++			 3:00	-	FET # Further-eastern European Time
+ #
+ # From Oscar van Vlijmen (2001-08-25): [This region consists of]
+ # Respublika Adygeya, Arkhangel'skaya oblast',
+@@ -2211,7 +2206,7 @@
+ # [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'.
+ 
+ # From Oscar van Vlijmen (2009-11-29):
+-# ...some regions of RUssia were merged with others since 2005...
++# ...some regions of [Russia] were merged with others since 2005...
+ # Some names were changed, no big deal, except for one instance: a new name.
+ # YAK/YAKST: UTC+9 Zabajkal'skij kraj.
+ 
+@@ -2635,6 +2630,28 @@
+ # of March at 3am the time is changing to 4am and each last Sunday of
+ # October the time at 4am is changing to 3am"
+ 
++# From Alexander Krivenyshev (2011-09-20):
++# On September 20, 2011 the deputies of the Verkhovna Rada agreed to
++# abolish the transfer clock to winter time.
++#
++# Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got
++# approval from 266 deputies.
++#
++# Ukraine abolishes transter back to the winter time (in Russian)
++# 
++# http://news.mail.ru/politics/6861560/
++# 
++#
++# The Ukrainians will no longer change the clock (in Russian)
++# 
++# http://www.segodnya.ua/news/14290482.html
++# 
++#
++# Deputies cancelled the winter time (in Russian)
++# 
++# http://www.pravda.com.ua/rus/news/2011/09/20/6600616/
++# 
++
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ # Most of Ukraine since 1970 has been like Kiev.
+ # "Kyiv" is the transliteration of the Ukrainian name, but
+@@ -2648,7 +2665,8 @@
+ 			3:00	-	MSK	1990 Jul  1 2:00
+ 			2:00	-	EET	1992
+ 			2:00	E-Eur	EE%sT	1995
+-			2:00	EU	EE%sT
++			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
++			3:00	-	FET # Further-eastern European Time
+ # Ruthenia used CET 1990/1991.
+ # "Uzhhorod" is the transliteration of the Ukrainian name, but
+ # "Uzhgorod" is more common in English.
+@@ -2662,7 +2680,8 @@
+ 			1:00	-	CET	1991 Mar 31 3:00
+ 			2:00	-	EET	1992
+ 			2:00	E-Eur	EE%sT	1995
+-			2:00	EU	EE%sT
++			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
++			3:00	-	FET # Further-eastern European Time
+ # Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.
+ # "Zaporizhia" is the transliteration of the Ukrainian name, but
+ # "Zaporozh'ye" is more common in English.  Use the common English
+@@ -2675,7 +2694,8 @@
+ 			1:00	C-Eur	CE%sT	1943 Oct 25
+ 			3:00	Russia	MSK/MSD	1991 Mar 31 2:00
+ 			2:00	E-Eur	EE%sT	1995
+-			2:00	EU	EE%sT
++			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
++			3:00	-	FET # Further-eastern European Time
+ # Central Crimea used Moscow time 1994/1997.
+ Zone Europe/Simferopol	2:16:24 -	LMT	1880
+ 			2:16	-	SMT	1924 May  2 # Simferopol Mean T
+@@ -2700,7 +2720,8 @@
+ # Assume it happened in March by not changing the clocks.
+ 			3:00	Russia	MSK/MSD	1997
+ 			3:00	-	MSK	1997 Mar lastSun 1:00u
+-			2:00	EU	EE%sT
++			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
++			3:00	-	FET # Further-eastern European Time
+ 
+ ###############################################################################
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/factory
++++ openjdk/jdk/make/sun/javazic/tzdata/factory
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)factory	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
++++ openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)iso3166.tab	8.11
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ # ISO 3166 alpha-2 country codes
+--- openjdk/jdk/make/sun/javazic/tzdata/leapseconds
++++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)leapseconds	8.11
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/northamerica
++++ openjdk/jdk/make/sun/javazic/tzdata/northamerica
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)northamerica	8.49
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -505,7 +483,7 @@
+ 			 -8:00	US	P%sT	1983 Oct 30 2:00
+ 			 -9:00	US	Y%sT	1983 Nov 30
+ 			 -9:00	US	AK%sT
+-Zone America/Sitka	 -14:58:47 -	LMT	1867 Oct 18
++Zone America/Sitka	 14:58:47 -	LMT	1867 Oct 18
+ 			 -9:01:13 -	LMT	1900 Aug 20 12:00
+ 			 -8:00	-	PST	1942
+ 			 -8:00	US	P%sT	1946
+@@ -1190,31 +1168,21 @@
+ # INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches
+ # at 00:01 local time.  For now, assume it started in 1987.
+ 
+-# From Michael Pelley (2011-08-05):
+-# The Government of Newfoundland and Labrador has pending changes to
+-# modify the hour for daylight savings time to come into effect in
+-# November 2011. This modification would change the time from 12:01AM to
+-# 2:00AM on the dates of the switches of Daylight Savings Time to/from
+-# Standard Time.
+-#
+-# As a matter of reference, in Canada provinces have the authority of
+-# setting time zone information. The legislation has passed our
+-# legislative body (The House of Assembly) and is awaiting the
+-# proclamation to come into effect. You may find this information at:
+-# 
+-# http://www.assembly.nl.ca/legislation/sr/lists/Proclamation.htm
+-# 
+-# and
+-# search within that web page for Standard Time (Amendment) Act. The Act
+-# may be found at:
+-# 
+-# http://www.assembly.nl.ca/business/bills/Bill1106.htm
++# From Michael Pelley (2011-09-12):
++# We received today, Monday, September 12, 2011, notification that the
++# changes to the Newfoundland Standard Time Act have been proclaimed.
++# The change in the Act stipulates that the change from Daylight Savings
++# Time to Standard Time and from Standard Time to Daylight Savings Time
++# now occurs at 2:00AM.
++# ...
++# 
++# http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm
+ # 
+ # ...
+-# MICHAEL PELLEY | Manager of Enterprise Architecture - Solution Delivery
+-# Office of the Chief Information Officer Executive Council Government of
+-# Newfoundland & Labrador P.O. Box 8700, 40 Higgins Line, St. John's NL
+-# A1B 4J6
++# MICHAEL PELLEY  |  Manager of Enterprise Architecture - Solution Delivery
++# Office of the Chief Information Officer
++# Executive Council
++# Government of Newfoundland & Labrador
+ 
+ Rule	StJohns	1987	only	-	Apr	Sun>=1	0:01	1:00	D
+ Rule	StJohns	1987	2006	-	Oct	lastSun	0:01	0	S
+--- openjdk/jdk/make/sun/javazic/tzdata/pacificnew
++++ openjdk/jdk/make/sun/javazic/tzdata/pacificnew
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)pacificnew	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/solar87
++++ openjdk/jdk/make/sun/javazic/tzdata/solar87
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)solar87	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/solar88
++++ openjdk/jdk/make/sun/javazic/tzdata/solar88
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)solar88	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/solar89
++++ openjdk/jdk/make/sun/javazic/tzdata/solar89
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)solar89	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/southamerica
++++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)southamerica	8.50
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -819,6 +797,26 @@
+ # 
+ # http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html
+ # 
++#
++# From Alexander Krivenyshev (2011-10-04):
++# State Bahia will return to Daylight savings time this year after 8 years off.
++# The announcement was made by Governor Jaques Wagner in an interview to a 
++# television station in Salvador. 
++
++# In Portuguese:
++# 
++# http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html
++#  and
++# 
++# http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html
++# 
++
++# From Guilherme Bernardes Rodrigues (2011-10-07):
++# There is news in the media, however there is still no decree about it.
++# I just send a e-mail to Zulmira Brandão at
++# http://pcdsh01.on.br/ the
++# oficial agency about time in Brazil, and she confirmed that the old rule is
++# still in force.
+ 
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ # Decree 20,466 (1931-10-01)
+@@ -1057,6 +1055,9 @@
+ Zone America/Bahia	-2:34:04 -	LMT	1914
+ 			-3:00	Brazil	BR%sT	2003 Sep 24
+ 			-3:00	-	BRT
++# as noted above, not yet in operation.
++#			-3:00	-	BRT	2011 Oct 16
++#			-3:00	Brazil	BR%sT
+ #
+ # Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
+ # Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
+--- openjdk/jdk/make/sun/javazic/tzdata/systemv
++++ openjdk/jdk/make/sun/javazic/tzdata/systemv
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)systemv	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
++++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
+@@ -1,27 +1,5 @@
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#  
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.  Oracle designates this
+-# particular file as subject to the "Classpath" exception as provided
+-# by Oracle in the LICENSE file that accompanied this code.
+-#  
+-# This code is distributed in the hope that it will be useful, but WITHOUT
+-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#  
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#  
+-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+-# or visit www.oracle.com if you need additional information or have any
+-# questions.
+-#
+ # 
++# @(#)zone.tab	8.49
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ #
+@@ -341,7 +319,8 @@
+ PM	+4703-05620	America/Miquelon
+ PN	-2504-13005	Pacific/Pitcairn
+ PR	+182806-0660622	America/Puerto_Rico
+-PS	+3130+03428	Asia/Gaza
++PS	+3130+03428	Asia/Gaza	Gaza Strip
++PS	+313200+0350542	Asia/Hebron	West Bank
+ PT	+3843-00908	Europe/Lisbon	mainland
+ PT	+3238-01654	Atlantic/Madeira	Madeira Islands
+ PT	+3744-02540	Atlantic/Azores	Azores
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
+@@ -103,6 +103,8 @@
+                                      "Eastern Daylight Time", "EDT"};
+         String EST_NSW[] = new String[] {"Eastern Standard Time (New South Wales)", "EST",
+                                          "Eastern Summer Time (New South Wales)", "EST"};
++        String FET[] = new String[] {"Further-eastern European Time", "FET",
++                                     "Further-eastern European Summer Time", "FEST"};
+         String GHMT[] = new String[] {"Ghana Mean Time", "GMT",
+                                      "Ghana Summer Time", "GHST"};
+         String GAMBIER[] =  new String[] {"Gambier Time", "GAMT",
+@@ -511,6 +513,7 @@
+                                             "Tajikistan Summer Time", "TJST"}},
+             {"Asia/Gaza", EET},
+             {"Asia/Harbin", CTT},
++            {"Asia/Hebron", EET},
+             {"Asia/Ho_Chi_Minh", ICT},
+             {"Asia/Hong_Kong", HKT},
+             {"Asia/Hovd", new String[] {"Hovd Time", "HOVT",
+@@ -674,9 +677,8 @@
+             {"Europe/Isle_of_Man", GMTBST},
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+-            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
+-                                                 "Kaliningrad Summer Time", "KALST"}},
+-            {"Europe/Kiev", EET},
++            {"Europe/Kaliningrad", FET},
++            {"Europe/Kiev", FET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -684,7 +686,7 @@
+             {"Europe/Madrid", CET},
+             {"Europe/Malta", CET},
+             {"Europe/Mariehamn", EET},
+-            {"Europe/Minsk", EET},
++            {"Europe/Minsk", FET},
+             {"Europe/Monaco", CET},
+             {"Europe/Moscow", MSK},
+             {"Europe/Nicosia", EET},
+@@ -697,14 +699,14 @@
+                                             "Samara Summer Time", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", EET},
++            {"Europe/Simferopol", FET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", EET},
++            {"Europe/Uzhgorod", FET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -713,7 +715,7 @@
+                                                "Volgograd Summer Time", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", EET},
++            {"Europe/Zaporozhye", FET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
+@@ -103,6 +103,8 @@
+                                      "\u00d6stliche Sommerzeit", "EDT"};
+         String EST_NSW[] = new String[] {"\u00d6stliche Normalzeit (New South Wales)", "EST",
+                                          "\u00d6stliche Sommerzeit (New South Wales)", "EST"};
++        String FET[] = new String[] {"Further-eastern European Time", "FET",
++                                     "Further-eastern European Summer Time", "FEST"};
+         String GHMT[] = new String[] {"Ghanaische Normalzeit", "GMT",
+                                       "Ghanaische Sommerzeit", "GHST"};
+         String GAMBIER[] =  new String[] {"Gambier Zeit", "GAMT",
+@@ -511,6 +513,7 @@
+                                             "Tadschikische Sommerzeit", "TJST"}},
+             {"Asia/Gaza", EET},
+             {"Asia/Harbin", CTT},
++            {"Asia/Hebron", EET},
+             {"Asia/Ho_Chi_Minh", ICT},
+             {"Asia/Hong_Kong", HKT},
+             {"Asia/Hovd", new String[] {"Hovd Zeit", "HOVT",
+@@ -674,9 +677,8 @@
+             {"Europe/Isle_of_Man", GMTBST},
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+-            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
+-                                                 "Kaliningrad Summer Time", "KALST"}},
+-            {"Europe/Kiev", EET},
++            {"Europe/Kaliningrad", FET},
++            {"Europe/Kiev", FET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -684,7 +686,7 @@
+             {"Europe/Madrid", CET},
+             {"Europe/Malta", CET},
+             {"Europe/Mariehamn", EET},
+-            {"Europe/Minsk", EET},
++            {"Europe/Minsk", FET},
+             {"Europe/Monaco", CET},
+             {"Europe/Moscow", MSK},
+             {"Europe/Nicosia", EET},
+@@ -697,14 +699,14 @@
+                                             "Samarische Sommerzeit", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", EET},
++            {"Europe/Simferopol", FET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", EET},
++            {"Europe/Uzhgorod", FET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -713,7 +715,7 @@
+                                                "Wolgograder Sommerzeit", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", EET},
++            {"Europe/Zaporozhye", FET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
+@@ -103,6 +103,8 @@
+                                      "Hora de verano Oriental", "EDT"};
+         String EST_NSW[] = new String[] {"Hora est\u00e1ndar Oriental (Nueva Gales del Sur)", "EST",
+                                          "Hora de verano Oriental (Nueva Gales del Sur)", "EST"};
++        String FET[] = new String[] {"Further-eastern European Time", "FET",
++                                     "Further-eastern European Summer Time", "FEST"};
+         String GHMT[] = new String[] {"Hora central de Ghana", "GMT",
+                                       "Hora de verano de Ghana", "GHST"};
+         String GAMBIER[] =  new String[] {"Hora de Gambier", "GAMT",
+@@ -511,6 +513,7 @@
+                                             "Hora de verano de Tajikist\u00e1n", "TJST"}},
+             {"Asia/Gaza", EET},
+             {"Asia/Harbin", CTT},
++            {"Asia/Hebron", EET},
+             {"Asia/Ho_Chi_Minh", ICT},
+             {"Asia/Hong_Kong", HKT},
+             {"Asia/Hovd", new String[] {"Hora de Hovd", "HOVT",
+@@ -674,9 +677,8 @@
+             {"Europe/Isle_of_Man", GMTBST},
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+-            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
+-                                                 "Kaliningrad Summer Time", "KALST"}},
+-            {"Europe/Kiev", EET},
++            {"Europe/Kaliningrad", FET},
++            {"Europe/Kiev", FET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -684,7 +686,7 @@
+             {"Europe/Madrid", CET},
+             {"Europe/Malta", CET},
+             {"Europe/Mariehamn", EET},
+-            {"Europe/Minsk", EET},
++            {"Europe/Minsk", FET},
+             {"Europe/Monaco", CET},
+             {"Europe/Moscow", MSK},
+             {"Europe/Nicosia", EET},
+@@ -697,14 +699,14 @@
+                                             "Hora de verano de Samara", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", EET},
++            {"Europe/Simferopol", FET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", EET},
++            {"Europe/Uzhgorod", FET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -713,7 +715,7 @@
+                                                "Hora de verano de Volgogrado", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", EET},
++            {"Europe/Zaporozhye", FET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
+@@ -103,6 +103,8 @@
+                                      "Heure avanc\u00e9e de l'Est", "EDT"} ;
+         String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST",
+                                          "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"} ;
++        String FET[] = new String[] {"Further-eastern European Time", "FET",
++                                     "Further-eastern European Summer Time", "FEST"};
+         String GHMT[] = new String[] {"Heure du Ghana", "GMT",
+                                       "Heure d'\u00e9t\u00e9 du Ghana", "GHST"};
+         String GAMBIER[] =  new String[] {"Heure de Gambi", "GAMT",
+@@ -511,6 +513,7 @@
+                                             "Heure d'\u00e9t\u00e9 du Tadjikistan", "TJST"}},
+             {"Asia/Gaza", EET},
+             {"Asia/Harbin", CTT},
++            {"Asia/Hebron", EET},
+             {"Asia/Ho_Chi_Minh", ICT},
+             {"Asia/Hong_Kong", HKT},
+             {"Asia/Hovd", new String[] {"Heure de Hovd", "HOVT",
+@@ -674,9 +677,8 @@
+             {"Europe/Isle_of_Man", GMTBST},
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+-            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
+-                                                 "Kaliningrad Summer Time", "KALST"}},
+-            {"Europe/Kiev", EET},
++            {"Europe/Kaliningrad", FET},
++            {"Europe/Kiev", FET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -684,7 +686,7 @@
+             {"Europe/Madrid", CET},
+             {"Europe/Malta", CET},
+             {"Europe/Mariehamn", EET},
+-            {"Europe/Minsk", EET},
++            {"Europe/Minsk", FET},
+             {"Europe/Monaco", CET},
+             {"Europe/Moscow", MSK},
+             {"Europe/Nicosia", EET},
+@@ -697,14 +699,14 @@
+                                             "Heure d'\u00e9t\u00e9 de Samara", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", EET},
++            {"Europe/Simferopol", FET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", EET},
++            {"Europe/Uzhgorod", FET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -713,7 +715,7 @@
+                                                "Heure d'\u00e9t\u00e9 de Volgograd", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", EET},
++            {"Europe/Zaporozhye", FET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
+@@ -103,6 +103,8 @@
+                                      "Ora legale USA orientale", "EDT"};
+         String EST_NSW[] = new String[] {"Ora solare dell'Australia orientale (Nuovo Galles del Sud)", "EST",
+                                          "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "EST"};
++        String FET[] = new String[] {"Further-eastern European Time", "FET",
++                                     "Further-eastern European Summer Time", "FEST"};
+         String GHMT[] = new String[] {"Ora media del Ghana", "GMT",
+                                       "Ora legale del Ghana", "GHST"};
+         String GAMBIER[] =  new String[] {"Ora di Gambier", "GAMT",
+@@ -511,6 +513,7 @@
+                                             "Ora estiva del Tagikistan", "TJST"}},
+             {"Asia/Gaza", EET},
+             {"Asia/Harbin", CTT},
++            {"Asia/Hebron", EET},
+             {"Asia/Ho_Chi_Minh", ICT},
+             {"Asia/Hong_Kong", HKT},
+             {"Asia/Hovd", new String[] {"Ora di Hovd", "HOVT",
+@@ -674,9 +677,8 @@
+             {"Europe/Isle_of_Man", GMTBST},
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+-            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
+-                                                 "Kaliningrad Summer Time", "KALST"}},
+-            {"Europe/Kiev", EET},
++            {"Europe/Kaliningrad", FET},
++            {"Europe/Kiev", FET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -684,7 +686,7 @@
+             {"Europe/Madrid", CET},
+             {"Europe/Malta", CET},
+             {"Europe/Mariehamn", EET},
+-            {"Europe/Minsk", EET},
++            {"Europe/Minsk", FET},
+             {"Europe/Monaco", CET},
+             {"Europe/Moscow", MSK},
+             {"Europe/Nicosia", EET},
+@@ -697,14 +699,14 @@
+                                             "Ora estiva di Samara", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", EET},
++            {"Europe/Simferopol", FET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", EET},
++            {"Europe/Uzhgorod", FET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -713,7 +715,7 @@
+                                                "Ora estiva di Volgograd", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", EET},
++            {"Europe/Zaporozhye", FET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
+@@ -103,6 +103,8 @@
+                                      "\u6771\u90e8\u590f\u6642\u9593", "EDT"};
+         String EST_NSW[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "EST",
+                                          "\u6771\u90e8\u590f\u6642\u9593 (\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "EST"};
++        String FET[] = new String[] {"Further-eastern European Time", "FET",
++                                     "Further-eastern European Summer Time", "FEST"};
+         String GHMT[] = new String[] {"\u30ac\u30fc\u30ca\u6a19\u6e96\u6642", "GMT",
+                                      "\u30ac\u30fc\u30ca\u590f\u6642\u9593", "GHST"};
+         String GAMBIER[] =  new String[] {"\u30ac\u30f3\u30d3\u30a2\u6642\u9593", "GAMT",
+@@ -511,6 +513,7 @@
+                                             "\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TJST"}},
+             {"Asia/Gaza", EET},
+             {"Asia/Harbin", CTT},
++            {"Asia/Hebron", EET},
+             {"Asia/Ho_Chi_Minh", ICT},
+             {"Asia/Hong_Kong", HKT},
+             {"Asia/Hovd", new String[] {"\u30db\u30d6\u30c9\u6642\u9593", "HOVT",
+@@ -674,9 +677,8 @@
+             {"Europe/Isle_of_Man", GMTBST},
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+-            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
+-                                                 "Kaliningrad Summer Time", "KALST"}},
+-            {"Europe/Kiev", EET},
++            {"Europe/Kaliningrad", FET},
++            {"Europe/Kiev", FET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -684,7 +686,7 @@
+             {"Europe/Madrid", CET},
+             {"Europe/Malta", CET},
+             {"Europe/Mariehamn", EET},
+-            {"Europe/Minsk", EET},
++            {"Europe/Minsk", FET},
+             {"Europe/Monaco", CET},
+             {"Europe/Moscow", MSK},
+             {"Europe/Nicosia", EET},
+@@ -697,14 +699,14 @@
+                                             "\u30b5\u30de\u30e9\u590f\u6642\u9593", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", EET},
++            {"Europe/Simferopol", FET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", EET},
++            {"Europe/Uzhgorod", FET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -713,7 +715,7 @@
+                                                "\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u590f\u6642\u9593", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", EET},
++            {"Europe/Zaporozhye", FET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
+@@ -103,6 +103,8 @@
+                                      "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EDT"};
+         String EST_NSW[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "EST",
+                                          "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "EST"};
++        String FET[] = new String[] {"Further-eastern European Time", "FET",
++                                     "Further-eastern European Summer Time", "FEST"};
+         String GHMT[] = new String[] {"\uac00\ub098 \ud45c\uc900\uc2dc", "GMT",
+                                      "\uac00\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GHST"};
+         String GAMBIER[] =  new String[] {"\uac10\ube44\uc544 \uc2dc\uac04", "GAMT",
+@@ -511,6 +513,7 @@
+                                             "\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TJST"}},
+             {"Asia/Gaza", EET},
+             {"Asia/Harbin", CTT},
++            {"Asia/Hebron", EET},
+             {"Asia/Ho_Chi_Minh", ICT},
+             {"Asia/Hong_Kong", HKT},
+             {"Asia/Hovd", new String[] {"Hovd \uc2dc\uac04", "HOVT",
+@@ -674,9 +677,8 @@
+             {"Europe/Isle_of_Man", GMTBST},
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+-            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
+-                                                 "Kaliningrad Summer Time", "KALST"}},
+-            {"Europe/Kiev", EET},
++            {"Europe/Kaliningrad", FET},
++            {"Europe/Kiev", FET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -684,7 +686,7 @@
+             {"Europe/Madrid", CET},
+             {"Europe/Malta", CET},
+             {"Europe/Mariehamn", EET},
+-            {"Europe/Minsk", EET},
++            {"Europe/Minsk", FET},
+             {"Europe/Monaco", CET},
+             {"Europe/Moscow", MSK},
+             {"Europe/Nicosia", EET},
+@@ -697,14 +699,14 @@
+                                             "\uc0ac\ub9c8\ub77c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", EET},
++            {"Europe/Simferopol", FET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", EET},
++            {"Europe/Uzhgorod", FET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -713,7 +715,7 @@
+                                                "\ubcfc\uace0\uadf8\ub77c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", EET},
++            {"Europe/Zaporozhye", FET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
+@@ -103,6 +103,8 @@
+                                      "Eastern, sommartid", "EDT"};
+         String EST_NSW[] = new String[] {"Eastern, normaltid (Nya Sydwales)", "EST",
+                                          "Eastern, sommartid (Nya Sydwales)", "EST"};
++        String FET[] = new String[] {"Further-eastern European Time", "FET",
++                                     "Further-eastern European Summer Time", "FEST"};
+         String GHMT[] = new String[] {"Ghana, normaltid", "GMT",
+                                       "Ghana, sommartid", "GHST"};
+         String GAMBIER[] =  new String[] {"Gambier, normaltid", "GAMT",
+@@ -511,6 +513,7 @@
+                                             "Tadzjikistan, sommartid", "TJST"}},
+             {"Asia/Gaza", EET},
+             {"Asia/Harbin", CTT},
++            {"Asia/Hebron", EET},
+             {"Asia/Ho_Chi_Minh", ICT},
+             {"Asia/Hong_Kong", HKT},
+             {"Asia/Hovd", new String[] {"Hovd, normaltid", "HOVT",
+@@ -674,9 +677,8 @@
+             {"Europe/Isle_of_Man", GMTBST},
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+-            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
+-                                                 "Kaliningrad Summer Time", "KALST"}},
+-            {"Europe/Kiev", EET},
++            {"Europe/Kaliningrad", FET},
++            {"Europe/Kiev", FET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -684,7 +686,7 @@
+             {"Europe/Madrid", CET},
+             {"Europe/Malta", CET},
+             {"Europe/Mariehamn", EET},
+-            {"Europe/Minsk", EET},
++            {"Europe/Minsk", FET},
+             {"Europe/Monaco", CET},
+             {"Europe/Moscow", MSK},
+             {"Europe/Nicosia", EET},
+@@ -697,14 +699,14 @@
+                                             "Samara, sommartid", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", EET},
++            {"Europe/Simferopol", FET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", EET},
++            {"Europe/Uzhgorod", FET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -713,7 +715,7 @@
+                                                "Volgograd, sommartid", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", EET},
++            {"Europe/Zaporozhye", FET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
+@@ -103,6 +103,8 @@
+                                      "\u4e1c\u90e8\u590f\u4ee4\u65f6", "EDT"};
+         String EST_NSW[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u65b0\u5357\u5a01\u5c14\u65af\uff09", "EST",
+                                          "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u65b0\u5357\u5a01\u5c14\u65af\uff09", "EST"};
++        String FET[] = new String[] {"Further-eastern European Time", "FET",
++                                     "Further-eastern European Summer Time", "FEST"};
+         String GHMT[] = new String[] {"\u52a0\u7eb3\u65f6\u95f4", "GMT",
+                                      "\u52a0\u7eb3\u590f\u4ee4\u65f6", "GHST"};
+         String GAMBIER[] =  new String[] {"\u5188\u6bd4\u4e9a\u65f6\u95f4", "GAMT",
+@@ -511,6 +513,7 @@
+                                             "\u5854\u5409\u514b\u65af\u5766\u590f\u4ee4\u65f6", "TJST"}},
+             {"Asia/Gaza", EET},
+             {"Asia/Harbin", CTT},
++            {"Asia/Hebron", EET},
+             {"Asia/Ho_Chi_Minh", ICT},
+             {"Asia/Hong_Kong", HKT},
+             {"Asia/Hovd", new String[] {"\u79d1\u5e03\u591a\u65f6\u95f4", "HOVT",
+@@ -674,9 +677,8 @@
+             {"Europe/Isle_of_Man", GMTBST},
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+-            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
+-                                                 "Kaliningrad Summer Time", "KALST"}},
+-            {"Europe/Kiev", EET},
++            {"Europe/Kaliningrad", FET},
++            {"Europe/Kiev", FET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -684,7 +686,7 @@
+             {"Europe/Madrid", CET},
+             {"Europe/Malta", CET},
+             {"Europe/Mariehamn", EET},
+-            {"Europe/Minsk", EET},
++            {"Europe/Minsk", FET},
+             {"Europe/Monaco", CET},
+             {"Europe/Moscow", MSK},
+             {"Europe/Nicosia", EET},
+@@ -697,14 +699,14 @@
+                                             "\u6c99\u9a6c\u62c9\u590f\u4ee4\u65f6", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", EET},
++            {"Europe/Simferopol", FET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", EET},
++            {"Europe/Uzhgorod", FET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -713,7 +715,7 @@
+                                                "\u4f0f\u5c14\u52a0\u683c\u52d2\u590f\u4ee4\u65f6", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", EET},
++            {"Europe/Zaporozhye", FET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
+@@ -103,6 +103,8 @@
+                                      "\u6771\u65b9\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "EDT"};
+         String EST_NSW[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593 (\u65b0\u5357\u5a01\u723e\u65af)", "EST",
+                                          "\u6771\u65b9\u590f\u4ee4\u6642\u9593 (\u65b0\u5357\u5a01\u723e\u65af)", "EST"};
++        String FET[] = new String[] {"Further-eastern European Time", "FET",
++                                     "Further-eastern European Summer Time", "FEST"};
+         String GHMT[] = new String[] {"\u8fe6\u7d0d\u5e73\u5747\u6642\u9593", "GMT",
+                                       "\u8fe6\u7d0d\u590f\u4ee4\u6642\u9593", "GHST"};
+         String GAMBIER[] =  new String[] {"\u7518\u6bd4\u723e\u6642\u9593", "GAMT",
+@@ -511,6 +513,7 @@
+                                             "\u5854\u5409\u514b\u590f\u4ee4\u6642\u9593", "TJST"}},
+             {"Asia/Gaza", EET},
+             {"Asia/Harbin", CTT},
++            {"Asia/Hebron", EET},
+             {"Asia/Ho_Chi_Minh", ICT},
+             {"Asia/Hong_Kong", HKT},
+             {"Asia/Hovd", new String[] {"\u4faf\u5fb7 (Hovd) \u6642\u9593", "HOVT",
+@@ -675,9 +678,8 @@
+             {"Europe/Isle_of_Man", GMTBST},
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+-            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
+-                                                 "Kaliningrad Summer Time", "KALST"}},
+-            {"Europe/Kiev", EET},
++            {"Europe/Kaliningrad", FET},
++            {"Europe/Kiev", FET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -685,7 +687,7 @@
+             {"Europe/Madrid", CET},
+             {"Europe/Malta", CET},
+             {"Europe/Mariehamn", EET},
+-            {"Europe/Minsk", EET},
++            {"Europe/Minsk", FET},
+             {"Europe/Monaco", CET},
+             {"Europe/Moscow", MSK},
+             {"Europe/Nicosia", EET},
+@@ -698,14 +700,14 @@
+                                             "\u6c99\u99ac\u62c9\u590f\u4ee4\u6642\u9593", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", EET},
++            {"Europe/Simferopol", FET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", EET},
++            {"Europe/Uzhgorod", FET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -714,7 +716,7 @@
+                                                "\u4f0f\u723e\u52a0\u683c\u52d2\u590f\u4ee4\u6642\u9593", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", EET},
++            {"Europe/Zaporozhye", FET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/7103405-correct_display_names.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7103405-correct_display_names.patch	Wed Jul 03 23:28:46 2013 -0400
@@ -0,0 +1,118 @@
+# HG changeset patch
+# User asaha
+# Date 1319245792 25200
+# Node ID 48463dbf345cda1cdb7ff53e2d24f3827ae85d20
+# Parent  ca52af5acd261b790aa40a904af96d4f55d780d9
+7103405: Correct display names for Pacific/Apia timezone
+Reviewed-by: coffeys, peytoia
+
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
+@@ -188,7 +188,7 @@
+         String SAMOA[] = new String[] {"Samoa Standard Time", "SST",
+                                        "Samoa Daylight Time", "SDT"};
+         String WST_SAMOA[] = new String[] {"West Samoa Time", "WST",
+-                                           "West Samoa Summer Time", "WSST"};
++                                           "West Samoa Daylight Time", "WSDT"};
+         String ChST[] = new String[] {"Chamorro Standard Time", "ChST",
+                                       "Chamorro Daylight Time", "ChDT"};
+         String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST",
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
+@@ -188,7 +188,7 @@
+         String SAMOA[] = new String[] {"Samoa Normalzeit", "SST",
+                                        "Samoa Sommerzeit", "SDT"};
+         String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WST",
+-                                           "West Samoa Sommerzeit", "WSST"};
++                                           "West Samoa Sommerzeit", "WSDT"};
+         String ChST[] = new String[] {"Chamorro Normalzeit", "ChST",
+                       "Chamorro Sommerzeit", "ChDT"};
+         String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST",
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
+@@ -188,7 +188,7 @@
+         String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST",
+                                        "Hora de verano de Samoa", "SDT"};
+         String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST",
+-                                           "Hora de verano de Samoa Occidental", "WSST"};
++                                           "Hora de verano de Samoa Occidental", "WSDT"};
+         String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST",
+                                       "Hora de verano de Chamorro", "ChDT"};
+         String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST",
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
+@@ -188,7 +188,7 @@
+         String SAMOA[] = new String[] {"Heure standard de Samoa", "SST",
+                                        "Heure avanc\u00e9e de Samoa", "SDT"};
+         String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST",
+-                                           "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSST"} ;
++                                           "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"} ;
+         String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST",
+                       "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"};
+         String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST",
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
+@@ -188,7 +188,7 @@
+         String SAMOA[] = new String[] {"Ora standard di Samoa", "SST",
+                                        "Ora legale di Samoa", "SDT"};
+         String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST",
+-                                           "Ora estiva di Samoa", "WSST"};
++                                           "Ora estiva di Samoa", "WSDT"};
+         String ChST[] = new String[] {"Ora standard di Chamorro", "ChST",
+                               "Ora legale di Chamorro", "ChDT"};
+         String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST",
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
+@@ -188,7 +188,7 @@
+         String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST",
+                                        "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"};
+         String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST",
+-                                           "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSST"};
++                                           "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT"};
+         String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST",
+                                       "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"};
+         String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST",
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
+@@ -188,7 +188,7 @@
+         String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST",
+                                        "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"};
+         String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST",
+-                                           "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSST"};
++                                           "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT"};
+         String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST",
+                                       "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"};
+         String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST",
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
+@@ -188,7 +188,7 @@
+         String SAMOA[] = new String[] {"Samoa, normaltid", "SST",
+                                        "Samoa, sommartid", "SDT"};
+         String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST",
+-                                           "V\u00e4stsamoansk sommartid", "WSST"};
++                                           "V\u00e4stsamoansk sommartid", "WSDT"};
+         String ChST[] = new String[] {"Chamorro, normaltid", "ChST",
+                                       "Chamorro, sommartid", "ChDT"};
+         String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST",
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
+@@ -188,7 +188,7 @@
+         String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST",
+                                        "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"};
+         String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST",
+-                                           "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSST"};
++                                           "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT"};
+         String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST",
+                                       "Chamorro \u590f\u4ee4\u65f6", "ChDT"};
+         String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST",
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
+@@ -188,7 +188,7 @@
+         String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST",
+                                        "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"};
+         String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST",
+-                                           "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSST"};
++                                           "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT"};
+         String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST",
+                                      "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"};
+         String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST",
diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/7104126-headers_tzdata.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7104126-headers_tzdata.patch	Wed Jul 03 23:28:46 2013 -0400
@@ -0,0 +1,530 @@
+# HG changeset patch
+# User asaha
+# Date 1319476295 25200
+# Node ID b5090771e19b2b20670bef60a84de95797cb01be
+# Parent  48463dbf345cda1cdb7ff53e2d24f3827ae85d20
+7104126: Insert openjdk copyright header back into TZdata files
+Reviewed-by: okutsu
+
+--- openjdk/jdk/make/sun/javazic/tzdata/africa
++++ openjdk/jdk/make/sun/javazic/tzdata/africa
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)africa	8.33
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/antarctica
++++ openjdk/jdk/make/sun/javazic/tzdata/antarctica
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)antarctica	8.9
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/asia
++++ openjdk/jdk/make/sun/javazic/tzdata/asia
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # @(#)asia	8.68
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+--- openjdk/jdk/make/sun/javazic/tzdata/australasia
++++ openjdk/jdk/make/sun/javazic/tzdata/australasia
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)australasia	8.27
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/backward
++++ openjdk/jdk/make/sun/javazic/tzdata/backward
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)backward	8.9
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/etcetera
++++ openjdk/jdk/make/sun/javazic/tzdata/etcetera
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)etcetera	8.3
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/europe
++++ openjdk/jdk/make/sun/javazic/tzdata/europe
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)europe	8.38
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/factory
++++ openjdk/jdk/make/sun/javazic/tzdata/factory
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)factory	8.2
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
++++ openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)iso3166.tab	8.11
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/leapseconds
++++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)leapseconds	8.11
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/northamerica
++++ openjdk/jdk/make/sun/javazic/tzdata/northamerica
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)northamerica	8.49
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/pacificnew
++++ openjdk/jdk/make/sun/javazic/tzdata/pacificnew
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)pacificnew	8.2
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/solar87
++++ openjdk/jdk/make/sun/javazic/tzdata/solar87
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)solar87	8.2
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/solar88
++++ openjdk/jdk/make/sun/javazic/tzdata/solar88
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)solar88	8.2
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/solar89
++++ openjdk/jdk/make/sun/javazic/tzdata/solar89
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)solar89	8.2
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/southamerica
++++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)southamerica	8.50
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/systemv
++++ openjdk/jdk/make/sun/javazic/tzdata/systemv
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)systemv	8.2
+ # This file is in the public domain, so clarified as of
+--- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
++++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
+@@ -1,3 +1,26 @@
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#  
++# This code is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License version 2 only, as
++# published by the Free Software Foundation.  Oracle designates this
++# particular file as subject to the "Classpath" exception as provided
++# by Oracle in the LICENSE file that accompanied this code.
++#  
++# This code is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# version 2 for more details (a copy is included in the LICENSE file that
++# accompanied this code).
++#  
++# You should have received a copy of the GNU General Public License version
++# 2 along with this work; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++#  
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++# or visit www.oracle.com if you need additional information or have any
++# questions.
++#
+ # 
+ # @(#)zone.tab	8.49
+ # This file is in the public domain, so clarified as of
diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/7158483-tzdata2012c.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7158483-tzdata2012c.patch	Wed Jul 03 23:28:46 2013 -0400
@@ -0,0 +1,1436 @@
+# HG changeset patch
+# User peytoia
+# Date 1333444888 -32400
+# Node ID 5683b3f7f8cc58746a2983ee6294b62ccdfa159c
+# Parent  e15562835a5e91f0bca6a088e58970c3c1c3dc3f
+7158483: (tz) Support tzdata2012c
+Reviewed-by: okutsu
+
+--- openjdk/jdk/make/sun/javazic/tzdata/VERSION
++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION
+@@ -21,4 +21,4 @@
+ # or visit www.oracle.com if you need additional information or have any
+ # questions.
+ #
+-tzdata2011l
++tzdata2012c
+--- openjdk/jdk/make/sun/javazic/tzdata/africa
++++ openjdk/jdk/make/sun/javazic/tzdata/africa
+@@ -22,7 +22,7 @@
+ # questions.
+ #
+ # 
+-# @(#)africa	8.33
++# @(#)africa	8.35
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -791,6 +791,37 @@
+ # wall clock time (i.e. 11pm UTC), but that's what I would assume. It has
+ # also been like that in the past.
+ 
++# From Alexander Krivenyshev (2012-03-09):
++# According to Infomédiaire web site from Morocco (infomediaire.ma),
++# on March 9, 2012, (in French) Heure légale:
++# Le Maroc adopte officiellement l'heure d'été
++# 
++# http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9
++# 
++# Governing Council adopted draft decree, that Morocco DST starts on
++# the last Sunday of March (March 25, 2012) and ends on
++# last Sunday of September (September 30, 2012)
++# except the month of Ramadan.
++# or (brief)
++# 
++# http://www.worldtimezone.com/dst_news/dst_news_morocco06.html
++# 
++
++# From Arthur David Olson (2012-03-10):
++# The infomediaire.ma source indicates that the system is to be in
++# effect every year. It gives 03H00 as the "fall back" time of day;
++# it lacks a "spring forward" time of day; assume 2:00 XXX.
++# Wait on specifying the Ramadan exception for details about
++# start date, start time of day, end date, and end time of day XXX.
++
++# From Christophe Tropamer (2012-03-16):
++# Seen Morocco change again:
++# 
++# http://www.le2uminutes.com/actualite.php
++# 
++# "...à partir du dernier dimance d'avril et non fins mars,
++# comme annoncé précédemment."
++
+ # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ 
+ Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	S
+@@ -816,6 +847,9 @@
+ Rule	Morocco	2010	only	-	Aug	 8	 0:00	0	-
+ Rule	Morocco	2011	only	-	Apr	 3	 0:00	1:00	S
+ Rule	Morocco	2011	only	-	Jul	 31	 0	0	-
++Rule	Morocco	2012	max	-	Apr	 lastSun 2:00	1:00	S
++Rule	Morocco	2012	max	-	Sep	 lastSun 3:00	0	-
++
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
+ 			 0:00	Morocco	WE%sT	1984 Mar 16
+--- openjdk/jdk/make/sun/javazic/tzdata/antarctica
++++ openjdk/jdk/make/sun/javazic/tzdata/antarctica
+@@ -22,7 +22,7 @@
+ # questions.
+ #
+ # 
+-# @(#)antarctica	8.9
++# @(#)antarctica	8.10
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -65,8 +65,19 @@
+ Rule	ChileAQ	1998	only	-	Mar	Sun>=9	3:00u	0	-
+ Rule	ChileAQ	1998	only	-	Sep	27	4:00u	1:00	S
+ Rule	ChileAQ	1999	only	-	Apr	 4	3:00u	0	-
+-Rule	ChileAQ	1999	max	-	Oct	Sun>=9	4:00u	1:00	S
+-Rule	ChileAQ	2000	max	-	Mar	Sun>=9	3:00u	0	-
++Rule	ChileAQ	1999	2010	-	Oct	Sun>=9	4:00u	1:00	S
++Rule	ChileAQ	2000	2007	-	Mar	Sun>=9	3:00u	0	-
++# N.B.: the end of March 29 in Chile is March 30 in Universal time,
++# which is used below in specifying the transition.
++Rule	ChileAQ	2008	only	-	Mar	30	3:00u	0	-
++Rule	ChileAQ	2009	only	-	Mar	Sun>=9	3:00u	0	-
++Rule	ChileAQ	2010	only	-	Apr	Sun>=1	3:00u	0	-
++Rule	ChileAQ	2011	only	-	May	Sun>=2	3:00u	0	-
++Rule	ChileAQ	2011	only	-	Aug	Sun>=16	4:00u	1:00	S
++Rule	ChileAQ	2012	only	-	Apr	Sun>=23	3:00u	0	-
++Rule	ChileAQ	2012	only	-	Sep	Sun>=2	4:00u	1:00	S
++Rule	ChileAQ	2013	max	-	Mar	Sun>=9	3:00u	0	-
++Rule	ChileAQ	2013	max	-	Oct	Sun>=9	4:00u	1:00	S
+ 
+ # These rules are stolen from the `australasia' file.
+ Rule	AusAQ	1917	only	-	Jan	 1	0:01	1:00	-
+@@ -165,12 +176,16 @@
+ 						# Western (Aus) Standard Time
+ 			11:00	-	CAST	2010 Mar 5 2:00
+ 						# Casey Time
++			8:00	-	WST	2011 Oct 28 2:00
++			11:00	-	CAST	2012 Feb 21 17:00u
+ 			8:00	-	WST
+ Zone Antarctica/Davis	0	-	zzz	1957 Jan 13
+ 			7:00	-	DAVT	1964 Nov # Davis Time
+ 			0	-	zzz	1969 Feb
+ 			7:00	-	DAVT	2009 Oct 18 2:00
+ 			5:00	-	DAVT	2010 Mar 10 20:00u
++			7:00	-	DAVT	2011 Oct 28 2:00
++			5:00	-	DAVT	2012 Feb 21 20:00u
+ 			7:00	-	DAVT
+ Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
+ 			6:00	-	MAWT	2009 Oct 18 2:00
+--- openjdk/jdk/make/sun/javazic/tzdata/asia
++++ openjdk/jdk/make/sun/javazic/tzdata/asia
+@@ -21,7 +21,8 @@
+ # or visit www.oracle.com if you need additional information or have any
+ # questions.
+ #
+-# @(#)asia	8.68
++# 
++# @(#)asia	8.73
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -100,10 +101,6 @@
+ Rule RussiaAsia	1993	1995	-	Sep	lastSun	 2:00s	0	-
+ Rule RussiaAsia	1996	max	-	Oct	lastSun	 2:00s	0	-
+ 
+-# From Arthur David Olson (2011-06-15):
+-# While Russia abandoned DST in 2011, Armenia may choose to
+-# follow Russia's "old" rules.
+-
+ # Afghanistan
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	Asia/Kabul	4:36:48 -	LMT	1890
+@@ -120,6 +117,21 @@
+ # in 1996, though it did use DST in 1995.  IATA SSIM (1991/1998) reports that
+ # Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
+ # but started switching at 3:00s in 1998.
++
++# From Arthur David Olson (2011-06-15):
++# While Russia abandoned DST in 2011, Armenia may choose to
++# follow Russia's "old" rules.
++
++# From Alexander Krivenyshev (2012-02-10):
++# According to News Armenia, on Feb 9, 2012,
++# http://newsarmenia.ru/society/20120209/42609695.html
++# 
++# The Armenia National Assembly adopted final reading of Amendments to the
++# Law "On procedure of calculation time on the territory of the Republic of
++# Armenia" according to which Armenia [is] abolishing Daylight Saving Time.
++# or
++# (brief)
++# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
+ 			3:00	-	YERT	1957 Mar    # Yerevan Time
+@@ -127,7 +139,8 @@
+ 			3:00	1:00	YERST	1991 Sep 23 # independence
+ 			3:00 RussiaAsia	AM%sT	1995 Sep 24 2:00s
+ 			4:00	-	AMT	1997
+-			4:00 RussiaAsia	AM%sT
++			4:00 RussiaAsia	AM%sT	2012 Mar 25 2:00s
++			4:00	-	AMT
+ 
+ # Azerbaijan
+ # From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23):
+@@ -2258,6 +2271,29 @@
+ # http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
+ # 
+ 
++# From Steffen Thorsen (2012-03-26):
++# Palestinian news sources tell that both Gaza and West Bank will start DST
++# on Friday (Thursday midnight, 2012-03-29 24:00).
++# Some of many sources in Arabic:
++# 
++# http://www.samanews.com/index.php?act=Show&id=122638
++# 
++#
++# 
++# http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html
++# 
++#
++# Our brief summary:
++# 
++# http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
++# 
++
++# From Arthur David Olson (2012-03-27):
++# The timeanddate article for 2012 says that "the end date has not yet been
++# announced" and that "Last year, both...paused daylight saving time during...
++# Ramadan. It is not yet known [for] 2012."
++# For now, assume both switch back on the last Friday in September. XXX
++
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
+ Rule EgyptAsia	1957	1958	-	Oct	 1	0:00	0	-
+@@ -2290,6 +2326,8 @@
+ 			2:00	Jordan	EE%sT	1999
+ 			2:00 Palestine	EE%sT	2011 Apr  2 12:01
+ 			2:00	1:00	EEST	2011 Aug  1
++			2:00	-	EET	2012 Mar 30
++			2:00	1:00	EEST	2012 Sep 28
+ 			2:00	-	EET
+ 
+ Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
+@@ -2303,6 +2341,8 @@
+ 			2:00	1:00	EEST	2011 Aug  1
+ 			2:00	-	EET	2011 Aug 30
+ 			2:00	1:00	EEST	2011 Sep 30 3:00
++			2:00	-	EET	2012 Mar 30
++			2:00	1:00	EEST	2012 Sep 28 3:00
+ 			2:00	-	EET
+ 
+ # Paracel Is
+@@ -2594,10 +2634,28 @@
+ # http://sns.sy/sns/?path=news/read/11421 (Arabic)
+ # 
+ 
++# From Steffen Thorsen (2012-03-26):
++# Today, Syria's government announced that they will start DST early on Friday
++# (00:00). This is a bit earlier than the past two years.
++#
++# From Syrian Arab News Agency, in Arabic:
++# 
++# http://www.sana.sy/ara/2/2012/03/26/408215.htm
++# 
++#
++# Our brief summary:
++# 
++# http://www.timeanddate.com/news/time/syria-dst-2012.html
++# 
++
++# From Arthur David Olson (2012-03-27):
++# Assume last Friday in March going forward XXX.
++
+ Rule	Syria	2008	only	-	Apr	Fri>=1	0:00	1:00	S
+ Rule	Syria	2008	only	-	Nov	1	0:00	0	-
+ Rule	Syria	2009	only	-	Mar	lastFri	0:00	1:00	S
+-Rule	Syria	2010	max	-	Apr	Fri>=1	0:00	1:00	S
++Rule	Syria	2010	2011	-	Apr	Fri>=1	0:00	1:00	S
++Rule	Syria	2012	max	-	Mar	lastFri	0:00	1:00	S
+ Rule	Syria	2009	max	-	Oct	lastFri	0:00	0	-
+ 
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+--- openjdk/jdk/make/sun/javazic/tzdata/australasia
++++ openjdk/jdk/make/sun/javazic/tzdata/australasia
+@@ -22,7 +22,7 @@
+ # questions.
+ #
+ # 
+-# @(#)australasia	8.27
++# @(#)australasia	8.30
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -331,6 +331,20 @@
+ # advance at 2am to 3am on October 23, 2011 and one hour back at 3am to 
+ # 2am on February 26 next year.
+ 
++# From Ken Rylander (2011-10-24)
++# Another change to the Fiji DST end date. In the TZ database the end date for
++# Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.
++#
++# 
++# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155
++# 
++# states:
++#
++# The end of daylight saving scheduled initially for the 26th of February 2012
++# has been brought forward to the 22nd of January 2012.
++# The commencement of daylight saving will remain unchanged and start
++# on the  23rd of October, 2011.
++
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
+ Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
+@@ -339,7 +353,7 @@
+ Rule	Fiji	2010	only	-	Oct	24	2:00	1:00	S
+ Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
+ Rule	Fiji	2011	only	-	Oct	23	2:00	1:00	S
+-Rule	Fiji	2012	only	-	Feb	26	3:00	0	-
++Rule	Fiji	2012	only	-	Jan	22	3:00	0	-
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
+ 			12:00	Fiji	FJ%sT	# Fiji Time
+@@ -625,6 +639,11 @@
+ # Dateline Change skip Friday 30th Dec 2011
+ # Thursday 29th December 2011	23:59:59 Hours
+ # Saturday 31st December 2011	00:00:00 Hours
++#
++# Clarification by Tim Parenti (2012-01-03):
++# Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012
++# seasons, there is not yet any indication that this trend will continue on
++# a regular basis. For now, we have explicitly listed the transitions below.
+ Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
+ 			-11:26:56 -	LMT	1911
+ 			-11:30	-	SAMT	1950		# Samoa Time
+@@ -642,9 +661,28 @@
+ 			11:00	-	SBT	# Solomon Is Time
+ 
+ # Tokelau Is
++#
++# From Gwillim Law (2011-12-29)
++# A correspondent informed me that Tokelau, like Samoa, will be skipping
++# December 31 this year, thereby changing its time zone from UTC-10 to
++# UTC+14. When I tried to verify this statement, I found a confirming
++# article in Time magazine online
++# 
++# (http://www.time.com/time/world/article/0,8599,2103243,00.html).
++# 
++#
++# From Jonathan Leffler (2011-12-29)
++# Information from the BBC to the same effect:
++# 
++# http://www.bbc.co.uk/news/world-asia-16351377
++# 
++#
++# Patch supplied by Tim Parenti (2011-12-29)
++
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
+-			-10:00	-	TKT	# Tokelau Time
++			-10:00	-	TKT 2011 Dec 30	# Tokelau Time
++			14:00	-	TKT
+ 
+ # Tonga
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+--- openjdk/jdk/make/sun/javazic/tzdata/backward
++++ openjdk/jdk/make/sun/javazic/tzdata/backward
+@@ -22,7 +22,7 @@
+ # questions.
+ #
+ # 
+-# @(#)backward	8.9
++# @(#)backward	8.11
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/europe
++++ openjdk/jdk/make/sun/javazic/tzdata/europe
+@@ -22,7 +22,7 @@
+ # questions.
+ #
+ # 
+-# @(#)europe	8.38
++# @(#)europe	8.41
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -234,9 +234,15 @@
+ # the history of summer time legislation in the United Kingdom.
+ # Since 1998 Joseph S. Myers has been updating
+ # and extending this list, which can be found in
+-# 
++# http://student.cusu.cam.ac.uk/~jsm28/british-time/
++# 
+ # History of legal time in Britain
+ # 
++# Rob Crowther (2012-01-04) reports that that URL no longer
++# exists, and the article can now be found at:
++# 
++# http://www.polyomino.org.uk/british-time/
++# 
+ 
+ # From Joseph S. Myers (1998-01-06):
+ #
+@@ -1174,10 +1180,10 @@
+ # write that they were used in Monaco and in many French locations.
+ # Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
+ # Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
+-# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Decartes,
++# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
+ # Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,
+ # Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
+-# Dole, Morez, St-Claude, and Collognes (Haute-Savioe).
++# Dole, Morez, St-Claude, and Collonges (Haute-Savoie).
+ Rule	France	1941	only	-	May	 5	 0:00	2:00	M # Midsummer
+ # Shanks & Pottenger say this transition occurred at Oct 6 1:00,
+ # but go with Denis Excoffier (1997-12-12),
+@@ -1678,6 +1684,41 @@
+ # But [two people] separately reported via
+ # Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
+ # The Tiraspol entry has therefore been removed for now.
++#
++# From Alexander Krivenyshev (2011-10-17):
++# Pridnestrovian Moldavian Republic (PMR, also known as
++# "Pridnestrovie") has abolished seasonal clock change (no transition
++# to the Winter Time).
++#
++# News (in Russian):
++# 
++# http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html
++# 
++#
++# 
++# http://www.allmoldova.com/moldova-news/1249064116.html
++# 
++#
++# The substance of this change (reinstatement of the Tiraspol entry)
++# is from a patch from Petr Machata (2011-10-17)
++#
++# From Tim Parenti (2011-10-19)
++# In addition, being situated at +4651+2938 would give Tiraspol
++# a pre-1880 LMT offset of 1:58:32.
++#
++# (which agrees with the earlier entry that had been removed)
++#
++# From Alexander Krivenyshev (2011-10-26)
++# NO need to divide Moldova into two timezones at this point.
++# As of today, Transnistria (Pridnestrovie)- Tiraspol reversed its own
++# decision to abolish DST this winter. 
++# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
++# Tiraspol will go back to winter time on October 30, 2011.
++# News from Moldova (in russian):
++# 
++# http://ru.publika.md/link_317061.html
++# 
++
+ 
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	Europe/Chisinau	1:55:20 -	LMT	1880
+@@ -2674,6 +2715,28 @@
+ # 
+ # http://www.pravda.com.ua/rus/news/2011/09/20/6600616/
+ # 
++#
++# From Philip Pizzey (2011-10-18):
++# Today my Ukrainian colleagues have informed me that the
++# Ukrainian parliament have decided that they will go to winter
++# time this year after all.
++#
++# From Udo Schwedt (2011-10-18):
++# As far as I understand, the recent change to the Ukranian time zone 
++# (Europe/Kiev) to introduce permanent daylight saving time (similar
++# to Russia) was reverted today:
++#
++# 
++# http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995
++# 
++#
++# Also reported by Alexander Bokovoy (2011-10-18) who also noted:
++# The law documents themselves are at
++#
++# 
++# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
++# 
++
+ 
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ # Most of Ukraine since 1970 has been like Kiev.
+@@ -2688,8 +2751,7 @@
+ 			3:00	-	MSK	1990 Jul  1 2:00
+ 			2:00	-	EET	1992
+ 			2:00	E-Eur	EE%sT	1995
+-			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
+-			3:00	-	FET # Further-eastern European Time
++			2:00	EU	EE%sT
+ # Ruthenia used CET 1990/1991.
+ # "Uzhhorod" is the transliteration of the Ukrainian name, but
+ # "Uzhgorod" is more common in English.
+@@ -2703,8 +2765,7 @@
+ 			1:00	-	CET	1991 Mar 31 3:00
+ 			2:00	-	EET	1992
+ 			2:00	E-Eur	EE%sT	1995
+-			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
+-			3:00	-	FET # Further-eastern European Time
++			2:00	EU	EE%sT
+ # Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.
+ # "Zaporizhia" is the transliteration of the Ukrainian name, but
+ # "Zaporozh'ye" is more common in English.  Use the common English
+@@ -2717,8 +2778,7 @@
+ 			1:00	C-Eur	CE%sT	1943 Oct 25
+ 			3:00	Russia	MSK/MSD	1991 Mar 31 2:00
+ 			2:00	E-Eur	EE%sT	1995
+-			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
+-			3:00	-	FET # Further-eastern European Time
++			2:00	EU	EE%sT
+ # Central Crimea used Moscow time 1994/1997.
+ Zone Europe/Simferopol	2:16:24 -	LMT	1880
+ 			2:16	-	SMT	1924 May  2 # Simferopol Mean T
+@@ -2743,8 +2803,7 @@
+ # Assume it happened in March by not changing the clocks.
+ 			3:00	Russia	MSK/MSD	1997
+ 			3:00	-	MSK	1997 Mar lastSun 1:00u
+-			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
+-			3:00	-	FET # Further-eastern European Time
++			2:00	EU	EE%sT
+ 
+ ###############################################################################
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/leapseconds
++++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds
+@@ -22,7 +22,7 @@
+ # questions.
+ #
+ # 
+-# @(#)leapseconds	8.11
++# @(#)leapseconds	8.13
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -71,40 +71,54 @@
+ Leap	1998	Dec	31	23:59:60	+	S
+ Leap	2005	Dec	31	23:59:60	+	S
+ Leap	2008	Dec	31	23:59:60	+	S
++Leap	2012	Jun	30	23:59:60	+	S
+ 
+ # INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
+ #
+ # SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE
+ #
++#
+ # SERVICE DE LA ROTATION TERRESTRE
+ # OBSERVATOIRE DE PARIS
+ # 61, Av. de l'Observatoire 75014 PARIS (France)
+-# Tel.      : 33 (0) 1 40 51 22 29
++# Tel.      : 33 (0) 1 40 51 22 26
+ # FAX       : 33 (0) 1 40 51 22 91
+-# Internet  : services.iers@obspm.fr
++# e-mail    : (E-Mail Removed)
++# http://hpiers.obspm.fr/eop-pc
+ #
+-# Paris, 2 February 2011
++# Paris, 5 January 2012
+ #
+-# Bulletin C 41
++#
++# Bulletin C 43
+ #
+ # To authorities responsible
+ # for the measurement and
+ # distribution of time
+ #
+-# INFORMATION ON UTC - TAI
+ #
+-# NO positive leap second will be introduced at the end of June 2011.
+-# The difference between Coordinated Universal Time UTC and the
+-# International Atomic Time TAI is :		
++# UTC TIME STEP
++# on the 1st of July 2012
+ #
+-# from 2009 January 1, 0h UTC, until further notice : UTC-TAI = -34 s
++#
++# A positive leap second will be introduced at the end of June 2012.
++# The sequence of dates of the UTC second markers will be:		
++# 		
++#                          2012 June 30,     23h 59m 59s
++#                          2012 June 30,     23h 59m 60s
++#                          2012 July  1,      0h  0m  0s
++#
++# The difference between UTC and the International Atomic Time TAI is:
++#
++# from 2009 January 1, 0h UTC, to 2012 July 1  0h UTC  : UTC-TAI = - 34s
++# from 2012 July 1,    0h UTC, until further notice    : UTC-TAI = - 35s
+ #
+ # Leap seconds can be introduced in UTC at the end of the months of December
+-# or June,  depending on the evolution of UT1-TAI. Bulletin C is mailed every
+-# six months, either to announce a time step in UTC, or to confirm that there
++# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every
++# six months, either to announce a time step in UTC or to confirm that there
+ # will be no time step at the next possible date.
+ #
++#
+ # Daniel GAMBIS
+-# Head			
+-# Earth Orientation Center of the IERS
++# Head		
++# Earth Orientation Center of IERS
+ # Observatoire de Paris, France
+--- openjdk/jdk/make/sun/javazic/tzdata/northamerica
++++ openjdk/jdk/make/sun/javazic/tzdata/northamerica
+@@ -22,7 +22,7 @@
+ # questions.
+ #
+ # 
+-# @(#)northamerica	8.49
++# @(#)northamerica	8.54
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -1143,9 +1143,26 @@
+ # For now, assume all of DST-observing Canada will fall into line with the
+ # new US DST rules,
+ 
++# From Chris Walton (2011-12-01)
++# In the first of Tammy Hardwick's articles
++# 
++# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
++# 
++# she quotes the Friday November 1/1918 edition of the Creston Review.
++# The quote includes these two statements:
++# 'Sunday the CPR went back to the old system of time...'
++# '... The daylight saving scheme was dropped all over Canada at the same time,'
++# These statements refer to a transition from daylight time to standard time
++# that occurred nationally on Sunday October 27/1918.  This transition was
++# also documented in the Saturday October 26/1918 edition of the Toronto Star.
++
++# In light of that evidence, we alter the date from the earlier believed
++# Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day
++# than Thursday) in all Canadian rulesets.
++
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Canada	1918	only	-	Apr	14	2:00	1:00	D
+-Rule	Canada	1918	only	-	Oct	31	2:00	0	S
++Rule	Canada	1918	only	-	Oct	27	2:00	0	S
+ Rule	Canada	1942	only	-	Feb	 9	2:00	1:00	W # War
+ Rule	Canada	1945	only	-	Aug	14	23:00u	1:00	P # Peace
+ Rule	Canada	1945	only	-	Sep	30	2:00	0	S
+@@ -1668,7 +1685,7 @@
+ Rule	Winn	1916	only	-	Apr	23	0:00	1:00	D
+ Rule	Winn	1916	only	-	Sep	17	0:00	0	S
+ Rule	Winn	1918	only	-	Apr	14	2:00	1:00	D
+-Rule	Winn	1918	only	-	Oct	31	2:00	0	S
++Rule	Winn	1918	only	-	Oct	27	2:00	0	S
+ Rule	Winn	1937	only	-	May	16	2:00	1:00	D
+ Rule	Winn	1937	only	-	Sep	26	2:00	0	S
+ Rule	Winn	1942	only	-	Feb	 9	2:00	1:00	W # War
+@@ -1751,7 +1768,7 @@
+ 
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Regina	1918	only	-	Apr	14	2:00	1:00	D
+-Rule	Regina	1918	only	-	Oct	31	2:00	0	S
++Rule	Regina	1918	only	-	Oct	27	2:00	0	S
+ Rule	Regina	1930	1934	-	May	Sun>=1	0:00	1:00	D
+ Rule	Regina	1930	1934	-	Oct	Sun>=1	0:00	0	S
+ Rule	Regina	1937	1941	-	Apr	Sun>=8	0:00	1:00	D
+@@ -1788,7 +1805,7 @@
+ 
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Edm	1918	1919	-	Apr	Sun>=8	2:00	1:00	D
+-Rule	Edm	1918	only	-	Oct	31	2:00	0	S
++Rule	Edm	1918	only	-	Oct	27	2:00	0	S
+ Rule	Edm	1919	only	-	May	27	2:00	0	S
+ Rule	Edm	1920	1923	-	Apr	lastSun	2:00	1:00	D
+ Rule	Edm	1920	only	-	Oct	lastSun	2:00	0	S
+@@ -1818,9 +1835,68 @@
+ # Dawson Creek uses MST.  Much of east BC is like Edmonton.
+ # Matthews and Vincent (1998) write that Creston is like Dawson Creek.
+ 
++# It seems though that (re: Creston) is not entirely correct:
++
++# From Chris Walton (2011-12-01):
++# There are two areas within the Canadian province of British Columbia
++# that do not currently observe daylight saving:
++# a) The Creston Valley (includes the town of Creston and surrounding area)
++# b) The eastern half of the Peace River Regional District
++# (includes the cities of Dawson Creek and Fort St. John)
++
++# Earlier this year I stumbled across a detailed article about the time
++# keeping history of Creston; it was written by Tammy Hardwick who is the
++# manager of the Creston & District Museum. The article was written in May 2009.
++# 
++# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
++# 
++# According to the article, Creston has not changed its clocks since June 1918.
++# i.e. Creston has been stuck on UTC-7 for 93 years.
++# Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
++
++# Unfortunately the exact date for the time change in June 1918 remains
++# unknown and will be difficult to ascertain.  I e-mailed Tammy a few months
++# ago to ask if Sunday June 2 was a reasonable guess.  She said it was just
++# as plausible as any other date (in June).  She also said that after writing the
++# article she had discovered another time change in 1916; this is the subject
++# of another article which she wrote in October 2010.
++# 
++# http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56
++# 
++
++# Here is a summary of the three clock change events in Creston's history:
++# 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
++# Exact date unknown
++# 2. Oct 1916: switch to Pacific Standard Time (GMT-8) 
++# Exact date in October unknown;  Sunday October 1 is a reasonable guess.
++# 3. June 1918: switch to Pacific Daylight Time (GMT-7)
++# Exact date in June unknown; Sunday June 2 is a reasonable guess.
++# note#1:
++# On Oct 27/1918 when daylight saving ended in the rest of Canada,
++# Creston did not change its clocks.
++# note#2:
++# During WWII when the Federal Government legislated a mandatory clock change,
++# Creston did not oblige.
++# note#3:
++# There is no guarantee that Creston will remain on Mountain Standard Time
++# (UTC-7) forever.
++# The subject was debated at least once this year by the town Council.
++# 
++# http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html
++# 
++
++# During a period WWII, summer time (Daylight saying) was mandatory in Canada.
++# In Creston, that was handled by shifting the area to PST (-8:00) then applying
++# summer time to cause the offset to be -7:00, the same as it had been before
++# the change.  It can be argued that the timezone abbreviation during this
++# period should be PDT rather than MST, but that doesn't seem important enough
++# (to anyone) to further complicate the rules.
++
++# The transition dates (and times) are guesses.
++
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Vanc	1918	only	-	Apr	14	2:00	1:00	D
+-Rule	Vanc	1918	only	-	Oct	31	2:00	0	S
++Rule	Vanc	1918	only	-	Oct	27	2:00	0	S
+ Rule	Vanc	1942	only	-	Feb	 9	2:00	1:00	W # War
+ Rule	Vanc	1945	only	-	Aug	14	23:00u	1:00	P # Peace
+ Rule	Vanc	1945	only	-	Sep	30	2:00	0	S
+@@ -1836,7 +1912,10 @@
+ 			-8:00	Canada	P%sT	1947
+ 			-8:00	Vanc	P%sT	1972 Aug 30 2:00
+ 			-7:00	-	MST
+-
++Zone America/Creston	-7:46:04 -	LMT	1884
++			-7:00	-	MST	1916 Oct 1
++			-8:00	-	PST	1918 Jun 2
++			-7:00	-	MST
+ 
+ # Northwest Territories, Nunavut, Yukon
+ 
+@@ -2713,6 +2792,34 @@
+ # 
+ # http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html
+ # 
++#
++# From Steffen Thorsen (2011-10-30)
++# Cuba will end DST two weeks later this year. Instead of going back 
++# tonight, it has been delayed to 2011-11-13 at 01:00.
++#
++# One source (Spanish)
++# 
++# http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html
++# 
++#
++# Our page:
++# 
++# http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
++# 
++# 
++# From Steffen Thorsen (2012-03-01)
++# According to Radio Reloj, Cuba will start DST on Midnight between March 
++# 31 and April 1.
++# 
++# Radio Reloj has the following info (Spanish):
++# 
++# http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
++# 
++#
++# Our info on it:
++# 
++# http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
++# 
+ 
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
+@@ -2744,12 +2851,15 @@
+ Rule	Cuba	1998	1999	-	Mar	lastSun	0:00s	1:00	D
+ Rule	Cuba	1998	2003	-	Oct	lastSun	0:00s	0	S
+ Rule	Cuba	2000	2004	-	Apr	Sun>=1	0:00s	1:00	D
+-Rule	Cuba	2006	max	-	Oct	lastSun	0:00s	0	S
++Rule	Cuba	2006	2010	-	Oct	lastSun	0:00s	0	S
+ Rule	Cuba	2007	only	-	Mar	Sun>=8	0:00s	1:00	D
+ Rule	Cuba	2008	only	-	Mar	Sun>=15	0:00s	1:00	D
+ Rule	Cuba	2009	2010	-	Mar	Sun>=8	0:00s	1:00	D
+ Rule	Cuba	2011	only	-	Mar	Sun>=15	0:00s	1:00	D
+-Rule	Cuba	2012	max	-	Mar	Sun>=8	0:00s	1:00	D
++Rule	Cuba	2011	only	-	Nov	13	0:00s	0	S
++Rule	Cuba	2012	only	-	Apr	1	0:00s	1:00	D
++Rule	Cuba	2012	max	-	Oct	lastSun	0:00s	0	S
++Rule	Cuba	2013	max	-	Mar	Sun>=8	0:00s	1:00	D
+ 
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	America/Havana	-5:29:28 -	LMT	1890
+@@ -2883,6 +2993,29 @@
+ # From Stephen Colebourne (2007-02-22):
+ # Some IATA info: Haiti won't be having DST in 2007.
+ 
++# From Steffen Thorsen (2012-03-11):
++# According to several news sources, Haiti will observe DST this year,
++# apparently using the same start and end date as USA/Canada.
++# So this means they have already changed their time.
++#
++# (Sources in French):
++# 
++# http://www.alterpresse.org/spip.php?article12510
++# 
++# 
++# http://radiovision2000haiti.net/home/?p=13253
++# 
++#
++# Our coverage:
++# 
++# http://www.timeanddate.com/news/time/haiti-dst-2012.html
++# 
++
++# From Arthur David Olson (2012-03-11):
++# The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to
++# 3:00 a.m. rather than the traditional Haitian jump at midnight.
++# Assume a US-style fall back as well XXX.
++# Do not yet assume that the change carries forward past 2012 XXX.
+ 
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Haiti	1983	only	-	May	8	0:00	1:00	D
+@@ -2894,6 +3027,8 @@
+ Rule	Haiti	1988	1997	-	Oct	lastSun	1:00s	0	S
+ Rule	Haiti	2005	2006	-	Apr	Sun>=1	0:00	1:00	D
+ Rule	Haiti	2005	2006	-	Oct	lastSun	0:00	0	S
++Rule	Haiti	2012	only	-	Mar	Sun>=8	2:00	1:00	D
++Rule	Haiti	2012	only	-	Nov	Sun>=1	2:00	0	S
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone America/Port-au-Prince -4:49:20 -	LMT	1890
+ 			-4:49	-	PPMT	1917 Jan 24 12:00 # P-a-P MT
+--- openjdk/jdk/make/sun/javazic/tzdata/southamerica
++++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
+@@ -22,7 +22,7 @@
+ # questions.
+ #
+ # 
+-# @(#)southamerica	8.50
++# @(#)southamerica	8.53
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -841,6 +841,19 @@
+ # oficial agency about time in Brazil, and she confirmed that the old rule is
+ # still in force.
+ 
++# From Guilherme Bernardes Rodrigues (2011-10-14)
++# It's official, the President signed a decree that includes Bahia in summer
++# time.
++#	 [ and in a second message (same day): ]
++# I found the decree.
++#
++# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011
++# Link :
++# 
++# http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
++# 
++
++
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ # Decree 20,466 (1931-10-01)
+ # Decree 21,896 (1932-01-10)
+@@ -1077,10 +1090,8 @@
+ # of America/Salvador.
+ Zone America/Bahia	-2:34:04 -	LMT	1914
+ 			-3:00	Brazil	BR%sT	2003 Sep 24
+-			-3:00	-	BRT
+-# as noted above, not yet in operation.
+-#			-3:00	-	BRT	2011 Oct 16
+-#			-3:00	Brazil	BR%sT
++			-3:00	-	BRT	2011 Oct 16
++			-3:00	Brazil	BR%sT
+ #
+ # Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
+ # Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
+@@ -1230,6 +1241,28 @@
+ # August, not in October as they have since 1968. This is a pilot plan
+ # which will be reevaluated in 2012.
+ 
++# From Mauricio Parada (2012-02-22), translated by Glenn Eychaner (2012-02-23):
++# As stated in the website of the Chilean Energy Ministry
++# http://www.minenergia.cl/ministerio/noticias/generales/gobierno-anuncia-fechas-de-cambio-de.html
++# The Chilean Government has decided to postpone the entrance into winter time
++# (to leave DST) from March 11 2012 to April 28th 2012. The decision has not
++# been yet formalized but it will within the next days.
++# Quote from the website communication:
++#
++# 6. For the year 2012, the dates of entry into winter time will be as follows:
++# a. Saturday April 28, 2012, clocks should go back 60 minutes; that is, at
++# 23:59:59, instead of passing to 0:00, the time should be adjusted to be 23:00
++# of the same day.
++# b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is,
++# at 23:59:59, instead of passing to 0:00, the time should be adjusted to be
++# 01:00 on September 2.
++#
++# Note that...this is yet another "temporary" change that will be reevaluated
++# AGAIN in 2013.
++
++# NOTE: ChileAQ rules for Antarctic bases are stored separately in the
++# 'antarctica' file.
++
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Chile	1927	1932	-	Sep	 1	0:00	1:00	S
+ Rule	Chile	1928	1932	-	Apr	 1	0:00	0	-
+@@ -1260,8 +1293,6 @@
+ Rule	Chile	1998	only	-	Sep	27	4:00u	1:00	S
+ Rule	Chile	1999	only	-	Apr	 4	3:00u	0	-
+ Rule	Chile	1999	2010	-	Oct	Sun>=9	4:00u	1:00	S
+-Rule	Chile	2011	only	-	Aug	Sun>=16	4:00u	1:00	S
+-Rule	Chile	2012	max	-	Oct	Sun>=9	4:00u	1:00	S
+ Rule	Chile	2000	2007	-	Mar	Sun>=9	3:00u	0	-
+ # N.B.: the end of March 29 in Chile is March 30 in Universal time,
+ # which is used below in specifying the transition.
+@@ -1269,7 +1300,11 @@
+ Rule	Chile	2009	only	-	Mar	Sun>=9	3:00u	0	-
+ Rule	Chile	2010	only	-	Apr	Sun>=1	3:00u	0	-
+ Rule	Chile	2011	only	-	May	Sun>=2	3:00u	0	-
+-Rule	Chile	2012	max	-	Mar	Sun>=9	3:00u	0	-
++Rule	Chile	2011	only	-	Aug	Sun>=16	4:00u	1:00	S
++Rule	Chile	2012	only	-	Apr	Sun>=23	3:00u	0	-
++Rule	Chile	2012	only	-	Sep	Sun>=2	4:00u	1:00	S
++Rule	Chile	2013	max	-	Mar	Sun>=9	3:00u	0	-
++Rule	Chile	2013	max	-	Oct	Sun>=9	4:00u	1:00	S
+ # IATA SSIM anomalies: (1992-02) says 1992-03-14;
+ # (1996-09) says 1998-03-08.  Ignore these.
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+@@ -1415,6 +1450,21 @@
+ # will not revert to local mean time, but clocks will remain on Summer
+ # time (UTC/GMT - 3 hours) throughout the whole of 2011.  Any long term
+ # change to local time following the trial period will be notified.
++#
++# From Andrew Newman (2012-02-24)
++# A letter from Justin McPhee, Chief Executive,
++# Cable & Wireless Falkland Islands (dated 2012-02-22)
++# states...
++#   The current Atlantic/Stanley entry under South America expects the
++#   clocks to go back to standard Falklands Time (FKT) on the 15th April.
++#   The database entry states that in 2011 Stanley was staying on fixed
++#   summer time on a trial basis only.  FIG need to contact IANA and/or
++#   the maintainers of the database to inform them we're adopting
++#   the same policy this year and suggest recommendations for future years.
++#
++# For now we will assume permanent summer time for the Falklands
++# until advised differently (to apply for 2012 and beyond, after the 2011
++# experiment was apparently successful.)
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Falk	1937	1938	-	Sep	lastSun	0:00	1:00	S
+ Rule	Falk	1938	1942	-	Mar	Sun>=19	0:00	0	-
+@@ -1427,14 +1477,14 @@
+ Rule	Falk	1985	2000	-	Sep	Sun>=9	0:00	1:00	S
+ Rule	Falk	1986	2000	-	Apr	Sun>=16	0:00	0	-
+ Rule	Falk	2001	2010	-	Apr	Sun>=15	2:00	0	-
+-Rule	Falk	2012	max	-	Apr	Sun>=15	2:00	0	-
+-Rule	Falk	2001	max	-	Sep	Sun>=1	2:00	1:00	S
++Rule	Falk	2001	2010	-	Sep	Sun>=1	2:00	1:00	S
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone Atlantic/Stanley	-3:51:24 -	LMT	1890
+ 			-3:51:24 -	SMT	1912 Mar 12  # Stanley Mean Time
+ 			-4:00	Falk	FK%sT	1983 May     # Falkland Is Time
+ 			-3:00	Falk	FK%sT	1985 Sep 15
+-			-4:00	Falk	FK%sT
++			-4:00	Falk	FK%sT	2010 Sep 5 02:00
++			-3:00	-	FKST
+ 
+ # French Guiana
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+--- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
++++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
+@@ -22,7 +22,7 @@
+ # questions.
+ #
+ # 
+-# @(#)zone.tab	8.49
++# @(#)zone.tab	8.55
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ #
+@@ -154,6 +154,7 @@
+ CA	+690650-1050310	America/Cambridge_Bay	Mountain Time - west Nunavut
+ CA	+6227-11421	America/Yellowknife	Mountain Time - central Northwest Territories
+ CA	+682059-1334300	America/Inuvik	Mountain Time - west Northwest Territories
++CA	+4906-11631	America/Creston	Mountain Standard Time - Creston, British Columbia
+ CA	+5946-12014	America/Dawson_Creek	Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
+ CA	+4916-12307	America/Vancouver	Pacific Time - west British Columbia
+ CA	+6043-13503	America/Whitehorse	Pacific Time - south Yukon
+@@ -356,7 +357,7 @@
+ RU	+5443+02030	Europe/Kaliningrad	Moscow-01 - Kaliningrad
+ RU	+5545+03735	Europe/Moscow	Moscow+00 - west Russia
+ RU	+4844+04425	Europe/Volgograd	Moscow+00 - Caspian Sea
+-RU	+5312+05009	Europe/Samara	Moscow - Samara, Udmurtia
++RU	+5312+05009	Europe/Samara	Moscow+00 - Samara, Udmurtia
+ RU	+5651+06036	Asia/Yekaterinburg	Moscow+02 - Urals
+ RU	+5500+07324	Asia/Omsk	Moscow+03 - west Siberia
+ RU	+5502+08255	Asia/Novosibirsk	Moscow+03 - Novosibirsk
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
+@@ -333,6 +333,7 @@
+                                               "French Guiana Summer Time", "GFST"}},
+             {"America/Cayman", EST},
+             {"America/Chihuahua", MST},
++            {"America/Creston", MST},
+             {"America/Coral_Harbour", EST},
+             {"America/Cordoba", AGT},
+             {"America/Costa_Rica", CST},
+@@ -678,7 +679,7 @@
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+             {"Europe/Kaliningrad", FET},
+-            {"Europe/Kiev", FET},
++            {"Europe/Kiev", EET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -699,14 +700,14 @@
+                                             "Samara Summer Time", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", FET},
++            {"Europe/Simferopol", EET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", FET},
++            {"Europe/Uzhgorod", EET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -715,7 +716,7 @@
+                                                "Volgograd Summer Time", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", FET},
++            {"Europe/Zaporozhye", EET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
+@@ -333,6 +333,7 @@
+                                               "Franz\u00f6sisch-Guiana Sommerzeit", "GFST"}},
+             {"America/Cayman", EST},
+             {"America/Chihuahua", MST},
++            {"America/Creston", MST},
+             {"America/Coral_Harbour", EST},
+             {"America/Cordoba", AGT},
+             {"America/Costa_Rica", CST},
+@@ -678,7 +679,7 @@
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+             {"Europe/Kaliningrad", FET},
+-            {"Europe/Kiev", FET},
++            {"Europe/Kiev", EET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -699,14 +700,14 @@
+                                             "Samarische Sommerzeit", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", FET},
++            {"Europe/Simferopol", EET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", FET},
++            {"Europe/Uzhgorod", EET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -715,7 +716,7 @@
+                                                "Wolgograder Sommerzeit", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", FET},
++            {"Europe/Zaporozhye", EET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
+@@ -333,6 +333,7 @@
+                                               "Hora de verano de la Guayana Francesa", "GFST"}},
+             {"America/Cayman", EST},
+             {"America/Chihuahua", MST},
++            {"America/Creston", MST},
+             {"America/Coral_Harbour", EST},
+             {"America/Cordoba", AGT},
+             {"America/Costa_Rica", CST},
+@@ -678,7 +679,7 @@
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+             {"Europe/Kaliningrad", FET},
+-            {"Europe/Kiev", FET},
++            {"Europe/Kiev", EET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -699,14 +700,14 @@
+                                             "Hora de verano de Samara", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", FET},
++            {"Europe/Simferopol", EET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", FET},
++            {"Europe/Uzhgorod", EET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -715,7 +716,7 @@
+                                                "Hora de verano de Volgogrado", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", FET},
++            {"Europe/Zaporozhye", EET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
+@@ -333,6 +333,7 @@
+                                               "Heure d'\u00e9t\u00e9 de Guyane fran\u00e7aise", "GFST"}},
+             {"America/Cayman", EST},
+             {"America/Chihuahua", MST},
++            {"America/Creston", MST},
+             {"America/Coral_Harbour", EST},
+             {"America/Cordoba", AGT},
+             {"America/Costa_Rica", CST},
+@@ -678,7 +679,7 @@
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+             {"Europe/Kaliningrad", FET},
+-            {"Europe/Kiev", FET},
++            {"Europe/Kiev", EET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -699,14 +700,14 @@
+                                             "Heure d'\u00e9t\u00e9 de Samara", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", FET},
++            {"Europe/Simferopol", EET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", FET},
++            {"Europe/Uzhgorod", EET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -715,7 +716,7 @@
+                                                "Heure d'\u00e9t\u00e9 de Volgograd", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", FET},
++            {"Europe/Zaporozhye", EET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
+@@ -333,6 +333,7 @@
+                                               "Ora estiva della Guyana Francese", "GFST"}},
+             {"America/Cayman", EST},
+             {"America/Chihuahua", MST},
++            {"America/Creston", MST},
+             {"America/Coral_Harbour", EST},
+             {"America/Cordoba", AGT},
+             {"America/Costa_Rica", CST},
+@@ -678,7 +679,7 @@
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+             {"Europe/Kaliningrad", FET},
+-            {"Europe/Kiev", FET},
++            {"Europe/Kiev", EET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -699,14 +700,14 @@
+                                             "Ora estiva di Samara", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", FET},
++            {"Europe/Simferopol", EET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", FET},
++            {"Europe/Uzhgorod", EET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -715,7 +716,7 @@
+                                                "Ora estiva di Volgograd", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", FET},
++            {"Europe/Zaporozhye", EET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
+@@ -333,6 +333,7 @@
+                                               "\u4ecf\u9818\u30ae\u30a2\u30ca\u590f\u6642\u9593", "GFST"}},
+             {"America/Cayman", EST},
+             {"America/Chihuahua", MST},
++            {"America/Creston", MST},
+             {"America/Coral_Harbour", EST},
+             {"America/Cordoba", AGT},
+             {"America/Costa_Rica", CST},
+@@ -678,7 +679,7 @@
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+             {"Europe/Kaliningrad", FET},
+-            {"Europe/Kiev", FET},
++            {"Europe/Kiev", EET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -699,14 +700,14 @@
+                                             "\u30b5\u30de\u30e9\u590f\u6642\u9593", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", FET},
++            {"Europe/Simferopol", EET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", FET},
++            {"Europe/Uzhgorod", EET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -715,7 +716,7 @@
+                                                "\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u590f\u6642\u9593", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", FET},
++            {"Europe/Zaporozhye", EET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
+@@ -333,6 +333,7 @@
+                                               "\ud504\ub791\uc2a4\ub839 \uae30\uc544\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GFST"}},
+             {"America/Cayman", EST},
+             {"America/Chihuahua", MST},
++            {"America/Creston", MST},
+             {"America/Coral_Harbour", EST},
+             {"America/Cordoba", AGT},
+             {"America/Costa_Rica", CST},
+@@ -678,7 +679,7 @@
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+             {"Europe/Kaliningrad", FET},
+-            {"Europe/Kiev", FET},
++            {"Europe/Kiev", EET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -699,14 +700,14 @@
+                                             "\uc0ac\ub9c8\ub77c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", FET},
++            {"Europe/Simferopol", EET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", FET},
++            {"Europe/Uzhgorod", EET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -715,7 +716,7 @@
+                                                "\ubcfc\uace0\uadf8\ub77c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", FET},
++            {"Europe/Zaporozhye", EET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
+@@ -333,6 +333,7 @@
+                                               "Franska Guyana, sommartid", "GFST"}},
+             {"America/Cayman", EST},
+             {"America/Chihuahua", MST},
++            {"America/Creston", MST},
+             {"America/Coral_Harbour", EST},
+             {"America/Cordoba", AGT},
+             {"America/Costa_Rica", CST},
+@@ -678,7 +679,7 @@
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+             {"Europe/Kaliningrad", FET},
+-            {"Europe/Kiev", FET},
++            {"Europe/Kiev", EET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -699,14 +700,14 @@
+                                             "Samara, sommartid", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", FET},
++            {"Europe/Simferopol", EET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", FET},
++            {"Europe/Uzhgorod", EET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -715,7 +716,7 @@
+                                                "Volgograd, sommartid", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", FET},
++            {"Europe/Zaporozhye", EET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
+@@ -333,6 +333,7 @@
+                                               "\u6cd5\u5c5e\u572d\u4e9a\u90a3\u590f\u4ee4\u65f6", "GFST"}},
+             {"America/Cayman", EST},
+             {"America/Chihuahua", MST},
++            {"America/Creston", MST},
+             {"America/Coral_Harbour", EST},
+             {"America/Cordoba", AGT},
+             {"America/Costa_Rica", CST},
+@@ -678,7 +679,7 @@
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+             {"Europe/Kaliningrad", FET},
+-            {"Europe/Kiev", FET},
++            {"Europe/Kiev", EET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -699,14 +700,14 @@
+                                             "\u6c99\u9a6c\u62c9\u590f\u4ee4\u65f6", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", FET},
++            {"Europe/Simferopol", EET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", FET},
++            {"Europe/Uzhgorod", EET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -715,7 +716,7 @@
+                                                "\u4f0f\u5c14\u52a0\u683c\u52d2\u590f\u4ee4\u65f6", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", FET},
++            {"Europe/Zaporozhye", EET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
+--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
+@@ -333,6 +333,7 @@
+                                               "\u6cd5\u5c6c\u572d\u4e9e\u90a3\u590f\u4ee4\u6642\u9593", "GFST"}},
+             {"America/Cayman", EST},
+             {"America/Chihuahua", MST},
++            {"America/Creston", MST},
+             {"America/Coral_Harbour", EST},
+             {"America/Cordoba", AGT},
+             {"America/Costa_Rica", CST},
+@@ -679,7 +680,7 @@
+             {"Europe/Istanbul", EET},
+             {"Europe/Jersey", GMTBST},
+             {"Europe/Kaliningrad", FET},
+-            {"Europe/Kiev", FET},
++            {"Europe/Kiev", EET},
+             {"Europe/Lisbon", WET},
+             {"Europe/Ljubljana", CET},
+             {"Europe/London", GMTBST},
+@@ -700,14 +701,14 @@
+                                             "\u6c99\u99ac\u62c9\u590f\u4ee4\u6642\u9593", "SAMST"}},
+             {"Europe/San_Marino", CET},
+             {"Europe/Sarajevo", CET},
+-            {"Europe/Simferopol", FET},
++            {"Europe/Simferopol", EET},
+             {"Europe/Skopje", CET},
+             {"Europe/Sofia", EET},
+             {"Europe/Stockholm", CET},
+             {"Europe/Tallinn", EET},
+             {"Europe/Tirane", CET},
+             {"Europe/Tiraspol", EET},
+-            {"Europe/Uzhgorod", FET},
++            {"Europe/Uzhgorod", EET},
+             {"Europe/Vaduz", CET},
+             {"Europe/Vatican", CET},
+             {"Europe/Vienna", CET},
+@@ -716,7 +717,7 @@
+                                                "\u4f0f\u723e\u52a0\u683c\u52d2\u590f\u4ee4\u6642\u9593", "VOLST"}},
+             {"Europe/Warsaw", CET},
+             {"Europe/Zagreb", CET},
+-            {"Europe/Zaporozhye", FET},
++            {"Europe/Zaporozhye", EET},
+             {"Europe/Zurich", CET},
+             {"GB", GMTBST},
+             {"GB-Eire", GMTBST},
diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/7198570-tzdata2012f.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7198570-tzdata2012f.patch	Wed Jul 03 23:28:46 2013 -0400
@@ -0,0 +1,841 @@
+# HG changeset patch
+# User coffeys
+# Date 1349962116 -3600
+# Node ID c554456c623f1d05180b291ce0b1e4589e2bd165
+# Parent  5683b3f7f8cc58746a2983ee6294b62ccdfa159c
+7198570: (tz) Support tzdata2012f
+Reviewed-by: peytoia, asaha
+
+--- openjdk/jdk/make/sun/javazic/tzdata/VERSION
++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION
+@@ -21,4 +21,4 @@
+ # or visit www.oracle.com if you need additional information or have any
+ # questions.
+ #
+-tzdata2012c
++tzdata2012f
+--- openjdk/jdk/make/sun/javazic/tzdata/africa
++++ openjdk/jdk/make/sun/javazic/tzdata/africa
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)africa	8.35
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -261,7 +260,7 @@
+ # I received a mail from an airline which says that the daylight
+ # saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.
+ # From Jesper Norgaard Welen (2007-08-15): [The following agree:]
+-# http://www.nentjes.info/Bill/bill5.htm 
++# http://www.nentjes.info/Bill/bill5.htm
+ # http://www.timeanddate.com/worldclock/city.html?n=53
+ # From Steffen Thorsen (2007-09-04): The official information...:
+ # http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm
+@@ -315,18 +314,18 @@
+ # in September.
+ 
+ # From Steffen Thorsen (2009-08-11):
+-# We have been able to confirm the August change with the Egyptian Cabinet 
++# We have been able to confirm the August change with the Egyptian Cabinet
+ # Information and Decision Support Center:
+ # 
+ # http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html
+ # 
+-# 
++#
+ # The Middle East News Agency
+ # 
+ # http://www.mena.org.eg/index.aspx
+ # 
+ # also reports "Egypt starts winter time on August 21"
+-# today in article numbered "71, 11/08/2009 12:25 GMT." 
++# today in article numbered "71, 11/08/2009 12:25 GMT."
+ # Only the title above is available without a subscription to their service,
+ # and can be found by searching for "winter" in their search engine
+ # (at least today).
+@@ -505,7 +504,7 @@
+ # From Steffen Thorsen (2008-06-25):
+ # Mauritius plans to observe DST from 2008-11-01 to 2009-03-31 on a trial
+ # basis....
+-# It seems that Mauritius observed daylight saving time from 1982-10-10 to 
++# It seems that Mauritius observed daylight saving time from 1982-10-10 to
+ # 1983-03-20 as well, but that was not successful....
+ # http://www.timeanddate.com/news/time/mauritius-daylight-saving-time.html
+ 
+@@ -529,12 +528,12 @@
+ # than previously announced (2008-11-01 to 2009-03-31).  The new start
+ # date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
+ # given, but it is probably at either 2 or 3 wall clock time).
+-# 
+-# A little strange though, since the article says that they moved the date 
+-# to align itself with Europe and USA which also change time on that date, 
+-# but that means they have not paid attention to what happened in 
+-# USA/Canada last year (DST ends first Sunday in November). I also wonder 
+-# why that they end on a Friday, instead of aligning with Europe which 
++#
++# A little strange though, since the article says that they moved the date
++# to align itself with Europe and USA which also change time on that date,
++# but that means they have not paid attention to what happened in
++# USA/Canada last year (DST ends first Sunday in November). I also wonder
++# why that they end on a Friday, instead of aligning with Europe which
+ # changes two days later.
+ 
+ # From Alex Krivenyshev (2008-07-11):
+@@ -593,7 +592,7 @@
+ # 
+ 
+ # From Arthur David Olson (2009-07-11):
+-# The "mauritius-dst-will-not-repeat" wrapup includes this: 
++# The "mauritius-dst-will-not-repeat" wrapup includes this:
+ # "The trial ended on March 29, 2009, when the clocks moved back by one hour
+ # at 2am (or 02:00) local time..."
+ 
+@@ -687,8 +686,8 @@
+ # XXX--guess that it is only Morocco for now; guess only 2008 for now.
+ 
+ # From Steffen Thorsen (2008-08-27):
+-# Morocco will change the clocks back on the midnight between August 31 
+-# and September 1. They originally planned to observe DST to near the end 
++# Morocco will change the clocks back on the midnight between August 31
++# and September 1. They originally planned to observe DST to near the end
+ # of September:
+ #
+ # One article about it (in French):
+@@ -822,6 +821,23 @@
+ # "...à partir du dernier dimance d'avril et non fins mars,
+ # comme annoncé précédemment."
+ 
++# From Milamber Space Network (2012-07-17):
++# The official return to GMT is announced by the Moroccan government:
++# 
++# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French]
++# 
++#
++# Google translation, lightly edited:
++# Back to the standard time of the Kingdom (GMT)
++# Pursuant to Decree No. 2-12-126 issued on 26 Jumada (I) 1433 (April 18,
++# 2012) and in accordance with the order of Mr. President of the
++# Government No. 3-47-12 issued on 24 Sha'ban (11 July 2012), the Ministry
++# of Public Service and Administration Modernization announces the return
++# of the legal time of the Kingdom (GMT) from Friday, July 20, 2012 until
++# Monday, August 20, 2012.  So the time will be delayed by 60 minutes from
++# 3:00 am Friday, July 20, 2012 and will again be advanced by 60 minutes
++# August 20, 2012 from 2:00 am.
++
+ # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ 
+ Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	S
+@@ -849,6 +865,8 @@
+ Rule	Morocco	2011	only	-	Jul	 31	 0	0	-
+ Rule	Morocco	2012	max	-	Apr	 lastSun 2:00	1:00	S
+ Rule	Morocco	2012	max	-	Sep	 lastSun 3:00	0	-
++Rule	Morocco	2012	only	-	Jul	 20	 3:00	0	-
++Rule	Morocco	2012	only	-	Aug	 20	 2:00	1:00	S
+ 
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
+@@ -877,7 +895,7 @@
+ # Forecasting Riaan van Zyl explained that the far eastern parts of
+ # the country are close to 40 minutes earlier in sunrise than the rest
+ # of the country.
+-# 
++#
+ # From Paul Eggert (2007-03-31):
+ # Apparently the Caprivi Strip informally observes Botswana time, but
+ # we have no details.  In the meantime people there can use Africa/Gaborone.
+--- openjdk/jdk/make/sun/javazic/tzdata/antarctica
++++ openjdk/jdk/make/sun/javazic/tzdata/antarctica
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)antarctica	8.10
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/asia
++++ openjdk/jdk/make/sun/javazic/tzdata/asia
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)asia	8.73
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -125,7 +124,7 @@
+ # From Alexander Krivenyshev (2012-02-10):
+ # According to News Armenia, on Feb 9, 2012,
+ # http://newsarmenia.ru/society/20120209/42609695.html
+-# 
++#
+ # The Armenia National Assembly adopted final reading of Amendments to the
+ # Law "On procedure of calculation time on the territory of the Republic of
+ # Armenia" according to which Armenia [is] abolishing Daylight Saving Time.
+@@ -205,15 +204,15 @@
+ # 
+ 
+ # From A. N. M. Kamrus Saadat (2009-06-15):
+-# Finally we've got the official mail regarding DST start time where DST start 
+-# time is mentioned as Jun 19 2009, 23:00 from BTRC (Bangladesh 
+-# Telecommunication Regulatory Commission). 
++# Finally we've got the official mail regarding DST start time where DST start
++# time is mentioned as Jun 19 2009, 23:00 from BTRC (Bangladesh
++# Telecommunication Regulatory Commission).
+ #
+ # No DST end date has been announced yet.
+ 
+ # From Alexander Krivenyshev (2009-09-25):
+-# Bangladesh won't go back to Standard Time from October 1, 2009, 
+-# instead it will continue DST measure till the cabinet makes a fresh decision. 
++# Bangladesh won't go back to Standard Time from October 1, 2009,
++# instead it will continue DST measure till the cabinet makes a fresh decision.
+ #
+ # Following report by same newspaper-"The Daily Star Friday":
+ # "DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1"
+@@ -227,8 +226,8 @@
+ 
+ # From Steffen Thorsen (2009-10-13):
+ # IANS (Indo-Asian News Service) now reports:
+-# Bangladesh has decided that the clock advanced by an hour to make 
+-# maximum use of daylight hours as an energy saving measure would 
++# Bangladesh has decided that the clock advanced by an hour to make
++# maximum use of daylight hours as an energy saving measure would
+ # "continue for an indefinite period."
+ #
+ # One of many places where it is published:
+@@ -256,7 +255,7 @@
+ 
+ # From Alexander Krivenyshev (2010-03-22):
+ # According to Bangladesh newspaper "The Daily Star,"
+-# Cabinet cancels Daylight Saving Time 
++# Cabinet cancels Daylight Saving Time
+ # 
+ # http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
+ # 
+@@ -384,11 +383,11 @@
+ # observing daylight saving time in 1986.
+ #
+ # From Thomas S. Mullaney (2008-02-11):
+-# I think you're combining two subjects that need to treated 
+-# separately: daylight savings (which, you're correct, wasn't 
+-# implemented until the 1980s) and the unified time zone centered near 
+-# Beijing (which was implemented in 1949). Briefly, there was also a 
+-# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was 
++# I think you're combining two subjects that need to treated
++# separately: daylight savings (which, you're correct, wasn't
++# implemented until the 1980s) and the unified time zone centered near
++# Beijing (which was implemented in 1949). Briefly, there was also a
++# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was
+ # ceased, and the second eventually recognized (again, in the 1980s).
+ #
+ # From Paul Eggert (2008-06-30):
+@@ -525,7 +524,7 @@
+ # as of 2009-10-28:
+ # Year        Period
+ # 1941        1 Apr to 30 Sep
+-# 1942        Whole year 
++# 1942        Whole year
+ # 1943        Whole year
+ # 1944        Whole year
+ # 1945        Whole year
+@@ -616,16 +615,16 @@
+ # From Arthur David Olson (2010-04-07):
+ # Here's Google's translation of the table at the bottom of the "summert.htm" page:
+ # Decade 	                                                    Name                      Start and end date
+-# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time               May 1 to September 30 
+-# 41 years of the Republic of China (AD 1952)                 Daylight Saving Time      March 1 to October 31 
+-# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time      April 1 to October 31 
+-# In the 44 years to 45 years (AD 1955-1956 years)            Daylight Saving Time      April 1 to September 30 
+-# Republic of China 46 years to 48 years (AD 1957-1959)       Summer Time               April 1 to September 30 
+-# Republic of China 49 years to 50 years (AD 1960-1961)       Summer Time               June 1 to September 30 
+-# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time 
+-# Republic of China 63 years to 64 years (1974-1975 AD)       Daylight Saving Time      April 1 to September 30 
+-# Republic of China 65 years to 67 years (1976-1978 AD)       Stop Daylight Saving Time 
+-# Republic of China 68 years (AD 1979)                        Daylight Saving Time      July 1 to September 30 
++# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time               May 1 to September 30
++# 41 years of the Republic of China (AD 1952)                 Daylight Saving Time      March 1 to October 31
++# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time      April 1 to October 31
++# In the 44 years to 45 years (AD 1955-1956 years)            Daylight Saving Time      April 1 to September 30
++# Republic of China 46 years to 48 years (AD 1957-1959)       Summer Time               April 1 to September 30
++# Republic of China 49 years to 50 years (AD 1960-1961)       Summer Time               June 1 to September 30
++# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time
++# Republic of China 63 years to 64 years (1974-1975 AD)       Daylight Saving Time      April 1 to September 30
++# Republic of China 65 years to 67 years (1976-1978 AD)       Stop Daylight Saving Time
++# Republic of China 68 years (AD 1979)                        Daylight Saving Time      July 1 to September 30
+ # Republic of China since 69 years (AD 1980)                  Stop Daylight Saving Time
+ 
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+@@ -1859,15 +1858,15 @@
+ # shown 8 per cent higher consumption of electricity.
+ 
+ # From Alex Krivenyshev (2008-05-15):
+-# 
+-# Here is an article that Pakistan plan to introduce Daylight Saving Time 
++#
++# Here is an article that Pakistan plan to introduce Daylight Saving Time
+ # on June 1, 2008 for 3 months.
+-# 
+-# "... The federal cabinet on Wednesday announced a new conservation plan to help 
+-# reduce load shedding by approving the closure of commercial centres at 9pm and 
+-# moving clocks forward by one hour for the next three months. 
++#
++# "... The federal cabinet on Wednesday announced a new conservation plan to help
++# reduce load shedding by approving the closure of commercial centres at 9pm and
++# moving clocks forward by one hour for the next three months.
+ # ...."
+-# 
++#
+ # 
+ # http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html
+ # 
+@@ -1927,7 +1926,7 @@
+ # Government has decided to restore the previous time by moving the
+ # clocks backward by one hour from October 1. A formal announcement to
+ # this effect will be made after the Prime Minister grants approval in
+-# this regard." 
++# this regard."
+ # 
+ # http://www.thenews.com.pk/updates.asp?id=87168
+ # 
+@@ -2223,7 +2222,7 @@
+ # 
+ # http://www.maannews.net/eng/ViewDetails.aspx?ID=306795
+ # 
+-# the clocks were set back one hour at 2010-08-11 00:00:00 local time in 
++# the clocks were set back one hour at 2010-08-11 00:00:00 local time in
+ # Gaza and the West Bank.
+ # Some more background info:
+ # 
+@@ -2262,7 +2261,7 @@
+ # The rules for Egypt are stolen from the `africa' file.
+ 
+ # From Steffen Thorsen (2011-09-30):
+-# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30 
++# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30
+ # 00:00).
+ # So West Bank and Gaza now have the same time again.
+ #
+@@ -2536,19 +2535,19 @@
+ # having it between Wednesday and Thursday (two workdays in Syria) since the
+ # weekend in Syria is not Saturday and Sunday, but Friday and Saturday. So now
+ # it is implemented at midnight of the last workday before weekend...
+-# 
++#
+ # From Steffen Thorsen (2007-10-27):
+ # Jesper Norgaard Welen wrote:
+-# 
++#
+ # > "Winter local time in Syria will be observed at midnight of Thursday 1
+ # > November 2007, and the clock will be put back 1 hour."
+-# 
++#
+ # I found confirmation on this in this gov.sy-article (Arabic):
+ # http://wehda.alwehda.gov.sy/_print_veiw.asp?FileName=12521710520070926111247
+-# 
++#
+ # which using Google's translate tools says:
+-# Council of Ministers also approved the commencement of work on 
+-# identifying the winter time as of Friday, 2/11/2007 where the 60th 
++# Council of Ministers also approved the commencement of work on
++# identifying the winter time as of Friday, 2/11/2007 where the 60th
+ # minute delay at midnight Thursday 1/11/2007.
+ Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
+ 
+@@ -2614,8 +2613,8 @@
+ # 
+ 
+ # From Steffen Thorsen (2009-10-27):
+-# The Syrian Arab News Network on 2009-09-29 reported that Syria will 
+-# revert back to winter (standard) time on midnight between Thursday 
++# The Syrian Arab News Network on 2009-09-29 reported that Syria will
++# revert back to winter (standard) time on midnight between Thursday
+ # 2009-10-29 and Friday 2009-10-30:
+ # 
+ # http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic)
+--- openjdk/jdk/make/sun/javazic/tzdata/australasia
++++ openjdk/jdk/make/sun/javazic/tzdata/australasia
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)australasia	8.30
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -307,9 +306,9 @@
+ # 
+ 
+ # From Alexander Krivenyshev (2010-10-24):
+-# According to Radio Fiji and Fiji Times online, Fiji will end DST 3 
++# According to Radio Fiji and Fiji Times online, Fiji will end DST 3
+ # weeks earlier than expected - on March 6, 2011, not March 27, 2011...
+-# Here is confirmation from Government of the Republic of the Fiji Islands, 
++# Here is confirmation from Government of the Republic of the Fiji Islands,
+ # Ministry of Information (fiji.gov.fj) web site:
+ # 
+ # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155
+@@ -320,15 +319,15 @@
+ # 
+ 
+ # From Steffen Thorsen (2011-10-03):
+-# Now the dates have been confirmed, and at least our start date 
++# Now the dates have been confirmed, and at least our start date
+ # assumption was correct (end date was one week wrong).
+ #
+ # 
+ # www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
+ # 
+ # which says
+-# Members of the public are reminded to change their time to one hour in 
+-# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to 
++# Members of the public are reminded to change their time to one hour in
++# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to
+ # 2am on February 26 next year.
+ 
+ # From Ken Rylander (2011-10-24)
+@@ -345,15 +344,23 @@
+ # The commencement of daylight saving will remain unchanged and start
+ # on the  23rd of October, 2011.
+ 
++# From the Fiji Government Online Portal (2012-08-21) via Steffen Thorsen:
++# The Minister for Labour, Industrial Relations and Employment Mr Jone Usamate
++# today confirmed that Fiji will start daylight savings at 2 am on Sunday 21st
++# October 2012 and end at 3 am on Sunday 20th January 2013.
++# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155
++#
++# From Paul Eggert (2012-08-31):
++# For now, guess a pattern of the penultimate Sundays in October and January.
++
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+ Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
+ Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
+ Rule	Fiji	2009	only	-	Nov	29	2:00	1:00	S
+ Rule	Fiji	2010	only	-	Mar	lastSun	3:00	0	-
+-Rule	Fiji	2010	only	-	Oct	24	2:00	1:00	S
++Rule	Fiji	2010	max	-	Oct	Sun>=18	2:00	1:00	S
+ Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
+-Rule	Fiji	2011	only	-	Oct	23	2:00	1:00	S
+-Rule	Fiji	2012	only	-	Jan	22	3:00	0	-
++Rule	Fiji	2012	max	-	Jan	Sun>=18	3:00	0	-
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
+ 			12:00	Fiji	FJ%sT	# Fiji Time
+@@ -582,7 +589,7 @@
+ 
+ # From David Zuelke (2011-05-09):
+ # Subject: Samoa to move timezone from east to west of international date line
+-# 
++#
+ # 
+ # http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963
+ # 
+@@ -664,25 +671,25 @@
+ #
+ # From Gwillim Law (2011-12-29)
+ # A correspondent informed me that Tokelau, like Samoa, will be skipping
+-# December 31 this year, thereby changing its time zone from UTC-10 to
+-# UTC+14. When I tried to verify this statement, I found a confirming
+-# article in Time magazine online
+-# 
+-# (http://www.time.com/time/world/article/0,8599,2103243,00.html).
+-# 
++# December 31 this year ...
+ #
+-# From Jonathan Leffler (2011-12-29)
+-# Information from the BBC to the same effect:
+-# 
+-# http://www.bbc.co.uk/news/world-asia-16351377
+-# 
++# From Steffen Thorsen (2012-07-25)
++# ... we double checked by calling hotels and offices based in Tokelau asking
++# about the time there, and they all told a time that agrees with UTC+13....
++# Shanks says UTC-10 from 1901 [but] ... there is a good chance the change
++# actually was to UTC-11 back then.
+ #
+-# Patch supplied by Tim Parenti (2011-12-29)
++# From Paul Eggert (2012-07-25)
++# A Google Books snippet of Appendix to the Journals of the House of
++# Representatives of New Zealand, Session 1948,
++# , page 65, says Tokelau
++# was "11 hours slow on G.M.T."  Go with Thorsen and assume Shanks & Pottenger
++# are off by an hour starting in 1901.
+ 
+ # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+ Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
+-			-10:00	-	TKT 2011 Dec 30	# Tokelau Time
+-			14:00	-	TKT
++			-11:00	-	TKT 2011 Dec 30	# Tokelau Time
++			13:00	-	TKT
+ 
+ # Tonga
+ # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+@@ -1363,22 +1370,22 @@
+ # See "southeast Australia" above for 2008 and later.
+ 
+ # From Steffen Thorsen (2009-04-28):
+-# According to the official press release, South Australia's extended daylight 
+-# saving period will continue with the same rules as used during the 2008-2009 
++# According to the official press release, South Australia's extended daylight
++# saving period will continue with the same rules as used during the 2008-2009
+ # summer (southern hemisphere).
+-# 
++#
+ # From
+ # 
+ # http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf
+ # 
+-# The extended daylight saving period that South Australia has been trialling 
++# The extended daylight saving period that South Australia has been trialling
+ # for over the last year is now set to be ongoing.
+-# Daylight saving will continue to start on the first Sunday in October each 
++# Daylight saving will continue to start on the first Sunday in October each
+ # year and finish on the first Sunday in April the following year.
+-# Industrial Relations Minister, Paul Caica, says this provides South Australia 
+-# with a consistent half hour time difference with NSW, Victoria, Tasmania and 
++# Industrial Relations Minister, Paul Caica, says this provides South Australia
++# with a consistent half hour time difference with NSW, Victoria, Tasmania and
+ # the ACT for all 52 weeks of the year...
+-# 
++#
+ # We have a wrap-up here:
+ # 
+ # http://www.timeanddate.com/news/time/south-australia-extends-dst.html
+--- openjdk/jdk/make/sun/javazic/tzdata/backward
++++ openjdk/jdk/make/sun/javazic/tzdata/backward
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)backward	8.11
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/etcetera
++++ openjdk/jdk/make/sun/javazic/tzdata/etcetera
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)etcetera	8.3
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/europe
++++ openjdk/jdk/make/sun/javazic/tzdata/europe
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)europe	8.41
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -598,12 +597,12 @@
+ # According to Kremlin press service, Russian President Dmitry Medvedev
+ # signed a federal law "On calculation of time" on June 9, 2011.
+ # According to the law Russia is abolishing daylight saving time.
+-# 
+-# Medvedev signed a law "On the Calculation of Time" (in russian): 
++#
++# Medvedev signed a law "On the Calculation of Time" (in russian):
+ # 
+ # http://bmockbe.ru/events/?ID=7583
+ # 
+-# 
++#
+ # Medvedev signed a law on the calculation of the time (in russian):
+ # 
+ # http://www.regnum.ru/news/polit/1413906.html
+@@ -1711,7 +1710,7 @@
+ # From Alexander Krivenyshev (2011-10-26)
+ # NO need to divide Moldova into two timezones at this point.
+ # As of today, Transnistria (Pridnestrovie)- Tiraspol reversed its own
+-# decision to abolish DST this winter. 
++# decision to abolish DST this winter.
+ # Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
+ # Tiraspol will go back to winter time on October 30, 2011.
+ # News from Moldova (in russian):
+@@ -2601,11 +2600,11 @@
+ # http://www.alomaliye.com/bkk_2002_3769.htm
+ 
+ # From Gökdeniz Karadağ (2011-03-10):
+-# 
++#
+ # According to the articles linked below, Turkey will change into summer
+ # time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
+ # This change is due to a nationwide exam on 27th.
+-# 
++#
+ # 
+ # http://www.worldbulletin.net/?aType=haber&ArticleID=70872
+ # 
+@@ -2722,7 +2721,7 @@
+ # time this year after all.
+ #
+ # From Udo Schwedt (2011-10-18):
+-# As far as I understand, the recent change to the Ukranian time zone 
++# As far as I understand, the recent change to the Ukranian time zone
+ # (Europe/Kiev) to introduce permanent daylight saving time (similar
+ # to Russia) was reverted today:
+ #
+--- openjdk/jdk/make/sun/javazic/tzdata/factory
++++ openjdk/jdk/make/sun/javazic/tzdata/factory
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)factory	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
++++ openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)iso3166.tab	8.11
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ # ISO 3166 alpha-2 country codes
+--- openjdk/jdk/make/sun/javazic/tzdata/leapseconds
++++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)leapseconds	8.13
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -101,8 +100,8 @@
+ #
+ #
+ # A positive leap second will be introduced at the end of June 2012.
+-# The sequence of dates of the UTC second markers will be:		
+-# 		
++# The sequence of dates of the UTC second markers will be:
++#
+ #                          2012 June 30,     23h 59m 59s
+ #                          2012 June 30,     23h 59m 60s
+ #                          2012 July  1,      0h  0m  0s
+@@ -119,6 +118,6 @@
+ #
+ #
+ # Daniel GAMBIS
+-# Head		
++# Head
+ # Earth Orientation Center of IERS
+ # Observatoire de Paris, France
+--- openjdk/jdk/make/sun/javazic/tzdata/northamerica
++++ openjdk/jdk/make/sun/javazic/tzdata/northamerica
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)northamerica	8.54
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -502,7 +501,7 @@
+ 			 -8:00	US	P%sT	1946
+ 			 -8:00	-	PST	1969
+ 			 -8:00	US	P%sT	1980 Apr 27 2:00
+-			 -9:00	US	Y%sT	1980 Oct 26 2:00	
++			 -9:00	US	Y%sT	1980 Oct 26 2:00
+ 			 -8:00	US	P%sT	1983 Oct 30 2:00
+ 			 -9:00	US	Y%sT	1983 Nov 30
+ 			 -9:00	US	AK%sT
+@@ -1867,7 +1866,7 @@
+ # Here is a summary of the three clock change events in Creston's history:
+ # 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
+ # Exact date unknown
+-# 2. Oct 1916: switch to Pacific Standard Time (GMT-8) 
++# 2. Oct 1916: switch to Pacific Standard Time (GMT-8)
+ # Exact date in October unknown;  Sunday October 1 is a reasonable guess.
+ # 3. June 1918: switch to Pacific Daylight Time (GMT-7)
+ # Exact date in June unknown; Sunday June 2 is a reasonable guess.
+@@ -2697,20 +2696,20 @@
+ # except that it switches at midnight standard time as usual.
+ #
+ # From Steffen Thorsen (2007-10-25):
+-# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week 
++# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week
+ # earlier - on the last Sunday of October, just like in 2006.
+-# 
++#
+ # He supplied these references:
+-# 
++#
+ # http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES
+ # http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm
+-# 
++#
+ # From Alex Kryvenishev (2007-10-25):
+ # Here is also article from Granma (Cuba):
+-# 
++#
+ # [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre
+ # http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html
+-# 
++#
+ # http://www.worldtimezone.com/dst_news/dst_news_cuba03.html
+ 
+ # From Arthur David Olson (2008-03-09):
+@@ -2794,7 +2793,7 @@
+ # 
+ #
+ # From Steffen Thorsen (2011-10-30)
+-# Cuba will end DST two weeks later this year. Instead of going back 
++# Cuba will end DST two weeks later this year. Instead of going back
+ # tonight, it has been delayed to 2011-11-13 at 01:00.
+ #
+ # One source (Spanish)
+@@ -2806,11 +2805,11 @@
+ # 
+ # http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
+ # 
+-# 
++#
+ # From Steffen Thorsen (2012-03-01)
+-# According to Radio Reloj, Cuba will start DST on Midnight between March 
++# According to Radio Reloj, Cuba will start DST on Midnight between March
+ # 31 and April 1.
+-# 
++#
+ # Radio Reloj has the following info (Spanish):
+ # 
+ # http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
+--- openjdk/jdk/make/sun/javazic/tzdata/pacificnew
++++ openjdk/jdk/make/sun/javazic/tzdata/pacificnew
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)pacificnew	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/solar87
++++ openjdk/jdk/make/sun/javazic/tzdata/solar87
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)solar87	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/solar88
++++ openjdk/jdk/make/sun/javazic/tzdata/solar88
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)solar88	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/solar89
++++ openjdk/jdk/make/sun/javazic/tzdata/solar89
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)solar89	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/southamerica
++++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)southamerica	8.53
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+@@ -255,7 +254,7 @@
+ Rule	Arg	2007	only	-	Dec	30	0:00	1:00	S
+ Rule	Arg	2008	2009	-	Mar	Sun>=15	0:00	0	-
+ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
+- 
++
+ # From Mariano Absatz (2004-05-21):
+ # Today it was officially published that the Province of Mendoza is changing
+ # its timezone this winter... starting tomorrow night....
+@@ -345,9 +344,9 @@
+ # confirms what Alex Krivenyshev has earlier sent to the tz
+ # emailing list about that San Luis plans to return to standard
+ # time much earlier than the rest of the country. It also
+-# confirms that upon request the provinces San Juan and Mendoza 
+-# refused to follow San Luis in this change. 
+-# 
++# confirms that upon request the provinces San Juan and Mendoza
++# refused to follow San Luis in this change.
++#
+ # The change is supposed to take place Monday the 21.st at 0:00
+ # hours. As far as I understand it if this goes ahead, we need
+ # a new timezone for San Luis (although there are also documented
+@@ -409,7 +408,7 @@
+ # 
+ # http://www.lanacion.com.ar/nota.asp?nota_id=1107912
+ # 
+-# 
++#
+ # The press release says:
+ #  (...) anunció que el próximo domingo a las 00:00 los puntanos deberán
+ # atrasar una hora sus relojes.
+@@ -823,8 +822,8 @@
+ #
+ # From Alexander Krivenyshev (2011-10-04):
+ # State Bahia will return to Daylight savings time this year after 8 years off.
+-# The announcement was made by Governor Jaques Wagner in an interview to a 
+-# television station in Salvador. 
++# The announcement was made by Governor Jaques Wagner in an interview to a
++# television station in Salvador.
+ 
+ # In Portuguese:
+ # 
+@@ -1183,7 +1182,7 @@
+ # Due to drought, Chile extends Daylight Time in three weeks.  This
+ # is one-time change (Saturday 3/29 at 24:00 for America/Santiago
+ # and Saturday 3/29 at 22:00 for Pacific/Easter)
+-# The Supreme Decree is located at 
++# The Supreme Decree is located at
+ # 
+ # http://www.shoa.cl/servicios/supremo316.pdf
+ # 
+@@ -1194,7 +1193,7 @@
+ 
+ # From Jose Miguel Garrido (2008-03-05):
+ # ...
+-# You could see the announces of the change on 
++# You could see the announces of the change on
+ # 
+ # http://www.shoa.cl/noticias/2008/04hora/hora.htm
+ # .
+--- openjdk/jdk/make/sun/javazic/tzdata/systemv
++++ openjdk/jdk/make/sun/javazic/tzdata/systemv
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)systemv	8.2
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ 
+--- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
++++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
+@@ -22,7 +22,6 @@
+ # questions.
+ #
+ # 
+-# @(#)zone.tab	8.55
+ # This file is in the public domain, so clarified as of
+ # 2009-05-17 by Arthur David Olson.
+ #
diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8002070-remove_logger_stack_search.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/8002070-remove_logger_stack_search.patch	Wed Jul 03 23:28:46 2013 -0400
@@ -0,0 +1,152 @@
+changeset:   4948:4a67dd684bc2
+user:        andrew
+date:        Tue Jun 18 08:07:48 2013 -0500
+files:       src/share/classes/java/util/logging/Logger.java
+description:
+8002070: Remove the stack search for a resource bundle for Logger to use
+Summary: The fragile, vulnerable, stack crawling has been eliminated from findResourceBundle(String)
+Reviewed-by: mchung, alanb
+
+
+--- openjdk/jdk/src/share/classes/java/util/logging/Logger.java
++++ openjdk/jdk/src/share/classes/java/util/logging/Logger.java
+@@ -26,8 +26,16 @@
+ 
+ package java.util.logging;
+ 
+-import java.util.*;
++import java.lang.ref.WeakReference;
++import java.security.AccessController;
++import java.security.PrivilegedAction;
++import java.util.ArrayList;
++import java.util.Iterator;
++import java.util.Locale;
++import java.util.MissingResourceException;
++import java.util.ResourceBundle;
++import java.util.concurrent.CopyOnWriteArrayList;
+-import java.security.*;
+-import java.lang.ref.WeakReference;
++import sun.reflect.CallerSensitive;
++import sun.reflect.Reflection;
+ 
+ /**
+@@ -100,14 +105,8 @@
+  * 

+ * When mapping ResourceBundle names to ResourceBundles, the Logger + * will first try to use the Thread's ContextClassLoader. If that +- * is null it will try the SystemClassLoader instead. As a temporary +- * transition feature in the initial implementation, if the Logger is +- * unable to locate a ResourceBundle from the ContextClassLoader or +- * SystemClassLoader the Logger will also search up the class stack +- * and use successive calling ClassLoaders to try to locate a ResourceBundle. +- * (This call stack search is to allow containers to transition to +- * using ContextClassLoaders and is likely to be removed in future +- * versions.) ++ * is null it will try the ++ * {@linkplain java.lang.ClassLoader#getSystemClassLoader() system ClassLoader} instead. + *

+ * Formatting (including localization) is the responsibility of + * the output Handler, which will typically call a Formatter. +@@ -1323,12 +1322,16 @@ + return useParentHandlers; + } + +- // Private utility method to map a resource bundle name to an +- // actual resource bundle, using a simple one-entry cache. +- // Returns null for a null name. +- // May also return null if we can't find the resource bundle and +- // there is no suitable previous cached value. +- ++ /** ++ * Private utility method to map a resource bundle name to an ++ * actual resource bundle, using a simple one-entry cache. ++ * Returns null for a null name. ++ * May also return null if we can't find the resource bundle and ++ * there is no suitable previous cached value. ++ * ++ * @param name the ResourceBundle to locate ++ * @return ResourceBundle specified by name or null if not found ++ */ + static final String SYSTEM_LOGGER_RB_NAME = "sun.util.logging.resources.logging"; + + private static ResourceBundle findSystemResourceBundle(final Locale locale) { +@@ -1355,8 +1358,8 @@ + Locale currentLocale = Locale.getDefault(); + + // Normally we should hit on our simple one entry cache. +- if (catalog != null && currentLocale == catalogLocale +- && name == catalogName) { ++ if (catalog != null && currentLocale.equals(catalogLocale) ++ && name.equals(catalogName)) { + return catalog; + } + +@@ -1367,8 +1370,8 @@ + return catalog; + } + +- // Use the thread's context ClassLoader. If there isn't one, +- // use the SystemClassloader. ++ // Use the thread's context ClassLoader. If there isn't one, use the ++ // {@linkplain java.lang.ClassLoader#getSystemClassLoader() system ClassLoader}. + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + if (cl == null) { + cl = ClassLoader.getSystemClassLoader(); +@@ -1379,45 +1382,8 @@ + catalogLocale = currentLocale; + return catalog; + } catch (MissingResourceException ex) { +- // Woops. We can't find the ResourceBundle in the default +- // ClassLoader. Drop through. ++ return null; + } +- +- +- // Fall back to searching up the call stack and trying each +- // calling ClassLoader. +- for (int ix = 0; ; ix++) { +- Class clz = sun.reflect.Reflection.getCallerClass(ix); +- if (clz == null) { +- break; +- } +- ClassLoader cl2 = clz.getClassLoader(); +- if (cl2 == null) { +- cl2 = ClassLoader.getSystemClassLoader(); +- } +- if (cl == cl2) { +- // We've already checked this classloader. +- continue; +- } +- cl = cl2; +- try { +- catalog = ResourceBundle.getBundle(name, currentLocale, cl); +- catalogName = name; +- catalogLocale = currentLocale; +- return catalog; +- } catch (MissingResourceException ex) { +- // Ok, this one didn't work either. +- // Drop through, and try the next one. +- } +- } +- +- if (name.equals(catalogName)) { +- // Return the previous cached value for that name. +- // This may be null. +- return catalog; +- } +- // Sorry, we're out of luck. +- return null; + } + + // Private utility method to initialize our one entry +@@ -1428,8 +1395,7 @@ + if (name == null) { + return; + } +- ResourceBundle rb = findResourceBundle(name); +- if (rb == null) { ++ if (findResourceBundle(name) == null) { + // We've failed to find an expected ResourceBundle. + throw new MissingResourceException("Can't find " + name + " bundle", name, ""); + } + diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8002070-remove_logger_stack_search_2.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8002070-remove_logger_stack_search_2.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,546 @@ +changeset: 4981:108fe5a882a7 +user: andrew +date: Wed Jun 26 22:44:03 2013 -0500 +files: src/share/classes/java/util/logging/Logger.java test/java/util/logging/bundlesearch/ClassPathTestBundle_en.properties test/java/util/logging/bundlesearch/IndirectlyLoadABundle.java test/java/util/logging/bundlesearch/LoadItUp.java test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java test/java/util/logging/bundlesearch/resources/ContextClassLoaderTestBundle_en.properties test/java/util/logging/bundlesearch/resources/StackSearchableResource_en.properties +description: +8002070: Remove the stack search for a resource bundle for Logger to use +Summary: The fragile, vulnerable, stack crawling has been eliminated from findResourceBundle(String) +Reviewed-by: mchung + + +--- openjdk/jdk/src/share/classes/java/util/logging/Logger.java ++++ openjdk/jdk/src/share/classes/java/util/logging/Logger.java +@@ -1322,16 +1322,6 @@ + return useParentHandlers; + } + +- /** +- * Private utility method to map a resource bundle name to an +- * actual resource bundle, using a simple one-entry cache. +- * Returns null for a null name. +- * May also return null if we can't find the resource bundle and +- * there is no suitable previous cached value. +- * +- * @param name the ResourceBundle to locate +- * @return ResourceBundle specified by name or null if not found +- */ + static final String SYSTEM_LOGGER_RB_NAME = "sun.util.logging.resources.logging"; + + private static ResourceBundle findSystemResourceBundle(final Locale locale) { +@@ -1349,6 +1339,16 @@ + }); + } + ++ /** ++ * Private utility method to map a resource bundle name to an ++ * actual resource bundle, using a simple one-entry cache. ++ * Returns null for a null name. ++ * May also return null if we can't find the resource bundle and ++ * there is no suitable previous cached value. ++ * ++ * @param name the ResourceBundle to locate ++ * @return ResourceBundle specified by name or null if not found ++ */ + private synchronized ResourceBundle findResourceBundle(String name) { + // Return a null bundle for a null name. + if (name == null) { +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/bundlesearch/ClassPathTestBundle_en.properties +@@ -0,0 +1,25 @@ ++# ++# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++# ++# This code is free software; you can redistribute it and/or modify it ++# under the terms of the GNU General Public License version 2 only, as ++# published by the Free Software Foundation. ++# ++# This code is distributed in the hope that it will be useful, but WITHOUT ++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++# version 2 for more details (a copy is included in the LICENSE file that ++# accompanied this code). ++# ++# You should have received a copy of the GNU General Public License version ++# 2 along with this work; if not, write to the Free Software Foundation, ++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++# ++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++# or visit www.oracle.com if you need additional information or have any ++# questions. ++# ++sample1=translation #2 for sample1 ++sample2=translation #2 for sample2 ++supports-test=ResourceBundleSearchTest +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/bundlesearch/IndirectlyLoadABundle.java +@@ -0,0 +1,89 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++import java.lang.reflect.InvocationTargetException; ++import java.lang.reflect.Method; ++import java.net.URL; ++import java.net.URLClassLoader; ++ ++/** ++ * This class is used to ensure that a resource bundle loadable by a classloader ++ * is on the caller's stack, but not on the classpath or TCCL to ensure that ++ * Logger.getLogger() can't load the bundle via a stack search ++ * ++ * @author Jim Gish ++ */ ++public class IndirectlyLoadABundle { ++ ++ private final static String rbName = "StackSearchableResource"; ++ ++ public boolean loadAndTest() throws Throwable { ++ // Find out where we are running from so we can setup the URLClassLoader URLs ++ // test.src and test.classes will be set if running in jtreg, but probably ++ // not otherwise ++ String testDir = System.getProperty("test.src", System.getProperty("user.dir")); ++ String testClassesDir = System.getProperty("test.classes", ++ System.getProperty("user.dir")); ++ String sep = System.getProperty("file.separator"); ++ URL[] urls = new URL[2]; ++ ++ // Allow for both jtreg and standalone cases here ++ urls[0] = new URL("file://" + testDir + sep + "resources" + sep); ++ urls[1] = new URL("file://" + testClassesDir + sep ); ++ System.out.println("INFO: urls[0] = " + urls[0]); ++ System.out.println("INFO: urls[1] = " + urls[1]); ++ ++ // Make sure we can find it via the URLClassLoader ++ URLClassLoader yetAnotherResourceCL = new URLClassLoader(urls, null); ++ if (!testForValidResourceSetup(yetAnotherResourceCL)) { ++ throw new Exception("Couldn't directly load bundle " + rbName ++ + " as expected. Test config problem"); ++ } ++ // But it shouldn't be available via the system classloader ++ ClassLoader myCL = this.getClass().getClassLoader(); ++ if (testForValidResourceSetup(myCL)) { ++ throw new Exception("Was able to directly load bundle " + rbName ++ + " from " + myCL + " but shouldn't have been" ++ + " able to. Test config problem"); ++ } ++ ++ Class loadItUpClazz = Class.forName("LoadItUp", true, yetAnotherResourceCL); ++ ClassLoader actual = loadItUpClazz.getClassLoader(); ++ if (actual != yetAnotherResourceCL) { ++ throw new Exception("LoadItUp was loaded by an unexpected CL: " + actual); ++ } ++ Object loadItUp = loadItUpClazz.newInstance(); ++ Method testMethod = loadItUpClazz.getMethod("test", String.class); ++ try { ++ return (Boolean) testMethod.invoke(loadItUp, rbName); ++ } catch (InvocationTargetException ex) { ++ throw ex.getTargetException(); ++ } ++ } ++ ++ private boolean testForValidResourceSetup(ClassLoader cl) { ++ // First make sure the test environment is setup properly and the bundle actually ++ // exists ++ return ResourceBundleSearchTest.isOnClassPath(rbName, cl); ++ } ++} +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp.java +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++import java.util.MissingResourceException; ++import java.util.logging.Logger; ++ ++/* ++ * This class is loaded onto the call stack when the test method is called ++ * and then its classloader can be used to find a property bundle in the same ++ * directory as the class. However, Logger is not allowed ++ * to find the bundle by looking up the stack for this classloader. ++ * We verify that this cannot happen. ++ * ++ * @author Jim Gish ++ */ ++public class LoadItUp { ++ ++ private final static boolean DEBUG = false; ++ ++ public Boolean test(String rbName) throws Exception { ++ // we should not be able to find the resource in this directory via ++ // getLogger calls. The only way that would be possible given this setup ++ // is that if Logger.getLogger searched up the call stack ++ return lookupBundle(rbName); ++ } ++ ++ private boolean lookupBundle(String rbName) { ++ // See if Logger.getLogger can find the resource in this directory ++ try { ++ Logger aLogger = Logger.getLogger("NestedLogger", rbName); ++ } catch (MissingResourceException re) { ++ if (DEBUG) { ++ System.out.println( ++ "As expected, LoadItUp.lookupBundle() did not find the bundle " ++ + rbName); ++ } ++ return false; ++ } ++ System.out.println("FAILED: LoadItUp.lookupBundle() found the bundle " ++ + rbName + " using a stack search."); ++ return true; ++ } ++} +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java +@@ -0,0 +1,249 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++/* ++ * @test ++ * @bug 8010127 ++ * @summary Remove the stack search for a resource bundle Logger to use ++ * @author Jim Gish ++ * @build ResourceBundleSearchTest IndirectlyLoadABundle LoadItUp ++ * @run main ResourceBundleSearchTest ++ */ ++import java.net.URL; ++import java.net.URLClassLoader; ++import java.util.ArrayList; ++import java.util.List; ++import java.util.Locale; ++import java.util.MissingResourceException; ++import java.util.ResourceBundle; ++import java.util.logging.Logger; ++ ++public class ResourceBundleSearchTest { ++ ++ private final static boolean DEBUG = false; ++ private final static String LOGGER_PREFIX = "myLogger."; ++ private static int loggerNum = 0; ++ private final static String PROP_RB_NAME = "ClassPathTestBundle"; ++ private final static String TCCL_TEST_BUNDLE = "ContextClassLoaderTestBundle"; ++ ++ private static int numPass = 0; ++ private static int numFail = 0; ++ private static List msgs = new ArrayList(); ++ ++ public static void main(String[] args) throws Throwable { ++ ResourceBundleSearchTest test = new ResourceBundleSearchTest(); ++ test.runTests(); ++ } ++ ++ private void runTests() throws Throwable { ++ // ensure we are using en as the default Locale so we can find the resource ++ Locale.setDefault(Locale.ENGLISH); ++ ++ String testClasses = System.getProperty("test.classes"); ++ System.out.println( "test.classes = " + testClasses ); ++ ++ ClassLoader myClassLoader = ClassLoader.getSystemClassLoader(); ++ ++ // Find out where we are running from so we can setup the URLClassLoader URL ++ String userDir = System.getProperty("user.dir"); ++ String testDir = System.getProperty("test.src", userDir); ++ String sep = System.getProperty("file.separator"); ++ ++ URL[] urls = new URL[1]; ++ urls[0] = new URL("file://" + testDir + sep + "resources" + sep); ++ URLClassLoader rbClassLoader = new URLClassLoader(urls); ++ ++ // Test 1 - can we find a Logger bundle from doing a stack search? ++ // We shouldn't be able to ++ assertFalse(testGetBundleFromStackSearch(), "testGetBundleFromStackSearch"); ++ ++ // Test 2 - can we find a Logger bundle off of the Thread context class ++ // loader? We should be able to. ++ assertTrue( ++ testGetBundleFromTCCL(TCCL_TEST_BUNDLE, rbClassLoader), ++ "testGetBundleFromTCCL"); ++ ++ // Test 3 - Can we find a Logger bundle from the classpath? We should be ++ // able to, but .... ++ // We check to see if the bundle is on the classpath or not so that this ++ // will work standalone. In the case of jtreg/samevm, ++ // the resource bundles are not on the classpath. Running standalone ++ // (or othervm), they are ++ if (isOnClassPath(PROP_RB_NAME, myClassLoader)) { ++ debug("We should be able to see " + PROP_RB_NAME + " on the classpath"); ++ assertTrue(testGetBundleFromSystemClassLoader(PROP_RB_NAME), ++ "testGetBundleFromSystemClassLoader"); ++ } else { ++ debug("We should not be able to see " + PROP_RB_NAME + " on the classpath"); ++ assertFalse(testGetBundleFromSystemClassLoader(PROP_RB_NAME), ++ "testGetBundleFromSystemClassLoader"); ++ } ++ ++ report(); ++ } ++ ++ private void report() throws Exception { ++ System.out.println("Num passed = " + numPass + " Num failed = " + numFail); ++ if (numFail > 0) { ++ // We only care about the messages if they were errors ++ for (String msg : msgs) { ++ System.out.println(msg); ++ } ++ throw new Exception(numFail + " out of " + (numPass + numFail) ++ + " tests failed."); ++ } ++ } ++ ++ public void assertTrue(boolean testResult, String testName) { ++ if (testResult) { ++ numPass++; ++ } else { ++ numFail++; ++ System.out.println("FAILED: " + testName ++ + " was supposed to return true but did NOT!"); ++ } ++ } ++ ++ public void assertFalse(boolean testResult, String testName) { ++ if (!testResult) { ++ numPass++; ++ } else { ++ numFail++; ++ System.out.println("FAILED: " + testName ++ + " was supposed to return false but did NOT!"); ++ } ++ } ++ ++ public boolean testGetBundleFromStackSearch() throws Throwable { ++ // This should fail. This was the old functionality to search up the ++ // caller's call stack ++ IndirectlyLoadABundle indirectLoader = new IndirectlyLoadABundle(); ++ return indirectLoader.loadAndTest(); ++ } ++ ++ public boolean testGetBundleFromTCCL(String bundleName, ++ ClassLoader setOnTCCL) throws InterruptedException { ++ // This should succeed. We should be able to get the bundle from the ++ // thread context class loader ++ debug("Looking for " + bundleName + " using TCCL"); ++ LoggingThread lr = new LoggingThread(bundleName, setOnTCCL); ++ lr.start(); ++ synchronized (lr) { ++ try { ++ lr.wait(); ++ } catch (InterruptedException ex) { ++ throw ex; ++ } ++ } ++ msgs.add(lr.msg); ++ return lr.foundBundle; ++ } ++ ++ /* ++ * @param String bundleClass ++ * @param ClassLoader to use for search ++ * @return true iff bundleClass is on system classpath ++ */ ++ public static boolean isOnClassPath(String baseName, ClassLoader cl) { ++ ResourceBundle rb = null; ++ try { ++ rb = ResourceBundle.getBundle(baseName, Locale.getDefault(), cl); ++ System.out.println("INFO: Found bundle " + baseName + " on " + cl); ++ } catch (MissingResourceException e) { ++ System.out.println("INFO: Could not find bundle " + baseName + " on " + cl); ++ return false; ++ } ++ return (rb != null); ++ } ++ ++ private static String newLoggerName() { ++ // we need a new logger name every time we attempt to find a bundle via ++ // the Logger.getLogger call, so we'll simply tack on an integer which ++ // we increment each time this is called ++ loggerNum++; ++ return LOGGER_PREFIX + loggerNum; ++ } ++ ++ public boolean testGetBundleFromSystemClassLoader(String bundleName) { ++ // this should succeed if the bundle is on the system classpath. ++ try { ++ Logger aLogger = Logger.getLogger(ResourceBundleSearchTest.newLoggerName(), ++ bundleName); ++ } catch (MissingResourceException re) { ++ msgs.add("INFO: testGetBundleFromSystemClassLoader() did not find bundle " ++ + bundleName); ++ return false; ++ } ++ msgs.add("INFO: testGetBundleFromSystemClassLoader() found the bundle " ++ + bundleName); ++ return true; ++ } ++ ++ public static class LoggingThread extends Thread { ++ ++ boolean foundBundle = false; ++ String msg = null; ++ ClassLoader clToSetOnTCCL = null; ++ String bundleName = null; ++ ++ public LoggingThread(String bundleName) { ++ this.bundleName = bundleName; ++ } ++ ++ public LoggingThread(String bundleName, ClassLoader setOnTCCL) { ++ this.clToSetOnTCCL = setOnTCCL; ++ this.bundleName = bundleName; ++ } ++ ++ public void run() { ++ boolean setTCCL = false; ++ try { ++ if (clToSetOnTCCL != null) { ++ Thread.currentThread().setContextClassLoader(clToSetOnTCCL); ++ setTCCL = true; ++ } ++ // this should succeed if the bundle is on the system classpath. ++ try { ++ Logger aLogger = Logger.getLogger(ResourceBundleSearchTest.newLoggerName(), ++ bundleName); ++ msg = "INFO: LoggingRunnable() found the bundle " + bundleName ++ + (setTCCL ? " with " : " without ") + "setting the TCCL"; ++ foundBundle = true; ++ } catch (MissingResourceException re) { ++ msg = "INFO: LoggingRunnable() did not find the bundle " + bundleName ++ + (setTCCL ? " with " : " without ") + "setting the TCCL"; ++ foundBundle = false; ++ } ++ } catch (Throwable e) { ++ e.printStackTrace(); ++ System.exit(1); ++ } ++ } ++ } ++ ++ private void debug(String msg) { ++ if (DEBUG) { ++ System.out.println(msg); ++ } ++ } ++} +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/bundlesearch/resources/ContextClassLoaderTestBundle_en.properties +@@ -0,0 +1,25 @@ ++# ++# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++# ++# This code is free software; you can redistribute it and/or modify it ++# under the terms of the GNU General Public License version 2 only, as ++# published by the Free Software Foundation. ++# ++# This code is distributed in the hope that it will be useful, but WITHOUT ++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++# version 2 for more details (a copy is included in the LICENSE file that ++# accompanied this code). ++# ++# You should have received a copy of the GNU General Public License version ++# 2 along with this work; if not, write to the Free Software Foundation, ++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++# ++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++# or visit www.oracle.com if you need additional information or have any ++# questions. ++# ++sample1=translation #3 for sample1 ++sample2=translation #3 for sample2 ++supports-test=ResourceBundleSearchTest +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/bundlesearch/resources/StackSearchableResource_en.properties +@@ -0,0 +1,25 @@ ++# ++# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++# ++# This code is free software; you can redistribute it and/or modify it ++# under the terms of the GNU General Public License version 2 only, as ++# published by the Free Software Foundation. ++# ++# This code is distributed in the hope that it will be useful, but WITHOUT ++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++# version 2 for more details (a copy is included in the LICENSE file that ++# accompanied this code). ++# ++# You should have received a copy of the GNU General Public License version ++# 2 along with this work; if not, write to the Free Software Foundation, ++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++# ++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++# or visit www.oracle.com if you need additional information or have any ++# questions. ++# ++sample1=translation #4 for sample1 ++sample2=translation #4 for sample2 ++supports-test=ResourceBundleSearchTest + diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8002225-tzdata2012i.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8002225-tzdata2012i.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,261 @@ +# HG changeset patch +# User coffeys +# Date 1352197189 0 +# Node ID 1f833e4211177700a66cc22a0c5a794448c1a29a +# Parent c554456c623f1d05180b291ce0b1e4589e2bd165 +8002225: (tz) Support tzdata2012i +Reviewed-by: peytoia, asaha + +--- openjdk/jdk/make/sun/javazic/tzdata/VERSION ++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2012f ++tzdata2012i +--- openjdk/jdk/make/sun/javazic/tzdata/asia ++++ openjdk/jdk/make/sun/javazic/tzdata/asia +@@ -1193,15 +1193,15 @@ + # + # ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps + +-# From Paul Eggert (2005-02-22): ++# From Paul Eggert (2012-10-26): + # I used Ephraim Silverberg's dst-israel.el program + # (2005-02-20) + # along with Ed Reingold's cal-hebrew in GNU Emacs 21.4, +-# to generate the transitions in this list. ++# to generate the transitions from 2005 through 2012. + # (I replaced "lastFri" with "Fri>=26" by hand.) +-# The spring transitions below all correspond to the following Rule: ++# The spring transitions all correspond to the following Rule: + # +-# Rule Zion 2005 max - Mar Fri>=26 2:00 1:00 D ++# Rule Zion 2005 2012 - Mar Fri>=26 2:00 1:00 D + # + # but older zic implementations (e.g., Solaris 8) do not support + # "Fri>=26" to mean April 1 in years like 2005, so for now we list the +@@ -1218,39 +1218,36 @@ + Rule Zion 2010 only - Sep 12 2:00 0 S + Rule Zion 2011 only - Apr 1 2:00 1:00 D + Rule Zion 2011 only - Oct 2 2:00 0 S +-Rule Zion 2012 2015 - Mar Fri>=26 2:00 1:00 D ++Rule Zion 2012 only - Mar Fri>=26 2:00 1:00 D + Rule Zion 2012 only - Sep 23 2:00 0 S +-Rule Zion 2013 only - Sep 8 2:00 0 S +-Rule Zion 2014 only - Sep 28 2:00 0 S +-Rule Zion 2015 only - Sep 20 2:00 0 S +-Rule Zion 2016 only - Apr 1 2:00 1:00 D +-Rule Zion 2016 only - Oct 9 2:00 0 S +-Rule Zion 2017 2021 - Mar Fri>=26 2:00 1:00 D +-Rule Zion 2017 only - Sep 24 2:00 0 S +-Rule Zion 2018 only - Sep 16 2:00 0 S +-Rule Zion 2019 only - Oct 6 2:00 0 S +-Rule Zion 2020 only - Sep 27 2:00 0 S +-Rule Zion 2021 only - Sep 12 2:00 0 S +-Rule Zion 2022 only - Apr 1 2:00 1:00 D +-Rule Zion 2022 only - Oct 2 2:00 0 S +-Rule Zion 2023 2032 - Mar Fri>=26 2:00 1:00 D +-Rule Zion 2023 only - Sep 24 2:00 0 S +-Rule Zion 2024 only - Oct 6 2:00 0 S +-Rule Zion 2025 only - Sep 28 2:00 0 S +-Rule Zion 2026 only - Sep 20 2:00 0 S +-Rule Zion 2027 only - Oct 10 2:00 0 S +-Rule Zion 2028 only - Sep 24 2:00 0 S +-Rule Zion 2029 only - Sep 16 2:00 0 S +-Rule Zion 2030 only - Oct 6 2:00 0 S +-Rule Zion 2031 only - Sep 21 2:00 0 S +-Rule Zion 2032 only - Sep 12 2:00 0 S +-Rule Zion 2033 only - Apr 1 2:00 1:00 D +-Rule Zion 2033 only - Oct 2 2:00 0 S +-Rule Zion 2034 2037 - Mar Fri>=26 2:00 1:00 D +-Rule Zion 2034 only - Sep 17 2:00 0 S +-Rule Zion 2035 only - Oct 7 2:00 0 S +-Rule Zion 2036 only - Sep 28 2:00 0 S +-Rule Zion 2037 only - Sep 13 2:00 0 S ++ ++# From Ephraim Silverberg (2012-10-18): ++ ++# Yesterday, the Interior Ministry Committee, after more than a year ++# past, approved sending the proposed June 2011 changes to the Time ++# Decree Law back to the Knesset for second and third (final) votes ++# before the upcoming elections on Jan. 22, 2013. Hence, although the ++# changes are not yet law, they are expected to be so before February 2013. ++# ++# As of 2013, DST starts at 02:00 on the Friday before the last Sunday in March. ++# DST ends at 02:00 on the first Sunday after October 1, unless it occurs on the ++# second day of the Jewish Rosh Hashana holiday, in which case DST ends a day ++# later (i.e. at 02:00 the first Monday after October 2). ++# [Rosh Hashana holidays are factored in until 2100.] ++ ++# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S ++Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D ++Rule Zion 2013 2026 - Oct Sun>=2 2:00 0 S ++Rule Zion 2027 only - Oct Mon>=3 2:00 0 S ++Rule Zion 2028 max - Oct Sun>=2 2:00 0 S ++# The following rules are commented out for now, as they break older ++# versions of zic that support only signed 32-bit timestamps, i.e., ++# through 2038-01-19 03:14:07 UTC. ++#Rule Zion 2028 2053 - Oct Sun>=2 2:00 0 S ++#Rule Zion 2054 only - Oct Mon>=3 2:00 0 S ++#Rule Zion 2055 2080 - Oct Sun>=2 2:00 0 S ++#Rule Zion 2081 only - Oct Mon>=3 2:00 0 S ++#Rule Zion 2082 max - Oct Sun>=2 2:00 0 S + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Jerusalem 2:20:56 - LMT 1880 +@@ -1385,6 +1382,16 @@ + # From Arthur David Olson (2009-04-06): + # We still have Jordan switching to DST on Thursdays in 2000 and 2001. + ++# From Steffen Thorsen (2012-10-25): ++# Yesterday the government in Jordan announced that they will not ++# switch back to standard time this winter, so the will stay on DST ++# until about the same time next year (at least). ++# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950 ++# ++# From Paul Eggert (2012-10-25): ++# For now, assume this is just a one-year measure. If it becomes ++# permanent, we should move Jordan from EET to AST effective tomorrow. ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Jordan 1973 only - Jun 6 0:00 1:00 S + Rule Jordan 1973 1975 - Oct 1 0:00 0 - +@@ -1413,7 +1420,8 @@ + Rule Jordan 2003 only - Oct 24 0:00s 0 - + Rule Jordan 2004 only - Oct 15 0:00s 0 - + Rule Jordan 2005 only - Sep lastFri 0:00s 0 - +-Rule Jordan 2006 max - Oct lastFri 0:00s 0 - ++Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 - ++Rule Jordan 2013 max - Oct lastFri 0:00s 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Amman 2:23:44 - LMT 1931 + 2:00 Jordan EE%sT +@@ -2316,6 +2324,8 @@ + + # From Arthur David Olson (2011-09-20): + # 2011 transitions per http://www.timeanddate.com as of 2011-09-20. ++# From Paul Eggert (2012-10-12): ++# 2012 transitions per http://www.timeanddate.com as of 2012-10-12. + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Gaza 2:17:52 - LMT 1900 Oct +@@ -2326,7 +2336,7 @@ + 2:00 Palestine EE%sT 2011 Apr 2 12:01 + 2:00 1:00 EEST 2011 Aug 1 + 2:00 - EET 2012 Mar 30 +- 2:00 1:00 EEST 2012 Sep 28 ++ 2:00 1:00 EEST 2012 Sep 21 1:00 + 2:00 - EET + + Zone Asia/Hebron 2:20:23 - LMT 1900 Oct +@@ -2341,7 +2351,7 @@ + 2:00 - EET 2011 Aug 30 + 2:00 1:00 EEST 2011 Sep 30 3:00 + 2:00 - EET 2012 Mar 30 +- 2:00 1:00 EEST 2012 Sep 28 3:00 ++ 2:00 1:00 EEST 2012 Sep 21 1:00 + 2:00 - EET + + # Paracel Is +--- openjdk/jdk/make/sun/javazic/tzdata/australasia ++++ openjdk/jdk/make/sun/javazic/tzdata/australasia +@@ -651,6 +651,23 @@ + # Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012 + # seasons, there is not yet any indication that this trend will continue on + # a regular basis. For now, we have explicitly listed the transitions below. ++# ++# From Nicky (2012-09-10): ++# Daylight Saving Time commences on Sunday 30th September 2012 and ++# ends on Sunday 7th of April 2013. ++# ++# Please find link below for more information. ++# http://www.mcil.gov.ws/mcil_publications.html ++# ++# That publication also includes dates for Summer of 2013/4 as well ++# which give the impression of a pattern in selecting dates for the ++# future, so for now, we will guess this will continue. ++ ++# Western Samoa ++# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S ++Rule WS 2012 max - Sep lastSun 3:00 1 D ++Rule WS 2012 max - Apr Sun>=1 4:00 0 - ++# Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5 + -11:26:56 - LMT 1911 + -11:30 - SAMT 1950 # Samoa Time +@@ -658,8 +675,8 @@ + -11:00 1:00 WSDT 2011 Apr 2 4:00 + -11:00 - WST 2011 Sep 24 3:00 + -11:00 1:00 WSDT 2011 Dec 30 +- 13:00 1:00 WSDT 2012 Apr 1 4:00 +- 13:00 - WST ++ 13:00 1:00 WSDT 2012 Apr Sun>=1 4:00 ++ 13:00 WS WS%sT + + # Solomon Is + # excludes Bougainville, for which see Papua New Guinea +--- openjdk/jdk/make/sun/javazic/tzdata/northamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/northamerica +@@ -2820,6 +2820,13 @@ + # http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html + # + ++# From Steffen Thorsen (2012-11-03): ++# Radio Reloj and many other sources report that Cuba is changing back ++# to standard time on 2012-11-04: ++# http://www.radioreloj.cu/index.php/noticias-radio-reloj/36-nacionales/9961-regira-horario-normal-en-cuba-desde-el-domingo-cuatro-de-noviembre ++# From Paul Eggert (2012-11-03): ++# For now, assume the future rule is first Sunday in November. ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Cuba 1928 only - Jun 10 0:00 1:00 D + Rule Cuba 1928 only - Oct 10 0:00 0 S +@@ -2857,7 +2864,7 @@ + Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D + Rule Cuba 2011 only - Nov 13 0:00s 0 S + Rule Cuba 2012 only - Apr 1 0:00s 1:00 D +-Rule Cuba 2012 max - Oct lastSun 0:00s 0 S ++Rule Cuba 2012 max - Nov Sun>=1 0:00s 0 S + Rule Cuba 2013 max - Mar Sun>=8 0:00s 1:00 D + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +--- openjdk/jdk/make/sun/javazic/tzdata/southamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/southamerica +@@ -852,6 +852,15 @@ + # http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6 + # + ++# From Kelley Cook (2012-10-16): ++# The governor of state of Bahia in Brazil announced on Thursday that ++# due to public pressure, he is reversing the DST policy they implemented ++# last year and will not be going to Summer Time on October 21st.... ++# http://www.correio24horas.com.br/r/artigo/apos-pressoes-wagner-suspende-horario-de-verao-na-bahia ++ ++# From Rodrigo Severo (2012-10-16): ++# Tocantins state will have DST. ++# http://noticias.terra.com.br/brasil/noticias/0,,OI6232536-EI306.html + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + # Decree 20,466 (1931-10-01) +@@ -1071,7 +1080,8 @@ + -3:00 Brazil BR%sT 1990 Sep 17 + -3:00 - BRT 1995 Sep 14 + -3:00 Brazil BR%sT 2003 Sep 24 +- -3:00 - BRT ++ -3:00 - BRT 2012 Oct 21 ++ -3:00 Brazil BR%sT + # + # Alagoas (AL), Sergipe (SE) + Zone America/Maceio -2:22:52 - LMT 1914 +@@ -1090,7 +1100,8 @@ + Zone America/Bahia -2:34:04 - LMT 1914 + -3:00 Brazil BR%sT 2003 Sep 24 + -3:00 - BRT 2011 Oct 16 +- -3:00 Brazil BR%sT ++ -3:00 Brazil BR%sT 2012 Oct 21 ++ -3:00 - BRT + # + # Goias (GO), Distrito Federal (DF), Minas Gerais (MG), + # Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR), diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8009987-tzdata2013b.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8009987-tzdata2013b.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,2165 @@ +# HG changeset patch +# User peytoia +# Date 1363347351 -32400 +# Node ID d0902320c58f1b4c339e2aec3f120c9d6e3ea732 +# Parent 1f833e4211177700a66cc22a0c5a794448c1a29a +8009987: (tz) Support tzdata2013b +Reviewed-by: okutsu + +--- openjdk/jdk/make/sun/javazic/tzdata/VERSION ++++ openjdk/jdk/make/sun/javazic/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2012i ++tzdata2013b +--- openjdk/jdk/make/sun/javazic/tzdata/africa ++++ openjdk/jdk/make/sun/javazic/tzdata/africa +@@ -27,9 +27,9 @@ + + # This data is by no means authoritative; if you think you know better, + # go ahead and edit the file (and please send any changes to +-# tz@elsie.nci.nih.gov for general use in the future). ++# tz@iana.org for general use in the future). + +-# From Paul Eggert (2006-03-22): ++# From Paul Eggert (2013-02-21): + # + # A good source for time zone historical data outside the U.S. is + # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +@@ -48,6 +48,10 @@ + # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which + # I found in the UCLA library. + # ++# For data circa 1899, a common source is: ++# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94 ++# . ++# + # A reliable and entertaining source about time zones is + # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). + # +@@ -139,8 +143,12 @@ + 1:00 - WAT + + # Botswana ++# From Paul Eggert (2013-02-21): ++# Milne says they were regulated by the Cape Town Signal in 1899; ++# assume they switched to 2:00 when Cape Town did. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Gaborone 1:43:40 - LMT 1885 ++ 1:30 - SAST 1903 Mar + 2:00 - CAT 1943 Sep 19 2:00 + 2:00 1:00 CAST 1944 Mar 19 2:00 + 2:00 - CAT +@@ -212,6 +220,11 @@ + + # Egypt + ++# Milne says Cairo used 2:05:08.9, the local mean time of the Abbasizeh ++# observatory; round to nearest. Milne also says that the official time for ++# Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this ++# did not apply to Cairo, Alexandria, or Port Said. ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Egypt 1940 only - Jul 15 0:00 1:00 S + Rule Egypt 1940 only - Oct 1 0:00 0 - +@@ -352,7 +365,7 @@ + Rule Egypt 2010 only - Sep lastThu 23:00s 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Africa/Cairo 2:05:00 - LMT 1900 Oct ++Zone Africa/Cairo 2:05:09 - LMT 1900 Oct + 2:00 Egypt EE%sT + + # Equatorial Guinea +@@ -447,6 +460,20 @@ + + # Libya + ++# From Even Scharning (2012-11-10): ++# Libya set their time one hour back at 02:00 on Saturday November 10. ++# http://www.libyaherald.com/2012/11/04/clocks-to-go-back-an-hour-on-saturday/ ++# Here is an official source [in Arabic]: http://ls.ly/fb6Yc ++# ++# Steffen Thorsen forwarded a translation (2012-11-10) in ++# http://mm.icann.org/pipermail/tz/2012-November/018451.html ++# ++# From Tim Parenti (2012-11-11): ++# Treat the 2012-11-10 change as a zone change from UTC+2 to UTC+1. ++# The DST rules planned for 2013 and onward roughly mirror those of Europe ++# (either two days before them or five days after them, so as to fall on ++# lastFri instead of lastSun). ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Libya 1951 only - Oct 14 2:00 1:00 S + Rule Libya 1952 only - Jan 1 0:00 0 - +@@ -461,17 +488,21 @@ + Rule Libya 1986 only - Oct 3 0:00 0 - + Rule Libya 1987 1989 - Apr 1 0:00 1:00 S + Rule Libya 1987 1989 - Oct 1 0:00 0 - ++Rule Libya 1997 only - Apr 4 0:00 1:00 S ++Rule Libya 1997 only - Oct 4 0:00 0 - ++Rule Libya 2013 max - Mar lastFri 1:00 1:00 S ++Rule Libya 2013 max - Oct lastFri 2:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Tripoli 0:52:44 - LMT 1920 + 1:00 Libya CE%sT 1959 + 2:00 - EET 1982 + 1:00 Libya CE%sT 1990 May 4 +-# The following entries are from Shanks & Pottenger; ++# The 1996 and 1997 entries are from Shanks & Pottenger; + # the IATA SSIM data contain some obvious errors. + 2:00 - EET 1996 Sep 30 +- 1:00 - CET 1997 Apr 4 +- 1:00 1:00 CEST 1997 Oct 4 +- 2:00 - EET ++ 1:00 Libya CE%sT 1997 Oct 4 ++ 2:00 - EET 2012 Nov 10 2:00 ++ 1:00 Libya CE%sT + + # Madagascar + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -838,6 +869,41 @@ + # 3:00 am Friday, July 20, 2012 and will again be advanced by 60 minutes + # August 20, 2012 from 2:00 am. + ++# From Paul Eggert (2013-03-06): ++# Morocco's daylight-saving transitions due to Ramadan seem to be ++# announced a bit in advance. On 2012-07-11 the Moroccan government ++# announced that year's Ramadan daylight-saving transitions would be ++# 2012-07-20 and 2012-08-20; see ++# . ++# ++# To estimate what the Moroccan government will do in future years, ++# transition dates for 2013 through 2021 were determined by running ++# the following program under GNU Emacs 24.3: ++# ++# (let ((islamic-year 1434)) ++# (while (< islamic-year 1444) ++# (let ((a ++# (calendar-gregorian-from-absolute ++# (calendar-islamic-to-absolute (list 9 1 islamic-year)))) ++# (b ++# (calendar-gregorian-from-absolute ++# (calendar-islamic-to-absolute (list 10 1 islamic-year))))) ++# (insert ++# (format ++# (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 3:00\t0\t-\n" ++# "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 2:00\t1:00\tS\n") ++# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a)) ++# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b))))) ++# (setq islamic-year (+ 1 islamic-year)))) ++# ++# with the results hand-edited for 2020-2022, when the normal spring-forward ++# date falls during the estimated Ramadan. ++# ++# From 2023 through 2038 Ramadan is not predicted to overlap with ++# daylight saving time. Starting in 2039 there will be overlap again, ++# but 32-bit time_t values roll around in 2038 so for now do not worry ++# about dates after 2038. ++ + # RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S + + Rule Morocco 1939 only - Sep 12 0:00 1:00 S +@@ -863,10 +929,28 @@ + Rule Morocco 2010 only - Aug 8 0:00 0 - + Rule Morocco 2011 only - Apr 3 0:00 1:00 S + Rule Morocco 2011 only - Jul 31 0 0 - +-Rule Morocco 2012 max - Apr lastSun 2:00 1:00 S ++Rule Morocco 2012 2019 - Apr lastSun 2:00 1:00 S + Rule Morocco 2012 max - Sep lastSun 3:00 0 - + Rule Morocco 2012 only - Jul 20 3:00 0 - + Rule Morocco 2012 only - Aug 20 2:00 1:00 S ++Rule Morocco 2013 only - Jul 9 3:00 0 - ++Rule Morocco 2013 only - Aug 8 2:00 1:00 S ++Rule Morocco 2014 only - Jun 29 3:00 0 - ++Rule Morocco 2014 only - Jul 29 2:00 1:00 S ++Rule Morocco 2015 only - Jun 18 3:00 0 - ++Rule Morocco 2015 only - Jul 18 2:00 1:00 S ++Rule Morocco 2016 only - Jun 7 3:00 0 - ++Rule Morocco 2016 only - Jul 7 2:00 1:00 S ++Rule Morocco 2017 only - May 27 3:00 0 - ++Rule Morocco 2017 only - Jun 26 2:00 1:00 S ++Rule Morocco 2018 only - May 16 3:00 0 - ++Rule Morocco 2018 only - Jun 15 2:00 1:00 S ++Rule Morocco 2019 only - May 6 3:00 0 - ++Rule Morocco 2019 only - Jun 5 2:00 1:00 S ++Rule Morocco 2020 only - May 24 2:00 1:00 S ++Rule Morocco 2021 only - May 13 2:00 1:00 S ++Rule Morocco 2022 only - May 3 2:00 1:00 S ++Rule Morocco 2023 max - Apr lastSun 2:00 1:00 S + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26 +--- openjdk/jdk/make/sun/javazic/tzdata/antarctica ++++ openjdk/jdk/make/sun/javazic/tzdata/antarctica +@@ -73,10 +73,8 @@ + Rule ChileAQ 2010 only - Apr Sun>=1 3:00u 0 - + Rule ChileAQ 2011 only - May Sun>=2 3:00u 0 - + Rule ChileAQ 2011 only - Aug Sun>=16 4:00u 1:00 S +-Rule ChileAQ 2012 only - Apr Sun>=23 3:00u 0 - +-Rule ChileAQ 2012 only - Sep Sun>=2 4:00u 1:00 S +-Rule ChileAQ 2013 max - Mar Sun>=9 3:00u 0 - +-Rule ChileAQ 2013 max - Oct Sun>=9 4:00u 1:00 S ++Rule ChileAQ 2012 max - Apr Sun>=23 3:00u 0 - ++Rule ChileAQ 2012 max - Sep Sun>=2 4:00u 1:00 S + + # These rules are stolen from the `australasia' file. + Rule AusAQ 1917 only - Jan 1 0:01 1:00 - +--- openjdk/jdk/make/sun/javazic/tzdata/asia ++++ openjdk/jdk/make/sun/javazic/tzdata/asia +@@ -27,9 +27,9 @@ + + # This data is by no means authoritative; if you think you know better, + # go ahead and edit the file (and please send any changes to +-# tz@elsie.nci.nih.gov for general use in the future). ++# tz@iana.org for general use in the future). + +-# From Paul Eggert (2006-03-22): ++# From Paul Eggert (2013-02-21): + # + # A good source for time zone historical data outside the U.S. is + # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +@@ -48,6 +48,10 @@ + # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which + # I found in the UCLA library. + # ++# For data circa 1899, a common source is: ++# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94 ++# . ++# + # A reliable and entertaining source about time zones is + # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). + # +@@ -302,9 +306,12 @@ + 8:00 - BNT + + # Burma / Myanmar ++ ++# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon. ++ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon +- 6:24:36 - RMT 1920 # Rangoon Mean Time? ++ 6:24:40 - RMT 1920 # Rangoon Mean Time? + 6:30 - BURT 1942 May # Burma Time + 9:00 - JST 1945 May 3 + 6:30 - MMT # Myanmar Time +@@ -407,7 +414,8 @@ + 8:00 PRC C%sT + # Zhongyuan Time ("Central plain Time") + # most of China +-Zone Asia/Shanghai 8:05:52 - LMT 1928 ++# Milne gives 8:05:56.7; round to nearest. ++Zone Asia/Shanghai 8:05:57 - LMT 1928 + 8:00 Shang C%sT 1949 + 8:00 PRC C%sT + # Long-shu Time (probably due to Long and Shu being two names of that area) +@@ -504,6 +512,10 @@ + 8:00 PRC C%sT + + ++# Hong Kong (Xianggang) ++ ++# Milne gives 7:36:41.7; round this. ++ + # From Lee Yiu Chung (2009-10-24): + # I found there are some mistakes for the...DST rule for Hong + # Kong. [According] to the DST record from Hong Kong Observatory (actually, +@@ -570,7 +582,6 @@ + # The Japanese surrender of Hong Kong was signed 1945-09-15. + # For lack of anything better, use start of those days as the transition times. + +-# Hong Kong (Xianggang) + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule HK 1941 only - Apr 1 3:30 1:00 S + Rule HK 1941 only - Sep 30 3:30 0 - +@@ -592,7 +603,7 @@ + Rule HK 1979 only - May Sun>=8 3:30 1:00 S + Rule HK 1979 only - Oct Sun>=16 3:30 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Asia/Hong_Kong 7:36:36 - LMT 1904 Oct 30 ++Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30 + 8:00 HK HK%sT 1941 Dec 25 + 9:00 - JST 1945 Sep 15 + 8:00 HK HK%sT +@@ -669,6 +680,9 @@ + ############################################################################### + + # Cyprus ++# ++# Milne says the Eastern Telegraph Company used 2:14:00. Stick with LMT. ++# + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Cyprus 1975 only - Apr 13 0:00 1:00 S + Rule Cyprus 1975 only - Oct 12 0:00 0 - +@@ -1222,7 +1236,6 @@ + Rule Zion 2012 only - Sep 23 2:00 0 S + + # From Ephraim Silverberg (2012-10-18): +- + # Yesterday, the Interior Ministry Committee, after more than a year + # past, approved sending the proposed June 2011 changes to the Time + # Decree Law back to the Knesset for second and third (final) votes +@@ -1235,6 +1248,10 @@ + # later (i.e. at 02:00 the first Monday after October 2). + # [Rosh Hashana holidays are factored in until 2100.] + ++# From Ephraim Silverberg (2012-11-05): ++# The Knesset passed today (in second and final readings) the amendment to the ++# Time Decree Law making the changes ... law. ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D + Rule Zion 2013 2026 - Oct Sun>=2 2:00 0 S +@@ -1824,8 +1841,11 @@ + 5:45 - NPT # Nepal Time + + # Oman ++ ++# Milne says 3:54:24 was the meridian of the Muscat Tidal Observatory. ++ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Asia/Muscat 3:54:20 - LMT 1920 ++Zone Asia/Muscat 3:54:24 - LMT 1920 + 4:00 - GST + + # Pakistan +@@ -2072,8 +2092,7 @@ + # occurred before our cutoff date of 1970. + # However, as we get more information, we may need to add entries + # for parts of the West Bank as they transitioned from Israel's rules +-# to Palestine's rules. If you have more info about this, please +-# send it to tz@elsie.nci.nih.gov for incorporation into future editions. ++# to Palestine's rules. + + # From IINS News Service - Israel - 1998-03-23 10:38:07 Israel time, + # forwarded by Ephraim Silverberg: +@@ -2421,6 +2440,13 @@ + # no information + + # Sri Lanka ++ ++# From Paul Eggert (2013-02-21): ++# Milne says "Madras mean time use from May 1, 1898. Prior to this Colombo ++# mean time, 5h. 4m. 21.9s. F., was used." But 5:04:21.9 differs considerably ++# from Colombo's meridian 5:19:24, so for now ignore Milne and stick with ++# Shanks and Pottenger. ++ + # From Paul Eggert (1996-09-03): + # "Sri Lanka advances clock by an hour to avoid blackout" + # (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24, +@@ -2720,6 +2746,12 @@ + + # Vietnam + ++# From Paul Eggert (2013-02-21): ++# Milne gives 7:16:56 for the meridian of Saigon in 1899, as being ++# used in Lower Laos, Cambodia, and Annam. But this is quite a ways ++# from Saigon's location. For now, ignore this and stick with Shanks ++# and Pottenger. ++ + # From Arthur David Olson (2008-03-18): + # The English-language name of Vietnam's most populous city is "Ho Chi Min City"; + # we use Ho_Chi_Minh below to avoid a name of more than 14 characters. +@@ -2733,6 +2765,10 @@ + 7:00 - ICT + + # Yemen ++ ++# Milne says 2:59:54 was the meridian of the saluting battery at Aden, ++# and that Yemen was at 1:55:56, the meridian of the Hagia Sophia. ++ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Asia/Aden 3:00:48 - LMT 1950 ++Zone Asia/Aden 2:59:54 - LMT 1950 + 3:00 - AST +--- openjdk/jdk/make/sun/javazic/tzdata/australasia ++++ openjdk/jdk/make/sun/javazic/tzdata/australasia +@@ -269,6 +269,9 @@ + 6:30 - CCT # Cocos Islands Time + + # Fiji ++ ++# Milne gives 11:55:44 for Suva. ++ + # From Alexander Krivenyshev (2009-11-10): + # According to Fiji Broadcasting Corporation, Fiji plans to re-introduce DST + # from November 29th 2009 to April 25th 2010. +@@ -362,7 +365,7 @@ + Rule Fiji 2011 only - Mar Sun>=1 3:00 0 - + Rule Fiji 2012 max - Jan Sun>=18 3:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva ++Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva + 12:00 Fiji FJ%sT # Fiji Time + + # French Polynesia +@@ -803,9 +806,9 @@ + + # This data is by no means authoritative; if you think you know better, + # go ahead and edit the file (and please send any changes to +-# tz@elsie.nci.nih.gov for general use in the future). ++# tz@iana.org for general use in the future). + +-# From Paul Eggert (2006-03-22): ++# From Paul Eggert (2013-02-21): + # A good source for time zone historical data outside the U.S. is + # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), + # San Diego: ACS Publications, Inc. (2003). +@@ -823,6 +826,10 @@ + # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which + # I found in the UCLA library. + # ++# For data circa 1899, a common source is: ++# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94 ++# . ++# + # A reliable and entertaining source about time zones is + # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). + # +--- openjdk/jdk/make/sun/javazic/tzdata/europe ++++ openjdk/jdk/make/sun/javazic/tzdata/europe +@@ -27,7 +27,7 @@ + + # This data is by no means authoritative; if you think you know better, + # go ahead and edit the file (and please send any changes to +-# tz@elsie.nci.nih.gov for general use in the future). ++# tz@iana.org for general use in the future). + + # From Paul Eggert (2006-03-22): + # A good source for time zone historical data outside the U.S. is +@@ -53,6 +53,12 @@ + # William Willett, The Waste of Daylight, 19th edition + # (1914-03) + # ++# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94 ++# . He writes: ++# "It is requested that corrections and additions to these tables ++# may be sent to Mr. John Milne, Royal Geographical Society, ++# Savile Row, London." Nowadays please email them to tz@iana.org. ++# + # Brazil's Departamento Servico da Hora (DSH), + # + # History of Summer Time +@@ -689,6 +695,8 @@ + + # Austria + ++# Milne says Vienna time was 1:05:21. ++ + # From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and + # 1945-11-18, but the Austrian Federal Office of Metrology and + # Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged" +@@ -706,7 +714,7 @@ + Rule Austria 1980 only - Apr 6 0:00 1:00 S + Rule Austria 1980 only - Sep 28 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Europe/Vienna 1:05:20 - LMT 1893 Apr ++Zone Europe/Vienna 1:05:21 - LMT 1893 Apr + 1:00 C-Eur CE%sT 1920 + 1:00 Austria CE%sT 1940 Apr 1 2:00s + 1:00 C-Eur CE%sT 1945 Apr 2 2:00s +@@ -1262,6 +1270,21 @@ + 1:00 Germany CE%sT 1980 + 1:00 EU CE%sT + ++# From Tobias Conradi (2011-09-12): ++# Busingen , surrounded by the Swiss canton ++# Schaffhausen, did not start observing DST in 1980 as the rest of DE ++# (West Germany at that time) and DD (East Germany at that time) did. ++# DD merged into DE, the area is currently covered by code DE in ISO 3166-1, ++# which in turn is covered by the zone Europe/Berlin. ++# ++# Source for the time in Busingen 1980: ++# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3 ++ ++# From Arthur David Olson (2012-03-03): ++# Busingen and Zurich have shared clocks since 1970. ++ ++Link Europe/Zurich Europe/Busingen ++ + # Georgia + # Please see the "asia" file for Asia/Tbilisi. + # Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni) +@@ -2066,6 +2089,70 @@ + + # Russia + ++# From Alexander Krivenyshev (2011-09-15): ++# Based on last Russian Government Decree # 725 on August 31, 2011 ++# (Government document ++# ++# http://www.government.ru/gov/results/16355/print/ ++# ++# in Russian) ++# there are few corrections have to be made for some Russian time zones... ++# All updated Russian Time Zones were placed in table and translated to English ++# by WorldTimeZone.com at the link below: ++# ++# http://www.worldtimezone.com/dst_news/dst_news_russia36.htm ++# ++ ++# From Sanjeev Gupta (2011-09-27): ++# Scans of [Decree #23 of January 8, 1992] are available at: ++# ++# http://government.consultant.ru/page.aspx?1223966 ++# They are in Cyrillic letters (presumably Russian). ++ ++# From Arthur David Olson (2012-05-09): ++# Regarding the instant when clocks in time-zone-shifting parts of Russia ++# changed in September 2011: ++# ++# One source is ++# < a href="http://government.ru/gov/results/16355/> ++# http://government.ru/gov/results/16355/ ++# ++# which, according to translate.google.com, begins "Decree of August 31, ++# 2011 No 725" and contains no other dates or "effective date" information. ++# ++# Another source is ++# ++# http://www.rg.ru/2011/09/06/chas-zona-dok.html ++# ++# which, according to translate.google.com, begins "Resolution of the ++# Government of the Russian Federation on August 31, 2011 N 725" and also ++# contains "Date first official publication: September 6, 2011 Posted on: ++# in the 'RG' - Federal Issue number 5573 September 6, 2011" but which ++# does not contain any "effective date" information. ++# ++# Another source is ++# ++# http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7 ++# ++# which, in note 8, contains "Resolution #725 of August 31, 2011... ++# Effective as of after 7 days following the day of the official publication" ++# but which does not contain any reference to September 6, 2011. ++# ++# The Wikipedia article refers to ++# ++# http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896 ++# ++# which seems to copy the text of the government.ru page. ++# ++# Tobias Conradi combines Wikipedia's ++# "as of after 7 days following the day of the official publication" ++# with www.rg.ru's "Date of first official publication: September 6, 2011" to get ++# September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias Conradi notes). ++# ++# None of the sources indicates a time of day for changing clocks. ++# ++# Go with 2011-09-13 0:00s. ++ + # From Paul Eggert (2006-03-22): + # Except for Moscow after 1919-07-01, I invented the time zone abbreviations. + # Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991, +@@ -2293,14 +2380,32 @@ + # [parts of] Respublika Sakha (Yakutiya). + + # From Oscar van Vlijmen (2009-11-29): +-# The Sakha districts are: Bulunskij, Verkhoyanskij, Tomponskij, Ust'-Majskij, +-# Ust'-Yanskij. ++# The Sakha districts are: Bulunskij, Verkhoyanskij, ... Ust'-Yanskij. + Zone Asia/Vladivostok 8:47:44 - LMT 1922 Nov 15 + 9:00 - VLAT 1930 Jun 21 # Vladivostok Time + 10:00 Russia VLA%sT 1991 Mar 31 2:00s + 9:00 Russia VLA%sST 1992 Jan 19 2:00s + 10:00 Russia VLA%sT 2011 Mar 27 2:00s + 11:00 - VLAT ++ ++# From Arthur David Olson (2012-05-09): ++# Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time ++# in 2011. ++# ++# From Paul Eggert (2012-11-25): ++# Shanks and Pottenger (2003) has Khandyga on Yakutsk time. ++# Make a wild guess that it switched to Vladivostok time in 2004. ++# This transition is no doubt wrong, but we have no better info. ++# ++Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15 ++ 8:00 - YAKT 1930 Jun 21 # Yakutsk Time ++ 9:00 Russia YAK%sT 1991 Mar 31 2:00s ++ 8:00 Russia YAK%sT 1992 Jan 19 2:00s ++ 9:00 Russia YAK%sT 2004 ++ 10:00 Russia VLA%sT 2011 Mar 27 2:00s ++ 11:00 - VLAT 2011 Sep 13 0:00s # Decree 725? ++ 10:00 - YAKT ++ + # + # Sakhalinskaya oblast'. + # The Zone name should be Yuzhno-Sakhalinsk, but that's too long. +@@ -2319,14 +2424,26 @@ + + # From Oscar van Vlijmen (2009-11-29): + # The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij, +-# Nizhnekolymskij, Ojmyakonskij, Srednekolymskij. ++# Nizhnekolymskij, ... Srednekolymskij. + Zone Asia/Magadan 10:03:12 - LMT 1924 May 2 + 10:00 - MAGT 1930 Jun 21 # Magadan Time + 11:00 Russia MAG%sT 1991 Mar 31 2:00s + 10:00 Russia MAG%sT 1992 Jan 19 2:00s + 11:00 Russia MAG%sT 2011 Mar 27 2:00s + 12:00 - MAGT +-# ++ ++# From Arthur David Olson (2012-05-09): ++# Ojmyakonskij and the Kuril Islands switched from ++# Magadan time to Vladivostok time in 2011. ++Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15 ++ 8:00 - YAKT 1930 Jun 21 # Yakutsk Time ++ 9:00 Russia YAKT 1981 Apr 1 ++ 11:00 Russia MAG%sT 1991 Mar 31 2:00s ++ 10:00 Russia MAG%sT 1992 Jan 19 2:00s ++ 11:00 Russia MAG%sT 2011 Mar 27 2:00s ++ 12:00 - MAGT 2011 Sep 13 0:00s # Decree 725? ++ 11:00 - VLAT ++ + # From Oscar van Vlijmen (2001-08-25): [This region consists of] + # Kamchatskaya oblast', Koryakskij avtonomnyj okrug. + # +--- openjdk/jdk/make/sun/javazic/tzdata/northamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/northamerica +@@ -29,7 +29,7 @@ + + # This data is by no means authoritative; if you think you know better, + # go ahead and edit the file (and please send any changes to +-# tz@elsie.nci.nih.gov for general use in the future). ++# tz@iana.org for general use in the future). + + # From Paul Eggert (1999-03-22): + # A reliable and entertaining source about time zones is +@@ -1042,6 +1042,9 @@ + # William Willett, The Waste of Daylight, 19th edition + # (1914-03) + # ++# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94 ++# . ++# + # See the `europe' file for Greenland. + + # Canada +@@ -2577,6 +2580,8 @@ + + # Bahamas + # ++# For 1899 Milne gives -5:09:29.5; round that. ++# + # From Sue Williams (2006-12-07): + # The Bahamas announced about a month ago that they plan to change their DST + # rules to sync with the U.S. starting in 2007.... +@@ -2586,11 +2591,14 @@ + Rule Bahamas 1964 1975 - Oct lastSun 2:00 0 S + Rule Bahamas 1964 1975 - Apr lastSun 2:00 1:00 D + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone America/Nassau -5:09:24 - LMT 1912 Mar 2 ++Zone America/Nassau -5:09:30 - LMT 1912 Mar 2 + -5:00 Bahamas E%sT 1976 + -5:00 US E%sT + + # Barbados ++ ++# For 1899 Milne gives -3:58:29.2; round that. ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Barb 1977 only - Jun 12 2:00 1:00 D + Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S +@@ -2598,8 +2606,8 @@ + Rule Barb 1979 only - Sep 30 2:00 0 S + Rule Barb 1980 only - Sep 25 2:00 0 S + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone America/Barbados -3:58:28 - LMT 1924 # Bridgetown +- -3:58:28 - BMT 1932 # Bridgetown Mean Time ++Zone America/Barbados -3:58:29 - LMT 1924 # Bridgetown ++ -3:58:29 - BMT 1932 # Bridgetown Mean Time + -4:00 Barb A%sT + + # Belize +@@ -2617,6 +2625,9 @@ + + # Bermuda + ++# For 1899 Milne gives -4:19:18.3 as the meridian of the clock tower, ++# Bermuda dockyard, Ireland I; round that. ++ + # From Dan Jones, reporting in The Royal Gazette (2006-06-26): + + # Next year, however, clocks in the US will go forward on the second Sunday +@@ -2626,7 +2637,7 @@ + # http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135 + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Atlantic/Bermuda -4:19:04 - LMT 1930 Jan 1 2:00 # Hamilton ++Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton + -4:00 - AST 1974 Apr 28 2:00 + -4:00 Bahamas A%sT 1976 + -4:00 US A%sT +@@ -2638,6 +2649,9 @@ + -5:00 - EST + + # Costa Rica ++ ++# Milne gives -5:36:13.3 as San Jose mean time; round to nearest. ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D + Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S +@@ -2648,14 +2662,19 @@ + Rule CR 1992 only - Mar 15 0:00 0 S + # There are too many San Joses elsewhere, so we'll use `Costa Rica'. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose +- -5:36:20 - SJMT 1921 Jan 15 # San Jose Mean Time ++Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose ++ -5:36:13 - SJMT 1921 Jan 15 # San Jose Mean Time + -6:00 CR C%sT + # Coco + # no information; probably like America/Costa_Rica + + # Cuba + ++# From Paul Eggert (2013-02-21): ++# Milne gives -5:28:50.45 for the observatory at Havana, -5:29:23.57 ++# for the port, and -5:30 for meteorological observations. ++# For now, stick with Shanks & Pottenger. ++ + # From Arthur David Olson (1999-03-29): + # The 1999-03-28 exhibition baseball game held in Havana, Cuba, between + # the Cuban National Team and the Baltimore Orioles was carried live on +@@ -3004,24 +3023,21 @@ + # apparently using the same start and end date as USA/Canada. + # So this means they have already changed their time. + # +-# (Sources in French): +-# + # http://www.alterpresse.org/spip.php?article12510 +-# +-# + # http://radiovision2000haiti.net/home/?p=13253 +-# + # +-# Our coverage: +-# +-# http://www.timeanddate.com/news/time/haiti-dst-2012.html +-# +- + # From Arthur David Olson (2012-03-11): + # The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to + # 3:00 a.m. rather than the traditional Haitian jump at midnight. +-# Assume a US-style fall back as well XXX. +-# Do not yet assume that the change carries forward past 2012 XXX. ++# Assume a US-style fall back as well. ++ ++# From Steffen Thorsen (2013-03-10): ++# It appears that Haiti is observing DST this year as well, same rules ++# as US/Canada. They did it last year as well, and it looks like they ++# are going to observe DST every year now... ++# ++# http://radiovision2000haiti.net/public/haiti-avis-changement-dheure-dimanche/ ++# http://www.canalplushaiti.net/?p=6714 + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule Haiti 1983 only - May 8 0:00 1:00 D +@@ -3033,8 +3049,8 @@ + Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S + Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D + Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S +-Rule Haiti 2012 only - Mar Sun>=8 2:00 1:00 D +-Rule Haiti 2012 only - Nov Sun>=1 2:00 0 S ++Rule Haiti 2012 max - Mar Sun>=8 2:00 1:00 D ++Rule Haiti 2012 max - Nov Sun>=1 2:00 0 S + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Port-au-Prince -4:49:20 - LMT 1890 + -4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT +--- openjdk/jdk/make/sun/javazic/tzdata/southamerica ++++ openjdk/jdk/make/sun/javazic/tzdata/southamerica +@@ -27,13 +27,17 @@ + + # This data is by no means authoritative; if you think you know better, + # go ahead and edit the file (and please send any changes to +-# tz@elsie.nci.nih.gov for general use in the future). ++# tz@iana.org for general use in the future). + + # From Paul Eggert (2006-03-22): + # A good source for time zone historical data outside the U.S. is + # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), + # San Diego: ACS Publications, Inc. (2003). + # ++# For data circa 1899, a common source is: ++# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94 ++# . ++# + # Gwillim Law writes that a good source + # for recent time zone data is the International Air Transport + # Association's Standard Schedules Information Manual (IATA SSIM), +@@ -404,21 +408,11 @@ + # + # is the official page for the Province Government). + # +-# There's also a note in only one of the major national papers (La Nación) at +-# ++# There's also a note in only one of the major national papers ... + # http://www.lanacion.com.ar/nota.asp?nota_id=1107912 +-# + # +-# The press release says: +-# (...) anunció que el próximo domingo a las 00:00 los puntanos deberán +-# atrasar una hora sus relojes. +-# +-# A partir de entonces, San Luis establecerá el huso horario propio de +-# la Provincia. De esta manera, durante el periodo del calendario anual +-# 2009, el cambio horario quedará comprendido entre las 00:00 del tercer +-# domingo de marzo y las 24:00 del segundo sábado de octubre. +-# Quick&dirty translation +-# (...) announced that next Sunday, at 00:00, Puntanos (the San Luis ++# The press release says [quick and dirty translation]: ++# ... announced that next Sunday, at 00:00, Puntanos (the San Luis + # inhabitants) will have to turn back one hour their clocks + # + # Since then, San Luis will establish its own Province timezone. Thus, +@@ -480,6 +474,9 @@ + # rules...San Luis is still using "Western ARgentina Time" and it got + # stuck on Summer daylight savings time even though the summer is over. + ++# From Paul Eggert (2013-02-21): ++# Milne says Cordoba time was -4:16:48.2. Round to the nearest second. ++ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + # + # Buenos Aires (BA), Capital Federal (CF), +@@ -835,9 +832,9 @@ + + # From Guilherme Bernardes Rodrigues (2011-10-07): + # There is news in the media, however there is still no decree about it. +-# I just send a e-mail to Zulmira Brandão at ++# I just send a e-mail to Zulmira Brandao at + # http://pcdsh01.on.br/ the +-# oficial agency about time in Brazil, and she confirmed that the old rule is ++# official agency about time in Brazil, and she confirmed that the old rule is + # still in force. + + # From Guilherme Bernardes Rodrigues (2011-10-14) +@@ -1266,9 +1263,13 @@ + # b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is, + # at 23:59:59, instead of passing to 0:00, the time should be adjusted to be + # 01:00 on September 2. +-# +-# Note that...this is yet another "temporary" change that will be reevaluated +-# AGAIN in 2013. ++ ++# From Steffen Thorsen (2013-02-15): ++# According to several news sources, Chile has extended DST this year, ++# they will end DST later and start DST earlier than planned. They ++# hope to save energy. The new end date is 2013-04-28 00:00 and new ++# start date is 2013-09-08 00:00.... ++# http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm + + # NOTE: ChileAQ rules for Antarctic bases are stored separately in the + # 'antarctica' file. +@@ -1311,10 +1312,8 @@ + Rule Chile 2010 only - Apr Sun>=1 3:00u 0 - + Rule Chile 2011 only - May Sun>=2 3:00u 0 - + Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S +-Rule Chile 2012 only - Apr Sun>=23 3:00u 0 - +-Rule Chile 2012 only - Sep Sun>=2 4:00u 1:00 S +-Rule Chile 2013 max - Mar Sun>=9 3:00u 0 - +-Rule Chile 2013 max - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 2012 max - Apr Sun>=23 3:00u 0 - ++Rule Chile 2012 max - Sep Sun>=2 4:00u 1:00 S + # IATA SSIM anomalies: (1992-02) says 1992-03-14; + # (1996-09) says 1998-03-08. Ignore these. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -1336,17 +1335,23 @@ + # San Felix, and Antarctic bases, are like America/Santiago. + + # Colombia ++ ++# Milne gives 4:56:16.4 for Bogota time in 1899; round to nearest. He writes, ++# "A variation of fifteen minutes in the public clocks of Bogota is not rare." ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule CO 1992 only - May 3 0:00 1:00 S + Rule CO 1993 only - Apr 4 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone America/Bogota -4:56:20 - LMT 1884 Mar 13 +- -4:56:20 - BMT 1914 Nov 23 # Bogota Mean Time ++Zone America/Bogota -4:56:16 - LMT 1884 Mar 13 ++ -4:56:16 - BMT 1914 Nov 23 # Bogota Mean Time + -5:00 CO CO%sT # Colombia Time + # Malpelo, Providencia, San Andres + # no information; probably like America/Bogota + + # Curacao ++ ++# Milne gives 4:35:46.9 for Curacao mean time; round to nearest. + # + # From Paul Eggert (2006-03-22): + # Shanks & Pottenger say that The Bottom and Philipsburg have been at +@@ -1363,7 +1368,7 @@ + # though, as far as we know. + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone America/Curacao -4:35:44 - LMT 1912 Feb 12 # Willemstad ++Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad + -4:30 - ANT 1965 # Netherlands Antilles Time + -4:00 - AST + +@@ -1377,6 +1382,8 @@ + + # Ecuador + # ++# Milne says the Sentral and South American Telegraph Company used -5:24:15. ++# + # From Paul Eggert (2007-03-04): + # Apparently Ecuador had a failed experiment with DST in 1992. + # (2007-02-27) and +@@ -1583,6 +1590,15 @@ + # ... + Rule Para 2010 max - Oct Sun>=1 0:00 1:00 S + Rule Para 2010 max - Apr Sun>=8 0:00 0 - ++# ++# From Steffen Thorsen (2013-03-07): ++# Paraguay will end DST on 2013-03-24 00:00.... ++# They do not tell if this will be a permanent change or just this year.... ++# http://www.ande.gov.py/interna.php?id=1075 ++# ++# From Paul Eggert (2013-03-07): ++# For now, assume it's just this year. ++Rule Para 2013 only - Mar 24 0:00 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Asuncion -3:50:40 - LMT 1890 +--- openjdk/jdk/make/sun/javazic/tzdata/zone.tab ++++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab +@@ -182,7 +182,8 @@ + CX -1025+10543 Indian/Christmas + CY +3510+03322 Asia/Nicosia + CZ +5005+01426 Europe/Prague +-DE +5230+01322 Europe/Berlin ++DE +5230+01322 Europe/Berlin most locations ++DE +4742+00841 Europe/Busingen Busingen + DJ +1136+04309 Africa/Djibouti + DK +5540+01235 Europe/Copenhagen + DM +1518-06124 America/Dominica +@@ -364,8 +365,10 @@ + RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River + RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal + RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River ++RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky + RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River + RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island ++RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky + RU +5934+15048 Asia/Magadan Moscow+08 - Magadan + RU +5301+15839 Asia/Kamchatka Moscow+08 - Kamchatka + RU +6445+17729 Asia/Anadyr Moscow+08 - Bering Sea +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java +@@ -75,6 +75,8 @@ + "Central European Summer Time", "CEST"}; + String CHAST[] = new String[] {"Chatham Standard Time", "CHAST", + "Chatham Daylight Time", "CHADT"}; ++ String ChST[] = new String[] {"Chamorro Standard Time", "ChST", ++ "Chamorro Daylight Time", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Central Indonesia Time", "CIT", +@@ -161,6 +163,8 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Pacific Standard Time", "PST", + "Pacific Daylight Time", "PDT"}; ++ String SAMOA[] = new String[] {"Samoa Standard Time", "SST", ++ "Samoa Daylight Time", "SDT"}; + String SAST[] = new String[] {"South Africa Standard Time", "SAST", + "South Africa Summer Time", "SAST"}; + String SBT[] = new String[] {"Solomon Is. Time", "SBT", +@@ -175,6 +179,14 @@ + "Turkmenistan Summer Time", "TMST"}; + String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT", + "Ulaanbaatar Summer Time", "ULAST"}; ++ String UTC[] = new String[] {"Coordinated Universal Time", "UTC", ++ "Coordinated Universal Time", "UTC"}; ++ String UZT[] = new String[] {"Uzbekistan Time", "UZT", ++ "Uzbekistan Summer Time", "UZST"}; ++ String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST", ++ "Eastern Summer Time (Victoria)", "EST"}; ++ String VLAT[] = new String[] {"Vladivostok Time", "VLAT", ++ "Vladivostok Summer Time", "VLAST"}; + String WART[] = new String[] {"Western Argentine Time", "WART", + "Western Argentine Summer Time", "WARST"}; + String WAT[] = new String[] {"Western African Time", "WAT", +@@ -185,18 +197,10 @@ + "West Indonesia Summer Time", "WIST"}; + String WST_AUS[] = new String[] {"Western Standard Time (Australia)", "WST", + "Western Summer Time (Australia)", "WST"}; +- String SAMOA[] = new String[] {"Samoa Standard Time", "SST", +- "Samoa Daylight Time", "SDT"}; + String WST_SAMOA[] = new String[] {"West Samoa Time", "WST", + "West Samoa Daylight Time", "WSDT"}; +- String ChST[] = new String[] {"Chamorro Standard Time", "ChST", +- "Chamorro Daylight Time", "ChDT"}; +- String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST", +- "Eastern Summer Time (Victoria)", "EST"}; +- String UTC[] = new String[] {"Coordinated Universal Time", "UTC", +- "Coordinated Universal Time", "UTC"}; +- String UZT[] = new String[] {"Uzbekistan Time", "UZT", +- "Uzbekistan Summer Time", "UZST"}; ++ String YAKT[] = new String[] {"Yakutsk Time", "YAKT", ++ "Yakutsk Summer Time", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, +@@ -287,7 +291,7 @@ + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, +- {"Africa/Tripoli", EET}, ++ {"Africa/Tripoli", CET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, +@@ -533,6 +537,7 @@ + {"Asia/Kashgar", CTT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, ++ {"Asia/Khandyga", YAKT}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT", + "Krasnoyarsk Summer Time", "KRAST"}}, +@@ -581,11 +586,10 @@ + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", CTT}, ++ {"Asia/Ust-Nera", VLAT}, + {"Asia/Vientiane", ICT}, +- {"Asia/Vladivostok", new String[] {"Vladivostok Time", "VLAT", +- "Vladivostok Summer Time", "VLAST"}}, +- {"Asia/Yakutsk", new String[] {"Yakutsk Time", "YAKT", +- "Yakutsk Summer Time", "YAKST"}}, ++ {"Asia/Vladivostok", VLAT}, ++ {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"Yekaterinburg Time", "YEKT", + "Yekaterinburg Summer Time", "YEKST"}}, + {"Asia/Yerevan", ARMT}, +@@ -669,6 +673,7 @@ + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, ++ {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, +@@ -748,7 +753,7 @@ + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, +- {"Libya", EET}, ++ {"Libya", CET}, + {"MET", new String[] {"Middle Europe Time", "MET", + "Middle Europe Summer Time", "MEST"}}, + {"Mexico/BajaNorte", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java +@@ -75,6 +75,8 @@ + "Mitteleurop\u00e4ische Sommerzeit", "MESZ"}; + String CHAST[] = new String[] {"Chatham Normalzeit", "CHAST", + "Chatham Sommerzeit", "CHADT"}; ++ String ChST[] = new String[] {"Chamorro Normalzeit", "ChST", ++ "Chamorro Sommerzeit", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Zentralindonesische Zeit", "CIT", +@@ -161,6 +163,8 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Pazifische Normalzeit", "PST", + "Pazifische Sommerzeit", "PDT"}; ++ String SAMOA[] = new String[] {"Samoa Normalzeit", "SST", ++ "Samoa Sommerzeit", "SDT"}; + String SAST[] = new String[] {"S\u00fcdafrikanische Normalzeit", "SAST", + "S\u00fcdafrikanische Sommerzeit", "SAST"}; + String SBT[] = new String[] {"Salomoninseln Zeit", "SBT", +@@ -175,6 +179,14 @@ + "Turkmenische Sommerzeit", "TMST"}; + String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT", + "Ulaanbaatar Sommerzeit", "ULAST"}; ++ String UTC[] = new String[] {"Koordinierte Universalzeit", "UTC", ++ "Koordinierte Universalzeit", "UTC"}; ++ String UZT[] = new String[] {"Usbekistan Zeit", "UZT", ++ "Usbekistan Sommerzeit", "UZST"}; ++ String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST", ++ "\u00d6stliche Sommerzeit (Victoria)", "EST"}; ++ String VLAT[] = new String[] {"Wladiwostok Zeit", "VLAT", ++ "Wladiwostok Sommerzeit", "VLAST"}; + String WART[] = new String[] {"Westargentinische Zeit", "WART", + "Westargentinische Sommerzeit", "WARST"}; + String WAT[] = new String[] {"Westafrikanische Zeit", "WAT", +@@ -185,18 +197,10 @@ + "Westindonesische Sommerzeit", "WIST"}; + String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "WST", + "Westliche Sommerzeit (Australien)", "WST"}; +- String SAMOA[] = new String[] {"Samoa Normalzeit", "SST", +- "Samoa Sommerzeit", "SDT"}; + String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WST", + "West Samoa Sommerzeit", "WSDT"}; +- String ChST[] = new String[] {"Chamorro Normalzeit", "ChST", +- "Chamorro Sommerzeit", "ChDT"}; +- String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST", +- "\u00d6stliche Sommerzeit (Victoria)", "EST"}; +- String UTC[] = new String[] {"Koordinierte Universalzeit", "UTC", +- "Koordinierte Universalzeit", "UTC"}; +- String UZT[] = new String[] {"Usbekistan Zeit", "UZT", +- "Usbekistan Sommerzeit", "UZST"}; ++ String YAKT[] = new String[] {"Jakutsk Zeit", "YAKT", ++ "Jakutsk Sommerzeit", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, +@@ -287,7 +291,7 @@ + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, +- {"Africa/Tripoli", EET}, ++ {"Africa/Tripoli", CET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, +@@ -533,6 +537,7 @@ + {"Asia/Kashgar", CTT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, ++ {"Asia/Khandyga", YAKT}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", new String[] {"Krasnojarsker Zeit", "KRAT", + "Krasnojarsker Sommerzeit", "KRAST"}}, +@@ -581,11 +586,10 @@ + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", CTT}, ++ {"Asia/Ust-Nera", VLAT}, + {"Asia/Vientiane", ICT}, +- {"Asia/Vladivostok", new String[] {"Wladiwostok Zeit", "VLAT", +- "Wladiwostok Sommerzeit", "VLAST"}}, +- {"Asia/Yakutsk", new String[] {"Jakutsk Zeit", "YAKT", +- "Jakutsk Sommerzeit", "YAKST"}}, ++ {"Asia/Vladivostok", VLAT}, ++ {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"Jekaterinburger Zeit", "YEKT", + "Jekaterinburger Sommerzeit", "YEKST"}}, + {"Asia/Yerevan", ARMT}, +@@ -669,6 +673,7 @@ + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, ++ {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, +@@ -748,7 +753,7 @@ + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, +- {"Libya", EET}, ++ {"Libya", CET}, + {"MET", new String[] {"Zentraleurop\u00e4ische Zeit", "MET", + "Zentraleurop\u00e4ische Sommerzeit", "MEST"}}, + {"Mexico/BajaNorte", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java +@@ -75,6 +75,8 @@ + "Hora de verano de Europa Central", "CEST"}; + String CHAST[] = new String[] {"Hora est\u00e1ndar de Chatham", "CHAST", + "Hora de verano de Chatham", "CHADT"}; ++ String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST", ++ "Hora de verano de Chamorro", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Hora de Indonesia Central", "CIT", +@@ -161,6 +163,8 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST", + "Hora de verano del Pac\u00edfico", "PDT"}; ++ String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST", ++ "Hora de verano de Samoa", "SDT"}; + String SAST[] = new String[] {"Hora est\u00e1ndar de Sud\u00e1frica", "SAST", + "Hora de verano de Sud\u00e1frica", "SAST"}; + String SBT[] = new String[] {"Hora de las Islas Solomon", "SBT", +@@ -175,6 +179,14 @@ + "Hora de verano de Turkmenist\u00e1n", "TMST"}; + String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT", + "Hora de verano de Ulan Bator", "ULAST"}; ++ String UTC[] = new String[] {"Hora Universal Coordinada", "UTC", ++ "Hora Universal Coordinada", "UTC"}; ++ String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT", ++ "Hora de verano de Uzbekist\u00e1n", "UZST"}; ++ String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST", ++ "Hora de verano del Este (Victoria)", "EST"}; ++ String VLAT[] = new String[] {"Hora de Vladivostok", "VLAT", ++ "Hora de verano de Vladivostok", "VLAST"}; + String WART[] = new String[] {"Hora de Argentina Occidental", "WART", + "Hora de verano de Argentina Occidental", "WARST"}; + String WAT[] = new String[] {"Hora de \u00c1frica Occidental", "WAT", +@@ -185,18 +197,10 @@ + "Indonesia Hora de verano de Indonesia Occidental", "WIST"}; + String WST_AUS[] = new String[] {"Hora est\u00e1ndar Occidental (Australia)", "WST", + "Hora de verano Occidental (Australia)", "WST"}; +- String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST", +- "Hora de verano de Samoa", "SDT"}; + String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST", + "Hora de verano de Samoa Occidental", "WSDT"}; +- String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST", +- "Hora de verano de Chamorro", "ChDT"}; +- String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST", +- "Hora de verano del Este (Victoria)", "EST"}; +- String UTC[] = new String[] {"Hora Universal Coordinada", "UTC", +- "Hora Universal Coordinada", "UTC"}; +- String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT", +- "Hora de verano de Uzbekist\u00e1n", "UZST"}; ++ String YAKT[] = new String[] {"Hora de Yakutsk", "YAKT", ++ "Hora de verano de Yakutsk", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, +@@ -287,7 +291,7 @@ + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, +- {"Africa/Tripoli", EET}, ++ {"Africa/Tripoli", CET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, +@@ -533,6 +537,7 @@ + {"Asia/Kashgar", CTT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, ++ {"Asia/Khandyga", YAKT}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", new String[] {"Hora de Krasnoyarsk", "KRAT", + "Hora de verano de Krasnoyarsk", "KRAST"}}, +@@ -581,11 +586,10 @@ + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", CTT}, ++ {"Asia/Ust-Nera", VLAT}, + {"Asia/Vientiane", ICT}, +- {"Asia/Vladivostok", new String[] {"Hora de Vladivostok", "VLAT", +- "Hora de verano de Vladivostok", "VLAST"}}, +- {"Asia/Yakutsk", new String[] {"Hora de Yakutsk", "YAKT", +- "Hora de verano de Yakutsk", "YAKST"}}, ++ {"Asia/Vladivostok", VLAT}, ++ {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"Hora de Ekaterinburgo", "YEKT", + "Hora de verano de Ekaterinburgo", "YEKST"}}, + {"Asia/Yerevan", ARMT}, +@@ -669,6 +673,7 @@ + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, ++ {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, +@@ -748,7 +753,7 @@ + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, +- {"Libya", EET}, ++ {"Libya", CET}, + {"MET", new String[] {"Hora de Europa Central", "MET", + "Hora de verano de Europa Central", "MEST"}}, + {"Mexico/BajaNorte", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java +@@ -48,43 +48,45 @@ + String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "CST", + "Heure d'\u00e9t\u00e9 d'Australie centrale (Australie du sud)", "CST"}; + String AGT[] = new String[] {"Heure D'Argentine", "ART", +- "Heure d'\u00e9t\u00e9 D'Argentine", "ARST"} ; ++ "Heure d'\u00e9t\u00e9 D'Argentine", "ARST"}; + String AKST[] = new String[] {"Heure normale d'Alaska", "AKST", +- "Heure avanc\u00e9e d'Alaska", "AKDT"} ; ++ "Heure avanc\u00e9e d'Alaska", "AKDT"}; + String AMT[] = new String[] {"Heure normale d'Amazonie", "AMT", +- "Heure d'\u00e9t\u00e9 d'Amazonie", "AMST"} ; ++ "Heure d'\u00e9t\u00e9 d'Amazonie", "AMST"}; + String ARAST[] = new String[] {"Heure normale d'Arabie", "AST", +- "Heure avanc\u00e9e d'Arabie", "ADT"} ; ++ "Heure avanc\u00e9e d'Arabie", "ADT"}; + String ARMT[] = new String[] {"Heure d'Arm\u00e9nie", "AMT", +- "Heure d'\u00e9t\u00e9 d'Arm\u00e9nie", "AMST"} ; ++ "Heure d'\u00e9t\u00e9 d'Arm\u00e9nie", "AMST"}; + String AST[] = new String[] {"Heure normale de l'Atlantique", "AST", +- "Heure avanc\u00e9e de l'Atlantique", "ADT"} ; ++ "Heure avanc\u00e9e de l'Atlantique", "ADT"}; + String BDT[] = new String[] {"Heure du Bangladesh", "BDT", +- "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"} ; ++ "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"}; + String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "EST", + "Heure d'\u00e9t\u00e9 d'Australie orientale (Queensland)", "EST"}; + String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST", + "Heure d'\u00e9t\u00e9 d'Australie centrale(Australie du sud/Nouvelle-Galles du sud)", "CST"}; + String BRT[] = new String[] {"Heure du Br\u00e9sil", "BRT", +- "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"} ; ++ "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"}; + String BTT[] = new String[] {"Heure du Bhoutan", "BTT", +- "Heure d'\u00e9t\u00e9 du Bhoutan", "BTST"} ; ++ "Heure d'\u00e9t\u00e9 du Bhoutan", "BTST"}; + String CAT[] = new String[] {"Heure d'Afrique centrale", "CAT", +- "Heure d'\u00e9t\u00e9 d'Afrique centrale", "CAST"} ; ++ "Heure d'\u00e9t\u00e9 d'Afrique centrale", "CAST"}; + String CET[] = new String[] {"Heure d'Europe centrale", "CET", +- "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"} ; ++ "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"}; + String CHAST[] = new String[] {"Heure standard de Chatham", "CHAST", + "Heure avanc\u00e9e de Chatham", "CHADT"}; ++ String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST", ++ "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "CIT", + "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie centrale", "CIST"}; + String CLT[] = new String[] {"Heure du Chili", "CLT", +- "Heure d'\u00e9t\u00e9 du Chili", "CLST"} ; ++ "Heure d'\u00e9t\u00e9 du Chili", "CLST"}; + String CST[] = new String[] {"Heure normale du Centre", "CST", +- "Heure avanc\u00e9e du Centre", "CDT"} ; ++ "Heure avanc\u00e9e du Centre", "CDT"}; + String CTT[] = new String[] {"Heure normale de Chine", "CST", +- "Heure avanc\u00e9e de Chine", "CDT"} ; ++ "Heure avanc\u00e9e de Chine", "CDT"}; + String CUBA[] = new String[] {"Heure standard de Cuba", "CST", + "Heure d'\u00e9t\u00e9 de Cuba", "CDT"}; + String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST", +@@ -92,17 +94,17 @@ + String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT", + "Heure d'\u00e9t\u00e9 irlandaise", "IST"}; + String EAT[] = new String[] {"Heure d'Afrique de l'Est", "EAT", +- "Heure d'\u00e9t\u00e9 d'Afrique de l'Est", "EAST"} ; ++ "Heure d'\u00e9t\u00e9 d'Afrique de l'Est", "EAST"}; + String EASTER[] = new String[] {"Heure de l'Ile de P\u00e2ques", "EAST", + "Heure d'\u00e9t\u00e9 de l'Ile de P\u00e2ques", "EASST"}; + String EET[] = new String[] {"Heure d'Europe de l'Est", "EET", +- "Heure d'\u00e9t\u00e9 d'Europe de l'Est", "EEST"} ; ++ "Heure d'\u00e9t\u00e9 d'Europe de l'Est", "EEST"}; + String EGT[] = new String[] {"Heure du Groenland de l'Est", "EGT", +- "Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"} ; ++ "Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"}; + String EST[] = new String[] {"Heure normale de l'Est", "EST", +- "Heure avanc\u00e9e de l'Est", "EDT"} ; ++ "Heure avanc\u00e9e de l'Est", "EDT"}; + String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST", +- "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"} ; ++ "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"}; + String FET[] = new String[] {"Further-eastern European Time", "FET", + "Further-eastern European Summer Time", "FEST"}; + String GHMT[] = new String[] {"Heure du Ghana", "GMT", +@@ -110,29 +112,29 @@ + String GAMBIER[] = new String[] {"Heure de Gambi", "GAMT", + "Heure d'\u00e9t\u00e9 de Gambi", "GAMST"}; + String GMT[] = new String[] {"Heure de Greenwich", "GMT", +- "Heure de Greenwich", "GMT"} ; ++ "Heure de Greenwich", "GMT"}; + String GMTBST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT", + "Heure d'\u00e9t\u00e9 britannique", "BST"}; + String GST[] = new String[] {"Heure normale du Golfe", "GST", +- "Heure avanc\u00e9e du Golfe", "GDT"} ; ++ "Heure avanc\u00e9e du Golfe", "GDT"}; + String HAST[] = new String[] {"Heure normale d'Hawa\u00ef-Al\u00e9outiennes", "HAST", +- "Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT"} ; ++ "Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT"}; + String HKT[] = new String[] {"Heure de Hong Kong", "HKT", + "Heure d'\u00e9t\u00e9 de Hong Kong", "HKST"}; + String HST[] = new String[] {"Heure normale d'Hawa\u00ef", "HST", +- "Heure avanc\u00e9e d'Hawa\u00ef", "HDT"} ; ++ "Heure avanc\u00e9e d'Hawa\u00ef", "HDT"}; + String ICT[] = new String[] {"Heure d'Indochine", "ICT", +- "Heure d'\u00e9t\u00e9 d'Indochine", "ICST"} ; ++ "Heure d'\u00e9t\u00e9 d'Indochine", "ICST"}; + String IRT[] = new String[] {"Heure normale d'Iran", "IRST", +- "Heure avanc\u00e9e d'Iran", "IRDT"} ; ++ "Heure avanc\u00e9e d'Iran", "IRDT"}; + String ISRAEL[] = new String[] {"Heure standard d'Isra\u00ebl", "IST", + "Heure avanc\u00e9e d'Isra\u00ebl", "IDT"}; + String IST[] = new String[] {"Heure normale d'Inde", "IST", +- "Heure avanc\u00e9e d'Inde", "IDT"} ; ++ "Heure avanc\u00e9e d'Inde", "IDT"}; + String JST[] = new String[] {"Heure normale du Japon", "JST", +- "Heure avanc\u00e9e du Japon", "JDT"} ; ++ "Heure avanc\u00e9e du Japon", "JDT"}; + String KST[] = new String[] {"Heure normale de Cor\u00e9e", "KST", +- "Heure avanc\u00e9e de Cor\u00e9e", "KDT"} ; ++ "Heure avanc\u00e9e de Cor\u00e9e", "KDT"}; + String LORD_HOWE[] = new String[] {"Heure standard de Lord Howe", "LHST", + "Heure d'\u00e9t\u00e9 de Lord Howe", "LHST"}; + String MHT[] = new String[] {"Heure des Iles Marshall", "MHT", +@@ -140,7 +142,7 @@ + String MSK[] = new String[] {"Heure standard de Moscou", "MSK", + "Heure avanc\u00e9e de Moscou", "MSD"}; + String MST[] = new String[] {"Heure normale des Rocheuses", "MST", +- "Heure avanc\u00e9e des Rocheuses", "MDT"} ; ++ "Heure avanc\u00e9e des Rocheuses", "MDT"}; + String MYT[] = new String[] {"Heure de Malaisie", "MYT", + "Heure d'\u00e9t\u00e9 de Malaisie", "MYST"}; + String NORONHA[] = new String[] {"Heure de Fernando de Noronha", "FNT", +@@ -150,21 +152,23 @@ + String NPT[] = new String[] {"Heure du N\u00e9pal", "NPT", + "Heure d'\u00e9t\u00e9 du N\u00e9pal", "NPST"}; + String NST[] = new String[] {"Heure normale de Terre-Neuve", "NST", +- "Heure avanc\u00e9e de Terre-Neuve", "NDT"} ; ++ "Heure avanc\u00e9e de Terre-Neuve", "NDT"}; + String NZST[] = new String[] {"Heure normale de Nouvelle-Z\u00e9lande", "NZST", +- "Heure avanc\u00e9e de Nouvelle-Z\u00e9lande", "NZDT"} ; ++ "Heure avanc\u00e9e de Nouvelle-Z\u00e9lande", "NZDT"}; + String PITCAIRN[] = new String[] {"Heure standard des Pitcairn", "PST", + "heure avanc\u00e9e des Pitcairn", "PDT"}; + String PKT[] = new String[] {"Heure du Pakistan", "PKT", +- "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"} ; ++ "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"}; + String PONT[] = new String[] {"Pohnpei Time", "PONT", + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Heure normale du Pacifique", "PST", +- "Heure avanc\u00e9e du Pacifique", "PDT"} ; ++ "Heure avanc\u00e9e du Pacifique", "PDT"}; ++ String SAMOA[] = new String[] {"Heure standard de Samoa", "SST", ++ "Heure avanc\u00e9e de Samoa", "SDT"}; + String SAST[] = new String[] {"Heure normale d'Afrique du Sud", "SAST", +- "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"} ; ++ "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"}; + String SBT[] = new String[] {"Heure des \u00celes Salomon", "SBT", +- "Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"} ; ++ "Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"}; + String SGT[] = new String[] {"Heure de Singapour", "SGT", + "Heure d'\u00e9t\u00e9 de Singapour", "SGST"}; + String SLST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT", +@@ -172,31 +176,31 @@ + String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "EST", + "Heure d'\u00e9t\u00e9 d'Australie orientale (Tasmanie)", "EST"}; + String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT", +- "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"} ; ++ "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"}; + String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT", +- "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"} ; +- String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART", +- "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"} ; +- String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT", +- "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"} ; +- String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET", +- "Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"} ; +- String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIT", +- "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"}; +- String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST", +- "Heure d'\u00e9t\u00e9 de l'Ouest (Australie)", "WST"} ; +- String SAMOA[] = new String[] {"Heure standard de Samoa", "SST", +- "Heure avanc\u00e9e de Samoa", "SDT"}; +- String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST", +- "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"} ; +- String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST", +- "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"}; +- String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST", +- "Heure d'\u00e9t\u00e9 d'Australie orientale (Victoria)", "EST"}; ++ "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"}; + String UTC[] = new String[] {"Temps universel coordonn\u00e9", "UTC", + "Temps universel coordonn\u00e9", "UTC"}; + String UZT[] = new String[] {"Heure de l'Ouzb\u00e9kistan", "UZT", + "Heure d'\u00e9t\u00e9 de l'Ouzb\u00e9kistan", "UZST"}; ++ String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST", ++ "Heure d'\u00e9t\u00e9 d'Australie orientale (Victoria)", "EST"}; ++ String VLAT[] = new String[] {"Heure de Vladivostok", "VLAT", ++ "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"}; ++ String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART", ++ "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"}; ++ String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT", ++ "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"}; ++ String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET", ++ "Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"}; ++ String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIT", ++ "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"}; ++ String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST", ++ "Heure d'\u00e9t\u00e9 de l'Ouest (Australie)", "WST"}; ++ String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST", ++ "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"}; ++ String YAKT[] = new String[] {"Heure du Iakoutsk", "YAKT", ++ "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, +@@ -287,7 +291,7 @@ + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, +- {"Africa/Tripoli", EET}, ++ {"Africa/Tripoli", CET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, +@@ -533,6 +537,7 @@ + {"Asia/Kashgar", CTT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, ++ {"Asia/Khandyga", YAKT}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", new String[] {"Heure de Krasno\u00efarsk", "KRAT", + "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"}}, +@@ -581,11 +586,10 @@ + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", CTT}, ++ {"Asia/Ust-Nera", VLAT}, + {"Asia/Vientiane", ICT}, +- {"Asia/Vladivostok", new String[] {"Heure de Vladivostok", "VLAT", +- "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"}}, +- {"Asia/Yakutsk", new String[] {"Heure du Iakoutsk", "YAKT", +- "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"}}, ++ {"Asia/Vladivostok", VLAT}, ++ {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"Heure de Yekaterinburg", "YEKT", + "Heure d'\u00e9t\u00e9 de Yekaterinburg", "YEKST"}}, + {"Asia/Yerevan", ARMT}, +@@ -669,6 +673,7 @@ + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, ++ {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, +@@ -748,7 +753,7 @@ + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, +- {"Libya", EET}, ++ {"Libya", CET}, + {"MET", new String[] {"Heure de l'Europe centrale", "MET", + "Heure d'\u00e9t\u00e9 de l'Europe centrale", "MEST"}}, + {"Mexico/BajaNorte", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java +@@ -77,6 +77,8 @@ + "Ora legale di Chatham", "CHADT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; ++ String ChST[] = new String[] {"Ora standard di Chamorro", "ChST", ++ "Ora legale di Chamorro", "ChDT"}; + String CIT[] = new String[] {"Ora dell'Indonesia centrale", "CIT", + "Ora estiva dell'Indonesia centrale", "CIST"}; + String CLT[] = new String[] {"Ora del Cile", "CLT", +@@ -161,6 +163,8 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST", + "Ora legale della costa occidentale USA", "PDT"}; ++ String SAMOA[] = new String[] {"Ora standard di Samoa", "SST", ++ "Ora legale di Samoa", "SDT"}; + String SAST[] = new String[] {"Ora solare del Sudafrica", "SAST", + "Ora estiva del Sudafrica", "SAST"}; + String SBT[] = new String[] {"Ora delle Isole Salomone", "SBT", +@@ -175,6 +179,14 @@ + "Ora estiva del Turkmenistan", "TMST"}; + String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT", + "Ora estiva di Ulaanbaatar", "ULAST"}; ++ String UTC[] = new String[] {"Tempo universale coordinato", "UTC", ++ "Tempo universale coordinato", "UTC"}; ++ String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT", ++ "Ora estiva dell'Uzbekistan", "UZST"}; ++ String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST", ++ "Ora estiva orientale (Victoria)", "EST"}; ++ String VLAT[] = new String[] {"Ora di Vladivostok", "VLAT", ++ "Ora estiva di Vladivostok", "VLAST"}; + String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART", + "Ora estiva dell'Argentina occidentale", "WARST"}; + String WAT[] = new String[] {"Ora dell'Africa occidentale", "WAT", +@@ -185,18 +197,10 @@ + "Ora estiva dell'Indonesia occidentale", "WIST"}; + String WST_AUS[] = new String[] {"Ora solare dell'Australia occidentale", "WST", + "Ora estiva dell'Australia occidentale", "WST"}; +- String SAMOA[] = new String[] {"Ora standard di Samoa", "SST", +- "Ora legale di Samoa", "SDT"}; + String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST", + "Ora estiva di Samoa", "WSDT"}; +- String ChST[] = new String[] {"Ora standard di Chamorro", "ChST", +- "Ora legale di Chamorro", "ChDT"}; +- String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST", +- "Ora estiva orientale (Victoria)", "EST"}; +- String UTC[] = new String[] {"Tempo universale coordinato", "UTC", +- "Tempo universale coordinato", "UTC"}; +- String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT", +- "Ora estiva dell'Uzbekistan", "UZST"}; ++ String YAKT[] = new String[] {"Ora di Jakutsk", "YAKT", ++ "Ora estiva di Jakutsk", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, +@@ -287,7 +291,7 @@ + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, +- {"Africa/Tripoli", EET}, ++ {"Africa/Tripoli", CET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, +@@ -533,6 +537,7 @@ + {"Asia/Kashgar", CTT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, ++ {"Asia/Khandyga", YAKT}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", new String[] {"Ora di Krasnojarsk", "KRAT", + "Ora estiva di Krasnojarsk", "KRAST"}}, +@@ -581,11 +586,10 @@ + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", CTT}, ++ {"Asia/Ust-Nera", VLAT}, + {"Asia/Vientiane", ICT}, +- {"Asia/Vladivostok", new String[] {"Ora di Vladivostok", "VLAT", +- "Ora estiva di Vladivostok", "VLAST"}}, +- {"Asia/Yakutsk", new String[] {"Ora di Jakutsk", "YAKT", +- "Ora estiva di Jakutsk", "YAKST"}}, ++ {"Asia/Vladivostok", VLAT}, ++ {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"Ora di Ekaterinburg", "YEKT", + "Ora estiva di Ekaterinburg", "YEKST"}}, + {"Asia/Yerevan", ARMT}, +@@ -669,6 +673,7 @@ + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, ++ {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, +@@ -748,7 +753,7 @@ + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, +- {"Libya", EET}, ++ {"Libya", CET}, + {"MET", new String[] {"Ora dell'Europa centrale", "MET", + "Ora estiva dell'Europa centrale", "MEST"}}, + {"Mexico/BajaNorte", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java +@@ -75,6 +75,8 @@ + "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"}; + String CHAST[] = new String[] {"\u30c1\u30e3\u30bf\u30e0\u6a19\u6e96\u6642", "CHAST", + "\u30c1\u30e3\u30bf\u30e0\u590f\u6642\u9593", "CHADT"}; ++ String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST", ++ "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "CIT", +@@ -161,6 +163,8 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST", + "\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"}; ++ String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST", ++ "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"}; + String SAST[] = new String[] {"\u5357\u30a2\u30d5\u30ea\u30ab\u6a19\u6e96\u6642", "SAST", + "\u5357\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "SAST"}; + String SBT[] = new String[] {"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u6642\u9593", "SBT", +@@ -175,6 +179,14 @@ + "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"}; + String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT", + "\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"}; ++ String UTC[] = new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC", ++ "\u5354\u5b9a\u4e16\u754c\u6642", "UTC"}; ++ String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT", ++ "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"}; ++ String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST", ++ "\u6771\u90e8\u590f\u6642\u9593 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST"}; ++ String VLAT[] = new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT", ++ "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"}; + String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART", + "\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"}; + String WAT[] = new String[] {"\u897f\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "WAT", +@@ -185,18 +197,10 @@ + "\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "WIST"}; + String WST_AUS[] = new String[] {"\u897f\u90e8\u6a19\u6e96\u6642 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST", + "\u897f\u90e8\u590f\u6642\u9593 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST"}; +- String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST", +- "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"}; + String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST", + "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT"}; +- String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST", +- "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"}; +- String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST", +- "\u6771\u90e8\u590f\u6642\u9593 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST"}; +- String UTC[] = new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC", +- "\u5354\u5b9a\u4e16\u754c\u6642", "UTC"}; +- String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT", +- "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"}; ++ String YAKT[] = new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT", ++ "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, +@@ -287,7 +291,7 @@ + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, +- {"Africa/Tripoli", EET}, ++ {"Africa/Tripoli", CET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, +@@ -533,6 +537,7 @@ + {"Asia/Kashgar", CTT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, ++ {"Asia/Khandyga", YAKT}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT", + "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"}}, +@@ -581,11 +586,10 @@ + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", CTT}, ++ {"Asia/Ust-Nera", VLAT}, + {"Asia/Vientiane", ICT}, +- {"Asia/Vladivostok", new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT", +- "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"}}, +- {"Asia/Yakutsk", new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT", +- "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"}}, ++ {"Asia/Vladivostok", VLAT}, ++ {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u6642\u9593", "YEKT", + "\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u590f\u6642\u9593", "YEKST"}}, + {"Asia/Yerevan", ARMT}, +@@ -669,6 +673,7 @@ + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, ++ {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, +@@ -748,7 +753,7 @@ + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, +- {"Libya", EET}, ++ {"Libya", CET}, + {"MET", new String[] {"\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "MET", + "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "MEST"}}, + {"Mexico/BajaNorte", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java +@@ -75,6 +75,8 @@ + "\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"}; + String CHAST[] = new String[] {"Chatham \ud45c\uc900\uc2dc", "CHAST", + "Chatham \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHADT"}; ++ String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST", ++ "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "CIT", +@@ -161,6 +163,8 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST", + "\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; ++ String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST", ++ "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"}; + String SAST[] = new String[] {"\ub0a8\uc544\ud504\ub9ac\uce74 \ud45c\uc900\uc2dc", "SAST", + "\ub0a8\uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAST"}; + String SBT[] = new String[] {"\uc194\ub85c\ubaac \uad70\ub3c4 \uc2dc\uac04", "SBT", +@@ -175,6 +179,14 @@ + "\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"}; + String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT", + "\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"}; ++ String UTC[] = new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC", ++ "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"}; ++ String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT", ++ "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"}; ++ String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST", ++ "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ube45\ud1a0\ub9ac\uc544)", "EST"}; ++ String VLAT[] = new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT", ++ "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"}; + String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART", + "\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"}; + String WAT[] = new String[] {"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "WAT", +@@ -185,18 +197,10 @@ + "\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WIST"}; + String WST_AUS[] = new String[] {"\uc11c\ubd80 \ud45c\uc900\uc2dc(\ud638\uc8fc)", "WST", + "\uc11c\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud638\uc8fc)", "WST"}; +- String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST", +- "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"}; + String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST", + "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT"}; +- String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST", +- "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"}; +- String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST", +- "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ube45\ud1a0\ub9ac\uc544)", "EST"}; +- String UTC[] = new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC", +- "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"}; +- String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT", +- "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"}; ++ String YAKT[] = new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT", ++ "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, +@@ -287,7 +291,7 @@ + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, +- {"Africa/Tripoli", EET}, ++ {"Africa/Tripoli", CET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, +@@ -533,6 +537,7 @@ + {"Asia/Kashgar", CTT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, ++ {"Asia/Khandyga", YAKT}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT", + "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"}}, +@@ -581,11 +586,10 @@ + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", CTT}, ++ {"Asia/Ust-Nera", VLAT}, + {"Asia/Vientiane", ICT}, +- {"Asia/Vladivostok", new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT", +- "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"}}, +- {"Asia/Yakutsk", new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT", +- "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"}}, ++ {"Asia/Vladivostok", VLAT}, ++ {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc2dc\uac04", "YEKT", + "\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YEKST"}}, + {"Asia/Yerevan", ARMT}, +@@ -669,6 +673,7 @@ + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, ++ {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, +@@ -748,7 +753,7 @@ + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, +- {"Libya", EET}, ++ {"Libya", CET}, + {"MET", new String[] {"\uc911\ubd80 \uc720\ub7fd \uc2dc\uac04", "MET", + "\uc911\ubd80 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MEST"}}, + {"Mexico/BajaNorte", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java +@@ -75,6 +75,8 @@ + "Centraleuropeisk sommartid", "CEST"}; + String CHAST[] = new String[] {"Chatham, normaltid", "CHAST", + "Chatham, sommartid", "CHADT"}; ++ String ChST[] = new String[] {"Chamorro, normaltid", "ChST", ++ "Chamorro, sommartid", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Centralindonesisk tid", "CIT", +@@ -161,6 +163,8 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"Stilla havet, normaltid", "PST", + "Stilla havet, sommartid", "PDT"}; ++ String SAMOA[] = new String[] {"Samoa, normaltid", "SST", ++ "Samoa, sommartid", "SDT"}; + String SAST[] = new String[] {"Sydafrika, normaltid", "SAST", + "Sydafrika, sommartid", "SAST"}; + String SBT[] = new String[] {"Salomon\u00f6arna, normaltid", "SBT", +@@ -175,6 +179,14 @@ + "Turkmenistan, sommartid", "TMST"}; + String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT", + "Ulaanbaatar, sommartid", "ULAST"}; ++ String UTC[] = new String[] {"Koordinerad universell tid", "UTC", ++ "Koordinerad universell tid", "UTC"}; ++ String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT", ++ "Uzbekistan, sommartid", "UZST"}; ++ String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST", ++ "\u00d6stlig sommartid (Victoria)", "EST"}; ++ String VLAT[] = new String[] {"Vladivostok, normaltid", "VLAT", ++ "Vladivostok, sommartid", "VLAST"}; + String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART", + "V\u00e4stargentina, sommartid", "WARST"}; + String WAT[] = new String[] {"V\u00e4stafrikansk tid", "WAT", +@@ -185,18 +197,10 @@ + "V\u00e4stindonesisk sommartid", "WIST"}; + String WST_AUS[] = new String[] {"V\u00e4stlig normaltid (Australien)", "WST", + "V\u00e4stlig sommartid (Australien)", "WST"}; +- String SAMOA[] = new String[] {"Samoa, normaltid", "SST", +- "Samoa, sommartid", "SDT"}; + String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST", + "V\u00e4stsamoansk sommartid", "WSDT"}; +- String ChST[] = new String[] {"Chamorro, normaltid", "ChST", +- "Chamorro, sommartid", "ChDT"}; +- String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST", +- "\u00d6stlig sommartid (Victoria)", "EST"}; +- String UTC[] = new String[] {"Koordinerad universell tid", "UTC", +- "Koordinerad universell tid", "UTC"}; +- String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT", +- "Uzbekistan, sommartid", "UZST"}; ++ String YAKT[] = new String[] {"Jakutsk, normaltid", "YAKT", ++ "Jakutsk, sommartid", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, +@@ -287,7 +291,7 @@ + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, +- {"Africa/Tripoli", EET}, ++ {"Africa/Tripoli", CET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, +@@ -533,6 +537,7 @@ + {"Asia/Kashgar", CTT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, ++ {"Asia/Khandyga", YAKT}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", new String[] {"Krasnojarsk, normaltid", "KRAT", + "Krasnojarsk, sommartid", "KRAST"}}, +@@ -581,11 +586,10 @@ + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", CTT}, ++ {"Asia/Ust-Nera", VLAT}, + {"Asia/Vientiane", ICT}, +- {"Asia/Vladivostok", new String[] {"Vladivostok, normaltid", "VLAT", +- "Vladivostok, sommartid", "VLAST"}}, +- {"Asia/Yakutsk", new String[] {"Jakutsk, normaltid", "YAKT", +- "Jakutsk, sommartid", "YAKST"}}, ++ {"Asia/Vladivostok", VLAT}, ++ {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"Jekaterinburg, normaltid", "YEKT", + "Jekaterinburg, sommartid", "YEKST"}}, + {"Asia/Yerevan", ARMT}, +@@ -669,6 +673,7 @@ + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, ++ {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, +@@ -748,7 +753,7 @@ + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, +- {"Libya", EET}, ++ {"Libya", CET}, + {"MET", new String[] {"Mellaneuropeisk tid", "MET", + "Mellaneuropeisk sommartid", "MEST"}}, + {"Mexico/BajaNorte", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java +@@ -75,6 +75,8 @@ + "\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"}; + String CHAST[] = new String[] {"\u67e5\u8428\u59c6\u6807\u51c6\u65f6\u95f4", "CHAST", + "\u67e5\u8428\u59c6\u590f\u4ee4\u65f6", "CHADT"}; ++ String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST", ++ "Chamorro \u590f\u4ee4\u65f6", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "CIT", +@@ -161,6 +163,8 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST", + "\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"}; ++ String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST", ++ "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"}; + String SAST[] = new String[] {"\u5357\u975e\u6807\u51c6\u65f6\u95f4", "SAST", + "\u5357\u975e\u590f\u4ee4\u65f6", "SAST"}; + String SBT[] = new String[] {"\u6240\u7f57\u95e8\u7fa4\u5c9b\u65f6\u95f4", "SBT", +@@ -175,6 +179,14 @@ + "\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"}; + String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT", + "\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"}; ++ String UTC[] = new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC", ++ "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"}; ++ String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT", ++ "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"}; ++ String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST", ++ "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST"}; ++ String VLAT[] = new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT", ++ "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"}; + String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART", + "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"}; + String WAT[] = new String[] {"\u897f\u975e\u65f6\u95f4", "WAT", +@@ -185,18 +197,10 @@ + "\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "WIST"}; + String WST_AUS[] = new String[] {"\u897f\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST", + "\u897f\u90e8\u590f\u4ee4\u65f6\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST"}; +- String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST", +- "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"}; + String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST", + "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT"}; +- String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST", +- "Chamorro \u590f\u4ee4\u65f6", "ChDT"}; +- String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST", +- "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST"}; +- String UTC[] = new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC", +- "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"}; +- String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT", +- "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"}; ++ String YAKT[] = new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT", ++ "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, +@@ -287,7 +291,7 @@ + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, +- {"Africa/Tripoli", EET}, ++ {"Africa/Tripoli", CET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, +@@ -533,6 +537,7 @@ + {"Asia/Kashgar", CTT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, ++ {"Asia/Khandyga", YAKT}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT", + "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"}}, +@@ -581,11 +586,10 @@ + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", CTT}, ++ {"Asia/Ust-Nera", VLAT}, + {"Asia/Vientiane", ICT}, +- {"Asia/Vladivostok", new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT", +- "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"}}, +- {"Asia/Yakutsk", new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT", +- "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"}}, ++ {"Asia/Vladivostok", VLAT}, ++ {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u65f6\u95f4", "YEKT", + "Yekaterinburg \u590f\u4ee4\u65f6", "YEKST"}}, + {"Asia/Yerevan", ARMT}, +@@ -669,6 +673,7 @@ + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, ++ {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, +@@ -748,7 +753,7 @@ + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, +- {"Libya", EET}, ++ {"Libya", CET}, + {"MET", new String[] {"\u4e2d\u6b27\u65f6\u95f4", "MET", + "\u4e2d\u6b27\u590f\u4ee4\u65f6", "MEST"}}, + {"Mexico/BajaNorte", PST}, +--- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java ++++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java +@@ -75,6 +75,8 @@ + "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"}; + String CHAST[] = new String[] {"\u67e5\u5766\u6a19\u6e96\u6642\u9593", "CHAST", + "\u67e5\u5766\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CHADT"}; ++ String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST", ++ "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "CIT", +@@ -161,6 +163,8 @@ + "Pohnpei Summer Time", "PONST"}; + String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST", + "\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; ++ String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST", ++ "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"}; + String SAST[] = new String[] {"\u5357\u975e\u6a19\u6e96\u6642\u9593", "SAST", + "\u5357\u975e\u590f\u4ee4\u6642\u9593", "SAST"}; + String SBT[] = new String[] {"\u6240\u7f85\u9580\u7fa4\u5cf6\u6642\u9593", "SBT", +@@ -175,7 +179,15 @@ + "\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"}; + String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT", + "\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"}; +- String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART", ++ String UTC[] = new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC", ++ "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"}; ++ String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT", ++ "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"}; ++ String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST", ++ "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST"}; ++ String VLAT[] = new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT", ++ "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"}; ++ String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART", + "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"}; + String WAT[] = new String[] {"\u897f\u975e\u6642\u9593", "WAT", + "\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST"}; +@@ -185,18 +197,10 @@ + "\u897f\u5370\u5c3c\u590f\u4ee4\u6642\u9593", "WIST"}; + String WST_AUS[] = new String[] {"\u897f\u65b9\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST", + "\u897f\u65b9\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST"}; +- String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST", +- "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"}; + String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST", + "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT"}; +- String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST", +- "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"}; +- String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST", +- "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST"}; +- String UTC[] = new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC", +- "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"}; +- String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT", +- "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"}; ++ String YAKT[] = new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT", ++ "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, +@@ -287,7 +291,7 @@ + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, +- {"Africa/Tripoli", EET}, ++ {"Africa/Tripoli", CET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, +@@ -533,6 +537,7 @@ + {"Asia/Kashgar", CTT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, ++ {"Asia/Khandyga", YAKT}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT", + "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"}}, +@@ -582,11 +587,10 @@ + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", CTT}, ++ {"Asia/Ust-Nera", VLAT}, + {"Asia/Vientiane", ICT}, +- {"Asia/Vladivostok", new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT", +- "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"}}, +- {"Asia/Yakutsk", new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT", +- "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"}}, ++ {"Asia/Vladivostok", VLAT}, ++ {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u6642\u9593", "YEKT", + "Yekaterinburg \u590f\u4ee4\u6642\u9593", "YEKST"}}, + {"Asia/Yerevan", ARMT}, +@@ -670,6 +674,7 @@ + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, ++ {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, +@@ -749,7 +754,7 @@ + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, +- {"Libya", EET}, ++ {"Libya", CET}, + {"MET", new String[] {"\u4e2d\u6b50\u6642\u9593", "MET", + "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "MEST"}}, + {"Mexico/BajaNorte", PST}, diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8009996-emitter_bean.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8009996-emitter_bean.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,27 @@ +changeset: 4963:05e5519ffbcc +user: andrew +date: Wed Jun 26 22:27:10 2013 -0500 +files: src/share/classes/javax/management/StandardEmitterMBean.java +description: +8009996: tests javax/management/mxbean/MiscTest.java and javax/management/mxbean/StandardMBeanOverrideTest.java fail +Reviewed-by: dfuchs, dholmes + + +--- openjdk/jdk/src/share/classes/javax/management/StandardEmitterMBean.java ++++ openjdk/jdk/src/share/classes/javax/management/StandardEmitterMBean.java +@@ -258,8 +258,13 @@ + } + + public MBeanNotificationInfo[] getNotificationInfo() { +- if (notificationInfo == null || notificationInfo.length == 0) { ++ // this getter might get called from the super constructor ++ // when the notificationInfo has not been properly set yet ++ if (notificationInfo == null) { + return NO_NOTIFICATION_INFO; ++ } ++ if (notificationInfo.length == 0) { ++ return notificationInfo; + } else { + return notificationInfo.clone(); + } + diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8010118-caller_sensitive.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8010118-caller_sensitive.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,2950 @@ +changeset: 4945:0ab2712a035a +user: andrew +date: Tue Jun 18 08:09:59 2013 -0500 +files: make/java/java/FILES_c.gmk make/java/java/mapfile-vers make/java/java/reorder-i586 make/java/java/reorder-sparc make/java/java/reorder-sparcv9 src/share/classes/java/io/ObjectStreamClass.java src/share/classes/java/io/ObjectStreamField.java src/share/classes/java/lang/Class.java src/share/classes/java/lang/ClassLoader.java src/share/classes/java/lang/Package.java src/share/classes/java/lang/Runtime.java src/share/classes/java/lang/System.java src/share/classes/java/lang/Thread.java src/share/classes/java/lang/invoke/MemberName.java src/share/classes/java/lang/invoke/MethodHandleImpl.java src/share/classes/java/lang/invoke/MethodHandleNatives.java src/share/classes/java/lang/invoke/MethodHandleProxies.java src/share/classes/java/lang/invoke/MethodHandles.java src/share/classes/java/lang/reflect/Constructor.java src/share/classes/java/lang/reflect/Field.java src/share/classes/java/lang/reflect/Method.java src/share/classes/java/lang/reflect/Proxy.java src/share/classes/java/security/AccessController.java src/share/classes/java/sql/DriverManager.java src/share/classes/java/util/ResourceBundle.java src/share/classes/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java src/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java src/share/classes/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java src/share/classes/java/util/logging/Logger.java src/share/classes/javax/sql/rowset/serial/SerialJavaObject.java src/share/classes/sun/misc/Unsafe.java src/share/classes/sun/reflect/CallerSensitive.java src/share/classes/sun/reflect/Reflection.java src/share/native/java/lang/ClassLoader.c src/share/native/java/lang/SecurityManager.c src/share/native/sun/reflect/Reflection.c test/Makefile test/sun/reflect/CallerSensitive/CallerSensitiveFinder.java test/sun/reflect/CallerSensitive/ClassFileReader.java test/sun/reflect/CallerSensitive/MethodFinder.java test/sun/reflect/CallerSensitive/MissingCallerSensitive.java +description: +8010118: Annotate jdk caller sensitive methods with @sun.reflect.CallerSensitive +Reviewed-by: alanb, twisti, jrose, kvn + + +--- openjdk/jdk/make/java/java/FILES_c.gmk ++++ openjdk/jdk/make/java/java/FILES_c.gmk +@@ -48,7 +48,6 @@ + Proxy.c \ + RandomAccessFile.c \ + RandomAccessFile_md.c \ +- ResourceBundle.c \ + Runtime.c \ + SecurityManager.c \ + Shutdown.c \ +@@ -69,7 +68,6 @@ + jdk_util_md.c \ + check_version.c \ + java_props_md.c \ +- DriverManager.c \ + ConstantPool.c \ + MessageUtils.c \ + GC.c \ +--- openjdk/jdk/make/java/java/mapfile-vers ++++ openjdk/jdk/make/java/java/mapfile-vers +@@ -233,8 +232,6 @@ + Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedExceptionAction_2Ljava_security_AccessControlContext_2; + Java_java_security_AccessController_getStackAccessControlContext; + Java_java_security_AccessController_getInheritedAccessControlContext; +- Java_java_sql_DriverManager_getCallerClassLoader; +- Java_java_util_ResourceBundle_getClassContext; + Java_java_util_TimeZone_getSystemTimeZoneID; + Java_java_util_TimeZone_getSystemGMTOffsetID; + Java_java_util_concurrent_atomic_AtomicLong_VMSupportsCS8; +--- openjdk/jdk/make/java/java/reorder-i586 ++++ openjdk/jdk/make/java/java/reorder-i586 +@@ -73,7 +73,6 @@ + # Test Sleep + # Test IntToString + # Test LoadToolkit +-text: .text%Java_java_util_ResourceBundle_getClassContext; + text: .text%Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2Ljava_security_AccessControlContext_2; + text: .text%JNU_GetEnv; + text: .text%Java_java_io_UnixFileSystem_checkAccess; +--- openjdk/jdk/make/java/java/reorder-sparc ++++ openjdk/jdk/make/java/java/reorder-sparc +@@ -78,7 +78,6 @@ + # Test Sleep + # Test IntToString + # Test LoadToolkit +-text: .text%Java_java_util_ResourceBundle_getClassContext; + text: .text%Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2Ljava_security_AccessControlContext_2; + text: .text%JNU_GetEnv; + text: .text%Java_java_io_UnixFileSystem_checkAccess; +--- openjdk/jdk/make/java/java/reorder-sparcv9 ++++ openjdk/jdk/make/java/java/reorder-sparcv9 +@@ -74,7 +74,6 @@ + # Test Sleep + # Test IntToString + # Test LoadToolkit +-text: .text%Java_java_util_ResourceBundle_getClassContext; + text: .text%Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2Ljava_security_AccessControlContext_2; + text: .text%JNU_GetEnv; + text: .text%Java_java_io_UnixFileSystem_checkAccess; +--- openjdk/jdk/src/share/classes/java/io/ObjectStreamClass.java ++++ openjdk/jdk/src/share/classes/java/io/ObjectStreamClass.java +@@ -49,6 +49,8 @@ + import java.util.concurrent.ConcurrentHashMap; + import java.util.concurrent.ConcurrentMap; + import sun.misc.Unsafe; ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; + import sun.reflect.ReflectionFactory; + import sun.reflect.misc.ReflectUtil; + +@@ -259,12 +261,13 @@ + * + * @return the Class instance that this descriptor represents + */ ++ @CallerSensitive + public Class forClass() { + if (cl == null) { + return null; + } +- ClassLoader ccl = ObjectStreamField.getCallerClassLoader(); +- if (ReflectUtil.needsPackageAccessCheck(ccl, cl.getClassLoader())) { ++ Class caller = Reflection.getCallerClass(); ++ if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(), cl.getClassLoader())) { + ReflectUtil.checkPackageAccess(cl); + } + return cl; +--- openjdk/jdk/src/share/classes/java/io/ObjectStreamField.java ++++ openjdk/jdk/src/share/classes/java/io/ObjectStreamField.java +@@ -26,6 +26,7 @@ + package java.io; + + import java.lang.reflect.Field; ++import sun.reflect.CallerSensitive; + import sun.reflect.Reflection; + import sun.reflect.misc.ReflectUtil; + +@@ -159,32 +160,15 @@ + * @return a Class object representing the type of the + * serializable field + */ ++ @CallerSensitive + public Class getType() { +- ClassLoader ccl = getCallerClassLoader(); +- if (ReflectUtil.needsPackageAccessCheck(ccl, type.getClassLoader())) { ++ Class caller = Reflection.getCallerClass(); ++ if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(), type.getClassLoader())) { + ReflectUtil.checkPackageAccess(type); + } + return type; + } + +- // Returns the invoker's class loader. +- // This is package private because it is accessed from ObjectStreamClass. +- // NOTE: This must always be invoked when there is exactly one intervening +- // frame from the core libraries on the stack between this method's +- // invocation and the desired invoker. The frame count of 3 is determined +- // as follows: +- // +- // 0: Reflection.getCallerClass +- // 1: getCallerClassLoader() +- // 2: ObjectStreamField.getType() or ObjectStreamClass.forClass() +- // 3: the caller we want to check +- // +- // NOTE: copied from java.lang.ClassLoader and modified. +- static ClassLoader getCallerClassLoader() { +- Class caller = Reflection.getCallerClass(3); +- return caller.getClassLoader(); +- } +- + /** + * Returns character encoding of field type. The encoding is as follows: + *

+--- openjdk/jdk/src/share/classes/java/lang/Class.java
++++ openjdk/jdk/src/share/classes/java/lang/Class.java
+@@ -53,6 +53,7 @@
+ import java.util.Map;
+ import java.util.HashMap;
+ import sun.misc.Unsafe;
++import sun.reflect.CallerSensitive;
+ import sun.reflect.ConstantPool;
+ import sun.reflect.Reflection;
+ import sun.reflect.ReflectionFactory;
+@@ -183,9 +184,11 @@
+      *            by this method fails
+      * @exception ClassNotFoundException if the class cannot be located
+      */
++    @CallerSensitive
+     public static Class forName(String className)
+                 throws ClassNotFoundException {
+-        return forName0(className, true, ClassLoader.getCallerClassLoader());
++        return forName0(className, true,
++                        ClassLoader.getClassLoader(Reflection.getCallerClass()));
+     }
+ 
+ 
+@@ -249,6 +252,7 @@
+      * @see       java.lang.ClassLoader
+      * @since     1.2
+      */
++    @CallerSensitive
+     public static Class forName(String name, boolean initialize,
+                                    ClassLoader loader)
+         throws ClassNotFoundException
+@@ -256,7 +260,7 @@
+         if (loader == null) {
+             SecurityManager sm = System.getSecurityManager();
+             if (sm != null) {
+-                ClassLoader ccl = ClassLoader.getCallerClassLoader();
++                ClassLoader ccl = ClassLoader.getClassLoader(Reflection.getCallerClass());
+                 if (ccl != null) {
+                     sm.checkPermission(
+                         SecurityConstants.GET_CLASSLOADER_PERMISSION);
+@@ -318,18 +322,14 @@
+      *             
+      *
+      */
++    @CallerSensitive
+     public T newInstance()
+         throws InstantiationException, IllegalAccessException
+     {
+         if (System.getSecurityManager() != null) {
+-            checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader(), false);
++            checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), false);
+         }
+-        return newInstance0();
+-    }
+ 
+-    private T newInstance0()
+-        throws InstantiationException, IllegalAccessException
+-    {
+         // NOTE: the following code may not be strictly correct under
+         // the current Java memory model.
+ 
+@@ -363,7 +363,7 @@
+         // Security check (same as in java.lang.reflect.Constructor)
+         int modifiers = tmpConstructor.getModifiers();
+         if (!Reflection.quickCheckMemberAccess(this, modifiers)) {
+-            Class caller = Reflection.getCallerClass(3);
++            Class caller = Reflection.getCallerClass();
+             if (newInstanceCallerCache != caller) {
+                 Reflection.ensureMemberAccess(caller, this, null, modifiers);
+                 newInstanceCallerCache = caller;
+@@ -604,16 +604,14 @@
+      * @see SecurityManager#checkPermission
+      * @see java.lang.RuntimePermission
+      */
++    @CallerSensitive
+     public ClassLoader getClassLoader() {
+         ClassLoader cl = getClassLoader0();
+         if (cl == null)
+             return null;
+         SecurityManager sm = System.getSecurityManager();
+         if (sm != null) {
+-            ClassLoader ccl = ClassLoader.getCallerClassLoader();
+-            if (ccl != null && ccl != cl && !cl.isAncestor(ccl)) {
+-                sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
+-            }
++            ClassLoader.checkClassLoaderPermission(cl, Reflection.getCallerClass());
+         }
+         return cl;
+     }
+@@ -894,6 +892,7 @@
+      *     that class is a local or anonymous class; otherwise {@code null}.
+      * @since 1.5
+      */
++    @CallerSensitive
+     public Method getEnclosingMethod() {
+         EnclosingMethodInfo enclosingInfo = getEnclosingMethodInfo();
+ 
+@@ -923,7 +922,7 @@
+             //
+             // Note that we need to do this on the enclosing class
+             enclosingCandidate.checkMemberAccess(Member.DECLARED,
+-                        ClassLoader.getCallerClassLoader(), true);
++                                                 Reflection.getCallerClass(), true);
+             /*
+              * Loop over all declared methods; match method name,
+              * number of and type of parameters, *and* return
+@@ -1031,6 +1030,7 @@
+      *     that class is a local or anonymous class; otherwise {@code null}.
+      * @since 1.5
+      */
++    @CallerSensitive
+     public Constructor getEnclosingConstructor() {
+         EnclosingMethodInfo enclosingInfo = getEnclosingMethodInfo();
+ 
+@@ -1059,7 +1059,7 @@
+             //
+             // Note that we need to do this on the enclosing class
+             enclosingCandidate.checkMemberAccess(Member.DECLARED,
+-                        ClassLoader.getCallerClassLoader(), true);
++                                                 Reflection.getCallerClass(), true);
+             /*
+              * Loop over all declared constructors; match number
+              * of and type of parameters.
+@@ -1106,6 +1106,7 @@
+      * @return the immediately enclosing class of the underlying class
+      * @since 1.5
+      */
++    @CallerSensitive
+     public Class getEnclosingClass() {
+         // There are five kinds of classes (or interfaces):
+         // a) Top level classes
+@@ -1138,7 +1139,7 @@
+         // see java.lang.SecurityManager.checkMemberAccess
+         if (enclosingCandidate != null) {
+             enclosingCandidate.checkMemberAccess(Member.DECLARED,
+-                    ClassLoader.getCallerClassLoader(), true);
++                                                 Reflection.getCallerClass(), true);
+         }
+         return enclosingCandidate;
+     }
+@@ -1323,11 +1324,12 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Class[] getClasses() {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader(), false);
++        checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), false);
+ 
+         // Privileged so this implementation can look at DECLARED classes,
+         // something the caller might not have privilege to do.  The code here
+@@ -1398,11 +1400,12 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Field[] getFields() throws SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
+         return copyFields(privateGetPublicFields(null));
+     }
+ 
+@@ -1449,11 +1452,12 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Method[] getMethods() throws SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
+         return copyMethods(privateGetPublicMethods());
+     }
+ 
+@@ -1498,11 +1502,12 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Constructor[] getConstructors() throws SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
+         return copyConstructors(privateGetDeclaredConstructors(true));
+     }
+ 
+@@ -1556,12 +1561,13 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Field getField(String name)
+         throws NoSuchFieldException, SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
+         Field field = getField0(name);
+         if (field == null) {
+             throw new NoSuchFieldException(name);
+@@ -1641,12 +1647,13 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Method getMethod(String name, Class... parameterTypes)
+         throws NoSuchMethodException, SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
+         Method method = getMethod0(name, parameterTypes);
+         if (method == null) {
+             throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
+@@ -1695,12 +1702,13 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Constructor getConstructor(Class... parameterTypes)
+         throws NoSuchMethodException, SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
+         return getConstructor0(parameterTypes, Member.PUBLIC);
+     }
+ 
+@@ -1738,11 +1746,12 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Class[] getDeclaredClasses() throws SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader(), false);
++        checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), false);
+         return getDeclaredClasses0();
+     }
+ 
+@@ -1782,11 +1791,12 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Field[] getDeclaredFields() throws SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true);
+         return copyFields(privateGetDeclaredFields(false));
+     }
+ 
+@@ -1830,11 +1840,12 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Method[] getDeclaredMethods() throws SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true);
+         return copyMethods(privateGetDeclaredMethods(false));
+     }
+ 
+@@ -1875,11 +1886,12 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Constructor[] getDeclaredConstructors() throws SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true);
+         return copyConstructors(privateGetDeclaredConstructors(false));
+     }
+ 
+@@ -1918,12 +1930,13 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Field getDeclaredField(String name)
+         throws NoSuchFieldException, SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true);
+         Field field = searchFields(privateGetDeclaredFields(false), name);
+         if (field == null) {
+             throw new NoSuchFieldException(name);
+@@ -1973,12 +1986,13 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Method getDeclaredMethod(String name, Class... parameterTypes)
+         throws NoSuchMethodException, SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true);
+         Method method = searchMethods(privateGetDeclaredMethods(false), name, parameterTypes);
+         if (method == null) {
+             throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
+@@ -2023,12 +2037,13 @@
+      *
+      * @since JDK1.1
+      */
++    @CallerSensitive
+     public Constructor getDeclaredConstructor(Class... parameterTypes)
+         throws NoSuchMethodException, SecurityException {
+         // be very careful not to change the stack depth of this
+         // checkMemberAccess call for security reasons
+         // see java.lang.SecurityManager.checkMemberAccess
+-        checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader(), true);
++        checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true);
+         return getConstructor0(parameterTypes, Member.DECLARED);
+     }
+ 
+@@ -2186,23 +2201,40 @@
+      */
+     static native Class getPrimitiveClass(String name);
+ 
++    private static boolean isCheckMemberAccessOverridden(SecurityManager smgr) {
++        if (smgr.getClass() == SecurityManager.class) return false;
++
++        Class[] paramTypes = new Class[] {Class.class, int.class};
++        return smgr.getClass().getMethod0("checkMemberAccess", paramTypes).
++                getDeclaringClass() != SecurityManager.class;
++    }
++
+ 
+     /*
+      * Check if client is allowed to access members.  If access is denied,
+      * throw a SecurityException.
+      *
+-     * Be very careful not to change the stack depth of this checkMemberAccess
+-     * call for security reasons.
+-     * See java.lang.SecurityManager.checkMemberAccess.
+-     *
+      * 

Default policy: allow all clients access with normal Java access + * control. + */ +- private void checkMemberAccess(int which, ClassLoader ccl, boolean checkProxyInterfaces) { +- SecurityManager s = System.getSecurityManager(); ++ private void checkMemberAccess(int which, Class caller, boolean checkProxyInterfaces) { ++ final SecurityManager s = System.getSecurityManager(); + if (s != null) { +- s.checkMemberAccess(this, which); +- ClassLoader cl = getClassLoader0(); ++ final ClassLoader ccl = ClassLoader.getClassLoader(caller); ++ final ClassLoader cl = getClassLoader0(); ++ if (!isCheckMemberAccessOverridden(s)) { ++ // Inlined SecurityManager.checkMemberAccess ++ if (which != Member.PUBLIC) { ++ if (ccl != cl) { ++ s.checkPermission(SecurityConstants.CHECK_MEMBER_ACCESS_PERMISSION); ++ } ++ } ++ } else { ++ // Don't refactor; otherwise break the stack depth for ++ // checkMemberAccess of subclasses of SecurityManager as specified. ++ s.checkMemberAccess(this, which); ++ } ++ + if (ReflectUtil.needsPackageAccessCheck(ccl, cl)) { + String name = this.getName(); + int i = name.lastIndexOf('.'); +--- openjdk/jdk/src/share/classes/java/lang/ClassLoader.java ++++ openjdk/jdk/src/share/classes/java/lang/ClassLoader.java +@@ -56,6 +56,7 @@ + import sun.misc.Resource; + import sun.misc.URLClassPath; + import sun.misc.VM; ++import sun.reflect.CallerSensitive; + import sun.reflect.Reflection; + import sun.security.util.SecurityConstants; + +@@ -1396,15 +1395,13 @@ + * + * @since 1.2 + */ ++ @CallerSensitive + public final ClassLoader getParent() { + if (parent == null) + return null; + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { +- ClassLoader ccl = getCallerClassLoader(); +- if (ccl != null && !isAncestor(ccl)) { +- sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); +- } ++ checkClassLoaderPermission(parent, Reflection.getCallerClass()); + } + return parent; + } +@@ -1464,6 +1461,7 @@ + * + * @revised 1.4 + */ ++ @CallerSensitive + public static ClassLoader getSystemClassLoader() { + initSystemClassLoader(); + if (scl == null) { +@@ -1471,10 +1469,7 @@ + } + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { +- ClassLoader ccl = getCallerClassLoader(); +- if (ccl != null && ccl != scl && !scl.isAncestor(ccl)) { +- sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); +- } ++ checkClassLoaderPermission(scl, Reflection.getCallerClass()); + } + return scl; + } +@@ -1522,13 +1517,25 @@ + return false; + } + +- // Returns the invoker's class loader, or null if none. +- // NOTE: This must always be invoked when there is exactly one intervening +- // frame from the core libraries on the stack between this method's +- // invocation and the desired invoker. +- static ClassLoader getCallerClassLoader() { +- // NOTE use of more generic Reflection.getCallerClass() +- Class caller = Reflection.getCallerClass(3); ++ // Tests if class loader access requires "getClassLoader" permission ++ // check. A class loader 'from' can access class loader 'to' if ++ // class loader 'from' is same as class loader 'to' or an ancestor ++ // of 'to'. The class loader in a system domain can access ++ // any class loader. ++ private static boolean needsClassLoaderPermissionCheck(ClassLoader from, ++ ClassLoader to) ++ { ++ if (from == to) ++ return false; ++ ++ if (from == null) ++ return false; ++ ++ return !to.isAncestor(from); ++ } ++ ++ // Returns the class's class loader, or null if none. ++ static ClassLoader getClassLoader(Class caller) { + // This can be null if the VM is requesting it + if (caller == null) { + return null; +@@ -1537,6 +1544,17 @@ + return caller.getClassLoader0(); + } + ++ static void checkClassLoaderPermission(ClassLoader cl, Class caller) { ++ SecurityManager sm = System.getSecurityManager(); ++ if (sm != null) { ++ // caller can be null if the VM is requesting it ++ ClassLoader ccl = getClassLoader(caller); ++ if (needsClassLoaderPermissionCheck(ccl, cl)) { ++ sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); ++ } ++ } ++ } ++ + // The class loader for the system + // @GuardedBy("ClassLoader.class") + private static ClassLoader scl; +--- openjdk/jdk/src/share/classes/java/lang/Package.java ++++ openjdk/jdk/src/share/classes/java/lang/Package.java +@@ -47,9 +47,10 @@ + import java.util.HashMap; + import java.util.Iterator; + ++import java.lang.annotation.Annotation; + import sun.net.www.ParseUtil; +- +-import java.lang.annotation.Annotation; ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; + + /** + * {@code Package} objects contain version information +@@ -272,8 +273,9 @@ + * @return the package of the requested name. It may be null if no package + * information is available from the archive or codebase. + */ ++ @CallerSensitive + public static Package getPackage(String name) { +- ClassLoader l = ClassLoader.getCallerClassLoader(); ++ ClassLoader l = ClassLoader.getClassLoader(Reflection.getCallerClass()); + if (l != null) { + return l.getPackage(name); + } else { +@@ -293,8 +295,9 @@ + * @return a new array of packages known to the callers {@code ClassLoader} + * instance. An zero length array is returned if none are known. + */ ++ @CallerSensitive + public static Package[] getPackages() { +- ClassLoader l = ClassLoader.getCallerClassLoader(); ++ ClassLoader l = ClassLoader.getClassLoader(Reflection.getCallerClass()); + if (l != null) { + return l.getPackages(); + } else { +--- openjdk/jdk/src/share/classes/java/lang/Runtime.java ++++ openjdk/jdk/src/share/classes/java/lang/Runtime.java +@@ -27,6 +27,8 @@ + + import java.io.*; + import java.util.StringTokenizer; ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; + + /** + * Every Java application has a single instance of class +@@ -776,8 +778,9 @@ + * @see java.lang.SecurityException + * @see java.lang.SecurityManager#checkLink(java.lang.String) + */ ++ @CallerSensitive + public void load(String filename) { +- load0(System.getCallerClass(), filename); ++ load0(Reflection.getCallerClass(), filename); + } + + synchronized void load0(Class fromClass, String filename) { +@@ -829,8 +832,9 @@ + * @see java.lang.SecurityException + * @see java.lang.SecurityManager#checkLink(java.lang.String) + */ ++ @CallerSensitive + public void loadLibrary(String libname) { +- loadLibrary0(System.getCallerClass(), libname); ++ loadLibrary0(Reflection.getCallerClass(), libname); + } + + synchronized void loadLibrary0(Class fromClass, String libname) { +--- openjdk/jdk/src/share/classes/java/lang/System.java ++++ openjdk/jdk/src/share/classes/java/lang/System.java +@@ -34,7 +34,8 @@ + import java.nio.channels.Channel; + import java.nio.channels.spi.SelectorProvider; + import sun.nio.ch.Interruptible; + import sun.net.InetAddressCachePolicy; ++import sun.reflect.CallerSensitive; + import sun.reflect.Reflection; + import sun.security.util.SecurityConstants; + import sun.reflect.annotation.AnnotationType; +@@ -1055,8 +1056,9 @@ + * @see java.lang.Runtime#load(java.lang.String) + * @see java.lang.SecurityManager#checkLink(java.lang.String) + */ ++ @CallerSensitive + public static void load(String filename) { +- Runtime.getRuntime().load0(getCallerClass(), filename); ++ Runtime.getRuntime().load0(Reflection.getCallerClass(), filename); + } + + /** +@@ -1080,8 +1082,9 @@ + * @see java.lang.Runtime#loadLibrary(java.lang.String) + * @see java.lang.SecurityManager#checkLink(java.lang.String) + */ ++ @CallerSensitive + public static void loadLibrary(String libname) { +- Runtime.getRuntime().loadLibrary0(getCallerClass(), libname); ++ Runtime.getRuntime().loadLibrary0(Reflection.getCallerClass(), libname); + } + + /** +@@ -1197,10 +1200,4 @@ + } + }); + } +- +- /* returns the class of the caller. */ +- static Class getCallerClass() { +- // NOTE use of more generic Reflection.getCallerClass() +- return Reflection.getCallerClass(3); +- } + } +--- openjdk/jdk/src/share/classes/java/lang/Thread.java ++++ openjdk/jdk/src/share/classes/java/lang/Thread.java +@@ -37,6 +37,8 @@ + import java.util.concurrent.ConcurrentMap; + import java.util.concurrent.locks.LockSupport; + import sun.nio.ch.Interruptible; ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; + import sun.security.util.SecurityConstants; + + +@@ -1440,16 +1442,15 @@ + * + * @since 1.2 + */ ++ @CallerSensitive + public ClassLoader getContextClassLoader() { + if (contextClassLoader == null) + return null; ++ + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { +- ClassLoader ccl = ClassLoader.getCallerClassLoader(); +- if (ccl != null && ccl != contextClassLoader && +- !contextClassLoader.isAncestor(ccl)) { +- sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); +- } ++ ClassLoader.checkClassLoaderPermission(contextClassLoader, ++ Reflection.getCallerClass()); + } + return contextClassLoader; + } +--- openjdk/jdk/src/share/classes/java/lang/reflect/Constructor.java ++++ openjdk/jdk/src/share/classes/java/lang/reflect/Constructor.java +@@ -25,6 +25,7 @@ + + package java.lang.reflect; + ++import sun.reflect.CallerSensitive; + import sun.reflect.ConstructorAccessor; + import sun.reflect.Reflection; + import sun.reflect.generics.repository.ConstructorRepository; +@@ -505,13 +506,14 @@ + * @exception ExceptionInInitializerError if the initialization provoked + * by this method fails. + */ ++ @CallerSensitive + public T newInstance(Object ... initargs) + throws InstantiationException, IllegalAccessException, + IllegalArgumentException, InvocationTargetException + { + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { +- Class caller = Reflection.getCallerClass(2); ++ Class caller = Reflection.getCallerClass(); + if (securityCheckCache != caller) { + Reflection.ensureMemberAccess(caller, clazz, null, modifiers); + securityCheckCache = caller; +--- openjdk/jdk/src/share/classes/java/lang/reflect/Field.java ++++ openjdk/jdk/src/share/classes/java/lang/reflect/Field.java +@@ -25,6 +25,7 @@ + + package java.lang.reflect; + ++import sun.reflect.CallerSensitive; + import sun.reflect.FieldAccessor; + import sun.reflect.Reflection; + import sun.reflect.generics.repository.FieldRepository; +@@ -366,9 +367,15 @@ + * @exception ExceptionInInitializerError if the initialization provoked + * by this method fails. + */ ++ @CallerSensitive + public Object get(Object obj) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + return getFieldAccessor(obj).get(obj); + } + +@@ -394,9 +401,15 @@ + * by this method fails. + * @see Field#get + */ ++ @CallerSensitive + public boolean getBoolean(Object obj) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + return getFieldAccessor(obj).getBoolean(obj); + } + +@@ -422,9 +435,15 @@ + * by this method fails. + * @see Field#get + */ ++ @CallerSensitive + public byte getByte(Object obj) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + return getFieldAccessor(obj).getByte(obj); + } + +@@ -452,9 +471,15 @@ + * by this method fails. + * @see Field#get + */ ++ @CallerSensitive + public char getChar(Object obj) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + return getFieldAccessor(obj).getChar(obj); + } + +@@ -482,9 +507,15 @@ + * by this method fails. + * @see Field#get + */ ++ @CallerSensitive + public short getShort(Object obj) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + return getFieldAccessor(obj).getShort(obj); + } + +@@ -512,9 +543,15 @@ + * by this method fails. + * @see Field#get + */ ++ @CallerSensitive + public int getInt(Object obj) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + return getFieldAccessor(obj).getInt(obj); + } + +@@ -542,9 +579,15 @@ + * by this method fails. + * @see Field#get + */ ++ @CallerSensitive + public long getLong(Object obj) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + return getFieldAccessor(obj).getLong(obj); + } + +@@ -572,9 +615,15 @@ + * by this method fails. + * @see Field#get + */ ++ @CallerSensitive + public float getFloat(Object obj) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + return getFieldAccessor(obj).getFloat(obj); + } + +@@ -602,9 +651,15 @@ + * by this method fails. + * @see Field#get + */ ++ @CallerSensitive + public double getDouble(Object obj) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + return getFieldAccessor(obj).getDouble(obj); + } + +@@ -674,9 +729,15 @@ + * @exception ExceptionInInitializerError if the initialization provoked + * by this method fails. + */ ++ @CallerSensitive + public void set(Object obj, Object value) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + getFieldAccessor(obj).set(obj, value); + } + +@@ -704,9 +765,15 @@ + * by this method fails. + * @see Field#set + */ ++ @CallerSensitive + public void setBoolean(Object obj, boolean z) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + getFieldAccessor(obj).setBoolean(obj, z); + } + +@@ -734,9 +801,15 @@ + * by this method fails. + * @see Field#set + */ ++ @CallerSensitive + public void setByte(Object obj, byte b) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + getFieldAccessor(obj).setByte(obj, b); + } + +@@ -764,9 +837,15 @@ + * by this method fails. + * @see Field#set + */ ++ @CallerSensitive + public void setChar(Object obj, char c) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + getFieldAccessor(obj).setChar(obj, c); + } + +@@ -794,9 +873,15 @@ + * by this method fails. + * @see Field#set + */ ++ @CallerSensitive + public void setShort(Object obj, short s) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + getFieldAccessor(obj).setShort(obj, s); + } + +@@ -824,9 +909,15 @@ + * by this method fails. + * @see Field#set + */ ++ @CallerSensitive + public void setInt(Object obj, int i) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + getFieldAccessor(obj).setInt(obj, i); + } + +@@ -854,9 +945,15 @@ + * by this method fails. + * @see Field#set + */ ++ @CallerSensitive + public void setLong(Object obj, long l) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + getFieldAccessor(obj).setLong(obj, l); + } + +@@ -884,9 +981,15 @@ + * by this method fails. + * @see Field#set + */ ++ @CallerSensitive + public void setFloat(Object obj, float f) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + getFieldAccessor(obj).setFloat(obj, f); + } + +@@ -914,20 +1017,25 @@ + * by this method fails. + * @see Field#set + */ ++ @CallerSensitive + public void setDouble(Object obj, double d) + throws IllegalArgumentException, IllegalAccessException + { ++ if (!override) { ++ if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { ++ checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); ++ } ++ } + getFieldAccessor(obj).setDouble(obj, d); + } + +- // Convenience routine which performs security checks ++ // security check is done before calling this method + private FieldAccessor getFieldAccessor(Object obj) + throws IllegalAccessException + { +- doSecurityCheck(obj); + boolean ov = override; +- FieldAccessor a = (ov)? overrideFieldAccessor : fieldAccessor; +- return (a != null)? a : acquireFieldAccessor(ov); ++ FieldAccessor a = (ov) ? overrideFieldAccessor : fieldAccessor; ++ return (a != null) ? a : acquireFieldAccessor(ov); + } + + // NOTE that there is no synchronization used here. It is correct +@@ -1069,10 +1069,7 @@ + // NOTE: be very careful if you change the stack depth of this + // routine. The depth of the "getCallerClass" call is hardwired so + // that the compiler can have an easier time if this gets inlined. +- private void doSecurityCheck(Object obj) throws IllegalAccessException { +- if (!override) { +- if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { +- Class caller = Reflection.getCallerClass(4); ++ private void checkAccess(Class caller, Class clazz, Object obj, int modifiers) throws IllegalAccessException { + Class targetClass = ((obj == null || !Modifier.isProtected(modifiers)) + ? clazz + : obj.getClass()); +@@ -1088,8 +1085,6 @@ + securityCheckCache = caller; + securityCheckTargetClassCache = targetClass; + } +- } +- } + } + + /* +--- openjdk/jdk/src/share/classes/java/lang/reflect/Method.java ++++ openjdk/jdk/src/share/classes/java/lang/reflect/Method.java +@@ -25,6 +25,7 @@ + + package java.lang.reflect; + ++import sun.reflect.CallerSensitive; + import sun.reflect.MethodAccessor; + import sun.reflect.Reflection; + import sun.reflect.generics.repository.MethodRepository; +@@ -583,13 +584,18 @@ + * @exception ExceptionInInitializerError if the initialization + * provoked by this method fails. + */ ++ @CallerSensitive + public Object invoke(Object obj, Object... args) + throws IllegalAccessException, IllegalArgumentException, + InvocationTargetException + { + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { +- Class caller = Reflection.getCallerClass(1); ++ // Until there is hotspot @CallerSensitive support ++ // can't call Reflection.getCallerClass() here ++ // Workaround for now: add a frame getCallerClass to ++ // make the caller at stack depth 2 ++ Class caller = getCallerClass(); + Class targetClass = ((obj == null || !Modifier.isProtected(modifiers)) + ? clazz + : obj.getClass()); +@@ -601,6 +606,16 @@ + return ma.invoke(obj, args); + } + ++ /* ++ * This method makes the frame count to be 2 to find the caller ++ */ ++ @CallerSensitive ++ private Class getCallerClass() { ++ // Reflection.getCallerClass() currently returns the frame at depth 2 ++ // before the hotspot support is in. ++ return Reflection.getCallerClass(); ++ } ++ + /** + * Returns {@code true} if this method is a bridge + * method; returns {@code false} otherwise. +--- openjdk/jdk/src/share/classes/java/lang/reflect/Proxy.java ++++ openjdk/jdk/src/share/classes/java/lang/reflect/Proxy.java +@@ -39,6 +39,7 @@ + import java.util.Set; + import java.util.WeakHashMap; + import sun.misc.ProxyGenerator; ++import sun.reflect.CallerSensitive; + import sun.reflect.Reflection; + import sun.reflect.misc.ReflectUtil; + import sun.security.util.SecurityConstants; +@@ -405,28 +405,21 @@ + * @throws NullPointerException if the {@code interfaces} array + * argument or any of its elements are {@code null} + */ ++ @CallerSensitive + public static Class getProxyClass(ClassLoader loader, + Class... interfaces) + throws IllegalArgumentException + { +- return getProxyClass0(loader, interfaces); // stack walk magic: do not refactor +- } +- +- private static void checkProxyLoader(ClassLoader ccl, +- ClassLoader loader) +- { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { +- if (loader == null && ccl != null) { +- if (!ProxyAccessHelper.allowNullLoader) { +- sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); +- } +- } ++ checkProxyAccess(Reflection.getCallerClass(), loader, interfaces); + } ++ ++ return getProxyClass0(loader, interfaces); + } + + /* +- * Generate a proxy class (caller-sensitive). ++ * Check permissions required to create a proxy class. + * + * To define a proxy class, it performs the access checks as in + * Class.forName (VM will invoke ClassLoader.checkPackageAccess): +@@ -444,16 +438,28 @@ + * will throw IllegalAccessError when the generated proxy class is + * being defined via the defineClass0 method. + */ ++ private static void checkProxyAccess(Class caller, ++ ClassLoader loader, ++ Class... interfaces) ++ { ++ SecurityManager sm = System.getSecurityManager(); ++ if (sm != null) { ++ ClassLoader ccl = caller.getClassLoader(); ++ if (loader == null && ccl != null) { ++ if (!ProxyAccessHelper.allowNullLoader) { ++ sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); ++ } ++ } ++ ReflectUtil.checkProxyPackageAccess(ccl, interfaces); ++ } ++ } ++ ++ /** ++ * Generate a proxy class. Must call the checkProxyAccess method ++ * to perform permission checks before calling this. ++ */ + private static Class getProxyClass0(ClassLoader loader, + Class... interfaces) { +- SecurityManager sm = System.getSecurityManager(); +- if (sm != null) { +- final int CALLER_FRAME = 3; // 0: Reflection, 1: getProxyClass0 2: Proxy 3: caller +- final Class caller = Reflection.getCallerClass(CALLER_FRAME); +- final ClassLoader ccl = caller.getClassLoader(); +- checkProxyLoader(ccl, loader); +- ReflectUtil.checkProxyPackageAccess(ccl, interfaces); +- } + if (interfaces.length > 65535) { + throw new IllegalArgumentException("interface limit exceeded"); + } +@@ -696,6 +701,7 @@ + * if the invocation handler, {@code h}, is + * {@code null} + */ ++ @CallerSensitive + public static Object newProxyInstance(ClassLoader loader, + Class[] interfaces, + InvocationHandler h) +@@ -705,10 +711,15 @@ + throw new NullPointerException(); + } + ++ final SecurityManager sm = System.getSecurityManager(); ++ if (sm != null) { ++ checkProxyAccess(Reflection.getCallerClass(), loader, interfaces); ++ } ++ + /* + * Look up or generate the designated proxy class. + */ +- Class cl = getProxyClass0(loader, interfaces); // stack walk magic: do not refactor ++ Class cl = getProxyClass0(loader, interfaces); + + /* + * Invoke its constructor with the designated invocation handler. +@@ -716,7 +727,6 @@ + try { + final Constructor cons = cl.getConstructor(constructorParams); + final InvocationHandler ih = h; +- SecurityManager sm = System.getSecurityManager(); + if (sm != null && ProxyAccessHelper.needsNewInstanceCheck(cl)) { + // create proxy instance with doPrivilege as the proxy class may + // implement non-public interfaces that requires a special permission +--- openjdk/jdk/src/share/classes/java/security/AccessController.java ++++ openjdk/jdk/src/share/classes/java/security/AccessController.java +@@ -26,6 +26,8 @@ + package java.security; + + import sun.security.util.Debug; ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; + + /** + *

The AccessController class is used for access control operations +@@ -264,6 +266,7 @@ + * @see java.security.DomainCombiner + */ + ++ @CallerSensitive + public static native T doPrivileged(PrivilegedAction action); + + /** +@@ -288,14 +291,14 @@ + * + * @since 1.6 + */ ++ @CallerSensitive + public static T doPrivilegedWithCombiner(PrivilegedAction action) { +- + AccessControlContext acc = getStackAccessControlContext(); + if (acc == null) { + return AccessController.doPrivileged(action); + } + DomainCombiner dc = acc.getAssignedCombiner(); +- return AccessController.doPrivileged(action, preserveCombiner(dc)); ++ return AccessController.doPrivileged(action, preserveCombiner(dc, Reflection.getCallerClass())); + } + + +@@ -326,6 +329,7 @@ + * @see #doPrivileged(PrivilegedAction) + * @see #doPrivileged(PrivilegedExceptionAction,AccessControlContext) + */ ++ @CallerSensitive + public static native T doPrivileged(PrivilegedAction action, + AccessControlContext context); + +@@ -353,6 +357,7 @@ + * @see #doPrivilegedWithCombiner(PrivilegedExceptionAction) + * @see java.security.DomainCombiner + */ ++ @CallerSensitive + public static native T + doPrivileged(PrivilegedExceptionAction action) + throws PrivilegedActionException; +@@ -383,6 +388,7 @@ + * + * @since 1.6 + */ ++ @CallerSensitive + public static T doPrivilegedWithCombiner + (PrivilegedExceptionAction action) throws PrivilegedActionException { + +@@ -391,26 +397,18 @@ + return AccessController.doPrivileged(action); + } + DomainCombiner dc = acc.getAssignedCombiner(); +- return AccessController.doPrivileged(action, preserveCombiner(dc)); ++ return AccessController.doPrivileged(action, preserveCombiner(dc, Reflection.getCallerClass())); + } + + /** + * preserve the combiner across the doPrivileged call + */ +- private static AccessControlContext preserveCombiner +- (DomainCombiner combiner) { +- +- /** +- * callerClass[0] = Reflection.getCallerClass +- * callerClass[1] = AccessController.preserveCombiner +- * callerClass[2] = AccessController.doPrivileged +- * callerClass[3] = caller +- */ +- final Class callerClass = sun.reflect.Reflection.getCallerClass(3); ++ private static AccessControlContext preserveCombiner(DomainCombiner combiner, ++ final Class caller) { + ProtectionDomain callerPd = doPrivileged + (new PrivilegedAction() { + public ProtectionDomain run() { +- return callerClass.getProtectionDomain(); ++ return caller.getProtectionDomain(); + } + }); + +@@ -455,6 +453,7 @@ + * @see #doPrivileged(PrivilegedAction) + * @see #doPrivileged(PrivilegedExceptionAction,AccessControlContext) + */ ++ @CallerSensitive + public static native T + doPrivileged(PrivilegedExceptionAction action, + AccessControlContext context) +--- openjdk/jdk/src/share/classes/java/sql/DriverManager.java ++++ openjdk/jdk/src/share/classes/java/sql/DriverManager.java +@@ -30,5 +30,7 @@ + import java.security.AccessController; + import java.security.PrivilegedAction; ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; + + /** + *

The basic service for managing a set of JDBC drivers.
+@@ -180,14 +181,10 @@ + * @return a Connection to the URL + * @exception SQLException if a database access error occurs + */ ++ @CallerSensitive + public static Connection getConnection(String url, + java.util.Properties info) throws SQLException { +- +- // Gets the classloader of the code that called this method, may +- // be null. +- ClassLoader callerCL = DriverManager.getCallerClassLoader(); +- +- return (getConnection(url, info, callerCL)); ++ return (getConnection(url, info, Reflection.getCallerClass())); + } + + /** +@@ -203,14 +200,11 @@ + * @return a connection to the URL + * @exception SQLException if a database access error occurs + */ ++ @CallerSensitive + public static Connection getConnection(String url, + String user, String password) throws SQLException { + java.util.Properties info = new java.util.Properties(); + +- // Gets the classloader of the code that called this method, may +- // be null. +- ClassLoader callerCL = DriverManager.getCallerClassLoader(); +- + if (user != null) { + info.put("user", user); + } +@@ -218,7 +212,7 @@ + info.put("password", password); + } + +- return (getConnection(url, info, callerCL)); ++ return (getConnection(url, info, Reflection.getCallerClass())); + } + + /** +@@ -231,16 +225,12 @@ + * @return a connection to the URL + * @exception SQLException if a database access error occurs + */ ++ @CallerSensitive + public static Connection getConnection(String url) + throws SQLException { + + java.util.Properties info = new java.util.Properties(); +- +- // Gets the classloader of the code that called this method, may +- // be null. +- ClassLoader callerCL = DriverManager.getCallerClassLoader(); +- +- return (getConnection(url, info, callerCL)); ++ return (getConnection(url, info, Reflection.getCallerClass())); + } + + /** +@@ -233,6 +224,7 @@ + * that can connect to the given URL + * @exception SQLException if a database access error occurs + */ ++ @CallerSensitive + public static Driver getDriver(String url) + throws SQLException { + java.util.Vector drivers = null; +@@ -248,9 +240,7 @@ + drivers = readDrivers; + } + +- // Gets the classloader of the code that called this method, may +- // be null. +- ClassLoader callerCL = DriverManager.getCallerClassLoader(); ++ Class callerClass = Reflection.getCallerClass(); + + // Walk through the loaded drivers attempting to locate someone + // who understands the given URL. +@@ -258,8 +248,7 @@ + DriverInfo di = (DriverInfo)drivers.elementAt(i); + // If the caller does not have permission to load the driver then + // skip it. +- if ( getCallerClass(callerCL, di.driverClassName ) != +- di.driverClass ) { ++ if ( callerClass != di.driverClass ) { + println(" skipping: " + di); + continue; + } +@@ -322,31 +311,29 @@ + * @param driver the JDBC Driver to drop + * @exception SQLException if a database access error occurs + */ ++ @CallerSensitive + public static synchronized void deregisterDriver(Driver driver) + throws SQLException { +- // Gets the classloader of the code that called this method, +- // may be null. +- ClassLoader callerCL = DriverManager.getCallerClassLoader(); + println("DriverManager.deregisterDriver: " + driver); + + // Walk through the loaded drivers. + int i; + DriverInfo di = null; + for (i = 0; i < writeDrivers.size(); i++) { + di = (DriverInfo)writeDrivers.elementAt(i); + if (di.driver == driver) { + break; + } + } + // If we can't find the driver just return. + if (i >= writeDrivers.size()) { + println(" couldn't find driver to unload"); + return; + } + + // If the caller does not have permission to load the driver then + // throw a security exception. +- if (getCallerClass(callerCL, di.driverClassName ) != di.driverClass ) { ++ if (Reflection.getCallerClass() != di.driverClass) { + throw new SecurityException(); + } + +@@ -350,6 +350,7 @@ + * + * @return the list of JDBC Drivers loaded by the caller's class loader + */ ++ @CallerSensitive + public static java.util.Enumeration getDrivers() { + java.util.Vector result = new java.util.Vector(); + java.util.Vector drivers = null; +@@ -363,16 +364,14 @@ + drivers = readDrivers; + } + +- // Gets the classloader of the code that called this method, may +- // be null. +- ClassLoader callerCL = DriverManager.getCallerClassLoader(); ++ Class callerClass = Reflection.getCallerClass(); + + // Walk through the loaded drivers. + for (int i = 0; i < drivers.size(); i++) { + DriverInfo di = (DriverInfo)drivers.elementAt(i); + // If the caller does not have permission to load the driver then + // skip it. +- if ( getCallerClass(callerCL, di.driverClassName ) != di.driverClass ) { ++ if ( callerClass != di.driverClass ) { + println(" skipping: " + di); + continue; + } +@@ -546,19 +537,20 @@ + + // Worker method called by the public getConnection() methods. + private static Connection getConnection( +- String url, java.util.Properties info, ClassLoader callerCL) throws SQLException { ++ String url, java.util.Properties info, Class caller) throws SQLException { + java.util.Vector drivers = null; + /* + * When callerCl is null, we should check the application's + * (which is invoking this class indirectly) + * classloader, so that the JDBC driver class outside rt.jar + * can be loaded from here. + */ +- synchronized(DriverManager.class) { +- // synchronize loading of the correct classloader. +- if(callerCL == null) { +- callerCL = Thread.currentThread().getContextClassLoader(); +- } ++ ClassLoader callerCL = caller != null ? caller.getClassLoader() : null; ++ synchronized (DriverManager.class) { ++ // synchronize loading of the correct classloader. ++ if (callerCL == null) { ++ callerCL = Thread.currentThread().getContextClassLoader(); ++ } + } + + if(url == null) { +@@ -603,10 +595,6 @@ + private static boolean initialized = false; + + private static Object logSync = new Object(); +- +- /* Returns the caller's class loader, or null if none */ +- private static native ClassLoader getCallerClassLoader(); +- + } + + // DriverInfo is a package-private support class. +--- openjdk/jdk/src/share/classes/java/util/ResourceBundle.java ++++ openjdk/jdk/src/share/classes/java/util/ResourceBundle.java +@@ -56,6 +56,8 @@ + import java.util.concurrent.ConcurrentMap; + import java.util.jar.JarEntry; + ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; + + + /** +@@ -412,14 +414,10 @@ + + /* + * Automatic determination of the ClassLoader to be used to load +- * resources on behalf of the client. N.B. The client is getLoader's +- * caller's caller. ++ * resources on behalf of the client. + */ +- private static ClassLoader getLoader() { +- Class[] stack = getClassContext(); +- /* Magic number 2 identifies our caller's caller */ +- Class c = stack[2]; +- ClassLoader cl = (c == null) ? null : c.getClassLoader(); ++ private static ClassLoader getLoader(Class caller) { ++ ClassLoader cl = caller == null ? null : caller.getClassLoader(); + if (cl == null) { + // When the caller's loader is the boot class loader, cl is null + // here. In that case, ClassLoader.getSystemClassLoader() may +@@ -433,8 +431,6 @@ + return cl; + } + +- private static native Class[] getClassContext(); +- + /** + * A wrapper of ClassLoader.getSystemClassLoader(). + */ +@@ -719,11 +715,12 @@ + * if no resource bundle for the specified base name can be found + * @return a resource bundle for the given base name and the default locale + */ ++ @CallerSensitive + public static final ResourceBundle getBundle(String baseName) + { + return getBundleImpl(baseName, Locale.getDefault(), + /* must determine loader here, else we break stack invariant */ +- getLoader(), ++ getLoader(Reflection.getCallerClass()), + Control.INSTANCE); + } + +@@ -761,11 +758,12 @@ + * needed. + * @since 1.6 + */ ++ @CallerSensitive + public static final ResourceBundle getBundle(String baseName, + Control control) { + return getBundleImpl(baseName, Locale.getDefault(), + /* must determine loader here, else we break stack invariant */ +- getLoader(), ++ getLoader(Reflection.getCallerClass()), + control); + } + +@@ -790,12 +788,13 @@ + * if no resource bundle for the specified base name can be found + * @return a resource bundle for the given base name and locale + */ ++ @CallerSensitive + public static final ResourceBundle getBundle(String baseName, + Locale locale) + { + return getBundleImpl(baseName, locale, + /* must determine loader here, else we break stack invariant */ +- getLoader(), ++ getLoader(Reflection.getCallerClass()), + Control.INSTANCE); + } + +@@ -836,11 +835,12 @@ + * needed. + * @since 1.6 + */ ++ @CallerSensitive + public static final ResourceBundle getBundle(String baseName, Locale targetLocale, + Control control) { + return getBundleImpl(baseName, targetLocale, + /* must determine loader here, else we break stack invariant */ +- getLoader(), ++ getLoader(Reflection.getCallerClass()), + control); + } + +@@ -1676,8 +1676,9 @@ + * @since 1.6 + * @see ResourceBundle.Control#getTimeToLive(String,Locale) + */ ++ @CallerSensitive + public static final void clearCache() { +- clearCache(getLoader()); ++ clearCache(getLoader(Reflection.getCallerClass())); + } + + /** +--- openjdk/jdk/src/share/classes/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java ++++ openjdk/jdk/src/share/classes/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java +@@ -34,8 +34,10 @@ + */ + + package java.util.concurrent.atomic; ++import java.lang.reflect.*; + import sun.misc.Unsafe; +-import java.lang.reflect.*; ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; + + /** + * A reflection-based utility that enables atomic updates to +@@ -69,8 +71,9 @@ + * @throws RuntimeException with a nested reflection-based + * exception if the class does not hold field or is the wrong type + */ ++ @CallerSensitive + public static AtomicIntegerFieldUpdater newUpdater(Class tclass, String fieldName) { +- return new AtomicIntegerFieldUpdaterImpl(tclass, fieldName); ++ return new AtomicIntegerFieldUpdaterImpl(tclass, fieldName, Reflection.getCallerClass()); + } + + /** +@@ -268,13 +271,11 @@ + private final Class tclass; + private final Class cclass; + +- AtomicIntegerFieldUpdaterImpl(Class tclass, String fieldName) { ++ AtomicIntegerFieldUpdaterImpl(Class tclass, String fieldName, Class caller) { + Field field = null; +- Class caller = null; + int modifiers = 0; + try { + field = tclass.getDeclaredField(fieldName); +- caller = sun.reflect.Reflection.getCallerClass(3); + modifiers = field.getModifiers(); + sun.reflect.misc.ReflectUtil.ensureMemberAccess( + caller, tclass, null, modifiers); +--- openjdk/jdk/src/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java ++++ openjdk/jdk/src/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java +@@ -34,8 +34,10 @@ + */ + + package java.util.concurrent.atomic; ++import java.lang.reflect.*; + import sun.misc.Unsafe; +-import java.lang.reflect.*; ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; + + /** + * A reflection-based utility that enables atomic updates to +@@ -69,11 +71,13 @@ + * @throws RuntimeException with a nested reflection-based + * exception if the class does not hold field or is the wrong type. + */ ++ @CallerSensitive + public static AtomicLongFieldUpdater newUpdater(Class tclass, String fieldName) { ++ Class caller = Reflection.getCallerClass(); + if (AtomicLong.VM_SUPPORTS_LONG_CAS) +- return new CASUpdater(tclass, fieldName); ++ return new CASUpdater(tclass, fieldName, caller); + else +- return new LockedUpdater(tclass, fieldName); ++ return new LockedUpdater(tclass, fieldName, caller); + } + + /** +@@ -267,13 +271,11 @@ + private final Class tclass; + private final Class cclass; + +- CASUpdater(Class tclass, String fieldName) { ++ CASUpdater(Class tclass, String fieldName, Class caller) { + Field field = null; +- Class caller = null; + int modifiers = 0; + try { + field = tclass.getDeclaredField(fieldName); +- caller = sun.reflect.Reflection.getCallerClass(3); + modifiers = field.getModifiers(); + sun.reflect.misc.ReflectUtil.ensureMemberAccess( + caller, tclass, null, modifiers); +@@ -350,13 +352,11 @@ + private final Class tclass; + private final Class cclass; + +- LockedUpdater(Class tclass, String fieldName) { ++ LockedUpdater(Class tclass, String fieldName, Class caller) { + Field field = null; +- Class caller = null; + int modifiers = 0; + try { + field = tclass.getDeclaredField(fieldName); +- caller = sun.reflect.Reflection.getCallerClass(3); + modifiers = field.getModifiers(); + sun.reflect.misc.ReflectUtil.ensureMemberAccess( + caller, tclass, null, modifiers); +--- openjdk/jdk/src/share/classes/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java ++++ openjdk/jdk/src/share/classes/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java +@@ -34,8 +34,10 @@ + */ + + package java.util.concurrent.atomic; ++import java.lang.reflect.*; + import sun.misc.Unsafe; +-import java.lang.reflect.*; ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; + + /** + * A reflection-based utility that enables atomic updates to +@@ -88,10 +90,12 @@ + * @throws RuntimeException with a nested reflection-based + * exception if the class does not hold field or is the wrong type. + */ ++ @CallerSensitive + public static AtomicReferenceFieldUpdater newUpdater(Class tclass, Class vclass, String fieldName) { + return new AtomicReferenceFieldUpdaterImpl(tclass, + vclass, +- fieldName); ++ fieldName, ++ Reflection.getCallerClass()); + } + + /** +@@ -199,14 +203,13 @@ + + AtomicReferenceFieldUpdaterImpl(Class tclass, + Class vclass, +- String fieldName) { ++ String fieldName, ++ Class caller) { + Field field = null; + Class fieldClass = null; +- Class caller = null; + int modifiers = 0; + try { + field = tclass.getDeclaredField(fieldName); +- caller = sun.reflect.Reflection.getCallerClass(3); + modifiers = field.getModifiers(); + sun.reflect.misc.ReflectUtil.ensureMemberAccess( + caller, tclass, null, modifiers); +--- openjdk/jdk/src/share/classes/java/util/logging/Logger.java ++++ openjdk/jdk/src/share/classes/java/util/logging/Logger.java +@@ -303,13 +305,10 @@ + } + } + +- private static Logger demandLogger(String name, String resourceBundleName) { ++ private static Logger demandLogger(String name, String resourceBundleName, Class caller) { + LogManager manager = LogManager.getLogManager(); + SecurityManager sm = System.getSecurityManager(); + if (sm != null && !SystemLoggerHelper.disableCallerCheck) { +- // 0: Reflection 1: Logger.getLoggerContext 2: Logger.getLogger 3: caller +- final int SKIP_FRAMES = 3; +- Class caller = sun.reflect.Reflection.getCallerClass(SKIP_FRAMES); + if (caller.getClassLoader() == null) { + return manager.demandSystemLogger(name, resourceBundleName); + } +@@ -347,7 +346,8 @@ + * @throws NullPointerException if the name is null. + */ ++ @CallerSensitive + public static synchronized Logger getLogger(String name) { +- return demandLogger(name, null); ++ return demandLogger(name, null, Reflection.getCallerClass()); + } + + /** +@@ -404,7 +404,8 @@ + * @throws NullPointerException if the name is null. + */ ++ @CallerSensitive + public static synchronized Logger getLogger(String name, String resourceBundleName) { +- Logger result = demandLogger(name, resourceBundleName); ++ Logger result = demandLogger(name, resourceBundleName, Reflection.getCallerClass()); + if (result.resourceBundleName == null) { + // Note: we may get a MissingResourceException here. + result.setupResourceInfo(resourceBundleName); +--- openjdk/jdk/src/share/classes/javax/sql/rowset/serial/SerialJavaObject.java ++++ openjdk/jdk/src/share/classes/javax/sql/rowset/serial/SerialJavaObject.java +@@ -28,7 +28,9 @@ + import java.io.*; + import java.util.Map; + import java.lang.reflect.*; + import javax.sql.rowset.RowSetWarning; ++import sun.reflect.CallerSensitive; ++import sun.reflect.misc.ReflectUtil; + + /** + * A serializable mapping in the Java programming language of an SQL +@@ -123,7 +125,8 @@ + * @throws SerialException if an error is encountered accesssing + * the serialized object + */ ++ @CallerSensitive + public Field[] getFields() throws SerialException { + if (fields != null) { + Class c = this.obj.getClass(); + return sun.reflect.misc.FieldUtil.getFields(c); +--- openjdk/jdk/src/share/classes/sun/misc/Unsafe.java ++++ openjdk/jdk/src/share/classes/sun/misc/Unsafe.java +@@ -28,6 +28,9 @@ + import java.security.*; + import java.lang.reflect.*; + ++import sun.reflect.CallerSensitive; ++import sun.reflect.Reflection; ++ + + /** + * A collection of methods for performing low-level, unsafe operations. +@@ -80,8 +83,9 @@ + * checkPropertiesAccess method doesn't allow + * access to the system properties. + */ ++ @CallerSensitive + public static Unsafe getUnsafe() { +- Class cc = sun.reflect.Reflection.getCallerClass(2); ++ Class cc = Reflection.getCallerClass(); + if (cc.getClassLoader() != null) + throw new SecurityException("Unsafe"); + return theUnsafe; +@@ -809,6 +813,12 @@ + ClassLoader loader, + ProtectionDomain protectionDomain); + ++ /** ++ * @deprecated Use defineClass(String, byte[], int, int, ClassLoader, ProtectionDomain) ++ * instead. This method will be removed in JDK 8. ++ */ ++ @Deprecated ++ @CallerSensitive + public native Class defineClass(String name, byte[] b, int off, int len); + + /** +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/src/share/classes/sun/reflect/CallerSensitive.java +@@ -0,0 +1,41 @@ ++/* ++ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. Oracle designates this ++ * particular file as subject to the "Classpath" exception as provided ++ * by Oracle in the LICENSE file that accompanied this code. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++package sun.reflect; ++ ++import java.lang.annotation.*; ++import static java.lang.annotation.ElementType.*; ++ ++/** ++ * A method annotated @CallerSensitive is sensitive to its calling class, ++ * via {@link sun.reflect.Reflection#getCallerClass Reflection.getCallerClass}, ++ * or via some equivalent. ++ * ++ * @author John R. Rose ++ */ ++@Retention(RetentionPolicy.RUNTIME) ++@Target({METHOD}) ++public @interface CallerSensitive { ++} +--- openjdk/jdk/src/share/classes/sun/reflect/Reflection.java ++++ openjdk/jdk/src/share/classes/sun/reflect/Reflection.java +@@ -52,16 +52,11 @@ + methodFilterMap = new HashMap(); + } + +- /** Returns the class of the method realFramesToSkip +- frames up the stack (zero-based), ignoring frames associated +- with java.lang.reflect.Method.invoke() and its implementation. +- The first frame is that associated with this method, so +- getCallerClass(0) returns the Class object for +- sun.reflect.Reflection. Frames associated with +- java.lang.reflect.Method.invoke() and its implementation are +- completely ignored and do not count toward the number of "real" +- frames skipped. */ +- public static native Class getCallerClass(int realFramesToSkip); ++ /** Returns the class of the caller of the method calling this method, ++ ignoring frames associated with java.lang.reflect.Method.invoke() ++ and its implementation. */ ++ @CallerSensitive ++ public static native Class getCallerClass(); + + /** Retrieves the access flags written to the class file. For + inner classes these flags may differ from those returned by +@@ -322,4 +317,27 @@ + } + return newMembers; + } ++ ++ /** ++ * Tests if the given method is caller-sensitive and the declaring class ++ * is defined by either the bootstrap class loader or extension class loader. ++ */ ++ public static boolean isCallerSensitive(Method m) { ++ final ClassLoader loader = m.getDeclaringClass().getClassLoader(); ++ if (loader == null || isExtClassLoader(loader)) { ++ return m.isAnnotationPresent(CallerSensitive.class); ++ } ++ return false; ++ } ++ ++ private static boolean isExtClassLoader(ClassLoader loader) { ++ ClassLoader cl = ClassLoader.getSystemClassLoader(); ++ while (cl != null) { ++ if (cl.getParent() == null && cl == loader) { ++ return true; ++ } ++ cl = cl.getParent(); ++ } ++ return false; ++ } + } +--- openjdk/jdk/src/share/native/java/lang/SecurityManager.c ++++ openjdk/jdk/src/share/native/java/lang/SecurityManager.c +@@ -29,7 +29,6 @@ + + #include "java_lang_SecurityManager.h" + #include "java_lang_ClassLoader.h" +-#include "java_util_ResourceBundle.h" + + /* + * Make sure a security manager instance is initialized. +--- openjdk/jdk/src/share/native/sun/reflect/Reflection.c ++++ openjdk/jdk/src/share/native/sun/reflect/Reflection.c +@@ -27,9 +27,11 @@ + #include "sun_reflect_Reflection.h" + + JNIEXPORT jclass JNICALL Java_sun_reflect_Reflection_getCallerClass +-(JNIEnv *env, jclass unused, jint depth) ++(JNIEnv *env, jclass unused) + { +- return JVM_GetCallerClass(env, depth); ++ // Until there is hotspot @CallerSensitive support, ++ // depth must always be 2 to get the immediate caller ++ return JVM_GetCallerClass(env, 2); + } + + JNIEXPORT jint JNICALL Java_sun_reflect_Reflection_getClassAccessFlags +--- openjdk/jdk/test/Makefile ++++ openjdk/jdk/test/Makefile +@@ -459,7 +459,7 @@ + + # Stable samevm testruns (minus items from PROBLEM_LIST) + JDK_ALL_TARGETS += jdk_lang +-jdk_lang: java/lang ++jdk_lang: java/lang sun/reflect + $(call RunSamevmBatch) + + # Stable othervm testruns (minus items from PROBLEM_LIST) +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/sun/reflect/CallerSensitive/CallerSensitiveFinder.java +@@ -0,0 +1,248 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++import com.sun.tools.classfile.*; ++import static com.sun.tools.classfile.ConstantPool.*; ++import java.io.File; ++import java.io.IOException; ++import java.lang.reflect.InvocationTargetException; ++import java.nio.file.FileVisitResult; ++import java.nio.file.Files; ++import java.nio.file.Path; ++import java.nio.file.Paths; ++import java.nio.file.SimpleFileVisitor; ++import java.nio.file.attribute.BasicFileAttributes; ++import java.util.ArrayList; ++import java.util.List; ++import java.util.Set; ++import java.util.concurrent.Callable; ++import java.util.concurrent.ExecutionException; ++import java.util.concurrent.ExecutorService; ++import java.util.concurrent.Executors; ++import java.util.concurrent.FutureTask; ++ ++/* ++ * @test ++ * @bug 8010117 ++ * @summary Verify if CallerSensitive methods are annotated with ++ * sun.reflect.CallerSensitive annotation ++ * @build CallerSensitiveFinder MethodFinder ClassFileReader ++ * @run main/othervm/timeout=900 -mx800m CallerSensitiveFinder ++ */ ++public class CallerSensitiveFinder extends MethodFinder { ++ private static int numThreads = 3; ++ private static boolean verbose = false; ++ public static void main(String[] args) throws Exception { ++ List classes = new ArrayList<>(); ++ String testclasses = System.getProperty("test.classes", "."); ++ int i = 0; ++ while (i < args.length) { ++ String arg = args[i++]; ++ if (arg.equals("-v")) { ++ verbose = true; ++ } else { ++ Path p = Paths.get(testclasses, arg); ++ if (!p.toFile().exists()) { ++ throw new IllegalArgumentException(arg + " does not exist"); ++ } ++ classes.add(p); ++ } ++ } ++ if (classes.isEmpty()) { ++ classes.addAll(PlatformClassPath.getJREClasses()); ++ } ++ final String method = "sun/reflect/Reflection.getCallerClass"; ++ CallerSensitiveFinder csfinder = new CallerSensitiveFinder(method); ++ ++ List errors = csfinder.run(classes); ++ if (!errors.isEmpty()) { ++ throw new RuntimeException(errors.size() + ++ " caller-sensitive methods are missing @CallerSensitive annotation"); ++ } ++ } ++ ++ private final List csMethodsMissingAnnotation = new ArrayList<>(); ++ private final java.lang.reflect.Method mhnCallerSensitiveMethod; ++ public CallerSensitiveFinder(String... methods) throws Exception { ++ super(methods); ++ this.mhnCallerSensitiveMethod = getIsCallerSensitiveMethod(); ++ } ++ ++ static java.lang.reflect.Method getIsCallerSensitiveMethod() ++ throws ClassNotFoundException, NoSuchMethodException ++ { ++ Class cls = Class.forName("java.lang.invoke.MethodHandleNatives"); ++ java.lang.reflect.Method m = cls.getDeclaredMethod("isCallerSensitiveMethod", Class.class, String.class); ++ m.setAccessible(true); ++ return m; ++ } ++ ++ boolean inMethodHandlesList(String classname, String method) { ++ Class cls; ++ try { ++ cls = Class.forName(classname.replace('/', '.'), ++ false, ++ ClassLoader.getSystemClassLoader()); ++ return (Boolean) mhnCallerSensitiveMethod.invoke(null, cls, method); ++ } catch (ClassNotFoundException|IllegalAccessException e) { ++ throw new RuntimeException(e); ++ } catch (InvocationTargetException e) { ++ throw new RuntimeException(e.getCause()); ++ } ++ } ++ ++ public List run(List classes) throws IOException, InterruptedException, ++ ExecutionException, ConstantPoolException ++ { ++ ExecutorService pool = Executors.newFixedThreadPool(numThreads); ++ for (Path path : classes) { ++ ClassFileReader reader = ClassFileReader.newInstance(path.toFile()); ++ for (ClassFile cf : reader.getClassFiles()) { ++ String classFileName = cf.getName(); ++ // for each ClassFile ++ // parse constant pool to find matching method refs ++ // parse each method (caller) ++ // - visit and find method references matching the given method name ++ pool.submit(getTask(cf)); ++ } ++ } ++ waitForCompletion(); ++ pool.shutdown(); ++ return csMethodsMissingAnnotation; ++ } ++ ++ private static final String CALLER_SENSITIVE_ANNOTATION = "Lsun/reflect/CallerSensitive;"; ++ private static boolean isCallerSensitive(Method m, ConstantPool cp) ++ throws ConstantPoolException ++ { ++ RuntimeAnnotations_attribute attr = ++ (RuntimeAnnotations_attribute)m.attributes.get(Attribute.RuntimeVisibleAnnotations); ++ int index = 0; ++ if (attr != null) { ++ for (int i = 0; i < attr.annotations.length; i++) { ++ Annotation ann = attr.annotations[i]; ++ String annType = cp.getUTF8Value(ann.type_index); ++ if (CALLER_SENSITIVE_ANNOTATION.equals(annType)) { ++ return true; ++ } ++ } ++ } ++ return false; ++ } ++ ++ public void referenceFound(ClassFile cf, Method m, Set refs) ++ throws ConstantPoolException ++ { ++ String name = String.format("%s#%s %s", cf.getName(), ++ m.getName(cf.constant_pool), ++ m.descriptor.getValue(cf.constant_pool)); ++ if (!CallerSensitiveFinder.isCallerSensitive(m, cf.constant_pool)) { ++ csMethodsMissingAnnotation.add(name); ++ System.err.println(" Missing @CallerSensitive: " + name); ++ } else if (verbose) { ++ System.out.format("Caller found: %s%n", name); ++ } ++ if (m.access_flags.is(AccessFlags.ACC_PUBLIC)) { ++ if (!inMethodHandlesList(cf.getName(), m.getName(cf.constant_pool))) { ++ csMethodsMissingAnnotation.add(name); ++ System.err.println(" Missing in MethodHandleNatives list: " + name); ++ } else if (verbose) { ++ System.out.format("Caller found in MethodHandleNatives list: %s%n", name); ++ ++ } ++ } ++ } ++ ++ private final List> tasks = new ArrayList>(); ++ private FutureTask getTask(final ClassFile cf) { ++ FutureTask task = new FutureTask(new Callable() { ++ public String call() throws Exception { ++ return parse(cf); ++ } ++ }); ++ tasks.add(task); ++ return task; ++ } ++ ++ private void waitForCompletion() throws InterruptedException, ExecutionException { ++ for (FutureTask t : tasks) { ++ String s = t.get(); ++ } ++ System.out.println("Parsed " + tasks.size() + " classfiles"); ++ } ++ ++ static class PlatformClassPath { ++ static List getJREClasses() throws IOException { ++ List result = new ArrayList(); ++ Path home = Paths.get(System.getProperty("java.home")); ++ ++ if (home.endsWith("jre")) { ++ // jar files in /jre/lib ++ // skip /lib ++ result.addAll(addJarFiles(home.resolve("lib"))); ++ } else if (home.resolve("lib").toFile().exists()) { ++ // either a JRE or a jdk build image ++ File classes = home.resolve("classes").toFile(); ++ if (classes.exists() && classes.isDirectory()) { ++ // jdk build outputdir ++ result.add(classes.toPath()); ++ } ++ // add other JAR files ++ result.addAll(addJarFiles(home.resolve("lib"))); ++ } else { ++ throw new RuntimeException("\"" + home + "\" not a JDK home"); ++ } ++ return result; ++ } ++ ++ static List addJarFiles(final Path root) throws IOException { ++ final List result = new ArrayList(); ++ final Path ext = root.resolve("ext"); ++ Files.walkFileTree(root, new SimpleFileVisitor() { ++ @Override ++ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) ++ throws IOException { ++ if (dir.equals(root) || dir.equals(ext)) { ++ return FileVisitResult.CONTINUE; ++ } else { ++ // skip other cobundled JAR files ++ return FileVisitResult.SKIP_SUBTREE; ++ } ++ } ++ ++ @Override ++ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) ++ throws IOException { ++ File f = file.toFile(); ++ String fn = f.getName(); ++ // parse alt-rt.jar as well ++ if (fn.endsWith(".jar") && !fn.equals("jfxrt.jar")) { ++ result.add(file); ++ } ++ return FileVisitResult.CONTINUE; ++ } ++ }); ++ return result; ++ } ++ } ++} +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/sun/reflect/CallerSensitive/ClassFileReader.java +@@ -0,0 +1,338 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++import com.sun.tools.classfile.ClassFile; ++import com.sun.tools.classfile.ConstantPoolException; ++import java.io.*; ++import java.nio.file.FileVisitResult; ++import java.nio.file.Files; ++import java.nio.file.Path; ++import java.nio.file.SimpleFileVisitor; ++import java.nio.file.attribute.BasicFileAttributes; ++import java.util.*; ++import java.util.jar.JarEntry; ++import java.util.jar.JarFile; ++ ++/** ++ * ClassFileReader reads ClassFile(s) of a given path that can be ++ * a .class file, a directory, or a JAR file. ++ */ ++public class ClassFileReader { ++ /** ++ * Returns a ClassFileReader instance of a given path. ++ */ ++ public static ClassFileReader newInstance(File path) throws IOException { ++ if (!path.exists()) { ++ throw new FileNotFoundException(path.getAbsolutePath()); ++ } ++ ++ if (path.isDirectory()) { ++ return new DirectoryReader(path.toPath()); ++ } else if (path.getName().endsWith(".jar")) { ++ return new JarFileReader(path.toPath()); ++ } else { ++ return new ClassFileReader(path.toPath()); ++ } ++ } ++ ++ /** ++ * Returns a ClassFileReader instance of a given JarFile. ++ */ ++ public static ClassFileReader newInstance(Path path, JarFile jf) throws IOException { ++ return new JarFileReader(path, jf); ++ } ++ ++ protected final Path path; ++ protected final String baseFileName; ++ private ClassFileReader(Path path) { ++ this.path = path; ++ this.baseFileName = path.getFileName() != null ++ ? path.getFileName().toString() ++ : path.toString(); ++ } ++ ++ public String getFileName() { ++ return baseFileName; ++ } ++ ++ /** ++ * Returns the ClassFile matching the given binary name ++ * or a fully-qualified class name. ++ */ ++ public ClassFile getClassFile(String name) throws IOException { ++ if (name.indexOf('.') > 0) { ++ int i = name.lastIndexOf('.'); ++ String pathname = name.replace('.', File.separatorChar) + ".class"; ++ if (baseFileName.equals(pathname) || ++ baseFileName.equals(pathname.substring(0, i) + "$" + ++ pathname.substring(i+1, pathname.length()))) { ++ return readClassFile(path); ++ } ++ } else { ++ if (baseFileName.equals(name.replace('/', File.separatorChar) + ".class")) { ++ return readClassFile(path); ++ } ++ } ++ return null; ++ } ++ ++ public Iterable getClassFiles() throws IOException { ++ return new Iterable() { ++ public Iterator iterator() { ++ return new FileIterator(); ++ } ++ }; ++ } ++ ++ protected ClassFile readClassFile(Path p) throws IOException { ++ InputStream is = null; ++ try { ++ is = Files.newInputStream(p); ++ return ClassFile.read(is); ++ } catch (ConstantPoolException e) { ++ throw new ClassFileError(e); ++ } finally { ++ if (is != null) { ++ is.close(); ++ } ++ } ++ } ++ ++ class FileIterator implements Iterator { ++ int count; ++ FileIterator() { ++ this.count = 0; ++ } ++ public boolean hasNext() { ++ return count == 0 && baseFileName.endsWith(".class"); ++ } ++ ++ public ClassFile next() { ++ if (!hasNext()) { ++ throw new NoSuchElementException(); ++ } ++ try { ++ ClassFile cf = readClassFile(path); ++ count++; ++ return cf; ++ } catch (IOException e) { ++ throw new ClassFileError(e); ++ } ++ } ++ ++ public void remove() { ++ throw new UnsupportedOperationException("Not supported yet."); ++ } ++ } ++ ++ public String toString() { ++ return path.toString(); ++ } ++ ++ private static class DirectoryReader extends ClassFileReader { ++ DirectoryReader(Path path) throws IOException { ++ super(path); ++ } ++ ++ public ClassFile getClassFile(String name) throws IOException { ++ if (name.indexOf('.') > 0) { ++ int i = name.lastIndexOf('.'); ++ String pathname = name.replace('.', File.separatorChar) + ".class"; ++ Path p = path.resolve(pathname); ++ if (!p.toFile().exists()) { ++ p = path.resolve(pathname.substring(0, i) + "$" + ++ pathname.substring(i+1, pathname.length())); ++ } ++ if (p.toFile().exists()) { ++ return readClassFile(p); ++ } ++ } else { ++ Path p = path.resolve(name + ".class"); ++ if (p.toFile().exists()) { ++ return readClassFile(p); ++ } ++ } ++ return null; ++ } ++ ++ public Iterable getClassFiles() throws IOException { ++ final Iterator iter = new DirectoryIterator(); ++ return new Iterable() { ++ public Iterator iterator() { ++ return iter; ++ } ++ }; ++ } ++ ++ private List walkTree(Path dir) throws IOException { ++ final List files = new ArrayList(); ++ Files.walkFileTree(dir, new SimpleFileVisitor() { ++ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) ++ throws IOException { ++ if (file.toFile().getName().endsWith(".class")) { ++ files.add(file); ++ } ++ return FileVisitResult.CONTINUE; ++ } ++ }); ++ return files; ++ } ++ ++ class DirectoryIterator implements Iterator { ++ private List entries; ++ private int index = 0; ++ DirectoryIterator() throws IOException { ++ entries = walkTree(path); ++ index = 0; ++ } ++ ++ public boolean hasNext() { ++ return index != entries.size(); ++ } ++ ++ public ClassFile next() { ++ if (!hasNext()) { ++ throw new NoSuchElementException(); ++ } ++ Path path = entries.get(index++); ++ try { ++ return readClassFile(path); ++ } catch (IOException e) { ++ throw new ClassFileError(e); ++ } ++ } ++ ++ public void remove() { ++ throw new UnsupportedOperationException("Not supported yet."); ++ } ++ } ++ } ++ ++ private static class JarFileReader extends ClassFileReader { ++ final JarFile jarfile; ++ JarFileReader(Path path) throws IOException { ++ this(path, new JarFile(path.toFile())); ++ } ++ JarFileReader(Path path, JarFile jf) throws IOException { ++ super(path); ++ this.jarfile = jf; ++ } ++ ++ public ClassFile getClassFile(String name) throws IOException { ++ if (name.indexOf('.') > 0) { ++ int i = name.lastIndexOf('.'); ++ String entryName = name.replace('.', '/') + ".class"; ++ JarEntry e = jarfile.getJarEntry(entryName); ++ if (e == null) { ++ e = jarfile.getJarEntry(entryName.substring(0, i) + "$" ++ + entryName.substring(i + 1, entryName.length())); ++ } ++ if (e != null) { ++ return readClassFile(e); ++ } ++ } else { ++ JarEntry e = jarfile.getJarEntry(name + ".class"); ++ if (e != null) { ++ return readClassFile(e); ++ } ++ } ++ return null; ++ } ++ ++ private ClassFile readClassFile(JarEntry e) throws IOException { ++ InputStream is = null; ++ try { ++ is = jarfile.getInputStream(e); ++ return ClassFile.read(is); ++ } catch (ConstantPoolException ex) { ++ throw new IOException(ex); ++ } finally { ++ if (is != null) ++ is.close(); ++ } ++ } ++ ++ public Iterable getClassFiles() throws IOException { ++ final Iterator iter = new JarFileIterator(); ++ return new Iterable() { ++ public Iterator iterator() { ++ return iter; ++ } ++ }; ++ } ++ ++ class JarFileIterator implements Iterator { ++ private Enumeration entries; ++ private JarEntry nextEntry; ++ JarFileIterator() { ++ this.entries = jarfile.entries(); ++ while (entries.hasMoreElements()) { ++ JarEntry e = entries.nextElement(); ++ String name = e.getName(); ++ if (name.endsWith(".class")) { ++ this.nextEntry = e; ++ break; ++ } ++ } ++ } ++ ++ public boolean hasNext() { ++ return nextEntry != null; ++ } ++ ++ public ClassFile next() { ++ if (!hasNext()) { ++ throw new NoSuchElementException(); ++ } ++ ++ ClassFile cf; ++ try { ++ cf = readClassFile(nextEntry); ++ } catch (IOException e) { ++ throw new ClassFileError(e); ++ } ++ JarEntry entry = nextEntry; ++ nextEntry = null; ++ while (entries.hasMoreElements()) { ++ JarEntry e = entries.nextElement(); ++ String name = e.getName(); ++ if (name.endsWith(".class")) { ++ nextEntry = e; ++ break; ++ } ++ } ++ return cf; ++ } ++ ++ public void remove() { ++ throw new UnsupportedOperationException("Not supported yet."); ++ } ++ } ++ } ++ ++ public static class ClassFileError extends Error { ++ public ClassFileError(Throwable t) { ++ super(t); ++ } ++ } ++} +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/sun/reflect/CallerSensitive/MethodFinder.java +@@ -0,0 +1,201 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++import java.util.*; ++import com.sun.tools.classfile.*; ++import static com.sun.tools.classfile.ConstantPool.*; ++import com.sun.tools.classfile.Instruction.TypeKind; ++ ++/** ++ * MethodFinder utility class to find references to the given methods. ++ */ ++public abstract class MethodFinder { ++ final List methods; ++ public MethodFinder(String... methods) { ++ this.methods = Arrays.asList(methods); ++ } ++ ++ /** ++ * A callback method will be invoked when a method referencing ++ * any of the lookup methods. ++ * ++ * @param cf ClassFile ++ * @param m Method ++ * @param refs Set of constant pool indices that reference the methods ++ * matching the given lookup method names ++ */ ++ public abstract void referenceFound(ClassFile cf, Method m, Set refs) ++ throws ConstantPoolException; ++ ++ public String parse(ClassFile cf) throws ConstantPoolException { ++ List cprefs = new ArrayList(); ++ int index = 1; ++ for (ConstantPool.CPInfo cpInfo : cf.constant_pool.entries()) { ++ if (cpInfo.accept(cpVisitor, null)) { ++ cprefs.add(index); ++ } ++ index += cpInfo.size(); ++ } ++ ++ if (!cprefs.isEmpty()) { ++ for (Method m : cf.methods) { ++ Set refs = new HashSet(); ++ Code_attribute c_attr = (Code_attribute) m.attributes.get(Attribute.Code); ++ if (c_attr != null) { ++ for (Instruction instr : c_attr.getInstructions()) { ++ int idx = instr.accept(codeVisitor, cprefs); ++ if (idx > 0) { ++ refs.add(idx); ++ } ++ } ++ } ++ if (refs.size() > 0) { ++ referenceFound(cf, m, refs); ++ } ++ } ++ } ++ return cprefs.isEmpty() ? "" : cf.getName(); ++ } ++ ++ private ConstantPool.Visitor cpVisitor = ++ new ConstantPool.Visitor() ++ { ++ private boolean matches(CPRefInfo info) { ++ try { ++ CONSTANT_NameAndType_info nat = info.getNameAndTypeInfo(); ++ return matches(info.getClassName(), nat.getName(), nat.getType()); ++ } catch (ConstantPoolException ex) { ++ return false; ++ } ++ } ++ ++ private boolean matches(String cn, String name, String type) { ++ return methods.contains(cn + "." + name); ++ } ++ ++ public Boolean visitClass(CONSTANT_Class_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, Void p) { ++ return matches(info); ++ } ++ ++ public Boolean visitMethodref(CONSTANT_Methodref_info info, Void p) { ++ return matches(info); ++ } ++ ++ public Boolean visitDouble(CONSTANT_Double_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitFieldref(CONSTANT_Fieldref_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitFloat(CONSTANT_Float_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitInteger(CONSTANT_Integer_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitLong(CONSTANT_Long_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitNameAndType(CONSTANT_NameAndType_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitMethodHandle(CONSTANT_MethodHandle_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitMethodType(CONSTANT_MethodType_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitString(CONSTANT_String_info info, Void p) { ++ return false; ++ } ++ ++ public Boolean visitUtf8(CONSTANT_Utf8_info info, Void p) { ++ return false; ++ } ++ }; ++ ++ private Instruction.KindVisitor> codeVisitor = ++ new Instruction.KindVisitor>() ++ { ++ public Integer visitNoOperands(Instruction instr, List p) { ++ return 0; ++ } ++ ++ public Integer visitArrayType(Instruction instr, TypeKind kind, List p) { ++ return 0; ++ } ++ ++ public Integer visitBranch(Instruction instr, int offset, List p) { ++ return 0; ++ } ++ ++ public Integer visitConstantPoolRef(Instruction instr, int index, List p) { ++ return p.contains(index) ? index : 0; ++ } ++ ++ public Integer visitConstantPoolRefAndValue(Instruction instr, int index, int value, List p) { ++ return p.contains(index) ? index : 0; ++ } ++ ++ public Integer visitLocal(Instruction instr, int index, List p) { ++ return 0; ++ } ++ ++ public Integer visitLocalAndValue(Instruction instr, int index, int value, List p) { ++ return 0; ++ } ++ ++ public Integer visitLookupSwitch(Instruction instr, int default_, int npairs, int[] matches, int[] offsets, List p) { ++ return 0; ++ } ++ ++ public Integer visitTableSwitch(Instruction instr, int default_, int low, int high, int[] offsets, List p) { ++ return 0; ++ } ++ ++ public Integer visitValue(Instruction instr, int value, List p) { ++ return 0; ++ } ++ ++ public Integer visitUnknown(Instruction instr, List p) { ++ return 0; ++ } ++ }; ++} ++ +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/sun/reflect/CallerSensitive/MissingCallerSensitive.java +@@ -0,0 +1,73 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++/* ++ * @test ++ * @bug 8010117 ++ * @summary Test CallerSensitiveFinder to find missing annotation ++ * @compile -XDignore.symbol.file MissingCallerSensitive.java ++ * @build CallerSensitiveFinder MethodFinder ClassFileReader ++ * @run main/othervm MissingCallerSensitive ++ */ ++ ++import java.nio.file.Path; ++import java.nio.file.Paths; ++import java.util.*; ++public class MissingCallerSensitive { ++ public static void main(String[] args) throws Exception { ++ String testclasses = System.getProperty("test.classes", "."); ++ List classes = new ArrayList<>(); ++ classes.add(Paths.get(testclasses, "MissingCallerSensitive.class")); ++ ++ final String method = "sun/reflect/Reflection.getCallerClass"; ++ CallerSensitiveFinder csfinder = new CallerSensitiveFinder(method); ++ List errors = csfinder.run(classes); ++ /* ++ * Expected 1 method missing @CallerSenitive and 2 methods not in ++ * the MethodHandleNatives CS list ++ */ ++ if (errors.size() != 3) { ++ throw new RuntimeException("Unexpected number of methods found: " + errors.size()); ++ } ++ int count=0; ++ for (String e : errors) { ++ if (e.startsWith("MissingCallerSensitive#missingCallerSensitiveAnnotation ")) { ++ count++; ++ } ++ } ++ if (count != 2) { ++ throw new RuntimeException("Error: expected 1 method missing annotation & missing in the list"); ++ } ++ } ++ ++ @sun.reflect.CallerSensitive ++ public ClassLoader getCallerLoader() { ++ Class c = sun.reflect.Reflection.getCallerClass(); ++ return c.getClassLoader(); ++ } ++ ++ public ClassLoader missingCallerSensitiveAnnotation() { ++ Class c = sun.reflect.Reflection.getCallerClass(); ++ return c.getClassLoader(); ++ } ++} diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8010727-empty_logger_name.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8010727-empty_logger_name.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,99 @@ +# HG changeset patch +# User mchung +# Date 1368544028 25200 +# Node ID 776ac4b51f1538de78054f7774b9bbefc91374cb +# Parent 0d497f17e31b82d42b5ae0a26e6636ee9ea65887 +8010727: WLS fails to add a logger with "" in its own LogManager subclass instance +Reviewed-by: alanb, jgish + +--- openjdk/jdk/src/share/classes/java/util/logging/LogManager.java ++++ openjdk/jdk/src/share/classes/java/util/logging/LogManager.java +@@ -496,7 +496,7 @@ + } + + synchronized void ensureRootLogger(Logger logger) { +- if (logger == manager.rootLogger) ++ if (logger.getName().isEmpty()) + return; + + // during initialization, rootLogger is null when +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/LogManagerInstanceTest.java +@@ -0,0 +1,76 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++import java.util.logging.*; ++ ++/* ++ * @test ++ * @bug 8010727 ++ * @summary LogManager.addLogger should succeed to add a logger named "" ++ * if LogManager.getLogger("") returns null. ++ * ++ * @run main LogManagerInstanceTest ++ */ ++ ++public class LogManagerInstanceTest { ++ public static void main(String[] argv) { ++ LogManager mgr = LogManager.getLogManager(); ++ if (getRootLogger(mgr) == null) { ++ throw new RuntimeException("Root logger not exist"); ++ } ++ ++ SecondLogManager mgr2 = new SecondLogManager(); ++ Logger root = getRootLogger(mgr2); ++ if (mgr2.base != root) { ++ throw new RuntimeException(mgr2.base + " is not the root logger"); ++ } ++ } ++ ++ private static Logger getRootLogger(LogManager mgr) { ++ Logger l = mgr.getLogger(""); ++ if (l != null && !l.getName().isEmpty()) { ++ throw new RuntimeException(l.getName() + " is not an invalid root logger"); ++ } ++ return l; ++ } ++ ++ static class SecondLogManager extends LogManager { ++ final Logger base; ++ private SecondLogManager() { ++ Logger root = getLogger(""); ++ if (root == null) { ++ root = new BaseLogger("", null); ++ if (!super.addLogger(root)) ++ throw new RuntimeException("Fail to addLogger " + root); ++ } else { ++ System.out.println("Root logger already exists"); ++ } ++ this.base = root; ++ } ++ } ++ static class BaseLogger extends Logger { ++ BaseLogger(String name, String rbname) { ++ super(name, rbname); ++ } ++ } ++} diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8010939-logmanager_deadlock.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8010939-logmanager_deadlock.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,264 @@ +# HG changeset patch +# User jgish +# Date 1366415410 25200 +# Node ID 871acb7cd95cb1dedae326e0e8eb4630f4eb980d +# Parent 776ac4b51f1538de78054f7774b9bbefc91374cb +8010939: Deadlock in LogManager +Summary: re-order locks to avoid deadlock +Reviewed-by: mchung, alanb + +--- openjdk/jdk/src/share/classes/java/util/logging/LogManager.java ++++ openjdk/jdk/src/share/classes/java/util/logging/LogManager.java +@@ -33,10 +33,8 @@ + import java.lang.ref.WeakReference; + import java.beans.PropertyChangeListener; + import java.beans.PropertyChangeSupport; +-import java.net.URL; + import sun.misc.JavaAWTAccess; + import sun.misc.SharedSecrets; +-import sun.security.action.GetPropertyAction; + + /** + * There is a single global LogManager object that is used to +@@ -151,7 +149,6 @@ + // The global LogManager object + private static LogManager manager; + +- private final static Handler[] emptyHandlers = { }; + private Properties props = new Properties(); + private PropertyChangeSupport changes + = new PropertyChangeSupport(LogManager.class); +@@ -516,14 +513,11 @@ + throw new NullPointerException(); + } + +- // cleanup some Loggers that have been GC'ed +- manager.drainLoggerRefQueueBounded(); +- + LoggerWeakRef ref = namedLoggers.get(name); + if (ref != null) { + if (ref.get() == null) { +- // It's possible that the Logger was GC'ed after the +- // drainLoggerRefQueueBounded() call above so allow ++ // It's possible that the Logger was GC'ed after a ++ // drainLoggerRefQueueBounded() call so allow + // a new one to be registered. + removeLogger(name); + } else { +@@ -571,6 +565,8 @@ + return true; + } + ++ // note: all calls to removeLogger are synchronized on LogManager's ++ // intrinsic lock + void removeLogger(String name) { + namedLoggers.remove(name); + } +@@ -853,6 +849,7 @@ + if (name == null) { + throw new NullPointerException(); + } ++ drainLoggerRefQueueBounded(); + LoggerContext cx = getUserContext(); + if (cx.addLocalLogger(logger)) { + // Do we have a per logger handler too? +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/DrainFindDeadlockTest.java +@@ -0,0 +1,196 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++import java.lang.management.ThreadInfo; ++import java.lang.management.ThreadMXBean; ++import java.lang.Thread.State; ++import java.io.IOException; ++import java.lang.management.ManagementFactory; ++import java.util.logging.LogManager; ++import java.util.logging.Logger; ++import java.util.Map; ++ ++/** ++ * @test ++ * @bug 8010939 ++ * @summary check for deadlock between findLogger() and drainLoggerRefQueueBounded() ++ * @author jim.gish@oracle.com ++ * @build DrainFindDeadlockTest ++ * @run main/othervm/timeout=10 DrainFindDeadlockTest ++ */ ++ ++/** ++ * This test is checking for a deadlock between ++ * LogManager$LoggerContext.findLogger() and ++ * LogManager.drainLoggerRefQueueBounded() (which could happen by calling ++ * Logger.getLogger() and LogManager.readConfiguration() in different threads) ++ */ ++public class DrainFindDeadlockTest { ++ private LogManager mgr = LogManager.getLogManager(); ++ private final static int MAX_ITERATIONS = 100; ++ ++ // Get a ThreadMXBean so we can check for deadlock. N.B. this may ++ // not be supported on all platforms, which means we will have to ++ // resort to the traditional test timeout method. However, if ++ // we have the support we'll get the deadlock details if one ++ // is detected. ++ private final static ThreadMXBean threadMXBean = ++ ManagementFactory.getThreadMXBean(); ++ private final boolean threadMXBeanDeadlockSupported = ++ threadMXBean.isSynchronizerUsageSupported(); ++ ++ public static void main(String... args) throws IOException, Exception { ++ new DrainFindDeadlockTest().testForDeadlock(); ++ } ++ ++ public static void randomDelay() { ++ int runs = (int) Math.random() * 1000000; ++ int c = 0; ++ ++ for (int i=0; i threadMap = ++ Thread.getAllStackTraces(); ++ dumpStack(threadMap.get(x), x); ++ dumpStack(threadMap.get(y), y); ++ } ++ } ++ ++ private void dumpStack(StackTraceElement[] aStackElt, Thread aThread) { ++ if (aStackElt != null) { ++ System.out.println("Thread:" + aThread.getName() + ": " + ++ aThread.getState()); ++ for (StackTraceElement element: aStackElt) { ++ System.out.println(" " + element); ++ } ++ } ++ } ++ ++ @Override ++ public void run() { ++ System.out.println("Running " + Thread.currentThread().getName()); ++ for (int i=0; i < MAX_ITERATIONS*2; i++) { ++ checkState(t1, t2); ++ try { ++ Thread.sleep(10); ++ } catch (InterruptedException ex) { ++ }; ++ } ++ } ++ } ++} diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8011139-revise_checking_getenclosingclass.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8011139-revise_checking_getenclosingclass.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,58 @@ +changeset: 4968:2d3faf217561 +user: jfranck +date: Thu Apr 18 13:18:28 2013 +0200 +files: src/share/classes/java/lang/Class.java +description: +8011139: (reflect) Revise checking in getEnclosingClass +Reviewed-by: darcy, mchung, ahgross + + +--- openjdk/jdk/src/share/classes/java/lang/Class.java ++++ openjdk/jdk/src/share/classes/java/lang/Class.java +@@ -1134,13 +1134,9 @@ + enclosingCandidate = enclosingClass; + } + +- // be very careful not to change the stack depth of this +- // checkMemberAccess call for security reasons +- // see java.lang.SecurityManager.checkMemberAccess +- if (enclosingCandidate != null) { +- enclosingCandidate.checkMemberAccess(Member.DECLARED, +- Reflection.getCallerClass(), true); +- } ++ if (enclosingCandidate != null) ++ enclosingCandidate.checkPackageAccess( ++ ClassLoader.getClassLoader(Reflection.getCallerClass()), true); + return enclosingCandidate; + } + +@@ -2214,6 +2210,8 @@ + * Check if client is allowed to access members. If access is denied, + * throw a SecurityException. + * ++ * This method also enforces package access. ++ * + *

Default policy: allow all clients access with normal Java access + * control. + */ +@@ -2234,7 +2232,19 @@ + // checkMemberAccess of subclasses of SecurityManager as specified. + s.checkMemberAccess(this, which); + } ++ this.checkPackageAccess(ccl, checkProxyInterfaces); ++ } ++ } + ++ /* ++ * Checks if a client loaded in ClassLoader ccl is allowed to access this ++ * class under the current package access policy. If access is denied, ++ * throw a SecurityException. ++ */ ++ private void checkPackageAccess(final ClassLoader ccl, boolean checkProxyInterfaces) { ++ final SecurityManager s = System.getSecurityManager(); ++ if (s != null) { ++ final ClassLoader cl = getClassLoader0(); + if (ReflectUtil.needsPackageAccessCheck(ccl, cl)) { + String name = this.getName(); + int i = name.lastIndexOf('.'); + diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8011990-logger_test_urls.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8011990-logger_test_urls.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,55 @@ +# HG changeset patch +# User jgish +# Date 1366144454 14400 +# Node ID b9dc2f2b4c4daafb23b0cf76c71d88d8b2623fe0 +# Parent 108fe5a882a7bf5af5b38e963cef2729b41fa26e +8011990: TEST_BUG: java/util/logging/bundlesearch/ResourceBundleSearchTest.java fails on Windows +Summary: Fix URL to reliably work on all platforms +Reviewed-by: duke + +--- openjdk/jdk/test/java/util/logging/bundlesearch/IndirectlyLoadABundle.java ++++ openjdk/jdk/test/java/util/logging/bundlesearch/IndirectlyLoadABundle.java +@@ -21,6 +21,7 @@ + * questions. + */ + ++import java.io.File; + import java.lang.reflect.InvocationTargetException; + import java.lang.reflect.Method; + import java.net.URL; +@@ -45,11 +46,13 @@ + String testClassesDir = System.getProperty("test.classes", + System.getProperty("user.dir")); + String sep = System.getProperty("file.separator"); ++ + URL[] urls = new URL[2]; + + // Allow for both jtreg and standalone cases here +- urls[0] = new URL("file://" + testDir + sep + "resources" + sep); +- urls[1] = new URL("file://" + testClassesDir + sep ); ++ urls[0] = new File( testDir + sep + "resources" + sep ).toURI().toURL(); ++ urls[1] = new File( testClassesDir + sep ).toURI().toURL(); ++ + System.out.println("INFO: urls[0] = " + urls[0]); + System.out.println("INFO: urls[1] = " + urls[1]); + +--- openjdk/jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java ++++ openjdk/jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java +@@ -29,6 +29,7 @@ + * @build ResourceBundleSearchTest IndirectlyLoadABundle LoadItUp + * @run main ResourceBundleSearchTest + */ ++import java.io.File; + import java.net.URL; + import java.net.URLClassLoader; + import java.util.ArrayList; +@@ -70,7 +71,8 @@ + String sep = System.getProperty("file.separator"); + + URL[] urls = new URL[1]; +- urls[0] = new URL("file://" + testDir + sep + "resources" + sep); ++ ++ urls[0] = new File( testDir + sep + "resources" + sep ).toURI().toURL(); + URLClassLoader rbClassLoader = new URLClassLoader(urls); + + // Test 1 - can we find a Logger bundle from doing a stack search? diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8012243-serial_regression.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8012243-serial_regression.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,42 @@ +# HG changeset patch +# User dfuchs +# Date 1367362161 -7200 +# Node ID 7c75580b144fc3e7841e1b7fa7e4ae7efb67476e +# Parent 22decf80e0e833a8667f3e413da735b269d97fe6 +8012243: about 30% regression on specjvm2008.serial on 7u25 comparing 7u21 +Reviewed-by: alanb, skoivu, smarks, mchung + +--- openjdk/jdk/src/share/classes/java/io/ObjectStreamClass.java ++++ openjdk/jdk/src/share/classes/java/io/ObjectStreamClass.java +@@ -266,9 +266,11 @@ + if (cl == null) { + return null; + } +- Class caller = Reflection.getCallerClass(); +- if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(), cl.getClassLoader())) { +- ReflectUtil.checkPackageAccess(cl); ++ if (System.getSecurityManager() != null) { ++ Class caller = Reflection.getCallerClass(); ++ if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(), cl.getClassLoader())) { ++ ReflectUtil.checkPackageAccess(cl); ++ } + } + return cl; + } +--- openjdk/jdk/src/share/classes/java/io/ObjectStreamField.java ++++ openjdk/jdk/src/share/classes/java/io/ObjectStreamField.java +@@ -162,9 +162,11 @@ + */ + @CallerSensitive + public Class getType() { +- Class caller = Reflection.getCallerClass(); +- if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(), type.getClassLoader())) { +- ReflectUtil.checkPackageAccess(type); ++ if (System.getSecurityManager() != null) { ++ Class caller = Reflection.getCallerClass(); ++ if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(), type.getClassLoader())) { ++ ReflectUtil.checkPackageAccess(type); ++ } + } + return type; + } diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8013380-handle_renames.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8013380-handle_renames.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,107 @@ +This patch contains the rename that was part of S8013380 +diff -ruN openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp1.java openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp1.java +--- openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp1.java 1969-12-31 19:00:00.000000000 -0500 ++++ openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp1.java 2013-07-02 15:06:44.972433968 -0400 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++import java.util.logging.Logger; ++ ++/* ++ * This class is loaded onto the call stack when the getLogger methods are ++ * called and then the classes classloader can be used to find a bundle in ++ * the same directory as the class. However, Logger is not allowed ++ * to find the bundle by looking up the stack for this classloader. ++ * We verify that this cannot happen. ++ * ++ * @author Jim Gish ++ */ ++public class LoadItUp1 { ++ public Logger getAnonymousLogger(String rbName) throws Exception { ++ // we should not be able to find the resource in this directory via ++ // getLogger calls. The only way that would be possible given this setup ++ // is that if Logger.getLogger searched up the call stack ++ return Logger.getAnonymousLogger(rbName); ++ } ++ ++ public Logger getLogger(String loggerName) { ++ return Logger.getLogger(loggerName); ++ } ++ ++ public Logger getLogger(String loggerName,String bundleName) { ++ return Logger.getLogger(loggerName, bundleName); ++ } ++} +diff -ruN openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp.java openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp.java +--- openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp.java 2013-07-02 15:06:44.972433968 -0400 ++++ openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp.java 1969-12-31 19:00:00.000000000 -0500 +@@ -1,49 +0,0 @@ +-/* +- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +-import java.util.logging.Logger; +- +-/* +- * This class is loaded onto the call stack when the getLogger methods are +- * called and then the classes classloader can be used to find a bundle in +- * the same directory as the class. However, Logger is not allowed +- * to find the bundle by looking up the stack for this classloader. +- * We verify that this cannot happen. +- * +- * @author Jim Gish +- */ +-public class LoadItUp1 { +- public Logger getAnonymousLogger(String rbName) throws Exception { +- // we should not be able to find the resource in this directory via +- // getLogger calls. The only way that would be possible given this setup +- // is that if Logger.getLogger searched up the call stack +- return Logger.getAnonymousLogger(rbName); +- } +- +- public Logger getLogger(String loggerName) { +- return Logger.getLogger(loggerName); +- } +- +- public Logger getLogger(String loggerName,String bundleName) { +- return Logger.getLogger(loggerName, bundleName); +- } +-} diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8013380-logger_stack_walk_glassfish.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8013380-logger_stack_walk_glassfish.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,936 @@ +# HG changeset patch +# User andrew +# Date 1372305047 18000 +# Node ID 8c2f91c4c4b80f8725786a3006ee6043d765af72 +# Parent b9dc2f2b4c4daafb23b0cf76c71d88d8b2623fe0 +8013380: Removal of stack walk to find resource bundle breaks Glassfish startup +Summary: Use caller's classloader to load resource as an alternative to thread context classloader and system classloader +Reviewed-by: mchung, alanb + +--- openjdk/jdk/src/share/classes/java/util/logging/LogManager.java ++++ openjdk/jdk/src/share/classes/java/util/logging/LogManager.java +@@ -389,11 +389,11 @@ + // add a new Logger or return the one that has been added previously + // as a LogManager subclass may override the addLogger, getLogger, + // readConfiguration, and other methods. +- Logger demandLogger(String name, String resourceBundleName) { ++ Logger demandLogger(String name, String resourceBundleName, Class caller) { + Logger result = getLogger(name); + if (result == null) { + // only allocate the new logger once +- Logger newLogger = new Logger(name, resourceBundleName); ++ Logger newLogger = new Logger(name, resourceBundleName, caller); + do { + if (addLogger(newLogger)) { + // We successfully added the new Logger that we +@@ -475,7 +475,7 @@ + Logger demandLogger(String name, String resourceBundleName) { + // a LogManager subclass may have its own implementation to add and + // get a Logger. So delegate to the LogManager to do the work. +- return manager.demandLogger(name, resourceBundleName); ++ return manager.demandLogger(name, resourceBundleName, null); + } + + synchronized Logger findLogger(String name) { +--- openjdk/jdk/src/share/classes/java/util/logging/Logger.java ++++ openjdk/jdk/src/share/classes/java/util/logging/Logger.java +@@ -190,6 +190,7 @@ + private ArrayList kids; // WeakReferences to loggers that have us as parent + private Level levelObject; + private volatile int levelValue; // current effective level value ++ private WeakReference callersClassLoaderRef; + + /** + * GLOBAL_LOGGER_NAME is a name for the global logger. +@@ -250,15 +251,31 @@ + * no corresponding resource can be found. + */ + protected Logger(String name, String resourceBundleName) { ++ this(name, resourceBundleName, null); ++ } ++ ++ Logger(String name, String resourceBundleName, Class caller) { + this.manager = LogManager.getLogManager(); +- if (resourceBundleName != null) { +- // Note: we may get a MissingResourceException here. +- setupResourceInfo(resourceBundleName); +- } ++ setupResourceInfo(resourceBundleName, caller); + this.name = name; + levelValue = Level.INFO.intValue(); + } + ++ private void setCallersClassLoaderRef(Class caller) { ++ ClassLoader callersClassLoader = ((caller != null) ++ ? caller.getClassLoader() ++ : null); ++ if (callersClassLoader != null) { ++ this.callersClassLoaderRef = new WeakReference(callersClassLoader); ++ } ++ } ++ ++ private ClassLoader getCallersClassLoader() { ++ return (callersClassLoaderRef != null) ++ ? callersClassLoaderRef.get() ++ : null; ++ } ++ + // This constructor is used only to create the global Logger. + // It is needed to break a cyclic dependence between the LogManager + // and Logger static initializers causing deadlocks. +@@ -312,7 +329,9 @@ + return manager.demandSystemLogger(name, resourceBundleName); + } + } +- return manager.demandLogger(name, resourceBundleName); ++ return manager.demandLogger(name, resourceBundleName, caller); ++ // ends up calling new Logger(name, resourceBundleName, caller) ++ // iff the logger doesn't exist already + } + + /** +@@ -405,11 +424,24 @@ + // adding a new Logger object is handled by LogManager.addLogger(). + @CallerSensitive + public static synchronized Logger getLogger(String name, String resourceBundleName) { +- Logger result = demandLogger(name, resourceBundleName, Reflection.getCallerClass()); ++ Class callerClass = Reflection.getCallerClass(); ++ Logger result = demandLogger(name, resourceBundleName, callerClass); ++ + if (result.resourceBundleName == null) { ++ // We haven't set a bundle name yet on the Logger, so it's ok to proceed. ++ ++ // We have to set the callers ClassLoader here in case demandLogger ++ // above found a previously created Logger. This can happen, for ++ // example, if Logger.getLogger(name) is called and subsequently ++ // Logger.getLogger(name, resourceBundleName) is called. In this case ++ // we won't necessarily have the correct classloader saved away, so ++ // we need to set it here, too. ++ + // Note: we may get a MissingResourceException here. +- result.setupResourceInfo(resourceBundleName); ++ result.setupResourceInfo(resourceBundleName, callerClass); + } else if (!result.resourceBundleName.equals(resourceBundleName)) { ++ // We already had a bundle name on the Logger and we're trying ++ // to change it here which is not allowed. + throw new IllegalArgumentException(result.resourceBundleName + + " != " + resourceBundleName); + } +@@ -479,10 +511,12 @@ + * @throws MissingResourceException if the named ResourceBundle cannot be found. + */ ++ @CallerSensitive + public static synchronized Logger getAnonymousLogger(String resourceBundleName) { + LogManager manager = LogManager.getLogManager(); + // cleanup some Loggers that have been GC'ed + manager.drainLoggerRefQueueBounded(); +- Logger result = new Logger(null, resourceBundleName); ++ Logger result = new Logger(null, resourceBundleName, ++ Reflection.getCallerClass()); + result.anonymous = true; + Logger root = manager.getLogger(""); + result.doSetParent(root); +@@ -499,7 +533,7 @@ + * @return localization bundle (may be null) + */ + public ResourceBundle getResourceBundle() { +- return findResourceBundle(getResourceBundleName()); ++ return findResourceBundle(getResourceBundleName(), true); + } + + /** +@@ -581,7 +615,7 @@ + String ebname = getEffectiveResourceBundleName(); + if (ebname != null && !ebname.equals(SYSTEM_LOGGER_RB_NAME)) { + lr.setResourceBundleName(ebname); +- lr.setResourceBundle(findResourceBundle(ebname)); ++ lr.setResourceBundle(findResourceBundle(ebname, true)); + } + log(lr); + } +@@ -798,7 +832,7 @@ + lr.setLoggerName(name); + if (rbname != null) { + lr.setResourceBundleName(rbname); +- lr.setResourceBundle(findResourceBundle(rbname)); ++ lr.setResourceBundle(findResourceBundle(rbname, false)); + } + log(lr); + } +@@ -822,7 +856,6 @@ + * can be null + * @param msg The string message (or a key in the message catalog) + */ +- + public void logrb(Level level, String sourceClass, String sourceMethod, + String bundleName, String msg) { + if (level.intValue() < levelValue || levelValue == offValue) { +@@ -1347,9 +1380,18 @@ + * there is no suitable previous cached value. + * + * @param name the ResourceBundle to locate ++ * @param userCallersClassLoader if true search using the caller's ClassLoader + * @return ResourceBundle specified by name or null if not found + */ +- private synchronized ResourceBundle findResourceBundle(String name) { ++ private synchronized ResourceBundle findResourceBundle(String name, ++ boolean useCallersClassLoader) { ++ // For all lookups, we first check the thread context class loader ++ // if it is set. If not, we use the system classloader. If we ++ // still haven't found it we use the callersClassLoaderRef if it ++ // is set and useCallersClassLoader is true. We set ++ // callersClassLoaderRef initially upon creating the logger with a ++ // non-null resource bundle name. ++ + // Return a null bundle for a null name. + if (name == null) { + return null; +@@ -1382,22 +1424,52 @@ + catalogLocale = currentLocale; + return catalog; + } catch (MissingResourceException ex) { ++ // We can't find the ResourceBundle in the default ++ // ClassLoader. Drop through. ++ } ++ ++ if (useCallersClassLoader) { ++ // Try with the caller's ClassLoader ++ ClassLoader callersClassLoader = getCallersClassLoader(); ++ ++ if (callersClassLoader == null || callersClassLoader == cl) { ++ return null; ++ } ++ ++ try { ++ catalog = ResourceBundle.getBundle(name, currentLocale, ++ callersClassLoader); ++ catalogName = name; ++ catalogLocale = currentLocale; ++ return catalog; ++ } catch (MissingResourceException ex) { ++ return null; // no luck ++ } ++ } else { + return null; + } + } + + // Private utility method to initialize our one entry +- // resource bundle cache. ++ // resource bundle name cache and the callers ClassLoader + // Note: for consistency reasons, we are careful to check + // that a suitable ResourceBundle exists before setting the +- // ResourceBundleName. +- private synchronized void setupResourceInfo(String name) { ++ // resourceBundleName field. ++ // Synchronized to prevent races in setting the fields. ++ private synchronized void setupResourceInfo(String name, ++ Class callersClass) { + if (name == null) { + return; + } +- if (findResourceBundle(name) == null) { ++ ++ setCallersClassLoaderRef(callersClass); ++ if (findResourceBundle(name, true) == null) { + // We've failed to find an expected ResourceBundle. +- throw new MissingResourceException("Can't find " + name + " bundle", name, ""); ++ // unset the caller's ClassLoader since we were unable to find the ++ // the bundle using it ++ this.callersClassLoaderRef = null; ++ throw new MissingResourceException("Can't find " + name + " bundle", ++ name, ""); + } + resourceBundleName = name; + } +--- openjdk/jdk/test/java/util/logging/bundlesearch/IndirectlyLoadABundle.java ++++ openjdk/jdk/test/java/util/logging/bundlesearch/IndirectlyLoadABundle.java +@@ -21,43 +21,28 @@ + * questions. + */ + +-import java.io.File; + import java.lang.reflect.InvocationTargetException; + import java.lang.reflect.Method; ++import java.net.MalformedURLException; + import java.net.URL; + import java.net.URLClassLoader; ++import java.nio.file.Paths; ++import java.util.logging.Logger; + + /** + * This class is used to ensure that a resource bundle loadable by a classloader +- * is on the caller's stack, but not on the classpath or TCCL to ensure that +- * Logger.getLogger() can't load the bundle via a stack search ++ * is on the caller's stack, but not on the classpath or TCCL. It tests that ++ * Logger.getLogger() can load the bundle via the immediate caller's classloader + * + * @author Jim Gish + */ + public class IndirectlyLoadABundle { + +- private final static String rbName = "StackSearchableResource"; ++ private final static String rbName = "CallerSearchableResource"; + + public boolean loadAndTest() throws Throwable { +- // Find out where we are running from so we can setup the URLClassLoader URLs +- // test.src and test.classes will be set if running in jtreg, but probably +- // not otherwise +- String testDir = System.getProperty("test.src", System.getProperty("user.dir")); +- String testClassesDir = System.getProperty("test.classes", +- System.getProperty("user.dir")); +- String sep = System.getProperty("file.separator"); +- +- URL[] urls = new URL[2]; +- +- // Allow for both jtreg and standalone cases here +- urls[0] = new File( testDir + sep + "resources" + sep ).toURI().toURL(); +- urls[1] = new File( testClassesDir + sep ).toURI().toURL(); +- +- System.out.println("INFO: urls[0] = " + urls[0]); +- System.out.println("INFO: urls[1] = " + urls[1]); +- + // Make sure we can find it via the URLClassLoader +- URLClassLoader yetAnotherResourceCL = new URLClassLoader(urls, null); ++ URLClassLoader yetAnotherResourceCL = new URLClassLoader(getURLs(), null); + if (!testForValidResourceSetup(yetAnotherResourceCL)) { + throw new Exception("Couldn't directly load bundle " + rbName + + " as expected. Test config problem"); +@@ -70,23 +55,109 @@ + + " able to. Test config problem"); + } + +- Class loadItUpClazz = Class.forName("LoadItUp", true, yetAnotherResourceCL); ++ Class loadItUpClazz = Class.forName("LoadItUp1", true, ++ yetAnotherResourceCL); + ClassLoader actual = loadItUpClazz.getClassLoader(); + if (actual != yetAnotherResourceCL) { +- throw new Exception("LoadItUp was loaded by an unexpected CL: " + actual); ++ throw new Exception("LoadItUp1 was loaded by an unexpected CL: " + actual); + } + Object loadItUp = loadItUpClazz.newInstance(); +- Method testMethod = loadItUpClazz.getMethod("test", String.class); ++ Method testMethod = loadItUpClazz.getMethod("getLogger", String.class, String.class); + try { +- return (Boolean) testMethod.invoke(loadItUp, rbName); ++ return (Logger)testMethod.invoke(loadItUp, "NestedLogger1", rbName) != null; + } catch (InvocationTargetException ex) { + throw ex.getTargetException(); + } + } + ++ public boolean testGetAnonymousLogger() throws Throwable { ++ // Test getAnonymousLogger() ++ URLClassLoader loadItUpCL = new URLClassLoader(getURLs(), null); ++ Class loadItUpClazz = Class.forName("LoadItUp1", true, loadItUpCL); ++ ClassLoader actual = loadItUpClazz.getClassLoader(); ++ if (actual != loadItUpCL) { ++ throw new Exception("LoadItUp1 was loaded by an unexpected CL: " ++ + actual); ++ } ++ Object loadItUpAnon = loadItUpClazz.newInstance(); ++ Method testAnonMethod = loadItUpClazz.getMethod("getAnonymousLogger", ++ String.class); ++ try { ++ return (Logger)testAnonMethod.invoke(loadItUpAnon, rbName) != null; ++ } catch (InvocationTargetException ex) { ++ throw ex.getTargetException(); ++ } ++ } ++ ++ ++ public boolean testGetLoggerGetLoggerWithBundle() throws Throwable { ++ // test getLogger("NestedLogger2"); followed by ++ // getLogger("NestedLogger2", rbName) to see if the bundle is found ++ // ++ URL[] urls = getURLs(); ++ if (getLoggerWithNewCL(urls, "NestedLogger2", null)) { ++ return getLoggerWithNewCL(urls, "NestedLogger2", rbName); ++ ++ } else { ++ throw new Exception("TEST FAILED: first call to getLogger() failed " ++ + " in IndirectlyLoadABundle." ++ + "testGetLoggerGetLoggerWithBundle"); ++ } ++ } ++ ++ private URL[] getURLs() throws MalformedURLException { ++ // Find out where we are running from so we can setup the URLClassLoader URLs ++ // test.src and test.classes will be set if running in jtreg, but probably ++ // not otherwise ++ String testDir = System.getProperty("test.src", System.getProperty("user.dir")); ++ String testClassesDir = System.getProperty("test.classes", ++ System.getProperty("user.dir")); ++ URL[] urls = new URL[2]; ++ // Allow for both jtreg and standalone cases here ++ urls[0] = Paths.get(testDir, "resources").toUri().toURL(); ++ urls[1] = Paths.get(testClassesDir).toUri().toURL(); ++ ++ return urls; ++ } ++ ++ private boolean getLoggerWithNewCL(URL[] urls, String loggerName, ++ String bundleName) throws Throwable { ++ Logger result = null;; ++ // Test getLogger("foo"); getLogger("foo", "rbName"); ++ // First do the getLogger() call with no bundle name ++ URLClassLoader getLoggerCL = new URLClassLoader(urls, null); ++ Class loadItUpClazz1 = Class.forName("LoadItUp1", true, getLoggerCL); ++ ClassLoader actual = loadItUpClazz1.getClassLoader(); ++ if (actual != getLoggerCL) { ++ throw new Exception("LoadItUp1 was loaded by an unexpected CL: " ++ + actual); ++ } ++ Object loadItUp1 = loadItUpClazz1.newInstance(); ++ if (bundleName != null) { ++ Method getLoggerMethod = loadItUpClazz1.getMethod("getLogger", ++ String.class, ++ String.class); ++ try { ++ result = (Logger) getLoggerMethod.invoke(loadItUp1, loggerName, ++ bundleName); ++ } catch (InvocationTargetException ex) { ++ throw ex.getTargetException(); ++ } ++ } else { ++ Method getLoggerMethod = loadItUpClazz1.getMethod("getLogger", ++ String.class); ++ try { ++ result = (Logger) getLoggerMethod.invoke(loadItUp1, loggerName); ++ } catch (InvocationTargetException ex) { ++ throw ex.getTargetException(); ++ } ++ } ++ return result != null; ++ } ++ + private boolean testForValidResourceSetup(ClassLoader cl) { +- // First make sure the test environment is setup properly and the bundle actually +- // exists ++ // First make sure the test environment is setup properly and the bundle ++ // actually exists + return ResourceBundleSearchTest.isOnClassPath(rbName, cl); + } + } +rename from test/java/util/logging/bundlesearch/LoadItUp.java +rename to test/java/util/logging/bundlesearch/LoadItUp1.java +--- openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp.java ++++ openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp1.java +@@ -20,43 +20,30 @@ + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +-import java.util.MissingResourceException; + import java.util.logging.Logger; + + /* +- * This class is loaded onto the call stack when the test method is called +- * and then its classloader can be used to find a property bundle in the same +- * directory as the class. However, Logger is not allowed ++ * This class is loaded onto the call stack when the getLogger methods are ++ * called and then the classes classloader can be used to find a bundle in ++ * the same directory as the class. However, Logger is not allowed + * to find the bundle by looking up the stack for this classloader. + * We verify that this cannot happen. + * + * @author Jim Gish + */ +-public class LoadItUp { +- +- private final static boolean DEBUG = false; +- +- public Boolean test(String rbName) throws Exception { ++public class LoadItUp1 { ++ public Logger getAnonymousLogger(String rbName) throws Exception { + // we should not be able to find the resource in this directory via + // getLogger calls. The only way that would be possible given this setup + // is that if Logger.getLogger searched up the call stack +- return lookupBundle(rbName); ++ return Logger.getAnonymousLogger(rbName); + } + +- private boolean lookupBundle(String rbName) { +- // See if Logger.getLogger can find the resource in this directory +- try { +- Logger aLogger = Logger.getLogger("NestedLogger", rbName); +- } catch (MissingResourceException re) { +- if (DEBUG) { +- System.out.println( +- "As expected, LoadItUp.lookupBundle() did not find the bundle " +- + rbName); +- } +- return false; +- } +- System.out.println("FAILED: LoadItUp.lookupBundle() found the bundle " +- + rbName + " using a stack search."); +- return true; ++ public Logger getLogger(String loggerName) { ++ return Logger.getLogger(loggerName); ++ } ++ ++ public Logger getLogger(String loggerName,String bundleName) { ++ return Logger.getLogger(loggerName, bundleName); + } + } +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp2.java +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++import java.util.MissingResourceException; ++import java.util.logging.Logger; ++ ++/* ++ * This class is loaded onto the call stack by LoadItUp2Invoker from a separate ++ * classloader. LoadItUp2Invoker was loaded by a class loader that does have ++ * access to the bundle, but the class loader used to load this class does not. ++ * Thus the logging code should not be able to see the resource bundle unless ++ * it has more than a single level stack crawl, which is not allowed. ++ * ++ * @author Jim Gish ++ */ ++public class LoadItUp2 { ++ ++ private final static boolean DEBUG = false; ++ ++ public Boolean test(String rbName) throws Exception { ++ // we should not be able to find the resource in this directory via ++ // getLogger calls. The only way that would be possible given this setup ++ // is that if Logger.getLogger searched up the call stack ++ return lookupBundle(rbName); ++ } ++ ++ private boolean lookupBundle(String rbName) { ++ // See if Logger.getLogger can find the resource in this directory ++ try { ++ Logger aLogger = Logger.getLogger("NestedLogger2", rbName); ++ } catch (MissingResourceException re) { ++ if (DEBUG) { ++ System.out.println( ++ "As expected, LoadItUp2.lookupBundle() did not find the bundle " ++ + rbName); ++ } ++ return false; ++ } ++ System.out.println("FAILED: LoadItUp2.lookupBundle() found the bundle " ++ + rbName + " using a stack search."); ++ return true; ++ } ++} +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/bundlesearch/LoadItUp2Invoker.java +@@ -0,0 +1,60 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++import java.lang.reflect.InvocationTargetException; ++import java.lang.reflect.Method; ++import java.net.URL; ++import java.net.URLClassLoader; ++ ++/** ++ * This class is loaded by a class loader that can see the resource. It creates ++ * a new classloader for LoadItUp2 which cannot see the resource. So, 2 levels ++ * up the call chain we have a class/classloader that can see the resource, but ++ * 1 level up the class/classloader cannot. ++ * ++ * @author Jim Gish ++ */ ++public class LoadItUp2Invoker { ++ private URLClassLoader cl; ++ private String rbName; ++ private Object loadItUp2; ++ private Method testMethod; ++ ++ public void setup(URL[] urls, String rbName) throws ++ ReflectiveOperationException { ++ this.cl = new URLClassLoader(urls, null); ++ this.rbName = rbName; ++ // Using this new classloader, load the actual test class ++ // which is now two levels removed from the original caller ++ Class loadItUp2Clazz = Class.forName("LoadItUp2", true , cl); ++ this.loadItUp2 = loadItUp2Clazz.newInstance(); ++ this.testMethod = loadItUp2Clazz.getMethod("test", String.class); ++ } ++ ++ public Boolean test() throws Throwable { ++ try { ++ return (Boolean) testMethod.invoke(loadItUp2, rbName); ++ } catch (InvocationTargetException ex) { ++ throw ex.getTargetException(); ++ } ++ } ++} +--- openjdk/jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java ++++ openjdk/jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java +@@ -23,15 +23,15 @@ + + /* + * @test +- * @bug 8010127 ++ * @bug 8010127 8013380 + * @summary Remove the stack search for a resource bundle Logger to use + * @author Jim Gish +- * @build ResourceBundleSearchTest IndirectlyLoadABundle LoadItUp +- * @run main ResourceBundleSearchTest ++ * @build ResourceBundleSearchTest IndirectlyLoadABundle LoadItUp1 LoadItUp2 TwiceIndirectlyLoadABundle LoadItUp2Invoker ++ * @run main/othervm ResourceBundleSearchTest + */ +-import java.io.File; + import java.net.URL; + import java.net.URLClassLoader; ++import java.nio.file.Paths; + import java.util.ArrayList; + import java.util.List; + import java.util.Locale; +@@ -39,6 +39,12 @@ + import java.util.ResourceBundle; + import java.util.logging.Logger; + ++/** ++ * This class tests various scenarios of loading resource bundles from ++ * java.util.logging. Since jtreg uses the logging system, it is necessary to ++ * run these tests using othervm mode to ensure no interference from logging ++ * initialization by jtreg ++ */ + public class ResourceBundleSearchTest { + + private final static boolean DEBUG = false; +@@ -49,7 +55,7 @@ + + private static int numPass = 0; + private static int numFail = 0; +- private static List msgs = new ArrayList(); ++ private static List msgs = new ArrayList<>(); + + public static void main(String[] args) throws Throwable { + ResourceBundleSearchTest test = new ResourceBundleSearchTest(); +@@ -60,47 +66,54 @@ + // ensure we are using en as the default Locale so we can find the resource + Locale.setDefault(Locale.ENGLISH); + +- String testClasses = System.getProperty("test.classes"); +- System.out.println( "test.classes = " + testClasses ); +- + ClassLoader myClassLoader = ClassLoader.getSystemClassLoader(); + + // Find out where we are running from so we can setup the URLClassLoader URL + String userDir = System.getProperty("user.dir"); + String testDir = System.getProperty("test.src", userDir); +- String sep = System.getProperty("file.separator"); + + URL[] urls = new URL[1]; + +- urls[0] = new File( testDir + sep + "resources" + sep ).toURI().toURL(); ++ urls[0] = Paths.get(testDir, "resources").toUri().toURL(); + URLClassLoader rbClassLoader = new URLClassLoader(urls); + + // Test 1 - can we find a Logger bundle from doing a stack search? + // We shouldn't be able to +- assertFalse(testGetBundleFromStackSearch(), "testGetBundleFromStackSearch"); ++ assertFalse(testGetBundleFromStackSearch(), "1-testGetBundleFromStackSearch"); + + // Test 2 - can we find a Logger bundle off of the Thread context class + // loader? We should be able to. +- assertTrue( +- testGetBundleFromTCCL(TCCL_TEST_BUNDLE, rbClassLoader), +- "testGetBundleFromTCCL"); ++ assertTrue(testGetBundleFromTCCL(TCCL_TEST_BUNDLE, rbClassLoader), ++ "2-testGetBundleFromTCCL"); + + // Test 3 - Can we find a Logger bundle from the classpath? We should be +- // able to, but .... +- // We check to see if the bundle is on the classpath or not so that this +- // will work standalone. In the case of jtreg/samevm, +- // the resource bundles are not on the classpath. Running standalone +- // (or othervm), they are ++ // able to. We'll first check to make sure the setup is correct and ++ // it actually is on the classpath before checking whether logging ++ // can see it there. + if (isOnClassPath(PROP_RB_NAME, myClassLoader)) { + debug("We should be able to see " + PROP_RB_NAME + " on the classpath"); + assertTrue(testGetBundleFromSystemClassLoader(PROP_RB_NAME), +- "testGetBundleFromSystemClassLoader"); ++ "3-testGetBundleFromSystemClassLoader"); + } else { +- debug("We should not be able to see " + PROP_RB_NAME + " on the classpath"); +- assertFalse(testGetBundleFromSystemClassLoader(PROP_RB_NAME), +- "testGetBundleFromSystemClassLoader"); ++ throw new Exception("TEST SETUP FAILURE: Cannot see " + PROP_RB_NAME ++ + " on the classpath"); + } + ++ // Test 4 - we should be able to find a bundle from the caller's ++ // classloader, but only one level up. ++ assertTrue(testGetBundleFromCallersClassLoader(), ++ "4-testGetBundleFromCallersClassLoader"); ++ ++ // Test 5 - this ensures that getAnonymousLogger(String rbName) ++ // can find the bundle from the caller's classloader ++ assertTrue(testGetAnonymousLogger(), "5-testGetAnonymousLogger"); ++ ++ // Test 6 - first call getLogger("myLogger"). ++ // Then call getLogger("myLogger","bundleName") from a different ClassLoader ++ // Make sure we find the bundle ++ assertTrue(testGetBundleFromSecondCallersClassLoader(), ++ "6-testGetBundleFromSecondCallersClassLoader"); ++ + report(); + } + +@@ -112,7 +125,7 @@ + System.out.println(msg); + } + throw new Exception(numFail + " out of " + (numPass + numFail) +- + " tests failed."); ++ + " tests failed."); + } + } + +@@ -122,7 +135,7 @@ + } else { + numFail++; + System.out.println("FAILED: " + testName +- + " was supposed to return true but did NOT!"); ++ + " was supposed to return true but did NOT!"); + } + } + +@@ -132,13 +145,20 @@ + } else { + numFail++; + System.out.println("FAILED: " + testName +- + " was supposed to return false but did NOT!"); ++ + " was supposed to return false but did NOT!"); + } + } + + public boolean testGetBundleFromStackSearch() throws Throwable { + // This should fail. This was the old functionality to search up the + // caller's call stack ++ TwiceIndirectlyLoadABundle indirectLoader = new TwiceIndirectlyLoadABundle(); ++ return indirectLoader.loadAndTest(); ++ } ++ ++ public boolean testGetBundleFromCallersClassLoader() throws Throwable { ++ // This should pass. This exercises getting the bundle using the ++ // class loader of the caller (one level up) + IndirectlyLoadABundle indirectLoader = new IndirectlyLoadABundle(); + return indirectLoader.loadAndTest(); + } +@@ -193,14 +213,29 @@ + bundleName); + } catch (MissingResourceException re) { + msgs.add("INFO: testGetBundleFromSystemClassLoader() did not find bundle " +- + bundleName); ++ + bundleName); + return false; + } + msgs.add("INFO: testGetBundleFromSystemClassLoader() found the bundle " +- + bundleName); ++ + bundleName); + return true; + } + ++ private boolean testGetAnonymousLogger() throws Throwable { ++ // This should pass. This exercises getting the bundle using the ++ // class loader of the caller (one level up) when calling ++ // Logger.getAnonymousLogger(String rbName) ++ IndirectlyLoadABundle indirectLoader = new IndirectlyLoadABundle(); ++ return indirectLoader.testGetAnonymousLogger(); ++ } ++ ++ private boolean testGetBundleFromSecondCallersClassLoader() throws Throwable { ++ // This should pass. This exercises getting the bundle using the ++ // class loader of the caller (one level up) ++ IndirectlyLoadABundle indirectLoader = new IndirectlyLoadABundle(); ++ return indirectLoader.testGetLoggerGetLoggerWithBundle(); ++ } ++ + public static class LoggingThread extends Thread { + + boolean foundBundle = false; +@@ -227,13 +262,13 @@ + // this should succeed if the bundle is on the system classpath. + try { + Logger aLogger = Logger.getLogger(ResourceBundleSearchTest.newLoggerName(), +- bundleName); +- msg = "INFO: LoggingRunnable() found the bundle " + bundleName +- + (setTCCL ? " with " : " without ") + "setting the TCCL"; ++ bundleName); ++ msg = "INFO: LoggingThread.run() found the bundle " + bundleName ++ + (setTCCL ? " with " : " without ") + "setting the TCCL"; + foundBundle = true; + } catch (MissingResourceException re) { +- msg = "INFO: LoggingRunnable() did not find the bundle " + bundleName +- + (setTCCL ? " with " : " without ") + "setting the TCCL"; ++ msg = "INFO: LoggingThread.run() did not find the bundle " + bundleName ++ + (setTCCL ? " with " : " without ") + "setting the TCCL"; + foundBundle = false; + } + } catch (Throwable e) { +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/bundlesearch/TwiceIndirectlyLoadABundle.java +@@ -0,0 +1,91 @@ ++/* ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++import java.lang.reflect.InvocationTargetException; ++import java.lang.reflect.Method; ++import java.net.URL; ++import java.net.URLClassLoader; ++import java.nio.file.Paths; ++ ++/** ++ * This class constructs a scenario where a bundle is accessible on the call ++ * stack two levels up from the call to getLogger(), but not on the immediate ++ * caller. This tests that getLogger() isn't doing a stack crawl more than one ++ * level up to find a bundle. ++ * ++ * @author Jim Gish ++ */ ++public class TwiceIndirectlyLoadABundle { ++ ++ private final static String rbName = "StackSearchableResource"; ++ ++ public boolean loadAndTest() throws Throwable { ++ // Find out where we are running from so we can setup the URLClassLoader URLs ++ // test.src and test.classes will be set if running in jtreg, but probably ++ // not otherwise ++ String testDir = System.getProperty("test.src", System.getProperty("user.dir")); ++ String testClassesDir = System.getProperty("test.classes", ++ System.getProperty("user.dir")); ++ URL[] urls = new URL[2]; ++ ++ // Allow for both jtreg and standalone cases here ++ // Unlike the 1-level test where we can get the bundle from the caller's ++ // class loader, for this one we don't want to expose the resource directory ++ // to the next class. That way we're invoking the LoadItUp2Invoker class ++ // from this class that does have access to the resources (two levels ++ // up the call stack), but the Invoker itself won't have access to resource ++ urls[0] = Paths.get(testDir,"resources").toUri().toURL(); ++ urls[1] = Paths.get(testClassesDir).toUri().toURL(); ++ ++ // Make sure we can find it via the URLClassLoader ++ URLClassLoader yetAnotherResourceCL = new URLClassLoader(urls, null); ++ Class loadItUp2InvokerClazz = Class.forName("LoadItUp2Invoker", true, ++ yetAnotherResourceCL); ++ ClassLoader actual = loadItUp2InvokerClazz.getClassLoader(); ++ if (actual != yetAnotherResourceCL) { ++ throw new Exception("LoadItUp2Invoker was loaded by an unexpected CL: " ++ + actual); ++ } ++ Object loadItUp2Invoker = loadItUp2InvokerClazz.newInstance(); ++ ++ Method setupMethod = loadItUp2InvokerClazz.getMethod("setup", ++ urls.getClass(), String.class); ++ try { ++ // For the next class loader we create, we want to leave off ++ // the resources. That way loadItUp2Invoker will have access to ++ // them, but the next class won't. ++ URL[] noResourceUrl = new URL[1]; ++ noResourceUrl[0] = urls[1]; // from above -- just the test classes ++ setupMethod.invoke(loadItUp2Invoker, noResourceUrl, rbName); ++ } catch (InvocationTargetException ex) { ++ throw ex.getTargetException(); ++ } ++ ++ Method testMethod = loadItUp2InvokerClazz.getMethod("test"); ++ try { ++ return (Boolean) testMethod.invoke(loadItUp2Invoker); ++ } catch (InvocationTargetException ex) { ++ throw ex.getTargetException(); ++ } ++ } ++} +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/java/util/logging/bundlesearch/resources/CallerSearchableResource_en.properties +@@ -0,0 +1,25 @@ ++# ++# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++# ++# This code is free software; you can redistribute it and/or modify it ++# under the terms of the GNU General Public License version 2 only, as ++# published by the Free Software Foundation. ++# ++# This code is distributed in the hope that it will be useful, but WITHOUT ++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++# version 2 for more details (a copy is included in the LICENSE file that ++# accompanied this code). ++# ++# You should have received a copy of the GNU General Public License version ++# 2 along with this work; if not, write to the Free Software Foundation, ++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++# ++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++# or visit www.oracle.com if you need additional information or have any ++# questions. ++# ++sample1=translation #4 for sample1 ++sample2=translation #4 for sample2 ++supports-test=ResourceBundleSearchTest diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8014718-remove_logging_suntoolkit.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8014718-remove_logging_suntoolkit.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,112 @@ +# HG changeset patch +# User leonidr +# Date 1369061494 -14400 +# Node ID d2a1f8885e65ed180240b4d1c298260dd328340e +# Parent 529e737ece0c08c9de2aa4f3faa1a5e3887ee51e +8014718: Netbeans IDE begins to throw a lot exceptions since 7u25 b10 +Summary: Removed logging from SunToolkit +Reviewed-by: art + +--- openjdk/jdk/src/share/classes/java/awt/Toolkit.java ++++ openjdk/jdk/src/share/classes/java/awt/Toolkit.java +@@ -48,8 +48,6 @@ + import java.io.FileInputStream; + + import java.util.*; +-import java.util.logging.*; +- + import java.beans.PropertyChangeListener; + import java.beans.PropertyChangeSupport; + import sun.awt.AppContext; +@@ -1978,7 +1976,7 @@ + */ + public abstract boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType modalExclusionType); + +- private static final Logger log = Logger.getLogger("java.awt.Toolkit"); ++ // 8014736: logging has been removed from Toolkit + + private static final int LONG_BITS = 64; + private int[] calls = new int[LONG_BITS]; +@@ -2145,12 +2143,6 @@ + } + + synchronized int countAWTEventListeners(long eventMask) { +- if (log.isLoggable(Level.FINE)) { +- if (eventMask == 0) { +- log.log(Level.FINE, "Assertion (eventMask != 0) failed"); +- } +- } +- + int ci = 0; + for (; eventMask != 0; eventMask >>>= 1, ci++) { + } +--- openjdk/jdk/src/share/classes/sun/awt/SunToolkit.java ++++ openjdk/jdk/src/share/classes/sun/awt/SunToolkit.java +@@ -55,7 +55,7 @@ + implements WindowClosingSupport, WindowClosingListener, + ComponentFactory, InputMethodSupport, KeyboardFocusManagerPeerProvider { + +- private static final Logger log = Logger.getLogger("sun.awt.SunToolkit"); ++ // 8014736: logging has been removed from SunToolkit + + /* Load debug settings for native code */ + static { +@@ -520,10 +520,6 @@ + if (event == null) { + throw new NullPointerException(); + } +- AppContext eventContext = targetToAppContext(event.getSource()); +- if (eventContext != null && !eventContext.equals(appContext)) { +- log.fine("Event posted on wrong app context : " + event); +- } + PostEventQueue postEventQueue = + (PostEventQueue)appContext.get(POST_EVENT_QUEUE_KEY); + if (postEventQueue != null) { +@@ -924,10 +920,6 @@ + //with scale factors x1, x3/4, x2/3, xN, x1/N. + Image im = i.next(); + if (im == null) { +- if (log.isLoggable(Level.FINER)) { +- log.log(Level.FINER, "SunToolkit.getScaledIconImage: " + +- "Skipping the image passed into Java because it's null."); +- } + continue; + } + if (im instanceof ToolkitImage) { +@@ -940,10 +932,6 @@ + iw = im.getWidth(null); + ih = im.getHeight(null); + } catch (Exception e){ +- if (log.isLoggable(Level.FINER)) { +- log.log(Level.FINER, "SunToolkit.getScaledIconImage: " + +- "Perhaps the image passed into Java is broken. Skipping this icon."); +- } + continue; + } + if (iw > 0 && ih > 0) { +@@ -1015,14 +1003,6 @@ + try { + int x = (width - bestWidth) / 2; + int y = (height - bestHeight) / 2; +- if (log.isLoggable(Level.FINER)) { +- log.log(Level.FINER, "WWindowPeer.getScaledIconData() result : " + +- "w : " + width + " h : " + height + +- " iW : " + bestImage.getWidth(null) + " iH : " + bestImage.getHeight(null) + +- " sim : " + bestSimilarity + " sf : " + bestScaleFactor + +- " adjW : " + bestWidth + " adjH : " + bestHeight + +- " x : " + x + " y : " + y); +- } + g.drawImage(bestImage, x, y, bestWidth, bestHeight, null); + } finally { + g.dispose(); +@@ -1033,10 +1013,6 @@ + public static DataBufferInt getScaledIconData(java.util.List imageList, int width, int height) { + BufferedImage bimage = getScaledIconImage(imageList, width, height); + if (bimage == null) { +- if (log.isLoggable(Level.FINER)) { +- log.log(Level.FINER, "SunToolkit.getScaledIconData: " + +- "Perhaps the image passed into Java is broken. Skipping this icon."); +- } + return null; + } + Raster raster = bimage.getRaster(); diff -r d59bbf7333e0 -r d146c22f9e46 patches/openjdk/8014745-logger_stack_walk_switch.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/8014745-logger_stack_walk_switch.patch Wed Jul 03 23:28:46 2013 -0400 @@ -0,0 +1,199 @@ +# HG changeset patch +# User mchung +# Date 1368826191 25200 +# Node ID 1e74b61253eb8c0d8d70512ab84ba16366e02c68 +# Parent d2a1f8885e65ed180240b4d1c298260dd328340e +8014745: Provide a switch to allow stack walk search of resource bundle +Reviewed-by: alanb, jgish + +--- openjdk/jdk/make/java/java/mapfile-vers ++++ openjdk/jdk/make/java/java/mapfile-vers +@@ -266,6 +266,7 @@ + Java_sun_reflect_NativeConstructorAccessorImpl_newInstance0; + Java_sun_reflect_NativeMethodAccessorImpl_invoke0; + Java_sun_reflect_Reflection_getCallerClass; ++ Java_sun_reflect_Reflection_getCallerClass0; + Java_sun_reflect_Reflection_getClassAccessFlags; + Java_sun_misc_Version_getJdkVersionInfo; + Java_sun_misc_Version_getJdkSpecialVersion; +--- openjdk/jdk/src/share/classes/java/util/logging/Logger.java ++++ openjdk/jdk/src/share/classes/java/util/logging/Logger.java +@@ -309,8 +309,13 @@ + // null, we assume it's a system logger and add it to the system context. + // These system loggers only set the resource bundle to the given + // resource bundle name (rather than the default system resource bundle). +- private static class SystemLoggerHelper { +- static boolean disableCallerCheck = getBooleanProperty("sun.util.logging.disableCallerCheck"); ++ private static class LoggerHelper { ++ static boolean disableCallerCheck = ++ getBooleanProperty("sun.util.logging.disableCallerCheck"); ++ ++ // workaround to turn on the old behavior for resource bundle search ++ static boolean allowStackWalkSearch = ++ getBooleanProperty("jdk.logging.allowStackWalkSearch"); + private static boolean getBooleanProperty(final String key) { + String s = AccessController.doPrivileged(new PrivilegedAction() { + public String run() { +@@ -324,7 +329,7 @@ + private static Logger demandLogger(String name, String resourceBundleName, Class caller) { + LogManager manager = LogManager.getLogManager(); + SecurityManager sm = System.getSecurityManager(); +- if (sm != null && !SystemLoggerHelper.disableCallerCheck) { ++ if (sm != null && !LoggerHelper.disableCallerCheck) { + if (caller.getClassLoader() == null) { + return manager.demandSystemLogger(name, resourceBundleName); + } +@@ -1431,25 +1436,61 @@ + if (useCallersClassLoader) { + // Try with the caller's ClassLoader + ClassLoader callersClassLoader = getCallersClassLoader(); ++ if (callersClassLoader != null && callersClassLoader != cl) { ++ try { ++ catalog = ResourceBundle.getBundle(name, currentLocale, ++ callersClassLoader); ++ catalogName = name; ++ catalogLocale = currentLocale; ++ return catalog; ++ } catch (MissingResourceException ex) { ++ } ++ } ++ } + +- if (callersClassLoader == null || callersClassLoader == cl) { +- return null; +- } +- +- try { +- catalog = ResourceBundle.getBundle(name, currentLocale, +- callersClassLoader); +- catalogName = name; +- catalogLocale = currentLocale; +- return catalog; +- } catch (MissingResourceException ex) { +- return null; // no luck +- } ++ // If -Djdk.logging.allowStackWalkSearch=true is set, ++ // does stack walk to search for the resource bundle ++ if (LoggerHelper.allowStackWalkSearch) { ++ return findResourceBundleFromStack(name, currentLocale, cl); + } else { + return null; + } + } + ++ /** ++ * This method will fail when running with a VM that enforces caller-sensitive ++ * methods and only allows to get the immediate caller. ++ */ ++ @CallerSensitive ++ private synchronized ResourceBundle findResourceBundleFromStack(String name, ++ Locale locale, ++ ClassLoader cl) ++ { ++ for (int ix = 0; ; ix++) { ++ Class clz = sun.reflect.Reflection.getCallerClass(ix); ++ if (clz == null) { ++ break; ++ } ++ ClassLoader cl2 = clz.getClassLoader(); ++ if (cl2 == null) { ++ cl2 = ClassLoader.getSystemClassLoader(); ++ } ++ if (cl == cl2) { ++ // We've already checked this classloader. ++ continue; ++ } ++ cl = cl2; ++ try { ++ catalog = ResourceBundle.getBundle(name, locale, cl); ++ catalogName = name; ++ catalogLocale = locale; ++ return catalog; ++ } catch (MissingResourceException ex) { ++ } ++ } ++ return null; ++ } ++ + // Private utility method to initialize our one entry + // resource bundle name cache and the callers ClassLoader + // Note: for consistency reasons, we are careful to check +--- openjdk/jdk/src/share/classes/sun/reflect/Reflection.java ++++ openjdk/jdk/src/share/classes/sun/reflect/Reflection.java +@@ -58,6 +58,21 @@ + @CallerSensitive + public static native Class getCallerClass(); + ++ /** ++ * @deprecated No replacement. This method will be removed in the next ++ * JDK 7 update release. ++ */ ++ @Deprecated ++ @CallerSensitive ++ public static Class getCallerClass(int depth) { ++ return getCallerClass0(depth); ++ } ++ ++ // If the VM enforces getting caller class with @CallerSensitive, ++ // this will fail anyway. ++ @CallerSensitive ++ private static native Class getCallerClass0(int depth); ++ + /** Retrieves the access flags written to the class file. For + inner classes these flags may differ from those returned by + Class.getModifiers(), which searches the InnerClasses +--- openjdk/jdk/src/share/native/sun/reflect/Reflection.c ++++ openjdk/jdk/src/share/native/sun/reflect/Reflection.c +@@ -34,6 +34,12 @@ + return JVM_GetCallerClass(env, 2); + } + ++JNIEXPORT jclass JNICALL Java_sun_reflect_Reflection_getCallerClass0 ++(JNIEnv *env, jclass unused, jint depth) ++{ ++ return JVM_GetCallerClass(env, depth); ++} ++ + JNIEXPORT jint JNICALL Java_sun_reflect_Reflection_getClassAccessFlags + (JNIEnv *env, jclass unused, jclass cls) + { +--- openjdk/jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java ++++ openjdk/jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java +@@ -28,6 +28,7 @@ + * @author Jim Gish + * @build ResourceBundleSearchTest IndirectlyLoadABundle LoadItUp1 LoadItUp2 TwiceIndirectlyLoadABundle LoadItUp2Invoker + * @run main/othervm ResourceBundleSearchTest ++ * @run main/othervm -Djdk.logging.allowStackWalkSearch=true ResourceBundleSearchTest + */ + import java.net.URL; + import java.net.URLClassLoader; +@@ -79,7 +80,15 @@ + + // Test 1 - can we find a Logger bundle from doing a stack search? + // We shouldn't be able to +- assertFalse(testGetBundleFromStackSearch(), "1-testGetBundleFromStackSearch"); ++ // unless -Djdk.logging.allowStackWalkSearch=true is set ++ ++ boolean allowStackWalkSearch = Boolean.getBoolean("jdk.logging.allowStackWalkSearch"); ++ if (allowStackWalkSearch) { ++ assertTrue(testGetBundleFromStackSearch(), "1-testGetBundleFromStackSearch"); ++ } else { ++ // default behavior ++ assertFalse(testGetBundleFromStackSearch(), "1-testGetBundleFromStackSearch"); ++ } + + // Test 2 - can we find a Logger bundle off of the Thread context class + // loader? We should be able to. +@@ -111,8 +120,10 @@ + // Test 6 - first call getLogger("myLogger"). + // Then call getLogger("myLogger","bundleName") from a different ClassLoader + // Make sure we find the bundle +- assertTrue(testGetBundleFromSecondCallersClassLoader(), +- "6-testGetBundleFromSecondCallersClassLoader"); ++ if (!allowStackWalkSearch) { ++ assertTrue(testGetBundleFromSecondCallersClassLoader(), ++ "6-testGetBundleFromSecondCallersClassLoader"); ++ } + + report(); + }