Update libphonenumber from v3.7.1 to v3.8.

The update contains the change which splits the US geocoding data into
one file per area code to decrease individual file size and increase the
likelihood of cacheing taking effect.

Change-Id: Ibeb74b5e6817302860007c8cf47944cde81d864e
diff --git a/README.android b/README.android
index dcaecf8..cb1eb5d 100644
--- a/README.android
+++ b/README.android
@@ -1,5 +1,5 @@
 URL: http://code.google.com/p/libphonenumber/
-Version: 3.7.1 (r303)
+Version: 3.8 (r325)
 License: Apache 2
 Description: Google Phone Number Library.
 Local Modification:
diff --git a/java/release_notes.txt b/java/release_notes.txt
index cbcb8a5..f915803 100644
--- a/java/release_notes.txt
+++ b/java/release_notes.txt
@@ -1,3 +1,28 @@
+August 11th, 2011: libphonenumber-3.8
+* Code changes
+ - Fix to demo to not throw null-ptr exceptions for invalid NANPA numbers
+ - Fixed AYTF to not accept plus signs in the middle of input
+ - PhoneNumberMatcher improvements - added STRICT_GROUPING and EXACT_GROUPING
+   levels, numbers followed/preceded by a currency symbol will not match,
+   multiple numbers separated by phone-number punctuation will now match. ", "
+   is no longer accepted as an extension symbol when matching, only when
+   parsing. "x" is only accepted as a carrier code or extension marker, not
+   otherwise.
+ - Changes to handling of leading zeroes - these will not be silently ignored
+   anymore, but will be stored as part of the number.
+ - PhoneNumberOfflineGeocoder - new method to get the description of a number that assumes
+   the validity of the number has already been checked and will not re-verify it.
+ - Split geocoding US binary data into multiple files.
+
+* Metadata changes
+ - Updates: AR, AT, AU, AZ, BE, BF, BH, BY, CA, CN, CO, CR, HT, HU, IT, KG, KH,
+   LB, LI, ME, NC, RS, SE, TT, US, VG, ZA
+ - New geocoding data for: AL, AM, AO, BF, BJ, BW, CD, CI, CZ, DZ, EE, GH, GM,
+   GN, GR, GW, HU, IS, KE, LK, LS, LT, LU, LV, MD, MG, MR, NA, PE, QN, SD, SK,
+   SN, SZ, TN, VE, VN, ZA, ZW
+ - Updated geocoding data for: GB, PT, US
+ - Revised sorting of geocoding data
+
 July 5th, 2011
 * Code changes
  - Refactored AreaCodeMap to minimize binary and memory footprint by using 2 different strategies.
diff --git a/java/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java b/java/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
index fe5bbac..5dd0ea2 100644
--- a/java/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
+++ b/java/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
@@ -279,7 +279,7 @@
     if (rememberPosition) {
       originalPosition = accruedInput.length();
     }
-    // We do formatting on-the-fly only when each character entered is either a digit, or a plus 
+    // We do formatting on-the-fly only when each character entered is either a digit, or a plus
     // sign (accepted at the start of the number only).
     if (!isDigitOrLeadingPlusSign(nextChar)) {
       ableToFormat = false;
@@ -476,7 +476,7 @@
     nationalNumber.setLength(0);
     nationalNumber.append(numberWithoutCountryCallingCode);
     String newRegionCode = phoneUtil.getRegionCodeForCountryCode(countryCode);
-    if (newRegionCode != defaultCountry) {
+    if (!newRegionCode.equals(defaultCountry)) {
       currentMetaData = getMetadataForRegion(newRegionCode);
     }
     String countryCodeString = Integer.toString(countryCode);
diff --git a/java/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java b/java/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
index c481f1a..c80da97 100644
--- a/java/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
+++ b/java/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Google Inc.
+ * Copyright (C) 2010 Google Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -432,9 +432,8 @@
     listWithRegionCode.add("MG");
     countryCodeToRegionCodeMap.put(261, listWithRegionCode);
 
-    listWithRegionCode = new ArrayList<String>(3);
+    listWithRegionCode = new ArrayList<String>(2);
     listWithRegionCode.add("RE");
-    listWithRegionCode.add("TF");
     listWithRegionCode.add("YT");
     countryCodeToRegionCodeMap.put(262, listWithRegionCode);
 
diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java b/java/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java
index 6a4ca35..44efdf7 100644
--- a/java/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java
+++ b/java/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java
@@ -79,9 +79,10 @@
 
   /**
    * Matches white-space, which may indicate the end of a phone number and the start of something
-   * else (such as a neighbouring zip-code).
+   * else (such as a neighbouring zip-code). If white-space is found, continues to match all
+   * characters that are not typically used to start a phone number.
    */
-  private static final Pattern GROUP_SEPARATOR = Pattern.compile("\\p{Z}+");
+  private static final Pattern GROUP_SEPARATOR;
 
   /**
    * Punctuation that may be at the start of a phone number - brackets and plus signs.
@@ -127,14 +128,16 @@
     /* A digits block without punctuation. */
     String digitSequence = "\\p{Nd}" + limit(1, digitBlockLimit);
 
-    String leadClass = "[" + openingParens + PhoneNumberUtil.PLUS_CHARS + "]";
+    String leadClassChars = openingParens + PhoneNumberUtil.PLUS_CHARS;
+    String leadClass = "[" + leadClassChars + "]";
     LEAD_CLASS = Pattern.compile(leadClass);
+    GROUP_SEPARATOR = Pattern.compile("\\p{Z}" + "[^" + leadClassChars  + "\\p{Nd}]*");
 
     /* Phone number pattern allowing optional punctuation. */
     PATTERN = Pattern.compile(
         "(?:" + leadClass + punctuation + ")" + leadLimit +
         digitSequence + "(?:" + punctuation + digitSequence + ")" + blockLimit +
-        "(?:" + PhoneNumberUtil.KNOWN_EXTN_PATTERNS + ")?",
+        "(?:" + PhoneNumberUtil.EXTN_PATTERNS_FOR_MATCHING + ")?",
         PhoneNumberUtil.REGEX_FLAGS);
   }
 
@@ -178,10 +181,10 @@
    *
    * @param util      the phone number util to use
    * @param text      the character sequence that we will search, null for no text
-   * @param country   the ISO 3166-1 two-letter country code indicating the country to assume for
-   *                  phone numbers not written in international format (with a leading plus, or
-   *                  with the international dialing prefix of the specified region). May be null or
-   *                  "ZZ" if only numbers with a leading plus should be considered.
+   * @param country   the country to assume for phone numbers not written in international format
+   *                  (with a leading plus, or with the international dialing prefix of the
+   *                  specified region). May be null or "ZZ" if only numbers with a
+   *                  leading plus should be considered.
    * @param leniency  the leniency to use when evaluating candidate phone numbers
    * @param maxTries  the maximum number of invalid numbers to try before giving up on the text.
    *                  This is to cover degenerate cases where the text has a lot of false positives
@@ -290,6 +293,10 @@
         block.equals(UnicodeBlock.COMBINING_DIACRITICAL_MARKS);
   }
 
+  private static boolean isCurrencySymbol(char character) {
+    return Character.getType(character) == Character.CURRENCY_SYMBOL;
+  }
+
   /**
    * Attempts to extract a match from a {@code candidate} character sequence.
    *
@@ -303,21 +310,6 @@
       return null;
     }
 
-    // If leniency is set to VALID only, we also want to skip numbers that are surrounded by Latin
-    // alphabetic characters, to skip cases like abc8005001234 or 8005001234def.
-    if (leniency == Leniency.VALID) {
-      // If the candidate is not at the start of the text, and does not start with punctuation and
-      // the previous character is not a Latin letter, return null.
-      if (offset > 0 &&
-          (!LEAD_CLASS.matcher(candidate).lookingAt() && isLatinLetter(text.charAt(offset - 1)))) {
-        return null;
-      }
-      int lastCharIndex = offset + candidate.length();
-      if (lastCharIndex < text.length() && isLatinLetter(text.charAt(lastCharIndex))) {
-        return null;
-      }
-    }
-
     // Try to come up with a valid match given the entire candidate.
     String rawString = candidate.toString();
     PhoneNumberMatch match = parseAndVerify(rawString, offset);
@@ -344,20 +336,29 @@
     Matcher groupMatcher = GROUP_SEPARATOR.matcher(candidate);
 
     if (groupMatcher.find()) {
-      int groupStartIndex = groupMatcher.end();
-      // Remove the first group.
-      CharSequence withoutFirstGroup = candidate.substring(groupStartIndex);
+      // Try the first group by itself.
+      CharSequence firstGroupOnly = candidate.substring(0, groupMatcher.start());
+      firstGroupOnly = trimAfterFirstMatch(PhoneNumberUtil.UNWANTED_END_CHAR_PATTERN,
+                                           firstGroupOnly);
+      PhoneNumberMatch match = parseAndVerify(firstGroupOnly.toString(), offset);
+      if (match != null) {
+        return match;
+      }
+      maxTries--;
+
+      int withoutFirstGroupStart = groupMatcher.end();
+      // Try the rest of the candidate without the first group.
+      CharSequence withoutFirstGroup = candidate.substring(withoutFirstGroupStart);
       withoutFirstGroup = trimAfterFirstMatch(PhoneNumberUtil.UNWANTED_END_CHAR_PATTERN,
                                               withoutFirstGroup);
-      PhoneNumberMatch match = parseAndVerify(withoutFirstGroup.toString(),
-                                              offset + groupStartIndex);
+      match = parseAndVerify(withoutFirstGroup.toString(), offset + withoutFirstGroupStart);
       if (match != null) {
         return match;
       }
       maxTries--;
 
       if (maxTries > 0) {
-        int lastGroupStart = groupStartIndex;
+        int lastGroupStart = withoutFirstGroupStart;
         while (groupMatcher.find()) {
           // Find the last group.
           lastGroupStart = groupMatcher.start();
@@ -365,6 +366,12 @@
         CharSequence withoutLastGroup = candidate.substring(0, lastGroupStart);
         withoutLastGroup = trimAfterFirstMatch(PhoneNumberUtil.UNWANTED_END_CHAR_PATTERN,
                                                withoutLastGroup);
+        if (withoutLastGroup.equals(firstGroupOnly)) {
+          // If there are only two groups, then the group "without the last group" is the same as
+          // the first group. In these cases, we don't want to re-check the number group, so we exit
+          // already.
+          return null;
+        }
         match = parseAndVerify(withoutLastGroup.toString(), offset);
         if (match != null) {
           return match;
@@ -391,8 +398,30 @@
       if (!MATCHING_BRACKETS.matcher(candidate).matches()) {
         return null;
       }
+
+      // If leniency is set to VALID or stricter, we also want to skip numbers that are surrounded
+      // by Latin alphabetic characters, to skip cases like abc8005001234 or 8005001234def.
+      if (leniency.compareTo(Leniency.VALID) >= 0) {
+        // If the candidate is not at the start of the text, and does not start with phone-number
+        // punctuation, check the previous character.
+        if (offset > 0 && !LEAD_CLASS.matcher(candidate).lookingAt()) {
+          char previousChar = text.charAt(offset - 1);
+          // We return null if it is a latin letter or a currency symbol.
+          if (isCurrencySymbol(previousChar) || isLatinLetter(previousChar)) {
+            return null;
+          }
+        }
+        int lastCharIndex = offset + candidate.length();
+        if (lastCharIndex < text.length()) {
+          char nextChar = text.charAt(lastCharIndex);
+          if (isCurrencySymbol(nextChar) || isLatinLetter(nextChar)) {
+            return null;
+          }
+        }
+      }
+
       PhoneNumber number = phoneUtil.parse(candidate, preferredRegion);
-      if (leniency.verify(number, phoneUtil)) {
+      if (leniency.verify(number, candidate, phoneUtil)) {
         return new PhoneNumberMatch(offset, candidate, number);
       }
     } catch (NumberParseException e) {
diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
index 0036333..d6eae62 100644
--- a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
@@ -252,35 +252,57 @@
   // as the default extension prefix. This can be overridden by region-specific preferences.
   private static final String DEFAULT_EXTN_PREFIX = " ext. ";
 
+  // Pattern to capture digits used in an extension. Places a maximum length of "7" for an
+  // extension.
+  private static final String CAPTURING_EXTN_DIGITS = "(" + DIGITS + "{1,7})";
   // Regexp of all possible ways to write extensions, for use when parsing. This will be run as a
   // case-insensitive regexp match. Wide character versions are also provided after each ASCII
-  // version. There are three regular expressions here. The first covers RFC 3966 format, where the
-  // extension is added using ";ext=". The second more generic one starts with optional white space
-  // and ends with an optional full stop (.), followed by zero or more spaces/tabs and then the
-  // numbers themselves. The other one covers the special case of American numbers where the
-  // extension is written with a hash at the end, such as "- 503#".
-  // Note that the only capturing groups should be around the digits that you want to capture as
-  // part of the extension, or else parsing will fail!
-  // Canonical-equivalence doesn't seem to be an option with Android java, so we allow two options
-  // for representing the accented o - the character itself, and one in the unicode decomposed form
-  // with the combining acute accent.
-  private static final String CAPTURING_EXTN_DIGITS = "(" + DIGITS + "{1,7})";
-  static final String KNOWN_EXTN_PATTERNS =
-      RFC3966_EXTN_PREFIX + CAPTURING_EXTN_DIGITS + "|" +
-      "[ \u00A0\\t,]*(?:ext(?:ensi(?:o\u0301?|\u00F3))?n?|" +
-      "\uFF45\uFF58\uFF54\uFF4E?|[,x\uFF58#\uFF03~\uFF5E]|int|anexo|\uFF49\uFF4E\uFF54)" +
-      "[:\\.\uFF0E]?[ \u00A0\\t,-]*" + CAPTURING_EXTN_DIGITS + "#?|" +
-      "[- ]+(" + DIGITS + "{1,5})#";
+  // version.
+  private static final String EXTN_PATTERNS_FOR_PARSING;
+  static final String EXTN_PATTERNS_FOR_MATCHING;
+  static {
+    // One-character symbols that can be used to indicate an extension.
+    String singleExtnSymbolsForMatching = "x\uFF58#\uFF03~\uFF5E";
+    // For parsing, we are slightly more lenient in our interpretation than for matching. Here we
+    // allow a "comma" as a possible extension indicator. When matching, this is hardly ever used to
+    // indicate this.
+    String singleExtnSymbolsForParsing = "," + singleExtnSymbolsForMatching;
+
+    EXTN_PATTERNS_FOR_PARSING = createExtnPattern(singleExtnSymbolsForParsing);
+    EXTN_PATTERNS_FOR_MATCHING = createExtnPattern(singleExtnSymbolsForMatching);
+  }
+
+  /**
+   * Helper initialiser method to create the regular-expression pattern to match extensions,
+   * allowing the one-char extension symbols provided by {@code singleExtnSymbols}.
+   */
+  private static String createExtnPattern(String singleExtnSymbols) {
+    // There are three regular expressions here. The first covers RFC 3966 format, where the
+    // extension is added using ";ext=". The second more generic one starts with optional white
+    // space and ends with an optional full stop (.), followed by zero or more spaces/tabs and then
+    // the numbers themselves. The other one covers the special case of American numbers where the
+    // extension is written with a hash at the end, such as "- 503#".
+    // Note that the only capturing groups should be around the digits that you want to capture as
+    // part of the extension, or else parsing will fail!
+    // Canonical-equivalence doesn't seem to be an option with Android java, so we allow two options
+    // for representing the accented o - the character itself, and one in the unicode decomposed
+    // form with the combining acute accent.
+    return (RFC3966_EXTN_PREFIX + CAPTURING_EXTN_DIGITS + "|" + "[ \u00A0\\t,]*" +
+            "(?:ext(?:ensi(?:o\u0301?|\u00F3))?n?|\uFF45\uFF58\uFF54\uFF4E?|" +
+            "[" + singleExtnSymbols + "]|int|anexo|\uFF49\uFF4E\uFF54)" +
+            "[:\\.\uFF0E]?[ \u00A0\\t,-]*" + CAPTURING_EXTN_DIGITS + "#?|" +
+            "[- ]+(" + DIGITS + "{1,5})#");
+  }
 
   // Regexp of all known extension prefixes used by different regions followed by 1 or more valid
   // digits, for use when parsing.
   private static final Pattern EXTN_PATTERN =
-      Pattern.compile("(?:" + KNOWN_EXTN_PATTERNS + ")$", REGEX_FLAGS);
+      Pattern.compile("(?:" + EXTN_PATTERNS_FOR_PARSING + ")$", REGEX_FLAGS);
 
   // We append optionally the extension pattern to the end here, as a valid phone number may
   // have an extension prefix appended, followed by 1 or more digits.
   private static final Pattern VALID_PHONE_NUMBER_PATTERN =
-      Pattern.compile(VALID_PHONE_NUMBER + "(?:" + KNOWN_EXTN_PATTERNS + ")?", REGEX_FLAGS);
+      Pattern.compile(VALID_PHONE_NUMBER + "(?:" + EXTN_PATTERNS_FOR_PARSING + ")?", REGEX_FLAGS);
 
   private static final Pattern NON_DIGITS_PATTERN = Pattern.compile("(\\D+)");
 
@@ -375,32 +397,196 @@
 
   /**
    * Leniency when {@linkplain PhoneNumberUtil#findNumbers finding} potential phone numbers in text
-   * segments.
+   * segments. The levels here are ordered in increasing strictness.
    */
   public enum Leniency {
     /**
-     * Phone numbers accepted are {@linkplain PhoneNumberUtil#isPossibleNumber(PhoneNumber)
-     * possible}, but not necessarily {@linkplain PhoneNumberUtil#isValidNumber(PhoneNumber) valid}.
+     * Phone numbers accepted are
+     * {@linkplain PhoneNumberUtil#isPossibleNumber(Phonenumber.PhoneNumber) possible}, but not
+     * necessarily {@linkplain PhoneNumberUtil#isValidNumber(Phonenumber.PhoneNumber) valid}.
      */
     POSSIBLE {
       @Override
-      boolean verify(PhoneNumber number, PhoneNumberUtil util) {
+      boolean verify(PhoneNumber number, String candidate, PhoneNumberUtil util) {
         return util.isPossibleNumber(number);
       }
     },
     /**
-     * Phone numbers accepted are {@linkplain PhoneNumberUtil#isPossibleNumber(PhoneNumber)
-     * possible} and {@linkplain PhoneNumberUtil#isValidNumber(PhoneNumber) valid}.
+     * Phone numbers accepted are
+     * {@linkplain PhoneNumberUtil#isPossibleNumber(Phonenumber.PhoneNumber) possible} and
+     * {@linkplain PhoneNumberUtil#isValidNumber(Phonenumber.PhoneNumber) valid}.
      */
     VALID {
       @Override
-      boolean verify(PhoneNumber number, PhoneNumberUtil util) {
-        return util.isValidNumber(number);
+      boolean verify(PhoneNumber number, String candidate, PhoneNumberUtil util) {
+        if (!util.isValidNumber(number)) {
+          return false;
+        }
+        return containsOnlyValidXChars(number, candidate, util);
+      }
+    },
+    /**
+     * Phone numbers accepted are {@linkplain PhoneNumberUtil#isValidNumber(PhoneNumber) valid} and
+     * are grouped in a possible way for this locale. For example, a US number written as
+     * "65 02 53 00 00" and "650253 0000" are not accepted at this leniency level, whereas
+     * "650 253 0000", "650 2530000" or "6502530000" are.
+     * Numbers with more than one '/' symbol are also dropped at this level.
+     * <p>
+     * Warning: This level might result in lower coverage especially for regions outside of country
+     * code "+1". If you are not sure about which level to use, email the discussion group
+     * libphonenumber-discuss@googlegroups.com.
+     */
+    STRICT_GROUPING {
+      @Override
+      boolean verify(PhoneNumber number, String candidate, PhoneNumberUtil util) {
+        if (!util.isValidNumber(number) ||
+            !containsOnlyValidXChars(number, candidate, util) ||
+            containsMoreThanOneSlash(candidate)) {
+          return false;
+        }
+        // TODO: Evaluate how this works for other locales (testing has been
+        // limited to NANPA regions) and optimise if necessary.
+        String[] formattedNumberGroups = getNationalNumberGroups(util, number);
+        StringBuilder normalizedCandidate = normalizeDigits(candidate,
+                                                            true /* keep strip non-digits */);
+        int fromIndex = 0;
+        // Check each group of consecutive digits are not broken into separate groups in the
+        // {@code candidate} string.
+        for (int i = 0; i < formattedNumberGroups.length; i++) {
+          // Fails if the substring of {@code candidate} starting from {@code fromIndex} doesn't
+          // contain the consecutive digits in formattedNumberGroups[i].
+          fromIndex = normalizedCandidate.indexOf(formattedNumberGroups[i], fromIndex);
+          if (fromIndex < 0) {
+            return false;
+          }
+          // Moves {@code fromIndex} forward.
+          fromIndex += formattedNumberGroups[i].length();
+          if (i == 0 && fromIndex < normalizedCandidate.length()) {
+            // We are at the position right after the NDC.
+            if (Character.isDigit(normalizedCandidate.charAt(fromIndex))) {
+              // This means there is no formatting symbol after the NDC. In this case, we only
+              // accept the number if there is no formatting symbol at all in the number, except
+              // for extensions.
+              String nationalSignificantNumber = util.getNationalSignificantNumber(number);
+              return normalizedCandidate.substring(fromIndex - formattedNumberGroups[i].length())
+                  .startsWith(nationalSignificantNumber);
+            }
+          }
+        }
+        // The check here makes sure that we haven't mistakenly already used the extension to
+        // match the last group of the subscriber number. Note the extension cannot have
+        // formatting in-between digits.
+        return normalizedCandidate.substring(fromIndex).contains(number.getExtension());
+      }
+    },
+    /**
+     * Phone numbers accepted are {@linkplain PhoneNumberUtil#isValidNumber(PhoneNumber) valid} and
+     * are grouped in the same way that we would have formatted it, or as a single block. For
+     * example, a US number written as "650 2530000" is not accepted at this leniency level, whereas
+     * "650 253 0000" or "6502530000" are.
+     * Numbers with more than one '/' symbol are also dropped at this level.
+     * <p>
+     * Warning: This level might result in lower coverage especially for regions outside of country
+     * code "+1". If you are not sure about which level to use, email the discussion group
+     * libphonenumber-discuss@googlegroups.com.
+     */
+    EXACT_GROUPING {
+      @Override
+      boolean verify(PhoneNumber number, String candidate, PhoneNumberUtil util) {
+        if (!util.isValidNumber(number) ||
+            !containsOnlyValidXChars(number, candidate, util) ||
+            containsMoreThanOneSlash(candidate)) {
+          return false;
+        }
+        // TODO: Evaluate how this works for other locales (testing has been
+        // limited to NANPA regions) and optimise if necessary.
+        StringBuilder normalizedCandidate = normalizeDigits(candidate,
+                                                            true /* keep strip non-digits */);
+        String[] candidateGroups =
+            NON_DIGITS_PATTERN.split(normalizedCandidate.toString());
+        // Set this to the last group, skipping it if the number has an extension.
+        int candidateNumberGroupIndex =
+            number.hasExtension() ? candidateGroups.length - 2 : candidateGroups.length - 1;
+        // First we check if the national significant number is formatted as a block.
+        // We use contains and not equals, since the national significant number may be present with
+        // a prefix such as a national number prefix, or the country code itself.
+        if (candidateGroups.length == 1 ||
+            candidateGroups[candidateNumberGroupIndex].contains(
+                util.getNationalSignificantNumber(number))) {
+          return true;
+        }
+        String[] formattedNumberGroups = getNationalNumberGroups(util, number);
+        // Starting from the end, go through in reverse, excluding the first group, and check the
+        // candidate and number groups are the same.
+        for (int formattedNumberGroupIndex = (formattedNumberGroups.length - 1);
+             formattedNumberGroupIndex > 0 && candidateNumberGroupIndex >= 0;
+             formattedNumberGroupIndex--, candidateNumberGroupIndex--) {
+          if (!candidateGroups[candidateNumberGroupIndex].equals(
+              formattedNumberGroups[formattedNumberGroupIndex])) {
+            return false;
+          }
+        }
+        // Now check the first group. There may be a national prefix at the start, so we only check
+        // that the candidate group ends with the formatted number group.
+        return (candidateNumberGroupIndex >= 0 &&
+                candidateGroups[candidateNumberGroupIndex].endsWith(formattedNumberGroups[0]));
       }
     };
 
+    /**
+     * Helper method to get the national-number part of a number, formatted without any national
+     * prefix, and return it as a set of digit blocks that would be formatted together.
+     */
+    private static String[] getNationalNumberGroups(PhoneNumberUtil util, PhoneNumber number) {
+      // This will be in the format +CC-DG;ext=EXT where DG represents groups of digits.
+      String rfc3966Format = util.format(number, PhoneNumberFormat.RFC3966);
+      // We remove the extension part from the formatted string before splitting it into different
+      // groups.
+      int endIndex = rfc3966Format.indexOf(';');
+      if (endIndex < 0) {
+        endIndex = rfc3966Format.length();
+      }
+      // The country-code will have a '-' following it.
+      int startIndex = rfc3966Format.indexOf('-') + 1;
+      return rfc3966Format.substring(startIndex, endIndex).split("-");
+    }
+
+    private static boolean containsMoreThanOneSlash(String candidate) {
+      int firstSlashIndex = candidate.indexOf('/');
+      return (firstSlashIndex > 0 && candidate.substring(firstSlashIndex + 1).contains("/"));
+    }
+
+    private static boolean containsOnlyValidXChars(
+        PhoneNumber number, String candidate, PhoneNumberUtil util) {
+      // The characters 'x' and 'X' can be (1) a carrier code, in which case they always precede the
+      // national significant number or (2) an extension sign, in which case they always precede the
+      // extension number. We assume a carrier code is more than 1 digit, so the first case has to
+      // have more than 1 consecutive 'x' or 'X', whereas the second case can only have exactly 1
+      // 'x' or 'X'. We ignore the character if it appears as the last character of the string.
+      for (int index = 0; index < candidate.length() - 1; index++) {
+        char charAtIndex = candidate.charAt(index);
+        if (charAtIndex == 'x' || charAtIndex == 'X') {
+          char charAtNextIndex = candidate.charAt(index + 1);
+          if (charAtNextIndex == 'x' || charAtNextIndex == 'X') {
+            // This is the carrier code case, in which the 'X's always precede the national
+            // significant number.
+            index++;
+            if (util.isNumberMatch(number, candidate.substring(index)) != MatchType.NSN_MATCH) {
+              return false;
+            }
+          // This is the extension sign case, in which the 'x' or 'X' should always precede the
+          // extension number.
+          } else if (!PhoneNumberUtil.normalizeDigitsOnly(candidate.substring(index)).equals(
+              number.getExtension())) {
+              return false;
+          }
+        }
+      }
+      return true;
+    }
+
     /** Returns true if {@code number} is a verified number according to this leniency. */
-    abstract boolean verify(PhoneNumber number, PhoneNumberUtil util);
+    abstract boolean verify(PhoneNumber number, String candidate, PhoneNumberUtil util);
   }
 
   /**
@@ -532,15 +718,20 @@
    * @return        the normalized string version of the phone number
    */
   public static String normalizeDigitsOnly(String number) {
-    int numberLength = number.length();
-    StringBuilder normalizedDigits = new StringBuilder(numberLength);
-    for (int i = 0; i < numberLength; i++) {
-      int d = Character.digit(number.charAt(i), 10);
-      if (d != -1) {
-        normalizedDigits.append(d);
+    return normalizeDigits(number, false /* strip non-digits */).toString();
+  }
+
+  private static StringBuilder normalizeDigits(String number, boolean keepNonDigits) {
+    StringBuilder normalizedDigits = new StringBuilder(number.length());
+    for (char c : number.toCharArray()) {
+      int digit = Character.digit(c, 10);
+      if (digit != -1) {
+        normalizedDigits.append(digit);
+      } else if (keepNonDigits) {
+        normalizedDigits.append(c);
       }
     }
-    return normalizedDigits.toString();
+    return normalizedDigits;
   }
 
   /**
@@ -793,8 +984,9 @@
   }
 
   /**
-   * Same as {@link #format(PhoneNumber, PhoneNumberFormat)}, but accepts a mutable StringBuilder as
-   * a parameter to decrease object creation when invoked many times.
+   * Same as {@link #format(Phonenumber.PhoneNumber, PhoneNumberUtil.PhoneNumberFormat)}, but
+   * accepts a mutable StringBuilder as a parameter to decrease object creation when invoked many
+   * times.
    */
   public void format(PhoneNumber number, PhoneNumberFormat numberFormat,
                      StringBuilder formattedNumber) {
@@ -1592,7 +1784,7 @@
    * @return  true if regionCode is one of the regions under NANPA
    */
   public boolean isNANPACountry(String regionCode) {
-    return regionCode != null && nanpaRegions.contains(regionCode);
+    return nanpaRegions.contains(regionCode);
   }
 
   /**
@@ -1600,7 +1792,7 @@
    * could contain a leading zero. An example of such a region is Italy. Returns false if no
    * metadata for the country is found.
    */
-  public boolean isLeadingZeroPossible(int countryCallingCode) {
+  boolean isLeadingZeroPossible(int countryCallingCode) {
     PhoneMetadata mainMetadataForCallingCode = getMetadataForRegion(
         getRegionCodeForCountryCode(countryCallingCode));
     if (mainMetadataForCallingCode == null) {
@@ -1710,10 +1902,10 @@
   /**
    * Check whether a phone number is a possible number given a number in the form of a string, and
    * the region where the number could be dialed from. It provides a more lenient check than
-   * {@link #isValidNumber}. See {@link #isPossibleNumber(PhoneNumber)} for details.
+   * {@link #isValidNumber}. See {@link #isPossibleNumber(Phonenumber.PhoneNumber)} for details.
    *
-   * <p>This method first parses the number, then invokes {@link #isPossibleNumber(PhoneNumber
-   * number)} with the resultant PhoneNumber object.
+   * <p>This method first parses the number, then invokes
+   * {@link #isPossibleNumber(Phonenumber.PhoneNumber)} with the resultant PhoneNumber object.
    *
    * @param number  the number that needs to be checked, in the form of a string
    * @param regionDialingFrom  the region that we are expecting the number to be dialed from.
@@ -1969,13 +2161,15 @@
     String possibleNationalPrefix = metadata.getNationalPrefixForParsing();
     if (numberLength == 0 || possibleNationalPrefix.length() == 0) {
       // Early return for numbers of zero length.
-      return carrierCode;
+      return "";
     }
     // Attempt to parse the first digits as a national prefix.
     Matcher prefixMatcher = regexCache.getPatternForRegex(possibleNationalPrefix).matcher(number);
     if (prefixMatcher.lookingAt()) {
       Pattern nationalNumberRule =
           regexCache.getPatternForRegex(metadata.getGeneralDesc().getNationalNumberPattern());
+      // Check if the original number is viable.
+      boolean isViableOriginalNumber = nationalNumberRule.matcher(number).matches();
       // prefixMatcher.group(numOfGroups) == null implies nothing was captured by the capturing
       // groups in possibleNationalPrefix; therefore, no transformation is necessary, and we just
       // remove the national prefix.
@@ -1983,23 +2177,23 @@
       String transformRule = metadata.getNationalPrefixTransformRule();
       if (transformRule == null || transformRule.length() == 0 ||
           prefixMatcher.group(numOfGroups) == null) {
-        // Check that the resultant number is viable. If not, return.
-        Matcher nationalNumber = nationalNumberRule.matcher(number.substring(prefixMatcher.end()));
-        if (!nationalNumber.matches()) {
-          return carrierCode;
+        // If the original number was viable, and the resultant number is not, we return.
+        if (isViableOriginalNumber &&
+            !nationalNumberRule.matcher(number.substring(prefixMatcher.end())).matches()) {
+          return "";
         }
         if (numOfGroups > 0 && prefixMatcher.group(numOfGroups) != null) {
           carrierCode = prefixMatcher.group(1);
         }
         number.delete(0, prefixMatcher.end());
       } else {
-        // Check that the resultant number is viable. If not, return. Check this by copying the
-        // string buffer and making the transformation on the copy first.
+        // Check that the resultant number is still viable. If not, return. Check this by copying
+        // the string buffer and making the transformation on the copy first.
         StringBuilder transformedNumber = new StringBuilder(number);
         transformedNumber.replace(0, numberLength, prefixMatcher.replaceFirst(transformRule));
-        Matcher nationalNumber = nationalNumberRule.matcher(transformedNumber.toString());
-        if (!nationalNumber.matches()) {
-          return carrierCode;
+        if (isViableOriginalNumber &&
+            !nationalNumberRule.matcher(transformedNumber.toString()).matches()) {
+          return "";
         }
         if (numOfGroups > 1) {
           carrierCode = prefixMatcher.group(1);
@@ -2243,9 +2437,7 @@
       throw new NumberParseException(NumberParseException.ErrorType.TOO_LONG,
                                      "The string supplied is too long to be a phone number.");
     }
-    if (normalizedNationalNumber.charAt(0) == '0' &&
-        regionMetadata != null &&
-        regionMetadata.isLeadingZeroPossible()) {
+    if (normalizedNationalNumber.charAt(0) == '0') {
       phoneNumber.setItalianLeadingZero(true);
     }
     phoneNumber.setNationalNumber(Long.parseLong(normalizedNationalNumber.toString()));
@@ -2339,14 +2531,15 @@
 
   /**
    * Takes two phone numbers as strings and compares them for equality. This is a convenience
-   * wrapper for {@link #isNumberMatch(PhoneNumber, PhoneNumber)}. No default region is known.
+   * wrapper for {@link #isNumberMatch(Phonenumber.PhoneNumber, Phonenumber.PhoneNumber)}. No
+   * default region is known.
    *
    * @param firstNumber  first number to compare. Can contain formatting, and can have country
    *     calling code specified with + at the start.
    * @param secondNumber  second number to compare. Can contain formatting, and can have country
    *     calling code specified with + at the start.
    * @return  NOT_A_NUMBER, NO_MATCH, SHORT_NSN_MATCH, NSN_MATCH, EXACT_MATCH. See
-   *     isNumberMatch(PhoneNumber firstNumber, PhoneNumber secondNumber) for more details.
+   *     {@link #isNumberMatch(Phonenumber.PhoneNumber, Phonenumber.PhoneNumber)} for more details.
    */
   public MatchType isNumberMatch(String firstNumber, String secondNumber) {
     try {
@@ -2378,13 +2571,14 @@
 
   /**
    * Takes two phone numbers and compares them for equality. This is a convenience wrapper for
-   * {@link #isNumberMatch(PhoneNumber, PhoneNumber)}. No default region is known.
+   * {@link #isNumberMatch(Phonenumber.PhoneNumber, Phonenumber.PhoneNumber)}. No default region is
+   * known.
    *
    * @param firstNumber  first number to compare in proto buffer format.
    * @param secondNumber  second number to compare. Can contain formatting, and can have country
    *     calling code specified with + at the start.
    * @return  NOT_A_NUMBER, NO_MATCH, SHORT_NSN_MATCH, NSN_MATCH, EXACT_MATCH. See
-   *     isNumberMatch(PhoneNumber firstNumber, PhoneNumber secondNumber) for more details.
+   *     {@link #isNumberMatch(Phonenumber.PhoneNumber, Phonenumber.PhoneNumber)} for more details.
    */
   public MatchType isNumberMatch(PhoneNumber firstNumber, String secondNumber) {
     // First see if the second number has an implicit country calling code, by attempting to parse
diff --git a/java/src/com/google/i18n/phonenumbers/RegexCache.java b/java/src/com/google/i18n/phonenumbers/RegexCache.java
index 43f7a01..1d90390 100644
--- a/java/src/com/google/i18n/phonenumbers/RegexCache.java
+++ b/java/src/com/google/i18n/phonenumbers/RegexCache.java
@@ -46,7 +46,7 @@
     return cache.containsKey(regex);
   }
 
-  private class LRUCache<K, V> {
+  private static class LRUCache<K, V> {
     // LinkedHashMap offers a straightforward implementation of LRU cache.
     private LinkedHashMap<K, V> map;
     private int size;
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
index 007ab2e..a4f9793 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
index 720010c..6cdcf99 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
index b34fb0a..0b96301 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ
index 0581301..8b6224b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
index fa90f75..2463660 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
index 63d7e64..9cd27d8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH
index 3589ec9..9e7b9c8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY
index 969f182..b07157e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
index 5d9bfb2..396702d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
index c80a254..697b08c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
index 49ff901..e87ef01 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
index f3496a8..5090575 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT
index 6d4d7b7..6ee3bd1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU
index 79efc3c..98f85c9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
index b073a2f..da951bc 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
index c4e37cf..dc63e31 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
index 3b43e39..f88db2f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
index faf8a72..f1dfbca 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
index e792149..e1d137c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME
index 352802e..7cce967 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
index cfa92c5..6e85722 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS
index 6f97714..d3691b5 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
index 9d94908..8851346 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF
deleted file mode 100644
index 8e7ef30..0000000
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF
+++ /dev/null
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
index 2330233..a023922 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
index b0b6597..d6ac18f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
index 17db04b..3c4a379 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
index 15930b3..b036930 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/AreaCodeMap.java b/java/src/com/google/i18n/phonenumbers/geocoding/AreaCodeMap.java
index 3396881..cab8818 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/AreaCodeMap.java
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/AreaCodeMap.java
@@ -36,8 +36,6 @@
  * @author Shaopeng Jia
  */
 public class AreaCodeMap implements Externalizable {
-  private final int countryCallingCode;
-  private final boolean isLeadingZeroPossible;
   private final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
   private static final Logger LOGGER = Logger.getLogger(AreaCodeMap.class.getName());
 
@@ -50,16 +48,10 @@
 
   /**
    * Creates an empty {@link AreaCodeMap}. The default constructor is necessary for implementing
-   * {@link Externalizable}. The empty map could later populated by
+   * {@link Externalizable}. The empty map could later be populated by
    * {@link #readAreaCodeMap(java.util.SortedMap)} or {@link #readExternal(java.io.ObjectInput)}.
-   *
-   * @param countryCallingCode  the country calling code for the region that the area code map
-   *     belongs to.
    */
-  public AreaCodeMap(int countryCallingCode) {
-    this.countryCallingCode = countryCallingCode;
-    isLeadingZeroPossible = phoneUtil.isLeadingZeroPossible(countryCallingCode);
-  }
+  public AreaCodeMap() {}
 
   /**
    * Gets the size of the provided area code map storage. The map storage passed-in will be filled
@@ -78,11 +70,11 @@
   }
 
   private AreaCodeMapStorageStrategy createDefaultMapStorage() {
-    return new DefaultMapStorage(countryCallingCode, isLeadingZeroPossible);
+    return new DefaultMapStorage();
   }
 
   private AreaCodeMapStorageStrategy createFlyweightMapStorage() {
-    return new FlyweightMapStorage(countryCallingCode, isLeadingZeroPossible);
+    return new FlyweightMapStorage();
   }
 
   /**
@@ -126,9 +118,9 @@
     // Read the area code map storage strategy flag.
     boolean useFlyweightMapStorage = objectInput.readBoolean();
     if (useFlyweightMapStorage) {
-      areaCodeMapStorage = new FlyweightMapStorage(countryCallingCode, isLeadingZeroPossible);
+      areaCodeMapStorage = new FlyweightMapStorage();
     } else {
-      areaCodeMapStorage = new DefaultMapStorage(countryCallingCode, isLeadingZeroPossible);
+      areaCodeMapStorage = new DefaultMapStorage();
     }
     areaCodeMapStorage.readExternal(objectInput);
   }
@@ -152,9 +144,8 @@
     if (numOfEntries == 0) {
       return "";
     }
-    long phonePrefix = isLeadingZeroPossible
-        ? Long.parseLong(number.getCountryCode() + phoneUtil.getNationalSignificantNumber(number))
-        : Long.parseLong(phoneUtil.getNationalSignificantNumber(number));
+    long phonePrefix =
+        Long.parseLong(number.getCountryCode() + phoneUtil.getNationalSignificantNumber(number));
     int currentIndex = numOfEntries - 1;
     SortedSet<Integer> currentSetOfLengths = areaCodeMapStorage.getPossibleLengths();
     while (currentSetOfLengths.size() > 0) {
@@ -185,7 +176,7 @@
   private int binarySearch(int start, int end, long value) {
     int current = 0;
     while (start <= end) {
-      current = (start + end) / 2;
+      current = (start + end) >>> 1;
       int currentValue = areaCodeMapStorage.getPrefix(current);
       if (currentValue == value) {
         return current;
@@ -204,18 +195,6 @@
    */
   @Override
   public String toString() {
-    StringBuilder output = new StringBuilder();
-    int numOfEntries = areaCodeMapStorage.getNumOfEntries();
-
-    for (int i = 0; i < numOfEntries; i++) {
-      if (!isLeadingZeroPossible) {
-        output.append(countryCallingCode);
-      }
-      output.append(areaCodeMapStorage.getPrefix(i));
-      output.append("|");
-      output.append(areaCodeMapStorage.getDescription(i));
-      output.append("\n");
-    }
-    return output.toString();
+    return areaCodeMapStorage.toString();
   }
 }
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/AreaCodeMapStorageStrategy.java b/java/src/com/google/i18n/phonenumbers/geocoding/AreaCodeMapStorageStrategy.java
index 6ea90b3..2d88c12 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/AreaCodeMapStorageStrategy.java
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/AreaCodeMapStorageStrategy.java
@@ -23,29 +23,18 @@
 import java.util.TreeSet;
 
 /**
- * Abstracts the way area code data is stored into memory and serialized to a stream.
+ * Abstracts the way area code data is stored into memory and serialized to a stream. It is used by
+ * {@link AreaCodeMap} to support the most space-efficient storage strategy according to the
+ * provided data.
  *
  * @author Philippe Liard
  */
 // @VisibleForTesting
 abstract class AreaCodeMapStorageStrategy {
-  protected final int countryCallingCode;
-  protected final boolean isLeadingZeroPossible;
   protected int numOfEntries = 0;
   protected final TreeSet<Integer> possibleLengths = new TreeSet<Integer>();
 
-  /**
-   * Constructs a new area code map storage strategy from the provided country calling code and
-   * boolean parameter.
-   *
-   * @param countryCallingCode  the country calling code of the number prefixes contained in the map
-   * @param isLeadingZeroPossible  whether the phone number prefixes belong to a region which
-   *    {@link PhoneNumberUtil#isLeadingZeroPossible isLeadingZeroPossible}
-   */
-  public AreaCodeMapStorageStrategy(int countryCallingCode, boolean isLeadingZeroPossible) {
-    this.countryCallingCode = countryCallingCode;
-    this.isLeadingZeroPossible = isLeadingZeroPossible;
-  }
+  public AreaCodeMapStorageStrategy() {}
 
   /**
    * Returns whether the underlying implementation of this abstract class is flyweight.
@@ -113,52 +102,17 @@
    */
   public abstract void writeExternal(ObjectOutput objectOutput) throws IOException;
 
-  /**
-   * Utility class used to pass arguments by "reference".
-   */
-  protected static class Reference<T> {
-    private T data;
+  @Override
+  public String toString() {
+    StringBuilder output = new StringBuilder();
+    int numOfEntries = getNumOfEntries();
 
-    T get () {
-      return data;
+    for (int i = 0; i < numOfEntries; i++) {
+      output.append(getPrefix(i));
+      output.append("|");
+      output.append(getDescription(i));
+      output.append("\n");
     }
-
-    void set (T data) {
-      this.data = data;
-    }
-  }
-
-  /**
-   * Removes the country calling code from the provided {@code prefix} if the country can't have any
-   * leading zero; otherwise it is left as it is. Sets the provided {@code lengthOfPrefixRef}
-   * parameter to the length of the resulting prefix.
-   *
-   * @param prefix  a phone number prefix containing a leading country calling code
-   * @param lengthOfPrefixRef  a "reference" to an integer set to the length of the resulting
-   *    prefix. This parameter is ignored when set to null.
-   * @return  the resulting prefix which may have been stripped
-   */
-  protected int stripPrefix(int prefix, Reference<Integer> lengthOfPrefixRef) {
-    int lengthOfCountryCode = (int) Math.log10(countryCallingCode) + 1;
-    int lengthOfPrefix = (int) Math.log10(prefix) + 1;
-    if (!isLeadingZeroPossible) {
-      lengthOfPrefix -= lengthOfCountryCode;
-      prefix -= countryCallingCode * (int) Math.pow(10, lengthOfPrefix);
-    }
-    if (lengthOfPrefixRef != null) {
-      lengthOfPrefixRef.set(lengthOfPrefix);
-    }
-    return prefix;
-  }
-
-  /**
-   * Removes the country calling code from the provided {@code prefix} if the country can't have any
-   * leading zero; otherwise it is left as it is.
-   *
-   * @param prefix  a phone number prefix containing a leading country calling code
-   * @return  the resulting prefix which may have been stripped
-   */
-  protected int stripPrefix(int prefix) {
-    return stripPrefix(prefix, null);
+    return output.toString();
   }
 }
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/DefaultMapStorage.java b/java/src/com/google/i18n/phonenumbers/geocoding/DefaultMapStorage.java
index 7be0824..00f40fd 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/DefaultMapStorage.java
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/DefaultMapStorage.java
@@ -30,9 +30,7 @@
  */
 class DefaultMapStorage extends AreaCodeMapStorageStrategy {
 
-  public DefaultMapStorage(int countryCallingCode, boolean isLeadingZeroPossible) {
-    super(countryCallingCode, isLeadingZeroPossible);
-  }
+  public DefaultMapStorage() {}
 
   private int[] phoneNumberPrefixes;
   private String[] descriptions;
@@ -59,10 +57,8 @@
     descriptions = new String[numOfEntries];
     int index = 0;
     for (int prefix : sortedAreaCodeMap.keySet()) {
-      Reference<Integer> lengthOfPrefixRef = new Reference<Integer>();
-      int strippedPrefix = stripPrefix(prefix, lengthOfPrefixRef);
-      phoneNumberPrefixes[index++] = strippedPrefix;
-      possibleLengths.add(lengthOfPrefixRef.get());
+      phoneNumberPrefixes[index++] = prefix;
+      possibleLengths.add((int) Math.log10(prefix) + 1);
     }
     sortedAreaCodeMap.values().toArray(descriptions);
   }
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/FlyweightMapStorage.java b/java/src/com/google/i18n/phonenumbers/geocoding/FlyweightMapStorage.java
index 2745fae..453856f 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/FlyweightMapStorage.java
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/FlyweightMapStorage.java
@@ -22,8 +22,6 @@
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Map.Entry;
 import java.util.SortedMap;
 import java.util.SortedSet;
@@ -32,7 +30,7 @@
 /**
  * Flyweight area code map storage strategy that uses a table to store unique strings and shorts to
  * store the prefix and description indexes when possible. It is particularly space-efficient when
- * the provided area code map contains a lot of description duplicates.
+ * the provided area code map contains a lot of redundant descriptions.
  *
  * @author Philippe Liard
  */
@@ -47,17 +45,13 @@
   // description pool containing all the strings.
   private int descIndexSizeInBytes;
 
-  // Byte buffer of stripped phone number prefixes. A stripped phone number prefix is a phone number
-  // prefix omitting the country code.
   private ByteBuffer phoneNumberPrefixes;
   private ByteBuffer descriptionIndexes;
 
   // Sorted string array of unique description strings.
   private String[] descriptionPool;
 
-  public FlyweightMapStorage(int countryCallingCode, boolean isLeadingZeroPossible) {
-    super(countryCallingCode, isLeadingZeroPossible);
-  }
+  public FlyweightMapStorage() {}
 
   @Override
   public boolean isFlyweight() {
@@ -78,7 +72,7 @@
    *
    * @param buffer  the byte buffer to which the value is stored
    * @param wordSize  the number of bytes used to store the provided value
-   * @param index  the index in bytes to which the value is stored
+   * @param index  the index to which the value is stored
    * @param value  the value that is stored assuming it does not require more than the specified
    *    number of bytes.
    */
@@ -98,7 +92,7 @@
    *
    * @param buffer  the byte buffer from which the value is read
    * @param wordSize  the number of bytes used to store the value
-   * @param index  the index in bytes where the value is read from
+   * @param index  the index where the value is read from
    *
    * @return  the value read from the buffer
    */
@@ -121,20 +115,16 @@
   public void readFromSortedMap(SortedMap<Integer, String> sortedAreaCodeMap) {
     SortedSet<String> descriptionsSet = new TreeSet<String>();
     numOfEntries = sortedAreaCodeMap.size();
-    prefixSizeInBytes = getOptimalNumberOfBytesForValue(stripPrefix(sortedAreaCodeMap.lastKey()));
+    prefixSizeInBytes = getOptimalNumberOfBytesForValue(sortedAreaCodeMap.lastKey());
     phoneNumberPrefixes = ByteBuffer.allocate(numOfEntries * prefixSizeInBytes);
-    Map<Integer, Integer> strippedToUnstrippedPrefixes = new HashMap<Integer, Integer>();
 
     // Fill the phone number prefixes byte buffer, the set of possible lengths of prefixes and the
     // description set.
     int index = 0;
     for (Entry<Integer, String> entry : sortedAreaCodeMap.entrySet()) {
       int prefix = entry.getKey();
-      Reference<Integer> lengthOfPrefixRef = new Reference<Integer>();
-      int strippedPrefix = stripPrefix(prefix, lengthOfPrefixRef);
-      strippedToUnstrippedPrefixes.put(strippedPrefix, prefix);
-      storeWordInBuffer(phoneNumberPrefixes, prefixSizeInBytes, index++, strippedPrefix);
-      possibleLengths.add(lengthOfPrefixRef.get());
+      storeWordInBuffer(phoneNumberPrefixes, prefixSizeInBytes, index++, prefix);
+      possibleLengths.add((int) Math.log10(prefix) + 1);
       descriptionsSet.add(entry.getValue());
     }
 
@@ -147,15 +137,14 @@
     // Map the phone number prefixes to the descriptions.
     index = 0;
     for (int i = 0; i < numOfEntries; i++) {
-      int strippedPrefix = readWordFromBuffer(phoneNumberPrefixes, prefixSizeInBytes, i);
-      int prefix = strippedToUnstrippedPrefixes.get(strippedPrefix);
+      int prefix = readWordFromBuffer(phoneNumberPrefixes, prefixSizeInBytes, i);
       String description = sortedAreaCodeMap.get(prefix);
-      int positionIndescriptionPool =
+      int positionInDescriptionPool =
           Arrays.binarySearch(descriptionPool, description, new Comparator<String>() {
             public int compare(String o1, String o2) { return o1.compareTo(o2); }
           });
       storeWordInBuffer(descriptionIndexes, descIndexSizeInBytes, index++,
-                        positionIndescriptionPool);
+                        positionInDescriptionPool);
     }
   }
 
@@ -166,7 +155,7 @@
    * @param objectInput  the object input stream from which the value is read
    * @param wordSize  the number of bytes used to store the value read from the stream
    * @param outputBuffer  the byte buffer to which the value is stored
-   * @param index  the index in bytes where the value is stored in the buffer
+   * @param index  the index where the value is stored in the buffer
    * @throws IOException  if an error occurred reading from the object input stream
    */
   private static void readExternalWord(ObjectInput objectInput, int wordSize,
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java b/java/src/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
index 3ce96ac..a6e2af0 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
@@ -50,11 +50,7 @@
   // loaded.
   private Map<String, AreaCodeMap> availablePhonePrefixMaps = new HashMap<String, AreaCodeMap>();
 
-  /**
-   * For testing purposes, we allow the phone number util variable to be injected.
-   *
-   * @VisibleForTesting
-   */
+  // @VisibleForTesting
   PhoneNumberOfflineGeocoder(String phonePrefixDataDirectory) {
     this.phonePrefixDataDirectory = phonePrefixDataDirectory;
     loadMappingFileProvider();
@@ -79,18 +75,18 @@
       return null;
     }
     if (!availablePhonePrefixMaps.containsKey(fileName)) {
-      loadAreaCodeMapFromFile(fileName, countryCallingCode);
+      loadAreaCodeMapFromFile(fileName);
     }
     return availablePhonePrefixMaps.get(fileName);
   }
 
-  private void loadAreaCodeMapFromFile(String fileName, int countryCallingCode) {
+  private void loadAreaCodeMapFromFile(String fileName) {
     InputStream source =
         PhoneNumberOfflineGeocoder.class.getResourceAsStream(phonePrefixDataDirectory + fileName);
     ObjectInputStream in;
     try {
       in = new ObjectInputStream(source);
-      AreaCodeMap map = new AreaCodeMap(countryCallingCode);
+      AreaCodeMap map = new AreaCodeMap();
       map.readExternal(in);
       availablePhonePrefixMaps.put(fileName, map);
     } catch (IOException e) {
@@ -115,19 +111,6 @@
   }
 
   /**
-   * Preload the data file for the given language and country calling code, so that a future lookup
-   * for this language and country calling code will not incur any file loading.
-   *
-   * @param locale  specifies the language of the data file to load
-   * @param countryCallingCode   specifies the country calling code of phone numbers that are
-   *     contained by the file to be loaded
-   */
-  public void loadDataFile(Locale locale, int countryCallingCode) {
-    instance.getPhonePrefixDescriptions(countryCallingCode, locale.getLanguage(), "",
-        locale.getCountry());
-  }
-
-  /**
    * Returns the customary display name in the given language for the given territory the phone
    * number is from.
    */
@@ -140,22 +123,40 @@
   /**
    * Returns a text description for the given language code for the given phone number. The
    * description might consist of the name of the country where the phone number is from and/or the
-   * name of the geographical area the phone number is from.
+   * name of the geographical area the phone number is from. This method assumes the validity of the
+   * number passed in has already been checked.
+   *
+   * @param number  a valid phone number for which we want to get a text description
+   * @param languageCode  the language code for which the description should be written
+   * @return  a text description for the given language code for the given phone number
+   */
+  public String getDescriptionForValidNumber(PhoneNumber number, Locale languageCode) {
+    String langStr = languageCode.getLanguage();
+    String scriptStr = "";  // No script is specified
+    String regionStr = languageCode.getCountry();
+
+    String areaDescription =
+        getAreaDescriptionForNumber(number, langStr, scriptStr, regionStr);
+    return (areaDescription.length() > 0)
+        ? areaDescription : getCountryNameForNumber(number, languageCode);
+  }
+
+  /**
+   * Returns a text description for the given language code for the given phone number. The
+   * description might consist of the name of the country where the phone number is from and/or the
+   * name of the geographical area the phone number is from. This method explictly checkes the
+   * validity of the number passed in.
    *
    * @param number  the phone number for which we want to get a text description
    * @param languageCode  the language code for which the description should be written
-   * @return  a text description for the given language code for the given phone number
+   * @return  a text description for the given language code for the given phone number, or empty
+   *     string if the number passed in is invalid
    */
   public String getDescriptionForNumber(PhoneNumber number, Locale languageCode) {
     if (!phoneUtil.isValidNumber(number)) {
       return "";
     }
-    String areaDescription =
-        getAreaDescriptionForNumber(
-            number, languageCode.getLanguage(), "",  // No script is specified.
-            languageCode.getCountry());
-    return (areaDescription.length() > 0)
-        ? areaDescription : getCountryNameForNumber(number, languageCode);
+    return getDescriptionForValidNumber(number, languageCode);
   }
 
   /**
@@ -171,8 +172,13 @@
    */
   private String getAreaDescriptionForNumber(
       PhoneNumber number, String lang, String script, String region) {
+    int countryCallingCode = number.getCountryCode();
+    // As the NANPA data is split into multiple files covering 3-digit areas, use a phone number
+    // prefix of 4 digits for NANPA instead, e.g. 1650.
+    int phonePrefix = (countryCallingCode != 1) ?
+        countryCallingCode : (1000 + (int) (number.getNationalNumber() / 10000000));
     AreaCodeMap phonePrefixDescriptions =
-        getPhonePrefixDescriptions(number.getCountryCode(), lang, script, region);
+        getPhonePrefixDescriptions(phonePrefix, lang, script, region);
     return (phonePrefixDescriptions != null) ? phonePrefixDescriptions.lookup(number) : "";
   }
 }
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1201_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1201_en
new file mode 100644
index 0000000..bb98273
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1201_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1202_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1202_en
new file mode 100644
index 0000000..306ce02
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1202_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1203_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1203_en
new file mode 100644
index 0000000..93786eb
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1203_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1204_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1204_en
new file mode 100644
index 0000000..eaad437
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1204_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1205_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1205_en
new file mode 100644
index 0000000..8fb3949
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1205_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1206_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1206_en
new file mode 100644
index 0000000..e5ee177
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1206_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1207_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1207_en
new file mode 100644
index 0000000..4d720c3
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1207_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1208_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1208_en
new file mode 100644
index 0000000..0c503bf
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1208_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1209_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1209_en
new file mode 100644
index 0000000..f55fa82
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1209_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1210_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1210_en
new file mode 100644
index 0000000..519470d
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1210_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1212_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1212_en
new file mode 100644
index 0000000..d4179c0
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1212_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1213_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1213_en
new file mode 100644
index 0000000..e7315eb
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1213_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1214_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1214_en
new file mode 100644
index 0000000..1a736df
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1214_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1215_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1215_en
new file mode 100644
index 0000000..9caefe3
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1215_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1216_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1216_en
new file mode 100644
index 0000000..5305522
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1216_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1217_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1217_en
new file mode 100644
index 0000000..b6e2606
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1217_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1218_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1218_en
new file mode 100644
index 0000000..52851ba
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1218_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1219_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1219_en
new file mode 100644
index 0000000..5731a17
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1219_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1224_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1224_en
new file mode 100644
index 0000000..5af1238
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1224_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1225_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1225_en
new file mode 100644
index 0000000..32ee0d0
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1225_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1226_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1226_en
new file mode 100644
index 0000000..7f2d4fa
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1226_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1228_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1228_en
new file mode 100644
index 0000000..5440111
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1228_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1229_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1229_en
new file mode 100644
index 0000000..bd6c00f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1229_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1231_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1231_en
new file mode 100644
index 0000000..3a137ed
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1231_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1234_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1234_en
new file mode 100644
index 0000000..14906de
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1234_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1239_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1239_en
new file mode 100644
index 0000000..ed594ca
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1239_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1240_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1240_en
new file mode 100644
index 0000000..8b054e1
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1240_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1248_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1248_en
new file mode 100644
index 0000000..cc14c9e
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1248_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1250_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1250_en
new file mode 100644
index 0000000..4f1f495
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1250_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1251_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1251_en
new file mode 100644
index 0000000..dd34251
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1251_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1252_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1252_en
new file mode 100644
index 0000000..d4243ab
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1252_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1253_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1253_en
new file mode 100644
index 0000000..ca292d9
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1253_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1254_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1254_en
new file mode 100644
index 0000000..8c090c8
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1254_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1256_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1256_en
new file mode 100644
index 0000000..b954f65
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1256_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1260_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1260_en
new file mode 100644
index 0000000..1d112d9
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1260_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1262_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1262_en
new file mode 100644
index 0000000..a0ba4c0
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1262_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1267_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1267_en
new file mode 100644
index 0000000..3c8fba6
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1267_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1269_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1269_en
new file mode 100644
index 0000000..7111bf4
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1269_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1270_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1270_en
new file mode 100644
index 0000000..81775d7
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1270_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1276_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1276_en
new file mode 100644
index 0000000..95d98ab
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1276_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1281_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1281_en
new file mode 100644
index 0000000..67a497f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1281_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1289_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1289_en
new file mode 100644
index 0000000..a44c5b3
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1289_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1301_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1301_en
new file mode 100644
index 0000000..fdec02f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1301_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1302_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1302_en
new file mode 100644
index 0000000..d9578c8
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1302_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1303_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1303_en
new file mode 100644
index 0000000..2df62e6
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1303_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1304_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1304_en
new file mode 100644
index 0000000..812f34b
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1304_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1305_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1305_en
new file mode 100644
index 0000000..ddc522f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1305_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1306_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1306_en
new file mode 100644
index 0000000..35094f0
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1306_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1307_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1307_en
new file mode 100644
index 0000000..9a851de
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1307_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1308_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1308_en
new file mode 100644
index 0000000..b0545ca
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1308_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1309_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1309_en
new file mode 100644
index 0000000..d5029f8
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1309_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1310_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1310_en
new file mode 100644
index 0000000..8340bba
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1310_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1312_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1312_en
new file mode 100644
index 0000000..9a2fdc6
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1312_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1313_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1313_en
new file mode 100644
index 0000000..e09f6cd
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1313_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1314_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1314_en
new file mode 100644
index 0000000..576ac1c
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1314_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1315_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1315_en
new file mode 100644
index 0000000..c097de2
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1315_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1316_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1316_en
new file mode 100644
index 0000000..eae6b38
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1316_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1317_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1317_en
new file mode 100644
index 0000000..e577222
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1317_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1318_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1318_en
new file mode 100644
index 0000000..3e48ecc
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1318_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1319_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1319_en
new file mode 100644
index 0000000..f690c73
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1319_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1320_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1320_en
new file mode 100644
index 0000000..6441a1d
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1320_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1321_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1321_en
new file mode 100644
index 0000000..a3e406e
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1321_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1323_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1323_en
new file mode 100644
index 0000000..8571ced
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1323_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1325_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1325_en
new file mode 100644
index 0000000..e3f8595
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1325_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1330_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1330_en
new file mode 100644
index 0000000..a3f3b7e
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1330_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1331_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1331_en
new file mode 100644
index 0000000..d5f7c6c
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1331_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1334_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1334_en
new file mode 100644
index 0000000..2aab6a1
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1334_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1336_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1336_en
new file mode 100644
index 0000000..a873afc
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1336_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1337_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1337_en
new file mode 100644
index 0000000..6de57a4
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1337_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1339_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1339_en
new file mode 100644
index 0000000..0c2e42b
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1339_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1347_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1347_en
new file mode 100644
index 0000000..4b4c5dc
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1347_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1351_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1351_en
new file mode 100644
index 0000000..eee213d
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1351_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1352_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1352_en
new file mode 100644
index 0000000..ec62795
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1352_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1360_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1360_en
new file mode 100644
index 0000000..f9a5a8a
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1360_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1361_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1361_en
new file mode 100644
index 0000000..5c221a9
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1361_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1385_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1385_en
new file mode 100644
index 0000000..4a4c1bb
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1385_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1386_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1386_en
new file mode 100644
index 0000000..45049ba
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1386_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1401_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1401_en
new file mode 100644
index 0000000..7293621
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1401_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1402_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1402_en
new file mode 100644
index 0000000..d93b8c9
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1402_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1403_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1403_en
new file mode 100644
index 0000000..b606c26
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1403_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1404_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1404_en
new file mode 100644
index 0000000..bf273a3
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1404_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1405_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1405_en
new file mode 100644
index 0000000..9722abc
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1405_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1406_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1406_en
new file mode 100644
index 0000000..4874675
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1406_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1407_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1407_en
new file mode 100644
index 0000000..6acfc6a
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1407_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1408_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1408_en
new file mode 100644
index 0000000..62ac82a
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1408_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1409_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1409_en
new file mode 100644
index 0000000..15d8a3a
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1409_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1410_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1410_en
new file mode 100644
index 0000000..2e3c4ac
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1410_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1412_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1412_en
new file mode 100644
index 0000000..ed26616
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1412_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1413_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1413_en
new file mode 100644
index 0000000..7cf4cee
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1413_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1414_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1414_en
new file mode 100644
index 0000000..717dbd7
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1414_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1415_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1415_en
new file mode 100644
index 0000000..9079586
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1415_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1416_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1416_en
new file mode 100644
index 0000000..d6e6f96
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1416_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1417_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1417_en
new file mode 100644
index 0000000..ac551fd
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1417_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1418_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1418_en
new file mode 100644
index 0000000..8667894
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1418_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1419_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1419_en
new file mode 100644
index 0000000..fb7548b
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1419_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1423_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1423_en
new file mode 100644
index 0000000..9023400
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1423_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1424_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1424_en
new file mode 100644
index 0000000..bc3b1a5
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1424_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1425_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1425_en
new file mode 100644
index 0000000..7d7084e
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1425_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1430_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1430_en
new file mode 100644
index 0000000..eb8782d
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1430_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1432_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1432_en
new file mode 100644
index 0000000..9c8a2ca
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1432_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1434_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1434_en
new file mode 100644
index 0000000..82fb900
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1434_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1435_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1435_en
new file mode 100644
index 0000000..db6c64f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1435_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1438_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1438_en
new file mode 100644
index 0000000..be39869
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1438_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1440_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1440_en
new file mode 100644
index 0000000..fd860de
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1440_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1443_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1443_en
new file mode 100644
index 0000000..bf278f6
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1443_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1450_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1450_en
new file mode 100644
index 0000000..4950cd8
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1450_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1469_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1469_en
new file mode 100644
index 0000000..d1caf62
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1469_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1478_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1478_en
new file mode 100644
index 0000000..e5b09f9
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1478_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1479_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1479_en
new file mode 100644
index 0000000..51ab912
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1479_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1480_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1480_en
new file mode 100644
index 0000000..8c259c0
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1480_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1484_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1484_en
new file mode 100644
index 0000000..4bc0dfa
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1484_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1501_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1501_en
new file mode 100644
index 0000000..7e118f6
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1501_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1502_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1502_en
new file mode 100644
index 0000000..a7a5b99
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1502_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1503_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1503_en
new file mode 100644
index 0000000..48d05d4
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1503_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1504_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1504_en
new file mode 100644
index 0000000..49c0b85
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1504_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1505_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1505_en
new file mode 100644
index 0000000..c4eb180
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1505_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1506_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1506_en
new file mode 100644
index 0000000..6a7b473
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1506_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1507_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1507_en
new file mode 100644
index 0000000..dc76325
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1507_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1508_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1508_en
new file mode 100644
index 0000000..3e9ce41
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1508_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1509_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1509_en
new file mode 100644
index 0000000..12fbdc6
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1509_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1510_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1510_en
new file mode 100644
index 0000000..b342c22
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1510_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1512_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1512_en
new file mode 100644
index 0000000..63b9995
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1512_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1513_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1513_en
new file mode 100644
index 0000000..338c8f1
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1513_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1514_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1514_en
new file mode 100644
index 0000000..8f5d124
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1514_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1515_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1515_en
new file mode 100644
index 0000000..fada095
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1515_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1516_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1516_en
new file mode 100644
index 0000000..39e0138
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1516_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1517_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1517_en
new file mode 100644
index 0000000..f017efc
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1517_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1518_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1518_en
new file mode 100644
index 0000000..d57a9e0
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1518_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1519_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1519_en
new file mode 100644
index 0000000..184ffbf
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1519_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1520_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1520_en
new file mode 100644
index 0000000..1930d45
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1520_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1530_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1530_en
new file mode 100644
index 0000000..0ba769f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1530_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1540_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1540_en
new file mode 100644
index 0000000..2056d8f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1540_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1541_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1541_en
new file mode 100644
index 0000000..def6616
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1541_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1551_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1551_en
new file mode 100644
index 0000000..e36fbbc
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1551_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1559_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1559_en
new file mode 100644
index 0000000..a798388
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1559_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1561_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1561_en
new file mode 100644
index 0000000..a5c4d8e
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1561_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1562_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1562_en
new file mode 100644
index 0000000..ae32a56
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1562_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1563_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1563_en
new file mode 100644
index 0000000..1a6094f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1563_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1567_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1567_en
new file mode 100644
index 0000000..4c005b5
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1567_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1570_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1570_en
new file mode 100644
index 0000000..c8491c1
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1570_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1571_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1571_en
new file mode 100644
index 0000000..bd6dc00
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1571_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1573_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1573_en
new file mode 100644
index 0000000..e952524
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1573_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1574_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1574_en
new file mode 100644
index 0000000..2eb7589
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1574_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1575_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1575_en
new file mode 100644
index 0000000..5a8f792
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1575_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1580_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1580_en
new file mode 100644
index 0000000..fe11647
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1580_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1585_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1585_en
new file mode 100644
index 0000000..f55ba0f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1585_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1586_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1586_en
new file mode 100644
index 0000000..721c4d0
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1586_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1587_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1587_en
new file mode 100644
index 0000000..71f8a24
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1587_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1601_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1601_en
new file mode 100644
index 0000000..45e0d3c
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1601_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1602_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1602_en
new file mode 100644
index 0000000..b1d2266
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1602_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1603_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1603_en
new file mode 100644
index 0000000..dc28c76
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1603_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1604_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1604_en
new file mode 100644
index 0000000..6175abd
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1604_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1605_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1605_en
new file mode 100644
index 0000000..6f80f31
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1605_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1606_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1606_en
new file mode 100644
index 0000000..30810b4
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1606_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1607_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1607_en
new file mode 100644
index 0000000..70c77da
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1607_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1608_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1608_en
new file mode 100644
index 0000000..e29fcc2
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1608_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1609_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1609_en
new file mode 100644
index 0000000..8819bb4
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1609_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1610_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1610_en
new file mode 100644
index 0000000..ad86252
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1610_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1612_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1612_en
new file mode 100644
index 0000000..2fb4156
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1612_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1613_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1613_en
new file mode 100644
index 0000000..e1df260
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1613_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1614_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1614_en
new file mode 100644
index 0000000..f9d0201
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1614_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1615_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1615_en
new file mode 100644
index 0000000..5347dff
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1615_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1616_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1616_en
new file mode 100644
index 0000000..b6bef4d
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1616_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1617_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1617_en
new file mode 100644
index 0000000..6d47691
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1617_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1618_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1618_en
new file mode 100644
index 0000000..074da52
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1618_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1619_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1619_en
new file mode 100644
index 0000000..5781415
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1619_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1620_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1620_en
new file mode 100644
index 0000000..1428f52
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1620_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1623_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1623_en
new file mode 100644
index 0000000..fa04f3a
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1623_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1626_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1626_en
new file mode 100644
index 0000000..8243d25
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1626_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1630_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1630_en
new file mode 100644
index 0000000..a545ba1
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1630_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1631_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1631_en
new file mode 100644
index 0000000..a3e4b30
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1631_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1636_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1636_en
new file mode 100644
index 0000000..c6e31ce
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1636_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1641_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1641_en
new file mode 100644
index 0000000..09d37ff
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1641_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1646_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1646_en
new file mode 100644
index 0000000..7029025
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1646_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1647_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1647_en
new file mode 100644
index 0000000..c000f64
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1647_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1650_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1650_en
new file mode 100644
index 0000000..349fdcf
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1650_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1651_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1651_en
new file mode 100644
index 0000000..edd6f90
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1651_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1657_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1657_en
new file mode 100644
index 0000000..dd7858f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1657_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1660_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1660_en
new file mode 100644
index 0000000..84167e8
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1660_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1661_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1661_en
new file mode 100644
index 0000000..163197a
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1661_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1662_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1662_en
new file mode 100644
index 0000000..89104de
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1662_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1678_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1678_en
new file mode 100644
index 0000000..287de14
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1678_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1682_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1682_en
new file mode 100644
index 0000000..f70ae44
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1682_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1701_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1701_en
new file mode 100644
index 0000000..402f3c2
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1701_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1702_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1702_en
new file mode 100644
index 0000000..b5cb753
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1702_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1703_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1703_en
new file mode 100644
index 0000000..3196a8e
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1703_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1704_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1704_en
new file mode 100644
index 0000000..65928c3
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1704_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1705_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1705_en
new file mode 100644
index 0000000..441b558
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1705_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1706_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1706_en
new file mode 100644
index 0000000..988df79
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1706_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1707_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1707_en
new file mode 100644
index 0000000..37194ec
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1707_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1708_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1708_en
new file mode 100644
index 0000000..b68c3aa
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1708_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1709_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1709_en
new file mode 100644
index 0000000..1047732
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1709_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1712_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1712_en
new file mode 100644
index 0000000..92a81f1
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1712_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1713_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1713_en
new file mode 100644
index 0000000..5ca9b5e
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1713_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1714_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1714_en
new file mode 100644
index 0000000..ffc4f85
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1714_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1715_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1715_en
new file mode 100644
index 0000000..0079c6b
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1715_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1716_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1716_en
new file mode 100644
index 0000000..b393523
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1716_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1717_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1717_en
new file mode 100644
index 0000000..876a808
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1717_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1718_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1718_en
new file mode 100644
index 0000000..4a16abb
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1718_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1719_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1719_en
new file mode 100644
index 0000000..dc6d6a7
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1719_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1720_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1720_en
new file mode 100644
index 0000000..aa2deb2
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1720_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1724_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1724_en
new file mode 100644
index 0000000..b95249e
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1724_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1726_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1726_en
new file mode 100644
index 0000000..cb81e2d
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1726_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1727_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1727_en
new file mode 100644
index 0000000..f59ce52
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1727_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1730_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1730_en
new file mode 100644
index 0000000..a2db58d
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1730_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1731_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1731_en
new file mode 100644
index 0000000..e041cac
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1731_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1732_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1732_en
new file mode 100644
index 0000000..244a2c9
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1732_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1734_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1734_en
new file mode 100644
index 0000000..06f2135
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1734_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1740_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1740_en
new file mode 100644
index 0000000..7ed9506
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1740_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1754_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1754_en
new file mode 100644
index 0000000..701f6a8
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1754_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1757_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1757_en
new file mode 100644
index 0000000..97714b5
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1757_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1760_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1760_en
new file mode 100644
index 0000000..40854a6
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1760_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1763_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1763_en
new file mode 100644
index 0000000..971e1ac
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1763_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1765_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1765_en
new file mode 100644
index 0000000..1e87dcc
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1765_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1769_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1769_en
new file mode 100644
index 0000000..7f5616a
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1769_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1770_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1770_en
new file mode 100644
index 0000000..01bc96d
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1770_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1772_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1772_en
new file mode 100644
index 0000000..3e6641b
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1772_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1773_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1773_en
new file mode 100644
index 0000000..3b5cb28
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1773_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1774_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1774_en
new file mode 100644
index 0000000..47fe94a
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1774_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1775_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1775_en
new file mode 100644
index 0000000..879e514
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1775_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1778_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1778_en
new file mode 100644
index 0000000..c6b9c96
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1778_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1779_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1779_en
new file mode 100644
index 0000000..fac0886
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1779_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1780_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1780_en
new file mode 100644
index 0000000..fdeddcc
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1780_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1781_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1781_en
new file mode 100644
index 0000000..ea2f926
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1781_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1785_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1785_en
new file mode 100644
index 0000000..0ca48dd
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1785_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1786_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1786_en
new file mode 100644
index 0000000..612dd69
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1786_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1801_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1801_en
new file mode 100644
index 0000000..c93ac1a
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1801_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1802_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1802_en
new file mode 100644
index 0000000..8fd7eb6
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1802_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1803_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1803_en
new file mode 100644
index 0000000..0732fbb
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1803_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1804_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1804_en
new file mode 100644
index 0000000..6f70d2c
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1804_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1805_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1805_en
new file mode 100644
index 0000000..47c5bf3
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1805_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1806_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1806_en
new file mode 100644
index 0000000..4674327
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1806_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1807_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1807_en
new file mode 100644
index 0000000..86fde6d
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1807_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1808_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1808_en
new file mode 100644
index 0000000..b810cfb
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1808_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1810_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1810_en
new file mode 100644
index 0000000..c1e3af7
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1810_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1812_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1812_en
new file mode 100644
index 0000000..0ba83df
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1812_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1813_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1813_en
new file mode 100644
index 0000000..7fb187f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1813_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1814_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1814_en
new file mode 100644
index 0000000..2c05f2f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1814_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1815_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1815_en
new file mode 100644
index 0000000..a80e7e8
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1815_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1816_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1816_en
new file mode 100644
index 0000000..fbfc566
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1816_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1817_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1817_en
new file mode 100644
index 0000000..22f36cc
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1817_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1818_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1818_en
new file mode 100644
index 0000000..78cef0c
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1818_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1819_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1819_en
new file mode 100644
index 0000000..42ab96a
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1819_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1828_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1828_en
new file mode 100644
index 0000000..a83f8fc
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1828_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1830_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1830_en
new file mode 100644
index 0000000..b9dd2bb
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1830_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1831_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1831_en
new file mode 100644
index 0000000..2706c69
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1831_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1832_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1832_en
new file mode 100644
index 0000000..77a8d42
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1832_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1838_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1838_en
new file mode 100644
index 0000000..ff902ce
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1838_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1843_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1843_en
new file mode 100644
index 0000000..ec90963
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1843_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1845_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1845_en
new file mode 100644
index 0000000..7ad004c
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1845_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1847_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1847_en
new file mode 100644
index 0000000..0531619
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1847_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1848_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1848_en
new file mode 100644
index 0000000..ca5aca7
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1848_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1850_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1850_en
new file mode 100644
index 0000000..4157758
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1850_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1851_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1851_en
new file mode 100644
index 0000000..8523ef3
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1851_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1856_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1856_en
new file mode 100644
index 0000000..d5ce6b3
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1856_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1857_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1857_en
new file mode 100644
index 0000000..853bf5f
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1857_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1858_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1858_en
new file mode 100644
index 0000000..d036af8
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1858_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1859_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1859_en
new file mode 100644
index 0000000..82eae89
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1859_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1860_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1860_en
new file mode 100644
index 0000000..24f9897
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1860_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1862_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1862_en
new file mode 100644
index 0000000..8442816
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1862_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1863_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1863_en
new file mode 100644
index 0000000..37b26a9
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1863_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1864_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1864_en
new file mode 100644
index 0000000..99aa6db
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1864_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1865_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1865_en
new file mode 100644
index 0000000..2fa95f3
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1865_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1867_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1867_en
new file mode 100644
index 0000000..e390fa5
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1867_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1870_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1870_en
new file mode 100644
index 0000000..626fe8e
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1870_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1872_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1872_en
new file mode 100644
index 0000000..e851d4b
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1872_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1878_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1878_en
new file mode 100644
index 0000000..676f678
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1878_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1888_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1888_en
new file mode 100644
index 0000000..47068cb
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1888_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1901_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1901_en
new file mode 100644
index 0000000..d54c8b4
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1901_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1902_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1902_en
new file mode 100644
index 0000000..89897a9
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1902_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1903_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1903_en
new file mode 100644
index 0000000..86d1f70
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1903_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1904_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1904_en
new file mode 100644
index 0000000..ad534ce
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1904_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1905_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1905_en
new file mode 100644
index 0000000..a445998
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1905_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1906_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1906_en
new file mode 100644
index 0000000..2919ad0
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1906_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1907_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1907_en
new file mode 100644
index 0000000..04c63e2
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1907_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1908_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1908_en
new file mode 100644
index 0000000..99c0e32
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1908_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1909_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1909_en
new file mode 100644
index 0000000..457e115
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1909_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1910_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1910_en
new file mode 100644
index 0000000..11e93fe
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1910_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1912_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1912_en
new file mode 100644
index 0000000..30ec7de
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1912_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1913_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1913_en
new file mode 100644
index 0000000..0272f76
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1913_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1914_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1914_en
new file mode 100644
index 0000000..e19a7bf
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1914_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1915_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1915_en
new file mode 100644
index 0000000..6adc9ae
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1915_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1916_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1916_en
new file mode 100644
index 0000000..766cf63
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1916_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1917_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1917_en
new file mode 100644
index 0000000..72c9476
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1917_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1918_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1918_en
new file mode 100644
index 0000000..034ceea
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1918_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1919_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1919_en
new file mode 100644
index 0000000..66b5a93
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1919_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1920_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1920_en
new file mode 100644
index 0000000..5e75d99
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1920_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1925_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1925_en
new file mode 100644
index 0000000..defa317
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1925_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1928_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1928_en
new file mode 100644
index 0000000..cc06485
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1928_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1931_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1931_en
new file mode 100644
index 0000000..2cbd816
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1931_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1936_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1936_en
new file mode 100644
index 0000000..c8bdcff
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1936_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1937_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1937_en
new file mode 100644
index 0000000..2698438
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1937_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1940_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1940_en
new file mode 100644
index 0000000..a100c66
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1940_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1941_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1941_en
new file mode 100644
index 0000000..30f5f87
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1941_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1947_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1947_en
new file mode 100644
index 0000000..314dd69
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1947_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1949_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1949_en
new file mode 100644
index 0000000..8dd0dd5
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1949_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1951_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1951_en
new file mode 100644
index 0000000..9812455
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1951_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1952_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1952_en
new file mode 100644
index 0000000..86ddc13
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1952_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1954_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1954_en
new file mode 100644
index 0000000..1f79669
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1954_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1956_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1956_en
new file mode 100644
index 0000000..cfe7888
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1956_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1970_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1970_en
new file mode 100644
index 0000000..4a9fd6c
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1970_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1971_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1971_en
new file mode 100644
index 0000000..053acd0
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1971_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1972_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1972_en
new file mode 100644
index 0000000..3335253
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1972_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1973_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1973_en
new file mode 100644
index 0000000..d682cc7
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1973_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1978_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1978_en
new file mode 100644
index 0000000..8f02daf
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1978_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1979_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1979_en
new file mode 100644
index 0000000..9d9d449
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1979_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1980_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1980_en
new file mode 100644
index 0000000..f1d82a3
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1980_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1985_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1985_en
new file mode 100644
index 0000000..73336d9
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1985_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/1989_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/1989_en
new file mode 100644
index 0000000..42db96d
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/1989_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/31_nl b/java/src/com/google/i18n/phonenumbers/geocoding/data/31_nl
index 4fa31ff..c1807c8 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/31_nl
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/31_nl
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/33_fr b/java/src/com/google/i18n/phonenumbers/geocoding/data/33_fr
index 29011e9..c18f305 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/33_fr
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/33_fr
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/34_es b/java/src/com/google/i18n/phonenumbers/geocoding/data/34_es
index f9f7e4c..e4719ca 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/34_es
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/34_es
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/351_pt b/java/src/com/google/i18n/phonenumbers/geocoding/data/351_pt
index 9095abd..04dc74e 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/351_pt
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/351_pt
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/39_it b/java/src/com/google/i18n/phonenumbers/geocoding/data/39_it
index 3f5de0f..2bd7c5c 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/39_it
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/39_it
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/41_de b/java/src/com/google/i18n/phonenumbers/geocoding/data/41_de
index e0021ed..86723f3 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/41_de
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/41_de
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/41_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/41_en
index f5c26cc..79ab086 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/41_en
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/41_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/41_fr b/java/src/com/google/i18n/phonenumbers/geocoding/data/41_fr
index d417de2..b62ae33 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/41_fr
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/41_fr
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/41_it b/java/src/com/google/i18n/phonenumbers/geocoding/data/41_it
index 845a7f6..847fc3f 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/41_it
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/41_it
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/43_de b/java/src/com/google/i18n/phonenumbers/geocoding/data/43_de
index 9be50ca..3143ede 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/43_de
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/43_de
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/44_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/44_en
index ade6ce4..3a2d306 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/44_en
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/44_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/46_sv b/java/src/com/google/i18n/phonenumbers/geocoding/data/46_sv
index a8ebc9c..016fd62 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/46_sv
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/46_sv
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/49_de b/java/src/com/google/i18n/phonenumbers/geocoding/data/49_de
index 0df583f..c37c736 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/49_de
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/49_de
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/54_es b/java/src/com/google/i18n/phonenumbers/geocoding/data/54_es
index 5c5f5ec..7d89c05 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/54_es
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/54_es
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/55_pt b/java/src/com/google/i18n/phonenumbers/geocoding/data/55_pt
index 7c2edf9..753576a 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/55_pt
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/55_pt
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/56_es b/java/src/com/google/i18n/phonenumbers/geocoding/data/56_es
index deb60d9..9126f78 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/56_es
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/56_es
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/7_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/7_en
index b39cd8a..7ac3c1d 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/7_en
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/7_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/82_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/82_en
index fdeaf4b..cd18ecb 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/82_en
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/82_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/82_ko b/java/src/com/google/i18n/phonenumbers/geocoding/data/82_ko
index 5e96f81..cbc3017 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/82_ko
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/82_ko
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/82_zh b/java/src/com/google/i18n/phonenumbers/geocoding/data/82_zh
index f7f64a9..d452ab7 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/82_zh
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/82_zh
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/82_zh_Hant b/java/src/com/google/i18n/phonenumbers/geocoding/data/82_zh_Hant
index a2e1825..a6a9452 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/82_zh_Hant
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/82_zh_Hant
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/86_zh b/java/src/com/google/i18n/phonenumbers/geocoding/data/86_zh
index ec58dc5..afa8d67 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/86_zh
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/86_zh
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/886_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/886_en
index b17f140..497c293 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/886_en
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/886_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/886_zh b/java/src/com/google/i18n/phonenumbers/geocoding/data/886_zh
index 7b81483..d04e3ab 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/886_zh
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/886_zh
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/886_zh_Hant b/java/src/com/google/i18n/phonenumbers/geocoding/data/886_zh_Hant
index 130d643..eb259e9 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/886_zh_Hant
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/886_zh_Hant
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/90_en b/java/src/com/google/i18n/phonenumbers/geocoding/data/90_en
index 3efa0e3..a3dfd81 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/90_en
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/90_en
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/90_tr b/java/src/com/google/i18n/phonenumbers/geocoding/data/90_tr
index 741cbd5..7ba238e 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/90_tr
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/90_tr
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/geocoding/data/config b/java/src/com/google/i18n/phonenumbers/geocoding/data/config
index 2161ee1..b40fe26 100644
--- a/java/src/com/google/i18n/phonenumbers/geocoding/data/config
+++ b/java/src/com/google/i18n/phonenumbers/geocoding/data/config
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java b/java/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java
index 4391f15..93a58f2 100644
--- a/java/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java
+++ b/java/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java
@@ -56,6 +56,23 @@
     assertEquals("650253", formatter.inputDigit('3'));
   }
 
+  public void testInvalidPlusSign() {
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("ZZ");
+    assertEquals("+", formatter.inputDigit('+'));
+    assertEquals("+4", formatter.inputDigit('4'));
+    assertEquals("+48 ", formatter.inputDigit('8'));
+    assertEquals("+48 8", formatter.inputDigit('8'));
+    assertEquals("+48 88", formatter.inputDigit('8'));
+    assertEquals("+48 88 1", formatter.inputDigit('1'));
+    assertEquals("+48 88 12", formatter.inputDigit('2'));
+    assertEquals("+48 88 123", formatter.inputDigit('3'));
+    assertEquals("+48 88 123 1", formatter.inputDigit('1'));
+    // A plus sign can only appear at the beginning of the number; otherwise, no formatting is
+    // applied.
+    assertEquals("+48881231+", formatter.inputDigit('+'));
+    assertEquals("+48881231+2", formatter.inputDigit('2'));
+  }
+
   public void testTooLongNumberMatchingMultipleLeadingDigits() {
     // See http://code.google.com/p/libphonenumber/issues/detail?id=36
     // The bug occurred last time for countries which have two formatting rules with exactly the
diff --git a/java/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java b/java/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
index 8761a3d..6201f14 100644
--- a/java/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
+++ b/java/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Google Inc.
+ * Copyright (C) 2010 Google Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/java/test/com/google/i18n/phonenumbers/PhoneNumberMatcherTest.java b/java/test/com/google/i18n/phonenumbers/PhoneNumberMatcherTest.java
index 492a20d..a37b122 100644
--- a/java/test/com/google/i18n/phonenumbers/PhoneNumberMatcherTest.java
+++ b/java/test/com/google/i18n/phonenumbers/PhoneNumberMatcherTest.java
@@ -22,6 +22,7 @@
 import junit.framework.TestCase;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
@@ -115,6 +116,8 @@
   /** See {@link PhoneNumberUtilTest#testParseWithXInNumber()}. */
   public void testFindWithXInNumber() throws Exception {
     doTestFindInContext("(0xx) 123456789", "AR");
+    // A case where x denotes both carrier codes and extension symbol.
+    doTestFindInContext("(0xx) 123456789 x 1234", "AR");
 
     // This test is intentionally constructed such that the number of digit after xx is larger than
     // 7, so that the number won't be mistakenly treated as an extension, as we allow extensions up
@@ -168,7 +171,9 @@
     doTestFindInContext("(800) 901-3355 x 7246433", "US");
     doTestFindInContext("(800) 901-3355 , ext 7246433", "US");
     doTestFindInContext("(800) 901-3355 ,extension 7246433", "US");
-    doTestFindInContext("(800) 901-3355 , 7246433", "US");
+    // The next test differs from PhoneNumberUtil -> when matching we don't consider a lone comma to
+    // indicate an extension, although we accept it when parsing.
+    doTestFindInContext("(800) 901-3355 ,x 7246433", "US");
     doTestFindInContext("(800) 901-3355 ext: 7246433", "US");
   }
 
@@ -199,10 +204,11 @@
 
   public void testMatchWithSurroundingZipcodes() throws Exception {
     String number = "415-666-7777";
-    String zipPreceding = "My address is CA 34215. " + number + " is my number.";
+    String zipPreceding = "My address is CA 34215 - " + number + " is my number.";
     PhoneNumber expectedResult = phoneUtil.parse(number, "US");
 
-    Iterator<PhoneNumberMatch> iterator = phoneUtil.findNumbers(zipPreceding, "US").iterator();
+    Iterator<PhoneNumberMatch> iterator =
+        phoneUtil.findNumbers(zipPreceding, "US").iterator();
     PhoneNumberMatch match = iterator.hasNext() ? iterator.next() : null;
     assertNotNull("Did not find a number in '" + zipPreceding + "'; expected " + number, match);
     assertEquals(expectedResult, match.number());
@@ -236,24 +242,42 @@
   }
 
   public void testMatchesWithSurroundingLatinChars() throws Exception {
-    ArrayList<NumberContext> contextPairs = new ArrayList<NumberContext>(5);
-    contextPairs.add(new NumberContext("abc", "def"));
-    contextPairs.add(new NumberContext("abc", ""));
-    contextPairs.add(new NumberContext("", "def"));
-    // Latin small letter e with an acute accent.
-    contextPairs.add(new NumberContext("\u00C9", ""));
-    // Same character decomposed (with combining mark).
-    contextPairs.add(new NumberContext("e\u0301", ""));
+    ArrayList<NumberContext> possibleOnlyContexts = new ArrayList<NumberContext>();
+    possibleOnlyContexts.add(new NumberContext("abc", "def"));
+    possibleOnlyContexts.add(new NumberContext("abc", ""));
+    possibleOnlyContexts.add(new NumberContext("", "def"));
+    // Latin capital letter e with an acute accent.
+    possibleOnlyContexts.add(new NumberContext("\u00C9", ""));
+    // e with an acute accent decomposed (with combining mark).
+    possibleOnlyContexts.add(new NumberContext("e\u0301", ""));
 
     // Numbers should not be considered valid, if they are surrounded by Latin characters, but
     // should be considered possible.
-    findMatchesInContexts(contextPairs, false, true);
+    findMatchesInContexts(possibleOnlyContexts, false, true);
+  }
+
+  public void testMoneyNotSeenAsPhoneNumber() throws Exception {
+    ArrayList<NumberContext> possibleOnlyContexts = new ArrayList<NumberContext>();
+    possibleOnlyContexts.add(new NumberContext("$", ""));
+    possibleOnlyContexts.add(new NumberContext("", "$"));
+    possibleOnlyContexts.add(new NumberContext("\u00A3", ""));  // Pound sign
+    possibleOnlyContexts.add(new NumberContext("\u00A5", ""));  // Yen sign
+    findMatchesInContexts(possibleOnlyContexts, false, true);
+  }
+
+  public void testPhoneNumberWithLeadingOrTrailingMoneyMatches() throws Exception {
+    // Because of the space after the 20 (or before the 100) these dollar amounts should not stop
+    // the actual number from being found.
+    ArrayList<NumberContext> contexts = new ArrayList<NumberContext>();
+    contexts.add(new NumberContext("$20 ", ""));
+    contexts.add(new NumberContext("", " 100$"));
+    findMatchesInContexts(contexts, true, true);
   }
 
   public void testMatchesWithSurroundingLatinCharsAndLeadingPunctuation() throws Exception {
     // Contexts with trailing characters. Leading characters are okay here since the numbers we will
     // insert start with punctuation, but trailing characters are still not allowed.
-    ArrayList<NumberContext> possibleOnlyContexts = new ArrayList<NumberContext>(3);
+    ArrayList<NumberContext> possibleOnlyContexts = new ArrayList<NumberContext>();
     possibleOnlyContexts.add(new NumberContext("abc", "def"));
     possibleOnlyContexts.add(new NumberContext("", "def"));
     possibleOnlyContexts.add(new NumberContext("", "\u00C9"));
@@ -265,7 +289,7 @@
     findMatchesInContexts(possibleOnlyContexts, false, true, "US", numberWithPlus);
     findMatchesInContexts(possibleOnlyContexts, false, true, "US", numberWithBrackets);
 
-    ArrayList<NumberContext> validContexts = new ArrayList<NumberContext>(4);
+    ArrayList<NumberContext> validContexts = new ArrayList<NumberContext>();
     validContexts.add(new NumberContext("abc", ""));
     validContexts.add(new NumberContext("\u00C9", ""));
     validContexts.add(new NumberContext("\u00C9", "."));  // Trailing punctuation.
@@ -277,7 +301,7 @@
   }
 
   public void testMatchesWithSurroundingChineseChars() throws Exception {
-    ArrayList<NumberContext> validContexts = new ArrayList<NumberContext>(3);
+    ArrayList<NumberContext> validContexts = new ArrayList<NumberContext>();
     validContexts.add(new NumberContext("\u6211\u7684\u7535\u8BDD\u53F7\u7801\u662F", ""));
     validContexts.add(new NumberContext("", "\u662F\u6211\u7684\u7535\u8BDD\u53F7\u7801"));
     validContexts.add(new NumberContext("\u8BF7\u62E8\u6253", "\u6211\u5728\u660E\u5929"));
@@ -287,7 +311,7 @@
   }
 
   public void testMatchesWithSurroundingPunctuation() throws Exception {
-    ArrayList<NumberContext> validContexts = new ArrayList<NumberContext>(4);
+    ArrayList<NumberContext> validContexts = new ArrayList<NumberContext>();
     validContexts.add(new NumberContext("My number-", ""));  // At end of text.
     validContexts.add(new NumberContext("", ".Nice day."));  // At start of text.
     validContexts.add(new NumberContext("Tel:", "."));  // Punctuation surrounds number.
@@ -297,6 +321,184 @@
     findMatchesInContexts(validContexts, true, true);
   }
 
+  public void testMatchesMultiplePhoneNumbersSeparatedByPhoneNumberPunctuation() throws Exception {
+    String text = "Call 650-253-4561 -- 455-234-3451";
+    String region = "US";
+
+    PhoneNumber number1 = new PhoneNumber();
+    number1.setCountryCode(phoneUtil.getCountryCodeForRegion(region));
+    number1.setNationalNumber(6502534561L);
+    PhoneNumberMatch match1 = new PhoneNumberMatch(5, "650-253-4561", number1);
+
+    PhoneNumber number2 = new PhoneNumber();
+    number2.setCountryCode(phoneUtil.getCountryCodeForRegion(region));
+    number2.setNationalNumber(4552343451L);
+    PhoneNumberMatch match2 = new PhoneNumberMatch(21, "455-234-3451", number2);
+
+    Iterator<PhoneNumberMatch> matches = phoneUtil.findNumbers(text, region).iterator();
+    assertEquals(match1, matches.next());
+    assertEquals(match2, matches.next());
+  }
+
+  public void testDoesNotMatchMultiplePhoneNumbersSeparatedWithNoWhiteSpace() throws Exception {
+    // No white-space found between numbers - neither is found.
+    String text = "Call 650-253-4561--455-234-3451";
+    String region = "US";
+
+    assertTrue(hasNoMatches(phoneUtil.findNumbers(text, region)));
+  }
+
+  /**
+   * Strings with number-like things that shouldn't be found under any level.
+   */
+  private static final NumberTest[] IMPOSSIBLE_CASES = {
+    new NumberTest("12345", "US"),
+    new NumberTest("23456789", "US"),
+    new NumberTest("234567890112", "US"),
+    new NumberTest("650+253+1234", "US"),
+    new NumberTest("3/10/1984", "CA"),
+    new NumberTest("03/27/2011", "US"),
+    new NumberTest("31/8/2011", "US"),
+    new NumberTest("1/12/2011", "US"),
+    new NumberTest("10/12/82", "DE"),
+  };
+
+  /**
+   * Strings with number-like things that should only be found under "possible".
+   */
+  private static final NumberTest[] POSSIBLE_ONLY_CASES = {
+    new NumberTest("abc8002345678", "US"),
+    // US numbers cannot start with 7 in the test metadata to be valid.
+    new NumberTest("7121115678", "US"),
+    // 'X' should not be found in numbers at leniencies stricter than POSSIBLE, unless it represents
+    // a carrier code or extension.
+    new NumberTest("1650 x 253 - 1234", "US"),
+    new NumberTest("650 x 253 - 1234", "US"),
+    new NumberTest("650x2531234", "US"),
+  };
+
+  /**
+   * Strings with number-like things that should only be found up to and including the "valid"
+   * leniency level.
+   */
+  private static final NumberTest[] VALID_CASES = {
+    new NumberTest("65 02 53 00 00.", "US"),
+    new NumberTest("6502 538365", "US"),
+    new NumberTest("650//253-1234", "US"),  // 2 slashes are illegal at higher levels
+    new NumberTest("650/253/1234", "US"),
+    new NumberTest("9002309. 158", "US"),
+    new NumberTest("21 7/8 - 14 12/34 - 5", "US"),
+    new NumberTest("12.1 - 23.71 - 23.45", "US"),
+    new NumberTest("1979-2011 100%", "US"),
+    new NumberTest("800 234 1 111x1111", "US"),
+    new NumberTest("+494949-4-94", "DE"),  // National number in wrong format
+  };
+
+  /**
+   * Strings with number-like things that should only be found up to and including the
+   * "strict_grouping" leniency level.
+   */
+  private static final NumberTest[] STRICT_GROUPING_CASES = {
+    new NumberTest("(415) 6667777", "US"),
+    new NumberTest("415-6667777", "US"),
+    // Should be found by strict grouping but not exact grouping, as the last two groups are
+    // formatted together as a block.
+    new NumberTest("800-2491234", "DE"),
+  };
+
+  /**
+   * Strings with number-like things that should found at all levels.
+   */
+  private static final NumberTest[] EXACT_GROUPING_CASES = {
+    new NumberTest("\uFF14\uFF11\uFF15\uFF16\uFF16\uFF16\uFF17\uFF17\uFF17\uFF17", "US"),
+    new NumberTest("\uFF14\uFF11\uFF15-\uFF16\uFF16\uFF16-\uFF17\uFF17\uFF17\uFF17", "US"),
+    new NumberTest("4156667777", "US"),
+    new NumberTest("4156667777 x 123", "US"),
+    new NumberTest("415-666-7777", "US"),
+    new NumberTest("415/666-7777", "US"),
+    new NumberTest("415-666-7777 ext. 503", "US"),
+    new NumberTest("1 415 666 7777 x 123", "US"),
+    new NumberTest("+1 415-666-7777", "US"),
+    new NumberTest("+494949 49", "DE"),
+    new NumberTest("+49-49-34", "DE"),
+    new NumberTest("+49-4931-49", "DE"),
+    new NumberTest("04931-49", "DE"),  // With National Prefix
+    new NumberTest("+49-494949", "DE"),  // One group with country code
+    new NumberTest("+49-494949 ext. 49", "DE"),
+    new NumberTest("+49494949 ext. 49", "DE"),
+    new NumberTest("0494949", "DE"),
+    new NumberTest("0494949 ext. 49", "DE"),
+  };
+
+  public void testMatchesWithStrictGroupingLeniency() throws Exception {
+    int noMatchFoundCount = 0;
+    int wrongMatchFoundCount = 0;
+    List<NumberTest> testCases = new ArrayList<NumberTest>();
+    testCases.addAll(Arrays.asList(STRICT_GROUPING_CASES));
+    testCases.addAll(Arrays.asList(EXACT_GROUPING_CASES));
+    doTestNumberMatchesForLeniency(testCases, Leniency.STRICT_GROUPING);
+  }
+
+  public void testNonMatchesWithStrictGroupLeniency() throws Exception {
+    int matchFoundCount = 0;
+    List<NumberTest> testCases = new ArrayList<NumberTest>();
+    testCases.addAll(Arrays.asList(POSSIBLE_ONLY_CASES));
+    testCases.addAll(Arrays.asList(VALID_CASES));
+    doTestNumberNonMatchesForLeniency(testCases, Leniency.STRICT_GROUPING);
+  }
+
+  public void testMatchesWithExactGroupingLeniency() throws Exception {
+    List<NumberTest> testCases = new ArrayList<NumberTest>();
+    testCases.addAll(Arrays.asList(EXACT_GROUPING_CASES));
+    doTestNumberMatchesForLeniency(testCases, Leniency.EXACT_GROUPING);
+  }
+
+  public void testNonMatchesExactGroupLeniency() throws Exception {
+    List<NumberTest> testCases = new ArrayList<NumberTest>();
+    testCases.addAll(Arrays.asList(POSSIBLE_ONLY_CASES));
+    testCases.addAll(Arrays.asList(VALID_CASES));
+    testCases.addAll(Arrays.asList(STRICT_GROUPING_CASES));
+    doTestNumberNonMatchesForLeniency(testCases, Leniency.EXACT_GROUPING);
+  }
+
+  private void doTestNumberMatchesForLeniency(List<NumberTest> testCases,
+                                              PhoneNumberUtil.Leniency leniency) {
+    int noMatchFoundCount = 0;
+    int wrongMatchFoundCount = 0;
+    for (NumberTest test : testCases) {
+      Iterator<PhoneNumberMatch> iterator =
+          findNumbersForLeniency(test.rawString, test.region, leniency);
+      PhoneNumberMatch match = iterator.hasNext() ? iterator.next() : null;
+      if (match == null) {
+        noMatchFoundCount++;
+        System.err.println("No match found in " + test.toString() + " for leniency: " + leniency);
+      } else {
+        if (!test.rawString.equals(match.rawString())) {
+          wrongMatchFoundCount++;
+          System.err.println("Found wrong match in test " + test.toString() +
+                             ". Found " + match.rawString());
+        }
+      }
+    }
+    assertEquals(0, noMatchFoundCount);
+    assertEquals(0, wrongMatchFoundCount);
+  }
+
+  private void doTestNumberNonMatchesForLeniency(List<NumberTest> testCases,
+                                                 PhoneNumberUtil.Leniency leniency) {
+    int matchFoundCount = 0;
+    for (NumberTest test : testCases) {
+      Iterator<PhoneNumberMatch> iterator =
+          findNumbersForLeniency(test.rawString, test.region, leniency);
+      PhoneNumberMatch match = iterator.hasNext() ? iterator.next() : null;
+      if (match != null) {
+        matchFoundCount++;
+        System.err.println("Match found in " + test.toString() + " for leniency: " + leniency);
+      }
+    }
+    assertEquals(0, matchFoundCount);
+  }
+
   /**
    * Helper method which tests the contexts provided and ensures that:
    * -- if isValid is true, they all find a test number inserted in the middle when leniency of
@@ -445,11 +647,10 @@
       numbers.append("My info: 415-666-7777 123 fake street");
     }
 
-    // Only matches the first 5 despite there being 100 numbers due to max matches.
-    // There are two false positives per line as "123" is also tried.
+    // Only matches the first 10 despite there being 100 numbers due to max matches.
     List<PhoneNumber> expected = new ArrayList<PhoneNumber>(100);
     PhoneNumber number = phoneUtil.parse("+14156667777", null);
-    for (int i = 0; i < 5; i++) {
+    for (int i = 0; i < 10; i++) {
       expected.add(number);
     }
 
@@ -572,7 +773,7 @@
     PhoneNumberMatch match = matches.next();
     assertEquals(start - index, match.start());
     assertEquals(end - index, match.end());
-    assertEquals(match.rawString(), sub.subSequence(match.start(), match.end()).toString());
+    assertEquals(sub.subSequence(match.start(), match.end()).toString(), match.rawString());
   }
 
   /**
@@ -594,7 +795,7 @@
    * Tests valid numbers in contexts that should pass for {@link Leniency#POSSIBLE}.
    */
   private void findPossibleInContext(String number, String defaultCountry) {
-    ArrayList<NumberContext> contextPairs = new ArrayList<NumberContext>(15);
+    ArrayList<NumberContext> contextPairs = new ArrayList<NumberContext>();
     contextPairs.add(new NumberContext("", ""));  // no context
     contextPairs.add(new NumberContext("   ", "\t"));  // whitespace only
     contextPairs.add(new NumberContext("Hello ", ""));  // no context at end
@@ -618,15 +819,9 @@
     // With dates, written in the American style.
     contextPairs.add(new NumberContext(
         "As I said on 03/10/2011, you may call me at ", ""));
-    contextPairs.add(new NumberContext(
-        "As I said on 03/27/2011, you may call me at ", ""));
-    contextPairs.add(new NumberContext(
-        "As I said on 31/8/2011, you may call me at ", ""));
-    contextPairs.add(new NumberContext(
-        "As I said on 1/12/2011, you may call me at ", ""));
-    contextPairs.add(new NumberContext(
-        "I was born on 10/12/82. Please call me at ", ""));
-    // With a postfix stripped off as it looks like the start of another number
+    // With trailing numbers after a comma. The 45 should not be considered an extension.
+    contextPairs.add(new NumberContext("", ", 45 days a year"));
+     // With a postfix stripped off as it looks like the start of another number.
     contextPairs.add(new NumberContext("Call ", "/x12 more"));
 
     doTestInContext(number, defaultCountry, contextPairs, Leniency.POSSIBLE);
@@ -637,17 +832,18 @@
    * {@link Leniency#VALID}.
    */
   private void findValidInContext(String number, String defaultCountry) {
-    ArrayList<NumberContext> contextPairs = new ArrayList<NumberContext>(5);
+    ArrayList<NumberContext> contextPairs = new ArrayList<NumberContext>();
     // With other small numbers.
     contextPairs.add(new NumberContext("It's only 9.99! Call ", " to buy"));
     // With a number Day.Month.Year date.
     contextPairs.add(new NumberContext("Call me on 21.6.1984 at ", ""));
     // With a number Month/Day date.
     contextPairs.add(new NumberContext("Call me on 06/21 at ", ""));
-    // With a number Day.Month date
+    // With a number Day.Month date.
     contextPairs.add(new NumberContext("Call me on 21.6. at ", ""));
     // With a number Month/Day/Year date.
     contextPairs.add(new NumberContext("Call me on 06/21/84 at ", ""));
+
     doTestInContext(number, defaultCountry, contextPairs, Leniency.VALID);
   }
 
@@ -659,10 +855,10 @@
 
       int start = prefix.length();
       int end = start + number.length();
-      Iterable<PhoneNumberMatch> iterable =
-          phoneUtil.findNumbers(text, defaultCountry, leniency, Long.MAX_VALUE);
+      Iterator<PhoneNumberMatch> iterator =
+          phoneUtil.findNumbers(text, defaultCountry, leniency, Long.MAX_VALUE).iterator();
 
-      PhoneNumberMatch match = iterable.iterator().hasNext() ? iterable.iterator().next() : null;
+      PhoneNumberMatch match = iterator.hasNext() ? iterator.next() : null;
       assertNotNull("Did not find a number in '" + text + "'; expected '" + number + "'", match);
 
       CharSequence extracted = text.subSequence(match.start(), match.end());
@@ -691,9 +887,18 @@
     }
   }
 
+  private Iterator<PhoneNumberMatch> findNumbersForLeniency(
+      String text, String defaultCountry, PhoneNumberUtil.Leniency leniency) {
+    return phoneUtil.findNumbers(text, defaultCountry, leniency, Long.MAX_VALUE).iterator();
+  }
+
   /**
    * Returns true if there were no matches found.
    */
+  private boolean hasNoMatches(Iterator<PhoneNumberMatch> iterator) {
+    return !iterator.hasNext();
+  }
+
   private boolean hasNoMatches(Iterable<PhoneNumberMatch> iterable) {
     return !iterable.iterator().hasNext();
   }
@@ -702,7 +907,7 @@
    * Small class that holds the context of the number we are testing against. The test will
    * insert the phone number to be found between leadingText and trailingText.
    */
-  private class NumberContext {
+  private static class NumberContext {
     final String leadingText;
     final String trailingText;
 
@@ -711,4 +916,22 @@
       this.trailingText = trailingText;
     }
   }
+
+  /**
+   * Small class that holds the number we want to test and the region for which it should be valid.
+   */
+  private static class NumberTest {
+    final String rawString;
+    final String region;
+
+    NumberTest(String rawString, String regionCode) {
+      this.rawString = rawString;
+      this.region = regionCode;
+    }
+
+    @Override
+    public String toString() {
+      return rawString + " (" + region.toString() + ")";
+    }
+  }
 }
diff --git a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
index db77003..aa0537a 100644
--- a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
+++ b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
@@ -147,7 +147,7 @@
     assertEquals("(\\d{3})(\\d{3})(\\d{4})",
                  metadata.getNumberFormat(1).getPattern());
     assertEquals("$1 $2 $3", metadata.getNumberFormat(1).getFormat());
-    assertEquals("[13-9]\\d{9}|2[0-35-9]\\d{8}",
+    assertEquals("[13-689]\\d{9}|2[0-35-9]\\d{8}",
                  metadata.getGeneralDesc().getNationalNumberPattern());
     assertEquals("\\d{7}(?:\\d{3})?", metadata.getGeneralDesc().getPossibleNumberPattern());
     assertTrue(metadata.getGeneralDesc().exactlySameAs(metadata.getFixedLine()));
@@ -170,7 +170,7 @@
     assertEquals("(\\d{3})(\\d{3,4})(\\d{4})",
                  metadata.getNumberFormat(5).getPattern());
     assertEquals("$1 $2 $3", metadata.getNumberFormat(5).getFormat());
-    assertEquals("(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{3,8}",
+    assertEquals("(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{1,8}",
                  metadata.getFixedLine().getNationalNumberPattern());
     assertEquals("\\d{2,14}", metadata.getFixedLine().getPossibleNumberPattern());
     assertEquals("30123456", metadata.getFixedLine().getExampleNumber());
@@ -1837,8 +1837,6 @@
     assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
                  phoneUtil.isNumberMatch("+64 3 331-6005", "03 331 6005"));
     assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
-                 phoneUtil.isNumberMatch("3 331-6005", "03 331 6005"));
-    assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
                  phoneUtil.isNumberMatch(NZ_NUMBER, "03 331 6005"));
     // Here the second number possibly starts with the country calling code for New Zealand,
     // although we are unsure.
@@ -1872,6 +1870,10 @@
     // Short NSN matches with the country not specified for either one or both numbers.
     assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
                  phoneUtil.isNumberMatch("+64 3 331-6005", "331 6005"));
+    // We did not know that the "0" was a national prefix since neither number has a country code,
+    // so this is considered a SHORT_NSN_MATCH.
+    assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
+                 phoneUtil.isNumberMatch("3 331-6005", "03 331 6005"));
     assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
                  phoneUtil.isNumberMatch("3 331-6005", "331 6005"));
     assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE
index 0c78534..766539f 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
index d93e0a2..0630d77 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/AreaCodeMapTest.java b/java/test/com/google/i18n/phonenumbers/geocoding/AreaCodeMapTest.java
index 637d51e..a01a96c 100644
--- a/java/test/com/google/i18n/phonenumbers/geocoding/AreaCodeMapTest.java
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/AreaCodeMapTest.java
@@ -33,8 +33,8 @@
  * @author Shaopeng Jia
  */
 public class AreaCodeMapTest extends TestCase {
-  private final AreaCodeMap areaCodeMapForUS = new AreaCodeMap(1);
-  private final AreaCodeMap areaCodeMapForIT = new AreaCodeMap(39);
+  private final AreaCodeMap areaCodeMapForUS = new AreaCodeMap();
+  private final AreaCodeMap areaCodeMapForIT = new AreaCodeMap();
   private PhoneNumber number = new PhoneNumber();
 
   public AreaCodeMapTest() {
@@ -83,13 +83,13 @@
 
   public void testGetSmallerMapStorageChoosesDefaultImpl() {
     AreaCodeMapStorageStrategy mapStorage =
-        new AreaCodeMap(1).getSmallerMapStorage(createDefaultStorageMapCandidate());
+        new AreaCodeMap().getSmallerMapStorage(createDefaultStorageMapCandidate());
     assertFalse(mapStorage.isFlyweight());
   }
 
   public void testGetSmallerMapStorageChoosesFlyweightImpl() {
     AreaCodeMapStorageStrategy mapStorage =
-        new AreaCodeMap(1).getSmallerMapStorage(createFlyweightStorageMapCandidate());
+        new AreaCodeMap().getSmallerMapStorage(createFlyweightStorageMapCandidate());
     assertTrue(mapStorage.isFlyweight());
   }
 
@@ -158,21 +158,20 @@
    * this stream. The resulting area code map is expected to be strictly equal to the provided one
    * from which it was generated.
    */
-  private static AreaCodeMap createNewAreaCodeMap(AreaCodeMap areaCodeMap)
-      throws IOException {
+  private static AreaCodeMap createNewAreaCodeMap(AreaCodeMap areaCodeMap) throws IOException {
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
     ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
     areaCodeMap.writeExternal(objectOutputStream);
     objectOutputStream.flush();
 
-    AreaCodeMap newAreaCodeMap = new AreaCodeMap(1);
+    AreaCodeMap newAreaCodeMap = new AreaCodeMap();
     newAreaCodeMap.readExternal(
         new ObjectInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())));
     return newAreaCodeMap;
   }
 
   public void testReadWriteExternalWithDefaultStrategy() throws IOException {
-    AreaCodeMap localAreaCodeMap = new AreaCodeMap(1);
+    AreaCodeMap localAreaCodeMap = new AreaCodeMap();
     localAreaCodeMap.readAreaCodeMap(createDefaultStorageMapCandidate());
     assertFalse(localAreaCodeMap.getAreaCodeMapStorage().isFlyweight());
 
@@ -182,7 +181,7 @@
   }
 
   public void testReadWriteExternalWithFlyweightStrategy() throws IOException {
-    AreaCodeMap localAreaCodeMap = new AreaCodeMap(1);
+    AreaCodeMap localAreaCodeMap = new AreaCodeMap();
     localAreaCodeMap.readAreaCodeMap(createFlyweightStorageMapCandidate());
     assertTrue(localAreaCodeMap.getAreaCodeMapStorage().isFlyweight());
 
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/FlyweightMapStorageTest.java b/java/test/com/google/i18n/phonenumbers/geocoding/FlyweightMapStorageTest.java
new file mode 100644
index 0000000..d254c6a
--- /dev/null
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/FlyweightMapStorageTest.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.i18n.phonenumbers.geocoding;
+
+import junit.framework.TestCase;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * Unittests for FlyweightMapStorage.java
+ *
+ * @author Philippe Liard
+ */
+public class FlyweightMapStorageTest extends TestCase {
+  private final SortedMap<Integer, String> areaCodeMap = new TreeMap<Integer, String>();
+
+  public FlyweightMapStorageTest() {
+    areaCodeMap.put(331402, "Paris");
+    areaCodeMap.put(331434, "Paris");
+    areaCodeMap.put(334910, "Marseille");
+    areaCodeMap.put(334911, "Marseille");
+  }
+
+  public void testReadFromSortedMap() {
+    FlyweightMapStorage mapStorage = new FlyweightMapStorage();
+    mapStorage.readFromSortedMap(areaCodeMap);
+
+    assertEquals(331402, mapStorage.getPrefix(0));
+    assertEquals(331434, mapStorage.getPrefix(1));
+    assertEquals(334910, mapStorage.getPrefix(2));
+    assertEquals(334911, mapStorage.getPrefix(3));
+
+    String desc = mapStorage.getDescription(0);
+    assertEquals("Paris", desc);
+    assertTrue(desc == mapStorage.getDescription(1));  // Same identity.
+
+    desc = mapStorage.getDescription(2);
+    assertEquals("Marseille", desc);
+    assertTrue(desc == mapStorage.getDescription(3));  // Same identity.
+  }
+
+  public void testWriteAndReadExternal() throws IOException {
+    FlyweightMapStorage mapStorage = new FlyweightMapStorage();
+    mapStorage.readFromSortedMap(areaCodeMap);
+
+    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+    ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
+    mapStorage.writeExternal(objectOutputStream);
+    objectOutputStream.flush();
+
+    FlyweightMapStorage newMapStorage = new FlyweightMapStorage();
+    ObjectInputStream objectInputStream =
+        new ObjectInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()));
+    newMapStorage.readExternal(objectInputStream);
+
+    String expected = mapStorage.toString();
+    assertFalse(expected.length() == 0);
+    assertEquals(expected, newMapStorage.toString());
+  }
+}
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoderTest.java b/java/test/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoderTest.java
index ba73b35..a7b4242 100644
--- a/java/test/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoderTest.java
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoderTest.java
@@ -48,7 +48,7 @@
   private static final PhoneNumber US_NUMBER3 =
       new PhoneNumber().setCountryCode(1).setNationalNumber(2128120000L);
   private static final PhoneNumber US_INVALID_NUMBER =
-      new PhoneNumber().setCountryCode(1).setNationalNumber(1234567890L);
+      new PhoneNumber().setCountryCode(1).setNationalNumber(123456789L);
   private static final PhoneNumber BS_NUMBER1 =
       new PhoneNumber().setCountryCode(1).setNationalNumber(2423651234L);
   private static final PhoneNumber AU_NUMBER =
@@ -95,7 +95,7 @@
         geocoder.getDescriptionForNumber(KO_NUMBER3, Locale.KOREAN));
   }
 
-  public void testGetDescritionForInvaildNumber() {
+  public void testGetDescriptionForInvalidNumber() {
     assertEquals("", geocoder.getDescriptionForNumber(KO_INVALID_NUMBER, Locale.ENGLISH));
     assertEquals("", geocoder.getDescriptionForNumber(US_INVALID_NUMBER, Locale.ENGLISH));
   }
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1201_en b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1201_en
new file mode 100644
index 0000000..9af68fa
--- /dev/null
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1201_en
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1212_en b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1212_en
new file mode 100644
index 0000000..0c3d5d8
--- /dev/null
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1212_en
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1617_en b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1617_en
new file mode 100644
index 0000000..b4f7c1d
--- /dev/null
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1617_en
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1650_en b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1650_en
new file mode 100644
index 0000000..a95364e
--- /dev/null
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1650_en
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1989_en b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1989_en
new file mode 100644
index 0000000..40d8716
--- /dev/null
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/1989_en
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/82_en b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/82_en
index fdeaf4b..cd18ecb 100644
--- a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/82_en
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/82_en
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/82_ko b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/82_ko
index 5e96f81..cbc3017 100644
--- a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/82_ko
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/82_ko
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/config b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/config
index ab7bf47..0731ac8 100644
--- a/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/config
+++ b/java/test/com/google/i18n/phonenumbers/geocoding/testing_data/config
Binary files differ