From d9cfebd89518ff9d8fbafba958ecff7858ea6132 Mon Sep 17 00:00:00 2001 From: tonihei Date: Tue, 28 Sep 2021 16:23:47 +0100 Subject: [PATCH] Update initial network bandwidth estimates. PiperOrigin-RevId: 399444511 --- .../upstream/DefaultBandwidthMeter.java | 388 +++++++++--------- 1 file changed, 195 insertions(+), 193 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java index c046ca8d45..07b3185b43 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java @@ -51,27 +51,27 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList /** Default initial Wifi bitrate estimate in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_WIFI = - ImmutableList.of(6_200_000L, 3_900_000L, 2_300_000L, 1_300_000L, 620_000L); + ImmutableList.of(5_400_000L, 3_300_000L, 2_000_000L, 1_300_000L, 760_000L); /** Default initial 2G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_2G = - ImmutableList.of(248_000L, 160_000L, 142_000L, 127_000L, 113_000L); + ImmutableList.of(1_700_000L, 820_000L, 450_000L, 180_000L, 130_000L); /** Default initial 3G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_3G = - ImmutableList.of(2_200_000L, 1_300_000L, 950_000L, 760_000L, 520_000L); + ImmutableList.of(2_300_000L, 1_300_000L, 1_000_000L, 820_000L, 570_000L); /** Default initial 4G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_4G = - ImmutableList.of(4_400_000L, 2_300_000L, 1_500_000L, 1_100_000L, 640_000L); + ImmutableList.of(3_400_000L, 2_000_000L, 1_400_000L, 1_000_000L, 620_000L); /** Default initial 5G-NSA bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA = - ImmutableList.of(10_000_000L, 7_200_000L, 5_000_000L, 2_700_000L, 1_600_000L); + ImmutableList.of(7_500_000L, 5_200_000L, 3_700_000L, 1_800_000L, 1_100_000L); /** Default initial 5G-SA bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_SA = - ImmutableList.of(2_600_000L, 2_200_000L, 2_000_000L, 1_500_000L, 470_000L); + ImmutableList.of(3_300_000L, 1_900_000L, 1_700_000L, 1_500_000L, 1_200_000L); /** * Default initial bitrate estimate used when the device is offline or the network type cannot be @@ -465,243 +465,245 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList createInitialBitrateCountryGroupAssignment() { return ImmutableListMultimap.builder() .putAll("AD", 1, 2, 0, 0, 2, 2) - .putAll("AE", 1, 4, 4, 4, 2, 2) - .putAll("AF", 4, 4, 3, 4, 2, 2) - .putAll("AG", 4, 2, 1, 4, 2, 2) + .putAll("AE", 1, 4, 4, 4, 3, 2) + .putAll("AF", 4, 4, 4, 4, 2, 2) + .putAll("AG", 2, 3, 1, 2, 2, 2) .putAll("AI", 1, 2, 2, 2, 2, 2) - .putAll("AL", 1, 1, 1, 1, 2, 2) - .putAll("AM", 2, 2, 1, 3, 2, 2) - .putAll("AO", 3, 4, 3, 1, 2, 2) - .putAll("AR", 2, 4, 2, 1, 2, 2) - .putAll("AS", 2, 2, 3, 3, 2, 2) - .putAll("AT", 0, 1, 0, 0, 0, 2) - .putAll("AU", 0, 2, 0, 1, 1, 2) - .putAll("AW", 1, 2, 0, 4, 2, 2) + .putAll("AL", 1, 2, 0, 1, 2, 2) + .putAll("AM", 2, 3, 2, 4, 2, 2) + .putAll("AO", 3, 4, 3, 2, 2, 2) + .putAll("AQ", 4, 2, 2, 2, 2, 2) + .putAll("AR", 2, 4, 1, 1, 2, 2) + .putAll("AS", 2, 2, 2, 3, 2, 2) + .putAll("AT", 0, 0, 0, 0, 0, 2) + .putAll("AU", 0, 1, 0, 1, 2, 2) + .putAll("AW", 1, 2, 4, 4, 2, 2) .putAll("AX", 0, 2, 2, 2, 2, 2) - .putAll("AZ", 3, 3, 3, 4, 4, 2) - .putAll("BA", 1, 1, 0, 1, 2, 2) + .putAll("AZ", 3, 2, 4, 4, 2, 2) + .putAll("BA", 1, 2, 0, 1, 2, 2) .putAll("BB", 0, 2, 0, 0, 2, 2) - .putAll("BD", 2, 0, 3, 3, 2, 2) - .putAll("BE", 0, 0, 2, 3, 2, 2) - .putAll("BF", 4, 4, 4, 2, 2, 2) - .putAll("BG", 0, 1, 0, 0, 2, 2) - .putAll("BH", 1, 0, 2, 4, 2, 2) - .putAll("BI", 4, 4, 4, 4, 2, 2) - .putAll("BJ", 4, 4, 4, 4, 2, 2) + .putAll("BD", 2, 1, 3, 3, 2, 2) + .putAll("BE", 0, 0, 3, 3, 2, 2) + .putAll("BF", 4, 3, 4, 3, 2, 2) + .putAll("BG", 0, 0, 0, 0, 1, 2) + .putAll("BH", 1, 2, 2, 4, 4, 2) + .putAll("BI", 4, 3, 4, 4, 2, 2) + .putAll("BJ", 4, 4, 3, 4, 2, 2) .putAll("BL", 1, 2, 2, 2, 2, 2) - .putAll("BM", 0, 2, 0, 0, 2, 2) - .putAll("BN", 3, 2, 1, 0, 2, 2) - .putAll("BO", 1, 2, 4, 2, 2, 2) - .putAll("BQ", 1, 2, 1, 2, 2, 2) - .putAll("BR", 2, 4, 3, 2, 2, 2) - .putAll("BS", 2, 2, 1, 3, 2, 2) - .putAll("BT", 3, 0, 3, 2, 2, 2) - .putAll("BW", 3, 4, 1, 1, 2, 2) - .putAll("BY", 1, 1, 1, 2, 2, 2) - .putAll("BZ", 2, 2, 2, 2, 2, 2) - .putAll("CA", 0, 3, 1, 2, 4, 2) - .putAll("CD", 4, 2, 2, 1, 2, 2) + .putAll("BM", 1, 2, 0, 0, 2, 2) + .putAll("BN", 3, 2, 1, 1, 2, 2) + .putAll("BO", 1, 3, 3, 2, 2, 2) + .putAll("BQ", 1, 2, 2, 0, 2, 2) + .putAll("BR", 2, 3, 2, 2, 2, 2) + .putAll("BS", 4, 2, 2, 3, 2, 2) + .putAll("BT", 3, 1, 3, 2, 2, 2) + .putAll("BW", 3, 4, 1, 0, 2, 2) + .putAll("BY", 0, 1, 1, 3, 2, 2) + .putAll("BZ", 2, 4, 2, 2, 2, 2) + .putAll("CA", 0, 2, 1, 2, 4, 1) + .putAll("CD", 4, 2, 3, 1, 2, 2) .putAll("CF", 4, 2, 3, 2, 2, 2) - .putAll("CG", 3, 4, 2, 2, 2, 2) - .putAll("CH", 0, 0, 0, 0, 1, 2) - .putAll("CI", 3, 3, 3, 3, 2, 2) - .putAll("CK", 2, 2, 3, 0, 2, 2) - .putAll("CL", 1, 1, 2, 2, 2, 2) + .putAll("CG", 2, 4, 3, 4, 2, 2) + .putAll("CH", 0, 0, 0, 0, 0, 2) + .putAll("CI", 3, 3, 3, 4, 2, 2) + .putAll("CK", 2, 2, 2, 1, 2, 2) + .putAll("CL", 1, 1, 2, 2, 3, 2) .putAll("CM", 3, 4, 3, 2, 2, 2) - .putAll("CN", 2, 2, 2, 1, 3, 2) - .putAll("CO", 2, 3, 4, 2, 2, 2) - .putAll("CR", 2, 3, 4, 4, 2, 2) - .putAll("CU", 4, 4, 2, 2, 2, 2) + .putAll("CN", 2, 0, 2, 2, 3, 1) + .putAll("CO", 2, 2, 4, 2, 2, 2) + .putAll("CR", 2, 2, 4, 4, 2, 2) + .putAll("CU", 4, 4, 3, 2, 2, 2) .putAll("CV", 2, 3, 1, 0, 2, 2) - .putAll("CW", 1, 2, 0, 0, 2, 2) - .putAll("CY", 1, 1, 0, 0, 2, 2) - .putAll("CZ", 0, 1, 0, 0, 1, 2) - .putAll("DE", 0, 0, 1, 1, 0, 2) - .putAll("DJ", 4, 0, 4, 4, 2, 2) + .putAll("CW", 2, 2, 0, 0, 2, 2) + .putAll("CX", 1, 2, 2, 2, 2, 2) + .putAll("CY", 1, 0, 0, 0, 1, 2) + .putAll("CZ", 0, 0, 0, 0, 1, 2) + .putAll("DE", 0, 0, 2, 2, 1, 2) + .putAll("DJ", 4, 1, 4, 4, 2, 2) .putAll("DK", 0, 0, 1, 0, 0, 2) .putAll("DM", 1, 2, 2, 2, 2, 2) .putAll("DO", 3, 4, 4, 4, 2, 2) - .putAll("DZ", 3, 3, 4, 4, 2, 4) - .putAll("EC", 2, 4, 3, 1, 2, 2) - .putAll("EE", 0, 1, 0, 0, 2, 2) - .putAll("EG", 3, 4, 3, 3, 2, 2) + .putAll("DZ", 4, 3, 4, 4, 2, 2) + .putAll("EC", 2, 4, 2, 1, 2, 2) + .putAll("EE", 0, 0, 0, 0, 2, 2) + .putAll("EG", 3, 4, 2, 3, 2, 2) .putAll("EH", 2, 2, 2, 2, 2, 2) .putAll("ER", 4, 2, 2, 2, 2, 2) .putAll("ES", 0, 1, 1, 1, 2, 2) - .putAll("ET", 4, 4, 4, 1, 2, 2) - .putAll("FI", 0, 0, 0, 0, 0, 2) - .putAll("FJ", 3, 0, 2, 3, 2, 2) - .putAll("FK", 4, 2, 2, 2, 2, 2) - .putAll("FM", 3, 2, 4, 4, 2, 2) - .putAll("FO", 1, 2, 0, 1, 2, 2) - .putAll("FR", 1, 1, 2, 0, 1, 2) - .putAll("GA", 3, 4, 1, 1, 2, 2) - .putAll("GB", 0, 0, 1, 1, 1, 2) + .putAll("ET", 4, 4, 3, 1, 2, 2) + .putAll("FI", 0, 0, 0, 1, 0, 2) + .putAll("FJ", 3, 1, 3, 3, 2, 2) + .putAll("FK", 3, 2, 2, 2, 2, 2) + .putAll("FM", 3, 2, 4, 2, 2, 2) + .putAll("FO", 0, 2, 0, 0, 2, 2) + .putAll("FR", 1, 1, 2, 1, 1, 1) + .putAll("GA", 2, 3, 1, 1, 2, 2) + .putAll("GB", 0, 0, 1, 1, 2, 3) .putAll("GD", 1, 2, 2, 2, 2, 2) - .putAll("GE", 1, 1, 1, 2, 2, 2) - .putAll("GF", 2, 2, 2, 3, 2, 2) - .putAll("GG", 1, 2, 0, 0, 2, 2) - .putAll("GH", 3, 1, 3, 2, 2, 2) - .putAll("GI", 0, 2, 0, 0, 2, 2) + .putAll("GE", 1, 1, 1, 3, 2, 2) + .putAll("GF", 2, 1, 2, 3, 2, 2) + .putAll("GG", 0, 2, 0, 0, 2, 2) + .putAll("GH", 3, 2, 3, 2, 2, 2) + .putAll("GI", 0, 2, 2, 2, 2, 2) .putAll("GL", 1, 2, 0, 0, 2, 2) - .putAll("GM", 4, 3, 2, 4, 2, 2) + .putAll("GM", 4, 2, 2, 4, 2, 2) .putAll("GN", 4, 3, 4, 2, 2, 2) .putAll("GP", 2, 1, 2, 3, 2, 2) - .putAll("GQ", 4, 2, 2, 4, 2, 2) - .putAll("GR", 1, 2, 0, 0, 2, 2) - .putAll("GT", 3, 2, 3, 1, 2, 2) - .putAll("GU", 1, 2, 3, 4, 2, 2) - .putAll("GW", 4, 4, 4, 4, 2, 2) - .putAll("GY", 3, 3, 3, 4, 2, 2) + .putAll("GQ", 4, 2, 3, 4, 2, 2) + .putAll("GR", 1, 0, 0, 0, 2, 2) + .putAll("GT", 2, 3, 2, 1, 2, 2) + .putAll("GU", 1, 2, 4, 4, 2, 2) + .putAll("GW", 3, 4, 3, 3, 2, 2) + .putAll("GY", 3, 4, 1, 0, 2, 2) .putAll("HK", 0, 1, 2, 3, 2, 0) - .putAll("HN", 3, 1, 3, 3, 2, 2) - .putAll("HR", 1, 1, 0, 0, 3, 2) + .putAll("HN", 3, 2, 3, 3, 2, 2) + .putAll("HR", 1, 0, 0, 0, 2, 2) .putAll("HT", 4, 4, 4, 4, 2, 2) - .putAll("HU", 0, 0, 0, 0, 0, 2) - .putAll("ID", 3, 2, 3, 3, 2, 2) - .putAll("IE", 0, 0, 1, 1, 3, 2) - .putAll("IL", 1, 0, 2, 3, 4, 2) + .putAll("HU", 0, 0, 0, 1, 3, 2) + .putAll("ID", 3, 2, 3, 3, 3, 2) + .putAll("IE", 0, 1, 1, 1, 2, 2) + .putAll("IL", 1, 1, 2, 3, 4, 2) .putAll("IM", 0, 2, 0, 1, 2, 2) - .putAll("IN", 2, 1, 3, 3, 2, 2) - .putAll("IO", 4, 2, 2, 4, 2, 2) - .putAll("IQ", 3, 3, 4, 4, 2, 2) - .putAll("IR", 3, 2, 3, 2, 2, 2) - .putAll("IS", 0, 2, 0, 0, 2, 2) - .putAll("IT", 0, 4, 0, 1, 2, 2) - .putAll("JE", 2, 2, 1, 2, 2, 2) - .putAll("JM", 3, 3, 4, 4, 2, 2) - .putAll("JO", 2, 2, 1, 1, 2, 2) - .putAll("JP", 0, 0, 0, 0, 2, 1) - .putAll("KE", 3, 4, 2, 2, 2, 2) - .putAll("KG", 2, 0, 1, 1, 2, 2) - .putAll("KH", 1, 0, 4, 3, 2, 2) + .putAll("IN", 1, 1, 3, 2, 4, 3) + .putAll("IO", 4, 2, 2, 2, 2, 2) + .putAll("IQ", 3, 3, 3, 3, 2, 2) + .putAll("IR", 3, 0, 1, 1, 3, 0) + .putAll("IS", 0, 0, 0, 0, 0, 2) + .putAll("IT", 0, 1, 0, 1, 1, 2) + .putAll("JE", 3, 2, 1, 2, 2, 2) + .putAll("JM", 3, 4, 4, 4, 2, 2) + .putAll("JO", 1, 0, 0, 1, 2, 2) + .putAll("JP", 0, 1, 0, 1, 1, 1) + .putAll("KE", 3, 3, 2, 2, 2, 2) + .putAll("KG", 2, 1, 1, 1, 2, 2) + .putAll("KH", 1, 1, 4, 2, 2, 2) .putAll("KI", 4, 2, 4, 3, 2, 2) - .putAll("KM", 4, 3, 2, 3, 2, 2) - .putAll("KN", 1, 2, 2, 2, 2, 2) - .putAll("KP", 4, 2, 2, 2, 2, 2) - .putAll("KR", 0, 0, 1, 3, 1, 2) - .putAll("KW", 1, 3, 1, 1, 1, 2) - .putAll("KY", 1, 2, 0, 2, 2, 2) - .putAll("KZ", 2, 2, 2, 3, 2, 2) - .putAll("LA", 1, 2, 1, 1, 2, 2) - .putAll("LB", 3, 2, 0, 0, 2, 2) + .putAll("KM", 4, 2, 4, 3, 2, 2) + .putAll("KN", 2, 2, 2, 2, 2, 2) + .putAll("KP", 3, 2, 2, 2, 2, 2) + .putAll("KR", 0, 0, 1, 3, 4, 4) + .putAll("KW", 1, 1, 0, 0, 0, 2) + .putAll("KY", 1, 2, 0, 1, 2, 2) + .putAll("KZ", 1, 1, 2, 2, 2, 2) + .putAll("LA", 2, 2, 1, 2, 2, 2) + .putAll("LB", 3, 2, 1, 4, 2, 2) .putAll("LC", 1, 2, 0, 0, 2, 2) .putAll("LI", 0, 2, 2, 2, 2, 2) - .putAll("LK", 2, 0, 2, 3, 2, 2) + .putAll("LK", 3, 1, 3, 4, 4, 2) .putAll("LR", 3, 4, 4, 3, 2, 2) - .putAll("LS", 3, 3, 2, 3, 2, 2) + .putAll("LS", 3, 3, 4, 3, 2, 2) .putAll("LT", 0, 0, 0, 0, 2, 2) - .putAll("LU", 1, 0, 1, 1, 2, 2) + .putAll("LU", 1, 0, 2, 2, 2, 2) .putAll("LV", 0, 0, 0, 0, 2, 2) .putAll("LY", 4, 2, 4, 3, 2, 2) - .putAll("MA", 3, 2, 2, 1, 2, 2) - .putAll("MC", 0, 2, 0, 0, 2, 2) - .putAll("MD", 1, 2, 0, 0, 2, 2) - .putAll("ME", 1, 2, 0, 1, 2, 2) - .putAll("MF", 2, 2, 1, 1, 2, 2) + .putAll("MA", 3, 2, 2, 2, 2, 2) + .putAll("MC", 0, 2, 2, 0, 2, 2) + .putAll("MD", 1, 0, 0, 0, 2, 2) + .putAll("ME", 1, 0, 0, 1, 2, 2) + .putAll("MF", 1, 2, 1, 0, 2, 2) .putAll("MG", 3, 4, 2, 2, 2, 2) - .putAll("MH", 4, 2, 2, 4, 2, 2) - .putAll("MK", 1, 1, 0, 0, 2, 2) - .putAll("ML", 4, 4, 2, 2, 2, 2) - .putAll("MM", 2, 3, 3, 3, 2, 2) - .putAll("MN", 2, 4, 2, 2, 2, 2) + .putAll("MH", 3, 2, 2, 4, 2, 2) + .putAll("MK", 1, 0, 0, 0, 2, 2) + .putAll("ML", 4, 3, 3, 1, 2, 2) + .putAll("MM", 2, 4, 3, 3, 2, 2) + .putAll("MN", 2, 0, 1, 2, 2, 2) .putAll("MO", 0, 2, 4, 4, 2, 2) .putAll("MP", 0, 2, 2, 2, 2, 2) - .putAll("MQ", 2, 2, 2, 3, 2, 2) - .putAll("MR", 3, 0, 4, 3, 2, 2) + .putAll("MQ", 2, 1, 2, 3, 2, 2) + .putAll("MR", 4, 1, 3, 4, 2, 2) .putAll("MS", 1, 2, 2, 2, 2, 2) - .putAll("MT", 0, 2, 0, 0, 2, 2) - .putAll("MU", 2, 1, 1, 2, 2, 2) - .putAll("MV", 4, 3, 2, 4, 2, 2) + .putAll("MT", 0, 0, 0, 0, 2, 2) + .putAll("MU", 3, 1, 1, 2, 2, 2) + .putAll("MV", 3, 4, 1, 4, 2, 2) .putAll("MW", 4, 2, 1, 0, 2, 2) - .putAll("MX", 2, 4, 4, 4, 4, 2) - .putAll("MY", 1, 0, 3, 2, 2, 2) - .putAll("MZ", 3, 3, 2, 1, 2, 2) - .putAll("NA", 4, 3, 3, 2, 2, 2) - .putAll("NC", 3, 0, 4, 4, 2, 2) + .putAll("MX", 2, 4, 3, 4, 2, 2) + .putAll("MY", 2, 1, 3, 3, 2, 2) + .putAll("MZ", 3, 2, 2, 2, 2, 2) + .putAll("NA", 4, 3, 2, 2, 2, 2) + .putAll("NC", 3, 2, 4, 4, 2, 2) .putAll("NE", 4, 4, 4, 4, 2, 2) .putAll("NF", 2, 2, 2, 2, 2, 2) - .putAll("NG", 3, 3, 2, 3, 2, 2) - .putAll("NI", 2, 1, 4, 4, 2, 2) - .putAll("NL", 0, 2, 3, 2, 0, 2) - .putAll("NO", 0, 1, 2, 0, 0, 2) - .putAll("NP", 2, 0, 4, 2, 2, 2) - .putAll("NR", 3, 2, 3, 1, 2, 2) + .putAll("NG", 3, 4, 1, 1, 2, 2) + .putAll("NI", 2, 3, 4, 3, 2, 2) + .putAll("NL", 0, 0, 3, 2, 0, 4) + .putAll("NO", 0, 0, 2, 0, 0, 2) + .putAll("NP", 2, 1, 4, 3, 2, 2) + .putAll("NR", 3, 2, 2, 0, 2, 2) .putAll("NU", 4, 2, 2, 2, 2, 2) - .putAll("NZ", 0, 2, 1, 2, 4, 2) - .putAll("OM", 2, 2, 1, 3, 3, 2) + .putAll("NZ", 1, 0, 1, 2, 4, 2) + .putAll("OM", 2, 3, 1, 3, 4, 2) .putAll("PA", 1, 3, 3, 3, 2, 2) - .putAll("PE", 2, 3, 4, 4, 2, 2) - .putAll("PF", 2, 2, 2, 1, 2, 2) + .putAll("PE", 2, 3, 4, 4, 4, 2) + .putAll("PF", 2, 3, 3, 1, 2, 2) .putAll("PG", 4, 4, 3, 2, 2, 2) - .putAll("PH", 2, 1, 3, 3, 3, 2) + .putAll("PH", 2, 2, 3, 3, 3, 2) .putAll("PK", 3, 2, 3, 3, 2, 2) - .putAll("PL", 1, 0, 1, 2, 3, 2) + .putAll("PL", 1, 1, 2, 2, 3, 2) .putAll("PM", 0, 2, 2, 2, 2, 2) - .putAll("PR", 2, 1, 2, 2, 4, 3) - .putAll("PS", 3, 3, 2, 2, 2, 2) - .putAll("PT", 0, 1, 1, 0, 2, 2) - .putAll("PW", 1, 2, 4, 1, 2, 2) - .putAll("PY", 2, 0, 3, 2, 2, 2) - .putAll("QA", 2, 3, 1, 2, 3, 2) - .putAll("RE", 1, 0, 2, 2, 2, 2) - .putAll("RO", 0, 1, 0, 1, 0, 2) - .putAll("RS", 1, 2, 0, 0, 2, 2) - .putAll("RU", 0, 1, 0, 1, 4, 2) - .putAll("RW", 3, 3, 3, 1, 2, 2) - .putAll("SA", 2, 2, 2, 1, 1, 2) - .putAll("SB", 4, 2, 3, 2, 2, 2) - .putAll("SC", 4, 2, 1, 3, 2, 2) + .putAll("PR", 2, 3, 2, 2, 3, 3) + .putAll("PS", 3, 4, 1, 2, 2, 2) + .putAll("PT", 0, 1, 0, 0, 2, 2) + .putAll("PW", 2, 2, 4, 1, 2, 2) + .putAll("PY", 2, 2, 3, 2, 2, 2) + .putAll("QA", 2, 4, 2, 4, 4, 2) + .putAll("RE", 1, 1, 1, 2, 2, 2) + .putAll("RO", 0, 0, 1, 1, 1, 2) + .putAll("RS", 1, 0, 0, 0, 2, 2) + .putAll("RU", 0, 0, 0, 1, 2, 2) + .putAll("RW", 3, 4, 3, 0, 2, 2) + .putAll("SA", 2, 2, 1, 1, 2, 2) + .putAll("SB", 4, 2, 4, 3, 2, 2) + .putAll("SC", 4, 3, 0, 2, 2, 2) .putAll("SD", 4, 4, 4, 4, 2, 2) .putAll("SE", 0, 0, 0, 0, 0, 2) - .putAll("SG", 1, 0, 1, 2, 3, 2) + .putAll("SG", 1, 1, 2, 3, 1, 4) .putAll("SH", 4, 2, 2, 2, 2, 2) - .putAll("SI", 0, 0, 0, 0, 2, 2) - .putAll("SJ", 2, 2, 2, 2, 2, 2) - .putAll("SK", 0, 1, 0, 0, 2, 2) - .putAll("SL", 4, 3, 4, 0, 2, 2) + .putAll("SI", 0, 0, 0, 0, 1, 2) + .putAll("SJ", 0, 2, 2, 2, 2, 2) + .putAll("SK", 0, 0, 0, 0, 0, 2) + .putAll("SL", 4, 3, 4, 1, 2, 2) .putAll("SM", 0, 2, 2, 2, 2, 2) .putAll("SN", 4, 4, 4, 4, 2, 2) - .putAll("SO", 3, 3, 3, 4, 2, 2) - .putAll("SR", 3, 2, 2, 2, 2, 2) - .putAll("SS", 4, 4, 3, 3, 2, 2) - .putAll("ST", 2, 2, 1, 2, 2, 2) - .putAll("SV", 2, 1, 4, 3, 2, 2) + .putAll("SO", 3, 2, 3, 3, 2, 2) + .putAll("SR", 2, 3, 2, 2, 2, 2) + .putAll("SS", 4, 2, 2, 2, 2, 2) + .putAll("ST", 3, 2, 2, 2, 2, 2) + .putAll("SV", 2, 2, 3, 3, 2, 2) .putAll("SX", 2, 2, 1, 0, 2, 2) - .putAll("SY", 4, 3, 3, 2, 2, 2) - .putAll("SZ", 3, 3, 2, 4, 2, 2) - .putAll("TC", 2, 2, 2, 0, 2, 2) - .putAll("TD", 4, 3, 4, 4, 2, 2) - .putAll("TG", 3, 2, 2, 4, 2, 2) - .putAll("TH", 0, 3, 2, 3, 2, 2) - .putAll("TJ", 4, 4, 4, 4, 2, 2) - .putAll("TL", 4, 0, 4, 4, 2, 2) - .putAll("TM", 4, 2, 4, 3, 2, 2) - .putAll("TN", 2, 1, 1, 2, 2, 2) - .putAll("TO", 3, 3, 4, 3, 2, 2) - .putAll("TR", 1, 2, 1, 1, 2, 2) - .putAll("TT", 1, 4, 0, 1, 2, 2) - .putAll("TV", 3, 2, 2, 4, 2, 2) - .putAll("TW", 0, 0, 0, 0, 1, 0) - .putAll("TZ", 3, 3, 3, 2, 2, 2) + .putAll("SY", 4, 3, 4, 4, 2, 2) + .putAll("SZ", 4, 3, 2, 4, 2, 2) + .putAll("TC", 2, 2, 1, 0, 2, 2) + .putAll("TD", 4, 4, 4, 4, 2, 2) + .putAll("TG", 3, 3, 2, 0, 2, 2) + .putAll("TH", 0, 3, 2, 3, 3, 0) + .putAll("TJ", 4, 2, 4, 4, 2, 2) + .putAll("TL", 4, 3, 4, 4, 2, 2) + .putAll("TM", 4, 2, 4, 2, 2, 2) + .putAll("TN", 2, 2, 1, 1, 2, 2) + .putAll("TO", 4, 2, 3, 3, 2, 2) + .putAll("TR", 1, 1, 0, 1, 2, 2) + .putAll("TT", 1, 4, 1, 1, 2, 2) + .putAll("TV", 4, 2, 2, 2, 2, 2) + .putAll("TW", 0, 0, 0, 0, 0, 0) + .putAll("TZ", 3, 4, 3, 3, 2, 2) .putAll("UA", 0, 3, 1, 1, 2, 2) - .putAll("UG", 3, 2, 3, 3, 2, 2) - .putAll("US", 1, 1, 2, 2, 4, 2) - .putAll("UY", 2, 2, 1, 1, 2, 2) - .putAll("UZ", 2, 1, 3, 4, 2, 2) + .putAll("UG", 3, 3, 3, 3, 2, 2) + .putAll("US", 1, 1, 2, 2, 3, 2) + .putAll("UY", 2, 2, 1, 2, 2, 2) + .putAll("UZ", 2, 2, 3, 4, 2, 2) .putAll("VC", 1, 2, 2, 2, 2, 2) .putAll("VE", 4, 4, 4, 4, 2, 2) .putAll("VG", 2, 2, 1, 1, 2, 2) - .putAll("VI", 1, 2, 1, 2, 2, 2) - .putAll("VN", 0, 1, 3, 4, 2, 2) - .putAll("VU", 4, 0, 3, 1, 2, 2) + .putAll("VI", 1, 2, 1, 3, 2, 2) + .putAll("VN", 0, 3, 3, 4, 2, 2) + .putAll("VU", 4, 2, 2, 1, 2, 2) .putAll("WF", 4, 2, 2, 4, 2, 2) - .putAll("WS", 3, 1, 3, 1, 2, 2) - .putAll("XK", 0, 1, 1, 0, 2, 2) - .putAll("YE", 4, 4, 4, 3, 2, 2) - .putAll("YT", 4, 2, 2, 3, 2, 2) - .putAll("ZA", 3, 3, 2, 1, 2, 2) - .putAll("ZM", 3, 2, 3, 3, 2, 2) + .putAll("WS", 3, 1, 2, 1, 2, 2) + .putAll("XK", 1, 1, 1, 1, 2, 2) + .putAll("YE", 4, 4, 4, 4, 2, 2) + .putAll("YT", 4, 1, 1, 1, 2, 2) + .putAll("ZA", 3, 3, 1, 1, 1, 2) + .putAll("ZM", 3, 3, 4, 2, 2, 2) .putAll("ZW", 3, 2, 4, 3, 2, 2) .build(); }