Index: data/README.sources
===================================================================
--- data/README.sources	(revision 0)
+++ data/README.sources	(revision 0)
@@ -0,0 +1,117 @@
+Locations.xml.in is generated from four primary sources:
+
+1. Locations.xml.in. That is, the process of generating a new
+   Locations.xml.in uses certain information from the old
+   Locations.xml.in:
+
+     * The overall division of the world into <region>, <country>, and
+       <state>. When a new country appears in the input data (either
+       because it's an actual new country, or because the country
+       previously did not have any active weather stations but now
+       does), a <country> node needs to be added to the appropriate
+       <region> in Locations.xml.in so that the importer knows where
+       the country belongs in the output.
+
+       Likewise, if you want to split an existing country into
+       <state>s, you must first create the <state> nodes in
+       Locations.xml.in, assigning one or more <fips-code>s to each
+       state. The importer will then use those FIPS codes to assign
+       cities to the correct states automatically.
+
+     * The <iso-code>, <fips-code>, <tz-hint>, <radar>, and <zone>
+       tags for <country>, <state>, and <location> nodes are copied
+       from the input to the output.
+
+The other three sources are all produced by the United States federal
+government and are thus in the public domain:
+
+2. The US National Weather Service's "Meteorological Station Location
+   Information", keyed by ICAO location indicator:
+
+     http://weather.noaa.gov/data/nsd_cccc.txt
+
+   described here:
+
+     http://weather.noaa.gov/tg/site.shtml
+
+   This was the original data source, and is the primary source of the
+   <code> elements on Locations.xml.in. Unfortunately, some of the
+   stations in this list are inactive, so we need to prune the list to
+   only those stations that are still reporting. We do that by getting
+   a directory listing of
+
+     ftp://tgftp.nws.noaa.gov/data/observations/metar/stations/
+
+   and only including the stations with a report in the last 24 hours
+   or so.
+
+   Traditionally the user-visible locations in Locations.xml were
+   generated from this file, but this was problematic in several ways:
+
+     * The locations are only divided into states within the US, so
+       Canadian/British/Chinese/etc countries needed to be split up
+       into provinces/regions/etc by hand.
+
+     * Many locations are named after airports rather than cities.
+
+     * The internationalization in this file is very inconsistent;
+       some cities have anglicized names ("Antwerp"), others have
+       ASCIIfied local names ("Muenchen"). Other names (particularly
+       in Africa and the Middle East) use odd variant forms of names
+       that are neither the preferred English form nor the preferred
+       local form.
+
+   Now we mostly use this file to get the station codes and
+   coordinates, and use the other two files to map those coordinates
+   to good city names.
+
+3. US place name information comes from the US Board on Geographic
+   Names's "State Files with Federal Codes"
+
+     http://geonames.usgs.gov/docs/fips55/All_fips55.zip
+
+   linked from here:
+
+     http://geonames.usgs.gov/domestic/download_data.htm 
+
+   described here:
+
+     http://geonames.usgs.gov/domestic/fips55_fileformat.htm
+     http://geonames.usgs.gov/domestic/fips55codedef.html
+
+   This data also allows us to determine which US cities are in which
+   counties, which is needed to get the time zones correct in states
+   that span two time zones.
+
+4. Non-US place names come from the US National
+   Geospatial-Intelligence Agency's GEOnet Names Server country files
+   data. We use the "single compressed zip file that contains the
+   entire country files dataset", linked from here:
+
+     http://earth-info.nga.mil/gns/html/namefiles.htm
+
+   (The data file itself has a last-modified date in its name, so it
+   changes regularly.)
+
+   described here:
+
+     http://earth-info.nga.mil/gns/html/help.htm#C3
+
+   I can't find a convenient description of the DSG (Feature
+   Designation Code) values on the NGA's site, but they are explained
+   here:
+
+     http://speech.tec.army.mil/GeonamesDSGHelp.htm
+
+   This provides state/province/etc-level divisions for non-US cities,
+   and also lets us replace the ASCIIfied names from the weather
+   station database with properly accented UTF-8 names.
+
+   To some extent, we can also use this data to find major cities that
+   should be in Locations.xml.in, but which normally wouldn't be
+   because they don't have a weather station. Our current definition
+   of "important" is that it has designation of "PPLC" (populated
+   place, capital of a country) or "PPLA" (populated place, capital of
+   a first-order administrative division). We also look at the
+   "Populated Place Classification" (PC) and population (POP) fields,
+   but as of 2008-05 those aren't filled in yet for most countries.
Index: data/build-locationdb.pl
===================================================================
--- data/build-locationdb.pl	(revision 0)
+++ data/build-locationdb.pl	(revision 0)
@@ -0,0 +1,444 @@
+#!/usr/bin/perl -w
+
+use File::Temp "tempfile";
+
+$intlsrc = "sources/geonames_dd_dms_date_20080528.txt";
+$ussrc = "sources/all_fips55.txt";
+$weathersrc = "sources/nsd_cccc.txt";
+
+$locationdb = "locationdb.sqlite";
+unlink $locationdb;
+
+($states, $states_filename) = tempfile();
+($counties, $counties_filename) = tempfile();
+($cities, $cities_filename) = tempfile();
+
+# The columns in $intlsrc: (interesting ones in caps)
+# rc UFI uni LAT LONG dms_lat dms_long mgrs jog fc DSG PC CC1 ADM1 adm2 POP ELEV cc2 NT LC SHORT_FORM generic SORT_NAME FULL_NAME full_name_nd modify_date
+
+print "Reading $intlsrc\n";
+open INTLSRC, $intlsrc;
+while (<INTLSRC>) {
+  # skip header, and historical records
+  next if $. == 1 || /\(\(/;
+
+  @fields = split /\t/;
+  next if $#fields != 25;
+
+  ($junk, $id, $junk, $latitude, $longitude, $junk, $junk, $junk,
+   $junk, $junk, $designation, $pc, $country_code, $state_code, $junk,
+   $population, $elevation, $junk, $name_type, $language, $short_name,
+   $junk, $flat_name, $long_name) = @fields;
+
+  if ($designation =~ /^PCL/) {
+    # /^PCL/ matches countries and other ISO-3166-like things:
+    # PCLD - dependent political entity
+    # PCLF - freely associated state
+    # PCLI - independent political entity (ie, "country")
+    # PCLIX - section of independent political entity
+
+    if ($short_name) { $countries{$short_name} = $country_code; }
+    if ($long_name) { $countries{$long_name} = $country_code; }
+
+  } elsif ($designation eq "ADM1") {
+    # ID COUNTRY_CODE STATE_CODE NAME_TYPE LANGUAGE SHORT_NAME
+    # LONG_NAME FLAT_NAME
+    print $states "intl-$id\t$country_code\t$state_code\t$name_type\t$language\t$short_name\t$long_name\t$flat_name\n";
+
+  } elsif ($designation =~ /^PPL/) {
+    # "PPL*" is "Populated Place"
+
+    # $importance = 1 means that if we haven't found a weather station
+    # for the city after going through the whole stations table, then
+    # we'll add an entry using whatever weather station is closest.
+    # Our current definition of "important" is that it has designation
+    # of "PPLC" (capital of a country [that is, a /PCL.*/]) or "PPLA"
+    # (capital of an ADM1). We also look at the "Populated Place
+    # Classification" ($pc) and population, but as of 2008-05 those
+    # aren't filled in yet for most countries.
+    #
+    # If $pc is 4 or 5 ("unimportant"), we give the city
+    # $importance = -1, meaning it will only be used when a weather
+    # station actually matches its name; it won't get pulled in as a
+    # "nearest city" match.
+    if ($designation eq "PPLC" || $designation eq "PPLA" ||
+	$pc eq "1" || ($population && $population > 100000)) {
+      $importance = 1;
+    } elsif ($pc eq "4" || $pc eq "5") {
+      $importance = -1;
+    } else {
+      $importance = 0;
+    }
+
+    # either sqlite or pysqlite treats ".9" as a string rather than a
+    # number, so make sure we say "0.9" instead
+    $latitude = 0 + $latitude;
+    $longitude = 0 + $longitude;
+
+    # ID LATITUDE LONGITUDE ELEVATION IMPORTANCE COUNTRY_CODE
+    # STATE_CODE COUNTY_CODE NAME_TYPE LANGUAGE SHORT_NAME LONG_NAME
+    # FLAT_NAME
+    print $cities "intl-$id\t$latitude\t$longitude\t$elevation\t$importance\t$country_code\t$country_code$state_code\t\t$name_type\t$language\t$short_name\t$long_name\t$flat_name\n";
+
+  } elsif ($designation =~ /^ISL/) {
+    # Some small islands have weather stations named after them, and
+    # it generally seems to make more sense to use the island name
+    # rather than using the name of a totally random small town on the
+    # island... We mark these entries as $importance = -1 so they only
+    # match by name, not by proximity.
+
+    $latitude = 0 + $latitude;
+    $longitude = 0 + $longitude;
+
+    # ID LATITUDE LONGITUDE ELEVATION IMPORTANCE COUNTRY_CODE
+    # STATE_CODE COUNTY_CODE NAME_TYPE LANGUAGE SHORT_NAME LONG_NAME
+    # FLAT_NAME
+    print $cities "intl-$id\t$latitude\t$longitude\t$elevation\t-1\t$country_code\t$country_code$state_code\t\t$name_type\t$language\t$short_name\t$long_name\t$flat_name\n";
+  }
+}
+close INTLSRC;
+
+# The columns in $ussrc:
+# feature_id fips_st_cd fips_place_cd feature_class fips_class feature_name state_alpha county_seq fips_county_cd county_name primary_lat primary_lon
+
+print "Reading $ussrc\n";
+$/ = "\r\n";
+open USSRC, $ussrc;
+while (<USSRC>) {
+  # skip header, and historical records
+  next if $. == 1 || /\(historical\)/;
+
+  # remove CRLF and split
+  chomp;
+  @fields = split /\|/;
+  next if $#fields != 11;
+  ($feature_id, $state_num, $junk, $feature_class, $fips_class, $name,
+   $state, $junk, $county_num, $county, $latitude, $longitude) = @fields;
+
+  # Skip everything but towns/cities
+  next if $feature_class ne "Populated Place";
+
+  # The FIPS55 Class Codes don't reliably differentiate "minor cities"
+  # from "major cities", so we never assign $importance = 1 within the
+  # US. (This doesn't matter much because basically every major city
+  # in the US already has at least one weather station anyway). We
+  # *can* distinguish $importance 0 and -1 though; Class "C"
+  # represents "Incorporated Places" and "U1" is "a census designated
+  # place (CDP) with a name identical to the authoritative common name
+  # that describes essentially the same population" (ie,
+  # "reasonably-well-known towns"). Other codes correspond to smaller
+  # towns, or subdivisions of larger cities/towns, so we mark them
+  # $importance = -1.
+
+  if ($fips_class =~ /C[1-7]|U1/) {
+    $importance = 0;
+  } else {
+    $importance = -1;
+  }
+
+  # ID LATITUDE LONGITUDE ELEVATION IMPORTANCE COUNTRY_CODE STATE_CODE
+  # COUNTY_CODE NAME_TYPE LANGUAGE SHORT_NAME LONG_NAME FLAT_NAME
+  print $cities "us-$feature_id\t$latitude\t$longitude\t\t$importance\tUS\tUS$state_num\t$county_num\tN\teng\t$name\t\t\n";
+
+  # There are no separate entries for counties, so we just extract
+  # that data out of the cities, keeping track of which counties we've
+  # already added
+  $county_id = "us-$state_num-$county_num";
+  if (!$counties{$county_id}) {
+    $counties{$county_id} = 1;
+
+    # ID COUNTRY_CODE STATE_CODE COUNTY_CODE NAME_TYPE LANGUAGE
+    # SHORT_NAME LONG_NAME FLAT_NAME
+    print $counties "$county_id\tUS\t$state\t$county_num\tN\teng\t$county\t\t\n";
+  }
+}
+close USSRC;
+
+# Now add some additional data that's not in either source file...
+
+# $intlsrc has no entry for the US or its dependencies
+$countries{"United States"} = "US";
+$countries{"United States of America"} = "US";
+$countries{"United States Minor Outlying Islands"} = "US";
+$countries{"Micronesia, Federated States of"} = "US";
+# These are in $intlsrc, but not listed as countries
+$countries{"Åland Islands"} = "FI01";
+$countries{"Antarctica"} = "AY";
+$countries{"Faroe Islands"} = "FO";
+$countries{"French Guiana"} = "FG";
+$countries{"French Polynesia"} = "FP";
+$countries{"Greenland"} = "GL";
+$countries{"Guadeloupe"} = "GP";
+$countries{"Martinique"} = "MB";
+$countries{"New Caledonia"} = "NC";
+$countries{"Reunion"} = "RE";
+$countries{"Saint Pierre and Miquelon"} = "SB";
+$countries{"Svalbard"} = "SV";
+$countries{"Wallis and Futuna"} = "WF";
+# These are variations that appear in $weathersrc
+$countries{"Bahamas,The"} = "BF";
+$countries{"Congo, Republic of the"} = "CF";
+$countries{"Congo, Democratic Republic of the"} = "CG";
+$countries{"Cote d'Ivoire"} = "IV";
+$countries{"Falkland Islands, Islas Malvinas"} = "FK";
+$countries{"Gambia, The"} = "GA";
+$countries{"People's Republic of China"} = "CH";
+$countries{"South Georgia and the Islands"} = "SX";
+$countries{"Viet Nam"} = "VM";
+
+$usstatedata = << "EOF";
+01	AL	Alabama
+02	AK	Alaska
+04	AZ	Arizona
+05	AR	Arkansas
+06	CA	California
+08	CO	Colorado
+09	CT	Connecticut
+10	DE	Delaware
+11	DC	District of Columbia
+12	FL	Florida
+13	GA	Georgia
+15	HI	Hawaii
+16	ID	Idaho
+17	IL	Illinois
+18	IN	Indiana
+19	IA	Iowa
+20	KS	Kansas
+21	KY	Kentucky
+22	LA	Louisiana
+23	ME	Maine
+24	MD	Maryland
+25	MA	Massachusetts
+26	MI	Michigan
+27	MN	Minnesota
+28	MS	Mississippi
+29	MO	Missouri
+30	MT	Montana
+31	NE	Nebraska
+32	NV	Nevada
+33	NH	New Hampshire
+34	NJ	New Jersey
+35	NM	New Mexico
+36	NY	New York
+37	NC	North Carolina
+38	ND	North Dakota
+39	OH	Ohio
+40	OK	Oklahoma
+41	OR	Oregon
+42	PA	Pennsylvania
+44	RI	Rhode Island
+45	SC	South Carolina
+46	SD	South Dakota
+47	TN	Tennessee
+48	TX	Texas
+49	UT	Utah
+50	VT	Vermont
+51	VA	Virginia
+53	WA	Washington
+54	WV	West Virginia
+55	WI	Wisconsin
+56	WY	Wyoming
+60	AS	American Samoa
+64	FM	Federated States of Micronesia
+66	GU	Guam
+69	MP	Northern Mariana Islands
+70	PW	Palau
+72	PR	Puerto Rico
+78	VI	United States Virgin Islands
+EOF
+# ID COUNTRY_CODE STATE_CODE NAME_TYPE LANGUAGE SHORT_NAME
+# LONG_NAME FLAT_NAME
+for $usstate (split(/\n/, $usstatedata)) {
+  ($fips, $abbrev, $name) = split(/\t/, $usstate);
+  ($flat = uc $name) =~ s/ //g;
+  $states{$name} = "US$fips";
+  $states{$abbrev} = "US$fips";
+  print $states "us-$fips\tUS\tUS$fips\tN\teng\t$abbrev\t$name\t$flat\n";
+}
+
+close $states;
+close $counties;
+close $cities;
+
+print "\nCreating adm1 ('states') table\n";
+open SQLITE, "|sqlite3 $locationdb";
+print SQLITE "CREATE TABLE adm1 (id TEXT, country_code TEXT, state_code TEXT, name_type TEXT, language TEXT, short_name TEXT, long_name TEXT, flat_name TEXT);\n";
+print SQLITE ".separator '\t'\n";
+print SQLITE ".import $states_filename adm1\n";
+close SQLITE;
+#unlink $states_filename;
+
+print "Creating adm2 ('counties') table\n";
+open SQLITE, "|sqlite3 $locationdb";
+print SQLITE "CREATE TABLE adm2 (id TEXT, country_code TEXT, state_code TEXT, county_code TEXT, name_type TEXT, language TEXT, short_name TEXT, long_name TEXT, flat_name TEXT);\n";
+print SQLITE ".separator '\t'\n";
+print SQLITE ".import $counties_filename adm2\n";
+close SQLITE;
+#unlink $counties_filename;
+
+print "Creating cities table\n";
+open SQLITE, "|sqlite3 $locationdb";
+print SQLITE "CREATE TABLE cities (id TEXT, latitude REAL, longitude REAL, elevation REAL, importance INTEGER, country_code TEXT, state_code TEXT, county_code TEXT, name_type TEXT, language TEXT, short_name TEXT, long_name TEXT, flat_name TEXT);\n";
+print SQLITE ".separator '\t'\n";
+print SQLITE ".import $cities_filename cities\n";
+close SQLITE;
+#unlink $cities_filename;
+
+print "Indexing cities\n";
+open SQLITE, "|sqlite3 $locationdb";
+print SQLITE "CREATE INDEX short_name ON cities (country_code, state_code, short_name);\n";
+print SQLITE "CREATE INDEX long_name ON cities (country_code, state_code, long_name);\n";
+print SQLITE "CREATE INDEX flat_name ON cities (country_code, state_code, flat_name);\n";
+print SQLITE "CREATE INDEX long_lat ON cities (country_code, longitude, latitude);\n";
+print SQLITE "CREATE INDEX id ON cities (id);\n";
+close SQLITE;
+
+# The columns in $weathersrc are
+# CODE wmo_zone wmo_id NAME STATE COUNTRY region LATITUDE_DMS LONGITUDE_DMS ue_lat ue_long ELEVATION upper_elevation primary
+# (however, some lines are mising one or both of the last two fields!)
+#
+# The columns in the stations table will be
+# CODE NAME STATE COUNTRY LATITUDE LONGITUDE ELEVATION
+
+sub dms_to_dec {
+  my ($coord) = @_;
+  return 0 if $coord !~ /(\d+)-(\d+)(-(\d+))?([NSEW])/;
+  my $dec = $1 + $2 / 60;
+  if ($4) { $dec += $4 / 3600; }
+  if ($5 =~ /[SW]/) { $dec = -$dec; }
+  return $dec;
+}
+
+print "\nCreating weather stations\n";
+($stations, $stations_filename) = tempfile();
+open WEATHERSRC, $weathersrc;
+while (<WEATHERSRC>) {
+  # remove CRLF and split
+  chomp;
+  @fields = split /;/;
+  next if $#fields < 11;
+  
+  ($code, $junk, $id, $location, $state, $country, $junk, $latitude, $longitude, $junk, $junk, $elevation) = @fields;
+
+  # Whitespace cleanup
+  $location =~ s/   */ /;
+  $location =~ s/\\/\//;
+  $location =~ s/([^ ])\/([^ ])/$1 \/ $2/;
+  $location =~ s/,([^ ])/, $1/;
+  $location =~ s/ ,/,/;
+  $location =~ s/ $//;
+  $location =~ s/^ //;
+  $location =~ s/Mc /Mc/;
+
+  # Fix country names to match the versions in Locations.xml.in
+  $country =~ s/Macedonia, The Republic of/Macedonia/;
+  $country =~ s/Vietnam/Viet Nam/;
+  $country =~ s/Korea, South/South Korea/;
+  $country =~ s/Korea, North/North Korea/;
+  $country =~ s/Bahamas, The/Bahamas/;
+
+  # Fix some country divisions to match ISO codes
+  if ($code eq "EFMA") { $country = "Åland Islands"; }
+  if ($code eq "EGJA") { $country = "Guernsey"; }
+  if ($code eq "EGJB") { $country = "Guernsey"; }
+  if ($code eq "EGJJ") { $country = "Jersey"; }
+  if ($code eq "EGNS") { $country = "Isle of Man"; }
+  if ($code eq "EKVG") { $country = "Faroe Islands"; }
+  if ($code eq "ENSB") { $country = "Svalbard"; }
+  if ($code eq "FMCZ") { $country = "Mayotte"; }
+  if ($code eq "NIUE") { $country = "Niue"; }
+  if ($code eq "NLWW") { $country = "Wallis and Futuna"; }
+  if ($code eq "PLCH") { $country = "Kiribati"; }
+  if ($code eq "YPCC") { $country = "Cocos (Keeling) Islands"; }
+  if ($code eq "YSNF") { $country = "Norfolk Island"; }
+  if ($country eq "Virgin Islands") { $country = ""; }
+
+  # Fix some country divisions to correct bugs
+  if ($code eq "HHAS") { $country = "Eritrea"; }
+  if ($code eq "PMDY") { $state = ""; }
+  if ($code eq "PWAK") { $state = ""; }
+  if ($country eq "Serbia and Montenegro") { $country = ""; }
+
+  # Some of the Canadian and Mexican locations have their
+  # province/territory/state specified as part of the location name.
+  # Remove them
+  $location =~ s/,? (Alta|B\. C|Man|N\. B|Nfld|N\. S|N\. W\. T|Ont|P\. E\. I|Prince Edward Island|Que|Sask|Y\. T)\.?$//;
+  $location =~ s/,? (Ags|B\. C\. S|Camp|Chis|Coah|Mor|Nay|Pue|Q\. Roo|Qro|S\. L\. P|Sin|Son)\.?$//;
+  # Also this
+  $location =~ s/ Nlle-Caledonie//;
+
+  # Untranslate/unabbreviate the word "Airport". (The names in
+  # nsd_cccc.txt don't seem to be especially close to
+  # correct/official, so this is a net win.)
+  $location =~ s/Aero-Porto/Airport/;
+  $location =~ s/Aerodrome/Airport/;
+  $location =~ s/[- ]Aero\.?\b/ Airport/;
+  $location =~ s/[- ]Aerop[ou.]\w*/ Airport/;
+  $location =~ s/Air-Port/Airport/;
+  $location =~ s/Airp\./Airport/;
+  $location =~ s/Airport-/Airport - /;
+  $location =~ s/Civ\b/Airport/; # "Civ / Mil" -> "Airport / Military Base"
+  $location =~ s/[- ]Flughafen/ Airport/;
+  $location =~ s/Flugplatz/Airport/;
+  $location =~ s/Lugplatz/Airport/; # LOAV has this as a typo
+  $location =~ s/Flygplats/Airport/;
+  $location =~ s/Lufthavn/Airport/;
+
+  # Likewise "International"
+  $location =~ s/\bint'?l?\b\.?/International/i;
+  $location =~ s/Inter-National/International/;
+
+  # Military bases
+  $location =~ s/\bAFB\b/Air Force Base/;
+  $location =~ s/Usa . Af/US Air Force Base/;
+  $location =~ s/Usaf/US Air Force Base/;
+  $location =~ s/\bAb\b/Air Base/;
+  $location =~ s/\w+-Afb/Air Force Base/i;
+  $location =~ s/Air Force Operated Base In Foreign Country/Air Force Base/;
+
+  $location =~ s/Can-Mil/Military Base/;
+  $location =~ s/Mil\.?\b/Miltary Base/;
+
+  $location =~ s/Nexrad/NEXRAD/;
+
+  # These don't seem to add anything useful...
+  $location =~ s/ Aws//; # Australian Weather Service?
+  $location =~ s/ Cda//i; # Canadian Dept. of Agriculture
+  $location =~ s/ Iii*//; # (roman numerals, badly capitalized)
+  $location =~ s/ R?CS//; # (Canadian) [Remote] Climate Station
+
+  $latitude = dms_to_dec($latitude);
+  $longitude = dms_to_dec($longitude);
+
+  $country_code = $countries{$country};
+  if (!$country_code) {
+    $alt_country = s/^(.*), (.*)$/$2 $1/;
+    $country_code = $countries{$alt_country};
+  }
+  if (!$country_code) {
+    if ($country) { print "No country for '$country'\n"; }
+    $country_code = '';
+  }
+  if ($state) {
+    $state_code = $states{$state};
+    if (!$state_code) {
+      print "No state for '$state'\n";
+      next;
+    }
+  } else {
+    $state_code = "";
+  }
+
+  print $stations "$code;$location;$state_code;$country_code;$latitude;$longitude;$elevation\n";
+}
+close WEATHERSRC;
+close $stations;
+
+open SQLITE, "|sqlite3 $locationdb";
+print SQLITE "CREATE TABLE stations (code TEXT, name TEXT, state TEXT, country TEXT, latitude REAL, longitude REAL, elevation REAL);\n";
+print SQLITE ".separator ';'\n";
+print SQLITE ".import $stations_filename stations\n";
+print SQLITE "CREATE INDEX station_long_lat ON stations (longitude, latitude);\n";
+close SQLITE;
+
+# unlink $stations_filename;
Index: data/update-locations.py
===================================================================
--- data/update-locations.py	(revision 0)
+++ data/update-locations.py	(revision 0)
@@ -0,0 +1,568 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import codecs
+import datetime
+import locale
+import math
+import os
+import re
+import sqlite3
+import sys
+import time
+from ftplib import FTP
+from xml.dom import minidom
+from xml.sax import saxutils
+
+# Magic incantation to tell python to let us output UTF-8
+sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
+
+# The database...
+db = sqlite3.connect('locationdb.sqlite')
+fips_codes = {}
+
+# xml helpers
+def getChildContentByName(node, name):
+    node = node.firstChild
+    while node is not None:
+        if node.nodeName == name:
+            return node.firstChild.nodeValue
+        node = node.nextSibling
+    return None
+
+def getChildrenByName(node, name):
+    children = []
+    node = node.firstChild
+    while node is not None:
+        if hasattr(node, 'tagName') and node.tagName == name:
+            children.append(node)
+        node = node.nextSibling
+    return children
+
+def getNodeChildren(node):
+    children = []
+    node = node.firstChild
+    while node is not None:
+        if hasattr(node, 'tagName'):
+            children.append(node)
+        node = node.nextSibling
+    return children
+
+# other helpers
+def getFipsCodes(node, container):
+    # values is a list of string values of <fips-code> elements
+    values = [node.firstChild.nodeValue for node in getChildrenByName(node, 'fips-code')]
+    # code_lists is a list of lists of individual codes
+    code_lists = [value.split("|") for value in values]
+    for code in reduce(list.__add__, code_lists):
+        fips_codes[code] = container
+
+    return values
+
+def decimal_degrees_to_dms(lat, long):
+    if lat < 0:
+        lat = -lat
+        dir = "S"
+    else:
+        dir = "N"
+    lat_deg = int(lat)
+    lat_min = int((lat - lat_deg) * 60)
+    lat_sec = int((((lat - lat_deg) * 60) - lat_min) * 60)
+    ret = "%02d-%02d" % (lat_deg, lat_min)
+    if lat_sec != 0:
+        ret += "-%02d" % lat_sec
+    ret += dir
+
+    if long < 0:
+        long = -long
+        dir = "W"
+    else:
+        dir = "E"
+    long_deg = int(long)
+    long_min = int((long - long_deg) * 60)
+    long_sec = int((((long - long_deg) * 60) - long_min) * 60)
+    ret += " %03d-%02d" % (long_deg, long_min)
+    if long_sec != 0:
+        ret += "-%02d" % long_sec
+    ret += dir
+    return ret
+
+# classes
+class Region:
+    def __init__(self, name_or_node):
+        if isinstance(name_or_node, minidom.Element):
+            self.name = getChildContentByName(name_or_node, '_name')
+        else:
+            self.name = name
+        self.contents = []
+
+    def __cmp__(self, other):
+        return cmp(self.name, other.name)
+
+    def print_xml(self, indent):
+        print '%s<region>' % indent
+        print '%s  <_name>%s</_name>' % (indent, saxutils.escape(self.name))
+        for item in self.contents:
+            item.print_xml(indent + '  ')
+        print '%s</region>' % indent
+
+class Country:
+    def __init__(self, *args):
+        if isinstance(args[0], minidom.Element):
+            name = getChildContentByName(args[0], '_name')
+            iso_code = getChildContentByName(args[0], 'iso-code')
+            tz_hint = getChildContentByName(args[0], 'tz-hint')
+            fips_codes = getFipsCodes(args[0], self)
+        else:
+            (name, iso_code, tz_hint) = args
+            fips_codes = None
+        self.name = name
+        self.iso_code = iso_code
+        self.tz_hint = tz_hint
+        self.fips_codes = fips_codes
+        self.contents = []
+
+    def __cmp__(self, other):
+        return cmp(self.name, other.name)
+
+    def print_xml(self, indent):
+        if len(self.contents) == 0:
+            return
+        
+        print '%s<country>' % indent
+        print '%s  <_name>%s</_name>' % (indent, saxutils.escape(self.name))
+        if self.iso_code is not None:
+            print '%s  <iso-code>%s</iso-code>' % (indent, self.iso_code)
+        if self.fips_codes is not None:
+            for value in self.fips_codes:
+                print '%s  <fips-code>%s</fips-code>' % (indent, value)
+        if self.tz_hint is not None:
+            print '%s  <tz-hint>%s</tz-hint>' % (indent, self.tz_hint)
+        for item in self.contents:
+            item.print_xml(indent + '  ')
+        print '%s</country>' % indent
+
+class State:
+    def __init__(self, *args):
+        if isinstance(args[0], minidom.Element):
+            name = getChildContentByName(args[0], '_name')
+            tz_hint = getChildContentByName(args[0], 'tz-hint')
+            fips_codes = getFipsCodes(args[0], self)
+        else:
+            (name, tz_hint) = args
+            fips_codes = None
+        self.name = name
+        self.tz_hint = tz_hint
+        self.fips_codes = fips_codes
+        self.contents = []
+
+    def __cmp__(self, other):
+        return cmp(self.name, other.name)
+
+    def print_xml(self, indent):
+        print '%s<state>' % indent
+        print '%s  <_name>%s</_name>' % (indent, saxutils.escape(self.name))
+        if self.fips_codes is not None:
+            for value in self.fips_codes:
+                print '%s  <fips-code>%s</fips-code>' % (indent, value)
+        if self.tz_hint is not None:
+            print '%s  <tz-hint>%s</tz-hint>' % (indent, self.tz_hint)
+        for item in self.contents:
+            item.print_xml(indent + '  ')
+        print '%s</state>' % indent
+
+class City:
+    def __init__(self, *args):
+        if isinstance(args[0], minidom.Element):
+            name = getChildContentByName(args[0], '_name')
+            zone = getChildContentByName(args[0], 'zone')
+            radar = getChildContentByName(args[0], 'radar')
+        elif isinstance(args[0], tuple):
+            (self.id, self.latitude, self.longitude, self.elevation, importance, self.country_code, self.state_code, self.county_code, name_type, language, short_name, long_name, flat_name) = args[0]
+            self.coordinates = decimal_degrees_to_dms(self.latitude, self.longitude)
+            if short_name == "":
+                name = long_name
+            else:
+                name = short_name
+            zone = None
+            radar = None
+        else:
+            (name, zone, radar) = args
+        self.name = name
+        self.zone = zone
+        self.radar = radar
+        self.contents = []
+        self.parent = None
+        self.has_conventional_name = False
+        self.localnames = {}
+
+    def __cmp__(self, other):
+        return cmp(self.name, other.name)
+
+    def print_xml(self, indent):
+        self.contents.sort(lambda l1, l2: cmp(distance(self.latitude, self.longitude, l1.latitude, l1.longitude),
+                                         distance(self.latitude, self.longitude, l2.latitude, l2.longitude)))
+
+        print '%s<city>' % indent
+        if len(self.localnames):
+            if self.has_conventional_name:
+                print '%s  <!-- "%s" is the traditional English name.' % (indent, self.name)
+            else:
+                print '%s  <!-- This city is also known by other names.' % indent
+            for lang in self.localnames:
+                if lang == "":
+                    print '%s       The local name is "%s".' % (indent, self.localnames[lang])
+                else:
+                    print '%s       The local name in "%s" is "%s".' % (indent, lang, self.localnames[lang])
+            print '%s    -->' % indent
+        print '%s  <_name>%s</_name>' % (indent, saxutils.escape(self.name))
+        print '%s  <coordinates>%s</coordinates>' % (indent, self.coordinates)
+        for item in self.contents:
+            item.print_xml(indent + '  ', len(self.contents) > 1)
+        print '%s</city>' % indent
+
+class Location:
+    def __init__(self, *args):
+        if isinstance(args[0], minidom.Element):
+            code = getChildContentByName(args[0], 'code')
+            name = getChildContentByName(args[0], '_name')
+            tz_hint = getChildContentByName(args[0], 'tz-hint')
+            coordinates = getChildContentByName(args[0], 'coordinates')
+            zone = getChildContentByName(args[0], 'zone')
+            radar = getChildContentByName(args[0], 'radar')
+        elif isinstance(args[0], tuple):
+            # sql result
+            (code, name, self.state_code, self.country_code, self.latitude, self.longitude, elevation) = args[0]
+            coordinates = decimal_degrees_to_dms(self.latitude, self.longitude)
+            tz_hint = None
+            zone = None
+            radar = None
+        else:
+            (code, name, coordinates, tz_hint, zone, radar) = args
+        self.code = code
+        self.name = name
+        self.coordinates = coordinates
+        self.tz_hint = tz_hint
+        self.zone = zone
+        self.radar = radar
+
+    def __cmp__(self, other):
+        return cmp(self.name, other.name)
+
+    def print_xml(self, indent, localize=True):
+        print '%s<location>' % indent
+        if localize:
+            print '%s  <_name>%s</_name>' % (indent, saxutils.escape(self.name))
+        else:
+            print '%s  <name>%s</name>' % (indent, saxutils.escape(self.name))
+        if self.tz_hint is not None:
+            print '%s  <tz-hint>%s</tz-hint>' % (indent, self.tz_hint)
+        print '%s  <code>%s</code>' % (indent, self.code)
+        if self.zone is not None:
+            print '%s  <zone>%s</zone>' % (indent, self.zone)
+        if self.radar is not None:
+            print '%s  <radar>%s</radar>' % (indent, self.radar)
+        print '%s  <coordinates>%s</coordinates>' % (indent, self.coordinates)
+        print '%s</location>' % indent
+
+# Read the existing regions/countries/states
+old = minidom.parse('Locations.xml.in')
+
+regions = []
+for xreg in old.getElementsByTagName('region'):
+    reg = Region(xreg)
+    regions.append(reg)
+
+    for xcountry in getChildrenByName(xreg, 'country'):
+        country = Country(xcountry)
+        reg.contents.append(country)
+
+        for xstate in getChildrenByName(xcountry, 'state'):
+            state = State(xstate)
+            country.contents.append(state)
+
+regions.sort()
+
+# location-finding helpers
+def distance(lat1, long1, lat2, long2):
+    long1 = float(long1) * math.pi / 180.0
+    lat1  = float(lat1) * math.pi / 180.0
+    long2 = float(long2) * math.pi / 180.0
+    lat2  = float(lat2) * math.pi / 180.0
+    tmp = math.cos(lat1) * math.cos(lat2) * math.cos(long1 - long2) + math.sin(lat1) * math.sin(lat2)
+    # rounding errors can cause us to get a result out of range...
+    if tmp >= 1.0:
+        return 0.0
+    return math.acos(tmp) * 6372.795
+
+cc = db.cursor()
+cities = {}
+def get_city(id):
+    if id in cities:
+        return cities[id]
+
+    city = None
+
+    cc.execute("SELECT * FROM cities WHERE id=?", (id,))
+    matches = cc.fetchall()
+
+    for match in matches:
+        (name_type, language, short_name, long_name) = match[8:12]
+
+        # name type: "N" = standard, "NS" = standard in non-Latin
+        # script, "C" = conventional (ie, traditional English)
+        if name_type == 'C' and ( language == 'eng' or language == ''):
+            city = City(match)
+            city.has_conventional_name = True
+            break
+        elif city is None and name_type == 'N':
+            city = City(match)
+
+    # Shouldn't happen...
+    if city is None:
+        city = City(matches[0])
+
+    # Note local names
+    for match in matches:
+        (name_type, language, short_name, long_name) = match[8:12]
+
+        name = short_name or long_name
+        if (name_type == 'N' or name_type == 'NS') and \
+           language != 'eng' and name != city.name:
+            if language in city.localnames:
+                if name_type == 'N':
+                    city.localnames[language] = "%s / %s" % (name, city.localnames[language])
+                else:
+                    city.localnames[language] = "%s / %s" % (city.localnames[language], name)
+            else:
+                city.localnames[language] = name
+
+    cities[id] = city
+    return city
+
+def add_city(city, station):
+    for st in city.contents:
+        if st.code == station.code:
+            return
+    city.contents.append(station)
+    if city.parent is not None:
+        return
+
+    if city.state_code != "" and city.state_code in fips_codes:
+        city.parent = fips_codes[city.state_code]
+    elif city.country_code != "" and city.country_code in fips_codes:
+        city.parent = fips_codes[city.country_code]
+    else:
+        print "Could not find container for city %s in %s" % (city.name, city.country_code);
+        return
+    city.parent.contents.append(city)
+
+def find_city(c, city_name, station, try_nearby):
+    locs = []
+    while len(locs) == 0 and len(city_name) > 0:
+        flat_name = re.sub(r"[^a-zA-Z]", r"", city_name.upper())
+        if station.country_code == "":
+            c.execute("SELECT * FROM cities WHERE short_name=? OR long_name=? OR flat_name=?", (city_name, city_name, flat_name))
+        elif station.state_code == "":
+            c.execute("SELECT * FROM cities WHERE country_code=? AND ( short_name=? OR long_name=? OR flat_name=? )", (station.country_code, city_name, city_name, flat_name))
+        else:
+            c.execute("SELECT * FROM cities WHERE country_code=? AND state_code=? AND ( short_name=? OR long_name=? OR flat_name=? )", (station.country_code, station.state_code, city_name, city_name, flat_name))
+        locs = c.fetchall()
+
+        # Strip out cities that are too far away; they're probably false matches
+        ok_locs = []
+        for loc in locs:
+            dist = distance(station.latitude, station.longitude, loc[1], loc[2])
+            if dist < 50.0:
+                ok_locs.append(loc)
+        locs = ok_locs
+
+        if len(locs) == 0:
+            city_name = re.sub(r" ?[^ ]*$", "", city_name)
+
+    if len(locs) == 0 and try_nearby:
+        if station.country_code != "":
+            c.execute("SELECT * FROM cities WHERE country_code=? AND importance != -1 AND latitude BETWEEN ? AND ? AND longitude BETWEEN ? AND ?", (station.country_code, station.latitude - 1.0, station.latitude + 1.0, station.longitude - 1.0, station.longitude + 1.0))
+        else:
+            c.execute("SELECT * FROM cities WHERE importance != -1 AND latitude BETWEEN ? AND ? AND longitude BETWEEN ? AND ?", (station.latitude - 1.0, statition.latitude + 1.0, station.longitude - 1.0, station.longitude + 1.0))
+        locs = c.fetchall()
+
+    if len(locs) == 0:
+        return None
+
+    # FIXME: we should factor elevation into this decision as well; we
+    # don't want to use a weather station at sea level for a city in
+    # the mountains, or vice versa.
+    best_dist = 0.0
+    best_loc = None
+    for loc in locs:
+        dist = distance(station.latitude, station.longitude, loc[1], loc[2])
+        if dist > 50.0:
+            continue
+        if loc[5] > 0: # pretend important cities are closer
+            dist = dist / 5.0
+        if best_loc == None or dist < best_dist:
+            best_loc = loc
+            best_dist = dist
+
+    if best_loc is None:
+        return None
+    if best_loc[5] > 1:
+        best_dist = best_dist * 5.0 # stop pretending now
+
+    city = get_city(best_loc[0])
+    add_city(city, station)
+
+    return city
+
+# Create the regular expression for matching recent observations.
+# The listing looks like:
+#   -rw-r--r--    1 3110     0              63 May 20 17:05 ZYTX.TXT
+# We use ctime rather than strftime to avoid the month being localized
+#
+# FIXME? Some stations report regularly, but less frequently than
+# daily. But users don't want to see last week's weather. What should
+# the cutoff be?
+
+today = datetime.date.today()
+stamp1 = today.ctime()[4:10].replace('  ', ' 0')
+yesterday = today - datetime.timedelta(1)
+stamp2 = yesterday.ctime()[4:10].replace('  ', ' 0')
+rex = re.compile("(%s|%s) \\d\\d:\\d\\d (....)\\.TXT$" % (stamp1, stamp2))
+
+cache = None
+recent = []
+
+def check_observation(line):
+    if cache is not None:
+        cache.write(line)
+        cache.write("\n")
+
+    match = rex.search(line)
+    if match is None:
+        return
+
+    recent.append(match.group(2))
+
+try:
+    stat = os.stat('observations.cache')
+except:
+    stat = None
+
+if stat is not None and stat.st_mtime > (time.time() - 60 * 60 * 6):
+    cache_in = open('observations.cache')
+    for line in cache_in:
+        check_observation(line)
+    cache_in.close
+else:
+    ftp = FTP('tgftp.nws.noaa.gov')
+    ftp.login()
+    ftp.cwd('/data/observations/metar/stations')
+    cache = open('observations.cache', 'w')
+    ftp.retrlines('LIST', check_observation)
+    cache.close()
+    ftp.quit()
+
+stations = {}
+
+c = db.cursor()
+
+# Now read in the stations, filter out the losers, and clean up the rest
+sc = db.cursor()
+sc.execute("SELECT * FROM stations");
+while True:
+    loc = sc.fetchone()
+    if loc is None:
+        break
+    station = Location(loc)
+
+    if station.code not in recent:
+        continue
+
+    # Hyphens are used inconsistently; sometimes "Foo Bar-Baz Quux" is
+    # one name with three words, other times it's two names with two
+    # words each. Changing hyphens to slashes in ambiguous cases lets
+    # the /-splitting code below handle the two-names case, and the
+    # one-name case still gets handled via flat_name
+    location = re.sub(r"^([^,/]*) *- *([^,/]*)$", r"\1 / \2", station.name)
+    city_name = location
+
+    # Convert "Foo, Bar Airport" to city_name="Foo"; location="Bar Airport"
+    match = re.match(r"^([^,]*), (.*)$", location)
+    if match is not None:
+	city_name = match.group(1)
+	location = match.group(2)
+
+    # Likewise "Foo / Bar Airport" (but only if it actually uses the word)
+    match = re.match(r"^(.*) / (.* Airport)$", location)
+    if match is not None:
+	city_name = match.group(1)
+	location = match.group(2)
+
+    # And some others
+    match = re.match(r"^(.*) (Automatic Weather Reporting System|(Supplementary )?Aviation Weather Reporting Station|( /)?Weather (Centre|Station)|Meteorological Aeronautical Presentation System)$", location);
+    if match is not None:
+	city_name = match.group(1)
+
+    # Find a match
+    if city_name.find("/") != -1:
+        matched_any = False
+        for part in re.split(" */ *", city_name):
+            city = find_city(c, part, station, False)
+            if city is not None:
+                matched_any = True
+                stations[city.id] = station.code
+
+        if matched_any:
+            continue
+
+    city = find_city(c, city_name, station, True)
+    if city is None:
+        # print "No match for station %s (%s, in %s)" % (station.code, station.name, station.country_code)
+        continue
+
+    stations[city.id] = station.code
+
+# Now do missing major cities
+c.execute("SELECT id FROM cities WHERE importance == 1");
+while True:
+    loc = c.fetchone()
+    if loc is None:
+        break
+
+    id = loc[0]
+    if id in stations:
+        continue
+    city = get_city(id)
+
+    sc.execute("SELECT * FROM stations WHERE latitude BETWEEN ? AND ? AND longitude BETWEEN ? AND ?", (city.latitude - 1.0, city.latitude + 1.0, city.longitude - 1.0, city.longitude + 1.0))
+    best_dist = 0.0
+    best_station = None
+    for station in sc.fetchall():
+        if station[0] not in recent:
+            continue
+        dist = distance(city.latitude, city.longitude, station[4], station[5])
+        if dist > 50.0:
+            continue
+        if best_station is None or dist < best_dist:
+            best_station = station
+            best_dist = dist
+
+    if best_station is None:
+        # print "No station for %s, %s" % (city.name, city.country_code)
+        stations[id] = None
+        continue
+
+    stations[id] = best_station[0]
+    add_city(city, Location(best_station))
+
+for code in fips_codes:
+    fips_codes[code].contents.sort()
+
+print '<?xml version="1.0" encoding="utf-8"?>'
+print '<!DOCTYPE gweather SYSTEM "locations.dtd">'
+print '<gweather format="1.0">'
+for region in regions:
+    region.contents.sort()
+    region.print_xml('  ')
+print '</gweather>'
Index: data/locations.dtd
===================================================================
--- data/locations.dtd	(revision 229)
+++ data/locations.dtd	(working copy)
@@ -5,16 +5,17 @@
 <!ENTITY % name '(_name|name+)' >
 
 <!ELEMENT region (%name;, country+) >
-<!ELEMENT country (%name;, iso-code, tz-hint?, (location|state|city)+) >
-<!ELEMENT state (%name;, tz-hint?, (location|city)+) >
-<!ELEMENT city (%name;, zone?, radar?, location+) >
-<!ELEMENT location (%name;, iso-code?, tz-hint?, code, zone?, radar?, coordinates?) >
+<!ELEMENT country (%name;, iso-code, fips-code+, tz-hint?, (location|state|city)+) >
+<!ELEMENT state (%name;, fips-code+, tz-hint?, (location|city)+) >
+<!ELEMENT city (%name;, coordinates?, zone?, radar?, location+) >
+<!ELEMENT location (%name;, tz-hint?, code, zone?, radar?, coordinates?) >
 
 <!ELEMENT _name (#PCDATA) >
 <!ELEMENT name (#PCDATA) >
 <!ATTLIST name
   xml:lang CDATA #IMPLIED >
 <!ELEMENT iso-code (#PCDATA) >
+<!ELEMENT fips-code (#PCDATA) >
 <!ELEMENT tz-hint (#PCDATA) >
 <!ELEMENT code (#PCDATA) >
 <!ELEMENT zone (#PCDATA) >
Index: data/Locations.xml.in
===================================================================
--- data/Locations.xml.in	(revision 229)
+++ data/Locations.xml.in	(working copy)
@@ -10,6 +10,7 @@
   <country>
     <_name>United Arab Emirates</_name>
     <iso-code>AE</iso-code>
+    <fips-code>AE</fips-code>
     <tz-hint>Asia/Dubai</tz-hint>
     <location>
       <!-- Translators: This is in United Arab Emirates. -->
@@ -51,6 +52,7 @@
   <country>
     <_name>Qatar</_name>
     <iso-code>QA</iso-code>
+    <fips-code>QA</fips-code>
     <tz-hint>Asia/Qatar</tz-hint>
     <location>
       <!-- Translators: This is in Qatar. -->
@@ -68,6 +70,7 @@
   <country>
     <_name>Oman</_name>
     <iso-code>OM</iso-code>
+    <fips-code>MU</fips-code>
     <tz-hint>Asia/Muscat</tz-hint>
     <location>
       <!-- Translators: This is in Oman. -->
@@ -85,6 +88,7 @@
   <country>
     <_name>Yemen</_name>
     <iso-code>YE</iso-code>
+    <fips-code>YM</fips-code>
     <tz-hint>Asia/Aden</tz-hint>
     <location>
       <!-- Translators: This is in Yemen. -->
@@ -144,6 +148,7 @@
   <country>
     <_name>Saudi Arabia</_name>
     <iso-code>SA</iso-code>
+    <fips-code>SA</fips-code>
     <tz-hint>Asia/Riyadh</tz-hint>
     <location>
       <!-- Translators: This is in Saudi Arabia. -->
@@ -323,6 +328,7 @@
   <country>
     <_name>Bahrain</_name>
     <iso-code>BH</iso-code>
+    <fips-code>BA</fips-code>
     <tz-hint>Asia/Bahrain</tz-hint>
     <location>
       <_name>Bahrain</_name>
@@ -333,6 +339,7 @@
   <country>
     <_name>Lebanon</_name>
     <iso-code>LB</iso-code>
+    <fips-code>LE</fips-code>
     <tz-hint>Asia/Beirut</tz-hint>
     <location>
       <!-- Translators: This is in Lebanon. -->
@@ -344,6 +351,7 @@
   <country>
     <_name>Israel</_name>
     <iso-code>IL</iso-code>
+    <fips-code>IS</fips-code>
     <tz-hint>Asia/Jerusalem</tz-hint>
     <location>
       <!-- Translators: This is in Israel. -->
@@ -377,9 +385,10 @@
     </location>
   </country>
   <country>
-    <!-- FIXME: rename this to Iran -->
-    <_name>Iran, Islamic Republic of</_name>
+    <!-- The official ISO 3166 short English name is "Islamic Republic of Iran" -->
+    <_name>Iran</_name>
     <iso-code>IR</iso-code>
+    <fips-code>IR</fips-code>
     <tz-hint>Asia/Tehran</tz-hint>
     <location>
       <!-- Translators: This is in Iran. -->
@@ -523,6 +532,7 @@
   <country>
     <_name>Jordan</_name>
     <iso-code>JO</iso-code>
+    <fips-code>JO</fips-code>
     <tz-hint>Asia/Amman</tz-hint>
     <location>
       <!-- Translators: This is in Jordan. -->
@@ -546,6 +556,7 @@
   <country>
     <_name>Kuwait</_name>
     <iso-code>KW</iso-code>
+    <fips-code>KU</fips-code>
     <tz-hint>Asia/Kuwait</tz-hint>
     <location>
       <_name>Kuwait</_name>
@@ -554,8 +565,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is "Syrian Arab Republic" -->
     <_name>Syria</_name>
     <iso-code>SY</iso-code>
+    <fips-code>SY</fips-code>
     <tz-hint>Asia/Damascus</tz-hint>
     <location>
       <!-- Translators: This is in Syria. -->
@@ -594,9 +607,11 @@
   <country>
     <_name>Mexico</_name>
     <iso-code>MX</iso-code>
+    <fips-code>MX</fips-code>
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Aguascalientes</_name>
+      <fips-code>MX01</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
 	<!-- Translators: This is in Mexico. -->
@@ -608,6 +623,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Baja California</_name>
+      <fips-code>MX02</fips-code>
       <tz-hint>America/Tijuana</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -625,6 +641,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Baja California Sur</_name>
+      <fips-code>MX03</fips-code>
       <tz-hint>America/Mazatlan</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -648,6 +665,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Campeche</_name>
+      <fips-code>MX04</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
 	<!-- Translators: This is in Mexico. -->
@@ -665,6 +683,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Chiapas</_name>
+      <fips-code>MX05</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -682,6 +701,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Chihuahua</_name>
+      <fips-code>MX06</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -699,6 +719,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Coahuila</_name>
+      <fips-code>MX07</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -728,6 +749,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Colima</_name>
+      <fips-code>MX08</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -745,6 +767,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Distrito Federal</_name>
+      <fips-code>MX09</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -756,6 +779,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Durango</_name>
+      <fips-code>MX10</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -767,6 +791,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Guanajuato</_name>
+      <fips-code>MX11</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -790,6 +815,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Guerrero</_name>
+      <fips-code>MX12</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
 	<!-- Translators: This is in Mexico. -->
@@ -813,6 +839,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Hidalgo</_name>
+      <fips-code>MX13</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -824,6 +851,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Jalisco</_name>
+      <fips-code>MX14</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -841,6 +869,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>México</_name>
+      <fips-code>MX15</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -852,6 +881,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Michoacán</_name>
+      <fips-code>MX16</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -869,6 +899,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Morelos</_name>
+      <fips-code>MX17</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -880,6 +911,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Nayarit</_name>
+      <fips-code>MX18</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -891,6 +923,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Nuevo León</_name>
+      <fips-code>MX19</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <city>
         <!-- Translators: This is in Mexico. -->
@@ -912,6 +945,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Oaxaca</_name>
+      <fips-code>MX18</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -941,6 +975,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Puebla</_name>
+      <fips-code>MX21</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -952,6 +987,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Querétaro</_name>
+      <fips-code>MX22</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -963,6 +999,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Quintana Roo</_name>
+      <fips-code>MX23</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
 	<!-- Translators: This is in Mexico. -->
@@ -992,6 +1029,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>San Luis Potosí</_name>
+      <fips-code>MX24</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -1003,6 +1041,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Sinaloa</_name>
+      <fips-code>MX25</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -1026,6 +1065,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Sonora</_name>
+      <fips-code>MX26</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -1049,6 +1089,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Tabasco</_name>
+      <fips-code>MX27</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -1060,6 +1101,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Tamaulipas</_name>
+      <fips-code>MX28</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -1095,6 +1137,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Tlaxcala</_name>
+      <fips-code>MX29</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -1106,6 +1149,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Veracruz</_name>
+      <fips-code>MX30</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -1135,6 +1179,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Yucatán</_name>
+      <fips-code>MX31</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -1146,6 +1191,7 @@
     <state>
       <!-- Translators: This is in Mexico -->
       <_name>Zacatecas</_name>
+      <fips-code>MX32</fips-code>
       <tz-hint>America/Mexico_City</tz-hint>
       <location>
         <!-- Translators: This is in Mexico. -->
@@ -1158,9 +1204,11 @@
   <country>
     <_name>United States</_name>
     <iso-code>US</iso-code>
+    <fips-code>US</fips-code>
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Alabama</_name>
+      <fips-code>US01</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Alabama in the United States. -->
@@ -1342,6 +1390,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Alaska</_name>
+      <fips-code>US02</fips-code>
       <tz-hint>America/Anchorage</tz-hint>
       <location>
         <!-- Translators: This is in Alaska in the United States. -->
@@ -2419,6 +2468,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Arizona</_name>
+      <fips-code>US04</fips-code>
       <tz-hint>America/Phoenix</tz-hint>
       <city>
         <!-- Translators: This is in Arizona in the United States. -->
@@ -2666,6 +2716,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Arkansas</_name>
+      <fips-code>US05</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <city>
        <!-- Translators: This is in Arkansas in the United States. -->
@@ -2954,6 +3005,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>California</_name>
+      <fips-code>US06</fips-code>
       <tz-hint>America/Los_Angeles</tz-hint>
       <location>
         <!-- Translators: This is in California in the United States. -->
@@ -3861,6 +3913,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Colorado</_name>
+      <fips-code>US08</fips-code>
       <tz-hint>America/Denver</tz-hint>
       <location>
         <!-- Translators: This is in Colorado in the United States. -->
@@ -4184,6 +4237,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Connecticut</_name>
+      <fips-code>US09</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Connecticut in the United States. -->
@@ -4257,6 +4311,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Delaware</_name>
+      <fips-code>US10</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Delaware in the United States. -->
@@ -4284,6 +4339,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>District of Columbia</_name>
+      <fips-code>US11</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in District of Columbia in the United States. -->
@@ -4308,6 +4364,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Florida</_name>
+      <fips-code>US12</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Florida in the United States. -->
@@ -4874,6 +4931,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Georgia</_name>
+      <fips-code>US13</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Georgia in the United States. -->
@@ -5220,6 +5278,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Hawaii</_name>
+      <fips-code>US15</fips-code>
       <tz-hint>Pacific/Honolulu</tz-hint>
       <location>
         <!-- Translators: This is in Hawaii in the United States. -->
@@ -5339,12 +5398,6 @@
       </location>
       <location>
         <!-- Translators: This is in Hawaii in the United States. -->
-        <_name>Sand Island</_name>
-        <code>PMDY</code>
-        <coordinates>28-13N 177-22W</coordinates>
-      </location>
-      <location>
-        <!-- Translators: This is in Hawaii in the United States. -->
         <_name>Wheeler</_name>
         <code>PHHI</code>
         <coordinates>21-29N 158-02W</coordinates>
@@ -5353,6 +5406,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Idaho</_name>
+      <fips-code>US16</fips-code>
       <tz-hint>America/Denver</tz-hint>
       <location>
         <!-- Translators: This is in Idaho in the United States. -->
@@ -5514,6 +5568,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Illinois</_name>
+      <fips-code>US17</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Illinois in the United States. -->
@@ -5932,6 +5987,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Indiana</_name>
+      <fips-code>US18</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Indiana in the United States. -->
@@ -6092,6 +6148,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Iowa</_name>
+      <fips-code>US19</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Iowa in the United States. -->
@@ -6501,6 +6558,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Kansas</_name>
+      <fips-code>US20</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Kansas in the United States. -->
@@ -6724,6 +6782,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Kentucky</_name>
+      <fips-code>US21</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Kentucky in the United States. -->
@@ -6852,6 +6911,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Louisiana</_name>
+      <fips-code>US22</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Louisiana in the United States. -->
@@ -7126,6 +7186,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Maine</_name>
+      <fips-code>US23</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Maine in the United States. -->
@@ -7298,6 +7359,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Maryland</_name>
+      <fips-code>US24</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Maryland in the United States. -->
@@ -7417,6 +7479,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Massachusetts</_name>
+      <fips-code>US25</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Massachusetts in the United States. -->
@@ -7621,6 +7684,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Michigan</_name>
+      <fips-code>US26</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Michigan in the United States. -->
@@ -8113,6 +8177,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Minnesota</_name>
+      <fips-code>US27</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Minnesota in the United States. -->
@@ -8731,6 +8796,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Mississippi</_name>
+      <fips-code>US28</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <city>
        <!-- Translators: This is in Mississippi in the United States. -->
@@ -8892,6 +8958,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Missouri</_name>
+      <fips-code>US29</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Missouri in the United States. -->
@@ -9072,6 +9139,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Montana</_name>
+      <fips-code>US30</fips-code>
       <tz-hint>America/Denver</tz-hint>
       <location>
         <!-- Translators: This is in Montana in the United States. -->
@@ -9248,6 +9316,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Nebraska</_name>
+      <fips-code>US31</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Nebraska in the United States. -->
@@ -9543,6 +9612,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Nevada</_name>
+      <fips-code>US32</fips-code>
       <tz-hint>America/Los_Angeles</tz-hint>
       <location>
         <!-- Translators: This is in Nevada in the United States. -->
@@ -9701,6 +9771,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>New Hampshire</_name>
+      <fips-code>US33</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in New Hampshire in the United States. -->
@@ -9819,6 +9890,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>New Jersey</_name>
+      <fips-code>US34</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in New Jersey in the United States. -->
@@ -9941,6 +10013,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>New Mexico</_name>
+      <fips-code>US35</fips-code>
       <tz-hint>America/Denver</tz-hint>
       <location>
         <!-- Translators: This is in New Mexico in the United States. -->
@@ -10199,6 +10272,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>New York</_name>
+      <fips-code>US36</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <city>
        <!-- Translators: This is in New York in the United States. -->
@@ -10499,6 +10573,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>North Carolina</_name>
+      <fips-code>US37</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in North Carolina in the United States. -->
@@ -10955,6 +11030,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>North Dakota</_name>
+      <fips-code>US38</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in North Dakota in the United States. -->
@@ -11056,6 +11132,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Ohio</_name>
+      <fips-code>US39</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <city>
        <!-- Translators: This is in Ohio in the United States. -->
@@ -11301,6 +11378,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Oklahoma</_name>
+      <fips-code>US40</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Oklahoma in the United States. -->
@@ -11601,6 +11679,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Oregon</_name>
+      <fips-code>US41</fips-code>
       <tz-hint>America/Los_Angeles</tz-hint>
       <location>
         <!-- Translators: This is in Oregon in the United States. -->
@@ -11872,6 +11951,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Pennsylvania</_name>
+      <fips-code>US42</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Pennsylvania in the United States. -->
@@ -12143,6 +12223,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Rhode Island</_name>
+      <fips-code>US44</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Rhode Island in the United States. -->
@@ -12192,6 +12273,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>South Carolina</_name>
+      <fips-code>US45</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in South Carolina in the United States. -->
@@ -12345,6 +12427,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>South Dakota</_name>
+      <fips-code>US46</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in South Dakota in the United States. -->
@@ -12529,6 +12612,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Tennessee</_name>
+      <fips-code>US47</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Tennessee in the United States. -->
@@ -12634,6 +12718,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Texas</_name>
+      <fips-code>US48</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <city>
        <!-- Translators: This is in Texas in the United States. -->
@@ -13588,6 +13673,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Utah</_name>
+      <fips-code>US49</fips-code>
       <tz-hint>America/Denver</tz-hint>
       <location>
         <!-- Translators: This is in Utah in the United States. -->
@@ -13739,6 +13825,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Vermont</_name>
+      <fips-code>US50</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Vermont in the United States. -->
@@ -13854,6 +13941,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Virginia</_name>
+      <fips-code>US51</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in Virginia in the United States. -->
@@ -14242,6 +14330,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Washington</_name>
+      <fips-code>US53</fips-code>
       <tz-hint>America/Los_Angeles</tz-hint>
       <city>
        <!-- Translators: This is in Washington in the United States. -->
@@ -14561,6 +14650,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>West Virginia</_name>
+      <fips-code>US54</fips-code>
       <tz-hint>America/New_York</tz-hint>
       <location>
         <!-- Translators: This is in West Virginia in the United States. -->
@@ -14678,6 +14768,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Wisconsin</_name>
+      <fips-code>US55</fips-code>
       <tz-hint>America/Chicago</tz-hint>
       <location>
         <!-- Translators: This is in Wisconsin in the United States. -->
@@ -15074,6 +15165,7 @@
     <state>
       <!-- Translators: This is a state in the United States. -->
       <_name>Wyoming</_name>
+      <fips-code>US56</fips-code>
       <tz-hint>America/Denver</tz-hint>
       <location>
         <!-- Translators: This is in Wyoming in the United States. -->
@@ -15266,12 +15358,14 @@
   <country>
     <_name>Canada</_name>
     <iso-code>CA</iso-code>
+    <fips-code>CA</fips-code>
     <!-- FIXME: Many cities on the eastern and western edges of their
          provinces need to override their province's tz-hint.
       -->
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>Alberta</_name>
+      <fips-code>CA01</fips-code>
       <tz-hint>America/Edmonton</tz-hint>
       <city>
         <!-- Translators: This is in Alberta in Canada. -->
@@ -15421,6 +15515,7 @@
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>British Columbia</_name>
+      <fips-code>CA02</fips-code>
       <tz-hint>America/Vancouver</tz-hint>
       <location>
         <!-- Translators: This is in British Columbia in Canada. -->
@@ -15686,7 +15781,7 @@
       </location>
       <location>
         <!-- Translators: This is in British Columbia in Canada. -->
-        <name>White Rock</name>
+        <_name>White Rock</_name>
         <code>CWWK</code>
         <coordinates>49-01N 122-47W</coordinates>
       </location>
@@ -15700,6 +15795,7 @@
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>Manitoba</_name>
+      <fips-code>CA03</fips-code>
       <tz-hint>America/Winnipeg</tz-hint>
       <city>
        <!-- Translators: This is in Manitoba in Canada. -->
@@ -15785,6 +15881,7 @@
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>New Brunswick</_name>
+      <fips-code>CA04</fips-code>
       <tz-hint>America/Moncton</tz-hint>
       <location>
         <!-- Translators: This is in New Brunswick in Canada. -->
@@ -15829,7 +15926,8 @@
     </state>
     <state>
       <!-- Translators: This is a state in Canada. -->
-      <_name>Newfoundland</_name>
+      <_name>Newfoundland and Labrador</_name>
+      <fips-code>CA05</fips-code>
       <tz-hint>America/St_Johns</tz-hint>
       <location>
         <!-- Translators: This is in Newfoundland in Canada. -->
@@ -15933,6 +16031,7 @@
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>Northwest Territories</_name>
+      <fips-code>CA13</fips-code>
       <tz-hint>America/Yellowknife</tz-hint>
       <location>
         <!-- Translators: This is in Northwest Territories in Canada. -->
@@ -16094,6 +16193,7 @@
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>Nova Scotia</_name>
+      <fips-code>CA07</fips-code>
       <tz-hint>America/Halifax</tz-hint>
       <location>
         <!-- Translators: This is in Nova Scotia in Canada. -->
@@ -16139,6 +16239,7 @@
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>Nunavut</_name>
+      <fips-code>CA14</fips-code>
       <tz-hint>America/Iqaluit</tz-hint>
       <location>
         <!-- Translators: This is in Nunavut in Canada. -->
@@ -16390,6 +16491,7 @@
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>Ontario</_name>
+      <fips-code>CA08</fips-code>
       <tz-hint>America/Toronto</tz-hint>
       <location>
         <!-- Translators: This is in Ontario in Canada. -->
@@ -16631,6 +16733,7 @@
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>Prince Edward Island</_name>
+      <fips-code>CA09</fips-code>
       <tz-hint>America/Halifax</tz-hint>
       <city>
         <!-- Translators: This is in Prince Edward Island in Canada. -->
@@ -16646,6 +16749,7 @@
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>Quebec</_name>
+      <fips-code>CA10</fips-code>
       <tz-hint>America/Montreal</tz-hint>
       <location>
         <!-- Translators: This is in Quebec in Canada. -->
@@ -16894,6 +16998,7 @@
     <state>
       <!-- Translators: This is a state in Canada. -->
       <_name>Saskatchewan</_name>
+      <fips-code>CA11</fips-code>
       <tz-hint>America/Regina</tz-hint>
       <location>
         <!-- Translators: This is in Saskatchewan in Canada. -->
@@ -16982,6 +17087,7 @@
       <!-- FIXME: rename this to Yukon -->
       <!-- Translators: This is a state in Canada. -->
       <_name>Yukon Territory</_name>
+      <fips-code>CA12</fips-code>
       <tz-hint>America/Whitehorse</tz-hint>
       <location>
         <!-- Translators: This is in Yukon Territory in Canada. -->
@@ -17078,6 +17184,7 @@
   <country>
     <_name>Saint Pierre and Miquelon</_name>
     <iso-code>PM</iso-code>
+    <fips-code>SB</fips-code>
     <tz-hint>America/Miquelon</tz-hint>
     <location>
       <!-- Translators: This is in Saint Pierre and Miquelon. -->
@@ -17090,8 +17197,24 @@
 <region>
   <_name>Europe</_name>
   <country>
+    <_name>Åland Islands</_name>
+    <iso-code>AX</iso-code>
+    <fips-code>FI01</fips-code>
+    <tz-hint>Europe/Mariehamn</tz-hint>
+    <location>
+      <!-- Translators: This is in the Åland Islands of Finland.
+	   local name (sv_FI): Mariehamn
+	   local name (fi_FI): Maarianhamina
+	-->
+      <_name>Mariehamn</_name>
+      <code>EFMA</code>
+      <coordinates>60-07N 019-54E</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Albania</_name>
     <iso-code>AL</iso-code>
+    <fips-code>AL</fips-code>
     <tz-hint>Europe/Tirane</tz-hint>
     <location>
       <!-- Translators: This is in Albania. -->
@@ -17103,6 +17226,7 @@
   <country>
     <_name>Austria</_name>
     <iso-code>AT</iso-code>
+    <fips-code>AU</fips-code>
     <tz-hint>Europe/Vienna</tz-hint>
     <location>
       <!-- Translators: This is in Austria. -->
@@ -17208,6 +17332,7 @@
   <country>
     <_name>Belarus</_name>
     <iso-code>BY</iso-code>
+    <fips-code>BO</fips-code>
     <tz-hint>Europe/Minsk</tz-hint>
     <location>
       <!-- Translators: This is in Belarus. -->
@@ -17253,6 +17378,7 @@
 	-->
     <_name>Belgium</_name>
     <iso-code>BE</iso-code>
+    <fips-code>BE</fips-code>
     <tz-hint>Europe/Brussels</tz-hint>
     <state>
       <!-- Translators: This is a state in Belgium.
@@ -17261,6 +17387,7 @@
       	local name (de): Antwerpen.
 	-->
       <_name>Antwerp</_name>
+      <fips-code>BE01</fips-code>
       <location>
 	<!-- Translators: This is in Antwerp in Belgium.
 	local name (nl): Antwerpen.
@@ -17279,6 +17406,10 @@
       	local name (de): Brüssel, Flämish- und Wallonisch-Brabant.
 	-->
       <_name>Brussels, Flemish and Walloon Brabant</_name>
+      <fips-code>BE02</fips-code>
+      <fips-code>BE10</fips-code>
+      <fips-code>BE11</fips-code>
+      <fips-code>BE12</fips-code>
       <location>
 	<!-- Translators: This is in Brussels, Flemish and Walloon Brabant in Belgium. -->
         <_name>Zaventem</_name>
@@ -17290,6 +17421,7 @@
 	<!-- Translators: This is a state in Belgium.
 	-->
       <_name>East-Flanders</_name>
+      <fips-code>BE08</fips-code>
       <location>
 	<!-- Translators: This is in East-Flanders in Belgium. -->
         <_name>Gent</_name>
@@ -17312,6 +17444,7 @@
 	local name (de): Hennegau.
 	-->
       <_name>Hainaut</_name>
+      <fips-code>BE03</fips-code>
       <location>
 	<!-- Translators: This is in Hainaut in Belgium.
 	local name (fr): Charleroi.
@@ -17336,6 +17469,7 @@
 	local name (de): Lüttich.
 	-->
       <_name>Liège</_name>
+      <fips-code>BE04</fips-code>
       <location>
 	<!-- Translators: This is in Liège in Belgium. -->
         <_name>Elsenborn</_name>
@@ -17364,6 +17498,7 @@
 	<!-- Translators: This is a state in Belgium.
 	-->
       <_name>Luxembourg</_name>
+      <fips-code>BE06</fips-code>
       <location>
         <!-- Translators: This is in Luxembourg in Belgium. -->
         <_name>Saint-Hubert</_name>
@@ -17378,6 +17513,7 @@
 	local name (de): Limburg.
 	-->
       <_name>Limburg</_name>
+      <fips-code>BE05</fips-code>
       <location>
 	<!-- Translators: This is in Limburg in Belgium. -->
         <_name>Kleine Brogel</_name>
@@ -17392,6 +17528,7 @@
 	local name (de): Westflandern.
 	-->
       <_name>West-Flanders</_name>
+      <fips-code>BE09</fips-code>
       <location>
 	<!-- Translators: This is in West-Flanders in Belgium. -->
         <_name>Koksijde</_name>
@@ -17411,34 +17548,35 @@
     </state>
   </country>
   <country>
-    <_name>Bosnia-Herzegovina</_name>
+    <_name>Bosnia and Herzegovina</_name>
     <iso-code>BA</iso-code>
+    <fips-code>BK</fips-code>
     <tz-hint>Europe/Sarajevo</tz-hint>
     <location>
-      <!-- Translators: This is in Bosnia-Herzegovina. -->
+      <!-- Translators: This is in Bosnia and Herzegovina. -->
       <_name>Banja Luka</_name>
       <code>LQBK</code>
       <coordinates>44-47N 017-13E</coordinates>
     </location>
     <location>
-      <!-- Translators: This is in Bosnia-Herzegovina. -->
+      <!-- Translators: This is in Bosnia and Herzegovina. -->
       <_name>Mostar</_name>
       <code>LQMO</code>
       <coordinates>43-21N 017-48E</coordinates>
     </location>
     <location>
-      <!-- Translators: This is in Bosnia-Herzegovina. -->
+      <!-- Translators: This is in Bosnia and Herzegovina. -->
       <_name>Sarajevo</_name>
       <code>LQSA</code>
     </location>
     <location>
-      <!-- Translators: This is in Bosnia-Herzegovina. -->
+      <!-- Translators: This is in Bosnia and Herzegovina. -->
       <_name>Sarajevo/Butmir</_name>
       <code>LQSA</code>
       <coordinates>43-49N 018-20E</coordinates>
     </location>
     <location>
-      <!-- Translators: This is in Bosnia-Herzegovina. -->
+      <!-- Translators: This is in Bosnia and Herzegovina. -->
       <_name>Tuzla</_name>
       <code>LQTZ</code>
       <coordinates>44-33N 018-42E</coordinates>
@@ -17447,6 +17585,7 @@
   <country>
     <_name>Bulgaria</_name>
     <iso-code>BG</iso-code>
+    <fips-code>BU</fips-code>
     <tz-hint>Europe/Sofia</tz-hint>
     <location>
       <!-- Translators: This is in Bulgaria. -->
@@ -17482,6 +17621,7 @@
   <country>
     <_name>Czech Republic</_name>
     <iso-code>CZ</iso-code>
+    <fips-code>EZ</fips-code>
     <tz-hint>Europe/Prague</tz-hint>
     <location>
       <!-- Translators: This is in the Czech Republic.
@@ -17540,6 +17680,7 @@
   <country>
     <_name>Croatia</_name>
     <iso-code>HR</iso-code>
+    <fips-code>HR</fips-code>
     <tz-hint>Europe/Zagreb</tz-hint>
     <location>
       <!-- Translators: This is in Croatia. -->
@@ -17611,6 +17752,7 @@
 	-->
     <_name>Denmark</_name>
     <iso-code>DK</iso-code>
+    <fips-code>DA</fips-code>
     <tz-hint>Europe/Copenhagen</tz-hint>
     <location>
       <!-- Translators: This is in Denmark. -->
@@ -17720,6 +17862,7 @@
   <country>
     <_name>Estonia</_name>
     <iso-code>EE</iso-code>
+    <fips-code>EN</fips-code>
     <tz-hint>Europe/Tallinn</tz-hint>
     <location>
       <!-- Translators: This is in Estonia. -->
@@ -17769,6 +17912,7 @@
   <country>
     <_name>Faroe Islands</_name>
     <iso-code>FO</iso-code>
+    <fips-code>FO</fips-code>
     <tz-hint>Atlantic/Faroe</tz-hint>
     <location>
       <!-- Translators: This is in Faroe Islands.
@@ -17782,6 +17926,7 @@
   <country>
     <_name>Gibraltar</_name>
     <iso-code>GI</iso-code>
+    <fips-code>GI</fips-code>
     <tz-hint>Europe/Gibraltar</tz-hint>
     <location>
       <!-- Translators: This is in Gibraltar. -->
@@ -17793,6 +17938,7 @@
   <country>
     <_name>Iceland</_name>
     <iso-code>IS</iso-code>
+    <fips-code>IC</fips-code>
     <tz-hint>Atlantic/Reykjavik</tz-hint>
     <location>
       <!-- Translators: This is in Iceland. -->
@@ -17822,6 +17968,7 @@
   <country>
     <_name>Latvia</_name>
     <iso-code>LV</iso-code>
+    <fips-code>LG</fips-code>
     <tz-hint>Europe/Riga</tz-hint>
     <location>
       <!-- Translators: This is in Latvia. -->
@@ -17839,8 +17986,15 @@
     </location>
   </country>
   <country>
+    <_name>Liechtenstein</_name>
+    <iso-code>LI</iso-code>
+    <fips-code>LS</fips-code>
+    <tz-hint>Europe/Vaduz</tz-hint>
+  </country>
+  <country>
     <_name>Lithuania</_name>
     <iso-code>LT</iso-code>
+    <fips-code>LH</fips-code>
     <tz-hint>Europe/Vilnius</tz-hint>
     <location>
       <!-- Translators: This is in Lithuania. -->
@@ -17875,6 +18029,7 @@
   <country>
     <_name>Luxembourg</_name>
     <iso-code>LU</iso-code>
+    <fips-code>LU</fips-code>
     <tz-hint>Europe/Luxembourg</tz-hint>
     <location>
       <!-- Translators: This is in Luxembourg.
@@ -17888,8 +18043,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is "The Former Yugoslav Republic of Macedonia" -->
     <_name>Macedonia</_name>
     <iso-code>MK</iso-code>
+    <fips-code>MK</fips-code>
     <tz-hint>Europe/Skopje</tz-hint>
     <location>
       <!-- Translators: This is in Macedonia.
@@ -17911,6 +18068,7 @@
   <country>
     <_name>Malta</_name>
     <iso-code>MT</iso-code>
+    <fips-code>MT</fips-code>
     <tz-hint>Europe/Malta</tz-hint>
     <location>
       <!-- Translators: This is in Malta. -->
@@ -17922,6 +18080,7 @@
   <country>
     <_name>Moldova</_name>
     <iso-code>MD</iso-code>
+    <fips-code>MD</fips-code>
     <tz-hint>Europe/Chisinau</tz-hint>
     <location>
       <!-- Translators: This is in Moldova. -->
@@ -17931,8 +18090,37 @@
     </location>
   </country>
   <country>
+    <_name>Monaco</_name>
+    <iso-code>MC</iso-code>
+    <fips-code>MN</fips-code>
+    <tz-hint>Europe/Monaco</tz-hint>
+  </country>
+  <country>
+    <_name>Montenegro</_name>
+    <iso-code>ME</iso-code>
+    <fips-code>MJ</fips-code>
+    <tz-hint>Europe/Podgorica</tz-hint>
+    <city>
+      <!-- Translators: This is in Montenegro. -->
+      <_name>Podgorica</_name>
+      <location>
+        <!-- Translators: This is in Podgorica in Montenegro. -->
+        <_name>Podgorica</_name>
+        <code>LYPG</code>
+        <coordinates>42-26N 019-17E</coordinates>
+      </location>
+    </city>
+    <location>
+      <!-- Translators: This is in Montenegro. -->
+      <_name>Tivat</_name>
+      <code>LYTV</code>
+      <coordinates>42-24N 018-44E</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Norway</_name>
     <iso-code>NO</iso-code>
+    <fips-code>NO</fips-code>
     <tz-hint>Europe/Oslo</tz-hint>
     <location>
       <!-- Translators: This is in Norway. -->
@@ -18246,12 +18434,6 @@
     </location>
     <location>
       <!-- Translators: This is in Norway. -->
-      <_name>Svalbard</_name>
-      <code>ENSB</code>
-      <coordinates>78-15N 015-28E</coordinates>
-    </location>
-    <location>
-      <!-- Translators: This is in Norway. -->
       <_name>Svartnes</_name>
       <code>ENSS</code>
       <coordinates>70-21N 031-03E</coordinates>
@@ -18290,6 +18472,7 @@
   <country>
     <_name>Poland</_name>
     <iso-code>PL</iso-code>
+    <fips-code>PL</fips-code>
     <tz-hint>Europe/Warsaw</tz-hint>
     <location>
       <!-- Translators: This is in Poland.
@@ -18355,6 +18538,7 @@
   <country>
     <_name>Portugal</_name>
     <iso-code>PT</iso-code>
+    <fips-code>PO</fips-code>
     <tz-hint>Europe/Lisbon</tz-hint>
     <location>
       <!-- Translators: This is in Portugal. -->
@@ -18442,6 +18626,7 @@
   <country>
     <_name>Romania</_name>
     <iso-code>RO</iso-code>
+    <fips-code>RO</fips-code>
     <tz-hint>Europe/Bucharest</tz-hint>
     <location>
       <!-- Translators: This is in Romania. -->
@@ -18503,8 +18688,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is "Russian Federation" -->
     <_name>Russia</_name>
     <iso-code>RU</iso-code>
+    <fips-code>RS</fips-code>
     <location>
       <!-- Translators: This is in Russia. -->
       <_name>Abakan</_name>
@@ -19024,57 +19211,41 @@
     </location>
   </country>
   <country>
-    <_name>Serbia and Montenegro</_name>
+    <_name>Serbia</_name>
     <iso-code>RS</iso-code>
+    <fips-code>RB</fips-code>
     <tz-hint>Europe/Belgrade</tz-hint>
     <city>
-      <!-- Translators: This is in Serbia and Montenegro.
-	The native name is "Beograd".
-	-->
+      <!-- Translators: This is in Serbia. The native name is "Beograd". -->
       <_name>Belgrade</_name>
       <location>
-        <!-- Translators: This is in Beograd in Serbia and Montenegro. -->
+        <!-- Translators: This is in Beograd in Serbia. -->
         <_name>Surčin</_name>
         <code>LYBE</code>
         <coordinates>44-49N 020-17E</coordinates>
       </location>
     </city>
     <city>
-      <!-- Translators: This is in Serbia and Montenegro. -->
+      <!-- Translators: This is in Serbia. -->
       <_name>Uroševac</_name>
       <location>
-        <!-- Translators: This is in Uroševac in Serbia and Montenegro. -->
+        <!-- Translators: This is in Uroševac in Serbia. -->
         <_name>Camp Bondsteel</_name>
         <code>KQUK</code>
         <coordinates>42-35N 021-23E</coordinates>
       </location>
     </city>
     <location>
-      <!-- Translators: This is in Serbia and Montenegro. -->
+      <!-- Translators: This is in Serbia. -->
       <_name>Niš</_name>
       <code>LYNI</code>
       <coordinates>43-20N 021-54E</coordinates>
     </location>
-    <city>
-      <!-- Translators: This is in Serbia and Montenegro. -->
-      <_name>Podgorica</_name>
-      <location>
-        <!-- Translators: This is in Podgorica in Serbia and Montenegro. -->
-        <_name>Podgorica</_name>
-        <code>LYPG</code>
-        <coordinates>42-26N 019-17E</coordinates>
-      </location>
-    </city>
-    <location>
-      <!-- Translators: This is in Serbia and Montenegro. -->
-      <_name>Tivat</_name>
-      <code>LYTV</code>
-      <coordinates>42-24N 018-44E</coordinates>
-    </location>
   </country>
   <country>
     <_name>Slovakia</_name>
     <iso-code>SK</iso-code>
+    <fips-code>LO</fips-code>
     <tz-hint>Europe/Bratislava</tz-hint>
     <location>
       <!-- Translators: This is in Slovakia.
@@ -19154,6 +19325,7 @@
   <country>
     <_name>Slovenia</_name>
     <iso-code>SI</iso-code>
+    <fips-code>SI</fips-code>
     <tz-hint>Europe/Ljubljana</tz-hint>
     <city>
       <!-- Translators: This is in Slovenia.
@@ -19197,6 +19369,7 @@
   <country>
     <_name>Sweden</_name>
     <iso-code>SE</iso-code>
+    <fips-code>SW</fips-code>
     <tz-hint>Europe/Stockholm</tz-hint>
     <location>
       <!-- Translators: This is in Sweden. -->
@@ -19211,7 +19384,7 @@
       <coordinates>67-09N 020-39E</coordinates>
     </location>
     <location>
-      <name>Ängelholm</name>
+      <_name>Ängelholm</_name>
       <code>ESTA</code>
       <coordinates>56-17N 012-50E</coordinates>
     </location>
@@ -19456,6 +19629,7 @@
   <country>
     <_name>Switzerland</_name>
     <iso-code>CH</iso-code>
+    <fips-code>SZ</fips-code>
     <tz-hint>Europe/Zurich</tz-hint>
     <city>
       <!-- Translators: This is in Switzerland.
@@ -19545,8 +19719,21 @@
     </city>
   </country>
   <country>
+    <_name>Svalbard and Jan Mayen</_name>
+    <iso-code>SJ</iso-code>
+    <fips-code>SV</fips-code>
+    <tz-hint>Arctic/Longyearbyen</tz-hint>
+    <location>
+      <!-- Translators: This is in Norway. -->
+      <_name>Svalbard</_name>
+      <code>ENSB</code>
+      <coordinates>78-15N 015-28E</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Cyprus</_name>
     <iso-code>CY</iso-code>
+    <fips-code>CY</fips-code>
     <tz-hint>Asia/Nicosia</tz-hint>
     <location>
       <!-- Translators: This is in Cyprus. -->
@@ -19576,6 +19763,7 @@
   <country>
     <_name>Finland</_name>
     <iso-code>FI</iso-code>
+    <fips-code>FI</fips-code>
     <tz-hint>Europe/Helsinki</tz-hint>
     <location>
       <!-- Translators: This is in Finland.
@@ -19694,15 +19882,6 @@
     </location>
     <location>
       <!-- Translators: This is in Finland.
-	   local name (sv_FI): Mariehamn
-	   local name (fi_FI): Maarianhamina
-	-->
-      <_name>Mariehamn</_name>
-      <code>EFMA</code>
-      <coordinates>60-07N 019-54E</coordinates>
-    </location>
-    <location>
-      <!-- Translators: This is in Finland.
 	   local name (fi_FI): Mikkeli
 	   local name (sv_FI): Sankt Michel
 	-->
@@ -19798,6 +19977,7 @@
   <country>
     <_name>France</_name>
     <iso-code>FR</iso-code>
+    <fips-code>FR</fips-code>
     <tz-hint>Europe/Paris</tz-hint>
     <location>
       <!-- Translators: This is in France. -->
@@ -20063,18 +20243,6 @@
       </location>
     </city>
     <city>
-      <!-- Translators: This is in France.
-	"Wallis" is an island in the Pacific Ocean.
-	-->
-      <_name>Île Wallis</_name>
-      <location>
-        <!-- Translators: This is in Île Wallis in France. -->
-        <_name>Hihifo</_name>
-        <code>NLWW</code>
-        <coordinates>13-14S 176-10W</coordinates>
-      </location>
-    </city>
-    <city>
       <!-- Translators: This is in France. -->
       <_name>Hyères</_name>
       <location>
@@ -20478,10 +20646,12 @@
   <country>
     <_name>Germany</_name>
     <iso-code>DE</iso-code>
+    <fips-code>GM</fips-code>
     <tz-hint>Europe/Berlin</tz-hint>
     <state>
       <!-- Translators: This is a state in Germany. -->
       <_name>Baden-Württemberg</_name>
+      <fips-code>GM01</fips-code>
       <location>
         <!-- Translators: This is in Baden-Württemberg in Germany. -->
         <_name>Donaueschingen-Villingen</_name>
@@ -20560,6 +20730,7 @@
            that it has a different name in your language.
 	-->
       <_name>Bavaria</_name>
+      <fips-code>GM02</fips-code>
       <location>
         <!-- Translators: This is in Bavaria in Germany. -->
         <_name>Altenstadt-Schongau</_name>
@@ -20733,6 +20904,7 @@
            that it has a different name in your language.
 	-->
       <_name>Hesse</_name>
+      <fips-code>GM05</fips-code>
       <location>
         <!-- Translators: This is in Hesse in Germany. -->
         <_name>Frankfurt am Main</_name>
@@ -20769,6 +20941,7 @@
            you know that it has a different name in your language.
 	-->
       <_name>Lower Saxony</_name>
+      <fips-code>GM06</fips-code>
       <location>
         <!-- Translators: This is in Lower Saxony in Germany. -->
         <_name>Braunschweig</_name>
@@ -20853,6 +21026,7 @@
            you know that it has a different name in your language.
 	-->
       <_name>Mecklenburg-Western Pomerania</_name>
+      <fips-code>GM12</fips-code>
       <location>
         <!-- Translators: This is in Mecklenburg-Western Pomerania in Germany. -->
         <_name>Heringsdorf</_name>
@@ -20893,6 +21067,7 @@
            you know that it has a different name in your language.
 	-->
       <_name>North Rhine-Westphalia</_name>
+      <fips-code>GM07</fips-code>
       <location>
         <!-- Translators: This is in North Rhine-Westphalia in Germany.
 
@@ -20995,6 +21170,7 @@
            you know that it has a different name in your language.
 	-->
       <_name>Rhineland-Palatinate</_name>
+      <fips-code>GM08</fips-code>
       <location>
         <!-- Translators: This is in Rhineland-Palatinate in Germany. -->
         <_name>Büchel</_name>
@@ -21037,6 +21213,7 @@
 	   The French name is "Sarre".
         -->
       <_name>Saarland</_name>
+      <fips-code>GM09</fips-code>
       <city>
         <!-- Translators: This is in Saarland in Germany.
              The French name is "Sarrebruck".
@@ -21057,6 +21234,7 @@
            you know that it has a different name in your language.
 	-->
       <_name>Saxony</_name>
+      <fips-code>GM13</fips-code>
       <city>
         <!-- Translators: This is in Saxony in Germany. -->
         <_name>Dresden</_name>
@@ -21085,6 +21263,7 @@
            you know that it has a different name in your language.
 	-->
       <_name>Saxony-Anhalt</_name>
+      <fips-code>GM14</fips-code>
       <location>
         <!-- Translators: This is in Saxony-Anhalt in Germany. -->
         <_name>Holzdorf</_name>
@@ -21103,6 +21282,7 @@
            The Danish name is "Slesvig-Holsten".
         -->
       <_name>Schleswig-Holstein</_name>
+      <fips-code>GM10</fips-code>
       <city>
         <!-- Translators: This is in Schleswig-Holstein in Germany.
 
@@ -21196,6 +21376,7 @@
            you know that it has a different name in your language.
 	-->
       <_name>Thuringia</_name>
+      <fips-code>GM15</fips-code>
       <city>
         <!-- Translators: This is in Thuringia in Germany. -->
         <_name>Altenburg</_name>
@@ -21221,6 +21402,7 @@
   <country>
     <_name>Greece</_name>
     <iso-code>GR</iso-code>
+    <fips-code>GR</fips-code>
     <tz-hint>Europe/Athens</tz-hint>
     <location>
       <_name>Agrinio</_name>
@@ -21402,8 +21584,21 @@
     </location>
   </country>
   <country>
+    <_name>Guernsey</_name>
+    <iso-code>GG</iso-code>
+    <fips-code>GK</fips-code>
+    <tz-hint>Europe/Guernsey</tz-hint>
+    <location>
+      <_name>Guernsey</_name>
+      <code>EGJB</code>
+      <zone>:centralsouthern</zone>
+      <coordinates>49-26N 002-36W</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Hungary</_name>
     <iso-code>HU</iso-code>
+    <fips-code>HU</fips-code>
     <tz-hint>Europe/Budapest</tz-hint>
     <city>
      <_name>Budapest</_name>
@@ -21442,6 +21637,7 @@
   <country>
     <_name>Ireland</_name>
     <iso-code>IE</iso-code>
+    <fips-code>EI</fips-code>
     <tz-hint>Europe/Dublin</tz-hint>
     <location>
       <_name>Connaught</_name>
@@ -21465,8 +21661,21 @@
     </location>
   </country>
   <country>
+    <_name>Isle of Man</_name>
+    <iso-code>IM</iso-code>
+    <fips-code>IM</fips-code>
+    <tz-hint>Europe/Isle_of_Man</tz-hint>
+    <location>
+      <_name>Isle of Man</_name>
+      <code>EGNS</code>
+      <zone>:northwest</zone>
+      <coordinates>54-05N 004-38W</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Italy</_name>
     <iso-code>IT</iso-code>
+    <fips-code>IT</fips-code>
     <tz-hint>Europe/Rome</tz-hint>
     <location>
       <_name>Albenga</_name>
@@ -21967,8 +22176,21 @@
     </location>
   </country>
   <country>
+    <_name>Jersey</_name>
+    <iso-code>JE</iso-code>
+    <fips-code>JE</fips-code>
+    <tz-hint>Europe/Jersey</tz-hint>
+    <location>
+      <_name>Jersey</_name>
+      <code>EGJJ</code>
+      <zone>:centralsouthern</zone>
+      <coordinates>49-13N 002-12W</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Netherlands</_name>
     <iso-code>NL</iso-code>
+    <fips-code>NL</fips-code>
     <tz-hint>Europe/Amsterdam</tz-hint>
     <location>
       <_name>Amsterdam</_name>
@@ -22047,8 +22269,15 @@
     </location>
   </country>
   <country>
+    <_name>San Marino</_name>
+    <iso-code>SM</iso-code>
+    <fips-code>SM</fips-code>
+    <tz-hint>Europe/San_Marino</tz-hint>
+  </country>
+  <country>
     <_name>Spain</_name>
     <iso-code>ES</iso-code>
+    <fips-code>SP</fips-code>
     <tz-hint>Europe/Madrid</tz-hint>
     <location>
       <_name>Albacete/Los Llanos</_name>
@@ -22304,6 +22533,7 @@
   <country>
     <_name>Turkey</_name>
     <iso-code>TR</iso-code>
+    <fips-code>TU</fips-code>
     <tz-hint>Europe/Istanbul</tz-hint>
     <location>
       <_name>Adana/Incirlik</_name>
@@ -22497,6 +22727,7 @@
   <country>
     <_name>Ukraine</_name>
     <iso-code>UA</iso-code>
+    <fips-code>UP</fips-code>
     <tz-hint>Europe/Kiev</tz-hint>
     <location>
       <_name>Chernovsty</_name>
@@ -22596,9 +22827,11 @@
   <country>
     <_name>United Kingdom</_name>
     <iso-code>GB</iso-code>
+    <fips-code>UK</fips-code>
     <tz-hint>Europe/London</tz-hint>
      <state>
       <_name>Wales</_name>
+      <fips-code>UKX1|UKX2|UKX3|UKX4|UKX5|UKX6|UKX7|UKX8|UKX9|UKY1|UKY2|UKY3|UKY4|UKY5|UKY6|UKY7|UKY8|UKY9|UKZ1|UKZ2|UKZ3|UKZ4</fips-code>
       <location>
        <_name>Cardiff</_name>
        <code>EGFF</code>
@@ -22626,6 +22859,12 @@
     </state>
     <state>
       <_name>East and South East England</_name>
+      <!-- East England -->
+      <fips-code>UKA5|UKC3|UKE4|UKF8|UKI1|UKI5|UKI9|UKK3|UKM5|UKN5|UKO3</fips-code>
+      <!-- South East England -->
+      <fips-code>UKB3|UKB6|UKB9|UKE2|UKF2|UKG2|UKG5|UKI3|UKI6|UKK2|UKK6|UKK7|UKM1|UKM4|UKP4|UKP6|UKP9|UKQ2</fips-code>
+      <!-- London -->
+      <fips-code>UKA1|UKA2|UKA6|UKB5|UKB8|UKC4|UKC8|UKD9|UKE3|UKE7|UKE8|UKF1|UKF3|UKF4|UKF6|UKF9|UKG1|UKG3|UKG4|UKG7|UKH1|UKH6|UKH9|UKI4|UKI8|UKK8|UKL1|UKM8|UKN8|UKO5|UKO9|UKP1|UKP5</fips-code>
    <location>
     <_name>Barkston Heath</_name>
     <code>EGYE</code>
@@ -22768,6 +23007,10 @@
   </state>
   <state>
    <_name>Midlands</_name>
+   <!-- East Midlands -->
+   <fips-code>UKD2|UKD3|UKH4|UKH5|UKH7|UKJ1|UKJ8|UKJ9|UKL4</fips-code>
+   <!-- West Midlands -->
+   <fips-code>UKA7|UKC7|UKD7|UKF7|UKL6|UKL7|UKM2|UKM9|UKN4|UKO2|UKO8|UKP3|UKQ3|UKQ4</fips-code>
    <location>
     <_name>Birmingham</_name>
     <code>EGBB</code>
@@ -22807,6 +23050,7 @@
   </state>
   <state>
    <_name>North East England</_name>
+   <fips-code>UKD1|UKD8|UKE5|UKF5|UKI7|UKJ5|UKJ6|UKK9|UKM7|UKN3|UKN6</fips-code>
    <location>
     <_name>Coningsby</_name>
     <code>EGXC</code>
@@ -22863,6 +23107,10 @@
   </state>
   <state>
    <_name>North West England</_name>
+   <!-- North West England -->
+   <fips-code>UKA8|UKA9|UKB1|UKC1|UKC5|UKC9|UKE9|UKG9|UKH2|UKH8|UKI2|UKK1|UKL2|UKL5|UKL8|UKN1|UKN2|UKO1|UKO6|UKP2|UKP7|UKQ1</fips-code>
+   <!-- Yorkshire and the Humber -->
+   <fips-code>UKA3|UKB4|UKC2|UKD5|UKE1|UKG6|UKG8|UKH3|UKJ2|UKJ3|UKJ7|UKL3|UKL9|UKO7|UKQ5</fips-code>
    <location>
     <_name>Blackpool</_name>
     <code>EGNH</code>
@@ -22880,14 +23128,6 @@
     <coordinates>53-10N 002-59W</coordinates>
    </location>
    <location>
-    <_name>Isle of Man</_name>
-    <iso-code>IM</iso-code>
-    <tz-hint>Europe/Isle_of_Man</tz-hint>
-    <code>EGNS</code>
-    <zone>:northwest</zone>
-    <coordinates>54-05N 004-38W</coordinates>
-   </location>
-   <location>
     <_name>Leeds/Bradford</_name>
     <code>EGNM</code>
     <zone>:RYPMS</zone>
@@ -22908,6 +23148,7 @@
   </state>
   <state>
    <_name>South and South West England</_name>
+   <fips-code>UKA4|UKB2|UKB7|UKC6|UKD4|UKD6|UKE6|UKJ4|UKK4|UKK5|UKM3|UKM6|UKN9|UKO4|UKP8</fips-code>
    <location>
     <_name>Alderney</_name>
     <code>EGJA</code>
@@ -22946,22 +23187,6 @@
     <coordinates>50-44N 003-25W</coordinates>
    </location>
    <location>
-    <_name>Guernsey</_name>
-    <iso-code>GG</iso-code>
-    <tz-hint>Europe/Guernsey</tz-hint>
-    <code>EGJB</code>
-    <zone>:centralsouthern</zone>
-    <coordinates>49-26N 002-36W</coordinates>
-   </location>
-   <location>
-    <_name>Jersey</_name>
-    <iso-code>JE</iso-code>
-    <tz-hint>Europe/Jersey</tz-hint>
-    <code>EGJJ</code>
-    <zone>:centralsouthern</zone>
-    <coordinates>49-13N 002-12W</coordinates>
-   </location>
-   <location>
     <_name>Lyneham</_name>
     <code>EGDL</code>
     <zone>:midlands</zone>
@@ -23005,6 +23230,7 @@
   </state>
   <state>
    <_name>Northern Ireland</_name>
+   <fips-code>UKQ6|UKQ7|UKQ8|UKQ9|UKR1|UKR2|UKR3|UKR4|UKR5|UKR6|UKR7|UKR8|UKR9|UKS1|UKS2|UKS3|UKS4|UKS5|UKS6|UKS7|UKS8|UKS9|UKT1|UKT2|UKT3|UKT4</fips-code>
    <location>
     <_name>Belfast/Aldergrove</_name>
     <code>EGAA</code>
@@ -23026,6 +23252,7 @@
   </state>
   <state>
    <_name>Scotland</_name>
+   <fips-code>UKT5|UKT6|UKT7|UKT8|UKT9|UKU1|UKU2|UKU3|UKU4|UKU5|UKU6|UKU7|UKU8|UKU9|UKV1|UKV2|UKV3|UKV4|UKV5|UKV6|UKV7|UKV8|UKV9|UKW1|UKW2|UKW3|UKW4|UKW5|UKW6|UKW7|UKW8|UKW9</fips-code>
    <location>
     <_name>Aberdeen</_name>
     <code>EGPD</code>
@@ -23134,6 +23361,7 @@
   <country>
     <_name>Algeria</_name>
     <iso-code>DZ</iso-code>
+    <fips-code>AG</fips-code>
     <tz-hint>Africa/Algiers</tz-hint>
     <location>
       <_name>Adrar</_name>
@@ -23317,6 +23545,7 @@
   <country>
     <_name>Angola</_name>
     <iso-code>AO</iso-code>
+    <fips-code>AO</fips-code>
     <tz-hint>Africa/Luanda</tz-hint>
     <location>
       <_name>Huambo Nova Lisboa</_name>
@@ -23337,6 +23566,7 @@
   <country>
     <_name>Benin</_name>
     <iso-code>BJ</iso-code>
+    <fips-code>BN</fips-code>
     <tz-hint>Africa/Porto-Novo</tz-hint>
     <location>
       <_name>Cotonou</_name>
@@ -23347,6 +23577,7 @@
   <country>
     <_name>Botswana</_name>
     <iso-code>BW</iso-code>
+    <fips-code>BC</fips-code>
     <tz-hint>Africa/Gaborone</tz-hint>
     <location>
       <_name>Francistown</_name>
@@ -23412,6 +23643,7 @@
   <country>
     <_name>Burkina Faso</_name>
     <iso-code>BF</iso-code>
+    <fips-code>UV</fips-code>
     <tz-hint>Africa/Ouagadougou</tz-hint>
     <location>
       <_name>Bobo-Dioulasso</_name>
@@ -23427,6 +23659,7 @@
   <country>
     <_name>Burundi</_name>
     <iso-code>BI</iso-code>
+    <fips-code>BY</fips-code>
     <tz-hint>Africa/Bujumbura</tz-hint>
     <location>
       <_name>Bujumbura</_name>
@@ -23437,6 +23670,7 @@
   <country>
     <_name>Cameroon</_name>
     <iso-code>CM</iso-code>
+    <fips-code>CM</fips-code>
     <tz-hint>Africa/Douala</tz-hint>
     <location>
       <_name>Douala Obs.</_name>
@@ -23462,6 +23696,7 @@
   <country>
     <_name>Cape Verde</_name>
     <iso-code>CV</iso-code>
+    <fips-code>CV</fips-code>
     <tz-hint>Atlantic/Cape_Verde</tz-hint>
     <location>
       <_name>Sal</_name>
@@ -23472,6 +23707,7 @@
   <country>
     <_name>Central African Republic</_name>
     <iso-code>CF</iso-code>
+    <fips-code>CT</fips-code>
     <tz-hint>Africa/Bangui</tz-hint>
     <location>
       <_name>Bangassou</_name>
@@ -23492,6 +23728,7 @@
   <country>
     <_name>Chad</_name>
     <iso-code>TD</iso-code>
+    <fips-code>CD</fips-code>
     <tz-hint>Africa/Ndjamena</tz-hint>
     <location>
       <_name>Abeche</_name>
@@ -23517,13 +23754,9 @@
   <country>
     <_name>Comoros</_name>
     <iso-code>KM</iso-code>
+    <fips-code>CN</fips-code>
     <tz-hint>Indian/Comoro</tz-hint>
     <location>
-      <_name>Dzaoudzi / Pamanzi Mayotte</_name>
-      <code>FMCZ</code>
-      <coordinates>12-48S 045-17E</coordinates>
-    </location>
-    <location>
       <_name>Hahaya</_name>
       <code>FMCH</code>
       <coordinates>11-32S 043-16E</coordinates>
@@ -23532,6 +23765,7 @@
   <country>
     <_name>Congo, Democratic Republic of the</_name>
     <iso-code>CD</iso-code>
+    <fips-code>CG</fips-code>
     <location>
       <_name>Kindu</_name>
       <tz-hint>Africa/Kinshasa</tz-hint>
@@ -23552,8 +23786,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is simply "Congo"; we use the long name to better distinguish it from CD (The Democratic Republic of the Congo). -->
     <_name>Congo, Republic of the</_name>
     <iso-code>CG</iso-code>
+    <fips-code>CF</fips-code>
     <tz-hint>Africa/Brazzaville</tz-hint>
     <location>
       <_name>Brazzaville / Maya-Maya</_name>
@@ -23567,8 +23803,9 @@
     </location>
   </country>
   <country>
-    <_name>Cote d'Ivoire</_name>
+    <_name>Côte d'Ivoire</_name>
     <iso-code>CI</iso-code>
+    <fips-code>IV</fips-code>
     <tz-hint>Africa/Abidjan</tz-hint>
     <location>
       <_name>Abidjan</_name>
@@ -23579,6 +23816,7 @@
   <country>
     <_name>Djibouti</_name>
     <iso-code>DJ</iso-code>
+    <fips-code>DJ</fips-code>
     <tz-hint>Africa/Djibouti</tz-hint>
     <location>
       <_name>Ambouli</_name>
@@ -23589,6 +23827,7 @@
   <country>
     <_name>Egypt</_name>
     <iso-code>EG</iso-code>
+    <fips-code>EG</fips-code>
     <tz-hint>Africa/Cairo</tz-hint>
     <location>
       <_name>Alexandria/Nouzha</_name>
@@ -23654,6 +23893,7 @@
   <country>
     <_name>Equatorial Guinea</_name>
     <iso-code>GQ</iso-code>
+    <fips-code>EK</fips-code>
     <tz-hint>Africa/Malabo</tz-hint>
     <location>
       <_name>Malabo/Fernando Poo</_name>
@@ -23664,6 +23904,7 @@
   <country>
     <_name>Eritrea</_name>
     <iso-code>ER</iso-code>
+    <fips-code>ER</fips-code>
     <tz-hint>Africa/Asmara</tz-hint>
     <location>
       <_name>Asmara</_name>
@@ -23674,6 +23915,7 @@
   <country>
     <_name>Ethiopia</_name>
     <iso-code>ET</iso-code>
+    <fips-code>ET</fips-code>
     <tz-hint>Africa/Addis_Ababa</tz-hint>
     <location>
       <_name>Addis Ababa</_name>
@@ -23684,6 +23926,7 @@
   <country>
     <_name>Gabon</_name>
     <iso-code>GA</iso-code>
+    <fips-code>GB</fips-code>
     <tz-hint>Africa/Libreville</tz-hint>
     <location>
       <_name>Bitam</_name>
@@ -23752,8 +23995,9 @@
     </location>
   </country>
   <country>
-    <_name>Gambia, The</_name>
+    <_name>Gambia</_name>
     <iso-code>GM</iso-code>
+    <fips-code>GA</fips-code>
     <tz-hint>Africa/Banjul</tz-hint>
     <location>
       <_name>Banjul / Yundum</_name>
@@ -23764,6 +24008,7 @@
   <country>
     <_name>Ghana</_name>
     <iso-code>GH</iso-code>
+    <fips-code>GH</fips-code>
     <tz-hint>Africa/Accra</tz-hint>
     <location>
       <_name>Accra</_name>
@@ -23779,6 +24024,7 @@
   <country>
     <_name>Guinea</_name>
     <iso-code>GN</iso-code>
+    <fips-code>GV</fips-code>
     <tz-hint>Africa/Conakry</tz-hint>
     <location>
       <_name>Conakry / Gbessia</_name>
@@ -23787,8 +24033,20 @@
     </location>
   </country>
   <country>
+    <_name>Guinea-Bissau</_name>
+    <iso-code>GW</iso-code>
+    <fips-code>PU</fips-code>
+    <tz-hint>Africa/Bissau</tz-hint>
+    <location>
+      <_name>Bissau</_name>
+      <code>GGOV</code>
+      <coordinates>11-53N 015-39W</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Kenya</_name>
     <iso-code>KE</iso-code>
+    <fips-code>KE</fips-code>
     <tz-hint>Africa/Nairobi</tz-hint>
     <location>
       <_name>Eldoret</_name>
@@ -23922,6 +24180,7 @@
   <country>
     <_name>Liberia</_name>
     <iso-code>LR</iso-code>
+    <fips-code>LI</fips-code>
     <tz-hint>Africa/Monrovia</tz-hint>
     <location>
       <_name>Grand Bassa, Roberts Field</_name>
@@ -23930,8 +24189,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is "Libyan Arab Jamahiriya" -->
     <_name>Libya</_name>
     <iso-code>LY</iso-code>
+    <fips-code>LY</fips-code>
     <tz-hint>Africa/Tripoli</tz-hint>
     <location>
       <_name>Benina</_name>
@@ -23947,6 +24208,7 @@
   <country>
     <_name>Madagascar</_name>
     <iso-code>MG</iso-code>
+    <fips-code>MA</fips-code>
     <tz-hint>Indian/Antananarivo</tz-hint>
     <location>
       <_name>Antananarivo / Ivato</_name>
@@ -23992,6 +24254,7 @@
   <country>
     <_name>Mali</_name>
     <iso-code>ML</iso-code>
+    <fips-code>ML</fips-code>
     <tz-hint>Africa/Bamako</tz-hint>
     <location>
       <_name>Bamako / Senou</_name>
@@ -24002,6 +24265,7 @@
   <country>
     <_name>Mauritania</_name>
     <iso-code>MR</iso-code>
+    <fips-code>MR</fips-code>
     <tz-hint>Africa/Nouakchott</tz-hint>
     <location>
       <_name>Nouadhibou</_name>
@@ -24017,6 +24281,7 @@
   <country>
     <_name>Mauritius</_name>
     <iso-code>MU</iso-code>
+    <fips-code>MP</fips-code>
     <tz-hint>Indian/Mauritius</tz-hint>
     <location>
       <_name>Plaisance Mauritius</_name>
@@ -24030,8 +24295,20 @@
     </location>
   </country>
   <country>
+    <_name>Mayotte</_name>
+    <iso-code>YT</iso-code>
+    <fips-code>MF</fips-code>
+    <tz-hint>Indian/Mayotte</tz-hint>
+    <location>
+      <_name>Dzaoudzi / Pamanzi Mayotte</_name>
+      <code>FMCZ</code>
+      <coordinates>12-48S 045-17E</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Morocco</_name>
     <iso-code>MA</iso-code>
+    <fips-code>MO</fips-code>
     <tz-hint>Africa/Casablanca</tz-hint>
     <location>
       <_name>Agadir Al Massira</_name>
@@ -24110,6 +24387,7 @@
   <country>
     <_name>Mozambique</_name>
     <iso-code>MZ</iso-code>
+    <fips-code>MZ</fips-code>
     <tz-hint>Africa/Maputo</tz-hint>
     <location>
       <_name>Beira</_name>
@@ -24168,6 +24446,7 @@
   <country>
     <_name>Namibia</_name>
     <iso-code>NA</iso-code>
+    <fips-code>WA</fips-code>
     <tz-hint>Africa/Windhoek</tz-hint>
     <location>
       <_name>Ondangwa</_name>
@@ -24188,6 +24467,7 @@
   <country>
     <_name>Niger</_name>
     <iso-code>NE</iso-code>
+    <fips-code>NG</fips-code>
     <tz-hint>Africa/Niamey</tz-hint>
     <location>
       <_name>Agadez</_name>
@@ -24208,6 +24488,7 @@
   <country>
     <_name>Nigeria</_name>
     <iso-code>NG</iso-code>
+    <fips-code>NI</fips-code>
     <tz-hint>Africa/Lagos</tz-hint>
     <location>
       <_name>Calabar</_name>
@@ -24261,9 +24542,9 @@
     </location>
   </country>
   <country>
-    <!-- local name (fr_RE): Réunion -->
-    <_name>Reunion</_name>
+    <_name>Réunion</_name>
     <iso-code>RE</iso-code>
+    <fips-code>RE</fips-code>
     <tz-hint>Indian/Reunion</tz-hint>
     <location>
       <_name>Saint-Denis / Gillot</_name>
@@ -24279,6 +24560,7 @@
   <country>
     <_name>Rwanda</_name>
     <iso-code>RW</iso-code>
+    <fips-code>RW</fips-code>
     <tz-hint>Africa/Kigali</tz-hint>
     <location>
       <_name>Kigali</_name>
@@ -24289,6 +24571,7 @@
   <country>
     <_name>Senegal</_name>
     <iso-code>SN</iso-code>
+    <fips-code>SG</fips-code>
     <tz-hint>Africa/Dakar</tz-hint>
     <location>
       <_name>Cap-Skirring</_name>
@@ -24319,6 +24602,7 @@
   <country>
     <_name>Seychelles</_name>
     <iso-code>SC</iso-code>
+    <fips-code>SE</fips-code>
     <tz-hint>Indian/Mahe</tz-hint>
     <location>
       <_name>Seychelles International Airport</_name>
@@ -24329,6 +24613,7 @@
   <country>
     <_name>Somalia</_name>
     <iso-code>SO</iso-code>
+    <fips-code>SO</fips-code>
     <tz-hint>Africa/Mogadishu</tz-hint>
     <location>
       <_name>Berbera</_name>
@@ -24354,6 +24639,7 @@
   <country>
     <_name>South Africa</_name>
     <iso-code>ZA</iso-code>
+    <fips-code>SF</fips-code>
     <tz-hint>Africa/Johannesburg</tz-hint>
     <location>
       <_name>Alexander Bay</_name>
@@ -24467,6 +24753,7 @@
   <country>
     <_name>Sierra Leone</_name>
     <iso-code>SL</iso-code>
+    <fips-code>SL</fips-code>
     <tz-hint>Africa/Freetown</tz-hint>
     <location>
       <_name>Lungi</_name>
@@ -24477,6 +24764,7 @@
   <country>
     <_name>Sudan</_name>
     <iso-code>SD</iso-code>
+    <fips-code>SU</fips-code>
     <tz-hint>Africa/Khartoum</tz-hint>
     <location>
       <_name>Khartoum</_name>
@@ -24487,6 +24775,7 @@
   <country>
     <_name>Swaziland</_name>
     <iso-code>SZ</iso-code>
+    <fips-code>WZ</fips-code>
     <tz-hint>Africa/Mbabane</tz-hint>
     <location>
       <_name>Manzini</_name>
@@ -24495,8 +24784,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is "United Republic of Tanzania" -->
     <_name>Tanzania</_name>
     <iso-code>TZ</iso-code>
+    <fips-code>TZ</fips-code>
     <tz-hint>Africa/Dar_es_Salaam</tz-hint>
     <location>
       <_name>Arusha</_name>
@@ -24602,6 +24893,7 @@
   <country>
     <_name>Togo</_name>
     <iso-code>TG</iso-code>
+    <fips-code>TO</fips-code>
     <tz-hint>Africa/Lome</tz-hint>
     <location>
       <_name>Lome</_name>
@@ -24617,6 +24909,7 @@
   <country>
     <_name>Tunisia</_name>
     <iso-code>TN</iso-code>
+    <fips-code>TS</fips-code>
     <tz-hint>Africa/Tunis</tz-hint>
     <location>
       <_name>Bizerte</_name>
@@ -24702,6 +24995,7 @@
   <country>
     <_name>Uganda</_name>
     <iso-code>UG</iso-code>
+    <fips-code>UG</fips-code>
     <tz-hint>Africa/Kampala</tz-hint>
     <location>
       <_name>Arua</_name>
@@ -24760,8 +25054,20 @@
     </location>
   </country>
   <country>
+    <_name>Western Sahara</_name>
+    <iso-code>EH</iso-code>
+    <fips-code>WI</fips-code>
+    <tz-hint>Africa/El_Aaiun</tz-hint>
+    <location>
+      <_name>Villa Cisneros</_name>
+      <code>GSVO</code>
+      <coordinates>23-42N 015-52W</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Zambia</_name>
     <iso-code>ZM</iso-code>
+    <fips-code>ZA</fips-code>
     <tz-hint>Africa/Lusaka</tz-hint>
     <location>
       <_name>Livingstone</_name>
@@ -24787,6 +25093,7 @@
   <country>
     <_name>Zimbabwe</_name>
     <iso-code>ZW</iso-code>
+    <fips-code>ZI</fips-code>
     <tz-hint>Africa/Harare</tz-hint>
     <location>
       <_name>Buffalo Range</_name>
@@ -24833,13 +25140,26 @@
 <region>
   <_name>Australasia &amp; Oceania</_name>
   <country>
+    <_name>American Samoa</_name>
+    <iso-code>AS</iso-code>
+    <fips-code>US60</fips-code>
+    <tz-hint>Pacific/Pago_Pago</tz-hint>
+    <location>
+      <_name>Pago Pago</_name>
+      <code>NSTU</code>
+      <coordinates>14-20S 170-43W</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Australia</_name>
     <iso-code>AU</iso-code>
+    <fips-code>AS</fips-code>
     <!-- FIXME: the tz-hint for each state is correct, but some
          locations need to override the default for their state
       -->
     <state>
      <_name>South Australia</_name>
+     <fips-code>AS05</fips-code>
      <tz-hint>Australia/Adelaide</tz-hint>
      <location>
        <_name>Adelaide</_name>
@@ -24850,6 +25170,7 @@
     </state><!-- /South Australia -->
     <state>
      <_name>Western Australia</_name>
+     <fips-code>AS08</fips-code>
      <tz-hint>Australia/Perth</tz-hint>
      <location>
        <_name>Broome</_name>
@@ -24890,6 +25211,7 @@
     </state><!-- /Western Australia -->
     <state>
      <_name>Northern Territory</_name>
+     <fips-code>AS03</fips-code>
      <tz-hint>Australia/Darwin</tz-hint>
      <location>
        <_name>Alice Springs</_name>
@@ -24915,6 +25237,7 @@
     </state><!-- /NT -->
     <state>
      <_name>New South Wales</_name>
+     <fips-code>AS02</fips-code>
      <tz-hint>Australia/Sydney</tz-hint>
      <location>
        <_name>Dubbo</_name>
@@ -24940,6 +25263,7 @@
     </state><!-- /New South Wales -->
     <state>
      <_name>Queensland</_name>
+     <fips-code>AS04</fips-code>
      <tz-hint>Australia/Brisbane</tz-hint>
      <location>
        <_name>Brisbane</_name>
@@ -24975,6 +25299,7 @@
     </state><!-- /Queensland -->
     <state>
      <_name>Victoria</_name>
+     <fips-code>AS07</fips-code>
      <tz-hint>Australia/Melbourne</tz-hint>
      <location>
        <_name>Avalon</_name>
@@ -24995,6 +25320,7 @@
     </state><!-- /Victoria -->
     <state>
      <_name>Australian Capital Territory</_name>
+     <fips-code>AS01</fips-code>
      <tz-hint>Australia/Melbourne</tz-hint>
      <location>
        <_name>Canberra</_name>
@@ -25005,6 +25331,7 @@
     </state><!-- /ACT -->
     <state>
      <_name>Tasmania</_name>
+     <fips-code>AS06</fips-code>
      <tz-hint>Australia/Hobart</tz-hint>
      <location>
        <_name>Hobart</_name>
@@ -25018,36 +25345,11 @@
        <coordinates>41-32S 147-12E</coordinates>
      </location>
     </state><!-- /Tasmania -->
-    <state>
-     <_name>Australian External Territories</_name>
-     <location>
-       <_name>Norfolk Island</_name>
-       <iso-code>NF</iso-code>
-       <tz-hint>Pacific/Norfolk</tz-hint>
-       <code>YSNF</code>
-       <zone>@IDN10008</zone>
-       <coordinates>29-02S 167-56E</coordinates>
-     </location>
-     <location>
-       <_name>Christmas Island</_name>
-       <iso-code>CX</iso-code>
-       <tz-hint>Indian/Christmas</tz-hint>
-       <code>YPXM</code>
-     </location>
-     <location>
-        <!-- FIXME: remove Keeling? -->
-       <_name>Cocos (Keeling) Island</_name>
-       <iso-code>CC</iso-code>
-       <tz-hint>Indian/Cocos</tz-hint>
-       <code>YPCC</code>
-       <zone>@IDW10600</zone>
-       <coordinates>12-30S 96-50E</coordinates>
-     </location>
-    </state>
   </country>
   <country>
    <_name>British Indian Ocean Territory</_name>
     <iso-code>IO</iso-code>
+    <fips-code>IO</fips-code>
     <tz-hint>Indian/Chagos</tz-hint>
     <location>
       <_name>Diego Garcia</_name>
@@ -25056,15 +25358,35 @@
     </location>
   </country>
   <country>
+    <_name>Christmas Island</_name>
+    <iso-code>CX</iso-code>
+    <fips-code>KT</fips-code>
+    <tz-hint>Indian/Christmas</tz-hint>
+    <location>
+      <_name>Christmas Island</_name>
+      <code>YPXM</code>
+      <coordinates>10-26S 105-41E</coordinates>
+    </location>
+  </country>
+  <country>
+    <!-- This is actually the correct ISO 3166 short English name of the territoy, parentheses and all. -->
+    <_name>Cocos (Keeling) Islands</_name>
+    <iso-code>CC</iso-code>
+    <fips-code>CK</fips-code>
+    <tz-hint>Indian/Cocos</tz-hint>
+    <location>
+      <_name>Cocos Island</_name>
+      <code>YPCC</code>
+      <zone>@IDW10600</zone>
+      <coordinates>12-30S 96-50E</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Cook Islands</_name>
     <iso-code>CK</iso-code>
+    <fips-code>CW</fips-code>
     <tz-hint>Pacific/Rarotonga</tz-hint>
     <location>
-      <_name>Alofi / Niue</_name>
-      <code>NIUE</code>
-      <coordinates>19-04S 169-55W</coordinates>
-    </location>
-    <location>
       <_name>Rarotonga</_name>
       <code>NCRG</code>
       <coordinates>21-12S 159-49W</coordinates>
@@ -25073,6 +25395,7 @@
   <country>
     <_name>Fiji</_name>
     <iso-code>FJ</iso-code>
+    <fips-code>FJ</fips-code>
     <tz-hint>Pacific/Fiji</tz-hint>
     <location>
       <_name>Nandi</_name>
@@ -25088,6 +25411,7 @@
   <country>
     <_name>Guam</_name>
     <iso-code>GU</iso-code>
+    <fips-code>US66</fips-code>
     <tz-hint>Pacific/Guam</tz-hint>
     <location>
       <_name>Agana</_name>
@@ -25109,15 +25433,11 @@
       <code>PGWT</code>
       <coordinates>14-59N 145-37E</coordinates>
     </location>
-    <location>
-      <_name>Wake Island</_name>
-      <code>PWAK</code>
-      <coordinates>19-17N 166-39E</coordinates>
-    </location>
   </country>
   <country>
     <_name>Indonesia</_name>
     <iso-code>ID</iso-code>
+    <fips-code>ID</fips-code>
     <tz-hint>Asia/Jakarta</tz-hint>
     <location>
       <_name>Biak / Mokmer</_name>
@@ -25145,6 +25465,7 @@
   <country>
     <_name>Kiribati</_name>
     <iso-code>KI</iso-code>
+    <fips-code>KR</fips-code>
     <tz-hint>Pacific/Tarawa</tz-hint>
     <location>
       <_name>Tarawa</_name>
@@ -25160,6 +25481,8 @@
   <country>
     <_name>Marshall Islands</_name>
     <iso-code>MH</iso-code>
+    <fips-code>RM</fips-code>
+    <fips-code>US68</fips-code>
     <tz-hint>Pacific/Majuro</tz-hint>
     <location>
       <_name>Kwajalein</_name>
@@ -25179,9 +25502,10 @@
     </location>
   </country>
   <country>
-    <!-- FIXME: rename this to Micronesia? -->
     <_name>Micronesia, Federated States of</_name>
     <iso-code>FM</iso-code>
+    <fips-code>FM</fips-code>
+    <fips-code>US64</fips-code>
     <location>
       <_name>Kosrae Island</_name>
       <tz-hint>Pacific/Kosrae</tz-hint>
@@ -25216,6 +25540,7 @@
   <country>
     <_name>New Caledonia</_name>
     <iso-code>NC</iso-code>
+    <fips-code>NC</fips-code>
     <tz-hint>Pacific/Noumea</tz-hint>
     <location>
       <!-- Nlle is the abbreviation for "nouvelle", ("new"), and the first "e" of Caledonie should have an acute accent. --> 
@@ -25227,6 +25552,7 @@
   <country>
     <_name>New Zealand</_name>
     <iso-code>NZ</iso-code>
+    <fips-code>NZ</fips-code>
     <tz-hint>Pacific/Auckland</tz-hint>
     <location>
       <_name>Auckland</_name>
@@ -25340,8 +25666,32 @@
     </location>
   </country>
   <country>
+    <_name>Niue</_name>
+    <iso-code>NU</iso-code>
+    <fips-code>NE</fips-code>
+    <tz-hint>Pacific/Niue</tz-hint>
+    <location>
+      <_name>Alofi / Niue</_name>
+      <code>NIUE</code>
+      <coordinates>19-04S 169-55W</coordinates>
+    </location>
+  </country>
+  <country>
+    <_name>Norfolk Island</_name>
+    <iso-code>NF</iso-code>
+    <fips-code>NF</fips-code>
+    <tz-hint>Pacific/Norfolk</tz-hint>
+    <location>
+      <_name>Norfolk Island</_name>
+      <code>YSNF</code>
+      <zone>@IDN10008</zone>
+      <coordinates>29-02S 167-56E</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Northern Mariana Islands</_name>
     <iso-code>MP</iso-code>
+    <fips-code>US69</fips-code>
     <tz-hint>Pacific/Saipan</tz-hint>
     <location>
       <_name>Saipan Island</_name>
@@ -25352,6 +25702,7 @@
   <country>
     <_name>Palau</_name>
     <iso-code>PW</iso-code>
+    <fips-code>PS|US70</fips-code>
     <tz-hint>Pacific/Palau</tz-hint>
     <location>
       <_name>Babelthuap Island</_name>
@@ -25367,6 +25718,7 @@
   <country>
     <_name>Papua New Guinea</_name>
     <iso-code>PG</iso-code>
+    <fips-code>PP</fips-code>
     <tz-hint>Pacific/Port_Moresby</tz-hint>
     <location>
       <_name>Manus Island/Momote</_name>
@@ -25382,6 +25734,7 @@
   <country>
     <_name>Samoa</_name>
     <iso-code>WS</iso-code>
+    <fips-code>WS</fips-code>
     <tz-hint>Pacific/Apia</tz-hint>
     <location>
       <_name>Faleolo Intl / Apia</_name>
@@ -25392,6 +25745,7 @@
   <country>
     <_name>Solomon Islands</_name>
     <iso-code>SB</iso-code>
+    <fips-code>BP</fips-code>
     <tz-hint>Pacific/Guadalcanal</tz-hint>
     <location>
       <_name>Honiara / Henderson</_name>
@@ -25402,6 +25756,7 @@
   <country>
     <_name>Tonga</_name>
     <iso-code>TO</iso-code>
+    <fips-code>TN</fips-code>
     <tz-hint>Pacific/Tongatapu</tz-hint>
     <location>
       <_name>Fua'Amotu</_name>
@@ -25417,6 +25772,7 @@
   <country>
     <_name>Tuvalu</_name>
     <iso-code>TV</iso-code>
+    <fips-code>TV</fips-code>
     <tz-hint>Pacific/Funafuti</tz-hint>
     <location>
       <_name>Funafuti</_name>
@@ -25427,21 +25783,26 @@
   <country>
     <_name>United States Minor Outlying Islands</_name>
     <iso-code>UM</iso-code>
+    <fips-code>US74</fips-code>
     <location>
-      <!-- FIXME: Pago Pago is in American Samoa, which is not part of
-           the "United States Minor Outlying Islands". Fix on head
-           after branch, when we can add new strings.
-        -->
-      <_name>Pago Pago</_name>
-      <iso-code>AS</iso-code>
-      <tz-hint>Pacific/Pago_Pago</tz-hint>
-      <code>NSTU</code>
-      <coordinates>14-20S 170-43W</coordinates>
+      <!-- Translators: This is in the United States Minor Outlying Islands. -->
+      <_name>Sand Island</_name>
+      <tz-hint>Pacific/Midway</tz-hint>
+      <code>PMDY</code>
+      <coordinates>28-13N 177-22W</coordinates>
     </location>
+    <location>
+        <!-- Translators: This is in the United States Minor Outlying Islands. -->
+      <_name>Wake Island</_name>
+      <tz-hint>Pacific/Wake</tz-hint>
+      <code>PWAK</code>
+      <coordinates>19-17N 166-39E</coordinates>
+    </location>
   </country>
   <country>
     <_name>Vanuatu</_name>
     <iso-code>VU</iso-code>
+    <fips-code>NH</fips-code>
     <tz-hint>Pacific/Efate</tz-hint>
     <location>
       <_name>Bauerfield Efate</_name>
@@ -25464,12 +25825,29 @@
       <coordinates>13-51S 167-33E</coordinates>
     </location>
   </country>
+  <country>
+    <_name>Wallis and Futuna</_name>
+    <iso-code>WF</iso-code>
+    <fips-code>WF</fips-code>
+    <tz-hint>Pacific/Wallis</tz-hint>
+    <city>
+      <!-- Translators: This is in Wallis and Futuna -->
+      <_name>Île Wallis</_name>
+      <location>
+        <!-- Translators: This is in Île Wallis in Wallis and Futuna. -->
+        <_name>Hihifo</_name>
+        <code>NLWW</code>
+        <coordinates>13-14S 176-10W</coordinates>
+      </location>
+    </city>
+  </country>
 </region>
 <region>
   <_name>Asia</_name>
   <country>
     <_name>Armenia</_name>
     <iso-code>AM</iso-code>
+    <fips-code>AM</fips-code>
     <tz-hint>Asia/Yerevan</tz-hint>
     <location>
       <_name>Yerevan</_name>
@@ -25480,6 +25858,7 @@
   <country>
     <_name>Afghanistan</_name>
     <iso-code>AF</iso-code>
+    <fips-code>AF</fips-code>
     <tz-hint>Asia/Kabul</tz-hint>
     <location>
       <_name>Herat</_name>
@@ -25495,6 +25874,7 @@
   <country>
     <_name>Philippines</_name>
     <iso-code>PH</iso-code>
+    <fips-code>RP</fips-code>
     <tz-hint>Asia/Manila</tz-hint>
     <location>
       <_name>Clarkfield Pampanga</_name>
@@ -25533,8 +25913,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name includes a space, though it is also frequently written without one. -->
     <_name>Viet Nam</_name>
     <iso-code>VN</iso-code>
+    <fips-code>VM</fips-code>
     <tz-hint>Asia/Ho_Chi_Minh</tz-hint>
     <location>
       <_name>Da Nang</_name>
@@ -25553,8 +25935,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is "Republic of Korea" -->
     <_name>South Korea</_name>
     <iso-code>KR</iso-code>
+    <fips-code>KS</fips-code>
     <tz-hint>Asia/Seoul</tz-hint>
     <location>
       <_name>Cheju</_name>
@@ -25633,8 +26017,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is "Democratic People's Republic of Korea" -->
     <_name>North Korea</_name>
     <iso-code>KP</iso-code>
+    <fips-code>KN</fips-code>
     <tz-hint>Asia/Pyongyang</tz-hint>
     <!-- No METAR info available (checked 2005-04-06)
     <location>
@@ -25652,6 +26038,7 @@
   <country>
     <_name>Hong Kong</_name>
     <iso-code>HK</iso-code>
+    <fips-code>HK</fips-code>
     <tz-hint>Asia/Hong_Kong</tz-hint>
     <!-- No METAR info available (checked 2005-04-06)
     <location>
@@ -25669,6 +26056,7 @@
   <country>
     <_name>Pakistan</_name>
     <iso-code>PK</iso-code>
+    <fips-code>PK</fips-code>
     <tz-hint>Asia/Karachi</tz-hint>
     <location>
       <_name>Islamabad</_name>
@@ -25704,6 +26092,7 @@
   <country>
     <_name>Georgia</_name>
     <iso-code>GE</iso-code>
+    <fips-code>GG</fips-code>
     <tz-hint>Asia/Tbilisi</tz-hint>
     <location>
       <_name>Tbilisi</_name>
@@ -25714,6 +26103,7 @@
   <country>
     <_name>India</_name>
     <iso-code>IN</iso-code>
+    <fips-code>IN</fips-code>
     <tz-hint>Asia/Kolkata</tz-hint>
     <location>
       <_name>Ahmadabad</_name>
@@ -25794,6 +26184,7 @@
   <country>
     <_name>Nepal</_name>
     <iso-code>NP</iso-code>
+    <fips-code>NP</fips-code>
     <tz-hint>Asia/Katmandu</tz-hint>
     <location>
       <_name>Kathmandu</_name>
@@ -25802,8 +26193,9 @@
     </location>
   </country>
   <country>
-    <_name>People's Republic of China</_name>
+    <_name>China</_name>
     <iso-code>CN</iso-code>
+    <fips-code>CH</fips-code>
     <tz-hint>Asia/Shanghai</tz-hint>
     <city>
       <!-- Translators: This is the capital of China -->
@@ -25854,6 +26246,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Jilin</_name>
+      <fips-code>CH05</fips-code>
       <location>
         <!-- Translators: This is in Jilin province in China -->
         <_name>Changchun</_name>
@@ -25869,6 +26262,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Hunan</_name>
+      <fips-code>CH11</fips-code>
       <city>
         <!-- Translators: This is in Hunan province in China -->
         <_name>Changsha</_name>
@@ -25890,6 +26284,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Sichuan</_name>
+      <fips-code>CH32</fips-code>
       <city>
         <!-- Translators: This is in Sichuan province in China -->
         <_name>Chengdu</_name>
@@ -25909,6 +26304,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Liaoning</_name>
+      <fips-code>CH19</fips-code>
       <location>
         <!-- Translators: This is in Liaoning province in China -->
         <_name>Dalian</_name>
@@ -25925,6 +26321,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Fujian</_name>
+      <fips-code>CH07</fips-code>
       <location>
         <_name>Xiamen</_name>
         <code>ZSAM</code>
@@ -25944,6 +26341,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Guangdong</_name>
+      <fips-code>CH30</fips-code>
       <location>
         <!-- Translators: This is in Guangdong province in China -->
         <_name>Guangzhou</_name>
@@ -25966,6 +26364,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Guangxi</_name>
+      <fips-code>CH16</fips-code>
       <location>
         <!-- Translators: This is in Guangxi province in China -->
         <_name>Guilin</_name>
@@ -25982,6 +26381,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Guizhou</_name>
+      <fips-code>CH18</fips-code>
       <location>
         <!-- Translators: This is in Guizhou province in China -->
         <_name>Guiyang</_name>
@@ -25992,6 +26392,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Hainan</_name>
+      <fips-code>CH31</fips-code>
       <city>
         <!-- Translators: This is in Hainan province in China -->
         <_name>Sanya</_name>
@@ -26009,6 +26410,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Xinjiang</_name>
+      <fips-code>CH13</fips-code>
       <!-- No METAR info available (checked 2005-04-06)
       <location>
         <_name>Hami</_name>
@@ -26032,6 +26434,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Zhejiang</_name>
+      <fips-code>CH02</fips-code>
       <location>
         <!-- Translators: This is in Zhejiang province in China -->
         <_name>Hangzhou</_name>
@@ -26047,6 +26450,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Heilongjiang</_name>
+      <fips-code>CH08</fips-code>
       <location>
         <!-- Translators: This is in Heilongjiang province in China -->
         <_name>Harbin</_name>
@@ -26068,6 +26472,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Inner Mongolia</_name>
+      <fips-code>CH20</fips-code>
       <!-- No METAR info available (checked 2005-04-06)
       <location>
         <_name>Hailar Airport</_name>
@@ -26085,6 +26490,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Anhui</_name>
+      <fips-code>CH01</fips-code>
       <location>
         <!-- Translators: This is in Anhui province in China -->
         <_name>Hefei</_name>
@@ -26093,9 +26499,9 @@
       </location>
     </state>
     <state>
-      <!-- FIXME: rename this to Shandong -->
       <!-- Translators: This is a province in China -->
-      <_name>Shantong</_name>
+      <_name>Shandong</_name>
+      <fips-code>CH25</fips-code>
       <!-- ZSTN and ZSJN are very near, weather.noaa.gov only knows ZSJN
       <location>
         <_name>Jinan</_name>
@@ -26128,6 +26534,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Gansu</_name>
+      <fips-code>CH15</fips-code>
       <city>
          <!-- Translators: This is in Gansu province in China -->
          <_name>Lanzhou</_name>
@@ -26142,6 +26549,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Yunnan</_name>
+      <fips-code>CH29</fips-code>
       <city>
         <!-- Translators: This is in Yunnan province in China -->
       	<_name>Kunming</_name>
@@ -26160,6 +26568,7 @@
     <state>
       <!-- Translators: This is a province in China -->
       <_name>Shaanxi</_name>
+      <fips-code>CH26</fips-code>
       <location>
         <!-- Translators: This is in Shaanxi province in China -->
         <_name>Xian/Xianyang</_name>
@@ -26190,6 +26599,7 @@
   <country>
     <_name>Japan</_name>
     <iso-code>JP</iso-code>
+    <fips-code>JA</fips-code>
     <tz-hint>Asia/Tokyo</tz-hint>
     <location>
       <_name>Akeno Ab</_name>
@@ -26725,6 +27135,7 @@
   <country>
     <_name>Kazakhstan</_name>
     <iso-code>KZ</iso-code>
+    <fips-code>KZ</fips-code>
     <tz-hint>Asia/Almaty</tz-hint>
     <location>
       <_name>Aktau</_name>
@@ -26782,6 +27193,7 @@
   <country>
     <_name>Malaysia</_name>
     <iso-code>MY</iso-code>
+    <fips-code>MY</fips-code>
     <tz-hint>Asia/Kuala_Lumpur</tz-hint>
     <location>
       <_name>Alor Setar</_name>
@@ -26885,6 +27297,7 @@
   <country>
     <_name>Mongolia</_name>
     <iso-code>MN</iso-code>
+    <fips-code>MG</fips-code>
     <tz-hint>Asia/Ulaanbaatar</tz-hint>
     <location>
       <_name>Ulan Bator</_name>
@@ -26893,9 +27306,10 @@
     </location>
   </country>
   <country>
-    <!-- FIXME: rename this to Burma? -->
+    <!-- Also known as Burma, but "Myanmar" is currently the official ISO 3166 short English name -->
     <_name>Myanmar</_name>
     <iso-code>MM</iso-code>
+    <fips-code>BM</fips-code>
     <tz-hint>Asia/Rangoon</tz-hint>
     <location>
       <_name>Yangon</_name>
@@ -26906,6 +27320,7 @@
   <country>
     <_name>Singapore</_name>
     <iso-code>SG</iso-code>
+    <fips-code>SN</fips-code>
     <tz-hint>Asia/Singapore</tz-hint>
     <location>
       <_name>Singapore/Changi Airport</_name>
@@ -26921,6 +27336,7 @@
   <country>
     <_name>Sri Lanka</_name>
     <iso-code>LK</iso-code>
+    <fips-code>CE</fips-code>
     <tz-hint>Asia/Colombo</tz-hint>
     <location>
       <_name>Katunayake</_name>
@@ -26931,6 +27347,7 @@
   <country>
     <_name>Tajikistan</_name>
     <iso-code>TJ</iso-code>
+    <fips-code>TI</fips-code>
     <tz-hint>Asia/Dushanbe</tz-hint>
     <location>
       <_name>Dushanbe</_name>
@@ -26941,6 +27358,7 @@
   <country>
     <_name>Thailand</_name>
     <iso-code>TH</iso-code>
+    <fips-code>TH</fips-code>
     <tz-hint>Asia/Bangkok</tz-hint>
     <city>
       <!-- Translators: This is in Thailand. -->
@@ -27079,8 +27497,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is "Taiwan, Province of China" -->
     <_name>Taiwan</_name>
     <iso-code>TW</iso-code>
+    <fips-code>TW</fips-code>
     <tz-hint>Asia/Taipei</tz-hint>
     <location>
       <_name>Chiang Kai Shek</_name>
@@ -27101,6 +27521,7 @@
   <country>
     <_name>Turkmenistan</_name>
     <iso-code>TM</iso-code>
+    <fips-code>TX</fips-code>
     <tz-hint>Asia/Ashgabat</tz-hint>
     <location>
       <_name>Ashgabat</_name>
@@ -27111,6 +27532,7 @@
   <country>
     <_name>Maldives</_name>
     <iso-code>MV</iso-code>
+    <fips-code>MV</fips-code>
     <tz-hint>Indian/Maldives</tz-hint>
     <location>
       <_name>Male</_name>
@@ -27121,6 +27543,7 @@
   <country>
     <_name>Azerbaijan</_name>
     <iso-code>AZ</iso-code>
+    <fips-code>AJ</fips-code>
     <tz-hint>Asia/Baku</tz-hint>
     <location>
       <_name>Baku</_name>
@@ -27136,6 +27559,7 @@
   <country>
     <_name>Bangladesh</_name>
     <iso-code>BD</iso-code>
+    <fips-code>BG</fips-code>
     <tz-hint>Asia/Dhaka</tz-hint>
     <location>
       <_name>Chittagong Patenga</_name>
@@ -27149,8 +27573,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is "Brunei Darussalam" -->
     <_name>Brunei</_name>
     <iso-code>BN</iso-code>
+    <fips-code>BX</fips-code>
     <tz-hint>Asia/Brunei</tz-hint>
     <location>
       <_name>Brunei</_name>
@@ -27161,6 +27587,7 @@
   <country>
     <_name>Kyrgyzstan</_name>
     <iso-code>KG</iso-code>
+    <fips-code>KG</fips-code>
     <tz-hint>Asia/Bishkek</tz-hint>
     <location>
       <_name>Bishkek</_name>
@@ -27169,8 +27596,10 @@
     </location>
   </country>
   <country>
+    <!-- The official ISO 3166 short English name is "Lao People's Democratic Republic" -->
     <_name>Laos</_name>
     <iso-code>LA</iso-code>
+    <fips-code>LA</fips-code>
     <tz-hint>Asia/Vientiane</tz-hint>
     <location>
       <_name>Vientiane</_name>
@@ -27181,6 +27610,7 @@
   <country>
     <_name>Macau</_name>
     <iso-code>MO</iso-code>
+    <fips-code>MC</fips-code>
     <tz-hint>Asia/Macau</tz-hint>
     <location>
       <_name>Taipa</_name>
@@ -27191,6 +27621,7 @@
   <country>
     <_name>Uzbekistan</_name>
     <iso-code>UZ</iso-code>
+    <fips-code>UZ</fips-code>
     <tz-hint>Asia/Tashkent</tz-hint>
     <location>
       <_name>Nukus / Karakalpakstan</_name>
@@ -27221,6 +27652,7 @@
   <country>
     <_name>Cambodia</_name>
     <iso-code>KH</iso-code>
+    <fips-code>CB</fips-code>
     <tz-hint>Asia/Phnom_Penh</tz-hint>
     <location>
       <_name>Phnom-Penh / Pochentong</_name>
@@ -27239,6 +27671,7 @@
   <country>
     <_name>Aruba</_name>
     <iso-code>AW</iso-code>
+    <fips-code>AA</fips-code>
     <tz-hint>America/Aruba</tz-hint>
     <location>
       <_name>Queen Beatrix Airport</_name>
@@ -27249,6 +27682,7 @@
   <country>
     <_name>Bahamas</_name>
     <iso-code>BS</iso-code>
+    <fips-code>BF</fips-code>
     <tz-hint>America/Nassau</tz-hint>
     <location>
       <_name>Freeport</_name>
@@ -27269,6 +27703,7 @@
   <country>
     <_name>Belize</_name>
     <iso-code>BZ</iso-code>
+    <fips-code>BH</fips-code>
     <tz-hint>America/Belize</tz-hint>
     <location>
       <_name>Belize</_name>
@@ -27279,6 +27714,7 @@
   <country>
     <_name>Bermuda</_name>
     <iso-code>BM</iso-code>
+    <fips-code>BD</fips-code>
     <tz-hint>Atlantic/Bermuda</tz-hint>
     <location>
       <_name>Bermuda</_name>
@@ -27289,6 +27725,7 @@
   <country>
     <_name>British Virgin Islands</_name>
     <iso-code>VG</iso-code>
+    <fips-code>VI</fips-code>
     <tz-hint>America/Tortola</tz-hint>
     <location>
       <_name>Beef Island, Tortola</_name>
@@ -27299,6 +27736,7 @@
   <country>
     <_name>Cayman Islands</_name>
     <iso-code>KY</iso-code>
+    <fips-code>CJ</fips-code>
     <tz-hint>America/Cayman</tz-hint>
     <location>
       <_name>Cayman Brac</_name>
@@ -27314,6 +27752,7 @@
   <country>
     <_name>Cuba</_name>
     <iso-code>CU</iso-code>
+    <fips-code>CU</fips-code>
     <tz-hint>America/Havana</tz-hint>
     <location>
       <_name>Airport Jose Martí, Rancho-Boyeros, Habana</_name>
@@ -27400,6 +27839,7 @@
   <country>
     <_name>Costa Rica</_name>
     <iso-code>CR</iso-code>
+    <fips-code>CS</fips-code>
     <tz-hint>America/Costa_Rica</tz-hint>
     <location>
       <_name>Juan Santamaría</_name>
@@ -27425,6 +27865,7 @@
   <country>
     <_name>Dominican Republic</_name>
     <iso-code>DO</iso-code>
+    <fips-code>DR</fips-code>
     <tz-hint>America/Santo_Domingo</tz-hint>
     <location>
       <_name>Herrera</_name>
@@ -27460,6 +27901,7 @@
   <country>
     <_name>El Salvador</_name>
     <iso-code>SV</iso-code>
+    <fips-code>ES</fips-code>
     <tz-hint>America/El_Salvador</tz-hint>
     <location>
       <_name>Acajutla</_name>
@@ -27490,6 +27932,7 @@
   <country>
     <_name>French Polynesia</_name>
     <iso-code>PF</iso-code>
+    <fips-code>FP</fips-code>
     <tz-hint>Pacific/Tahiti</tz-hint>
     <location>
       <_name>Tahiti-Faaa</_name>
@@ -27500,6 +27943,7 @@
   <country>
     <_name>Grenada</_name>
     <iso-code>GD</iso-code>
+    <fips-code>GJ</fips-code>
     <tz-hint>America/Grenada</tz-hint>
     <location>
       <_name>Point Salines</_name>
@@ -27510,6 +27954,7 @@
   <country>
     <_name>Guadeloupe</_name>
     <iso-code>GP</iso-code>
+    <fips-code>GP</fips-code>
     <tz-hint>America/Guadeloupe</tz-hint>
     <location>
       <_name>Le Raizet, Guadeloupe</_name>
@@ -27520,6 +27965,7 @@
   <country>
     <_name>Guatemala</_name>
     <iso-code>GT</iso-code>
+    <fips-code>GT</fips-code>
     <tz-hint>America/Guatemala</tz-hint>
     <location>
       <_name>La Aurora Airport</_name>
@@ -27550,6 +27996,7 @@
   <country>
     <_name>Guyana</_name>
     <iso-code>GY</iso-code>
+    <fips-code>GY</fips-code>
     <tz-hint>America/Guyana</tz-hint>
     <location>
       <_name>Georgetown/Cheddi Jagan International Airport</_name>
@@ -27560,6 +28007,7 @@
   <country>
     <_name>Haiti</_name>
     <iso-code>HT</iso-code>
+    <fips-code>HA</fips-code>
     <tz-hint>America/Port-au-Prince</tz-hint>
     <location>
       <_name>Cap-Haitien</_name>
@@ -27575,6 +28023,7 @@
   <country>
     <_name>Honduras</_name>
     <iso-code>HN</iso-code>
+    <fips-code>HO</fips-code>
     <tz-hint>America/Tegucigalpa</tz-hint>
     <location>
       <_name>Amapala</_name>
@@ -27654,6 +28103,7 @@
   <country>
     <_name>Jamaica</_name>
     <iso-code>JM</iso-code>
+    <fips-code>JM</fips-code>
     <tz-hint>America/Jamaica</tz-hint>
     <location>
       <_name>Kingston/Norman Manley</_name>
@@ -27674,6 +28124,7 @@
   <country>
     <_name>Martinique</_name>
     <iso-code>MQ</iso-code>
+    <fips-code>MB</fips-code>
     <tz-hint>America/Martinique</tz-hint>
     <location>
       <_name>Le Lamentin</_name>
@@ -27684,6 +28135,7 @@
   <country>
     <_name>Netherlands Antilles</_name>
     <iso-code>AN</iso-code>
+    <fips-code>NT</fips-code>
     <tz-hint>America/Curacao</tz-hint>
     <location>
       <_name>Bonaire</_name>
@@ -27709,6 +28161,7 @@
   <country>
     <_name>Nicaragua</_name>
     <iso-code>NI</iso-code>
+    <fips-code>NU</fips-code>
     <tz-hint>America/Managua</tz-hint>
     <location>
       <_name>Bluefields</_name>
@@ -27747,8 +28200,10 @@
     </location>
   </country>
   <country>
-    <_name>Panamá</_name>
+    <!-- In Spanish, this is spelled "Panamá". The official ISO 3166 short English name does not have the accent -->
+    <_name>Panama</_name>
     <iso-code>PA</iso-code>
+    <fips-code>PM</fips-code>
     <tz-hint>America/Panama</tz-hint>
     <location>
       <_name>Bocas Del Toro International</_name>
@@ -27788,6 +28243,7 @@
   <country>
     <_name>Saint Lucia</_name>
     <iso-code>LC</iso-code>
+    <fips-code>ST</fips-code>
     <tz-hint>America/St_Lucia</tz-hint>
     <location>
       <_name>Hewanorra</_name>
@@ -27803,6 +28259,7 @@
   <country>
     <_name>Saint Vincent and the Grenadines</_name>
     <iso-code>VC</iso-code>
+    <fips-code>VC</fips-code>
     <tz-hint>America/St_Vincent</tz-hint>
     <location>
       <_name>Arnos Vale</_name>
@@ -27813,6 +28270,7 @@
   <country>
     <_name>Trinidad and Tobago</_name>
     <iso-code>TT</iso-code>
+    <fips-code>TD</fips-code>
     <tz-hint>America/Port_of_Spain</tz-hint>
     <location>
       <_name>Crown Pt./ Scarborou</_name>
@@ -27828,6 +28286,7 @@
   <country>
     <_name>Turks and Caicos Islands</_name>
     <iso-code>TC</iso-code>
+    <fips-code>TK</fips-code>
     <tz-hint>America/Grand_Turk</tz-hint>
     <location>
       <_name>Providenciales</_name>
@@ -27838,6 +28297,7 @@
   <country>
     <_name>Bolivia</_name>
     <iso-code>BO</iso-code>
+    <fips-code>BL</fips-code>
     <tz-hint>America/La_Paz</tz-hint>
     <location>
       <_name>Ascensión De Guarayos</_name>
@@ -27993,6 +28453,7 @@
   <country>
     <_name>Chile</_name>
     <iso-code>CL</iso-code>
+    <fips-code>CI</fips-code>
     <tz-hint>America/Santiago</tz-hint>
     <location>
       <_name>Antofagasta</_name>
@@ -28068,6 +28529,7 @@
   <country>
     <_name>Colombia</_name>
     <iso-code>CO</iso-code>
+    <fips-code>CO</fips-code>
     <tz-hint>America/Bogota</tz-hint>
     <location>
       <_name>Apartado/Los Cedros</_name>
@@ -28208,6 +28670,7 @@
   <country>
     <_name>Ecuador</_name>
     <iso-code>EC</iso-code>
+    <fips-code>EC</fips-code>
     <tz-hint>America/Guayaquil</tz-hint>
     <location>
       <_name>Guayaquil/Simón Bolívar</_name>
@@ -28233,6 +28696,7 @@
   <country>
     <_name>French Guiana</_name>
     <iso-code>GF</iso-code>
+    <fips-code>FG</fips-code>
     <tz-hint>America/Cayenne</tz-hint>
     <location>
       <_name>Cayenne / Rochambeau</_name>
@@ -28243,6 +28707,7 @@
   <country>
     <_name>Paraguay</_name>
     <iso-code>PY</iso-code>
+    <fips-code>PA</fips-code>
     <tz-hint>America/Asuncion</tz-hint>
     <location>
       <_name>Asunción</_name>
@@ -28258,6 +28723,7 @@
   <country>
     <_name>Peru</_name>
     <iso-code>PE</iso-code>
+    <fips-code>PE</fips-code>
     <tz-hint>America/Lima</tz-hint>
     <location>
       <_name>Andahuayla</_name>
@@ -28346,8 +28812,9 @@
     </location>
   </country>
   <country>
-    <_name>South Georgia and the Islands</_name>
+    <_name>South Georgia and the South Sandwich Islands</_name>
     <iso-code>GS</iso-code>
+    <fips-code>SX</fips-code>
     <tz-hint>Atlantic/South_Georgia</tz-hint>
     <location>
       <_name>Mount Pleasant</_name>
@@ -28358,6 +28825,7 @@
   <country>
     <_name>Suriname</_name>
     <iso-code>SR</iso-code>
+    <fips-code>NS</fips-code>
     <tz-hint>America/Paramaribo</tz-hint>
     <location>
       <_name>Johan A. Pengel</_name>
@@ -28368,6 +28836,7 @@
   <country>
     <_name>Uruguay</_name>
     <iso-code>UY</iso-code>
+    <fips-code>UY</fips-code>
     <tz-hint>America/Montevideo</tz-hint>
     <location>
       <_name>Artigas</_name>
@@ -28428,6 +28897,7 @@
   <country>
     <_name>Venezuela</_name>
     <iso-code>VE</iso-code>
+    <fips-code>VE</fips-code>
     <tz-hint>America/Caracas</tz-hint>
     <location>
       <_name>Acarigua</_name>
@@ -28608,6 +29078,7 @@
   <country>
     <_name>Argentina</_name>
     <iso-code>AR</iso-code>
+    <fips-code>AR</fips-code>
     <tz-hint>America/Argentina/Buenos_Aires</tz-hint>
     <location>
       <_name>Aeroparque</_name>
@@ -28848,6 +29319,7 @@
   <country>
     <_name>Brazil</_name>
     <iso-code>BR</iso-code>
+    <fips-code>BR</fips-code>
     <!-- FIXME: This tz-hint is correct for most of Brazil (by area),
          but not all of it. Someone should split the cities up by
          state and assign a tz-hint to each state.
@@ -29109,8 +29581,20 @@
   <!-- FIXME: rename this to Atlantic Ocean -->
   <_name>Atlantic</_name>
   <country>
+    <_name>Anguilla</_name>
+    <iso-code>AI</iso-code>
+    <fips-code>AV</fips-code>
+    <tz-hint>America/Anguilla</tz-hint>
+    <location>
+      <_name>Wallblake Airport</_name>
+      <code>TQPF</code>
+      <coordinates>18-12-17N 063-03-18W</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Antigua and Barbuda</_name>
     <iso-code>AG</iso-code>
+    <fips-code>AC</fips-code>
     <tz-hint>America/Antigua</tz-hint>
     <location>
       <_name>Antigua</_name>
@@ -29126,6 +29610,7 @@
   <country>
     <_name>Dominica</_name>
     <iso-code>DM</iso-code>
+    <fips-code>DO</fips-code>
     <tz-hint>America/Dominica</tz-hint>
     <location>
       <_name>Canefield</_name>
@@ -29139,8 +29624,21 @@
     </location>
   </country>
   <country>
+    <!-- This is the official ISO 3166 short English name; the British name is "Falkland Islands" and the Argentine name is "Islas Malvinas" -->
+    <_name>Falkland Islands (Malvinas)</_name>
+    <iso-code>FK</iso-code>
+    <fips-code>FK</fips-code>
+    <tz-hint>Atlantic/Stanley</tz-hint>
+    <location>
+      <_name>Stanley Airport</_name>
+      <code>SFAL</code>
+      <coordinates>51-41S 057-46W</coordinates>
+    </location>
+  </country>
+  <country>
     <_name>Greenland</_name>
     <iso-code>GL</iso-code>
+    <fips-code>GL</fips-code>
     <!-- FIXME: parts of Greenland are on other time zones -->
     <tz-hint>America/Godthab</tz-hint>
     <location>
@@ -29183,6 +29681,7 @@
   <country>
     <_name>Puerto Rico</_name>
     <iso-code>PR</iso-code>
+    <fips-code>US72</fips-code>
     <tz-hint>America/Puerto_Rico</tz-hint>
       <location>
         <_name>Aquadilla</_name>
@@ -29218,6 +29717,7 @@
   <country>
     <_name>Saint Helena</_name>
     <iso-code>SH</iso-code>
+    <fips-code>SH</fips-code>
     <tz-hint>Atlantic/St_Helena</tz-hint>
     <location>
       <_name>Wide Awake Field Ascension Island</_name>
@@ -29226,8 +29726,9 @@
     </location>
   </country>
   <country>
-    <_name>Virgin Islands</_name>
+    <_name>United States Virgin Islands</_name>
     <iso-code>VI</iso-code>
+    <fips-code>US78</fips-code>
     <tz-hint>America/St_Thomas</tz-hint>
     <location>
       <_name>Charlotte Amalie St. Thomas</_name>
@@ -29243,6 +29744,7 @@
   <country>
     <_name>Barbados</_name>
     <iso-code>BB</iso-code>
+    <fips-code>BB</fips-code>
     <tz-hint>America/Barbados</tz-hint>
     <location>
       <_name>Grantley Adams</_name>
@@ -29253,6 +29755,7 @@
   <country>
     <_name>Saint Kitts and Nevis</_name>
     <iso-code>KN</iso-code>
+    <fips-code>SC</fips-code>
     <tz-hint>America/St_Kitts</tz-hint>
     <location>
       <_name>Golden Rock</_name>
@@ -29266,6 +29769,7 @@
   <country>
     <_name>Antarctica</_name>
     <iso-code>AQ</iso-code>
+    <fips-code>AY</fips-code>
     <location>
       <_name>Amundsen-Scott South Pole Station</_name>
       <tz-hint>Antarctica/South_Pole</tz-hint>
