pike.git / lib / modules / Calendar.pmod / TZrules.pmod

version» Context lines:

pike.git/lib/modules/Calendar.pmod/TZrules.pmod:1: + // ---------------------------------------------------------------- + // Daylight savings and war time rules + // + // NOTE: this file is generated by mkrules.pike; + // please do not edit manually /Mirar + // ----------------------------------------------------------------    -  + // ---------------------------------------------------------------- + // all rules are based on the gregorian calendar, so + // this is the gregorian rule: + // ---------------------------------------------------------------- +  + static array gregorian_yjd(int jd) + { +  int d=jd-1721426; +  +  int century=(4*d+3)/146097; +  int century_jd=(century*146097)/4; +  int century_day=d-century_jd; +  int century_year=(100*century_day+75)/36525; +  +  int y=century*100+century_year+1; +  +  return +  ({ +  y, +  1721426+century_year*365+century_year/4+century_jd, +  (!(((y)%4) || (!((y)%100) && ((y)%400)))) +  }); + } +  + // ---------------------------------------------------------------- + // Base "Timezone with rules" class + // ---------------------------------------------------------------- +  + class TZRules + { +  constant is_timezone=1; +  constant is_dst_timezone=1; +  static int offset_to_utc; +  string name; +  +  static function(string:string) tzformat; +  static array names; +  +  static void create(int offset,string _name) +  { +  offset_to_utc=offset; +  name=_name; +  if (search(name,"/")!=-1) +  { +  names=name/"/"; +  tzformat=lambda(string s) +  { +  if (s=="") return names[0]; else return names[1]; +  }; +  } +  else +  tzformat=lambda(string s) { return sprintf(name,s); }; +  } +  + // the Rule: + // which julian day does dst start and end this year? +  static array(array(string|int)) jd_year_periods(int jd); +  + // is (midnight) this julian day dst? +  array tz_jd(int jd) +  { +  array(array(string|int)) a=jd_year_periods(jd); +  +  int i=0,n=sizeof(a)-1; +  while (i<n) +  { +  array b=a[i+1]; +  if (jd<b[0]) break; +  if (jd==b[0] && -offset_to_utc+b[1]>=0) break; +  i++; +  } +  +  return ({offset_to_utc-a[i][2],tzformat(a[i][3])}); +  } +  + // is this unixtime (utc) dst? +  array tz_ux(int ux) +  { +  int jd=2440588+ux/86400; +  array(array(string|int)) a=jd_year_periods(jd); +  +  int i=0,n=sizeof(a)-1; +  while (i<n) +  { +  array b=a[i+1]; +  if (jd<b[0]-1) break; +  if (jd<b[0]+1 && +  ux<(b[0]-2440588)*86400+b[1]) break; +  i++; +  } +  +  return ({offset_to_utc-a[i][2],tzformat(a[i][3])}); +  } +  +  string _sprintf(int t) { return (t=='O')?"Timezone("+name+")":0; } +  +  int raw_utc_offset() { return offset_to_utc; } + } +  + // ---------------------------------------------------------------------- + // DST Rules + // ---------------------------------------------------------------------- +  + // useful macros + #define FIXED(D) (yjd+((D)-1)) + #define FIX_L(D) (yjd+leap+((D)-1)) + #define LDAY(D,W) (yjd+((D)-1)-( (yjd+((D)+(8-W)-1)) % 7)) + #define LDAYL(D,W) (yjd+((D)-1)+leap-( (yjd+leap+((D)+(8-W)-1)) % 7)) + #define UO offset_to_utc +  + // ---------------------------------------------------------------------- + class Algeria + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1916: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(166) ,UO+82800 ,3600 ,"S" }), // Jun 14 +  ({LDAY (281,7),UO+82800 ,0 ,"" })});// Oct Sun<=7 +  case 1917: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(83) ,UO+82800 ,3600 ,"S" }), // Mar 24 +  ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun<=7 +  case 1918: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(68) ,UO+82800 ,3600 ,"S" }), // Mar 9 +  ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun<=7 +  case 1919: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Mar 1 +  ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun<=7 +  case 1920: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(45) ,UO+82800 ,3600 ,"S" }), // Feb 14 +  ({FIXED(297) ,UO+82800 ,0 ,"" })});// Oct 23 +  case 1921: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(73) ,UO+82800 ,3600 ,"S" }), // Mar 14 +  ({FIXED(172) ,UO+82800 ,0 ,"" })});// Jun 21 +  case 1939: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(254) ,UO+82800 ,3600 ,"S" }), // Sep 11 +  ({FIXED(323) ,UO+0 ,0 ,"" })});// Nov 19 +  case 1944: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (98,1) ,UO+7200 ,3600 ,"S" }), // Apr Mon<=7 +  ({FIXED(282) ,UO+3600 ,0 ,"" })});// Oct 8 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,1) ,UO+7200 ,3600 ,"S" }), // Apr Mon<=7 +  ({FIXED(259) ,UO+0 ,0 ,"" })});// Sep 16 +  case 1971: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(115) ,UO+82800 ,3600 ,"S" }), // Apr 25 +  ({FIXED(269) ,UO+82800 ,0 ,"" })});// Sep 26 +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(126) ,UO+0 ,3600 ,"S" }), // May 6 +  ({FIXED(294) ,UO-3600 ,0 ,"" })});// Oct 21 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(83) ,UO+3600 ,3600 ,"S" }), // Mar 24 +  ({FIXED(265) ,UO+7200 ,0 ,"" })});// Sep 22 +  case 1980: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(116) ,UO+0 ,3600 ,"S" }), // Apr 25 +  ({FIXED(305) ,UO+3600 ,0 ,"" })});// Oct 31 +  default: // ..1915 and 1981.. +  case 1922..1938: +  case 1940..1943: +  case 1946..1970: +  case 1972..1976: +  case 1979: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Egypt + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1940: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(197) ,UO+0 ,3600 ,"S" }), // Jul 15 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1941: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+0 ,3600 ,"S" }), // Apr 15 +  ({FIXED(259) ,UO-3600 ,0 ,"" })});// Sep 16 +  case 1942: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIXED(300) ,UO-3600 ,0 ,"" })});// Oct 27 +  case 1943..1944: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(91) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIX_L(305) ,UO-3600 ,0 ,"" })});// Nov 1 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(106) ,UO+0 ,3600 ,"S" }), // Apr 16 +  ({FIXED(305) ,UO-3600 ,0 ,"" })});// Nov 1 +  default: // ..1939: +  case 1946..1956: +  return ({({0 ,0 ,0 ,"" })}); +  case 1957: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(130) ,UO+0 ,3600 ,"S" }), // May 10 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1958: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1959..1965: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(121) ,UO+3600 ,3600 ,"S" }), // May 1 +  ({FIX_L(273) ,UO+7200 ,0 ,"" })});// Sep 30 +  case 1982: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(206) ,UO+3600 ,3600 ,"S" }), // Jul 25 +  ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 +  case 1983: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(193) ,UO+3600 ,3600 ,"S" }), // Jul 12 +  ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 +  case 1989: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(126) ,UO+3600 ,3600 ,"S" }), // May 6 +  ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 +  case 1966..1981: +  case 1984..1988: +  case 1990..1994: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(121) ,UO+3600 ,3600 ,"S" }), // May 1 +  ({FIX_L(274) ,UO+7200 ,0 ,"" })});// Oct 1 +  case 1995..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(120,5),UO+0 ,3600 ,"S" }), // Apr lastFri +  ({LDAYL(273,4),UO+82800 ,0 ,"" })});// Sep lastThu +  } +  } + } +  + class Ghana + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1936..1942: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIX_L(244) ,UO+0 ,1200 ,"GHST"}), // Sep 1 +  ({FIX_L(365) ,UO-1200 ,0 ,"GMT" })});// Dec 31 +  default: // ..1935 and 1943.. +  return ({({0 ,0 ,0 ,"GMT" })}); +  } +  } + } +  + class Libya + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1951: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(287) ,UO+7200 ,3600 ,"S" })});// Oct 14 +  case 1953: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(282) ,UO+7200 ,3600 ,"S" })});// Oct 9 +  case 1955: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(273) ,UO+0 ,3600 ,"S" })});// Sep 30 +  case 1952: +  case 1954: +  case 1956: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(1) ,UO-3600 ,0 ,"" })});// Jan 1 +  case 1985: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(96) ,UO+0 ,3600 ,"S" }), // Apr 6 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1986: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(94) ,UO+0 ,3600 ,"S" }), // Apr 4 +  ({FIXED(276) ,UO-3600 ,0 ,"" })});// Oct 3 +  case 1982..1984: +  case 1987..1989: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(91) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIX_L(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1990: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 +  default: // ..1950 and 1991.. +  case 1957..1981: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Morocco + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1939: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(255) ,UO+0 ,3600 ,"S" }), // Sep 12 +  ({FIXED(323) ,UO-3600 ,0 ,"" })});// Nov 19 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(56) ,UO+0 ,3600 ,"S" })});// Feb 25 +  case 1941..1944: +  return ({({0 ,0 ,3600 ,"S" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(322) ,UO-3600 ,0 ,"" })});// Nov 18 +  case 1950: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(162) ,UO+0 ,3600 ,"S" }), // Jun 11 +  ({FIXED(302) ,UO-3600 ,0 ,"" })});// Oct 29 +  case 1967: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(154) ,UO+43200 ,3600 ,"S" }), // Jun 3 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1974: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(175) ,UO+0 ,3600 ,"S" }), // Jun 24 +  ({FIXED(244) ,UO-3600 ,0 ,"" })});// Sep 1 +  case 1976: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(122) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(214) ,UO-3600 ,0 ,"" })});// Aug 1 +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(271) ,UO-3600 ,0 ,"" })});// Sep 28 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(152) ,UO+0 ,3600 ,"S" }), // Jun 1 +  ({FIXED(216) ,UO-3600 ,0 ,"" })});// Aug 4 +  default: // ..1938 and 1979.. +  case 1946..1949: +  case 1951..1966: +  case 1968..1973: +  case 1975: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Namibia + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1993: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1994: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (250,7),UO+7200 ,3600 ,"S" })});// Sep Sun>=1 +  case 1995..: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(97,7) ,UO+3600 ,0 ,"" }), // Apr Sun>=1 +  ({LDAYL(250,7),UO+7200 ,3600 ,"S" })});// Sep Sun>=1 +  } +  } + } +  + class SL + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1935..1942: +  return ({({0 ,0 ,0 ,"WAT" }), +  ({FIX_L(152) ,UO+0 ,2400 ,"SLST"}), // Jun 1 +  ({FIX_L(274) ,UO-2400 ,0 ,"WAT" })});// Oct 1 +  default: // ..1934: +  case 1943..1956: +  return ({({0 ,0 ,0 ,"WAT" })}); +  case 1957: +  return ({({0 ,0 ,0 ,"WAT" }), +  ({FIXED(152) ,UO+0 ,3600 ,"SLST"}), // Jun 1 +  ({FIXED(244) ,UO-3600 ,0 ,"GMT" })});// Sep 1 +  case 1958..1962: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIX_L(152) ,UO+0 ,3600 ,"SLST"}), // Jun 1 +  ({FIX_L(244) ,UO-3600 ,0 ,"GMT" })});// Sep 1 +  case 1963..: +  return ({({0 ,0 ,0 ,"GMT" })}); +  } +  } + } +  + class SA + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1942: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (264,7),UO+7200 ,3600 ,"" })});// Sep Sun>=15 +  case 1943: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (80,7) ,UO+3600 ,0 ,"" }), // Mar Sun>=15 +  ({LDAY (264,7),UO+7200 ,3600 ,"" })});// Sep Sun>=15 +  case 1944: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (81,7) ,UO+3600 ,0 ,"" })});// Mar Sun>=15 +  default: // ..1941 and 1945.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Sudan + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1970: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(288) ,UO-3600 ,0 ,"" })});// Oct 15 +  case 1971: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(120) ,UO+0 ,3600 ,"S" }), // Apr 30 +  ({FIXED(288) ,UO-3600 ,0 ,"" })});// Oct 15 +  case 1972..1985: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(120,7),UO+0 ,3600 ,"S" }), // Apr lastSun +  ({FIX_L(288) ,UO-3600 ,0 ,"" })});// Oct 15 +  default: // ..1969 and 1986.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Tunisia + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1939: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 15 +  ({FIXED(322) ,UO+82800 ,0 ,"" })});// Nov 18 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(56) ,UO+82800 ,3600 ,"S" })});// Feb 25 +  case 1941: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(279) ,UO-3600 ,0 ,"" })});// Oct 6 +  case 1942: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(68) ,UO+0 ,3600 ,"S" }), // Mar 9 +  ({FIXED(306) ,UO+7200 ,0 ,"" })});// Nov 2 +  case 1943: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(88) ,UO+7200 ,3600 ,"S" }), // Mar 29 +  ({FIXED(107) ,UO+3600 ,0 ,"" }), // Apr 17 +  ({FIXED(115) ,UO+7200 ,3600 ,"S" }), // Apr 25 +  ({FIXED(277) ,UO+3600 ,0 ,"" })});// Oct 4 +  case 1944: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (98,1) ,UO+7200 ,3600 ,"S" }), // Apr Mon>=1 +  ({FIXED(282) ,UO-3600 ,0 ,"" })});// Oct 8 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,1) ,UO+7200 ,3600 ,"S" }), // Apr Mon>=1 +  ({FIXED(259) ,UO-3600 ,0 ,"" })});// Sep 16 +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(120) ,UO+0 ,3600 ,"S" }), // Apr 30 +  ({FIXED(267) ,UO+0 ,0 ,"" })});// Sep 24 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 +  case 1988: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(153) ,UO+0 ,3600 ,"S" }), // Jun 1 +  ({LDAY (274,7),UO+0 ,0 ,"" })});// Sep lastSun +  case 1989: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(85) ,UO+0 ,3600 ,"S" }), // Mar 26 +  ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun +  case 1990: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun +  default: // ..1938 and 1991.. +  case 1946..1976: +  case 1979..1987: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class ArgAQ + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1964: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(61) ,UO+0 ,0 ,"" }), // Mar 1 +  ({FIXED(289) ,UO+0 ,3600 ,"S" })});// Oct 15 +  case 1965..1966: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(60) ,UO-3600 ,0 ,"" }), // Mar 1 +  ({FIXED(288) ,UO+0 ,3600 ,"S" })});// Oct 15 +  case 1967: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 +  ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun<=7 +  case 1974: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(23) ,UO+0 ,3600 ,"S" }), // Jan 23 +  ({FIXED(121) ,UO-3600 ,0 ,"" }), // May 1 +  ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun<=7 +  case 1968: +  case 1975..1976: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(97,7) ,UO-3600 ,0 ,"" }), // Apr Sun<=7 +  ({LDAYL(280,7),UO+0 ,3600 ,"S" })});// Oct Sun<=7 +  case 1969: +  case 1977: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (97,7) ,UO-3600 ,0 ,"" })});// Apr Sun<=7 +  default: // ..1963 and 1978.. +  case 1970..1973: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class ChileAQ + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1968: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1969: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 +  case 1998: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (74,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=9 +  ({FIXED(270) ,UO+0 ,3600 ,"S" })});// Sep 27 +  case 1999: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(94) ,UO-3600 ,0 ,"" }), // Apr 4 +  ({LDAY (288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 +  case 1970..1997: +  case 2000..: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(74,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=9 +  ({LDAYL(288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 +  } +  } + } +  + class NZAQ + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1973: +  return ({({0 ,0 ,0 ,"S" })});// ? +  case 1974: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(307) ,UO+7200 ,3600 ,"D" })});// Nov 3 +  case 1975: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(54) ,UO+7200 ,0 ,"S" }), // Feb 23 +  ({LDAY (304,7),UO+7200 ,3600 ,"D" })});// Oct lastSun +  case 1976..1988: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAYL(66,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=1 +  ({LDAYL(304,7),UO+7200 ,3600 ,"D" })});// Oct lastSun +  case 1989: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAY (66,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=1 +  ({FIXED(281) ,UO+7200 ,3600 ,"D" })});// Oct 8 +  case 1990..: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAYL(80,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=15 +  ({LDAYL(280,7),UO+7200 ,3600 ,"D" })});// Oct Sun>=1 +  } +  } + } +  + class EUAsia + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1980: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1981: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (90,7) ,3600 ,3600 ,"S" })});// Mar lastSun +  case 1982..1995: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(90,7) ,3600 ,3600 ,"S" })});// Mar lastSun +  case 1996: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (91,7) ,3600 ,3600 ,"S" }), // Mar lastSun +  ({LDAY (305,7),3600 ,0 ,"" })});// Oct lastSun +  case 1997..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,3600 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),3600 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class E_EurAsia + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1978: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1979..1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(273,7),UO+0 ,0 ,"" })});// Sep lastSun +  case 1981..1995: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1996..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),UO-3600 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class RussiaAsia + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1980: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1981..1983: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1984: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({LDAY (274,7),UO+7200 ,0 ,"" })});// Sep lastSun +  case 1992: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (91,6) ,UO+82800 ,3600 ,"S" }), // Mar lastSat +  ({LDAY (274,6),UO+79200 ,0 ,"" })});// Sep lastSat +  case 1985..1991: +  case 1993..1995: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun +  case 1996..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),UO+7200 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class Azer + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1996: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1997..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+3600 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),UO+0 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class Shang + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1940: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(155) ,UO+0 ,3600 ,"D" }), // Jun 3 +  ({FIXED(275) ,UO-3600 ,0 ,"S" })});// Oct 1 +  case 1941: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(75) ,UO+0 ,3600 ,"D" }), // Mar 16 +  ({FIXED(274) ,UO-3600 ,0 ,"S" })});// Oct 1 +  default: // ..1939 and 1942.. +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class PRC + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1949: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(1) ,UO+0 ,0 ,"S" })});// Jan 1 +  case 1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(124) ,UO+0 ,3600 ,"D" }), // May 4 +  ({LDAY (260,7),UO-3600 ,0 ,"S" })});// Sep Sun>=11 +  case 1987..1991: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(106,7),UO+0 ,3600 ,"D" }), // Apr Sun>=10 +  ({LDAYL(260,7),UO-3600 ,0 ,"S" })});// Sep Sun>=11 +  default: // ..1948 and 1992.. +  case 1950..1985: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class HK + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1946: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(110) ,UO+12600 ,3600 ,"S" }), // Apr 20 +  ({FIXED(335) ,UO+9000 ,0 ,"" })});// Dec 1 +  case 1947: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(103) ,UO+12600 ,3600 ,"S" }), // Apr 13 +  ({FIXED(364) ,UO+9000 ,0 ,"" })});// Dec 30 +  case 1948: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(123) ,UO+12600 ,3600 ,"S" }), // May 2 +  ({LDAY (305,7),UO+9000 ,0 ,"" })});// Oct lastSun +  case 1949..1952: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(97,7) ,UO+12600 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+9000 ,0 ,"" })});// Oct lastSun +  case 1953: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+12600 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(305) ,UO+9000 ,0 ,"" })});// Nov 1 +  case 1954: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (83,7) ,UO+12600 ,3600 ,"S" }), // Mar Sun>=18 +  ({FIXED(304) ,UO+9000 ,0 ,"" })});// Oct 31 +  case 1955..1964: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(83,7) ,UO+12600 ,3600 ,"S" }), // Mar Sun>=18 +  ({LDAYL(311,7),UO+9000 ,0 ,"" })});// Nov Sun>=1 +  case 1965..1977: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(112,7),UO+12600 ,3600 ,"S" }), // Apr Sun>=16 +  ({LDAYL(295,7),UO+9000 ,0 ,"" })});// Oct Sun>=16 +  case 1979..1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(134,7),UO+12600 ,3600 ,"S" }), // May Sun>=8 +  ({LDAYL(295,7),UO+9000 ,0 ,"" })});// Oct Sun>=16 +  default: // ..1945 and 1981.. +  case 1978: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Taiwan + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1945..1951: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIX_L(121) ,UO+0 ,3600 ,"D" }), // May 1 +  ({FIX_L(274) ,UO-3600 ,0 ,"S" })});// Oct 1 +  case 1952: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(61) ,UO+0 ,3600 ,"D" }), // Mar 1 +  ({FIXED(306) ,UO-3600 ,0 ,"S" })});// Nov 1 +  case 1953..1954: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(91) ,UO+0 ,3600 ,"D" }), // Apr 1 +  ({FIXED(305) ,UO-3600 ,0 ,"S" })});// Nov 1 +  case 1960..1961: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIX_L(152) ,UO+0 ,3600 ,"D" }), // Jun 1 +  ({FIX_L(274) ,UO-3600 ,0 ,"S" })});// Oct 1 +  case 1955..1959: +  case 1974..1975: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIX_L(91) ,UO+0 ,3600 ,"D" }), // Apr 1 +  ({FIX_L(274) ,UO-3600 ,0 ,"S" })});// Oct 1 +  case 1980: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(182) ,UO+0 ,3600 ,"D" }), // Jun 30 +  ({FIXED(274) ,UO-3600 ,0 ,"S" })});// Sep 30 +  default: // ..1944 and 1981.. +  case 1962..1973: +  case 1976..1979: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Macao + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1963: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (81,7) ,UO+0 ,3600 ,"S" }), // Mar Sun>=16 +  ({LDAY (311,7),UO+9000 ,0 ,"" })});// Nov Sun>=1 +  case 1961..1962: +  case 1964: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(81,7) ,UO+12600 ,3600 ,"S" }), // Mar Sun>=16 +  ({LDAYL(311,7),UO+9000 ,0 ,"" })});// Nov Sun>=1 +  case 1965: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (81,7) ,UO+0 ,3600 ,"S" }), // Mar Sun>=16 +  ({FIXED(304) ,UO-3600 ,0 ,"" })});// Oct 31 +  case 1966..1971: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(112,7),UO+12600 ,3600 ,"S" }), // Apr Sun>=16 +  ({LDAYL(295,7),UO+9000 ,0 ,"" })});// Oct Sun>=16 +  case 1974: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (111,7),UO+0 ,3600 ,"S" }), // Apr Sun>=15 +  ({LDAY (294,7),UO+9000 ,0 ,"" })});// Oct Sun>=15 +  case 1975..1977: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(111,7),UO+12600 ,3600 ,"S" }), // Apr Sun>=15 +  ({LDAYL(294,7),UO+9000 ,0 ,"" })});// Oct Sun>=15 +  case 1972..1973: +  case 1978..1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(111,7),UO+0 ,3600 ,"S" }), // Apr Sun>=15 +  ({LDAYL(294,7),UO-3600 ,0 ,"" })});// Oct Sun>=15 +  default: // ..1960 and 1981.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Cyprus + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1974: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1975: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(103) ,UO+0 ,3600 ,"S" }), // Apr 13 +  ({FIXED(285) ,UO-3600 ,0 ,"" })});// Oct 12 +  case 1976: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(136) ,UO+0 ,3600 ,"S" }), // May 15 +  ({FIXED(285) ,UO-3600 ,0 ,"" })});// Oct 11 +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(268) ,UO-3600 ,0 ,"" })});// Sep 25 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 2 +  case 1979..1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1981..1997: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1998: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (90,7) ,UO+0 ,3600 ,"S" })});// Mar lastSun +  case 1999..: +  return ({({0 ,0 ,3600 ,"S" })}); +  } +  } + } +  + class Iran + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1978: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(80) ,UO+0 ,3600 ,"S" }), // Mar 21 +  ({FIXED(294) ,UO-3600 ,0 ,"" })});// Oct 21 +  case 1979: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(80) ,UO+0 ,3600 ,"S" }), // Mar 21 +  ({FIXED(262) ,UO-3600 ,0 ,"" })});// Sep 19 +  case 1991: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(123) ,UO+0 ,3600 ,"S" }), // May 3 +  ({FIXED(263) ,UO+0 ,0 ,"" })});// Sep 20 +  case 1980: +  case 1992..1995: +  case 1997..1999: +  case 2001..2003: +  case 2005..2007: +  case 2009..2011: +  case 2013..2015: +  case 2017..2019: +  case 2021..2023: +  case 2026..2027: +  case 2030..2031: +  case 2034..2035: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(80) ,UO+0 ,3600 ,"S" }), // Mar 21 +  ({FIX_L(266) ,UO-3600 ,0 ,"" })});// Sep 23 +  case 1996: +  case 2000: +  case 2004: +  case 2008: +  case 2012: +  case 2016: +  case 2020: +  case 2024..2025: +  case 2028..2029: +  case 2032..2033: +  case 2036..2037: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(79) ,UO+0 ,3600 ,"S" }), // Mar 20 +  ({FIX_L(265) ,UO-3600 ,0 ,"" })});// Sep 22 +  default: // ..1977 and 2038.. +  case 1981..1990: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Iraq + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1981: +  return ({({0 ,0 ,0 ,"S" })});// ? +  case 1982: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(121) ,UO+0 ,3600 ,"D" }), // May 1 +  ({FIXED(274) ,UO-3600 ,0 ,"S" })});// Oct 1 +  case 1983: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(90) ,UO+0 ,3600 ,"D" }), // Mar 31 +  ({FIXED(274) ,UO-3600 ,0 ,"S" })});// Oct 1 +  case 1984: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(92) ,UO+0 ,3600 ,"D" }), // Apr 1 +  ({FIXED(275) ,UO-3600 ,0 ,"S" })});// Oct 1 +  case 1985: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(91) ,UO+0 ,3600 ,"D" }), // Apr 1 +  ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1986..1990: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(90,7) ,UO+3600 ,3600 ,"D" }), // Mar lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1991: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(91) ,UO+10800 ,3600 ,"D" }), // Apr 1 +  ({FIXED(274) ,UO+10800 ,0 ,"D" })});// Oct 1 +  case 1992..: +  return ({({0 ,0 ,0 ,"D" }), +  ({FIX_L(91) ,UO+10800 ,3600 ,"D" }), // Apr 1 +  ({FIX_L(274) ,UO+10800 ,0 ,"D" })});// Oct 1 +  } +  } + } +  + class Zion + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1940: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(153) ,UO+0 ,3600 ,"D" })});// Jun 1 +  case 1941: +  return ({({0 ,0 ,3600 ,"D" })}); +  case 1942: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(305) ,UO-3600 ,0 ,"S" })});// Nov 1 +  case 1943: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(91) ,UO+7200 ,3600 ,"D" }), // Apr 1 +  ({FIXED(305) ,UO-3600 ,0 ,"S" })});// Nov 1 +  case 1944: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(92) ,UO+0 ,3600 ,"D" }), // Apr 1 +  ({FIXED(306) ,UO-3600 ,0 ,"S" })});// Nov 1 +  case 1945: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(106) ,UO+0 ,3600 ,"D" }), // Apr 16 +  ({FIXED(305) ,UO+3600 ,0 ,"S" })});// Nov 1 +  case 1946: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(106) ,UO+7200 ,3600 ,"D" }), // Apr 16 +  ({FIXED(305) ,UO-3600 ,0 ,"S" })});// Nov 1 +  case 1948: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(144) ,UO+0 ,7200 ,"DD" }), // May 23 +  ({FIXED(245) ,UO-7200 ,3600 ,"D" }), // Sep 1 +  ({FIXED(306) ,UO+3600 ,0 ,"S" })});// Nov 1 +  case 1949: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(121) ,UO+0 ,3600 ,"D" }), // May 1 +  ({FIXED(305) ,UO+3600 ,0 ,"S" })});// Nov 1 +  case 1950: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(106) ,UO+0 ,3600 ,"D" }), // Apr 16 +  ({FIXED(258) ,UO+7200 ,0 ,"S" })});// Sep 15 +  case 1951: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(91) ,UO+0 ,3600 ,"D" }), // Apr 1 +  ({FIXED(315) ,UO+7200 ,0 ,"S" })});// Nov 11 +  case 1952: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(111) ,UO+7200 ,3600 ,"D" }), // Apr 20 +  ({FIXED(293) ,UO+7200 ,0 ,"S" })});// Oct 19 +  case 1953: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(102) ,UO+7200 ,3600 ,"D" }), // Apr 12 +  ({FIXED(256) ,UO+7200 ,0 ,"S" })});// Sep 13 +  case 1954: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(164) ,UO+0 ,3600 ,"D" }), // Jun 13 +  ({FIXED(255) ,UO-3600 ,0 ,"S" })});// Sep 12 +  case 1955: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(162) ,UO+7200 ,3600 ,"D" }), // Jun 11 +  ({FIXED(254) ,UO-3600 ,0 ,"S" })});// Sep 11 +  case 1956: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(155) ,UO+0 ,3600 ,"D" }), // Jun 3 +  ({FIXED(274) ,UO+7200 ,0 ,"S" })});// Sep 30 +  case 1957: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(119) ,UO+7200 ,3600 ,"D" }), // Apr 29 +  ({FIXED(265) ,UO-3600 ,0 ,"S" })});// Sep 22 +  case 1974: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(188) ,UO+0 ,3600 ,"D" }), // Jul 7 +  ({FIXED(286) ,UO-3600 ,0 ,"S" })});// Oct 13 +  case 1975: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(110) ,UO+0 ,3600 ,"D" }), // Apr 20 +  ({FIXED(243) ,UO-3600 ,0 ,"S" })});// Aug 31 +  default: // ..1939: +  case 1947: +  case 1958..1973: +  case 1976..1984: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1985: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(104) ,UO+0 ,3600 ,"D" }), // Apr 14 +  ({FIXED(258) ,UO-3600 ,0 ,"S" })});// Sep 15 +  case 1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(138) ,UO+0 ,3600 ,"D" }), // May 18 +  ({FIXED(250) ,UO-3600 ,0 ,"S" })});// Sep 7 +  case 1987: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(105) ,UO+0 ,3600 ,"D" }), // Apr 15 +  ({FIXED(256) ,UO-3600 ,0 ,"S" })});// Sep 13 +  case 1988: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(100) ,UO+0 ,3600 ,"D" }), // Apr 9 +  ({FIXED(247) ,UO-3600 ,0 ,"S" })});// Sep 3 +  case 1989: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(120) ,UO+0 ,3600 ,"D" }), // Apr 30 +  ({FIXED(246) ,UO-3600 ,0 ,"S" })});// Sep 3 +  case 1990: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(84) ,UO+0 ,3600 ,"D" }), // Mar 25 +  ({FIXED(238) ,UO-3600 ,0 ,"S" })});// Aug 26 +  case 1991: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(83) ,UO+0 ,3600 ,"D" }), // Mar 24 +  ({FIXED(244) ,UO-3600 ,0 ,"S" })});// Sep 1 +  case 1992: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(89) ,UO+0 ,3600 ,"D" }), // Mar 29 +  ({FIXED(250) ,UO-3600 ,0 ,"S" })});// Sep 6 +  case 1993: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(92) ,UO+0 ,3600 ,"D" }), // Apr 2 +  ({FIXED(248) ,UO-3600 ,0 ,"S" })});// Sep 5 +  case 1994: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(91) ,UO+0 ,3600 ,"D" }), // Apr 1 +  ({FIXED(240) ,UO-3600 ,0 ,"S" })});// Aug 28 +  case 1995: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(90) ,UO+0 ,3600 ,"D" }), // Mar 31 +  ({FIXED(246) ,UO-3600 ,0 ,"S" })});// Sep 3 +  case 1996: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(75) ,UO+0 ,3600 ,"D" }), // Mar 15 +  ({FIXED(260) ,UO-3600 ,0 ,"S" })});// Sep 16 +  case 1997: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(80) ,UO+0 ,3600 ,"D" }), // Mar 21 +  ({FIXED(257) ,UO-3600 ,0 ,"S" })});// Sep 14 +  case 1998: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(79) ,UO+0 ,3600 ,"D" }), // Mar 20 +  ({FIXED(249) ,UO-3600 ,0 ,"S" })});// Sep 6 +  case 1999: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(92) ,UO+7200 ,3600 ,"D" }), // Apr 2 +  ({FIXED(246) ,UO+3600 ,0 ,"S" })});// Sep 3 +  case 2000: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(105) ,UO+7200 ,3600 ,"D" }), // Apr 14 +  ({FIXED(296) ,UO+3600 ,0 ,"S" })});// Oct 22 +  case 2001: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(96) ,UO+7200 ,3600 ,"D" }), // Apr 6 +  ({FIXED(283) ,UO+3600 ,0 ,"S" })});// Oct 10 +  case 2002: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(88) ,UO+7200 ,3600 ,"D" }), // Mar 29 +  ({FIXED(272) ,UO+3600 ,0 ,"S" })});// Sep 29 +  case 2003..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(90,5) ,UO+7200 ,3600 ,"D" }), // Mar Fri>=25 +  ({FIX_L(274) ,UO+3600 ,0 ,"S" })});// Oct 1 +  } +  } + } +  + class Jordan + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1973: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(157) ,UO+0 ,3600 ,"S" }), // Jun 6 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1976: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(122) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(306) ,UO-3600 ,0 ,"" })});// Nov 1 +  case 1974..1975: +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(120) ,UO+0 ,3600 ,"S" }), // Apr 30 +  ({FIXED(273) ,UO-3600 ,0 ,"" })});// Sep 30 +  default: // ..1972: +  case 1979..1984: +  return ({({0 ,0 ,0 ,"" })}); +  case 1985: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1989: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(128) ,UO+0 ,3600 ,"S" }), // May 8 +  ({LDAY (280,5),UO-3600 ,0 ,"" })});// Oct Fri>=1 +  case 1990: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(117) ,UO+0 ,3600 ,"S" }), // Apr 27 +  ({LDAY (280,5),UO-3600 ,0 ,"" })});// Oct Fri>=1 +  case 1991: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(107) ,UO+0 ,3600 ,"S" }), // Apr 17 +  ({FIXED(270) ,UO-3600 ,0 ,"" })});// Sep 27 +  case 1992: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(101) ,UO+0 ,3600 ,"S" }), // Apr 10 +  ({LDAY (281,5),UO-3600 ,0 ,"" })});// Oct Fri>=1 +  case 1986..1988: +  case 1993: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(97,5) ,UO+0 ,3600 ,"S" }), // Apr Fri>=1 +  ({LDAYL(280,5),UO-3600 ,0 ,"" })});// Oct Fri>=1 +  case 1994: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,5) ,UO+0 ,3600 ,"S" }), // Apr Fri>=1 +  ({LDAY (264,5),UO-3600 ,0 ,"" })});// Sep Fri>=15 +  case 1995..1998: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(97,5) ,UO+0 ,3600 ,"S" }), // Apr Fri>=1 +  ({LDAYL(264,5),UO+0 ,0 ,"" })});// Sep Fri>=15 +  case 1999: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(182) ,UO+0 ,3600 ,"S" }), // Jul 1 +  ({LDAY (273,4),UO+0 ,0 ,"" })});// Sep lastThu +  case 2000..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,4) ,UO+0 ,3600 ,"S" }), // Mar lastThu +  ({LDAYL(273,4),UO+0 ,0 ,"" })});// Sep lastThu +  } +  } + } +  + class Kirgiz + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1991: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1992..1996: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(103,7),UO+0 ,3600 ,"S" }), // Apr Sun>=7 +  ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1997..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+9000 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),UO+5400 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class ROK + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1960: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(136) ,UO+0 ,3600 ,"D" }), // May 15 +  ({FIXED(257) ,UO-3600 ,0 ,"S" })});// Sep 13 +  case 1987..1988: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(134,7),UO+0 ,3600 ,"D" }), // May Sun<=14 +  ({LDAYL(287,7),UO-3600 ,0 ,"S" })});// Oct Sun<=14 +  default: // ..1959 and 1989.. +  case 1961..1986: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Lebanon + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1920: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(88) ,UO+0 ,3600 ,"S" }), // Mar 28 +  ({FIXED(299) ,UO-3600 ,0 ,"" })});// Oct 25 +  case 1921: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(93) ,UO+0 ,3600 ,"S" }), // Apr 3 +  ({FIXED(276) ,UO-3600 ,0 ,"" })});// Oct 3 +  case 1922: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(85) ,UO+0 ,3600 ,"S" }), // Mar 26 +  ({FIXED(281) ,UO-3600 ,0 ,"" })});// Oct 8 +  case 1923: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(112) ,UO+0 ,3600 ,"S" }), // Apr 22 +  ({FIXED(259) ,UO-3600 ,0 ,"" })});// Sep 16 +  case 1972: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(174) ,UO+0 ,3600 ,"S" }), // Jun 22 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1957..1961: +  case 1973..1977: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIX_L(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(120) ,UO+0 ,3600 ,"S" }), // Apr 30 +  ({FIXED(273) ,UO-3600 ,0 ,"" })});// Sep 30 +  default: // ..1919: +  case 1924..1956: +  case 1962..1971: +  case 1979..1983: +  return ({({0 ,0 ,0 ,"" })}); +  case 1988: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(153) ,UO+0 ,3600 ,"S" }), // Jun 1 +  ({FIXED(290) ,UO-3600 ,0 ,"" })});// Oct 16 +  case 1989: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(130) ,UO+0 ,3600 ,"S" }), // May 10 +  ({FIXED(289) ,UO-3600 ,0 ,"" })});// Oct 16 +  case 1984..1987: +  case 1990..1991: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIX_L(289) ,UO-3600 ,0 ,"" })});// Oct 16 +  case 1992: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(122) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(278) ,UO-3600 ,0 ,"" })});// Oct 4 +  case 1993..1998: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1999..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),UO-3600 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class NBorneo + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1935..1941: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(257) ,UO+0 ,1200 ,"TS" }), // Sep 14 +  ({FIX_L(348) ,UO-1200 ,0 ,"" })});// Dec 14 +  default: // ..1934 and 1942.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Mongol + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1981..1984: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(91) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIX_L(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1985..1990: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun +  case 1996: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (91,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAY (305,7),UO-3600 ,0 ,"" })});// Oct lastSun +  case 1991..1995: +  case 1997..1998: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  default: // ..1980 and 1999.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class EgyptAsia + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1956: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1957: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(130) ,UO+0 ,3600 ,"S" }), // May 10 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1958: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1959..1965: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(121) ,UO+3600 ,3600 ,"S" }), // May 1 +  ({FIX_L(273) ,UO+7200 ,0 ,"" })});// Sep 30 +  case 1966: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+3600 ,3600 ,"S" }), // May 1 +  ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 +  case 1967: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+3600 ,3600 ,"S" })});// May 1 +  case 1968..: +  return ({({0 ,0 ,3600 ,"S" })}); +  } +  } + } +  + class Palestine + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1998: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1999..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(111,5),UO+0 ,3600 ,"S" }), // Apr Fri>=15 +  ({LDAYL(294,5),UO-3600 ,0 ,"" })});// Oct Fri>=15 +  } +  } + } +  + class Phil + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1936: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(306) ,UO+0 ,3600 ,"S" })});// Nov 1 +  case 1937: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(32) ,UO-3600 ,0 ,"" })});// Feb 1 +  case 1954: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(102) ,UO+0 ,3600 ,"S" }), // Apr 12 +  ({FIXED(182) ,UO-3600 ,0 ,"" })});// Jul 1 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(81) ,UO+0 ,3600 ,"S" }), // Mar 22 +  ({FIXED(264) ,UO-3600 ,0 ,"" })});// Sep 21 +  default: // ..1935 and 1979.. +  case 1938..1953: +  case 1955..1977: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Syria + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1920..1923: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(111,7),UO+7200 ,3600 ,"S" }), // Apr Sun>=15 +  ({LDAYL(280,7),UO+3600 ,0 ,"" })});// Oct Sun>=1 +  case 1962: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(119) ,UO+7200 ,3600 ,"S" }), // Apr 29 +  ({FIXED(274) ,UO+3600 ,0 ,"" })});// Oct 1 +  case 1963: +  case 1965: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+7200 ,3600 ,"S" }), // May 1 +  ({FIXED(273) ,UO+3600 ,0 ,"" })});// Sep 30 +  case 1966: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(114) ,UO+7200 ,3600 ,"S" }), // Apr 24 +  ({FIXED(274) ,UO+3600 ,0 ,"" })});// Oct 1 +  case 1964: +  case 1967..1976: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(121) ,UO+7200 ,3600 ,"S" }), // May 1 +  ({FIX_L(274) ,UO+3600 ,0 ,"" })});// Oct 1 +  case 1977..1978: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+7200 ,3600 ,"S" }), // May 1 +  ({FIXED(244) ,UO+3600 ,0 ,"" })});// Sep 1 +  case 1983..1984: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(99) ,UO+7200 ,3600 ,"S" }), // Apr 9 +  ({FIX_L(274) ,UO+3600 ,0 ,"" })});// Oct 1 +  default: // ..1919: +  case 1924..1961: +  case 1979..1982: +  case 1985: +  return ({({0 ,0 ,0 ,"" })}); +  case 1986: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(47) ,UO+7200 ,3600 ,"S" }), // Feb 16 +  ({FIXED(282) ,UO+3600 ,0 ,"" })});// Oct 9 +  case 1987: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(60) ,UO+7200 ,3600 ,"S" }), // Mar 1 +  ({FIXED(304) ,UO+3600 ,0 ,"" })});// Oct 31 +  case 1988: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(75) ,UO+7200 ,3600 ,"S" }), // Mar 15 +  ({FIXED(305) ,UO+3600 ,0 ,"" })});// Oct 31 +  case 1989: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(90) ,UO+7200 ,3600 ,"S" }), // Mar 31 +  ({FIXED(274) ,UO+3600 ,0 ,"" })});// Oct 1 +  case 1990: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(91) ,UO+7200 ,3600 ,"S" }), // Apr 1 +  ({FIXED(273) ,UO+3600 ,0 ,"" })});// Sep 30 +  case 1992: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(99) ,UO+0 ,3600 ,"S" }), // Apr 8 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1993: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(85) ,UO+0 ,3600 ,"S" }), // Mar 26 +  ({FIXED(268) ,UO-3600 ,0 ,"" })});// Sep 25 +  case 1997..1998: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (90,1) ,UO+0 ,3600 ,"S" }), // Mar lastMon +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1991: +  case 1994..1996: +  case 1999..: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(91) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIX_L(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  } +  } + } +  + class Aus + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1917: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(1) ,UO+60 ,3600 ,"" }), // Jan 1 +  ({FIXED(84) ,UO+3600 ,0 ,"" })});// Mar 25 +  case 1942: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(1) ,UO+7200 ,3600 ,"" }), // Jan 1 +  ({FIXED(88) ,UO+3600 ,0 ,"" }), // Mar 29 +  ({FIXED(270) ,UO+7200 ,3600 ,"" })});// Sep 27 +  case 1943: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (90,7) ,UO+3600 ,0 ,"" }), // Mar lastSun +  ({FIXED(276) ,UO+7200 ,3600 ,"" })});// Oct 3 +  case 1944: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (91,7) ,UO+3600 ,0 ,"" })});// Mar lastSun +  default: // ..1916 and 1945.. +  case 1918..1941: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class AQ + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1972: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (60,7) ,UO+7200 ,0 ,"" })});// Feb lastSun +  case 1971: +  case 1989: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1990..1991: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 +  ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1992: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (67,7) ,UO+7200 ,0 ,"" })});// Mar Sun>=1 +  default: // ..1970 and 1993.. +  case 1973..1988: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Holiday + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1992: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (305,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1993: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 +  ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1994: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (66,7) ,UO+7200 ,0 ,"" })});// Mar Sun>=1 +  default: // ..1991 and 1995.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class AS + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1970: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1971: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1972: +  return ({({0 ,0 ,3600 ,"" }), +  ({FIXED(58) ,UO+7200 ,0 ,"" }), // Feb 27 +  ({LDAY (305,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1986: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 +  ({FIXED(292) ,UO+7200 ,3600 ,"" })});// Oct 19 +  case 1987..1989: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1973..1985: +  case 1991: +  case 1993: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1990: +  case 1992: +  case 1994: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(83,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=18 +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1995..: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  } +  } + } +  + class AT + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1966: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1967: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (280,7),UO+7200 ,3600 ,"" })});// Oct Sun>=1 +  case 1969..1971: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (73,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=8 +  ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1972: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (60,7) ,UO+7200 ,0 ,"" }), // Feb lastSun +  ({LDAY (305,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1968: +  case 1982..1983: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1973..1981: +  case 1984..1985: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1986: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 +  ({LDAY (294,7),UO+7200 ,3600 ,"" })});// Oct Sun>=15 +  case 1987: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 +  ({LDAY (301,7),UO+7200 ,3600 ,"" })});// Oct Sun>=22 +  case 1988..1990: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 2000: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (91,7) ,UO+7200 ,0 ,"" }), // Mar lastSun +  ({LDAY (244,7),UO+7200 ,3600 ,"" })});// Aug lastSun +  case 1991..1999: +  case 2001..: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun +  ({LDAYL(280,7),UO+7200 ,3600 ,"" })});// Oct Sun>=1 +  } +  } + } +  + class AV + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1970: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1971: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1972: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (60,7) ,UO+7200 ,0 ,"" }), // Feb lastSun +  ({LDAY (305,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1986..1987: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 +  ({LDAY (294,7),UO+7200 ,3600 ,"" })});// Oct Sun>=15 +  case 1988..1990: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1973..1985: +  case 1991..1994: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 2000: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (91,7) ,UO+7200 ,0 ,"" }), // Mar lastSun +  ({LDAY (244,7),UO+7200 ,3600 ,"" })});// Aug lastSun +  case 1995..1999: +  case 2001..: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  } +  } + } +  + class AN + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1970: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1971: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1972: +  return ({({0 ,0 ,3600 ,"" }), +  ({FIXED(58) ,UO+7200 ,0 ,"" }), // Feb 27 +  ({LDAY (305,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1982: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (97,7) ,UO+7200 ,0 ,"" }), // Apr Sun>=1 +  ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1986: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 +  ({FIXED(292) ,UO+7200 ,3600 ,"" })});// Oct 19 +  case 1987..1989: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1973..1981: +  case 1983..1985: +  case 1990..1995: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 2000: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (91,7) ,UO+7200 ,0 ,"" }), // Mar lastSun +  ({LDAY (244,7),UO+7200 ,3600 ,"" })});// Aug lastSun +  case 1996..1999: +  case 2001..: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  } +  } + } +  + class LH + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1980: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1981: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1982..1984: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 +  ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun +  case 1985: +  return ({({0 ,0 ,3600 ,"" }), +  ({LDAY (66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 +  ({LDAY (304,7),UO+7200 ,1800 ,"" })});// Oct lastSun +  case 1986: +  return ({({0 ,0 ,1800 ,"" }), +  ({LDAY (80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 +  ({FIXED(292) ,UO+7200 ,1800 ,"" })});// Oct 19 +  case 1987..1989: +  return ({({0 ,0 ,1800 ,"" }), +  ({LDAYL(80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 +  ({LDAYL(304,7),UO+7200 ,1800 ,"" })});// Oct lastSun +  case 1990..1995: +  return ({({0 ,0 ,1800 ,"" }), +  ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 +  ({LDAYL(304,7),UO+7200 ,1800 ,"" })});// Oct lastSun +  case 2000: +  return ({({0 ,0 ,1800 ,"" }), +  ({LDAY (91,7) ,UO+7200 ,0 ,"" }), // Mar lastSun +  ({LDAY (244,7),UO+7200 ,1800 ,"" })});// Aug lastSun +  case 1996..1999: +  case 2001..: +  return ({({0 ,0 ,1800 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun +  ({LDAYL(304,7),UO+7200 ,1800 ,"" })});// Oct lastSun +  } +  } + } +  + class Cook + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1978: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(316) ,UO+0 ,1800 ,"HS" })});// Nov 12 +  case 1979..1990: +  return ({({0 ,0 ,1800 ,"HS" }), +  ({LDAYL(66,7) ,UO-1800 ,0 ,"" }), // Mar Sun>=1 +  ({LDAYL(304,7),UO+0 ,1800 ,"HS" })});// Oct lastSun +  case 1991: +  return ({({0 ,0 ,1800 ,"HS" }), +  ({LDAY (66,7) ,UO-1800 ,0 ,"" })});// Mar Sun>=1 +  default: // ..1977 and 1992.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Fiji + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1997: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1998: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (311,7),UO+7200 ,3600 ,"S" })});// Nov Sun>=1 +  case 1999..: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(59,7) ,UO+7200 ,0 ,"" }), // Feb lastSun +  ({LDAYL(311,7),UO+7200 ,3600 ,"S" })});// Nov Sun>=1 +  } +  } + } +  + class NC + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1977: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (341,7),UO+0 ,3600 ,"S" })});// Dec Sun>=1 +  case 1978: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(58) ,UO-3600 ,0 ,"" }), // Feb 27 +  ({LDAY (341,7),UO+0 ,3600 ,"S" })});// Dec Sun>=1 +  case 1979: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(58) ,UO-3600 ,0 ,"" })});// Feb 27 +  case 1996: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(336) ,UO+7200 ,3600 ,"S" })});// Dec 1 +  case 1997: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(61) ,UO+7200 ,0 ,"" })});// Mar 2 +  default: // ..1976 and 1998.. +  case 1980..1995: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class NZ + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1927: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(330) ,UO+7200 ,1800 ,"HD" })});// Nov 26 +  case 1928: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({LDAY (67,7) ,UO+5400 ,0 ,"S" }), // Mar Sun>=1 +  ({FIXED(309) ,UO+7200 ,1800 ,"HD" })});// Nov 4 +  case 1929: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({LDAY (66,7) ,UO+5400 ,0 ,"S" }), // Mar Sun>=1 +  ({FIXED(303) ,UO+7200 ,1800 ,"HD" })});// Oct 30 +  case 1930..1933: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({LDAYL(80,7) ,UO+5400 ,0 ,"S" }), // Mar Sun>=15 +  ({LDAYL(287,7),UO+7200 ,1800 ,"HD" })});// Oct Sun>=8 +  case 1934..1939: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({LDAYL(120,7),UO+5400 ,0 ,"S" }), // Apr lastSun +  ({LDAYL(273,7),UO+7200 ,1800 ,"HD" })});// Sep lastSun +  case 1940: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({LDAY (121,7),UO+5400 ,0 ,"S" })});// Apr lastSun +  default: // ..1926: +  case 1941..1973: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1974: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(307) ,UO+7200 ,3600 ,"D" })});// Nov 3 +  case 1975: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(54) ,UO+7200 ,0 ,"S" }), // Feb 23 +  ({LDAY (304,7),UO+7200 ,3600 ,"D" })});// Oct lastSun +  case 1976..1988: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAYL(66,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=1 +  ({LDAYL(304,7),UO+7200 ,3600 ,"D" })});// Oct lastSun +  case 1989: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAY (66,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=1 +  ({FIXED(281) ,UO+7200 ,3600 ,"D" })});// Oct 8 +  case 1990..: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAYL(80,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=15 +  ({LDAYL(280,7),UO+7200 ,3600 ,"D" })});// Oct Sun>=1 +  } +  } + } +  + class Chatham + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1989: +  return ({({0 ,0 ,0 ,"S" })});// ? +  case 1990: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({LDAY (280,7),UO+9900 ,3600 ,"D" })});// Oct Sun>=1 +  case 1991..: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAYL(80,7) ,UO+9900 ,0 ,"S" }), // Mar Sun>=15 +  ({LDAYL(280,7),UO+9900 ,3600 ,"D" })});// Oct Sun>=1 +  } +  } + } +  + class Tonga + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1998: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1999: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({LDAY (280,6),UO+7200 ,3600 ,"S" })});// Oct Sat>=1 +  case 2000..: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(112,7),UO+7200 ,0 ,"" }), // Apr Sun>=16 +  ({LDAYL(280,6),UO+7200 ,3600 ,"S" })});// Oct Sat>=1 +  } +  } + } +  + class Vanuatu + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1983: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(268) ,UO+0 ,3600 ,"S" })});// Sep 25 +  case 1984: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (89,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=23 +  ({FIXED(297) ,UO+0 ,3600 ,"S" })});// Oct 23 +  case 1985..1991: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(88,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=23 +  ({LDAYL(272,7),UO+0 ,3600 ,"S" })});// Sep Sun>=23 +  case 1992: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (29,7) ,UO-3600 ,0 ,"" }), // Jan Sun>=23 +  ({LDAY (303,7),UO+0 ,3600 ,"S" })});// Oct Sun>=23 +  case 1993: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (29,7) ,UO-3600 ,0 ,"" })});// Jan Sun>=23 +  default: // ..1982 and 1994.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class GB_Eire + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1916: +  return ({({0 ,0 ,0 ,"GMT" }), // ? +  ({FIXED(142) ,UO+7200 ,3600 ,"BST" }), // May 21 +  ({FIXED(275) ,UO+7200 ,0 ,"GMT" })});// Oct 1 +  case 1917: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIXED(98) ,UO+7200 ,3600 ,"BST" }), // Apr 8 +  ({FIXED(260) ,UO+7200 ,0 ,"GMT" })});// Sep 17 +  case 1918: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIXED(83) ,UO+7200 ,3600 ,"BST" }), // Mar 24 +  ({FIXED(273) ,UO+7200 ,0 ,"GMT" })});// Sep 30 +  case 1919: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIXED(89) ,UO+7200 ,3600 ,"BST" }), // Mar 30 +  ({FIXED(272) ,UO+7200 ,0 ,"GMT" })});// Sep 29 +  case 1920: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIXED(88) ,UO+7200 ,3600 ,"BST" }), // Mar 28 +  ({FIXED(299) ,UO+7200 ,0 ,"GMT" })});// Oct 25 +  case 1921: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIXED(93) ,UO+7200 ,3600 ,"BST" }), // Apr 3 +  ({FIXED(276) ,UO+7200 ,0 ,"GMT" })});// Oct 3 +  case 1922: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIXED(85) ,UO+7200 ,3600 ,"BST" }), // Mar 26 +  ({FIXED(281) ,UO+7200 ,0 ,"GMT" })});// Oct 8 +  case 1923: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAY (112,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=16 +  ({LDAY (265,7),UO+7200 ,0 ,"GMT" })});// Sep Sun>=16 +  case 1924: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAY (106,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=9 +  ({LDAY (266,7),UO+7200 ,0 ,"GMT" })});// Sep Sun>=16 +  case 1939: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAY (112,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=16 +  ({LDAY (326,7),UO+7200 ,0 ,"GMT" })});// Nov Sun>=16 +  case 1940: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAY (61,7) ,UO+7200 ,3600 ,"BST" })});// Feb Sun>=23 +  case 1941: +  return ({({0 ,0 ,3600 ,"BST" }), +  ({LDAY (128,7),UO+3600 ,7200 ,"BDST"}), // May Sun>=2 +  ({LDAY (227,7),UO+3600 ,3600 ,"BST" })});// Aug Sun>=9 +  case 1942..1943: +  return ({({0 ,0 ,3600 ,"BST" }), +  ({LDAY (98,7) ,UO+3600 ,7200 ,"BDST"}), // Apr Sun>=2 +  ({LDAY (227,7),UO+3600 ,3600 ,"BST" })});// Aug Sun>=9 +  case 1944: +  return ({({0 ,0 ,3600 ,"BST" }), +  ({LDAY (99,7) ,UO+3600 ,7200 ,"BDST"}), // Apr Sun>=2 +  ({LDAY (266,7),UO+3600 ,3600 ,"BST" })});// Sep Sun>=16 +  case 1945: +  return ({({0 ,0 ,3600 ,"BST" }), +  ({LDAY (98,1) ,UO+3600 ,7200 ,"BDST"}), // Apr Mon>=2 +  ({LDAY (196,7),UO+3600 ,3600 ,"BST" }), // Jul Sun>=9 +  ({LDAY (281,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=2 +  case 1947: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIXED(75) ,UO+7200 ,3600 ,"BST" }), // Mar 16 +  ({FIXED(103) ,UO+3600 ,7200 ,"BDST"}), // Apr 13 +  ({FIXED(222) ,UO+3600 ,3600 ,"BST" }), // Aug 10 +  ({FIXED(306) ,UO+7200 ,0 ,"GMT" })});// Nov 2 +  case 1948: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIXED(74) ,UO+7200 ,3600 ,"BST" }), // Mar 14 +  ({FIXED(305) ,UO+7200 ,0 ,"GMT" })});// Oct 31 +  case 1949: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIXED(93) ,UO+7200 ,3600 ,"BST" }), // Apr 3 +  ({FIXED(303) ,UO+7200 ,0 ,"GMT" })});// Oct 30 +  case 1950..1952: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAYL(110,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=14 +  ({LDAYL(300,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=21 +  case 1925..1926: +  case 1928..1929: +  case 1931..1932: +  case 1934: +  case 1936..1937: +  case 1953: +  case 1955..1956: +  case 1958..1959: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAYL(112,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=16 +  ({LDAYL(281,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=2 +  case 1927: +  case 1930: +  case 1933: +  case 1935: +  case 1938: +  case 1946: +  case 1954: +  case 1957: +  case 1960: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAYL(105,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=9 +  ({LDAYL(281,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=2 +  case 1961..1963: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAY (90,7) ,UO+7200 ,3600 ,"BST" }), // Mar lastSun +  ({LDAY (302,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=23 +  case 1964..1967: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAYL(84,7) ,UO+7200 ,3600 ,"BST" }), // Mar Sun>=19 +  ({LDAYL(302,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=23 +  case 1968: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({FIXED(49) ,UO+7200 ,3600 ,"BST" }), // Feb 18 +  ({LDAY (303,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=23 +  case 1972..1980: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAYL(81,7) ,UO+7200 ,3600 ,"BST" }), // Mar Sun>=16 +  ({LDAYL(302,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=23 +  case 1981..1989: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAYL(90,7) ,3600 ,3600 ,"BST" }), // Mar lastSun +  ({LDAYL(302,7),3600 ,0 ,"GMT" })});// Oct Sun>=23 +  case 1990..1995: +  return ({({0 ,0 ,0 ,"GMT" }), +  ({LDAYL(90,7) ,3600 ,3600 ,"BST" }), // Mar lastSun +  ({LDAYL(301,7),3600 ,0 ,"GMT" })});// Oct Sun>=22 +  default: // ..1915 and 1996.. +  case 1969..1971: +  return ({({0 ,0 ,0 ,"GMT" })}); +  } +  } + } +  + class EU + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1976: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,3600 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(274) ,3600 ,0 ,"" })});// Oct 1 +  case 1977: +  case 1979..1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(97,7) ,3600 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAYL(273,7),3600 ,0 ,"" })});// Sep lastSun +  case 1981..1995: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,3600 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),3600 ,0 ,"" })});// Sep lastSun +  case 1996..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,3600 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),3600 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class W_Eur + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1976: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+3600 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(274) ,UO+3600 ,0 ,"" })});// Oct 1 +  case 1977: +  case 1979..1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(97,7) ,UO+3600 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAYL(273,7),UO+3600 ,0 ,"" })});// Sep lastSun +  case 1981..1995: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+3600 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"" })});// Sep lastSun +  case 1996..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+3600 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class C_Eur + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1916: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(121) ,UO+82800 ,3600 ,"S" }), // Apr 30 +  ({FIXED(275) ,UO+0 ,0 ,"" })});// Oct 1 +  case 1917..1918: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (111,1),UO+7200 ,3600 ,"S" }), // Apr Mon>=15 +  ({LDAY (264,1),UO+7200 ,0 ,"" })});// Sep Mon>=15 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+7200 ,3600 ,"S" })});// Apr 1 +  case 1941: +  return ({({0 ,0 ,3600 ,"S" })}); +  case 1942: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(306) ,UO+7200 ,0 ,"" })});// Nov 2 +  case 1943: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(88) ,UO+7200 ,3600 ,"S" }), // Mar 29 +  ({FIXED(277) ,UO+7200 ,0 ,"" })});// Oct 4 +  case 1944: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(94) ,UO+7200 ,3600 ,"S" }), // Apr 3 +  ({FIXED(276) ,UO+7200 ,0 ,"" })});// Oct 2 +  default: // ..1915: +  case 1919..1939: +  case 1945..1976: +  return ({({0 ,0 ,0 ,"" })}); +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 +  case 1977: +  case 1979..1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun +  case 1981..1995: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun +  case 1996..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),UO+7200 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class E_Eur + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1976: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1977: +  case 1979..1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1981..1995: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1996..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),UO-3600 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class Russia + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1916: +  return ({({0 ,0 ,0 ,"MMT" })});// ? +  case 1917: +  return ({({0 ,0 ,0 ,"MMT" }), // ? +  ({FIXED(182) ,UO+82800 ,3600 ,"MST" }), // Jul 1 +  ({FIXED(362) ,UO-3600 ,0 ,"MMT" })});// Dec 28 +  case 1918: +  return ({({0 ,0 ,0 ,"MMT" }), +  ({FIXED(151) ,UO+79200 ,7200 ,"MDST"}), // May 31 +  ({FIXED(259) ,UO-3600 ,3600 ,"MST" })});// Sep 16 +  case 1919: +  return ({({0 ,0 ,3600 ,"MST" }), +  ({FIXED(151) ,UO+79200 ,7200 ,"MDST"}), // May 31 +  ({FIXED(182) ,UO+0 ,3600 ,"S" }), // Jul 1 +  ({FIXED(228) ,UO-3600 ,0 ,"" })});// Aug 16 +  case 1921: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(45) ,UO+82800 ,3600 ,"S" }), // Feb 14 +  ({FIXED(79) ,UO+79200 ,7200 ,"M" }), // Mar 20 +  ({FIXED(244) ,UO-7200 ,3600 ,"S" }), // Sep 1 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1920: +  case 1922..1980: +  return ({({0 ,0 ,0 ,"" })}); +  case 1981..1983: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1984: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({LDAY (274,7),UO+7200 ,0 ,"" })});// Sep lastSun +  case 1992: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (91,6) ,UO+82800 ,3600 ,"S" }), // Mar lastSat +  ({LDAY (274,6),UO+79200 ,0 ,"" })});// Sep lastSat +  case 1985..1991: +  case 1993..1995: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun +  case 1996..: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(304,7),UO+7200 ,0 ,"" })});// Oct lastSun +  } +  } + } +  + class Albania + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1940: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(168) ,UO+0 ,3600 ,"S" })});// Jun 16 +  case 1942: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(306) ,UO+7200 ,0 ,"" })});// Nov 2 +  case 1943: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(88) ,UO+7200 ,3600 ,"S" }), // Mar 29 +  ({FIXED(100) ,UO+7200 ,0 ,"" })});// Apr 10 +  default: // ..1939: +  case 1944..1973: +  return ({({0 ,0 ,0 ,"" })}); +  case 1974: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(124) ,UO+0 ,3600 ,"S" }), // May 4 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 2 +  case 1975: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 2 +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(128) ,UO+0 ,3600 ,"S" }), // May 8 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 2 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(126) ,UO+0 ,3600 ,"S" }), // May 6 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1979: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(125) ,UO+0 ,3600 ,"S" }), // May 5 +  ({FIXED(273) ,UO-3600 ,0 ,"" })});// Sep 30 +  case 1980: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(124) ,UO+0 ,3600 ,"S" }), // May 3 +  ({FIXED(278) ,UO-3600 ,0 ,"" })});// Oct 4 +  case 1981: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(116) ,UO+0 ,3600 ,"S" }), // Apr 26 +  ({FIXED(270) ,UO-3600 ,0 ,"" })});// Sep 27 +  case 1976: +  case 1982: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(122) ,UO+0 ,3600 ,"S" }), // May 2 +  ({FIX_L(276) ,UO-3600 ,0 ,"" })});// Oct 3 +  case 1983: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(108) ,UO+0 ,3600 ,"S" }), // Apr 18 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1984: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+0 ,3600 ,"S" })});// Apr 1 +  case 1941: +  case 1985..: +  return ({({0 ,0 ,3600 ,"S" })}); +  } +  } + } +  + class Austria + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1920: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(96) ,UO+7200 ,3600 ,"S" }), // Apr 5 +  ({FIXED(257) ,UO+7200 ,0 ,"" })});// Sep 13 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 +  ({FIXED(322) ,UO+7200 ,0 ,"" })});// Nov 18 +  case 1946: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(104) ,UO+7200 ,3600 ,"S" }), // Apr 14 +  ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  case 1947: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(96) ,UO+7200 ,3600 ,"S" }), // Apr 6 +  ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  case 1948: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(109) ,UO+7200 ,3600 ,"S" }), // Apr 18 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  default: // ..1919 and 1949.. +  case 1921..1944: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Belgium + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1918: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(68) ,UO+0 ,3600 ,"S" }), // Mar 9 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1919: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Mar 1 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1920: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(45) ,UO+82800 ,3600 ,"S" }), // Feb 14 +  ({FIXED(297) ,UO+82800 ,0 ,"" })});// Oct 23 +  case 1921: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(73) ,UO+82800 ,3600 ,"S" }), // Mar 14 +  ({FIXED(298) ,UO+82800 ,0 ,"" })});// Oct 25 +  case 1922: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(84) ,UO+82800 ,3600 ,"S" }), // Mar 25 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1923: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(111) ,UO+82800 ,3600 ,"S" }), // Apr 21 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1924: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(89) ,UO+82800 ,3600 ,"S" }), // Mar 29 +  ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1925: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(94) ,UO+82800 ,3600 ,"S" }), // Apr 4 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1926: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 17 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1927: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(99) ,UO+82800 ,3600 ,"S" }), // Apr 9 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1928: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 14 +  ({LDAY (282,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1929: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(111) ,UO+7200 ,3600 ,"S" }), // Apr 21 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1930: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(103) ,UO+7200 ,3600 ,"S" }), // Apr 13 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1932: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(94) ,UO+7200 ,3600 ,"S" }), // Apr 3 +  ({LDAY (282,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1933: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(85) ,UO+7200 ,3600 ,"S" }), // Mar 26 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1934: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(98) ,UO+7200 ,3600 ,"S" }), // Apr 8 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1935: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(90) ,UO+7200 ,3600 ,"S" }), // Mar 31 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1931: +  case 1936: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(109) ,UO+7200 ,3600 ,"S" }), // Apr 19 +  ({LDAYL(281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1937: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(94) ,UO+7200 ,3600 ,"S" }), // Apr 4 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1938: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(86) ,UO+7200 ,3600 ,"S" }), // Mar 27 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1939: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(106) ,UO+7200 ,3600 ,"S" }), // Apr 16 +  ({FIXED(323) ,UO+7200 ,0 ,"" })});// Nov 19 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(56) ,UO+7200 ,3600 ,"S" })});// Feb 25 +  case 1941..1943: +  return ({({0 ,0 ,3600 ,"S" })}); +  case 1944: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(261) ,UO+7200 ,0 ,"" })});// Sep 17 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 +  ({FIXED(259) ,UO+7200 ,0 ,"" })});// Sep 16 +  case 1946: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(139) ,UO+7200 ,3600 ,"S" }), // May 19 +  ({FIXED(280) ,UO+7200 ,0 ,"" })});// Oct 7 +  default: // ..1917 and 1947.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Bulg + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1978: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1979: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(90) ,UO+82800 ,3600 ,"S" }), // Mar 31 +  ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 +  case 1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (98,6) ,UO+82800 ,3600 ,"S" }), // Apr Sat<=7 +  ({FIXED(273) ,UO+0 ,0 ,"" })});// Sep 29 +  case 1981: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,6) ,UO+82800 ,3600 ,"S" }), // Apr Sat<=7 +  ({FIXED(270) ,UO+3600 ,0 ,"" })});// Sep 27 +  case 1982: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,6) ,UO+82800 ,3600 ,"S" })});// Apr Sat<=7 +  case 1983..: +  return ({({0 ,0 ,3600 ,"S" })}); +  } +  } + } +  + class Czech + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1945: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(98) ,UO+7200 ,3600 ,"S" }), // Apr 8 +  ({FIXED(322) ,UO+7200 ,0 ,"" })});// Nov 18 +  case 1946: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(126) ,UO+7200 ,3600 ,"S" }), // May 6 +  ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  case 1947: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(110) ,UO+7200 ,3600 ,"S" }), // Apr 20 +  ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  case 1948: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(109) ,UO+7200 ,3600 ,"S" }), // Apr 18 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  case 1949: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(99) ,UO+7200 ,3600 ,"S" }), // Apr 9 +  ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  default: // ..1944 and 1950.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Denmark + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1916: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(135) ,UO+82800 ,3600 ,"S" }), // May 14 +  ({FIXED(274) ,UO+79200 ,0 ,"" })});// Sep 30 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(136) ,UO+0 ,3600 ,"S" })});// May 15 +  case 1941..1944: +  return ({({0 ,0 ,3600 ,"S" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 +  ({FIXED(227) ,UO+7200 ,0 ,"" })});// Aug 15 +  case 1946: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+7200 ,3600 ,"S" }), // May 1 +  ({FIXED(244) ,UO+7200 ,0 ,"" })});// Sep 1 +  case 1947: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(124) ,UO+7200 ,3600 ,"S" }), // May 4 +  ({FIXED(222) ,UO+7200 ,0 ,"" })});// Aug 10 +  case 1948: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(130) ,UO+7200 ,3600 ,"S" }), // May 9 +  ({FIXED(221) ,UO+7200 ,0 ,"" })});// Aug 8 +  default: // ..1915 and 1949.. +  case 1917..1939: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Thule + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1992: +  return ({({0 ,0 ,0 ,"S" })});// ? +  case 1993..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class Finland + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1942: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(93) ,UO+0 ,3600 ,"S" }), // Apr 3 +  ({FIXED(276) ,UO-3600 ,0 ,"" })});// Oct 3 +  default: // ..1941 and 1943.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class France + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1916: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(166) ,UO+82800 ,3600 ,"S" }), // Jun 14 +  ({LDAY (281,7),UO+82800 ,0 ,"" })});// Oct Sun>=1 +  case 1917: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(83) ,UO+82800 ,3600 ,"S" }), // Mar 24 +  ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun>=1 +  case 1918: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(68) ,UO+82800 ,3600 ,"S" }), // Mar 9 +  ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun>=1 +  case 1919: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Mar 1 +  ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun>=1 +  case 1920: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(45) ,UO+82800 ,3600 ,"S" }), // Feb 14 +  ({FIXED(297) ,UO+82800 ,0 ,"" })});// Oct 23 +  case 1921: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(73) ,UO+82800 ,3600 ,"S" }), // Mar 14 +  ({FIXED(298) ,UO+82800 ,0 ,"" })});// Oct 25 +  case 1923: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(146) ,UO+82800 ,3600 ,"S" }), // May 26 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1924: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(89) ,UO+82800 ,3600 ,"S" }), // Mar 29 +  ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1925: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(94) ,UO+82800 ,3600 ,"S" }), // Apr 4 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1926: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 17 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1927: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(99) ,UO+82800 ,3600 ,"S" }), // Apr 9 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1928: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 14 +  ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1929: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(110) ,UO+82800 ,3600 ,"S" }), // Apr 20 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1930: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(102) ,UO+82800 ,3600 ,"S" }), // Apr 12 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1932: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(93) ,UO+82800 ,3600 ,"S" }), // Apr 2 +  ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1922: +  case 1933: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(84) ,UO+82800 ,3600 ,"S" }), // Mar 25 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1934: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(97) ,UO+82800 ,3600 ,"S" }), // Apr 7 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1935: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(89) ,UO+82800 ,3600 ,"S" }), // Mar 30 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1931: +  case 1936: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(108) ,UO+82800 ,3600 ,"S" }), // Apr 18 +  ({LDAYL(280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1937: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(93) ,UO+82800 ,3600 ,"S" }), // Apr 3 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1938: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(85) ,UO+82800 ,3600 ,"S" }), // Mar 26 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1939: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 15 +  ({FIXED(322) ,UO+82800 ,0 ,"" })});// Nov 18 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(56) ,UO+7200 ,3600 ,"S" })});// Feb 25 +  case 1941: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(125) ,UO-3600 ,7200 ,"M" }), // May 5 +  ({FIXED(279) ,UO-7200 ,3600 ,"S" })});// Oct 6 +  case 1942: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(68) ,UO-3600 ,7200 ,"M" }), // Mar 9 +  ({FIXED(306) ,UO+3600 ,3600 ,"S" })});// Nov 2 +  case 1943: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(88) ,UO+3600 ,7200 ,"M" }), // Mar 29 +  ({FIXED(277) ,UO+3600 ,3600 ,"S" })});// Oct 4 +  case 1944: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(94) ,UO+3600 ,7200 ,"M" }), // Apr 3 +  ({FIXED(282) ,UO-3600 ,3600 ,"S" })});// Oct 8 +  case 1945: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(92) ,UO+3600 ,7200 ,"M" }), // Apr 2 +  ({FIXED(259) ,UO+3600 ,0 ,"" })});// Sep 16 +  case 1976: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(88) ,UO+3600 ,3600 ,"S" }), // Mar 28 +  ({FIXED(270) ,UO+0 ,0 ,"" })});// Sep 26 +  default: // ..1915 and 1977.. +  case 1946..1975: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Germany + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1945: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 +  ({FIXED(151) ,UO+7200 ,7200 ,"M" }), // May 31 +  ({FIXED(266) ,UO+3600 ,3600 ,"S" }), // Sep 23 +  ({FIXED(322) ,UO+7200 ,0 ,"" })});// Nov 18 +  case 1946: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(104) ,UO+7200 ,3600 ,"S" }), // Apr 14 +  ({FIXED(280) ,UO+7200 ,0 ,"" })});// Oct 7 +  case 1947: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(96) ,UO+7200 ,3600 ,"S" }), // Apr 6 +  ({FIXED(131) ,UO+7200 ,7200 ,"M" }), // May 11 +  ({FIXED(180) ,UO+3600 ,3600 ,"S" }), // Jun 29 +  ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  case 1948: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(109) ,UO+7200 ,3600 ,"S" }), // Apr 18 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  case 1949: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(100) ,UO+7200 ,3600 ,"S" }), // Apr 10 +  ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  default: // ..1944 and 1950.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Greece + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1932: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(189) ,UO+0 ,3600 ,"S" }), // Jul 7 +  ({FIXED(245) ,UO-3600 ,0 ,"" })});// Sep 1 +  case 1941: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(97) ,UO+0 ,3600 ,"S" })});// Apr 7 +  case 1942: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(306) ,UO+7200 ,0 ,"" })});// Nov 2 +  case 1943: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(89) ,UO+0 ,3600 ,"S" }), // Mar 30 +  ({FIXED(277) ,UO-3600 ,0 ,"" })});// Oct 4 +  case 1952: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(183) ,UO+0 ,3600 ,"S" }), // Jul 1 +  ({FIXED(307) ,UO-3600 ,0 ,"" })});// Nov 2 +  case 1975: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(102) ,UO+0 ,3600 ,"S" }), // Apr 12 +  ({FIXED(330) ,UO+0 ,0 ,"" })});// Nov 26 +  case 1976: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(102) ,UO+7200 ,3600 ,"S" }), // Apr 11 +  ({FIXED(284) ,UO+7200 ,0 ,"" })});// Oct 10 +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(269) ,UO+7200 ,0 ,"" })});// Sep 26 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(267) ,UO+10800 ,0 ,"" })});// Sep 24 +  case 1979: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(91) ,UO+32400 ,3600 ,"S" }), // Apr 1 +  ({FIXED(272) ,UO+3600 ,0 ,"" })});// Sep 29 +  case 1980: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIXED(272) ,UO-3600 ,0 ,"" })});// Sep 28 +  default: // ..1931 and 1981.. +  case 1933..1940: +  case 1944..1951: +  case 1953..1974: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Hungary + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1918: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(91) ,UO+10800 ,3600 ,"S" }), // Apr 1 +  ({FIXED(272) ,UO+7200 ,0 ,"" })});// Sep 29 +  case 1919: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+10800 ,3600 ,"S" }), // Apr 15 +  ({FIXED(258) ,UO+7200 ,0 ,"" })});// Sep 15 +  case 1920: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(96) ,UO+10800 ,3600 ,"S" }), // Apr 5 +  ({FIXED(274) ,UO+7200 ,0 ,"" })});// Sep 30 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+82800 ,3600 ,"S" }), // May 1 +  ({FIXED(307) ,UO-3600 ,0 ,"" })});// Nov 3 +  case 1946: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(90) ,UO+7200 ,3600 ,"S" }), // Mar 31 +  ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  case 1947..1949: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(100,7),UO+7200 ,3600 ,"S" }), // Apr Sun>=4 +  ({LDAYL(280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  case 1950: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(107) ,UO+7200 ,3600 ,"S" }), // Apr 17 +  ({FIXED(296) ,UO+7200 ,0 ,"" })});// Oct 23 +  case 1954..1955: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(143) ,UO+0 ,3600 ,"S" }), // May 23 +  ({FIXED(276) ,UO-3600 ,0 ,"" })});// Oct 3 +  case 1956: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (159,7),UO+0 ,3600 ,"S" }), // Jun Sun>=1 +  ({LDAY (274,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1957: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (158,7),UO+3600 ,3600 ,"S" }), // Jun Sun>=1 +  ({LDAY (273,7),UO+7200 ,0 ,"" })});// Sep lastSun +  default: // ..1917: +  case 1921..1944: +  case 1951..1953: +  case 1958..1979: +  return ({({0 ,0 ,0 ,"" })}); +  case 1980: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(97) ,UO+3600 ,3600 ,"S" })});// Apr 6 +  case 1981..: +  return ({({0 ,0 ,3600 ,"S" })}); +  } +  } + } +  + class Iceland + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1917: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(50) ,UO+82800 ,3600 ,"S" }), // Feb 19 +  ({FIXED(294) ,UO+0 ,0 ,"" })});// Oct 21 +  case 1918: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(50) ,UO+82800 ,3600 ,"S" }), // Feb 19 +  ({FIXED(320) ,UO+0 ,0 ,"" })});// Nov 16 +  case 1939: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(119) ,UO+82800 ,3600 ,"S" }), // Apr 29 +  ({FIXED(333) ,UO+3600 ,0 ,"" })});// Nov 29 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(56) ,UO+7200 ,3600 ,"S" }), // Feb 25 +  ({FIXED(308) ,UO+3600 ,0 ,"" })});// Nov 3 +  case 1941: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(61) ,UO+3600 ,3600 ,"S" }), // Mar 2 +  ({FIXED(306) ,UO+3600 ,0 ,"" })});// Nov 2 +  case 1942: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(67) ,UO+3600 ,3600 ,"S" }), // Mar 8 +  ({FIXED(298) ,UO+3600 ,0 ,"" })});// Oct 25 +  case 1943..1946: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(66,7) ,UO+3600 ,3600 ,"S" }), // Mar Sun>=1 +  ({LDAYL(301,7),UO+3600 ,0 ,"" })});// Oct Sun>=22 +  case 1949: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+3600 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(303) ,UO+3600 ,0 ,"" })});// Oct 30 +  case 1947..1948: +  case 1950..1966: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(97,7) ,UO+3600 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAYL(301,7),UO+3600 ,0 ,"" })});// Oct Sun>=22 +  case 1967: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+3600 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(302) ,UO+3600 ,0 ,"" })});// Oct 29 +  default: // ..1916 and 1968.. +  case 1919..1938: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Italy + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1916: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(155) ,UO+0 ,3600 ,"S" }), // Jun 3 +  ({FIXED(275) ,UO+0 ,0 ,"" })});// Oct 1 +  case 1917: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIXED(273) ,UO+0 ,0 ,"" })});// Sep 30 +  case 1918: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(69) ,UO+0 ,3600 ,"S" }), // Mar 10 +  ({LDAY (280,7),UO+0 ,0 ,"" })});// Oct Sun>=1 +  case 1919: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(61) ,UO+0 ,3600 ,"S" }), // Mar 2 +  ({LDAY (280,7),UO+0 ,0 ,"" })});// Oct Sun>=1 +  case 1920: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(81) ,UO+0 ,3600 ,"S" }), // Mar 21 +  ({FIXED(263) ,UO+0 ,0 ,"" })});// Sep 19 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(167) ,UO+0 ,3600 ,"S" })});// Jun 15 +  case 1941..1943: +  return ({({0 ,0 ,3600 ,"S" })}); +  case 1944: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(261) ,UO+0 ,0 ,"" })});// Sep 17 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 +  ({FIXED(258) ,UO+0 ,0 ,"" })});// Sep 15 +  case 1946: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(76) ,UO+7200 ,3600 ,"S" }), // Mar 17 +  ({FIXED(279) ,UO+7200 ,0 ,"" })});// Oct 6 +  case 1947: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(75) ,UO+0 ,3600 ,"S" }), // Mar 16 +  ({FIXED(278) ,UO+0 ,0 ,"" })});// Oct 5 +  case 1948: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(60) ,UO+7200 ,3600 ,"S" }), // Feb 29 +  ({FIXED(277) ,UO+7200 ,0 ,"" })});// Oct 3 +  case 1966..1968: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(148,7),UO+0 ,3600 ,"S" }), // May Sun>=22 +  ({LDAYL(271,7),UO-3600 ,0 ,"" })});// Sep Sun>=22 +  case 1969: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(152) ,UO+0 ,3600 ,"S" }), // Jun 1 +  ({LDAY (271,7),UO-3600 ,0 ,"" })});// Sep Sun>=22 +  case 1970: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(151) ,UO+0 ,3600 ,"S" }), // May 31 +  ({LDAY (273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1971: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (148,7),UO+0 ,3600 ,"S" }), // May Sun>=22 +  ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun +  case 1972: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (149,7),UO+0 ,3600 ,"S" }), // May Sun>=22 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1973: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(154) ,UO+0 ,3600 ,"S" }), // Jun 3 +  ({LDAY (273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1974: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(146) ,UO+0 ,3600 ,"S" }), // May 26 +  ({LDAY (273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1975: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(152) ,UO+0 ,3600 ,"S" }), // Jun 1 +  ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun +  case 1976: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(151) ,UO+0 ,3600 ,"S" }), // May 30 +  ({LDAY (274,7),UO+0 ,0 ,"" })});// Sep lastSun +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (148,7),UO+0 ,3600 ,"S" }), // May Sun>=22 +  ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (148,7),UO+0 ,3600 ,"S" }), // May Sun>=22 +  ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 +  case 1979: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (148,7),UO+0 ,3600 ,"S" }), // May Sun>=22 +  ({FIXED(273) ,UO+0 ,0 ,"" })});// Sep 30 +  default: // ..1915 and 1980.. +  case 1921..1939: +  case 1949..1965: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Latvia + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1989..1996: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun +  default: // ..1988 and 1997.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Lux + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1915: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1916: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(135) ,UO+82800 ,3600 ,"S" }), // May 14 +  ({FIXED(275) ,UO+0 ,0 ,"" })});// Oct 1 +  case 1917: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(118) ,UO+82800 ,3600 ,"S" }), // Apr 28 +  ({FIXED(260) ,UO+0 ,0 ,"" })});// Sep 17 +  case 1918: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (111,1),UO+7200 ,3600 ,"S" }), // Apr Mon>=15 +  ({LDAY (264,1),UO+7200 ,0 ,"" })});// Sep Mon>=15 +  case 1919: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Mar 1 +  ({FIXED(278) ,UO+7200 ,0 ,"" })});// Oct 5 +  case 1920: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(45) ,UO+82800 ,3600 ,"S" }), // Feb 14 +  ({FIXED(298) ,UO+3600 ,0 ,"" })});// Oct 24 +  case 1921: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(73) ,UO+82800 ,3600 ,"S" }), // Mar 14 +  ({FIXED(299) ,UO+3600 ,0 ,"" })});// Oct 26 +  case 1922: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(84) ,UO+82800 ,3600 ,"S" }), // Mar 25 +  ({LDAY (281,7),UO+0 ,0 ,"" })});// Oct Sun>=2 +  case 1923: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(111) ,UO+82800 ,3600 ,"S" }), // Apr 21 +  ({LDAY (281,7),UO+3600 ,0 ,"" })});// Oct Sun>=2 +  case 1924: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(89) ,UO+82800 ,3600 ,"S" }), // Mar 29 +  ({LDAY (282,7),UO+0 ,0 ,"" })});// Oct Sun>=2 +  case 1925: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(95) ,UO+82800 ,3600 ,"S" }), // Apr 5 +  ({LDAY (281,7),UO+0 ,0 ,"" })});// Oct Sun>=2 +  case 1926: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 17 +  ({LDAY (281,7),UO+0 ,0 ,"" })});// Oct Sun>=2 +  case 1927: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(99) ,UO+82800 ,3600 ,"S" }), // Apr 9 +  ({LDAY (281,7),UO+0 ,0 ,"" })});// Oct Sun>=2 +  case 1928: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 14 +  ({LDAY (282,7),UO+0 ,0 ,"" })});// Oct Sun>=2 +  case 1929: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(110) ,UO+82800 ,3600 ,"S" })});// Apr 20 +  case 1930..: +  return ({({0 ,0 ,3600 ,"S" })}); +  } +  } + } +  + class Malta + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1973: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(90) ,UO+0 ,3600 ,"S" }), // Mar 31 +  ({FIXED(272) ,UO+0 ,0 ,"" })});// Sep 29 +  case 1974: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(111) ,UO+0 ,3600 ,"S" }), // Apr 21 +  ({FIXED(259) ,UO+0 ,0 ,"" })});// Sep 16 +  case 1975..1979: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(111,7),UO+7200 ,3600 ,"S" }), // Apr Sun>=15 +  ({LDAYL(264,7),UO+3600 ,0 ,"" })});// Sep Sun>=15 +  case 1980: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(91) ,UO+7200 ,3600 ,"S" }), // Mar 31 +  ({LDAY (265,7),UO+3600 ,0 ,"" })});// Sep Sun>=15 +  default: // ..1972 and 1981.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Neth + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1915: +  return ({({0 ,0 ,0 ,"AMT" })});// ? +  case 1916: +  return ({({0 ,0 ,0 ,"AMT" }), // ? +  ({FIXED(122) ,UO+7200 ,3600 ,"NST" }), // May 1 +  ({FIXED(276) ,UO+7200 ,0 ,"AMT" })});// Oct 2 +  case 1917: +  return ({({0 ,0 ,0 ,"AMT" }), +  ({FIXED(106) ,UO+7200 ,3600 ,"NST" }), // Apr 16 +  ({FIXED(260) ,UO+7200 ,0 ,"AMT" })});// Sep 17 +  case 1918..1921: +  return ({({0 ,0 ,0 ,"AMT" }), +  ({LDAYL(97,1) ,UO+7200 ,3600 ,"NST" }), // Apr Mon>=1 +  ({LDAYL(273,1),UO+7200 ,0 ,"AMT" })});// Sep Mon>=24 +  case 1922: +  return ({({0 ,0 ,0 ,"AMT" }), +  ({FIXED(85) ,UO+7200 ,3600 ,"NST" }), // Mar 26 +  ({LDAY (281,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 +  case 1923: +  return ({({0 ,0 ,0 ,"AMT" }), +  ({FIXED(152) ,UO+7200 ,3600 ,"NST" }), // Jun 1 +  ({LDAY (281,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 +  case 1924: +  return ({({0 ,0 ,0 ,"AMT" }), +  ({FIXED(90) ,UO+7200 ,3600 ,"NST" }), // Mar 30 +  ({LDAY (282,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 +  case 1925: +  return ({({0 ,0 ,0 ,"AMT" }), +  ({FIXED(156) ,UO+7200 ,3600 ,"NST" }), // Jun 5 +  ({LDAY (281,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 +  case 1932: +  return ({({0 ,0 ,0 ,"AMT" }), +  ({FIXED(143) ,UO+7200 ,3600 ,"NST" }), // May 22 +  ({LDAY (282,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 +  case 1926..1931: +  case 1933..1936: +  return ({({0 ,0 ,0 ,"AMT" }), +  ({FIX_L(135) ,UO+7200 ,3600 ,"NST" }), // May 15 +  ({LDAYL(281,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 +  case 1937: +  return ({({0 ,0 ,0 ,"AMT" }), +  ({FIXED(142) ,UO+7200 ,3600 ,"NST" }), // May 22 +  ({FIXED(182) ,UO-3600 ,3600 ,"S" }), // Jul 1 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1938..1939: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(135) ,UO+7200 ,3600 ,"S" }), // May 15 +  ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 +  ({FIXED(140) ,UO+7200 ,0 ,"" })});// May 20 +  case 1940..1944: +  case 1946..: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Norway + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1916: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(143) ,UO+3600 ,3600 ,"S" }), // May 22 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Sep 30 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 +  ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 +  case 1959..1964: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(80,7) ,UO+7200 ,3600 ,"S" }), // Mar Sun>=15 +  ({LDAYL(264,7),UO+7200 ,0 ,"" })});// Sep Sun>=15 +  case 1965: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(115) ,UO+7200 ,3600 ,"S" }), // Apr 25 +  ({LDAY (264,7),UO+7200 ,0 ,"" })});// Sep Sun>=15 +  default: // ..1915 and 1966.. +  case 1917..1944: +  case 1946..1958: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Poland + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1918: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(259) ,UO+7200 ,0 ,"" })});// Sep 16 +  case 1919: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+7200 ,3600 ,"S" }), // Apr 15 +  ({FIXED(259) ,UO+7200 ,0 ,"" })});// Sep 16 +  case 1944: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(278) ,UO+7200 ,0 ,"" })});// Oct 4 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(119) ,UO+0 ,3600 ,"S" }), // Apr 29 +  ({FIXED(305) ,UO-3600 ,0 ,"" })});// Nov 1 +  case 1946: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(104) ,UO+0 ,3600 ,"S" }), // Apr 14 +  ({FIXED(250) ,UO-3600 ,0 ,"" })});// Sep 7 +  case 1947: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(124) ,UO+0 ,3600 ,"S" }), // May 4 +  ({LDAY (280,7),UO-3600 ,0 ,"" })});// Oct Sun>=1 +  case 1948: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(109) ,UO+0 ,3600 ,"S" }), // Apr 18 +  ({LDAY (281,7),UO-3600 ,0 ,"" })});// Oct Sun>=1 +  case 1957: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(153) ,UO+3600 ,3600 ,"S" }), // Jun 2 +  ({LDAY (273,7),UO+3600 ,0 ,"" })});// Sep lastSun +  case 1958: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(89) ,UO+3600 ,3600 ,"S" }), // Mar 30 +  ({LDAY (273,7),UO+3600 ,0 ,"" })});// Sep lastSun +  case 1959: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(151) ,UO+3600 ,3600 ,"S" }), // May 31 +  ({LDAY (280,7),UO+3600 ,0 ,"" })});// Oct Sun>=1 +  case 1960: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(94) ,UO+3600 ,3600 ,"S" }), // Apr 3 +  ({LDAY (281,7),UO+3600 ,0 ,"" })});// Oct Sun>=1 +  case 1961: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (151,7),UO+3600 ,3600 ,"S" }), // May Sun>=25 +  ({LDAY (280,7),UO+3600 ,0 ,"" })});// Oct Sun>=1 +  case 1962..1964: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(151,7),UO+3600 ,3600 ,"S" }), // May Sun>=25 +  ({LDAYL(273,7),UO+3600 ,0 ,"" })});// Sep lastSun +  default: // ..1917 and 1965.. +  case 1920..1943: +  case 1949..1956: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Port + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1916: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(169) ,UO+82800 ,3600 ,"S" }), // Jun 17 +  ({FIXED(306) ,UO+0 ,0 ,"" })});// Nov 1 +  case 1918: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Mar 1 +  ({FIXED(287) ,UO+82800 ,0 ,"" })});// Oct 14 +  case 1920: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Feb 29 +  ({FIXED(288) ,UO+82800 ,0 ,"" })});// Oct 14 +  case 1917: +  case 1919: +  case 1921: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(59) ,UO+82800 ,3600 ,"S" }), // Feb 28 +  ({FIXED(287) ,UO+82800 ,0 ,"" })});// Oct 14 +  case 1924: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 16 +  ({FIXED(288) ,UO+82800 ,0 ,"" })});// Oct 14 +  case 1926: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 17 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1927: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(99) ,UO+82800 ,3600 ,"S" }), // Apr 9 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1928: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 14 +  ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1929: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(110) ,UO+82800 ,3600 ,"S" }), // Apr 20 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1932: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(93) ,UO+82800 ,3600 ,"S" }), // Apr 2 +  ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1934: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(97) ,UO+82800 ,3600 ,"S" }), // Apr 7 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1935: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(89) ,UO+82800 ,3600 ,"S" }), // Mar 30 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1931: +  case 1936: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(108) ,UO+82800 ,3600 ,"S" }), // Apr 18 +  ({LDAYL(280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1937: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(93) ,UO+82800 ,3600 ,"S" }), // Apr 3 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1938: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(85) ,UO+82800 ,3600 ,"S" }), // Mar 26 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1939: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 15 +  ({FIXED(322) ,UO+82800 ,0 ,"" })});// Nov 18 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(55) ,UO+82800 ,3600 ,"S" }), // Feb 24 +  ({FIXED(279) ,UO+82800 ,0 ,"" })});// Oct 5 +  case 1941: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(95) ,UO+82800 ,3600 ,"S" }), // Apr 5 +  ({FIXED(278) ,UO+82800 ,0 ,"" })});// Oct 5 +  case 1942: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (73,6) ,UO+82800 ,3600 ,"S" }), // Mar Sat>=8 +  ({FIXED(115) ,UO+79200 ,7200 ,"M" }), // Apr 25 +  ({FIXED(227) ,UO+79200 ,3600 ,"S" }), // Aug 15 +  ({LDAY (303,6),UO+82800 ,0 ,"" })});// Oct Sat>=24 +  case 1943: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (73,6) ,UO+82800 ,3600 ,"S" }), // Mar Sat>=8 +  ({FIXED(107) ,UO+79200 ,7200 ,"M" }), // Apr 17 +  ({LDAY (243,6),UO+79200 ,3600 ,"S" }), // Aug Sat>=25 +  ({LDAY (303,6),UO+82800 ,0 ,"" })});// Oct Sat>=24 +  case 1944..1945: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(73,6) ,UO+82800 ,3600 ,"S" }), // Mar Sat>=8 +  ({LDAYL(117,6),UO+79200 ,7200 ,"M" }), // Apr Sat>=21 +  ({LDAYL(243,6),UO+79200 ,3600 ,"S" }), // Aug Sat>=25 +  ({LDAYL(303,6),UO+82800 ,0 ,"" })});// Oct Sat>=24 +  case 1946: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,6) ,UO+82800 ,3600 ,"S" }), // Apr Sat>=1 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1947..1949: +  case 1951..1965: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAYL(280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 +  default: // ..1915: +  case 1922..1923: +  case 1925: +  case 1930: +  case 1933: +  case 1950: +  case 1966..1976: +  return ({({0 ,0 ,0 ,"" })}); +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(86) ,UO+0 ,3600 ,"S" }), // Mar 27 +  ({FIXED(268) ,UO+0 ,0 ,"" })});// Sep 25 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 +  case 1979: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAY (273,7),UO+3600 ,0 ,"" })});// Sep lastSun +  case 1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (91,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAY (274,7),UO+3600 ,0 ,"" })});// Sep lastSun +  case 1981..1982: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (90,7) ,UO+3600 ,3600 ,"S" }), // Mar lastSun +  ({LDAY (273,7),UO+3600 ,0 ,"" })});// Sep lastSun +  case 1983: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (90,7) ,UO+7200 ,3600 ,"S" })});// Mar lastSun +  case 1984..: +  return ({({0 ,0 ,3600 ,"S" })}); +  } +  } + } +  + class Romania + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1932: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(142) ,UO+0 ,3600 ,"S" }), // May 21 +  ({LDAY (281,7),UO+0 ,0 ,"" })});// Oct Sun>=1 +  case 1933..1939: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(98,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=2 +  ({LDAYL(280,7),UO+0 ,0 ,"" })});// Oct Sun>=1 +  case 1979: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(147) ,UO+0 ,3600 ,"S" }), // May 27 +  ({LDAY (273,7),UO-3600 ,0 ,"" })});// Sep lastSun +  case 1980: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(96) ,UO+82800 ,3600 ,"S" }), // Apr 5 +  ({LDAY (274,7),UO+0 ,0 ,"" })});// Sep lastSun +  case 1991..1993: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun +  ({LDAYL(273,7),UO+0 ,0 ,"" })});// Sep lastSun +  default: // ..1931 and 1994.. +  case 1940..1978: +  case 1981..1990: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Spain + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1917: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(125) ,UO+82800 ,3600 ,"S" }), // May 5 +  ({FIXED(279) ,UO+82800 ,0 ,"" })});// Oct 6 +  case 1918: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 15 +  ({FIXED(279) ,UO+82800 ,0 ,"" })});// Oct 6 +  case 1919: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(95) ,UO+82800 ,3600 ,"S" }), // Apr 5 +  ({FIXED(279) ,UO+82800 ,0 ,"" })});// Oct 6 +  case 1924: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 16 +  ({FIXED(278) ,UO+82800 ,0 ,"" })});// Oct 4 +  case 1926: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 17 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1927: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(99) ,UO+82800 ,3600 ,"S" }), // Apr 9 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1928: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 14 +  ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1929: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(110) ,UO+82800 ,3600 ,"S" }), // Apr 20 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1937: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(142) ,UO+82800 ,3600 ,"S" }), // May 22 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1938: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(81) ,UO+82800 ,3600 ,"S" }), // Mar 22 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1939: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 15 +  ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(76) ,UO+82800 ,3600 ,"S" })});// Mar 16 +  case 1941: +  return ({({0 ,0 ,3600 ,"S" })}); +  case 1942: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(122) ,UO+79200 ,7200 ,"M" }), // May 2 +  ({FIXED(244) ,UO+79200 ,3600 ,"S" })});// Sep 1 +  case 1943: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (109,6),UO+79200 ,7200 ,"M" }), // Apr Sat>=13 +  ({FIXED(276) ,UO+79200 ,3600 ,"S" })});// Oct 3 +  case 1944: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (110,6),UO+79200 ,7200 ,"M" }), // Apr Sat>=13 +  ({FIXED(284) ,UO+79200 ,3600 ,"S" })});// Oct 10 +  case 1945: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (109,6),UO+79200 ,7200 ,"M" }), // Apr Sat>=13 +  ({FIXED(273) ,UO-3600 ,3600 ,"S" })});// Sep 30 +  case 1946: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (109,6),UO+79200 ,7200 ,"M" }), // Apr Sat>=13 +  ({FIXED(273) ,UO-7200 ,0 ,"" })});// Sep 30 +  case 1949: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(120) ,UO+82800 ,3600 ,"S" }), // Apr 30 +  ({FIXED(273) ,UO+0 ,0 ,"" })});// Sep 30 +  case 1974..1975: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (109,6),UO+82800 ,3600 ,"S" }), // Apr Sat>=13 +  ({LDAY (280,7),UO+0 ,0 ,"" })});// Oct Sun>=1 +  case 1976: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(87) ,UO+82800 ,3600 ,"S" }), // Mar 27 +  ({LDAY (274,7),UO+0 ,0 ,"" })});// Sep lastSun +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+82800 ,3600 ,"S" }), // Apr 2 +  ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+82800 ,3600 ,"S" }), // Apr 2 +  ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 +  default: // ..1916 and 1979.. +  case 1920..1923: +  case 1925: +  case 1930..1936: +  case 1947..1948: +  case 1950..1973: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class SpainAfrica + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1967: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(154) ,UO+43200 ,3600 ,"S" }), // Jun 3 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1974: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(175) ,UO+0 ,3600 ,"S" }), // Jun 24 +  ({FIXED(244) ,UO-3600 ,0 ,"" })});// Sep 1 +  case 1976: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(122) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(214) ,UO-3600 ,0 ,"" })});// Aug 1 +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIXED(271) ,UO-3600 ,0 ,"" })});// Sep 28 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(152) ,UO+0 ,3600 ,"S" }), // Jun 1 +  ({FIXED(216) ,UO-3600 ,0 ,"" })});// Aug 4 +  default: // ..1966 and 1979.. +  case 1968..1973: +  case 1975: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Swiss + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1940: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(307) ,UO+0 ,3600 ,"S" }), // Nov 2 +  ({FIXED(366) ,UO-3600 ,0 ,"" })});// Dec 31 +  case 1941..1942: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (127,7),UO+7200 ,3600 ,"S" }), // May Sun>=1 +  ({LDAY (280,7),UO-3600 ,0 ,"" })});// Oct Sun>=1 +  default: // ..1939 and 1943.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Turkey + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1920: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(88) ,UO+0 ,3600 ,"S" }), // Mar 28 +  ({FIXED(299) ,UO-3600 ,0 ,"" })});// Oct 25 +  case 1921: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(93) ,UO+0 ,3600 ,"S" }), // Apr 3 +  ({FIXED(276) ,UO-3600 ,0 ,"" })});// Oct 3 +  case 1922: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(85) ,UO+0 ,3600 ,"S" }), // Mar 26 +  ({FIXED(281) ,UO-3600 ,0 ,"" })});// Oct 8 +  case 1924: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(134) ,UO+0 ,3600 ,"S" }), // May 13 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1916: +  case 1925: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(121) ,UO+0 ,3600 ,"S" }), // May 1 +  ({FIX_L(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1940: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(182) ,UO+0 ,3600 ,"S" }), // Jun 30 +  ({FIXED(279) ,UO-3600 ,0 ,"" }), // Oct 5 +  ({FIXED(336) ,UO+0 ,3600 ,"S" })});// Dec 1 +  case 1941: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(264) ,UO-3600 ,0 ,"" })});// Sep 21 +  case 1942: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 +  ({FIXED(305) ,UO-3600 ,0 ,"" })});// Nov 1 +  case 1945: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(92) ,UO+0 ,3600 ,"S" }), // Apr 2 +  ({FIXED(281) ,UO-3600 ,0 ,"" })});// Oct 8 +  case 1946: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(152) ,UO+0 ,3600 ,"S" }), // Jun 1 +  ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1947..1948: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(112,7),UO+0 ,3600 ,"S" }), // Apr Sun>=16 +  ({LDAYL(281,7),UO-3600 ,0 ,"" })});// Oct Sun>=2 +  case 1949: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(100) ,UO+0 ,3600 ,"S" }), // Apr 10 +  ({LDAY (281,7),UO-3600 ,0 ,"" })});// Oct Sun>=2 +  case 1950: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(109) ,UO+0 ,3600 ,"S" }), // Apr 19 +  ({LDAY (281,7),UO-3600 ,0 ,"" })});// Oct Sun>=2 +  case 1951: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(112) ,UO+0 ,3600 ,"S" }), // Apr 22 +  ({FIXED(281) ,UO-3600 ,0 ,"" })});// Oct 8 +  case 1962: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(196) ,UO+0 ,3600 ,"S" }), // Jul 15 +  ({FIXED(281) ,UO-3600 ,0 ,"" })});// Oct 8 +  case 1964: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(136) ,UO+0 ,3600 ,"S" }), // May 15 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1970..1972: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAYL(128,7),UO+0 ,3600 ,"S" }), // May Sun>=2 +  ({LDAYL(281,7),UO-3600 ,0 ,"" })});// Oct Sun>=2 +  case 1973: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(154) ,UO+3600 ,3600 ,"S" }), // Jun 3 +  ({FIXED(308) ,UO+7200 ,0 ,"" })});// Nov 4 +  case 1974: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(90) ,UO+7200 ,3600 ,"S" }), // Mar 31 +  ({FIXED(307) ,UO+14400 ,0 ,"" })});// Nov 3 +  case 1975: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(89) ,UO+0 ,3600 ,"S" }), // Mar 30 +  ({LDAY (304,7),UO-3600 ,0 ,"" })});// Oct lastSun +  case 1976: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(153) ,UO+0 ,3600 ,"S" }), // Jun 1 +  ({LDAY (305,7),UO-3600 ,0 ,"" })});// Oct lastSun +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(289) ,UO-3600 ,0 ,"" })});// Oct 16 +  case 1978: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"S" })});// Apr Sun>=1 +  case 1979: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAY (290,1),UO-3600 ,0 ,"" })});// Oct Mon>=11 +  case 1980: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (98,7) ,UO+10800 ,3600 ,"S" }), // Apr Sun>=1 +  ({LDAY (291,1),UO-3600 ,0 ,"" })});// Oct Mon>=11 +  case 1981..1982: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (90,7) ,UO+10800 ,3600 ,"S" }), // Mar lastSun +  ({LDAY (290,1),UO-3600 ,0 ,"" })});// Oct Mon>=11 +  case 1983: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(212) ,UO+0 ,3600 ,"S" }), // Jul 31 +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 2 +  case 1985: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(110) ,UO+0 ,3600 ,"S" }), // Apr 20 +  ({FIXED(271) ,UO-3600 ,0 ,"" })});// Sep 28 +  default: // ..1915 and 1986.. +  case 1917..1919: +  case 1923: +  case 1926..1939: +  case 1943..1944: +  case 1952..1961: +  case 1963: +  case 1965..1969: +  case 1984: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class US + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1918..1919: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (90,7) ,UO+7200 ,3600 ,"W" }), // Mar lastSun +  ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1942: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(40) ,UO+7200 ,3600 ,"W" })});// Feb 9 +  case 1943..1944: +  return ({({0 ,0 ,3600 ,"W" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"W" }), +  ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 +  default: // ..1917: +  case 1920..1941: +  case 1946..1966: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1974: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(6) ,UO+7200 ,3600 ,"D" }), // Jan 6 +  ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1975: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(54) ,UO+7200 ,3600 ,"D" }), // Feb 23 +  ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1967..1973: +  case 1976..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1987..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class NYC + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1920: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({LDAY (91,7) ,UO+7200 ,3600 ,"D" }), // Mar lastSun +  ({LDAY (305,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1921..1954: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1955..1966: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  default: // ..1919 and 1967.. +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Chicago + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1920: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(165) ,UO+7200 ,3600 ,"D" }), // Jun 13 +  ({LDAY (305,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1921: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (90,7) ,UO+7200 ,3600 ,"D" }), // Mar lastSun +  ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1922..1954: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1955..1966: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  default: // ..1919 and 1967.. +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Denver + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1920: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({LDAY (91,7) ,UO+7200 ,3600 ,"D" }), // Mar lastSun +  ({LDAY (305,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1921: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (90,7) ,UO+7200 ,3600 ,"D" }), // Mar lastSun +  ({FIXED(142) ,UO+3600 ,0 ,"S" })});// May 22 +  case 1965..1966: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  default: // ..1919 and 1967.. +  case 1922..1964: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class CA + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1948: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(74) ,UO+7200 ,3600 ,"D" })});// Mar 14 +  case 1949: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(1) ,UO+3600 ,0 ,"S" })});// Jan 1 +  case 1950..1961: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1962..1966: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  default: // ..1947 and 1967.. +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Indianapolis + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1941: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(173) ,UO+7200 ,3600 ,"D" }), // Jun 22 +  ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1942..1945: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(273,7),UO+7200 ,0 ,"S" })});// Sep lastSun +  case 1946..1954: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  default: // ..1940 and 1955.. +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Marengo + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1951: +  case 1954..1960: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  default: // ..1950 and 1961.. +  case 1952..1953: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Starke + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1947..1954: +  case 1957..1958: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1955..1956: +  case 1959..1961: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  default: // ..1946 and 1962.. +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Louisville + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1921: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(121) ,UO+7200 ,3600 ,"D" }), // May 1 +  ({FIXED(244) ,UO+3600 ,0 ,"S" })});// Sep 1 +  default: // ..1920: +  case 1922..1940: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1946: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAY (120,7),UO+3600 ,3600 ,"D" }), // Apr lastSun +  ({FIXED(153) ,UO+3600 ,0 ,"S" })});// Jun 2 +  case 1943..1945: +  case 1948..1949: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAYL(120,7),UO+3600 ,3600 ,"D" })});// Apr lastSun +  case 1950: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAY (120,7),UO+3600 ,3600 ,"D" }), // Apr lastSun +  ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1941: +  case 1951..1955: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1956..1960: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1942: +  case 1947: +  case 1961: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (120,7),UO+7200 ,3600 ,"D" })});// Apr lastSun +  case 1962..: +  return ({({0 ,0 ,3600 ,"D" })}); +  } +  } + } +  + class Detroit + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1948: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({LDAY (121,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAY (274,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1967: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(165) ,UO+7200 ,3600 ,"D" }), // Jun 14 +  ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  default: // ..1947 and 1968.. +  case 1949..1966: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Menominee + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1946: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1966: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  default: // ..1945 and 1967.. +  case 1947..1965: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Canada + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1918: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 +  ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 +  case 1942: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 +  case 1943..1944: +  return ({({0 ,0 ,3600 ,"D" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 +  default: // ..1917: +  case 1919..1941: +  case 1946..1973: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1974..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1987..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class StJohns + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1916: +  return ({({0 ,0 ,0 ,"S" })});// ? +  case 1917: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({LDAY (104,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=8 +  ({FIXED(260) ,UO+3600 ,0 ,"S" })});// Sep 17 +  case 1918: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (104,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=8 +  ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 +  case 1919: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(125) ,UO+82800 ,3600 ,"D" }), // May 5 +  ({FIXED(224) ,UO+79200 ,0 ,"S" })});// Aug 12 +  case 1920..1935: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(127,7),UO+82800 ,3600 ,"D" }), // May Sun>=1 +  ({LDAYL(304,7),UO+79200 ,0 ,"S" })});// Oct lastSun +  case 1936..1941: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(134,7),UO+0 ,3600 ,"D" }), // May Sun>=8 +  ({LDAYL(280,7),UO-3600 ,0 ,"S" })});// Oct Sun>=1 +  case 1942: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(60) ,UO+0 ,3600 ,"D" }), // Mar 1 +  ({FIXED(365) ,UO-3600 ,0 ,"S" })});// Dec 31 +  case 1943: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(150) ,UO+0 ,3600 ,"D" }), // May 30 +  ({FIXED(248) ,UO-3600 ,0 ,"S" })});// Sep 5 +  case 1944: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(192) ,UO+0 ,3600 ,"D" }), // Jul 10 +  ({FIXED(246) ,UO-3600 ,0 ,"S" })});// Sep 2 +  case 1945: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(1) ,UO+0 ,3600 ,"D" }), // Jan 1 +  ({FIXED(280) ,UO+3600 ,0 ,"S" })});// Oct 7 +  case 1946..1950: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(134,7),UO+7200 ,3600 ,"D" }), // May Sun>=8 +  ({LDAYL(281,7),UO+3600 ,0 ,"S" })});// Oct Sun>=2 +  case 1951..1959: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1960..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1988: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (98,7) ,UO+7200 ,7200 ,"DD" }), // Apr Sun>=1 +  ({LDAY (305,7),UO+0 ,0 ,"S" })});// Oct lastSun +  case 1987: +  case 1989..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class Halifax + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1916: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(92) ,UO+0 ,3600 ,"D" }), // Apr 1 +  ({FIXED(275) ,UO-3600 ,0 ,"S" })});// Oct 1 +  case 1918: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 +  ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 +  case 1920: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(130) ,UO+0 ,3600 ,"D" }), // May 9 +  ({FIXED(242) ,UO-3600 ,0 ,"S" })});// Aug 29 +  case 1921: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(126) ,UO+0 ,3600 ,"D" }), // May 6 +  ({FIXED(248) ,UO-3600 ,0 ,"S" })});// Sep 5 +  case 1922: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(120) ,UO+0 ,3600 ,"D" }), // Apr 30 +  ({FIXED(248) ,UO-3600 ,0 ,"S" })});// Sep 5 +  case 1923: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (127,7),UO+0 ,3600 ,"D" }), // May Sun>=1 +  ({FIXED(247) ,UO-3600 ,0 ,"S" })});// Sep 4 +  case 1924: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (128,7),UO+0 ,3600 ,"D" }), // May Sun>=1 +  ({FIXED(259) ,UO-3600 ,0 ,"S" })});// Sep 15 +  case 1925: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (127,7),UO+0 ,3600 ,"D" }), // May Sun>=1 +  ({FIXED(271) ,UO-3600 ,0 ,"S" })});// Sep 28 +  case 1926: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(136) ,UO+0 ,3600 ,"D" }), // May 16 +  ({FIXED(256) ,UO-3600 ,0 ,"S" })});// Sep 13 +  case 1927: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(121) ,UO+0 ,3600 ,"D" }), // May 1 +  ({FIXED(269) ,UO-3600 ,0 ,"S" })});// Sep 26 +  case 1928: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (135,7),UO+0 ,3600 ,"D" }), // May Sun>=8 +  ({FIXED(253) ,UO-3600 ,0 ,"S" })});// Sep 9 +  case 1929: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (134,7),UO+0 ,3600 ,"D" }), // May Sun>=8 +  ({FIXED(246) ,UO-3600 ,0 ,"S" })});// Sep 3 +  case 1930: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (134,7),UO+0 ,3600 ,"D" }), // May Sun>=8 +  ({FIXED(258) ,UO-3600 ,0 ,"S" })});// Sep 15 +  case 1931: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (134,7),UO+0 ,3600 ,"D" }), // May Sun>=8 +  ({LDAY (273,1),UO-3600 ,0 ,"S" })});// Sep Mon>=24 +  case 1932: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (274,1),UO+0 ,0 ,"S" })});// Sep Mon>=24 +  case 1933: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(120) ,UO+0 ,3600 ,"D" }), // Apr 30 +  ({FIXED(275) ,UO-3600 ,0 ,"S" })});// Oct 2 +  case 1934: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(140) ,UO+0 ,3600 ,"D" }), // May 20 +  ({FIXED(259) ,UO-3600 ,0 ,"S" })});// Sep 16 +  case 1935: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(153) ,UO+0 ,3600 ,"D" }), // Jun 2 +  ({FIXED(273) ,UO-3600 ,0 ,"S" })});// Sep 30 +  case 1936: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(153) ,UO+0 ,3600 ,"D" }), // Jun 1 +  ({FIXED(258) ,UO-3600 ,0 ,"S" })});// Sep 14 +  case 1939: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(148) ,UO+0 ,3600 ,"D" }), // May 28 +  ({LDAY (273,1),UO-3600 ,0 ,"S" })});// Sep Mon>=24 +  case 1937..1938: +  case 1940..1941: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(127,7),UO+0 ,3600 ,"D" }), // May Sun>=1 +  ({LDAYL(273,1),UO-3600 ,0 ,"S" })});// Sep Mon>=24 +  case 1942: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 +  case 1943..1944: +  return ({({0 ,0 ,3600 ,"D" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1946..1959: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  default: // ..1915: +  case 1917: +  case 1919: +  case 1960..1961: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1962..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1987..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class Mont + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1917: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(84) ,UO+7200 ,3600 ,"D" }), // Mar 25 +  ({FIXED(114) ,UO-3600 ,0 ,"S" })});// Apr 24 +  case 1918: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 +  ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 +  case 1919: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(90) ,UO+9000 ,3600 ,"D" }), // Mar 31 +  ({FIXED(298) ,UO+5400 ,0 ,"S" })});// Oct 25 +  case 1920: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(123) ,UO+9000 ,3600 ,"D" }), // May 2 +  ({FIXED(277) ,UO+5400 ,0 ,"S" })});// Oct 3 +  case 1921: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(121) ,UO+7200 ,3600 ,"D" }), // May 1 +  ({FIXED(275) ,UO+5400 ,0 ,"S" })});// Oct 2 +  case 1922: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(120) ,UO+7200 ,3600 ,"D" }), // Apr 30 +  ({FIXED(274) ,UO+5400 ,0 ,"S" })});// Oct 1 +  default: // ..1916: +  case 1923: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1924: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(138) ,UO+7200 ,3600 ,"D" }), // May 17 +  ({LDAY (274,7),UO+5400 ,0 ,"S" })});// Sep lastSun +  case 1925..1926: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (127,7),UO+7200 ,3600 ,"D" }), // May Sun>=1 +  ({LDAY (273,7),UO+5400 ,0 ,"S" })});// Sep lastSun +  case 1928..1931: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(121,7),UO+0 ,3600 ,"D" }), // Apr Sun>=25 +  ({LDAYL(274,7),UO-3600 ,0 ,"S" })});// Sep Sun>=25 +  case 1927: +  case 1932: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIX_L(121) ,UO+0 ,3600 ,"D" }), // May 1 +  ({LDAYL(274,7),UO-3600 ,0 ,"S" })});// Sep Sun>=25 +  case 1933: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (120,7),UO+0 ,3600 ,"D" }), // Apr Sun>=24 +  ({FIXED(274) ,UO-3600 ,0 ,"S" })});// Oct 1 +  case 1934..1939: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+0 ,3600 ,"D" }), // Apr Sun>=24 +  ({LDAYL(273,7),UO-3600 ,0 ,"S" })});// Sep Sun>=24 +  case 1940: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (121,7),UO+0 ,3600 ,"D" })});// Apr Sun>=24 +  case 1941..1944: +  return ({({0 ,0 ,3600 ,"D" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1946..1948: +  case 1951..1956: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1949..1950: +  case 1957..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1987..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class Winn + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1916: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(114) ,UO+0 ,3600 ,"D" }), // Apr 23 +  ({FIXED(261) ,UO-3600 ,0 ,"S" })});// Sep 17 +  case 1918: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 +  ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 +  case 1937: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(136) ,UO+7200 ,3600 ,"D" }), // May 16 +  ({FIXED(269) ,UO+3600 ,0 ,"S" })});// Sep 26 +  case 1942: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 +  case 1943..1944: +  return ({({0 ,0 ,3600 ,"D" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1946: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(132) ,UO+7200 ,3600 ,"D" }), // May 12 +  ({FIXED(286) ,UO+3600 ,0 ,"S" })});// Oct 13 +  case 1950: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(121) ,UO+7200 ,3600 ,"D" }), // May 1 +  ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 +  case 1947..1949: +  case 1951..1958: +  case 1960: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1963: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({FIXED(265) ,UO+3600 ,0 ,"S" })});// Sep 22 +  default: // ..1915: +  case 1917: +  case 1919..1936: +  case 1938..1941: +  case 1961..1962: +  case 1964..1965: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1959: +  case 1966..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1987..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class Regina + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1918: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 +  ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 +  case 1930..1934: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(127,7),UO+0 ,3600 ,"D" }), // May Sun>=1 +  ({LDAYL(280,7),UO-3600 ,0 ,"S" })});// Oct Sun>=1 +  case 1938: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (104,7),UO+0 ,3600 ,"D" }), // Apr Sun>=8 +  ({LDAY (280,7),UO-3600 ,0 ,"S" })});// Oct Sun>=1 +  case 1937: +  case 1939..1941: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(104,7),UO+0 ,3600 ,"D" }), // Apr Sun>=8 +  ({LDAYL(287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 +  case 1942: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 +  case 1943..1944: +  return ({({0 ,0 ,3600 ,"D" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1946: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (104,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=8 +  ({LDAY (287,7),UO+3600 ,0 ,"S" })});// Oct Sun>=8 +  case 1947..1958: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1959: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  default: // ..1917 and 1960.. +  case 1919..1929: +  case 1935..1936: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Swift + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1957: +  case 1959: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1960..1961: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  default: // ..1956 and 1962.. +  case 1958: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Edm + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1918: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({LDAY (104,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=8 +  ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 +  case 1919: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (104,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=8 +  ({FIXED(147) ,UO+3600 ,0 ,"S" })});// May 27 +  case 1942: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 +  case 1943..1944: +  return ({({0 ,0 ,3600 ,"D" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"D" }), +  ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1921..1923: +  case 1947: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  default: // ..1917: +  case 1924..1941: +  case 1946: +  case 1948..1966: +  case 1968: +  case 1970..1971: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1920: +  case 1967: +  case 1969: +  case 1972..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1987..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class Vanc + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1918: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 +  ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 +  default: // ..1917: +  case 1919..1941: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1942: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 +  case 1943..1944: +  return ({({0 ,0 ,3600 ,"D" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 +  case 1946: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({FIXED(286) ,UO+3600 ,0 ,"S" })});// Oct 13 +  case 1947..1961: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  case 1962..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1987..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class NT_YK + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1918: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 +  ({FIXED(300) ,UO+3600 ,0 ,"S" })});// Oct 27 +  case 1919: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(145) ,UO+7200 ,3600 ,"D" }), // May 25 +  ({FIXED(305) ,UO-3600 ,0 ,"S" })});// Nov 1 +  case 1942: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 +  case 1943..1944: +  return ({({0 ,0 ,3600 ,"D" })}); +  case 1945: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 +  case 1965: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (120,7),UO+0 ,7200 ,"DD" }), // Apr lastSun +  ({LDAY (304,7),UO+0 ,0 ,"S" })});// Oct lastSun +  default: // ..1917: +  case 1920..1941: +  case 1946..1964: +  case 1966..1979: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1980..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1987..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class Mexico + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1939: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(36) ,UO+0 ,3600 ,"D" }), // Feb 5 +  ({FIXED(176) ,UO-3600 ,0 ,"S" })});// Jun 25 +  case 1940: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(344) ,UO+0 ,3600 ,"D" })});// Dec 9 +  case 1941: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(91) ,UO-3600 ,0 ,"S" })});// Apr 1 +  case 1943: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(350) ,UO+0 ,3600 ,"D" })});// Dec 16 +  case 1944: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(122) ,UO-3600 ,0 ,"S" })});// May 1 +  case 1950: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(43) ,UO+0 ,3600 ,"D" }), // Feb 12 +  ({FIXED(211) ,UO-3600 ,0 ,"S" })});// Jul 30 +  default: // ..1938: +  case 1942: +  case 1945..1949: +  case 1951..1995: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1996..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class BajaN + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1954..1961: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun +  default: // ..1953 and 1962.. +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Bahamas + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1963: +  return ({({0 ,0 ,0 ,"S" })});// ? +  case 1964..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  case 1987..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class Barb + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1977: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(163) ,UO+7200 ,3600 ,"D" }), // Jun 12 +  ({LDAY (280,7),UO+3600 ,0 ,"S" })});// Oct Sun>=1 +  case 1978: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (111,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=15 +  ({LDAY (280,7),UO+3600 ,0 ,"S" })});// Oct Sun>=1 +  case 1979: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (111,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=15 +  ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 +  case 1980: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (112,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=15 +  ({FIXED(269) ,UO+3600 ,0 ,"S" })});// Sep 25 +  default: // ..1976 and 1981.. +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Belize + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1918: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({LDAY (281,7),UO+0 ,1800 ,"HD" })});// Oct Sun>=2 +  case 1919..1942: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({LDAYL(46,7) ,UO-1800 ,0 ,"S" }), // Feb Sun>=9 +  ({LDAYL(281,7),UO+0 ,1800 ,"HD" })});// Oct Sun>=2 +  case 1943: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({LDAY (46,7) ,UO-1800 ,0 ,"S" })});// Feb Sun>=9 +  case 1973: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(339) ,UO+0 ,3600 ,"D" })});// Dec 5 +  case 1974: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(40) ,UO-3600 ,0 ,"S" })});// Feb 9 +  case 1982: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(352) ,UO+0 ,3600 ,"D" })});// Dec 18 +  case 1983: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(43) ,UO-3600 ,0 ,"S" })});// Feb 12 +  default: // ..1917 and 1984.. +  case 1944..1972: +  case 1975..1981: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class CR + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1979..1980: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(59,7) ,UO+0 ,3600 ,"D" }), // Feb lastSun +  ({LDAYL(158,7),UO-3600 ,0 ,"S" })});// Jun Sun>=1 +  case 1991: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (21,6) ,UO+0 ,3600 ,"D" }), // Jan Sat>=15 +  ({FIXED(182) ,UO-3600 ,0 ,"S" })});// Jul 1 +  case 1992: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (21,6) ,UO+0 ,3600 ,"D" }), // Jan Sat>=15 +  ({FIXED(75) ,UO-3600 ,0 ,"S" })});// Mar 15 +  default: // ..1978 and 1993.. +  case 1981..1990: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Cuba + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1928: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(162) ,UO+0 ,3600 ,"D" }), // Jun 10 +  ({FIXED(284) ,UO-3600 ,0 ,"S" })});// Oct 10 +  case 1940..1942: +  case 1945..1946: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(158,7),UO+0 ,3600 ,"D" }), // Jun Sun>=1 +  ({LDAYL(250,7),UO-3600 ,0 ,"S" })});// Sep Sun>=1 +  default: // ..1927: +  case 1929..1939: +  case 1943..1944: +  case 1947..1964: +  return ({({0 ,0 ,0 ,"S" })}); +  case 1965: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(152) ,UO+0 ,3600 ,"D" }), // Jun 1 +  ({FIXED(273) ,UO-3600 ,0 ,"S" })});// Sep 30 +  case 1966: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(149) ,UO+0 ,3600 ,"D" }), // May 29 +  ({FIXED(275) ,UO-3600 ,0 ,"S" })});// Oct 2 +  case 1967: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(98) ,UO+0 ,3600 ,"D" }), // Apr 8 +  ({LDAY (257,7),UO-3600 ,0 ,"S" })});// Sep Sun>=8 +  case 1968: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(105) ,UO+0 ,3600 ,"D" }), // Apr 14 +  ({LDAY (258,7),UO-3600 ,0 ,"S" })});// Sep Sun>=8 +  case 1972..1974: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+0 ,3600 ,"D" }), // Apr lastSun +  ({FIX_L(281) ,UO-3600 ,0 ,"S" })});// Oct 8 +  case 1969..1971: +  case 1975..1977: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+0 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO-3600 ,0 ,"S" })});// Oct lastSun +  case 1978: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(127) ,UO+0 ,3600 ,"D" }), // May 7 +  ({LDAY (287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 +  case 1979..1980: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(80,7) ,UO+0 ,3600 ,"D" }), // Mar Sun>=15 +  ({LDAYL(287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 +  case 1981..1985: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(131,7),UO+0 ,3600 ,"D" }), // May Sun>=5 +  ({LDAYL(287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 +  case 1986..1989: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(79,7) ,UO+0 ,3600 ,"D" }), // Mar Sun>=14 +  ({LDAYL(287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 +  case 1990: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAY (287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 +  case 1991..1995: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(287,7),UO+0 ,0 ,"S" })});// Oct Sun>=8 +  case 1996: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (98,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 +  ({FIXED(280) ,UO+0 ,0 ,"S" })});// Oct 6 +  case 1997: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 +  ({FIXED(285) ,UO+0 ,0 ,"S" })});// Oct 12 +  case 1998..1999: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (90,7) ,UO+0 ,3600 ,"D" }), // Mar lastSun +  ({LDAY (304,7),UO+0 ,0 ,"S" })});// Oct lastSun +  case 2000..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+0 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class DR + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1966: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(303) ,UO+0 ,3600 ,"D" })});// Oct 30 +  case 1967: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(59) ,UO-3600 ,0 ,"S" })});// Feb 28 +  case 1969: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAY (304,7),UO+0 ,1800 ,"HD" })});// Oct lastSun +  case 1970: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({FIXED(52) ,UO-1800 ,0 ,"S" }), // Feb 21 +  ({LDAY (304,7),UO+0 ,1800 ,"HD" })});// Oct lastSun +  case 1971: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({FIXED(20) ,UO-1800 ,0 ,"S" }), // Jan 20 +  ({LDAY (304,7),UO+0 ,1800 ,"HD" })});// Oct lastSun +  case 1972..1973: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({FIXED(21) ,UO-1800 ,0 ,"S" }), // Jan 21 +  ({LDAYL(304,7),UO+0 ,1800 ,"HD" })});// Oct lastSun +  case 1974: +  return ({({0 ,0 ,1800 ,"HD" }), +  ({FIXED(21) ,UO-1800 ,0 ,"S" })});// Jan 21 +  default: // ..1965 and 1975.. +  case 1968: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Salv + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1987..1988: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(127,7),UO+0 ,3600 ,"D" }), // May Sun>=1 +  ({LDAYL(273,7),UO-3600 ,0 ,"S" })});// Sep lastSun +  default: // ..1986 and 1989.. +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Guat + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1973: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(329) ,UO+0 ,3600 ,"D" })});// Nov 25 +  case 1974: +  return ({({0 ,0 ,3600 ,"D" }), +  ({FIXED(55) ,UO-3600 ,0 ,"S" })});// Feb 24 +  case 1983: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(141) ,UO+0 ,3600 ,"D" }), // May 21 +  ({FIXED(265) ,UO-3600 ,0 ,"S" })});// Sep 22 +  case 1991: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(82) ,UO+0 ,3600 ,"D" }), // Mar 23 +  ({FIXED(250) ,UO-3600 ,0 ,"S" })});// Sep 7 +  default: // ..1972 and 1992.. +  case 1975..1982: +  case 1984..1990: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Haiti + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1983: +  return ({({0 ,0 ,0 ,"S" }), // ? +  ({FIXED(128) ,UO+0 ,3600 ,"D" }), // May 8 +  ({LDAY (304,7),UO-3600 ,0 ,"S" })});// Oct lastSun +  case 1984..1987: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+0 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO-3600 ,0 ,"S" })});// Oct lastSun +  case 1988..1997: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+3600 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  default: // ..1982 and 1998.. +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class Nic + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1979..1980: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(81,7) ,UO+0 ,3600 ,"D" }), // Mar Sun>=16 +  ({LDAYL(180,1),UO-3600 ,0 ,"S" })});// Jun Mon>=23 +  case 1992: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(1) ,UO+14400 ,3600 ,"D" }), // Jan 1 +  ({FIXED(268) ,UO-3600 ,0 ,"S" })});// Sep 24 +  default: // ..1978 and 1993.. +  case 1981..1991: +  return ({({0 ,0 ,0 ,"S" })}); +  } +  } + } +  + class TC + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1978: +  return ({({0 ,0 ,0 ,"S" })});// ? +  case 1979..1986: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+0 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO-3600 ,0 ,"S" })});// Oct lastSun +  case 1987..: +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(97,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 +  ({LDAYL(304,7),UO-3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +  + class Arg + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1930: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(335) ,UO+0 ,3600 ,"S" })});// Dec 1 +  case 1931: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 +  ({FIXED(288) ,UO+0 ,3600 ,"S" })});// Oct 15 +  case 1932..1939: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIX_L(60) ,UO-3600 ,0 ,"" }), // Mar 1 +  ({FIX_L(305) ,UO+0 ,3600 ,"S" })});// Nov 1 +  case 1940: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(61) ,UO-3600 ,0 ,"" }), // Mar 1 +  ({FIXED(183) ,UO+0 ,3600 ,"S" })});// Jul 1 +  case 1941: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(166) ,UO-3600 ,0 ,"" }), // Jun 15 +  ({FIXED(288) ,UO+0 ,3600 ,"S" })});// Oct 15 +  case 1943: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(213) ,UO-3600 ,0 ,"" }), // Aug 1 +  ({FIXED(288) ,UO+0 ,3600 ,"S" })});// Oct 15 +  case 1946: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(60) ,UO-3600 ,0 ,"" }), // Mar 1 +  ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 +  case 1942: +  case 1944..1945: +  case 1947..1962: +  return ({({0 ,0 ,3600 ,"S" })}); +  case 1963: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(274) ,UO-3600 ,0 ,"" }), // Oct 1 +  ({FIXED(349) ,UO+0 ,3600 ,"S" })});// Dec 15 +  case 1964..1966: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIX_L(60) ,UO-3600 ,0 ,"" }), // Mar 1 +  ({FIX_L(288) ,UO+0 ,3600 ,"S" })});// Oct 15 +  case 1967: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 +  ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 +  case 1974: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(23) ,UO+0 ,3600 ,"S" }), // Jan 23 +  ({FIXED(121) ,UO-3600 ,0 ,"" }), // May 1 +  ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 +  case 1968: +  case 1975..1976: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(97,7) ,UO-3600 ,0 ,"" }), // Apr Sun>=1 +  ({LDAYL(280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 +  case 1969: +  case 1977: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (97,7) ,UO-3600 ,0 ,"" })});// Apr Sun>=1 +  case 1985: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(306) ,UO+0 ,3600 ,"S" })});// Nov 2 +  case 1986: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(73) ,UO-3600 ,0 ,"" }), // Mar 14 +  ({FIXED(298) ,UO+0 ,3600 ,"S" })});// Oct 25 +  case 1987: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(44) ,UO-3600 ,0 ,"" }), // Feb 13 +  ({FIXED(298) ,UO+0 ,3600 ,"S" })});// Oct 25 +  case 1988: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(38) ,UO-3600 ,0 ,"" }), // Feb 7 +  ({FIXED(336) ,UO+0 ,3600 ,"S" })});// Dec 1 +  case 1989..1992: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(66,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=1 +  ({LDAYL(294,7),UO+0 ,3600 ,"S" })});// Oct Sun>=15 +  case 1993: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (66,7) ,UO-3600 ,0 ,"" })});// Mar Sun>=1 +  default: // ..1929 and 1994.. +  case 1970..1973: +  case 1978..1984: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Brazil + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1931: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(276) ,UO+39600 ,3600 ,"S" })});// Oct 3 +  case 1932: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(92) ,UO-3600 ,0 ,"" }), // Apr 1 +  ({FIXED(277) ,UO+0 ,3600 ,"S" })});// Oct 3 +  case 1933: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(91) ,UO-3600 ,0 ,"" })});// Apr 1 +  case 1949: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(335) ,UO+0 ,3600 ,"S" })});// Dec 1 +  case 1950: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(106) ,UO+0 ,0 ,"" }), // Apr 16 +  ({FIXED(335) ,UO+0 ,3600 ,"S" })});// Dec 1 +  case 1951..1952: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIX_L(91) ,UO-3600 ,0 ,"" }), // Apr 1 +  ({FIX_L(335) ,UO+0 ,3600 ,"S" })});// Dec 1 +  case 1963: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(343) ,UO+0 ,3600 ,"S" })});// Dec 9 +  case 1965: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(31) ,UO+0 ,3600 ,"S" }), // Jan 31 +  ({FIXED(90) ,UO-3600 ,0 ,"" }), // Mar 31 +  ({FIXED(335) ,UO+0 ,3600 ,"S" })});// Dec 1 +  case 1966..1967: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(60) ,UO-3600 ,0 ,"" }), // Mar 1 +  ({FIXED(305) ,UO+0 ,3600 ,"S" })});// Nov 1 +  case 1953: +  case 1964: +  case 1968: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIX_L(60) ,UO-3600 ,0 ,"" })});// Mar 1 +  default: // ..1930: +  case 1934..1948: +  case 1954..1962: +  case 1969..1984: +  return ({({0 ,0 ,0 ,"" })}); +  case 1985: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(306) ,UO+0 ,3600 ,"S" })});// Nov 2 +  case 1986: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(74) ,UO-3600 ,0 ,"" }), // Mar 15 +  ({FIXED(298) ,UO+0 ,3600 ,"S" })});// Oct 25 +  case 1987: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(45) ,UO-3600 ,0 ,"" }), // Feb 14 +  ({FIXED(298) ,UO+0 ,3600 ,"S" })});// Oct 25 +  case 1988: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(38) ,UO-3600 ,0 ,"" }), // Feb 7 +  ({FIXED(290) ,UO+0 ,3600 ,"S" })});// Oct 16 +  case 1989: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(29) ,UO-3600 ,0 ,"" }), // Jan 29 +  ({FIXED(288) ,UO+0 ,3600 ,"S" })});// Oct 15 +  case 1990: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(42) ,UO-3600 ,0 ,"" }), // Feb 11 +  ({FIXED(294) ,UO+0 ,3600 ,"S" })});// Oct 21 +  case 1991: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(48) ,UO-3600 ,0 ,"" }), // Feb 17 +  ({FIXED(293) ,UO+0 ,3600 ,"S" })});// Oct 20 +  case 1992: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(40) ,UO-3600 ,0 ,"" }), // Feb 9 +  ({FIXED(299) ,UO+0 ,3600 ,"S" })});// Oct 25 +  case 1993: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(31) ,UO-3600 ,0 ,"" }), // Jan 31 +  ({LDAY (290,7),UO+0 ,3600 ,"S" })});// Oct Sun>=11 +  case 1994..1995: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (52,7) ,UO-3600 ,0 ,"" }), // Feb Sun>=15 +  ({LDAY (290,7),UO+0 ,3600 ,"S" })});// Oct Sun>=11 +  case 1996: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(42) ,UO-3600 ,0 ,"" }), // Feb 11 +  ({FIXED(280) ,UO+0 ,3600 ,"S" })});// Oct 6 +  case 1997: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(47) ,UO-3600 ,0 ,"" }), // Feb 16 +  ({FIXED(279) ,UO+0 ,3600 ,"S" })});// Oct 6 +  case 1998: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(60) ,UO-3600 ,0 ,"" }), // Mar 1 +  ({FIXED(284) ,UO+0 ,3600 ,"S" })});// Oct 11 +  case 1999: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(52) ,UO-3600 ,0 ,"" }), // Feb 21 +  ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 +  case 2000..: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(59,7) ,UO-3600 ,0 ,"" }), // Feb lastSun +  ({LDAYL(280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 +  } +  } + } +  + class Chile + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1919: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(183) ,UO-3600 ,0 ,"" })});// Jul 2 +  case 1918: +  case 1927: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(244) ,UO+0 ,3600 ,"S" })});// Sep 1 +  case 1928..1931: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIX_L(91) ,UO-3600 ,0 ,"" }), // Apr 1 +  ({FIX_L(244) ,UO+0 ,3600 ,"S" })});// Sep 1 +  case 1932: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(92) ,UO-3600 ,0 ,"" })});// Apr 1 +  default: // ..1917: +  case 1920..1926: +  case 1933..1968: +  return ({({0 ,0 ,0 ,"" })}); +  case 1969: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 +  case 1998: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (74,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=9 +  ({FIXED(270) ,UO+0 ,3600 ,"S" })});// Sep 27 +  case 1999: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(94) ,UO-3600 ,0 ,"" }), // Apr 4 +  ({LDAY (288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 +  case 1970..1997: +  case 2000..: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(74,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=9 +  ({LDAYL(288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 +  } +  } + } +  + class CO + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1992: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(123) ,UO+0 ,3600 ,"S" }), // May 2 +  ({FIXED(366) ,UO-3600 ,0 ,"" })});// Dec 31 +  default: // ..1991 and 1993.. +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Falk + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1939: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (84,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=19 +  ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 +  case 1938: +  case 1940..1942: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(84,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=19 +  ({LDAYL(273,7),UO+0 ,3600 ,"S" })});// Sep lastSun +  case 1943: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(1) ,UO-3600 ,0 ,"" })});// Jan 1 +  default: // ..1936: +  case 1944..1982: +  return ({({0 ,0 ,0 ,"" })}); +  case 1937: +  case 1983: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (273,7),UO+0 ,3600 ,"S" })});// Sep lastSun +  case 1984: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (121,7),UO-3600 ,0 ,"" }), // Apr lastSun +  ({FIXED(260) ,UO+0 ,3600 ,"S" })});// Sep 16 +  case 1985: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (120,7),UO-3600 ,0 ,"" }), // Apr lastSun +  ({LDAY (258,7),UO+0 ,3600 ,"S" })});// Sep Sun>=9 +  case 1986..1995: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(112,7),UO-3600 ,0 ,"" }), // Apr Sun>=16 +  ({LDAYL(258,7),UO+0 ,3600 ,"S" })});// Sep Sun>=9 +  case 1996..: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(112,7),UO-3600 ,0 ,"" }), // Apr Sun>=16 +  ({LDAYL(257,7),UO+0 ,3600 ,"S" })});// Sep Sun>=8 +  } +  } + } +  + class Para + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  default: // ..1974: +  return ({({0 ,0 ,0 ,"" })});// ? +  case 1975: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(60) ,UO+0 ,0 ,"" }), // Mar 1 +  ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 +  case 1976..1978: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIX_L(60) ,UO-3600 ,0 ,"" }), // Mar 1 +  ({FIX_L(274) ,UO+0 ,3600 ,"S" })});// Oct 1 +  case 1989: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 +  ({FIXED(295) ,UO+0 ,3600 ,"S" })});// Oct 22 +  case 1979..1988: +  case 1990: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIX_L(91) ,UO-3600 ,0 ,"" }), // Apr 1 +  ({FIX_L(274) ,UO+0 ,3600 ,"S" })});// Oct 1 +  case 1991: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 +  ({FIXED(279) ,UO+0 ,3600 ,"S" })});// Oct 6 +  case 1992: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(61) ,UO-3600 ,0 ,"" }), // Mar 1 +  ({FIXED(279) ,UO+0 ,3600 ,"S" })});// Oct 5 +  case 1993: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(90) ,UO-3600 ,0 ,"" }), // Mar 31 +  ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 +  case 1994..1995: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (59,7) ,UO-3600 ,0 ,"" }), // Feb lastSun +  ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 +  case 1997: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (59,7) ,UO-3600 ,0 ,"" }), // Feb lastSun +  ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 +  case 1996: +  case 1998: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIX_L(60) ,UO-3600 ,0 ,"" }), // Mar 1 +  ({LDAYL(280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 +  case 1999..: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAYL(59,7) ,UO-3600 ,0 ,"" }), // Feb lastSun +  ({LDAYL(287,7),UO+0 ,3600 ,"S" })});// Oct Sun>=8 +  } +  } + } +  + class Peru + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1938: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(1) ,UO+0 ,3600 ,"S" }), // Jan 1 +  ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 +  ({LDAY (273,7),UO+0 ,3600 ,"S" })});// Sep lastSun +  case 1939: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (89,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=24 +  ({LDAY (273,7),UO+0 ,3600 ,"S" })});// Sep lastSun +  case 1940: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (90,7) ,UO-3600 ,0 ,"" })});// Mar Sun>=24 +  case 1987: +  case 1990: +  case 1994: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(1) ,UO+0 ,3600 ,"S" }), // Jan 1 +  ({FIXED(91) ,UO-3600 ,0 ,"" })});// Apr 1 +  default: // ..1937 and 1995.. +  case 1941..1986: +  case 1988..1989: +  case 1991..1993: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class Uruguay + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1923: +  return ({({0 ,0 ,0 ,"" }), // ? +  ({FIXED(275) ,UO+0 ,1800 ,"HS" })});// Oct 2 +  case 1924..1925: +  return ({({0 ,0 ,1800 ,"HS" }), +  ({FIX_L(91) ,UO-1800 ,0 ,"" }), // Apr 1 +  ({FIX_L(274) ,UO+0 ,1800 ,"HS" })});// Oct 1 +  case 1926: +  return ({({0 ,0 ,1800 ,"HS" }), +  ({FIXED(91) ,UO-1800 ,0 ,"" })});// Apr 1 +  case 1933: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (304,7),UO+0 ,1800 ,"HS" })});// Oct lastSun +  case 1934..1935: +  return ({({0 ,0 ,1800 ,"HS" }), +  ({LDAY (90,6) ,UO+84600 ,0 ,"" }), // Mar Sat>=25 +  ({LDAY (304,7),UO+0 ,1800 ,"HS" })});// Oct lastSun +  case 1936: +  return ({({0 ,0 ,1800 ,"HS" }), +  ({LDAY (91,6) ,UO+84600 ,0 ,"" }), // Mar Sat>=25 +  ({FIXED(306) ,UO+0 ,1800 ,"HS" })});// Nov 1 +  case 1937..1940: +  return ({({0 ,0 ,1800 ,"HS" }), +  ({LDAYL(90,7) ,UO-1800 ,0 ,"" }), // Mar lastSun +  ({LDAYL(304,7),UO+0 ,1800 ,"HS" })});// Oct lastSun +  case 1941: +  return ({({0 ,0 ,1800 ,"HS" }), +  ({LDAY (90,7) ,UO-1800 ,0 ,"" }), // Mar lastSun +  ({FIXED(213) ,UO+0 ,0 ,"" })});// Aug 1 +  case 1942: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(1) ,UO+0 ,1800 ,"HS" }), // Jan 1 +  ({FIXED(348) ,UO-1800 ,3600 ,"S" })});// Dec 14 +  case 1943: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(73) ,UO-3600 ,0 ,"" })});// Mar 14 +  case 1959: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(144) ,UO+0 ,3600 ,"S" }), // May 24 +  ({FIXED(319) ,UO-3600 ,0 ,"" })});// Nov 15 +  case 1960: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(17) ,UO+0 ,3600 ,"S" }), // Jan 17 +  ({FIXED(66) ,UO-3600 ,0 ,"" })});// Mar 6 +  case 1965: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(269) ,UO-3600 ,0 ,"" })});// Sep 26 +  case 1966..1967: +  return ({({0 ,0 ,0 ,"" }), +  ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 +  ({FIXED(304) ,UO-3600 ,0 ,"" })});// Oct 31 +  case 1968..1970: +  return ({({0 ,0 ,0 ,"" }), +  ({FIX_L(147) ,UO+0 ,1800 ,"HS" }), // May 27 +  ({FIX_L(336) ,UO-1800 ,0 ,"" })});// Dec 2 +  case 1972: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(115) ,UO+0 ,3600 ,"S" }), // Apr 24 +  ({FIXED(228) ,UO-3600 ,0 ,"" })});// Aug 15 +  case 1974: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(69) ,UO+0 ,1800 ,"HS" }), // Mar 10 +  ({FIXED(356) ,UO-1800 ,3600 ,"S" })});// Dec 22 +  case 1975: +  return ({({0 ,0 ,3600 ,"S" })}); +  case 1976: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 +  case 1977: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(338) ,UO+0 ,3600 ,"S" })});// Dec 4 +  case 1978: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(91) ,UO-3600 ,0 ,"" })});// Apr 1 +  case 1979: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 +  case 1980: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(122) ,UO-3600 ,0 ,"" })});// May 1 +  case 1987: +  return ({({0 ,0 ,0 ,"" }), +  ({FIXED(348) ,UO+0 ,3600 ,"S" })});// Dec 14 +  case 1988: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(74) ,UO-3600 ,0 ,"" }), // Mar 14 +  ({FIXED(346) ,UO+0 ,3600 ,"S" })});// Dec 11 +  case 1989: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(71) ,UO-3600 ,0 ,"" }), // Mar 12 +  ({FIXED(302) ,UO+0 ,3600 ,"S" })});// Oct 29 +  case 1990..1991: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (66,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=1 +  ({LDAY (300,7),UO+0 ,3600 ,"S" })});// Oct Sun>=21 +  case 1992: +  return ({({0 ,0 ,3600 ,"S" }), +  ({LDAY (67,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=1 +  ({FIXED(292) ,UO+0 ,3600 ,"S" })});// Oct 18 +  case 1993: +  return ({({0 ,0 ,3600 ,"S" }), +  ({FIXED(59) ,UO-3600 ,0 ,"" })});// Feb 28 +  default: // ..1922 and 1994.. +  case 1927..1932: +  case 1944..1958: +  case 1961..1964: +  case 1971: +  case 1973: +  case 1981..1986: +  return ({({0 ,0 ,0 ,"" })}); +  } +  } + } +  + class SystemV + { +  inherit TZRules; +  static array(array(string|int)) jd_year_periods(int jd) +  { +  [int y,int yjd,int leap]=gregorian_yjd(jd); +  switch (y) +  { +  case 1974: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(6) ,UO+7200 ,3600 ,"D" }), // Jan 6 +  ({LDAY (334,7),UO+3600 ,0 ,"S" })});// Nov lastSun +  case 1975: +  return ({({0 ,0 ,0 ,"S" }), +  ({FIXED(54) ,UO+7200 ,3600 ,"D" }), // Feb 23 +  ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  default: // ..1973 and 1976.. +  return ({({0 ,0 ,0 ,"S" }), +  ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun +  ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun +  } +  } + } +    Newline at end of file added.