diff --git a/Cargo.lock b/Cargo.lock index 727d3ca67..1d87b2f69 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -730,6 +730,18 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-xml-rs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53630160a98edebde0123eb4dfd0fce6adff091b2305db3154a9e920206eb510" +dependencies = [ + "log", + "serde", + "thiserror", + "xml-rs", +] + [[package]] name = "serde_core" version = "1.0.225" @@ -871,6 +883,26 @@ dependencies = [ "zoneinfo64", ] +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "timezone_provider" version = "0.1.2" @@ -879,6 +911,7 @@ dependencies = [ "databake", "jiff-tzdb", "serde", + "serde-xml-rs", "serde_json", "tinystr", "tzif", @@ -1200,6 +1233,12 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +[[package]] +name = "xml-rs" +version = "0.8.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" + [[package]] name = "yoke" version = "0.8.0" diff --git a/Cargo.toml b/Cargo.toml index f45d6a0cf..e4e064cc0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,8 @@ exclude = [ "CONTRIBUTING.md", "cliff.toml", "tests/data/zoneinfo64.res", + # Under a different license + "provider/src/tzdb/cldr-timezone.xml", ] [workspace.dependencies] diff --git a/provider/Cargo.toml b/provider/Cargo.toml index 0bd9a6b66..9ca35c0bd 100644 --- a/provider/Cargo.toml +++ b/provider/Cargo.toml @@ -73,3 +73,6 @@ databake = { workspace = true, optional = true, features = ["derive"]} yoke = { version = "0.8.0", features = ["derive"], optional = true } serde_json = { version = "1.0.145", optional = true } +[dev-dependencies] +serde-xml-rs = "0.8.1" +serde = { version = "1.0.225" , features = ["derive"] } diff --git a/provider/src/data/debug/iana_normalizer.json b/provider/src/data/debug/iana_normalizer.json index 3bc9d9f65..9537f25ba 100644 --- a/provider/src/data/debug/iana_normalizer.json +++ b/provider/src/data/debug/iana_normalizer.json @@ -268,345 +268,346 @@ "asia/dushanbe": 264, "asia/famagusta": 265, "asia/gaza": 266, - "asia/harbin": 267, - "asia/hebron": 268, - "asia/ho_chi_minh": 269, - "asia/hong_kong": 270, - "asia/hovd": 271, - "asia/irkutsk": 272, - "asia/istanbul": 273, - "asia/jakarta": 274, - "asia/jayapura": 275, - "asia/jerusalem": 276, - "asia/kabul": 277, - "asia/kamchatka": 278, - "asia/karachi": 279, - "asia/kashgar": 280, - "asia/kathmandu": 281, - "asia/katmandu": 282, - "asia/khandyga": 283, - "asia/kolkata": 284, - "asia/krasnoyarsk": 285, - "asia/kuala_lumpur": 286, - "asia/kuching": 287, - "asia/kuwait": 288, - "asia/macao": 289, - "asia/macau": 290, - "asia/magadan": 291, - "asia/makassar": 292, - "asia/manila": 293, - "asia/muscat": 294, - "asia/nicosia": 295, - "asia/novokuznetsk": 296, - "asia/novosibirsk": 297, - "asia/omsk": 298, - "asia/oral": 299, - "asia/phnom_penh": 300, - "asia/pontianak": 301, - "asia/pyongyang": 302, - "asia/qatar": 303, - "asia/qostanay": 304, - "asia/qyzylorda": 305, - "asia/rangoon": 306, - "asia/riyadh": 307, - "asia/saigon": 308, - "asia/sakhalin": 309, - "asia/samarkand": 310, - "asia/seoul": 311, - "asia/shanghai": 312, - "asia/singapore": 313, - "asia/srednekolymsk": 314, - "asia/taipei": 315, - "asia/tashkent": 316, - "asia/tbilisi": 317, - "asia/tehran": 318, - "asia/tel_aviv": 319, - "asia/thimbu": 320, - "asia/thimphu": 321, - "asia/tokyo": 322, - "asia/tomsk": 323, - "asia/ujung_pandang": 324, - "asia/ulaanbaatar": 325, - "asia/ulan_bator": 326, - "asia/urumqi": 327, - "asia/ust-nera": 328, - "asia/vientiane": 329, - "asia/vladivostok": 330, - "asia/yakutsk": 331, - "asia/yangon": 332, - "asia/yekaterinburg": 333, - "asia/yerevan": 334, - "atlantic/azores": 335, - "atlantic/bermuda": 336, - "atlantic/canary": 337, - "atlantic/cape_verde": 338, - "atlantic/faeroe": 339, - "atlantic/faroe": 340, - "atlantic/jan_mayen": 341, - "atlantic/madeira": 342, - "atlantic/reykjavik": 343, - "atlantic/south_georgia": 344, - "atlantic/st_helena": 345, - "atlantic/stanley": 346, - "australia/act": 347, - "australia/adelaide": 348, - "australia/brisbane": 349, - "australia/broken_hill": 350, - "australia/canberra": 351, - "australia/currie": 352, - "australia/darwin": 353, - "australia/eucla": 354, - "australia/hobart": 355, - "australia/lhi": 356, - "australia/lindeman": 357, - "australia/lord_howe": 358, - "australia/melbourne": 359, - "australia/north": 361, - "australia/nsw": 360, - "australia/perth": 362, - "australia/queensland": 363, - "australia/south": 364, - "australia/sydney": 365, - "australia/tasmania": 366, - "australia/victoria": 367, - "australia/west": 368, - "australia/yancowinna": 369, - "brazil/acre": 370, - "brazil/denoronha": 371, - "brazil/east": 372, - "brazil/west": 373, - "canada/atlantic": 376, - "canada/central": 377, - "canada/eastern": 378, - "canada/mountain": 379, - "canada/newfoundland": 380, - "canada/pacific": 381, - "canada/saskatchewan": 382, - "canada/yukon": 383, - "cet": 374, - "chile/continental": 384, - "chile/easterisland": 385, - "cst6cdt": 375, - "cuba": 386, - "eet": 387, - "egypt": 390, - "eire": 391, - "est": 388, - "est5edt": 389, - "etc/gmt": 392, - "etc/gmt+0": 393, - "etc/gmt+1": 394, - "etc/gmt+10": 395, - "etc/gmt+11": 396, - "etc/gmt+12": 397, - "etc/gmt+2": 398, - "etc/gmt+3": 399, - "etc/gmt+4": 400, - "etc/gmt+5": 401, - "etc/gmt+6": 402, - "etc/gmt+7": 403, - "etc/gmt+8": 404, - "etc/gmt+9": 405, - "etc/gmt-0": 406, - "etc/gmt-1": 407, - "etc/gmt-10": 408, - "etc/gmt-11": 409, - "etc/gmt-12": 410, - "etc/gmt-13": 411, - "etc/gmt-14": 412, - "etc/gmt-2": 413, - "etc/gmt-3": 414, - "etc/gmt-4": 415, - "etc/gmt-5": 416, - "etc/gmt-6": 417, - "etc/gmt-7": 418, - "etc/gmt-8": 419, - "etc/gmt-9": 420, - "etc/gmt0": 421, - "etc/greenwich": 422, - "etc/uct": 423, - "etc/universal": 425, - "etc/utc": 424, - "etc/zulu": 426, - "europe/amsterdam": 427, - "europe/andorra": 428, - "europe/astrakhan": 429, - "europe/athens": 430, - "europe/belfast": 431, - "europe/belgrade": 432, - "europe/berlin": 433, - "europe/bratislava": 434, - "europe/brussels": 435, - "europe/bucharest": 436, - "europe/budapest": 437, - "europe/busingen": 438, - "europe/chisinau": 439, - "europe/copenhagen": 440, - "europe/dublin": 441, - "europe/gibraltar": 442, - "europe/guernsey": 443, - "europe/helsinki": 444, - "europe/isle_of_man": 445, - "europe/istanbul": 446, - "europe/jersey": 447, - "europe/kaliningrad": 448, - "europe/kiev": 449, - "europe/kirov": 450, - "europe/kyiv": 451, - "europe/lisbon": 452, - "europe/ljubljana": 453, - "europe/london": 454, - "europe/luxembourg": 455, - "europe/madrid": 456, - "europe/malta": 457, - "europe/mariehamn": 458, - "europe/minsk": 459, - "europe/monaco": 460, - "europe/moscow": 461, - "europe/nicosia": 462, - "europe/oslo": 463, - "europe/paris": 464, - "europe/podgorica": 465, - "europe/prague": 466, - "europe/riga": 467, - "europe/rome": 468, - "europe/samara": 469, - "europe/san_marino": 470, - "europe/sarajevo": 471, - "europe/saratov": 472, - "europe/simferopol": 473, - "europe/skopje": 474, - "europe/sofia": 475, - "europe/stockholm": 476, - "europe/tallinn": 477, - "europe/tirane": 478, - "europe/tiraspol": 479, - "europe/ulyanovsk": 480, - "europe/uzhgorod": 481, - "europe/vaduz": 482, - "europe/vatican": 483, - "europe/vienna": 484, - "europe/vilnius": 485, - "europe/volgograd": 486, - "europe/warsaw": 487, - "europe/zagreb": 488, - "europe/zaporozhye": 489, - "europe/zurich": 490, - "gb": 491, - "gb-eire": 492, - "gmt": 493, - "gmt+0": 494, - "gmt-0": 495, - "gmt0": 496, - "greenwich": 497, - "hongkong": 499, - "hst": 498, - "iceland": 500, - "indian/antananarivo": 501, - "indian/chagos": 502, - "indian/christmas": 503, - "indian/cocos": 504, - "indian/comoro": 505, - "indian/kerguelen": 506, - "indian/mahe": 507, - "indian/maldives": 508, - "indian/mauritius": 509, - "indian/mayotte": 510, - "indian/reunion": 511, - "iran": 512, - "israel": 513, - "jamaica": 514, - "japan": 515, - "kwajalein": 516, - "libya": 517, - "met": 518, - "mexico/bajanorte": 521, - "mexico/bajasur": 522, - "mexico/general": 523, - "mst": 519, - "mst7mdt": 520, - "navajo": 526, - "nz": 524, - "nz-chat": 525, - "pacific/apia": 529, - "pacific/auckland": 530, - "pacific/bougainville": 531, - "pacific/chatham": 532, - "pacific/chuuk": 533, - "pacific/easter": 534, - "pacific/efate": 535, - "pacific/enderbury": 536, - "pacific/fakaofo": 537, - "pacific/fiji": 538, - "pacific/funafuti": 539, - "pacific/galapagos": 540, - "pacific/gambier": 541, - "pacific/guadalcanal": 542, - "pacific/guam": 543, - "pacific/honolulu": 544, - "pacific/johnston": 545, - "pacific/kanton": 546, - "pacific/kiritimati": 547, - "pacific/kosrae": 548, - "pacific/kwajalein": 549, - "pacific/majuro": 550, - "pacific/marquesas": 551, - "pacific/midway": 552, - "pacific/nauru": 553, - "pacific/niue": 554, - "pacific/norfolk": 555, - "pacific/noumea": 556, - "pacific/pago_pago": 557, - "pacific/palau": 558, - "pacific/pitcairn": 559, - "pacific/pohnpei": 560, - "pacific/ponape": 561, - "pacific/port_moresby": 562, - "pacific/rarotonga": 563, - "pacific/saipan": 564, - "pacific/samoa": 565, - "pacific/tahiti": 566, - "pacific/tarawa": 567, - "pacific/tongatapu": 568, - "pacific/truk": 569, - "pacific/wake": 570, - "pacific/wallis": 571, - "pacific/yap": 572, - "poland": 573, - "portugal": 574, - "prc": 527, - "pst8pdt": 528, - "roc": 575, - "rok": 576, - "singapore": 577, - "turkey": 578, - "uct": 579, - "universal": 593, - "us/alaska": 580, - "us/aleutian": 581, - "us/arizona": 582, - "us/central": 583, - "us/east-indiana": 584, - "us/eastern": 585, - "us/hawaii": 586, - "us/indiana-starke": 587, - "us/michigan": 588, - "us/mountain": 589, - "us/pacific": 590, - "us/samoa": 591, - "utc": 592, - "w-su": 594, - "wet": 595, - "zulu": 596 + "asia/hanoi": 267, + "asia/harbin": 268, + "asia/hebron": 269, + "asia/ho_chi_minh": 270, + "asia/hong_kong": 271, + "asia/hovd": 272, + "asia/irkutsk": 273, + "asia/istanbul": 274, + "asia/jakarta": 275, + "asia/jayapura": 276, + "asia/jerusalem": 277, + "asia/kabul": 278, + "asia/kamchatka": 279, + "asia/karachi": 280, + "asia/kashgar": 281, + "asia/kathmandu": 282, + "asia/katmandu": 283, + "asia/khandyga": 284, + "asia/kolkata": 285, + "asia/krasnoyarsk": 286, + "asia/kuala_lumpur": 287, + "asia/kuching": 288, + "asia/kuwait": 289, + "asia/macao": 290, + "asia/macau": 291, + "asia/magadan": 292, + "asia/makassar": 293, + "asia/manila": 294, + "asia/muscat": 295, + "asia/nicosia": 296, + "asia/novokuznetsk": 297, + "asia/novosibirsk": 298, + "asia/omsk": 299, + "asia/oral": 300, + "asia/phnom_penh": 301, + "asia/pontianak": 302, + "asia/pyongyang": 303, + "asia/qatar": 304, + "asia/qostanay": 305, + "asia/qyzylorda": 306, + "asia/rangoon": 307, + "asia/riyadh": 308, + "asia/saigon": 309, + "asia/sakhalin": 310, + "asia/samarkand": 311, + "asia/seoul": 312, + "asia/shanghai": 313, + "asia/singapore": 314, + "asia/srednekolymsk": 315, + "asia/taipei": 316, + "asia/tashkent": 317, + "asia/tbilisi": 318, + "asia/tehran": 319, + "asia/tel_aviv": 320, + "asia/thimbu": 321, + "asia/thimphu": 322, + "asia/tokyo": 323, + "asia/tomsk": 324, + "asia/ujung_pandang": 325, + "asia/ulaanbaatar": 326, + "asia/ulan_bator": 327, + "asia/urumqi": 328, + "asia/ust-nera": 329, + "asia/vientiane": 330, + "asia/vladivostok": 331, + "asia/yakutsk": 332, + "asia/yangon": 333, + "asia/yekaterinburg": 334, + "asia/yerevan": 335, + "atlantic/azores": 336, + "atlantic/bermuda": 337, + "atlantic/canary": 338, + "atlantic/cape_verde": 339, + "atlantic/faeroe": 340, + "atlantic/faroe": 341, + "atlantic/jan_mayen": 342, + "atlantic/madeira": 343, + "atlantic/reykjavik": 344, + "atlantic/south_georgia": 345, + "atlantic/st_helena": 346, + "atlantic/stanley": 347, + "australia/act": 348, + "australia/adelaide": 349, + "australia/brisbane": 350, + "australia/broken_hill": 351, + "australia/canberra": 352, + "australia/currie": 353, + "australia/darwin": 354, + "australia/eucla": 355, + "australia/hobart": 356, + "australia/lhi": 357, + "australia/lindeman": 358, + "australia/lord_howe": 359, + "australia/melbourne": 360, + "australia/north": 362, + "australia/nsw": 361, + "australia/perth": 363, + "australia/queensland": 364, + "australia/south": 365, + "australia/sydney": 366, + "australia/tasmania": 367, + "australia/victoria": 368, + "australia/west": 369, + "australia/yancowinna": 370, + "brazil/acre": 371, + "brazil/denoronha": 372, + "brazil/east": 373, + "brazil/west": 374, + "canada/atlantic": 377, + "canada/central": 378, + "canada/eastern": 379, + "canada/mountain": 380, + "canada/newfoundland": 381, + "canada/pacific": 382, + "canada/saskatchewan": 383, + "canada/yukon": 384, + "cet": 375, + "chile/continental": 385, + "chile/easterisland": 386, + "cst6cdt": 376, + "cuba": 387, + "eet": 388, + "egypt": 391, + "eire": 392, + "est": 389, + "est5edt": 390, + "etc/gmt": 393, + "etc/gmt+0": 394, + "etc/gmt+1": 395, + "etc/gmt+10": 396, + "etc/gmt+11": 397, + "etc/gmt+12": 398, + "etc/gmt+2": 399, + "etc/gmt+3": 400, + "etc/gmt+4": 401, + "etc/gmt+5": 402, + "etc/gmt+6": 403, + "etc/gmt+7": 404, + "etc/gmt+8": 405, + "etc/gmt+9": 406, + "etc/gmt-0": 407, + "etc/gmt-1": 408, + "etc/gmt-10": 409, + "etc/gmt-11": 410, + "etc/gmt-12": 411, + "etc/gmt-13": 412, + "etc/gmt-14": 413, + "etc/gmt-2": 414, + "etc/gmt-3": 415, + "etc/gmt-4": 416, + "etc/gmt-5": 417, + "etc/gmt-6": 418, + "etc/gmt-7": 419, + "etc/gmt-8": 420, + "etc/gmt-9": 421, + "etc/gmt0": 422, + "etc/greenwich": 423, + "etc/uct": 424, + "etc/universal": 426, + "etc/utc": 425, + "etc/zulu": 427, + "europe/amsterdam": 428, + "europe/andorra": 429, + "europe/astrakhan": 430, + "europe/athens": 431, + "europe/belfast": 432, + "europe/belgrade": 433, + "europe/berlin": 434, + "europe/bratislava": 435, + "europe/brussels": 436, + "europe/bucharest": 437, + "europe/budapest": 438, + "europe/busingen": 439, + "europe/chisinau": 440, + "europe/copenhagen": 441, + "europe/dublin": 442, + "europe/gibraltar": 443, + "europe/guernsey": 444, + "europe/helsinki": 445, + "europe/isle_of_man": 446, + "europe/istanbul": 447, + "europe/jersey": 448, + "europe/kaliningrad": 449, + "europe/kiev": 450, + "europe/kirov": 451, + "europe/kyiv": 452, + "europe/lisbon": 453, + "europe/ljubljana": 454, + "europe/london": 455, + "europe/luxembourg": 456, + "europe/madrid": 457, + "europe/malta": 458, + "europe/mariehamn": 459, + "europe/minsk": 460, + "europe/monaco": 461, + "europe/moscow": 462, + "europe/nicosia": 463, + "europe/oslo": 464, + "europe/paris": 465, + "europe/podgorica": 466, + "europe/prague": 467, + "europe/riga": 468, + "europe/rome": 469, + "europe/samara": 470, + "europe/san_marino": 471, + "europe/sarajevo": 472, + "europe/saratov": 473, + "europe/simferopol": 474, + "europe/skopje": 475, + "europe/sofia": 476, + "europe/stockholm": 477, + "europe/tallinn": 478, + "europe/tirane": 479, + "europe/tiraspol": 480, + "europe/ulyanovsk": 481, + "europe/uzhgorod": 482, + "europe/vaduz": 483, + "europe/vatican": 484, + "europe/vienna": 485, + "europe/vilnius": 486, + "europe/volgograd": 487, + "europe/warsaw": 488, + "europe/zagreb": 489, + "europe/zaporozhye": 490, + "europe/zurich": 491, + "gb": 492, + "gb-eire": 493, + "gmt": 494, + "gmt+0": 495, + "gmt-0": 496, + "gmt0": 497, + "greenwich": 498, + "hongkong": 500, + "hst": 499, + "iceland": 501, + "indian/antananarivo": 502, + "indian/chagos": 503, + "indian/christmas": 504, + "indian/cocos": 505, + "indian/comoro": 506, + "indian/kerguelen": 507, + "indian/mahe": 508, + "indian/maldives": 509, + "indian/mauritius": 510, + "indian/mayotte": 511, + "indian/reunion": 512, + "iran": 513, + "israel": 514, + "jamaica": 515, + "japan": 516, + "kwajalein": 517, + "libya": 518, + "met": 519, + "mexico/bajanorte": 522, + "mexico/bajasur": 523, + "mexico/general": 524, + "mst": 520, + "mst7mdt": 521, + "navajo": 527, + "nz": 525, + "nz-chat": 526, + "pacific/apia": 530, + "pacific/auckland": 531, + "pacific/bougainville": 532, + "pacific/chatham": 533, + "pacific/chuuk": 534, + "pacific/easter": 535, + "pacific/efate": 536, + "pacific/enderbury": 537, + "pacific/fakaofo": 538, + "pacific/fiji": 539, + "pacific/funafuti": 540, + "pacific/galapagos": 541, + "pacific/gambier": 542, + "pacific/guadalcanal": 543, + "pacific/guam": 544, + "pacific/honolulu": 545, + "pacific/johnston": 546, + "pacific/kanton": 547, + "pacific/kiritimati": 548, + "pacific/kosrae": 549, + "pacific/kwajalein": 550, + "pacific/majuro": 551, + "pacific/marquesas": 552, + "pacific/midway": 553, + "pacific/nauru": 554, + "pacific/niue": 555, + "pacific/norfolk": 556, + "pacific/noumea": 557, + "pacific/pago_pago": 558, + "pacific/palau": 559, + "pacific/pitcairn": 560, + "pacific/pohnpei": 561, + "pacific/ponape": 562, + "pacific/port_moresby": 563, + "pacific/rarotonga": 564, + "pacific/saipan": 565, + "pacific/samoa": 566, + "pacific/tahiti": 567, + "pacific/tarawa": 568, + "pacific/tongatapu": 569, + "pacific/truk": 570, + "pacific/wake": 571, + "pacific/wallis": 572, + "pacific/yap": 573, + "poland": 574, + "portugal": 575, + "prc": 528, + "pst8pdt": 529, + "roc": 576, + "rok": 577, + "singapore": 578, + "turkey": 579, + "uct": 580, + "universal": 594, + "us/alaska": 581, + "us/aleutian": 582, + "us/arizona": 583, + "us/central": 584, + "us/east-indiana": 585, + "us/eastern": 586, + "us/hawaii": 587, + "us/indiana-starke": 588, + "us/michigan": 589, + "us/mountain": 590, + "us/pacific": 591, + "us/samoa": 592, + "utc": 593, + "w-su": 595, + "wet": 596, + "zulu": 597 }, "non_canonical_identifiers": [ [ 5, - 43 + 4 ], [ 50, - 0 + 6 ], [ 61, @@ -626,7 +627,7 @@ ], [ 96, - 179 + 74 ], [ 97, @@ -702,7 +703,7 @@ ], [ 218, - 187 + 208 ], [ 222, @@ -710,7 +711,7 @@ ], [ 231, - 530 + 228 ], [ 243, @@ -718,495 +719,495 @@ ], [ 253, - 284 + 285 ], [ 255, - 325 + 326 ], [ 256, - 312 + 313 ], [ 257, - 312 + 313 ], [ 259, 261 ], [ - 267, - 312 - ], - [ - 273, - 446 + 268, + 313 ], [ - 280, - 327 + 274, + 447 ], [ - 282, - 281 + 281, + 328 ], [ - 289, - 290 + 283, + 282 ], [ - 306, - 332 + 290, + 291 ], [ - 308, - 269 + 307, + 333 ], [ - 319, - 276 + 309, + 270 ], [ 320, - 321 + 277 ], [ - 324, - 292 + 321, + 322 ], [ - 326, - 325 + 325, + 293 ], [ - 339, - 340 + 327, + 326 ], [ - 341, - 433 + 340, + 341 ], [ - 347, - 365 + 342, + 235 ], [ - 351, - 365 + 348, + 366 ], [ 352, - 355 + 366 ], [ - 356, - 358 + 353, + 356 ], [ - 360, - 365 + 357, + 359 ], [ 361, - 353 + 366 ], [ - 363, - 349 + 362, + 354 ], [ 364, - 348 + 350 ], [ - 366, - 355 + 365, + 349 ], [ 367, - 359 + 356 ], [ 368, - 362 + 360 ], [ 369, - 350 + 363 ], [ 370, - 194 + 351 ], [ 371, - 173 + 194 ], [ 372, - 200 + 173 ], [ 373, - 153 + 200 ], [ 374, - 435 + 153 ], [ 375, - 93 + 436 ], [ 376, - 125 + 93 ], [ 377, - 220 + 125 ], [ 378, - 215 + 220 ], [ 379, - 109 + 215 ], [ 380, - 205 + 109 ], [ 381, - 217 + 205 ], [ 382, - 192 + 217 ], [ 383, - 219 + 192 ], [ 384, - 198 + 219 ], [ 385, - 534 + 198 ], [ 386, - 126 + 535 ], [ 387, - 430 + 126 ], [ 388, - 179 + 431 ], [ 389, - 170 + 179 ], [ 390, - 13 + 170 ], [ 391, - 441 + 13 ], [ 392, - 592 + 442 ], [ 393, - 592 + 593 ], [ - 406, - 592 + 394, + 593 ], [ - 421, - 592 + 407, + 593 ], [ 422, - 592 + 593 ], [ 423, - 592 + 593 ], [ 424, - 592 + 593 ], [ 425, - 592 + 593 ], [ 426, - 592 + 593 ], [ - 431, - 454 + 427, + 593 ], [ - 449, - 451 + 432, + 455 ], [ - 462, - 295 + 450, + 452 ], [ - 479, - 439 + 463, + 296 ], [ - 481, - 451 + 480, + 440 ], [ - 489, - 451 + 482, + 452 ], [ - 491, - 454 + 490, + 452 ], [ 492, - 454 + 455 ], [ 493, - 592 + 455 ], [ 494, - 592 + 593 ], [ 495, - 592 + 593 ], [ 496, - 592 + 593 ], [ 497, - 592 + 593 ], [ 498, - 544 + 593 ], [ 499, - 270 + 545 ], [ 500, - 0 + 271 ], [ - 512, - 318 + 501, + 344 ], [ 513, - 276 + 319 ], [ 514, - 139 + 277 ], [ 515, - 322 + 139 ], [ 516, - 549 + 323 ], [ 517, - 51 + 550 ], [ 518, - 435 + 51 ], [ 519, - 182 + 436 ], [ 520, - 106 + 182 ], [ 521, - 214 + 106 ], [ 522, - 157 + 214 ], [ 523, - 162 + 157 ], [ 524, - 530 + 162 ], [ 525, - 532 + 531 ], [ 526, - 106 + 533 ], [ 527, - 312 + 106 ], [ 528, - 148 + 313 ], [ - 536, - 546 + 529, + 148 ], [ - 545, - 544 + 537, + 547 ], [ - 561, - 542 + 546, + 545 ], [ - 565, - 557 + 562, + 561 ], [ - 569, - 562 + 566, + 558 ], [ - 572, - 562 + 570, + 534 ], [ 573, - 487 + 534 ], [ 574, - 452 + 488 ], [ 575, - 315 + 453 ], [ 576, - 311 + 316 ], [ 577, - 313 + 312 ], [ 578, - 446 + 314 ], [ 579, - 592 + 447 ], [ 580, - 55 + 593 ], [ 581, - 54 + 55 ], [ 582, - 182 + 54 ], [ 583, - 93 + 182 ], [ 584, - 128 + 93 ], [ 585, - 170 + 128 ], [ 586, - 544 + 170 ], [ 587, - 129 + 545 ], [ 588, - 107 + 129 ], [ 589, - 106 + 107 ], [ 590, - 148 + 106 ], [ 591, - 557 + 148 ], [ - 593, - 592 + 592, + 558 ], [ 594, - 461 + 593 ], [ 595, - 452 + 462 ], [ 596, - 592 + 453 + ], + [ + 597, + 593 ] ], "normalized_identifiers": [ @@ -1477,6 +1478,7 @@ "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", + "Asia/Hanoi", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", diff --git a/provider/src/data/debug/iana_normalizer.txt b/provider/src/data/debug/iana_normalizer.txt new file mode 100644 index 000000000..25ff928bd --- /dev/null +++ b/provider/src/data/debug/iana_normalizer.txt @@ -0,0 +1,755 @@ +Normalized +========= +Africa/Abidjan +Africa/Accra +Africa/Addis_Ababa +Africa/Algiers +Africa/Asmara +Africa/Asmera +Africa/Bamako +Africa/Bangui +Africa/Banjul +Africa/Bissau +Africa/Blantyre +Africa/Brazzaville +Africa/Bujumbura +Africa/Cairo +Africa/Casablanca +Africa/Ceuta +Africa/Conakry +Africa/Dakar +Africa/Dar_es_Salaam +Africa/Djibouti +Africa/Douala +Africa/El_Aaiun +Africa/Freetown +Africa/Gaborone +Africa/Harare +Africa/Johannesburg +Africa/Juba +Africa/Kampala +Africa/Khartoum +Africa/Kigali +Africa/Kinshasa +Africa/Lagos +Africa/Libreville +Africa/Lome +Africa/Luanda +Africa/Lubumbashi +Africa/Lusaka +Africa/Malabo +Africa/Maputo +Africa/Maseru +Africa/Mbabane +Africa/Mogadishu +Africa/Monrovia +Africa/Nairobi +Africa/Ndjamena +Africa/Niamey +Africa/Nouakchott +Africa/Ouagadougou +Africa/Porto-Novo +Africa/Sao_Tome +Africa/Timbuktu +Africa/Tripoli +Africa/Tunis +Africa/Windhoek +America/Adak +America/Anchorage +America/Anguilla +America/Antigua +America/Araguaina +America/Argentina/Buenos_Aires +America/Argentina/Catamarca +America/Argentina/ComodRivadavia +America/Argentina/Cordoba +America/Argentina/Jujuy +America/Argentina/La_Rioja +America/Argentina/Mendoza +America/Argentina/Rio_Gallegos +America/Argentina/Salta +America/Argentina/San_Juan +America/Argentina/San_Luis +America/Argentina/Tucuman +America/Argentina/Ushuaia +America/Aruba +America/Asuncion +America/Atikokan +America/Atka +America/Bahia +America/Bahia_Banderas +America/Barbados +America/Belem +America/Belize +America/Blanc-Sablon +America/Boa_Vista +America/Bogota +America/Boise +America/Buenos_Aires +America/Cambridge_Bay +America/Campo_Grande +America/Cancun +America/Caracas +America/Catamarca +America/Cayenne +America/Cayman +America/Chicago +America/Chihuahua +America/Ciudad_Juarez +America/Coral_Harbour +America/Cordoba +America/Costa_Rica +America/Coyhaique +America/Creston +America/Cuiaba +America/Curacao +America/Danmarkshavn +America/Dawson +America/Dawson_Creek +America/Denver +America/Detroit +America/Dominica +America/Edmonton +America/Eirunepe +America/El_Salvador +America/Ensenada +America/Fort_Nelson +America/Fort_Wayne +America/Fortaleza +America/Glace_Bay +America/Godthab +America/Goose_Bay +America/Grand_Turk +America/Grenada +America/Guadeloupe +America/Guatemala +America/Guayaquil +America/Guyana +America/Halifax +America/Havana +America/Hermosillo +America/Indiana/Indianapolis +America/Indiana/Knox +America/Indiana/Marengo +America/Indiana/Petersburg +America/Indiana/Tell_City +America/Indiana/Vevay +America/Indiana/Vincennes +America/Indiana/Winamac +America/Indianapolis +America/Inuvik +America/Iqaluit +America/Jamaica +America/Jujuy +America/Juneau +America/Kentucky/Louisville +America/Kentucky/Monticello +America/Knox_IN +America/Kralendijk +America/La_Paz +America/Lima +America/Los_Angeles +America/Louisville +America/Lower_Princes +America/Maceio +America/Managua +America/Manaus +America/Marigot +America/Martinique +America/Matamoros +America/Mazatlan +America/Mendoza +America/Menominee +America/Merida +America/Metlakatla +America/Mexico_City +America/Miquelon +America/Moncton +America/Monterrey +America/Montevideo +America/Montreal +America/Montserrat +America/Nassau +America/New_York +America/Nipigon +America/Nome +America/Noronha +America/North_Dakota/Beulah +America/North_Dakota/Center +America/North_Dakota/New_Salem +America/Nuuk +America/Ojinaga +America/Panama +America/Pangnirtung +America/Paramaribo +America/Phoenix +America/Port-au-Prince +America/Port_of_Spain +America/Porto_Acre +America/Porto_Velho +America/Puerto_Rico +America/Punta_Arenas +America/Rainy_River +America/Rankin_Inlet +America/Recife +America/Regina +America/Resolute +America/Rio_Branco +America/Rosario +America/Santa_Isabel +America/Santarem +America/Santiago +America/Santo_Domingo +America/Sao_Paulo +America/Scoresbysund +America/Shiprock +America/Sitka +America/St_Barthelemy +America/St_Johns +America/St_Kitts +America/St_Lucia +America/St_Thomas +America/St_Vincent +America/Swift_Current +America/Tegucigalpa +America/Thule +America/Thunder_Bay +America/Tijuana +America/Toronto +America/Tortola +America/Vancouver +America/Virgin +America/Whitehorse +America/Winnipeg +America/Yakutat +America/Yellowknife +Antarctica/Casey +Antarctica/Davis +Antarctica/DumontDUrville +Antarctica/Macquarie +Antarctica/Mawson +Antarctica/McMurdo +Antarctica/Palmer +Antarctica/Rothera +Antarctica/South_Pole +Antarctica/Syowa +Antarctica/Troll +Antarctica/Vostok +Arctic/Longyearbyen +Asia/Aden +Asia/Almaty +Asia/Amman +Asia/Anadyr +Asia/Aqtau +Asia/Aqtobe +Asia/Ashgabat +Asia/Ashkhabad +Asia/Atyrau +Asia/Baghdad +Asia/Bahrain +Asia/Baku +Asia/Bangkok +Asia/Barnaul +Asia/Beirut +Asia/Bishkek +Asia/Brunei +Asia/Calcutta +Asia/Chita +Asia/Choibalsan +Asia/Chongqing +Asia/Chungking +Asia/Colombo +Asia/Dacca +Asia/Damascus +Asia/Dhaka +Asia/Dili +Asia/Dubai +Asia/Dushanbe +Asia/Famagusta +Asia/Gaza +Asia/Hanoi +Asia/Harbin +Asia/Hebron +Asia/Ho_Chi_Minh +Asia/Hong_Kong +Asia/Hovd +Asia/Irkutsk +Asia/Istanbul +Asia/Jakarta +Asia/Jayapura +Asia/Jerusalem +Asia/Kabul +Asia/Kamchatka +Asia/Karachi +Asia/Kashgar +Asia/Kathmandu +Asia/Katmandu +Asia/Khandyga +Asia/Kolkata +Asia/Krasnoyarsk +Asia/Kuala_Lumpur +Asia/Kuching +Asia/Kuwait +Asia/Macao +Asia/Macau +Asia/Magadan +Asia/Makassar +Asia/Manila +Asia/Muscat +Asia/Nicosia +Asia/Novokuznetsk +Asia/Novosibirsk +Asia/Omsk +Asia/Oral +Asia/Phnom_Penh +Asia/Pontianak +Asia/Pyongyang +Asia/Qatar +Asia/Qostanay +Asia/Qyzylorda +Asia/Rangoon +Asia/Riyadh +Asia/Saigon +Asia/Sakhalin +Asia/Samarkand +Asia/Seoul +Asia/Shanghai +Asia/Singapore +Asia/Srednekolymsk +Asia/Taipei +Asia/Tashkent +Asia/Tbilisi +Asia/Tehran +Asia/Tel_Aviv +Asia/Thimbu +Asia/Thimphu +Asia/Tokyo +Asia/Tomsk +Asia/Ujung_Pandang +Asia/Ulaanbaatar +Asia/Ulan_Bator +Asia/Urumqi +Asia/Ust-Nera +Asia/Vientiane +Asia/Vladivostok +Asia/Yakutsk +Asia/Yangon +Asia/Yekaterinburg +Asia/Yerevan +Atlantic/Azores +Atlantic/Bermuda +Atlantic/Canary +Atlantic/Cape_Verde +Atlantic/Faeroe +Atlantic/Faroe +Atlantic/Jan_Mayen +Atlantic/Madeira +Atlantic/Reykjavik +Atlantic/South_Georgia +Atlantic/St_Helena +Atlantic/Stanley +Australia/ACT +Australia/Adelaide +Australia/Brisbane +Australia/Broken_Hill +Australia/Canberra +Australia/Currie +Australia/Darwin +Australia/Eucla +Australia/Hobart +Australia/LHI +Australia/Lindeman +Australia/Lord_Howe +Australia/Melbourne +Australia/NSW +Australia/North +Australia/Perth +Australia/Queensland +Australia/South +Australia/Sydney +Australia/Tasmania +Australia/Victoria +Australia/West +Australia/Yancowinna +Brazil/Acre +Brazil/DeNoronha +Brazil/East +Brazil/West +CET +CST6CDT +Canada/Atlantic +Canada/Central +Canada/Eastern +Canada/Mountain +Canada/Newfoundland +Canada/Pacific +Canada/Saskatchewan +Canada/Yukon +Chile/Continental +Chile/EasterIsland +Cuba +EET +EST +EST5EDT +Egypt +Eire +Etc/GMT +Etc/GMT+0 +Etc/GMT+1 +Etc/GMT+10 +Etc/GMT+11 +Etc/GMT+12 +Etc/GMT+2 +Etc/GMT+3 +Etc/GMT+4 +Etc/GMT+5 +Etc/GMT+6 +Etc/GMT+7 +Etc/GMT+8 +Etc/GMT+9 +Etc/GMT-0 +Etc/GMT-1 +Etc/GMT-10 +Etc/GMT-11 +Etc/GMT-12 +Etc/GMT-13 +Etc/GMT-14 +Etc/GMT-2 +Etc/GMT-3 +Etc/GMT-4 +Etc/GMT-5 +Etc/GMT-6 +Etc/GMT-7 +Etc/GMT-8 +Etc/GMT-9 +Etc/GMT0 +Etc/Greenwich +Etc/UCT +Etc/UTC +Etc/Universal +Etc/Zulu +Europe/Amsterdam +Europe/Andorra +Europe/Astrakhan +Europe/Athens +Europe/Belfast +Europe/Belgrade +Europe/Berlin +Europe/Bratislava +Europe/Brussels +Europe/Bucharest +Europe/Budapest +Europe/Busingen +Europe/Chisinau +Europe/Copenhagen +Europe/Dublin +Europe/Gibraltar +Europe/Guernsey +Europe/Helsinki +Europe/Isle_of_Man +Europe/Istanbul +Europe/Jersey +Europe/Kaliningrad +Europe/Kiev +Europe/Kirov +Europe/Kyiv +Europe/Lisbon +Europe/Ljubljana +Europe/London +Europe/Luxembourg +Europe/Madrid +Europe/Malta +Europe/Mariehamn +Europe/Minsk +Europe/Monaco +Europe/Moscow +Europe/Nicosia +Europe/Oslo +Europe/Paris +Europe/Podgorica +Europe/Prague +Europe/Riga +Europe/Rome +Europe/Samara +Europe/San_Marino +Europe/Sarajevo +Europe/Saratov +Europe/Simferopol +Europe/Skopje +Europe/Sofia +Europe/Stockholm +Europe/Tallinn +Europe/Tirane +Europe/Tiraspol +Europe/Ulyanovsk +Europe/Uzhgorod +Europe/Vaduz +Europe/Vatican +Europe/Vienna +Europe/Vilnius +Europe/Volgograd +Europe/Warsaw +Europe/Zagreb +Europe/Zaporozhye +Europe/Zurich +GB +GB-Eire +GMT +GMT+0 +GMT-0 +GMT0 +Greenwich +HST +Hongkong +Iceland +Indian/Antananarivo +Indian/Chagos +Indian/Christmas +Indian/Cocos +Indian/Comoro +Indian/Kerguelen +Indian/Mahe +Indian/Maldives +Indian/Mauritius +Indian/Mayotte +Indian/Reunion +Iran +Israel +Jamaica +Japan +Kwajalein +Libya +MET +MST +MST7MDT +Mexico/BajaNorte +Mexico/BajaSur +Mexico/General +NZ +NZ-CHAT +Navajo +PRC +PST8PDT +Pacific/Apia +Pacific/Auckland +Pacific/Bougainville +Pacific/Chatham +Pacific/Chuuk +Pacific/Easter +Pacific/Efate +Pacific/Enderbury +Pacific/Fakaofo +Pacific/Fiji +Pacific/Funafuti +Pacific/Galapagos +Pacific/Gambier +Pacific/Guadalcanal +Pacific/Guam +Pacific/Honolulu +Pacific/Johnston +Pacific/Kanton +Pacific/Kiritimati +Pacific/Kosrae +Pacific/Kwajalein +Pacific/Majuro +Pacific/Marquesas +Pacific/Midway +Pacific/Nauru +Pacific/Niue +Pacific/Norfolk +Pacific/Noumea +Pacific/Pago_Pago +Pacific/Palau +Pacific/Pitcairn +Pacific/Pohnpei +Pacific/Ponape +Pacific/Port_Moresby +Pacific/Rarotonga +Pacific/Saipan +Pacific/Samoa +Pacific/Tahiti +Pacific/Tarawa +Pacific/Tongatapu +Pacific/Truk +Pacific/Wake +Pacific/Wallis +Pacific/Yap +Poland +Portugal +ROC +ROK +Singapore +Turkey +UCT +US/Alaska +US/Aleutian +US/Arizona +US/Central +US/East-Indiana +US/Eastern +US/Hawaii +US/Indiana-Starke +US/Michigan +US/Mountain +US/Pacific +US/Samoa +UTC +Universal +W-SU +WET +Zulu + +Non canonical identifiers +========= +Africa/Asmera => Africa/Asmara +Africa/Timbuktu => Africa/Bamako +America/Argentina/ComodRivadavia => America/Argentina/Catamarca +America/Atka => America/Adak +America/Buenos_Aires => America/Argentina/Buenos_Aires +America/Catamarca => America/Argentina/Catamarca +America/Coral_Harbour => America/Atikokan +America/Cordoba => America/Argentina/Cordoba +America/Ensenada => America/Tijuana +America/Fort_Wayne => America/Indiana/Indianapolis +America/Godthab => America/Nuuk +America/Indianapolis => America/Indiana/Indianapolis +America/Jujuy => America/Argentina/Jujuy +America/Knox_IN => America/Indiana/Knox +America/Louisville => America/Kentucky/Louisville +America/Mendoza => America/Argentina/Mendoza +America/Montreal => America/Toronto +America/Nipigon => America/Toronto +America/Pangnirtung => America/Iqaluit +America/Porto_Acre => America/Rio_Branco +America/Rainy_River => America/Winnipeg +America/Rosario => America/Argentina/Cordoba +America/Santa_Isabel => America/Tijuana +America/Shiprock => America/Denver +America/Thunder_Bay => America/Toronto +America/Virgin => America/St_Thomas +America/Yellowknife => America/Edmonton +Antarctica/South_Pole => Antarctica/McMurdo +Asia/Ashkhabad => Asia/Ashgabat +Asia/Calcutta => Asia/Kolkata +Asia/Choibalsan => Asia/Ulaanbaatar +Asia/Chongqing => Asia/Shanghai +Asia/Chungking => Asia/Shanghai +Asia/Dacca => Asia/Dhaka +Asia/Harbin => Asia/Shanghai +Asia/Istanbul => Europe/Istanbul +Asia/Kashgar => Asia/Urumqi +Asia/Katmandu => Asia/Kathmandu +Asia/Macao => Asia/Macau +Asia/Rangoon => Asia/Yangon +Asia/Saigon => Asia/Ho_Chi_Minh +Asia/Tel_Aviv => Asia/Jerusalem +Asia/Thimbu => Asia/Thimphu +Asia/Ujung_Pandang => Asia/Makassar +Asia/Ulan_Bator => Asia/Ulaanbaatar +Atlantic/Faeroe => Atlantic/Faroe +Atlantic/Jan_Mayen => Arctic/Longyearbyen +Australia/ACT => Australia/Sydney +Australia/Canberra => Australia/Sydney +Australia/Currie => Australia/Hobart +Australia/LHI => Australia/Lord_Howe +Australia/NSW => Australia/Sydney +Australia/North => Australia/Darwin +Australia/Queensland => Australia/Brisbane +Australia/South => Australia/Adelaide +Australia/Tasmania => Australia/Hobart +Australia/Victoria => Australia/Melbourne +Australia/West => Australia/Perth +Australia/Yancowinna => Australia/Broken_Hill +Brazil/Acre => America/Rio_Branco +Brazil/DeNoronha => America/Noronha +Brazil/East => America/Sao_Paulo +Brazil/West => America/Manaus +CET => Europe/Brussels +CST6CDT => America/Chicago +Canada/Atlantic => America/Halifax +Canada/Central => America/Winnipeg +Canada/Eastern => America/Toronto +Canada/Mountain => America/Edmonton +Canada/Newfoundland => America/St_Johns +Canada/Pacific => America/Vancouver +Canada/Saskatchewan => America/Regina +Canada/Yukon => America/Whitehorse +Chile/Continental => America/Santiago +Chile/EasterIsland => Pacific/Easter +Cuba => America/Havana +EET => Europe/Athens +EST => America/Panama +EST5EDT => America/New_York +Egypt => Africa/Cairo +Eire => Europe/Dublin +Etc/GMT => UTC +Etc/GMT+0 => UTC +Etc/GMT-0 => UTC +Etc/GMT0 => UTC +Etc/Greenwich => UTC +Etc/UCT => UTC +Etc/UTC => UTC +Etc/Universal => UTC +Etc/Zulu => UTC +Europe/Belfast => Europe/London +Europe/Kiev => Europe/Kyiv +Europe/Nicosia => Asia/Nicosia +Europe/Tiraspol => Europe/Chisinau +Europe/Uzhgorod => Europe/Kyiv +Europe/Zaporozhye => Europe/Kyiv +GB => Europe/London +GB-Eire => Europe/London +GMT => UTC +GMT+0 => UTC +GMT-0 => UTC +GMT0 => UTC +Greenwich => UTC +HST => Pacific/Honolulu +Hongkong => Asia/Hong_Kong +Iceland => Atlantic/Reykjavik +Iran => Asia/Tehran +Israel => Asia/Jerusalem +Jamaica => America/Jamaica +Japan => Asia/Tokyo +Kwajalein => Pacific/Kwajalein +Libya => Africa/Tripoli +MET => Europe/Brussels +MST => America/Phoenix +MST7MDT => America/Denver +Mexico/BajaNorte => America/Tijuana +Mexico/BajaSur => America/Mazatlan +Mexico/General => America/Mexico_City +NZ => Pacific/Auckland +NZ-CHAT => Pacific/Chatham +Navajo => America/Denver +PRC => Asia/Shanghai +PST8PDT => America/Los_Angeles +Pacific/Enderbury => Pacific/Kanton +Pacific/Johnston => Pacific/Honolulu +Pacific/Ponape => Pacific/Pohnpei +Pacific/Samoa => Pacific/Pago_Pago +Pacific/Truk => Pacific/Chuuk +Pacific/Yap => Pacific/Chuuk +Poland => Europe/Warsaw +Portugal => Europe/Lisbon +ROC => Asia/Taipei +ROK => Asia/Seoul +Singapore => Asia/Singapore +Turkey => Europe/Istanbul +UCT => UTC +US/Alaska => America/Anchorage +US/Aleutian => America/Adak +US/Arizona => America/Phoenix +US/Central => America/Chicago +US/East-Indiana => America/Indiana/Indianapolis +US/Eastern => America/New_York +US/Hawaii => Pacific/Honolulu +US/Indiana-Starke => America/Indiana/Knox +US/Michigan => America/Detroit +US/Mountain => America/Denver +US/Pacific => America/Los_Angeles +US/Samoa => Pacific/Pago_Pago +Universal => UTC +W-SU => Europe/Moscow +WET => Europe/Lisbon +Zulu => UTC diff --git a/provider/src/data/iana_normalizer.rs.data b/provider/src/data/iana_normalizer.rs.data index 372c8f4be..0533862b0 100644 --- a/provider/src/data/iana_normalizer.rs.data +++ b/provider/src/data/iana_normalizer.rs.data @@ -8,11 +8,11 @@ macro_rules! iana_normalizer_singleton { & timezone_provider::IanaIdentifierNormalizer { version : alloc::borrow::Cow::Borrowed("2025b"), available_id_index : zerotrie::ZeroAsciiIgnoreCaseTrie { store : unsafe { - zerovec::ZeroVec::from_bytes_unchecked(b"\xE1sabceghijklmnprstuwz\x0F\x0F\x0F\x13\x13\x13\x13\x13\x13\x13\x14\x14\x16\x16\x16\x16\x16\x16\x03*\xC2\x15>M\xD7\xE6\xF0\xF6*=\x17 *1\xC8\xD3\xE1gfmnrstu\x02\t\t\t\r\x0E\x1A(\xA9\xBC\x83\trica/\xE1rabcdefghjklmnopstw\0\0\0\0\0\0\0\0\0\x01\x01\x01\x01\x01\x01\x01\x01/i\x89\xB1\xBA\xC3\xCC\xD3\xE7\x0C@u\x9C\xA8\xB3\xBC\xD6\xC5bcdls\x06\n\x14\x1Aidjan\x80cra\x81dis_ababa\x82giers\x83m\xC2ae\x03ra\x84ra\x85\xC5ailru\x12\x17\x1E(\xC2mn\x04ako\x86\xC2gj\x03ui\x87ul\x88ssau\x89antyre\x8Aazzaville\x8Bjumbura\x8C\xC3aeo\x0F\x13\xC2is\x03ro\x8Dablanca\x8Euta\x8Fnakry\x90\0\xC3ajo\x14\x1C\xC2kr\x04ar\x90\x01_es_salaam\x90\x02ibouti\x90\x03uala\x90\x04l_aaiun\x90\x05reetown\x90\x06aborone\x90\x07arare\x90\x08\xC2ou\x0Channesburg\x90\tba\x90\n\xC3ahi\x07\x0Fmpala\x90\x0Bartoum\x90\x0C\xC2gn\x05ali\x90\rshasa\x90\x0E\xC4aiou\x05\x0F\x13gos\x90\x0Fbreville\x90\x10me\x90\x11\xC3abs\x05\x0Enda\x90\x12umbashi\x90\x13aka\x90\x14\xC3abo\x15\x1C\xC3lps\x05\nabo\x90\x15uto\x90\x16eru\x90\x17abane\x90\x18\xC2gn\x08adishu\x90\x19rovia\x90\x1A\xC4adio\x07\x0F\x15irobi\x90\x1Bjamena\x90\x1Camey\x90\x1Duakchott\x90\x1Euagadougou\x90\x1Forto-novo\x90 ao_tome\x90!\xC3iru\x08\x0Fmbuktu\x90\"ipoli\x90#nis\x90$indhoek\x90%erica/\xE1vabcdefghijklmnoprstvwy\0\x01\x01\x02\x02\x02\x02\x02\x03\x03\x03\x03\x04\x04\x04\x05\x05\x06\x06\x06\x06\xE7F\xF4-Xv\xD1\xEEg\x7F\xB7\xEC\x92\xEC\xF4g\xB0M\x87\x9A\xB0\xC5dnrst\x04\x1F\xC7\xCFak\x90&\xC3cgt\x08\x0Fhorage\x90'uilla\x90(igua\x90)\xC3agu\x08\x9Eguaina\x90*entina/\xC9bcjlmrstu\r17@HUmuuenos_aires\x90+\xC2ao\ttamarca\x90,\xC2mr\rodrivadavia\x90-doba\x90.ujuy\x90/a_rioja\x900endoza\x901io_gallegos\x902a\xC2ln\x04ta\x903_\xC2jl\x05uan\x904uis\x905ucuman\x906shuaia\x907ba\x908uncion\x909\xC2ik\x07kokan\x90:a\x90;\xC5aelou\x1A&2I\xC2hr\x0Fia\x90<_banderas\x90=bados\x90>l\xC2ei\x03m\x90?ze\x90@anc-sablon\x90A\xC3agi\x08\r_vista\x90Bota\x90Cse\x90Denos_aires\x90E\xC6ahioruCTa\x8C\x93\xC5mnrty\x19\x1E$,\xC2bp\x0Bridge_bay\x90Fo_grande\x90Gcun\x90Hacas\x90Iamarca\x90J\xC2em\x05nne\x90Kan\x90Li\xC2ch\x05ago\x90Muahua\x90Nudad_juarez\x90O\xC3rsy\x14\x1D\xC2ad\x0Bl_harbour\x90Poba\x90Qta_rica\x90Rhaique\x90Seston\x90T\xC2ir\x05aba\x90Uacao\x90V\xC3aeo\x1C+\xC2nw\x0Bmarkshavn\x90Wson\x90X_creek\x90Y\xC2nt\x05ver\x90Zroit\x90[minica\x90\\\xC4diln\x08\x10\x1Bmonton\x90]runepe\x90^_salvador\x90_senada\x90`ort\xC2_a\x11\xC2nw\x07elson\x90aayne\x90bleza\x90c\xC4loru\t\x1B.ace_bay\x90d\xC2do\x06thab\x90ese_bay\x90f\xC2ae\tnd_turk\x90gnada\x90h\xC2ay\x1C\xC3dty\x08\x0Feloupe\x90iemala\x90jaquil\x90kana\x90l\xC2ae\x0F\xC2lv\x06ifax\x90mana\x90nrmosillo\x90o\xC2nqn\xC2dueiana\xC2/pW\xC7ikmptvw\r\x12\x1A%/Andianapolis\x90pnox\x90qarengo\x90retersburg\x90sell_city\x90t\xC2ei\x05vay\x90uncennes\x90vinamac\x90wolis\x90xvik\x90yaluit\x90z\xC2au\x07maica\x90{\xC2jn\x04uy\x90|eau\x90}\xC3enr!(ntucky/\xC2lm\x0Bouisville\x90~onticello\x90\x7Fox_in\x91\0alendijk\x91\x01\xC3aio\x06\n_paz\x91\x02ma\x91\x03\xC3suw\n\x13_angeles\x91\x04isville\x91\x05er_princes\x91\x06\xC4aeio;ks\xC5cnrtz\x05\x11\"*eio\x91\x07a\xC2gu\x04ua\x91\x08s\x91\t\xC2it\x05got\x91\ninique\x91\x0Bamoros\x91\x0Catlan\x91\r\xC4nrtx\x10\x15\x1E\xC2do\x05oza\x91\x0Eminee\x91\x0Fida\x91\x10lakatla\x91\x11ico_city\x91\x12quelon\x91\x13n\xC2ct\x05ton\x91\x14\xC3ers\x0F\x14\xC2rv\x05rey\x91\x15ideo\x91\x16eal\x91\x17errat\x91\x18\xC5aeiou\x06\x0E\x15Lssau\x91\x19w_york\x91\x1Apigon\x91\x1B\xC2mr\x03e\x91\x1C\xC2ot\x05nha\x91\x1Dh_dakota/\xC3bcn\x07\x0Eeulah\x91\x1Eenter\x91\x1Few_salem\x91 uk\x91!jinaga\x91\"\xC4ahou\x1E%R\xC2nr\x11\xC2ag\x04ma\x91#nirtung\x91$amaribo\x91%oenix\x91&rt\xC3-_o\x0B\x15au-prince\x91'of_spain\x91(_\xC2av\x05cre\x91)elho\x91*\xC2en\nrto_rico\x91+ta_arenas\x91,\xC4aeio\x190:\xC2in\nny_river\x91-kin_inlet\x91.\xC3cgs\x05\nife\x91/ina\x910olute\x911o_branco\x912sario\x913\xC6achitw2>FK\x84\xC2no&t\xC3aio\x10\x15\xC2_r\x08isabel\x914em\x915ago\x916_domingo\x917_paulo\x918oresbysund\x919iprock\x91:tka\x91;_\xC6bjkltv\x0B\x11\x17\x1D$arthelemy\x91ucia\x91?homas\x91@incent\x91Aift_current\x91B\xC4ehio\x0B\x1C#gucigalpa\x91Cu\xC2ln\x03e\x91Dder_bay\x91Ejuana\x91Fr\xC2ot\x05nto\x91Gola\x91H\xC2ai\tncouver\x91Irgin\x91J\xC2hi\nitehorse\x91Knnipeg\x91L\xC2ae\x07kutat\x91Mllowknife\x91Ntarctica/\xC8cdmprstv\x06\x1D9@H[aasey\x91O\xC2au\x05vis\x91Pmontdurville\x91Q\xC2ac\x11\xC2cw\x08quarie\x91Rson\x91Smurdo\x91Talmer\x91Uothera\x91V\xC2oy\nuth_pole\x91Wowa\x91Xroll\x91Yostok\x91Zctic/longyearbyen\x91[ia/\xE1uabcdfghijkmnopqrstuvy\0\0\0\0\0\0\x01\x01\x01\x01\x01\x02\x02\x02\x02\x02\x02\x03\x03\x03G\x87\xC1\xF0\xFA\xFF,?]\xD0\xFD\x1F+Miz\xC1\x0BD\\\xC7dlmnqst\x04\n\x0F\x15!3en\x91\\maty\x91]man\x91^adyr\x91_t\xC2ao\x03u\x91`be\x91ah\xC2gk\x06abat\x91bhabad\x91cyrau\x91d\xC4aeir%+2\xC5ghknr\x06\x0C\x0F\x15hdad\x91erain\x91fu\x91ggkok\x91hnaul\x91iirut\x91jshkek\x91kunei\x91l\xC3aho\x08-lcutta\x91m\xC3iou\x04\x17ta\x91n\xC2in\x08balsan\x91ogqing\x91pngking\x91qlombo\x91r\xC4ahiu\x0F\x14\x18\xC2cm\x04ca\x91sascus\x91taka\x91uli\x91v\xC2bs\x04ai\x91whanbe\x91xamagusta\x91yaza\x91z\xC3aeo\x06\x0Crbin\x91{bron\x91|\xC3_nv\n\x12chi_minh\x91}g_kong\x91~d\x91\x7F\xC2rs\x07kutsk\x92\0tanbul\x92\x01\xC2ae\x11\xC2ky\x06arta\x92\x02apura\x92\x03rusalem\x92\x04\xC5ahoru3;BM\xC5bmrst\x04\x0C\x12\x18ul\x92\x05chatka\x92\x06achi\x92\x07hgar\x92\x08\xC2hm\x07mandu\x92\tandu\x92\nandyga\x92\x0Blkata\x92\x0Casnoyarsk\x92\r\xC3acw\x0B\x11la_lumpur\x92\x0Ehing\x92\x0Fait\x92\x10\xC2au#\xC4cgkn\t\x0F\x16a\xC2ou\x02\x92\x11\x92\x12adan\x92\x13assar\x92\x14ila\x92\x15scat\x92\x16\xC2io\x07cosia\x92\x17vo\xC2ks\tuznetsk\x92\x18ibirsk\x92\x19\xC2mr\x04sk\x92\x1Aal\x92\x1B\xC3hoy\n\x13nom_penh\x92\x1Cntianak\x92\x1Dongyang\x92\x1E\xC3aoy\x05\rtar\x92\x1Fstanay\x92 zylorda\x92!\xC2ai\x07ngoon\x92\"yadh\x92#\xC5aehir\x1A\x1F'0\xC3ikm\x05\x0Cgon\x92$halin\x92%arkand\x92&oul\x92'anghai\x92(ngapore\x92)ednekolymsk\x92*\xC5abeho\x10\x17'4\xC2is\x05pei\x92+hkent\x92,ilisi\x92-\xC2hl\x05ran\x92._aviv\x92/im\xC2bp\x03u\x920hu\x921\xC2km\x04yo\x922sk\x923\xC4jlrs\r#)ung_pandang\x924a\xC2an\tnbaatar\x925_bator\x926umqi\x927t-nera\x928\xC2il\tentiane\x929adivostok\x92:\xC2ae\x0F\xC2kn\x06utsk\x92;gon\x92<\xC2kr\x0Caterinburg\x92=evan\x92>lantic/\xC8abcfjmrs\x07\x0F\"0:BLzores\x92?ermuda\x92@a\xC2np\x05ary\x92Ae_verde\x92Ba\xC2er\x05roe\x92Coe\x92Dan_mayen\x92Eadeira\x92Feykjavik\x92G\xC2ot\ruth_georgia\x92H\xC2_a\x08helena\x92Inley\x92Jstralia/\xD0abcdehlmnpqstvwy\x0F%7>DKeo{\x81\x8C\x9B\xA4\xAD\xB2\xC2cd\x03t\x92Kelaide\x92Lr\xC2io\x07sbane\x92Mken_hill\x92N\xC2au\x08nberra\x92Orrie\x92Parwin\x92Qucla\x92Robart\x92S\xC3hio\x03\x0Bi\x92Tndeman\x92Urd_howe\x92Velbourne\x92W\xC2os\x05rth\x92Yw\x92Xerth\x92Zueensland\x92[\xC2oy\x05uth\x92\\dney\x92]asmania\x92^ictoria\x92_est\x92`ancowinna\x92arazil/\xC4adew\x05\x0F\x14cre\x92benoronha\x92cast\x92dest\x92e\xC5aehsu_b\x83\x8Anada/\xC8acemnpsy\t\x11\x19\"/7Dtlantic\x92hentral\x92iastern\x92jountain\x92kewfoundland\x92lacific\x92maskatchewan\x92nukon\x92ot\x92file/\xC2ce\x0Continental\x92pasterisland\x92qt6cdt\x92gba\x92r\xE1fegistu\0\0\0\0\0\x03\x08\x0C\x15\xBFt\x92sypt\x92vre\x92wt\x92t5edt\x92uc/\xC3guz\x88\x9D\xC2mr{t\x92x\xC3+-04p\xCA0123456789\x02\x10\x12\x14\x16\x18\x1A\x1C\x1E\x92y\x92z\xC3012\x02\x04\x92{\x92|\x92}\x92~\x92\x7F\x93\0\x93\x01\x93\x02\x93\x03\x93\x04\x93\x05\xCA0123456789\x02\x18\x1A\x1C\x1E \"$&\x93\x06\x93\x07\xC501234\x02\x04\x06\x08\x93\x08\x93\t\x93\n\x93\x0B\x93\x0C\x93\r\x93\x0E\x93\x0F\x93\x10\x93\x11\x93\x12\x93\x13\x93\x14\x93\x15eenwich\x93\x16\xC3cnt\x03\x0Ct\x93\x17iversal\x93\x19c\x93\x18ulu\x93\x1Arope/\xE1uabcdghijklmnoprstuvwz\0\0\0\0\0\0\0\0\0\x01\x01\x01\x01\x01\x01\x01\x01\x01\x02\x02'u\x8B\x92\xA7\xB0\xC6\xCD\xED\x14DLQkw\xC1\xDA\xEF\x1B\"\xC4mnst\t\x10\x19sterdam\x93\x1Bdorra\x93\x1Ctrakhan\x93\x1Dhens\x93\x1E\xC3eru\x18,\xC2lr\x0F\xC2fg\x05ast\x93\x1Frade\x93 lin\x93!\xC2au\ttislava\x93\"ssels\x93#\xC3cds\x08\x0Fharest\x93$apest\x93%ingen\x93&\xC2ho\x08isinau\x93'penhagen\x93(ublin\x93)\xC2iu\tbraltar\x93*ernsey\x93+elsinki\x93,s\xC2lt\ne_of_man\x93-anbul\x93.ersey\x93/\xC3aiy\x0B\x16liningrad\x930\xC2er\x03v\x931ov\x932iv\x933\xC4ijou\x06\x0F\x15sbon\x934ubljana\x935ndon\x936xembourg\x937\xC3aio\x17\x1C\xC3dlr\x05\trid\x938ta\x939iehamn\x93:nsk\x93;\xC2ns\x05aco\x93slo\x93?\xC3aor\x05\x0Eris\x93@dgorica\x93Aague\x93B\xC2io\x04ga\x93Cme\x93D\xC5aikot\",27\xC3mnr\x05\x0Eara\x93E_marino\x93Fa\xC2jt\x05evo\x93Gov\x93Hmferopol\x93Iopje\x93Jfia\x93Kockholm\x93L\xC2ai\x07llinn\x93Mra\xC2ns\x03e\x93Npol\x93O\xC2lz\tyanovsk\x93Phgorod\x93Q\xC3aio\x0E\x1D\xC2dt\x04uz\x93Rican\x93S\xC2el\x05nna\x93Tnius\x93Ulgograd\x93Varsaw\x93W\xC2au\x12\xC2gp\x05reb\x93Xorozhye\x93Yrich\x93Z\xC3bmr\t\x1A\x93[-eire\x93\\t\x93]\xC3+-0\x03\x060\x93^0\x93_\x93`eenwich\x93a\xC2os\x08ngkong\x93ct\x93b\xC4cnrs\x07x|eland\x93ddian/\xC5ackmr\r/9Zntananarivo\x93e\xC2ho\x11\xC2ar\x05gos\x93fistmas\x93g\xC2cm\x04os\x93horo\x93ierguelen\x93ja\xC4hluy\x03\n\x12e\x93kdives\x93lritius\x93motte\x93neunion\x93oan\x93prael\x93qa\xC2mp\x06aica\x93ran\x93swajalein\x93tibya\x93u\xC2es'\xC2tx\x02\x93vico/\xC2bg\x11aja\xC2ns\x06orte\x93yur\x93zeneral\x93{t\x93w7mdt\x93x\xC2az\x06vajo\x93~\x93|-chat\x93}\xE1daors\x01\x01\x01\xB4\xC4\xC7cific/\xE1qabcefghjkmnprstwy\0\0\0\0\0\0\0\0\0\0\0\x01\x01\x01\x01\x01\x10\x1D,F_\x85\x8E\x97\xBE\xD9\xF71;Ijw\xC2pu\x04ia\x94\x01ckland\x94\x02ougainville\x94\x03h\xC2au\x06tham\x94\x04uk\x94\x05\xC3afn\x06\x0Bster\x94\x06ate\x94\x07derbury\x94\x08\xC3aiu\x07\x0Bkaofo\x94\tji\x94\nnafuti\x94\x0B\xC2au\x12\xC2lm\x08apagos\x94\x0Cbier\x94\ra\xC2dm\talcanal\x94\x0E\x94\x0Fonolulu\x94\x10ohnston\x94\x11\xC4aiow\x06\x10\x16nton\x94\x12ritimati\x94\x13srae\x94\x14ajalein\x94\x15\xC2ai\x11\xC2jr\x05uro\x94\x16quesas\x94\x17dway\x94\x18\xC3aio\x05\turu\x94\x19ue\x94\x1A\xC2ru\x06folk\x94\x1Bmea\x94\x1C\xC3aio\x10\x18\xC2gl\x08o_pago\x94\x1Dau\x94\x1Etcairn\x94\x1F\xC3hnr\x06\x0Bnpei\x94 ape\x94!t_moresby\x94\"arotonga\x94#a\xC2im\x05pan\x94$oa\x94%\xC3aor\x0E\x17\xC2hr\x05iti\x94&awa\x94'ngatapu\x94(uk\x94)a\xC2kl\x03e\x94*lis\x94+ap\x94,\xC2lr\x05and\x94-tugal\x94.c\x93\x7Ft8pdt\x94\0o\xC2ck\x02\x94/\x940ingapore\x941urkey\x942\xC4cnst\x03\x0C\x8Ct\x943iversal\x94A/\xC8acehimps\x1B#7>Mai\xC2lr\x10\xC2ae\x05ska\x944utian\x945izona\x946entral\x947ast\xC2-e\tindiana\x948rn\x949awaii\x94:ndiana-starke\x94;\xC2io\x08chigan\x94amoa\x94?c\x94@\xC2-e\x04su\x94Bt\x94Culu\x94D") + zerovec::ZeroVec::from_bytes_unchecked(b"\xE1sabceghijklmnprstuwz\x0F\x0F\x0F\x13\x13\x13\x13\x13\x13\x13\x14\x14\x16\x16\x16\x16\x16\x16\n1\xC9\x1CET\xDE\xED\xF7\xFD1D\x1E'18\xCF\xDA\xE1gfmnrstu\x02\t\t\t\r\x0E\x1A(\xA9\xBC\x8A\x10rica/\xE1rabcdefghjklmnopstw\0\0\0\0\0\0\0\0\0\x01\x01\x01\x01\x01\x01\x01\x01/i\x89\xB1\xBA\xC3\xCC\xD3\xE7\x0C@u\x9C\xA8\xB3\xBC\xD6\xC5bcdls\x06\n\x14\x1Aidjan\x80cra\x81dis_ababa\x82giers\x83m\xC2ae\x03ra\x84ra\x85\xC5ailru\x12\x17\x1E(\xC2mn\x04ako\x86\xC2gj\x03ui\x87ul\x88ssau\x89antyre\x8Aazzaville\x8Bjumbura\x8C\xC3aeo\x0F\x13\xC2is\x03ro\x8Dablanca\x8Euta\x8Fnakry\x90\0\xC3ajo\x14\x1C\xC2kr\x04ar\x90\x01_es_salaam\x90\x02ibouti\x90\x03uala\x90\x04l_aaiun\x90\x05reetown\x90\x06aborone\x90\x07arare\x90\x08\xC2ou\x0Channesburg\x90\tba\x90\n\xC3ahi\x07\x0Fmpala\x90\x0Bartoum\x90\x0C\xC2gn\x05ali\x90\rshasa\x90\x0E\xC4aiou\x05\x0F\x13gos\x90\x0Fbreville\x90\x10me\x90\x11\xC3abs\x05\x0Enda\x90\x12umbashi\x90\x13aka\x90\x14\xC3abo\x15\x1C\xC3lps\x05\nabo\x90\x15uto\x90\x16eru\x90\x17abane\x90\x18\xC2gn\x08adishu\x90\x19rovia\x90\x1A\xC4adio\x07\x0F\x15irobi\x90\x1Bjamena\x90\x1Camey\x90\x1Duakchott\x90\x1Euagadougou\x90\x1Forto-novo\x90 ao_tome\x90!\xC3iru\x08\x0Fmbuktu\x90\"ipoli\x90#nis\x90$indhoek\x90%erica/\xE1vabcdefghijklmnoprstvwy\0\x01\x01\x02\x02\x02\x02\x02\x03\x03\x03\x03\x04\x04\x04\x05\x05\x06\x06\x06\x06\xE7F\xF4-Xv\xD1\xEEg\x7F\xB7\xEC\x92\xEC\xF4g\xB0M\x87\x9A\xB0\xC5dnrst\x04\x1F\xC7\xCFak\x90&\xC3cgt\x08\x0Fhorage\x90'uilla\x90(igua\x90)\xC3agu\x08\x9Eguaina\x90*entina/\xC9bcjlmrstu\r17@HUmuuenos_aires\x90+\xC2ao\ttamarca\x90,\xC2mr\rodrivadavia\x90-doba\x90.ujuy\x90/a_rioja\x900endoza\x901io_gallegos\x902a\xC2ln\x04ta\x903_\xC2jl\x05uan\x904uis\x905ucuman\x906shuaia\x907ba\x908uncion\x909\xC2ik\x07kokan\x90:a\x90;\xC5aelou\x1A&2I\xC2hr\x0Fia\x90<_banderas\x90=bados\x90>l\xC2ei\x03m\x90?ze\x90@anc-sablon\x90A\xC3agi\x08\r_vista\x90Bota\x90Cse\x90Denos_aires\x90E\xC6ahioruCTa\x8C\x93\xC5mnrty\x19\x1E$,\xC2bp\x0Bridge_bay\x90Fo_grande\x90Gcun\x90Hacas\x90Iamarca\x90J\xC2em\x05nne\x90Kan\x90Li\xC2ch\x05ago\x90Muahua\x90Nudad_juarez\x90O\xC3rsy\x14\x1D\xC2ad\x0Bl_harbour\x90Poba\x90Qta_rica\x90Rhaique\x90Seston\x90T\xC2ir\x05aba\x90Uacao\x90V\xC3aeo\x1C+\xC2nw\x0Bmarkshavn\x90Wson\x90X_creek\x90Y\xC2nt\x05ver\x90Zroit\x90[minica\x90\\\xC4diln\x08\x10\x1Bmonton\x90]runepe\x90^_salvador\x90_senada\x90`ort\xC2_a\x11\xC2nw\x07elson\x90aayne\x90bleza\x90c\xC4loru\t\x1B.ace_bay\x90d\xC2do\x06thab\x90ese_bay\x90f\xC2ae\tnd_turk\x90gnada\x90h\xC2ay\x1C\xC3dty\x08\x0Feloupe\x90iemala\x90jaquil\x90kana\x90l\xC2ae\x0F\xC2lv\x06ifax\x90mana\x90nrmosillo\x90o\xC2nqn\xC2dueiana\xC2/pW\xC7ikmptvw\r\x12\x1A%/Andianapolis\x90pnox\x90qarengo\x90retersburg\x90sell_city\x90t\xC2ei\x05vay\x90uncennes\x90vinamac\x90wolis\x90xvik\x90yaluit\x90z\xC2au\x07maica\x90{\xC2jn\x04uy\x90|eau\x90}\xC3enr!(ntucky/\xC2lm\x0Bouisville\x90~onticello\x90\x7Fox_in\x91\0alendijk\x91\x01\xC3aio\x06\n_paz\x91\x02ma\x91\x03\xC3suw\n\x13_angeles\x91\x04isville\x91\x05er_princes\x91\x06\xC4aeio;ks\xC5cnrtz\x05\x11\"*eio\x91\x07a\xC2gu\x04ua\x91\x08s\x91\t\xC2it\x05got\x91\ninique\x91\x0Bamoros\x91\x0Catlan\x91\r\xC4nrtx\x10\x15\x1E\xC2do\x05oza\x91\x0Eminee\x91\x0Fida\x91\x10lakatla\x91\x11ico_city\x91\x12quelon\x91\x13n\xC2ct\x05ton\x91\x14\xC3ers\x0F\x14\xC2rv\x05rey\x91\x15ideo\x91\x16eal\x91\x17errat\x91\x18\xC5aeiou\x06\x0E\x15Lssau\x91\x19w_york\x91\x1Apigon\x91\x1B\xC2mr\x03e\x91\x1C\xC2ot\x05nha\x91\x1Dh_dakota/\xC3bcn\x07\x0Eeulah\x91\x1Eenter\x91\x1Few_salem\x91 uk\x91!jinaga\x91\"\xC4ahou\x1E%R\xC2nr\x11\xC2ag\x04ma\x91#nirtung\x91$amaribo\x91%oenix\x91&rt\xC3-_o\x0B\x15au-prince\x91'of_spain\x91(_\xC2av\x05cre\x91)elho\x91*\xC2en\nrto_rico\x91+ta_arenas\x91,\xC4aeio\x190:\xC2in\nny_river\x91-kin_inlet\x91.\xC3cgs\x05\nife\x91/ina\x910olute\x911o_branco\x912sario\x913\xC6achitw2>FK\x84\xC2no&t\xC3aio\x10\x15\xC2_r\x08isabel\x914em\x915ago\x916_domingo\x917_paulo\x918oresbysund\x919iprock\x91:tka\x91;_\xC6bjkltv\x0B\x11\x17\x1D$arthelemy\x91ucia\x91?homas\x91@incent\x91Aift_current\x91B\xC4ehio\x0B\x1C#gucigalpa\x91Cu\xC2ln\x03e\x91Dder_bay\x91Ejuana\x91Fr\xC2ot\x05nto\x91Gola\x91H\xC2ai\tncouver\x91Irgin\x91J\xC2hi\nitehorse\x91Knnipeg\x91L\xC2ae\x07kutat\x91Mllowknife\x91Ntarctica/\xC8cdmprstv\x06\x1D9@H[aasey\x91O\xC2au\x05vis\x91Pmontdurville\x91Q\xC2ac\x11\xC2cw\x08quarie\x91Rson\x91Smurdo\x91Talmer\x91Uothera\x91V\xC2oy\nuth_pole\x91Wowa\x91Xroll\x91Yostok\x91Zctic/longyearbyen\x91[ia/\xE1uabcdfghijkmnopqrstuvy\0\0\0\0\0\0\x01\x01\x01\x01\x02\x02\x02\x02\x02\x02\x02\x03\x03\x03G\x87\xC1\xF0\xFA\xFF3Fd\xD7\x04&2Tp\x81\xC8\x12Kc\xC7dlmnqst\x04\n\x0F\x15!3en\x91\\maty\x91]man\x91^adyr\x91_t\xC2ao\x03u\x91`be\x91ah\xC2gk\x06abat\x91bhabad\x91cyrau\x91d\xC4aeir%+2\xC5ghknr\x06\x0C\x0F\x15hdad\x91erain\x91fu\x91ggkok\x91hnaul\x91iirut\x91jshkek\x91kunei\x91l\xC3aho\x08-lcutta\x91m\xC3iou\x04\x17ta\x91n\xC2in\x08balsan\x91ogqing\x91pngking\x91qlombo\x91r\xC4ahiu\x0F\x14\x18\xC2cm\x04ca\x91sascus\x91taka\x91uli\x91v\xC2bs\x04ai\x91whanbe\x91xamagusta\x91yaza\x91z\xC3aeo\r\x13\xC2nr\x04oi\x91{bin\x91|bron\x91}\xC3_nv\n\x12chi_minh\x91~g_kong\x91\x7Fd\x92\0\xC2rs\x07kutsk\x92\x01tanbul\x92\x02\xC2ae\x11\xC2ky\x06arta\x92\x03apura\x92\x04rusalem\x92\x05\xC5ahoru3;BM\xC5bmrst\x04\x0C\x12\x18ul\x92\x06chatka\x92\x07achi\x92\x08hgar\x92\t\xC2hm\x07mandu\x92\nandu\x92\x0Bandyga\x92\x0Clkata\x92\rasnoyarsk\x92\x0E\xC3acw\x0B\x11la_lumpur\x92\x0Fhing\x92\x10ait\x92\x11\xC2au#\xC4cgkn\t\x0F\x16a\xC2ou\x02\x92\x12\x92\x13adan\x92\x14assar\x92\x15ila\x92\x16scat\x92\x17\xC2io\x07cosia\x92\x18vo\xC2ks\tuznetsk\x92\x19ibirsk\x92\x1A\xC2mr\x04sk\x92\x1Bal\x92\x1C\xC3hoy\n\x13nom_penh\x92\x1Dntianak\x92\x1Eongyang\x92\x1F\xC3aoy\x05\rtar\x92 stanay\x92!zylorda\x92\"\xC2ai\x07ngoon\x92#yadh\x92$\xC5aehir\x1A\x1F'0\xC3ikm\x05\x0Cgon\x92%halin\x92&arkand\x92'oul\x92(anghai\x92)ngapore\x92*ednekolymsk\x92+\xC5abeho\x10\x17'4\xC2is\x05pei\x92,hkent\x92-ilisi\x92.\xC2hl\x05ran\x92/_aviv\x920im\xC2bp\x03u\x921hu\x922\xC2km\x04yo\x923sk\x924\xC4jlrs\r#)ung_pandang\x925a\xC2an\tnbaatar\x926_bator\x927umqi\x928t-nera\x929\xC2il\tentiane\x92:adivostok\x92;\xC2ae\x0F\xC2kn\x06utsk\x92evan\x92?lantic/\xC8abcfjmrs\x07\x0F\"0:BLzores\x92@ermuda\x92Aa\xC2np\x05ary\x92Be_verde\x92Ca\xC2er\x05roe\x92Doe\x92Ean_mayen\x92Fadeira\x92Geykjavik\x92H\xC2ot\ruth_georgia\x92I\xC2_a\x08helena\x92Jnley\x92Kstralia/\xD0abcdehlmnpqstvwy\x0F%7>DKeo{\x81\x8C\x9B\xA4\xAD\xB2\xC2cd\x03t\x92Lelaide\x92Mr\xC2io\x07sbane\x92Nken_hill\x92O\xC2au\x08nberra\x92Prrie\x92Qarwin\x92Rucla\x92Sobart\x92T\xC3hio\x03\x0Bi\x92Undeman\x92Vrd_howe\x92Welbourne\x92X\xC2os\x05rth\x92Zw\x92Yerth\x92[ueensland\x92\\\xC2oy\x05uth\x92]dney\x92^asmania\x92_ictoria\x92`est\x92aancowinna\x92brazil/\xC4adew\x05\x0F\x14cre\x92cenoronha\x92dast\x92eest\x92f\xC5aehsu_b\x83\x8Anada/\xC8acemnpsy\t\x11\x19\"/7Dtlantic\x92ientral\x92jastern\x92kountain\x92lewfoundland\x92macific\x92naskatchewan\x92oukon\x92pt\x92gile/\xC2ce\x0Continental\x92qasterisland\x92rt6cdt\x92hba\x92s\xE1fegistu\0\0\0\0\0\x03\x08\x0C\x15\xBFt\x92typt\x92wre\x92xt\x92u5edt\x92vc/\xC3guz\x88\x9D\xC2mr{t\x92y\xC3+-04p\xCA0123456789\x02\x10\x12\x14\x16\x18\x1A\x1C\x1E\x92z\x92{\xC3012\x02\x04\x92|\x92}\x92~\x92\x7F\x93\0\x93\x01\x93\x02\x93\x03\x93\x04\x93\x05\x93\x06\xCA0123456789\x02\x18\x1A\x1C\x1E \"$&\x93\x07\x93\x08\xC501234\x02\x04\x06\x08\x93\t\x93\n\x93\x0B\x93\x0C\x93\r\x93\x0E\x93\x0F\x93\x10\x93\x11\x93\x12\x93\x13\x93\x14\x93\x15\x93\x16eenwich\x93\x17\xC3cnt\x03\x0Ct\x93\x18iversal\x93\x1Ac\x93\x19ulu\x93\x1Brope/\xE1uabcdghijklmnoprstuvwz\0\0\0\0\0\0\0\0\0\x01\x01\x01\x01\x01\x01\x01\x01\x01\x02\x02'u\x8B\x92\xA7\xB0\xC6\xCD\xED\x14DLQkw\xC1\xDA\xEF\x1B\"\xC4mnst\t\x10\x19sterdam\x93\x1Cdorra\x93\x1Dtrakhan\x93\x1Ehens\x93\x1F\xC3eru\x18,\xC2lr\x0F\xC2fg\x05ast\x93 rade\x93!lin\x93\"\xC2au\ttislava\x93#ssels\x93$\xC3cds\x08\x0Fharest\x93%apest\x93&ingen\x93'\xC2ho\x08isinau\x93(penhagen\x93)ublin\x93*\xC2iu\tbraltar\x93+ernsey\x93,elsinki\x93-s\xC2lt\ne_of_man\x93.anbul\x93/ersey\x930\xC3aiy\x0B\x16liningrad\x931\xC2er\x03v\x932ov\x933iv\x934\xC4ijou\x06\x0F\x15sbon\x935ubljana\x936ndon\x937xembourg\x938\xC3aio\x17\x1C\xC3dlr\x05\trid\x939ta\x93:iehamn\x93;nsk\x93<\xC2ns\x05aco\x93=cow\x93>icosia\x93?slo\x93@\xC3aor\x05\x0Eris\x93Adgorica\x93Bague\x93C\xC2io\x04ga\x93Dme\x93E\xC5aikot\",27\xC3mnr\x05\x0Eara\x93F_marino\x93Ga\xC2jt\x05evo\x93Hov\x93Imferopol\x93Jopje\x93Kfia\x93Lockholm\x93M\xC2ai\x07llinn\x93Nra\xC2ns\x03e\x93Opol\x93P\xC2lz\tyanovsk\x93Qhgorod\x93R\xC3aio\x0E\x1D\xC2dt\x04uz\x93Sican\x93T\xC2el\x05nna\x93Unius\x93Vlgograd\x93Warsaw\x93X\xC2au\x12\xC2gp\x05reb\x93Yorozhye\x93Zrich\x93[\xC3bmr\t\x1A\x93\\-eire\x93]t\x93^\xC3+-0\x03\x060\x93_0\x93`\x93aeenwich\x93b\xC2os\x08ngkong\x93dt\x93c\xC4cnrs\x07x|eland\x93edian/\xC5ackmr\r/9Zntananarivo\x93f\xC2ho\x11\xC2ar\x05gos\x93gistmas\x93h\xC2cm\x04os\x93ioro\x93jerguelen\x93ka\xC4hluy\x03\n\x12e\x93ldives\x93mritius\x93notte\x93oeunion\x93pan\x93qrael\x93ra\xC2mp\x06aica\x93san\x93twajalein\x93uibya\x93v\xC2es'\xC2tx\x02\x93wico/\xC2bg\x11aja\xC2ns\x06orte\x93zur\x93{eneral\x93|t\x93x7mdt\x93y\xC2az\x06vajo\x93\x7F\x93}-chat\x93~\xE1daors\x01\x01\x01\xB4\xC4\xC7cific/\xE1qabcefghjkmnprstwy\0\0\0\0\0\0\0\0\0\0\0\x01\x01\x01\x01\x01\x10\x1D,F_\x85\x8E\x97\xBE\xD9\xF71;Ijw\xC2pu\x04ia\x94\x02ckland\x94\x03ougainville\x94\x04h\xC2au\x06tham\x94\x05uk\x94\x06\xC3afn\x06\x0Bster\x94\x07ate\x94\x08derbury\x94\t\xC3aiu\x07\x0Bkaofo\x94\nji\x94\x0Bnafuti\x94\x0C\xC2au\x12\xC2lm\x08apagos\x94\rbier\x94\x0Ea\xC2dm\talcanal\x94\x0F\x94\x10onolulu\x94\x11ohnston\x94\x12\xC4aiow\x06\x10\x16nton\x94\x13ritimati\x94\x14srae\x94\x15ajalein\x94\x16\xC2ai\x11\xC2jr\x05uro\x94\x17quesas\x94\x18dway\x94\x19\xC3aio\x05\turu\x94\x1Aue\x94\x1B\xC2ru\x06folk\x94\x1Cmea\x94\x1D\xC3aio\x10\x18\xC2gl\x08o_pago\x94\x1Eau\x94\x1Ftcairn\x94 \xC3hnr\x06\x0Bnpei\x94!ape\x94\"t_moresby\x94#arotonga\x94$a\xC2im\x05pan\x94%oa\x94&\xC3aor\x0E\x17\xC2hr\x05iti\x94'awa\x94(ngatapu\x94)uk\x94*a\xC2kl\x03e\x94+lis\x94,ap\x94-\xC2lr\x05and\x94.tugal\x94/c\x94\0t8pdt\x94\x01o\xC2ck\x02\x940\x941ingapore\x942urkey\x943\xC4cnst\x03\x0C\x8Ct\x944iversal\x94B/\xC8acehimps\x1B#7>Mai\xC2lr\x10\xC2ae\x05ska\x945utian\x946izona\x947entral\x948ast\xC2-e\tindiana\x949rn\x94:awaii\x94;ndiana-starke\x94<\xC2io\x08chigan\x94=untain\x94>acific\x94?amoa\x94@c\x94A\xC2-e\x04su\x94Ct\x94Dulu\x94E") }, }, non_canonical_identifiers : unsafe { - zerovec::ZeroVec::from_bytes_unchecked(b"\x05\0\0\0+\0\0\x002\0\0\0\0\0\0\0=\0\0\0<\0\0\0K\0\0\x006\0\0\0U\0\0\0;\0\0\0Z\0\0\0<\0\0\0`\0\0\0\xB3\0\0\0a\0\0\0>\0\0\0p\0\0\0\xD6\0\0\0r\0\0\0\x80\0\0\0u\0\0\0\xB1\0\0\0\x88\0\0\0\x80\0\0\0\x8C\0\0\0?\0\0\0\x90\0\0\0\x81\0\0\0\x95\0\0\0\x8E\0\0\0\x9E\0\0\0A\0\0\0\xA7\0\0\0\xD7\0\0\0\xAB\0\0\0\xD7\0\0\0\xB4\0\0\0\x8A\0\0\0\xB9\0\0\0\xC2\0\0\0\xBD\0\0\0\xDC\0\0\0\xC3\0\0\0>\0\0\0\xC4\0\0\0\xD6\0\0\0\xCA\0\0\0j\0\0\0\xD5\0\0\0\xD7\0\0\0\xDA\0\0\0\xBB\0\0\0\xDE\0\0\0m\0\0\0\xE7\0\0\0\x12\x02\0\0\xF3\0\0\0\xF2\0\0\0\xFD\0\0\0\x1C\x01\0\0\xFF\0\0\0E\x01\0\0\0\x01\0\08\x01\0\0\x01\x01\0\08\x01\0\0\x03\x01\0\0\x05\x01\0\0\x0B\x01\0\08\x01\0\0\x11\x01\0\0\xBE\x01\0\0\x18\x01\0\0G\x01\0\0\x1A\x01\0\0\x19\x01\0\0!\x01\0\0\"\x01\0\x002\x01\0\0L\x01\0\x004\x01\0\0\r\x01\0\0?\x01\0\0\x14\x01\0\0@\x01\0\0A\x01\0\0D\x01\0\0$\x01\0\0F\x01\0\0E\x01\0\0S\x01\0\0T\x01\0\0U\x01\0\0\xB1\x01\0\0[\x01\0\0m\x01\0\0_\x01\0\0m\x01\0\0`\x01\0\0c\x01\0\0d\x01\0\0f\x01\0\0h\x01\0\0m\x01\0\0i\x01\0\0a\x01\0\0k\x01\0\0]\x01\0\0l\x01\0\0\\\x01\0\0n\x01\0\0c\x01\0\0o\x01\0\0g\x01\0\0p\x01\0\0j\x01\0\0q\x01\0\0^\x01\0\0r\x01\0\0\xC2\0\0\0s\x01\0\0\xAD\0\0\0t\x01\0\0\xC8\0\0\0u\x01\0\0\x99\0\0\0v\x01\0\0\xB3\x01\0\0w\x01\0\0]\0\0\0x\x01\0\0}\0\0\0y\x01\0\0\xDC\0\0\0z\x01\0\0\xD7\0\0\0{\x01\0\0m\0\0\0|\x01\0\0\xCD\0\0\0}\x01\0\0\xD9\0\0\0~\x01\0\0\xC0\0\0\0\x7F\x01\0\0\xDB\0\0\0\x80\x01\0\0\xC6\0\0\0\x81\x01\0\0\x16\x02\0\0\x82\x01\0\0~\0\0\0\x83\x01\0\0\xAE\x01\0\0\x84\x01\0\0\xB3\0\0\0\x85\x01\0\0\xAA\0\0\0\x86\x01\0\0\r\0\0\0\x87\x01\0\0\xB9\x01\0\0\x88\x01\0\0P\x02\0\0\x89\x01\0\0P\x02\0\0\x96\x01\0\0P\x02\0\0\xA5\x01\0\0P\x02\0\0\xA6\x01\0\0P\x02\0\0\xA7\x01\0\0P\x02\0\0\xA8\x01\0\0P\x02\0\0\xA9\x01\0\0P\x02\0\0\xAA\x01\0\0P\x02\0\0\xAF\x01\0\0\xC6\x01\0\0\xC1\x01\0\0\xC3\x01\0\0\xCE\x01\0\0'\x01\0\0\xDF\x01\0\0\xB7\x01\0\0\xE1\x01\0\0\xC3\x01\0\0\xE9\x01\0\0\xC3\x01\0\0\xEB\x01\0\0\xC6\x01\0\0\xEC\x01\0\0\xC6\x01\0\0\xED\x01\0\0P\x02\0\0\xEE\x01\0\0P\x02\0\0\xEF\x01\0\0P\x02\0\0\xF0\x01\0\0P\x02\0\0\xF1\x01\0\0P\x02\0\0\xF2\x01\0\0 \x02\0\0\xF3\x01\0\0\x0E\x01\0\0\xF4\x01\0\0\0\0\0\0\0\x02\0\0>\x01\0\0\x01\x02\0\0\x14\x01\0\0\x02\x02\0\0\x8B\0\0\0\x03\x02\0\0B\x01\0\0\x04\x02\0\0%\x02\0\0\x05\x02\0\x003\0\0\0\x06\x02\0\0\xB3\x01\0\0\x07\x02\0\0\xB6\0\0\0\x08\x02\0\0j\0\0\0\t\x02\0\0\xD6\0\0\0\n\x02\0\0\x9D\0\0\0\x0B\x02\0\0\xA2\0\0\0\x0C\x02\0\0\x12\x02\0\0\r\x02\0\0\x14\x02\0\0\x0E\x02\0\0j\0\0\0\x0F\x02\0\08\x01\0\0\x10\x02\0\0\x94\0\0\0\x18\x02\0\0\"\x02\0\0!\x02\0\0 \x02\0\x001\x02\0\0\x1E\x02\0\x005\x02\0\0-\x02\0\09\x02\0\x002\x02\0\0<\x02\0\x002\x02\0\0=\x02\0\0\xE7\x01\0\0>\x02\0\0\xC4\x01\0\0?\x02\0\0;\x01\0\0@\x02\0\x007\x01\0\0A\x02\0\09\x01\0\0B\x02\0\0\xBE\x01\0\0C\x02\0\0P\x02\0\0D\x02\0\x007\0\0\0E\x02\0\x006\0\0\0F\x02\0\0\xB6\0\0\0G\x02\0\0]\0\0\0H\x02\0\0\x80\0\0\0I\x02\0\0\xAA\0\0\0J\x02\0\0 \x02\0\0K\x02\0\0\x81\0\0\0L\x02\0\0k\0\0\0M\x02\0\0j\0\0\0N\x02\0\0\x94\0\0\0O\x02\0\0-\x02\0\0Q\x02\0\0P\x02\0\0R\x02\0\0\xCD\x01\0\0S\x02\0\0\xC4\x01\0\0T\x02\0\0P\x02\0\0") + zerovec::ZeroVec::from_bytes_unchecked(b"\x05\0\0\0\x04\0\0\x002\0\0\0\x06\0\0\0=\0\0\0<\0\0\0K\0\0\x006\0\0\0U\0\0\0;\0\0\0Z\0\0\0<\0\0\0`\0\0\0J\0\0\0a\0\0\0>\0\0\0p\0\0\0\xD6\0\0\0r\0\0\0\x80\0\0\0u\0\0\0\xB1\0\0\0\x88\0\0\0\x80\0\0\0\x8C\0\0\0?\0\0\0\x90\0\0\0\x81\0\0\0\x95\0\0\0\x8E\0\0\0\x9E\0\0\0A\0\0\0\xA7\0\0\0\xD7\0\0\0\xAB\0\0\0\xD7\0\0\0\xB4\0\0\0\x8A\0\0\0\xB9\0\0\0\xC2\0\0\0\xBD\0\0\0\xDC\0\0\0\xC3\0\0\0>\0\0\0\xC4\0\0\0\xD6\0\0\0\xCA\0\0\0j\0\0\0\xD5\0\0\0\xD7\0\0\0\xDA\0\0\0\xD0\0\0\0\xDE\0\0\0m\0\0\0\xE7\0\0\0\xE4\0\0\0\xF3\0\0\0\xF2\0\0\0\xFD\0\0\0\x1D\x01\0\0\xFF\0\0\0F\x01\0\0\0\x01\0\09\x01\0\0\x01\x01\0\09\x01\0\0\x03\x01\0\0\x05\x01\0\0\x0C\x01\0\09\x01\0\0\x12\x01\0\0\xBF\x01\0\0\x19\x01\0\0H\x01\0\0\x1B\x01\0\0\x1A\x01\0\0\"\x01\0\0#\x01\0\x003\x01\0\0M\x01\0\x005\x01\0\0\x0E\x01\0\0@\x01\0\0\x15\x01\0\0A\x01\0\0B\x01\0\0E\x01\0\0%\x01\0\0G\x01\0\0F\x01\0\0T\x01\0\0U\x01\0\0V\x01\0\0\xEB\0\0\0\\\x01\0\0n\x01\0\0`\x01\0\0n\x01\0\0a\x01\0\0d\x01\0\0e\x01\0\0g\x01\0\0i\x01\0\0n\x01\0\0j\x01\0\0b\x01\0\0l\x01\0\0^\x01\0\0m\x01\0\0]\x01\0\0o\x01\0\0d\x01\0\0p\x01\0\0h\x01\0\0q\x01\0\0k\x01\0\0r\x01\0\0_\x01\0\0s\x01\0\0\xC2\0\0\0t\x01\0\0\xAD\0\0\0u\x01\0\0\xC8\0\0\0v\x01\0\0\x99\0\0\0w\x01\0\0\xB4\x01\0\0x\x01\0\0]\0\0\0y\x01\0\0}\0\0\0z\x01\0\0\xDC\0\0\0{\x01\0\0\xD7\0\0\0|\x01\0\0m\0\0\0}\x01\0\0\xCD\0\0\0~\x01\0\0\xD9\0\0\0\x7F\x01\0\0\xC0\0\0\0\x80\x01\0\0\xDB\0\0\0\x81\x01\0\0\xC6\0\0\0\x82\x01\0\0\x17\x02\0\0\x83\x01\0\0~\0\0\0\x84\x01\0\0\xAF\x01\0\0\x85\x01\0\0\xB3\0\0\0\x86\x01\0\0\xAA\0\0\0\x87\x01\0\0\r\0\0\0\x88\x01\0\0\xBA\x01\0\0\x89\x01\0\0Q\x02\0\0\x8A\x01\0\0Q\x02\0\0\x97\x01\0\0Q\x02\0\0\xA6\x01\0\0Q\x02\0\0\xA7\x01\0\0Q\x02\0\0\xA8\x01\0\0Q\x02\0\0\xA9\x01\0\0Q\x02\0\0\xAA\x01\0\0Q\x02\0\0\xAB\x01\0\0Q\x02\0\0\xB0\x01\0\0\xC7\x01\0\0\xC2\x01\0\0\xC4\x01\0\0\xCF\x01\0\0(\x01\0\0\xE0\x01\0\0\xB8\x01\0\0\xE2\x01\0\0\xC4\x01\0\0\xEA\x01\0\0\xC4\x01\0\0\xEC\x01\0\0\xC7\x01\0\0\xED\x01\0\0\xC7\x01\0\0\xEE\x01\0\0Q\x02\0\0\xEF\x01\0\0Q\x02\0\0\xF0\x01\0\0Q\x02\0\0\xF1\x01\0\0Q\x02\0\0\xF2\x01\0\0Q\x02\0\0\xF3\x01\0\0!\x02\0\0\xF4\x01\0\0\x0F\x01\0\0\xF5\x01\0\0X\x01\0\0\x01\x02\0\0?\x01\0\0\x02\x02\0\0\x15\x01\0\0\x03\x02\0\0\x8B\0\0\0\x04\x02\0\0C\x01\0\0\x05\x02\0\0&\x02\0\0\x06\x02\0\x003\0\0\0\x07\x02\0\0\xB4\x01\0\0\x08\x02\0\0\xB6\0\0\0\t\x02\0\0j\0\0\0\n\x02\0\0\xD6\0\0\0\x0B\x02\0\0\x9D\0\0\0\x0C\x02\0\0\xA2\0\0\0\r\x02\0\0\x13\x02\0\0\x0E\x02\0\0\x15\x02\0\0\x0F\x02\0\0j\0\0\0\x10\x02\0\09\x01\0\0\x11\x02\0\0\x94\0\0\0\x19\x02\0\0#\x02\0\0\"\x02\0\0!\x02\0\x002\x02\0\x001\x02\0\x006\x02\0\0.\x02\0\0:\x02\0\0\x16\x02\0\0=\x02\0\0\x16\x02\0\0>\x02\0\0\xE8\x01\0\0?\x02\0\0\xC5\x01\0\0@\x02\0\0<\x01\0\0A\x02\0\08\x01\0\0B\x02\0\0:\x01\0\0C\x02\0\0\xBF\x01\0\0D\x02\0\0Q\x02\0\0E\x02\0\x007\0\0\0F\x02\0\x006\0\0\0G\x02\0\0\xB6\0\0\0H\x02\0\0]\0\0\0I\x02\0\0\x80\0\0\0J\x02\0\0\xAA\0\0\0K\x02\0\0!\x02\0\0L\x02\0\0\x81\0\0\0M\x02\0\0k\0\0\0N\x02\0\0j\0\0\0O\x02\0\0\x94\0\0\0P\x02\0\0.\x02\0\0R\x02\0\0Q\x02\0\0S\x02\0\0\xCE\x01\0\0T\x02\0\0\xC5\x01\0\0U\x02\0\0Q\x02\0\0") }, normalized_identifiers : unsafe { - zerovec::vecs::VarZeroVec16::from_bytes_unchecked(b"U\x02\x0E\0\x1A\0,\0:\0G\0T\0a\0n\0{\0\x88\0\x97\0\xA9\0\xB9\0\xC5\0\xD6\0\xE2\0\xF0\0\xFC\0\x10\x01\x1F\x01,\x01;\x01J\x01Y\x01f\x01y\x01\x84\x01\x92\x01\xA1\x01\xAE\x01\xBD\x01\xC9\x01\xDA\x01\xE5\x01\xF2\x01\x03\x02\x10\x02\x1D\x02*\x027\x02E\x02U\x02d\x02r\x02\x81\x02\x8E\x02\x9F\x02\xB1\x02\xC2\x02\xD1\x02\xE0\x02\xEE\x02\xFA\x02\t\x03\x15\x03&\x036\x03E\x03V\x03t\x03\x8F\x03\xAF\x03\xC8\x03\xDF\x03\xF9\x03\x12\x040\x04G\x04a\x04{\x04\x94\x04\xAD\x04\xBA\x04\xCA\x04\xDA\x04\xE6\x04\xF3\x04\t\x05\x19\x05&\x054\x05H\x05Y\x05g\x05t\x05\x88\x05\x9D\x05\xB1\x05\xBF\x05\xCE\x05\xDF\x05\xEE\x05\xFC\x05\x0B\x06\x1C\x061\x06F\x06U\x06g\x06x\x06\x87\x06\x95\x06\xA4\x06\xB8\x06\xC6\x06\xDA\x06\xE8\x06\xF7\x06\x07\x07\x17\x07'\x07:\x07J\x07]\x07o\x07\x80\x07\x91\x07\xA0\x07\xB1\x07\xC3\x07\xD2\x07\xE4\x07\xF5\x07\x06\x08\x14\x08#\x081\x08C\x08_\x08s\x08\x8A\x08\xA4\x08\xBD\x08\xD2\x08\xEB\x08\x02\t\x16\t$\t3\tB\tO\t]\tx\t\x93\t\xA2\t\xB4\t\xC2\t\xCE\t\xE1\t\xF3\t\x08\n\x16\n%\n3\nB\nT\ne\nu\n\x84\n\x95\n\xA3\n\xB5\n\xC8\n\xD8\n\xE7\n\xF8\n\n\x0B\x1A\x0B,\x0B:\x0BJ\x0BY\x0Be\x0Bt\x0B\x8F\x0B\xAA\x0B\xC8\x0B\xD4\x0B\xE3\x0B\xF1\x0B\x04\x0C\x16\x0C%\x0C;\x0CP\x0Cb\x0Cu\x0C\x88\x0C\x9C\x0C\xAF\x0C\xC3\x0C\xD1\x0C\xDF\x0C\xEF\x0C\x01\r\x10\r$\r4\rD\rY\rj\r~\r\x8E\r\x9B\r\xB0\r\xC0\r\xD0\r\xE0\r\xF1\r\x03\x0E\x18\x0E+\x0E8\x0EK\x0EZ\x0Ei\x0Ex\x0E\x89\x0E\x97\x0E\xA9\x0E\xB9\x0E\xC8\x0E\xDB\x0E\xEB\x0E\xFB\x0E\x14\x0F(\x0F9\x0FK\x0F\\\x0Fn\x0F\x83\x0F\x93\x0F\xA3\x0F\xB4\x0F\xC7\x0F\xD0\x0F\xDB\x0F\xE5\x0F\xF0\x0F\xFA\x0F\x05\x10\x12\x10 \x10+\x107\x10C\x10L\x10X\x10d\x10o\x10{\x10\x86\x10\x93\x10\x9D\x10\xAC\x10\xBA\x10\xC8\x10\xD4\x10\xDE\x10\xEB\x10\xF5\x10\xFE\x10\x08\x11\x15\x11#\x11,\x117\x11B\x11R\x11`\x11i\x11u\x11\x82\x11\x8E\x11\x9B\x11\xA9\x11\xB3\x11\xC1\x11\xCD\x11\xD9\x11\xE7\x11\xF4\x11\x01\x12\r\x12\x1D\x12.\x12:\x12E\x12O\x12Y\x12e\x12r\x12}\x12\x88\x12\x94\x12\xA5\x12\xB5\x12\xBE\x12\xC7\x12\xD6\x12\xE4\x12\xF2\x12\xFC\x12\t\x13\x17\x13#\x13.\x139\x13F\x13T\x13^\x13k\x13y\x13\x8B\x13\x96\x13\xA3\x13\xAF\x13\xBA\x13\xC7\x13\xD2\x13\xDE\x13\xE8\x13\xF2\x13\x04\x14\x14\x14#\x14.\x14;\x14I\x14Y\x14e\x14p\x14\x82\x14\x8E\x14\x9D\x14\xAD\x14\xBC\x14\xCF\x14\xDE\x14\xEC\x14\xFE\x14\x0E\x15 \x156\x15H\x15X\x15e\x15w\x15\x89\x15\x9E\x15\xB0\x15\xC0\x15\xD0\x15\xDF\x15\xEF\x15\xFC\x15\x0E\x16!\x164\x16A\x16P\x16_\x16s\x16\x82\x16\x92\x16\xA4\x16\xB6\x16\xC4\x16\xD8\x16\xE3\x16\xF3\x16\xFE\x16\t\x17\x0C\x17\x13\x17\"\x170\x17>\x17M\x17`\x17n\x17\x81\x17\x8D\x17\x9E\x17\xB0\x17\xB4\x17\xB7\x17\xBA\x17\xC1\x17\xC6\x17\xCA\x17\xD1\x17\xDA\x17\xE3\x17\xED\x17\xF7\x17\x01\x18\n\x18\x13\x18\x1C\x18%\x18.\x187\x18@\x18I\x18R\x18[\x18e\x18o\x18y\x18\x83\x18\x8D\x18\x96\x18\x9F\x18\xA8\x18\xB1\x18\xBA\x18\xC3\x18\xCC\x18\xD5\x18\xDD\x18\xEA\x18\xF1\x18\xF8\x18\x05\x19\r\x19\x1D\x19+\x19;\x19H\x19V\x19e\x19r\x19\x83\x19\x92\x19\xA2\x19\xB1\x19\xC0\x19\xCF\x19\xE0\x19\xED\x19\xFD\x19\x0C\x1A\x1B\x1A-\x1A<\x1AI\x1A[\x1Af\x1Ar\x1A}\x1A\x8A\x1A\x9A\x1A\xA7\x1A\xB8\x1A\xC5\x1A\xD1\x1A\xE1\x1A\xED\x1A\xFA\x1A\x07\x1B\x15\x1B \x1B,\x1B<\x1BI\x1BT\x1B_\x1Bl\x1B}\x1B\x8C\x1B\x9A\x1B\xAB\x1B\xB8\x1B\xC4\x1B\xD4\x1B\xE2\x1B\xEF\x1B\xFE\x1B\x0E\x1C\x1D\x1C)\x1C7\x1CD\x1CR\x1Cb\x1Co\x1C|\x1C\x8D\x1C\x9A\x1C\x9C\x1C\xA3\x1C\xA6\x1C\xAB\x1C\xB0\x1C\xB4\x1C\xBD\x1C\xC0\x1C\xC8\x1C\xCF\x1C\xE2\x1C\xEF\x1C\xFF\x1C\x0B\x1D\x18\x1D(\x1D3\x1DB\x1DR\x1D`\x1Dn\x1Dr\x1Dx\x1D\x7F\x1D\x84\x1D\x8D\x1D\x92\x1D\x95\x1D\x98\x1D\x9F\x1D\xAF\x1D\xBD\x1D\xCB\x1D\xCD\x1D\xD4\x1D\xDA\x1D\xDD\x1D\xE4\x1D\xF0\x1D\0\x1E\x14\x1E#\x1E0\x1E>\x1EK\x1E\\\x1Ek\x1Ew\x1E\x87\x1E\x98\x1E\xA7\x1E\xBA\x1E\xC6\x1E\xD6\x1E\xE6\x1E\xF4\x1E\x06\x1F\x14\x1F%\x1F3\x1FD\x1FR\x1F_\x1Fk\x1Fz\x1F\x88\x1F\x99\x1F\xA6\x1F\xB6\x1F\xC5\x1F\xD3\x1F\xE7\x1F\xF8\x1F\x06 \x13 ! / @ L X f q w \x7F \x82 \x85 \x8E \x94 \x97 \xA0 \xAB \xB5 \xBF \xCE \xD8 \xE1 \xF2 \xFD \x08!\x12!\x1A!\x1D!&!*!-!Africa/AbidjanAfrica/AccraAfrica/Addis_AbabaAfrica/AlgiersAfrica/AsmaraAfrica/AsmeraAfrica/BamakoAfrica/BanguiAfrica/BanjulAfrica/BissauAfrica/BlantyreAfrica/BrazzavilleAfrica/BujumburaAfrica/CairoAfrica/CasablancaAfrica/CeutaAfrica/ConakryAfrica/DakarAfrica/Dar_es_SalaamAfrica/DjiboutiAfrica/DoualaAfrica/El_AaiunAfrica/FreetownAfrica/GaboroneAfrica/HarareAfrica/JohannesburgAfrica/JubaAfrica/KampalaAfrica/KhartoumAfrica/KigaliAfrica/KinshasaAfrica/LagosAfrica/LibrevilleAfrica/LomeAfrica/LuandaAfrica/LubumbashiAfrica/LusakaAfrica/MalaboAfrica/MaputoAfrica/MaseruAfrica/MbabaneAfrica/MogadishuAfrica/MonroviaAfrica/NairobiAfrica/NdjamenaAfrica/NiameyAfrica/NouakchottAfrica/OuagadougouAfrica/Porto-NovoAfrica/Sao_TomeAfrica/TimbuktuAfrica/TripoliAfrica/TunisAfrica/WindhoekAmerica/AdakAmerica/AnchorageAmerica/AnguillaAmerica/AntiguaAmerica/AraguainaAmerica/Argentina/Buenos_AiresAmerica/Argentina/CatamarcaAmerica/Argentina/ComodRivadaviaAmerica/Argentina/CordobaAmerica/Argentina/JujuyAmerica/Argentina/La_RiojaAmerica/Argentina/MendozaAmerica/Argentina/Rio_GallegosAmerica/Argentina/SaltaAmerica/Argentina/San_JuanAmerica/Argentina/San_LuisAmerica/Argentina/TucumanAmerica/Argentina/UshuaiaAmerica/ArubaAmerica/AsuncionAmerica/AtikokanAmerica/AtkaAmerica/BahiaAmerica/Bahia_BanderasAmerica/BarbadosAmerica/BelemAmerica/BelizeAmerica/Blanc-SablonAmerica/Boa_VistaAmerica/BogotaAmerica/BoiseAmerica/Buenos_AiresAmerica/Cambridge_BayAmerica/Campo_GrandeAmerica/CancunAmerica/CaracasAmerica/CatamarcaAmerica/CayenneAmerica/CaymanAmerica/ChicagoAmerica/ChihuahuaAmerica/Ciudad_JuarezAmerica/Coral_HarbourAmerica/CordobaAmerica/Costa_RicaAmerica/CoyhaiqueAmerica/CrestonAmerica/CuiabaAmerica/CuracaoAmerica/DanmarkshavnAmerica/DawsonAmerica/Dawson_CreekAmerica/DenverAmerica/DetroitAmerica/DominicaAmerica/EdmontonAmerica/EirunepeAmerica/El_SalvadorAmerica/EnsenadaAmerica/Fort_NelsonAmerica/Fort_WayneAmerica/FortalezaAmerica/Glace_BayAmerica/GodthabAmerica/Goose_BayAmerica/Grand_TurkAmerica/GrenadaAmerica/GuadeloupeAmerica/GuatemalaAmerica/GuayaquilAmerica/GuyanaAmerica/HalifaxAmerica/HavanaAmerica/HermosilloAmerica/Indiana/IndianapolisAmerica/Indiana/KnoxAmerica/Indiana/MarengoAmerica/Indiana/PetersburgAmerica/Indiana/Tell_CityAmerica/Indiana/VevayAmerica/Indiana/VincennesAmerica/Indiana/WinamacAmerica/IndianapolisAmerica/InuvikAmerica/IqaluitAmerica/JamaicaAmerica/JujuyAmerica/JuneauAmerica/Kentucky/LouisvilleAmerica/Kentucky/MonticelloAmerica/Knox_INAmerica/KralendijkAmerica/La_PazAmerica/LimaAmerica/Los_AngelesAmerica/LouisvilleAmerica/Lower_PrincesAmerica/MaceioAmerica/ManaguaAmerica/ManausAmerica/MarigotAmerica/MartiniqueAmerica/MatamorosAmerica/MazatlanAmerica/MendozaAmerica/MenomineeAmerica/MeridaAmerica/MetlakatlaAmerica/Mexico_CityAmerica/MiquelonAmerica/MonctonAmerica/MonterreyAmerica/MontevideoAmerica/MontrealAmerica/MontserratAmerica/NassauAmerica/New_YorkAmerica/NipigonAmerica/NomeAmerica/NoronhaAmerica/North_Dakota/BeulahAmerica/North_Dakota/CenterAmerica/North_Dakota/New_SalemAmerica/NuukAmerica/OjinagaAmerica/PanamaAmerica/PangnirtungAmerica/ParamariboAmerica/PhoenixAmerica/Port-au-PrinceAmerica/Port_of_SpainAmerica/Porto_AcreAmerica/Porto_VelhoAmerica/Puerto_RicoAmerica/Punta_ArenasAmerica/Rainy_RiverAmerica/Rankin_InletAmerica/RecifeAmerica/ReginaAmerica/ResoluteAmerica/Rio_BrancoAmerica/RosarioAmerica/Santa_IsabelAmerica/SantaremAmerica/SantiagoAmerica/Santo_DomingoAmerica/Sao_PauloAmerica/ScoresbysundAmerica/ShiprockAmerica/SitkaAmerica/St_BarthelemyAmerica/St_JohnsAmerica/St_KittsAmerica/St_LuciaAmerica/St_ThomasAmerica/St_VincentAmerica/Swift_CurrentAmerica/TegucigalpaAmerica/ThuleAmerica/Thunder_BayAmerica/TijuanaAmerica/TorontoAmerica/TortolaAmerica/VancouverAmerica/VirginAmerica/WhitehorseAmerica/WinnipegAmerica/YakutatAmerica/YellowknifeAntarctica/CaseyAntarctica/DavisAntarctica/DumontDUrvilleAntarctica/MacquarieAntarctica/MawsonAntarctica/McMurdoAntarctica/PalmerAntarctica/RotheraAntarctica/South_PoleAntarctica/SyowaAntarctica/TrollAntarctica/VostokArctic/LongyearbyenAsia/AdenAsia/AlmatyAsia/AmmanAsia/AnadyrAsia/AqtauAsia/AqtobeAsia/AshgabatAsia/AshkhabadAsia/AtyrauAsia/BaghdadAsia/BahrainAsia/BakuAsia/BangkokAsia/BarnaulAsia/BeirutAsia/BishkekAsia/BruneiAsia/CalcuttaAsia/ChitaAsia/ChoibalsanAsia/ChongqingAsia/ChungkingAsia/ColomboAsia/DaccaAsia/DamascusAsia/DhakaAsia/DiliAsia/DubaiAsia/DushanbeAsia/FamagustaAsia/GazaAsia/HarbinAsia/HebronAsia/Ho_Chi_MinhAsia/Hong_KongAsia/HovdAsia/IrkutskAsia/IstanbulAsia/JakartaAsia/JayapuraAsia/JerusalemAsia/KabulAsia/KamchatkaAsia/KarachiAsia/KashgarAsia/KathmanduAsia/KatmanduAsia/KhandygaAsia/KolkataAsia/KrasnoyarskAsia/Kuala_LumpurAsia/KuchingAsia/KuwaitAsia/MacaoAsia/MacauAsia/MagadanAsia/MakassarAsia/ManilaAsia/MuscatAsia/NicosiaAsia/NovokuznetskAsia/NovosibirskAsia/OmskAsia/OralAsia/Phnom_PenhAsia/PontianakAsia/PyongyangAsia/QatarAsia/QostanayAsia/QyzylordaAsia/RangoonAsia/RiyadhAsia/SaigonAsia/SakhalinAsia/SamarkandAsia/SeoulAsia/ShanghaiAsia/SingaporeAsia/SrednekolymskAsia/TaipeiAsia/TashkentAsia/TbilisiAsia/TehranAsia/Tel_AvivAsia/ThimbuAsia/ThimphuAsia/TokyoAsia/TomskAsia/Ujung_PandangAsia/UlaanbaatarAsia/Ulan_BatorAsia/UrumqiAsia/Ust-NeraAsia/VientianeAsia/VladivostokAsia/YakutskAsia/YangonAsia/YekaterinburgAsia/YerevanAtlantic/AzoresAtlantic/BermudaAtlantic/CanaryAtlantic/Cape_VerdeAtlantic/FaeroeAtlantic/FaroeAtlantic/Jan_MayenAtlantic/MadeiraAtlantic/ReykjavikAtlantic/South_GeorgiaAtlantic/St_HelenaAtlantic/StanleyAustralia/ACTAustralia/AdelaideAustralia/BrisbaneAustralia/Broken_HillAustralia/CanberraAustralia/CurrieAustralia/DarwinAustralia/EuclaAustralia/HobartAustralia/LHIAustralia/LindemanAustralia/Lord_HoweAustralia/MelbourneAustralia/NSWAustralia/NorthAustralia/PerthAustralia/QueenslandAustralia/SouthAustralia/SydneyAustralia/TasmaniaAustralia/VictoriaAustralia/WestAustralia/YancowinnaBrazil/AcreBrazil/DeNoronhaBrazil/EastBrazil/WestCETCST6CDTCanada/AtlanticCanada/CentralCanada/EasternCanada/MountainCanada/NewfoundlandCanada/PacificCanada/SaskatchewanCanada/YukonChile/ContinentalChile/EasterIslandCubaEETESTEST5EDTEgyptEireEtc/GMTEtc/GMT+0Etc/GMT+1Etc/GMT+10Etc/GMT+11Etc/GMT+12Etc/GMT+2Etc/GMT+3Etc/GMT+4Etc/GMT+5Etc/GMT+6Etc/GMT+7Etc/GMT+8Etc/GMT+9Etc/GMT-0Etc/GMT-1Etc/GMT-10Etc/GMT-11Etc/GMT-12Etc/GMT-13Etc/GMT-14Etc/GMT-2Etc/GMT-3Etc/GMT-4Etc/GMT-5Etc/GMT-6Etc/GMT-7Etc/GMT-8Etc/GMT-9Etc/GMT0Etc/GreenwichEtc/UCTEtc/UTCEtc/UniversalEtc/ZuluEurope/AmsterdamEurope/AndorraEurope/AstrakhanEurope/AthensEurope/BelfastEurope/BelgradeEurope/BerlinEurope/BratislavaEurope/BrusselsEurope/BucharestEurope/BudapestEurope/BusingenEurope/ChisinauEurope/CopenhagenEurope/DublinEurope/GibraltarEurope/GuernseyEurope/HelsinkiEurope/Isle_of_ManEurope/IstanbulEurope/JerseyEurope/KaliningradEurope/KievEurope/KirovEurope/KyivEurope/LisbonEurope/LjubljanaEurope/LondonEurope/LuxembourgEurope/MadridEurope/MaltaEurope/MariehamnEurope/MinskEurope/MonacoEurope/MoscowEurope/NicosiaEurope/OsloEurope/ParisEurope/PodgoricaEurope/PragueEurope/RigaEurope/RomeEurope/SamaraEurope/San_MarinoEurope/SarajevoEurope/SaratovEurope/SimferopolEurope/SkopjeEurope/SofiaEurope/StockholmEurope/TallinnEurope/TiraneEurope/TiraspolEurope/UlyanovskEurope/UzhgorodEurope/VaduzEurope/VaticanEurope/ViennaEurope/VilniusEurope/VolgogradEurope/WarsawEurope/ZagrebEurope/ZaporozhyeEurope/ZurichGBGB-EireGMTGMT+0GMT-0GMT0GreenwichHSTHongkongIcelandIndian/AntananarivoIndian/ChagosIndian/ChristmasIndian/CocosIndian/ComoroIndian/KerguelenIndian/MaheIndian/MaldivesIndian/MauritiusIndian/MayotteIndian/ReunionIranIsraelJamaicaJapanKwajaleinLibyaMETMSTMST7MDTMexico/BajaNorteMexico/BajaSurMexico/GeneralNZNZ-CHATNavajoPRCPST8PDTPacific/ApiaPacific/AucklandPacific/BougainvillePacific/ChathamPacific/ChuukPacific/EasterPacific/EfatePacific/EnderburyPacific/FakaofoPacific/FijiPacific/FunafutiPacific/GalapagosPacific/GambierPacific/GuadalcanalPacific/GuamPacific/HonoluluPacific/JohnstonPacific/KantonPacific/KiritimatiPacific/KosraePacific/KwajaleinPacific/MajuroPacific/MarquesasPacific/MidwayPacific/NauruPacific/NiuePacific/NorfolkPacific/NoumeaPacific/Pago_PagoPacific/PalauPacific/PitcairnPacific/PohnpeiPacific/PonapePacific/Port_MoresbyPacific/RarotongaPacific/SaipanPacific/SamoaPacific/TahitiPacific/TarawaPacific/TongatapuPacific/TrukPacific/WakePacific/WallisPacific/YapPolandPortugalROCROKSingaporeTurkeyUCTUS/AlaskaUS/AleutianUS/ArizonaUS/CentralUS/East-IndianaUS/EasternUS/HawaiiUS/Indiana-StarkeUS/MichiganUS/MountainUS/PacificUS/SamoaUTCUniversalW-SUWETZulu") + zerovec::vecs::VarZeroVec16::from_bytes_unchecked(b"V\x02\x0E\0\x1A\0,\0:\0G\0T\0a\0n\0{\0\x88\0\x97\0\xA9\0\xB9\0\xC5\0\xD6\0\xE2\0\xF0\0\xFC\0\x10\x01\x1F\x01,\x01;\x01J\x01Y\x01f\x01y\x01\x84\x01\x92\x01\xA1\x01\xAE\x01\xBD\x01\xC9\x01\xDA\x01\xE5\x01\xF2\x01\x03\x02\x10\x02\x1D\x02*\x027\x02E\x02U\x02d\x02r\x02\x81\x02\x8E\x02\x9F\x02\xB1\x02\xC2\x02\xD1\x02\xE0\x02\xEE\x02\xFA\x02\t\x03\x15\x03&\x036\x03E\x03V\x03t\x03\x8F\x03\xAF\x03\xC8\x03\xDF\x03\xF9\x03\x12\x040\x04G\x04a\x04{\x04\x94\x04\xAD\x04\xBA\x04\xCA\x04\xDA\x04\xE6\x04\xF3\x04\t\x05\x19\x05&\x054\x05H\x05Y\x05g\x05t\x05\x88\x05\x9D\x05\xB1\x05\xBF\x05\xCE\x05\xDF\x05\xEE\x05\xFC\x05\x0B\x06\x1C\x061\x06F\x06U\x06g\x06x\x06\x87\x06\x95\x06\xA4\x06\xB8\x06\xC6\x06\xDA\x06\xE8\x06\xF7\x06\x07\x07\x17\x07'\x07:\x07J\x07]\x07o\x07\x80\x07\x91\x07\xA0\x07\xB1\x07\xC3\x07\xD2\x07\xE4\x07\xF5\x07\x06\x08\x14\x08#\x081\x08C\x08_\x08s\x08\x8A\x08\xA4\x08\xBD\x08\xD2\x08\xEB\x08\x02\t\x16\t$\t3\tB\tO\t]\tx\t\x93\t\xA2\t\xB4\t\xC2\t\xCE\t\xE1\t\xF3\t\x08\n\x16\n%\n3\nB\nT\ne\nu\n\x84\n\x95\n\xA3\n\xB5\n\xC8\n\xD8\n\xE7\n\xF8\n\n\x0B\x1A\x0B,\x0B:\x0BJ\x0BY\x0Be\x0Bt\x0B\x8F\x0B\xAA\x0B\xC8\x0B\xD4\x0B\xE3\x0B\xF1\x0B\x04\x0C\x16\x0C%\x0C;\x0CP\x0Cb\x0Cu\x0C\x88\x0C\x9C\x0C\xAF\x0C\xC3\x0C\xD1\x0C\xDF\x0C\xEF\x0C\x01\r\x10\r$\r4\rD\rY\rj\r~\r\x8E\r\x9B\r\xB0\r\xC0\r\xD0\r\xE0\r\xF1\r\x03\x0E\x18\x0E+\x0E8\x0EK\x0EZ\x0Ei\x0Ex\x0E\x89\x0E\x97\x0E\xA9\x0E\xB9\x0E\xC8\x0E\xDB\x0E\xEB\x0E\xFB\x0E\x14\x0F(\x0F9\x0FK\x0F\\\x0Fn\x0F\x83\x0F\x93\x0F\xA3\x0F\xB4\x0F\xC7\x0F\xD0\x0F\xDB\x0F\xE5\x0F\xF0\x0F\xFA\x0F\x05\x10\x12\x10 \x10+\x107\x10C\x10L\x10X\x10d\x10o\x10{\x10\x86\x10\x93\x10\x9D\x10\xAC\x10\xBA\x10\xC8\x10\xD4\x10\xDE\x10\xEB\x10\xF5\x10\xFE\x10\x08\x11\x15\x11#\x11,\x116\x11A\x11L\x11\\\x11j\x11s\x11\x7F\x11\x8C\x11\x98\x11\xA5\x11\xB3\x11\xBD\x11\xCB\x11\xD7\x11\xE3\x11\xF1\x11\xFE\x11\x0B\x12\x17\x12'\x128\x12D\x12O\x12Y\x12c\x12o\x12|\x12\x87\x12\x92\x12\x9E\x12\xAF\x12\xBF\x12\xC8\x12\xD1\x12\xE0\x12\xEE\x12\xFC\x12\x06\x13\x13\x13!\x13-\x138\x13C\x13P\x13^\x13h\x13u\x13\x83\x13\x95\x13\xA0\x13\xAD\x13\xB9\x13\xC4\x13\xD1\x13\xDC\x13\xE8\x13\xF2\x13\xFC\x13\x0E\x14\x1E\x14-\x148\x14E\x14S\x14c\x14o\x14z\x14\x8C\x14\x98\x14\xA7\x14\xB7\x14\xC6\x14\xD9\x14\xE8\x14\xF6\x14\x08\x15\x18\x15*\x15@\x15R\x15b\x15o\x15\x81\x15\x93\x15\xA8\x15\xBA\x15\xCA\x15\xDA\x15\xE9\x15\xF9\x15\x06\x16\x18\x16+\x16>\x16K\x16Z\x16i\x16}\x16\x8C\x16\x9C\x16\xAE\x16\xC0\x16\xCE\x16\xE2\x16\xED\x16\xFD\x16\x08\x17\x13\x17\x16\x17\x1D\x17,\x17:\x17H\x17W\x17j\x17x\x17\x8B\x17\x97\x17\xA8\x17\xBA\x17\xBE\x17\xC1\x17\xC4\x17\xCB\x17\xD0\x17\xD4\x17\xDB\x17\xE4\x17\xED\x17\xF7\x17\x01\x18\x0B\x18\x14\x18\x1D\x18&\x18/\x188\x18A\x18J\x18S\x18\\\x18e\x18o\x18y\x18\x83\x18\x8D\x18\x97\x18\xA0\x18\xA9\x18\xB2\x18\xBB\x18\xC4\x18\xCD\x18\xD6\x18\xDF\x18\xE7\x18\xF4\x18\xFB\x18\x02\x19\x0F\x19\x17\x19'\x195\x19E\x19R\x19`\x19o\x19|\x19\x8D\x19\x9C\x19\xAC\x19\xBB\x19\xCA\x19\xD9\x19\xEA\x19\xF7\x19\x07\x1A\x16\x1A%\x1A7\x1AF\x1AS\x1Ae\x1Ap\x1A|\x1A\x87\x1A\x94\x1A\xA4\x1A\xB1\x1A\xC2\x1A\xCF\x1A\xDB\x1A\xEB\x1A\xF7\x1A\x04\x1B\x11\x1B\x1F\x1B*\x1B6\x1BF\x1BS\x1B^\x1Bi\x1Bv\x1B\x87\x1B\x96\x1B\xA4\x1B\xB5\x1B\xC2\x1B\xCE\x1B\xDE\x1B\xEC\x1B\xF9\x1B\x08\x1C\x18\x1C'\x1C3\x1CA\x1CN\x1C\\\x1Cl\x1Cy\x1C\x86\x1C\x97\x1C\xA4\x1C\xA6\x1C\xAD\x1C\xB0\x1C\xB5\x1C\xBA\x1C\xBE\x1C\xC7\x1C\xCA\x1C\xD2\x1C\xD9\x1C\xEC\x1C\xF9\x1C\t\x1D\x15\x1D\"\x1D2\x1D=\x1DL\x1D\\\x1Dj\x1Dx\x1D|\x1D\x82\x1D\x89\x1D\x8E\x1D\x97\x1D\x9C\x1D\x9F\x1D\xA2\x1D\xA9\x1D\xB9\x1D\xC7\x1D\xD5\x1D\xD7\x1D\xDE\x1D\xE4\x1D\xE7\x1D\xEE\x1D\xFA\x1D\n\x1E\x1E\x1E-\x1E:\x1EH\x1EU\x1Ef\x1Eu\x1E\x81\x1E\x91\x1E\xA2\x1E\xB1\x1E\xC4\x1E\xD0\x1E\xE0\x1E\xF0\x1E\xFE\x1E\x10\x1F\x1E\x1F/\x1F=\x1FN\x1F\\\x1Fi\x1Fu\x1F\x84\x1F\x92\x1F\xA3\x1F\xB0\x1F\xC0\x1F\xCF\x1F\xDD\x1F\xF1\x1F\x02 \x10 \x1D + 9 J V b p { \x81 \x89 \x8C \x8F \x98 \x9E \xA1 \xAA \xB5 \xBF \xC9 \xD8 \xE2 \xEB \xFC \x07!\x12!\x1C!$!'!0!4!7!Africa/AbidjanAfrica/AccraAfrica/Addis_AbabaAfrica/AlgiersAfrica/AsmaraAfrica/AsmeraAfrica/BamakoAfrica/BanguiAfrica/BanjulAfrica/BissauAfrica/BlantyreAfrica/BrazzavilleAfrica/BujumburaAfrica/CairoAfrica/CasablancaAfrica/CeutaAfrica/ConakryAfrica/DakarAfrica/Dar_es_SalaamAfrica/DjiboutiAfrica/DoualaAfrica/El_AaiunAfrica/FreetownAfrica/GaboroneAfrica/HarareAfrica/JohannesburgAfrica/JubaAfrica/KampalaAfrica/KhartoumAfrica/KigaliAfrica/KinshasaAfrica/LagosAfrica/LibrevilleAfrica/LomeAfrica/LuandaAfrica/LubumbashiAfrica/LusakaAfrica/MalaboAfrica/MaputoAfrica/MaseruAfrica/MbabaneAfrica/MogadishuAfrica/MonroviaAfrica/NairobiAfrica/NdjamenaAfrica/NiameyAfrica/NouakchottAfrica/OuagadougouAfrica/Porto-NovoAfrica/Sao_TomeAfrica/TimbuktuAfrica/TripoliAfrica/TunisAfrica/WindhoekAmerica/AdakAmerica/AnchorageAmerica/AnguillaAmerica/AntiguaAmerica/AraguainaAmerica/Argentina/Buenos_AiresAmerica/Argentina/CatamarcaAmerica/Argentina/ComodRivadaviaAmerica/Argentina/CordobaAmerica/Argentina/JujuyAmerica/Argentina/La_RiojaAmerica/Argentina/MendozaAmerica/Argentina/Rio_GallegosAmerica/Argentina/SaltaAmerica/Argentina/San_JuanAmerica/Argentina/San_LuisAmerica/Argentina/TucumanAmerica/Argentina/UshuaiaAmerica/ArubaAmerica/AsuncionAmerica/AtikokanAmerica/AtkaAmerica/BahiaAmerica/Bahia_BanderasAmerica/BarbadosAmerica/BelemAmerica/BelizeAmerica/Blanc-SablonAmerica/Boa_VistaAmerica/BogotaAmerica/BoiseAmerica/Buenos_AiresAmerica/Cambridge_BayAmerica/Campo_GrandeAmerica/CancunAmerica/CaracasAmerica/CatamarcaAmerica/CayenneAmerica/CaymanAmerica/ChicagoAmerica/ChihuahuaAmerica/Ciudad_JuarezAmerica/Coral_HarbourAmerica/CordobaAmerica/Costa_RicaAmerica/CoyhaiqueAmerica/CrestonAmerica/CuiabaAmerica/CuracaoAmerica/DanmarkshavnAmerica/DawsonAmerica/Dawson_CreekAmerica/DenverAmerica/DetroitAmerica/DominicaAmerica/EdmontonAmerica/EirunepeAmerica/El_SalvadorAmerica/EnsenadaAmerica/Fort_NelsonAmerica/Fort_WayneAmerica/FortalezaAmerica/Glace_BayAmerica/GodthabAmerica/Goose_BayAmerica/Grand_TurkAmerica/GrenadaAmerica/GuadeloupeAmerica/GuatemalaAmerica/GuayaquilAmerica/GuyanaAmerica/HalifaxAmerica/HavanaAmerica/HermosilloAmerica/Indiana/IndianapolisAmerica/Indiana/KnoxAmerica/Indiana/MarengoAmerica/Indiana/PetersburgAmerica/Indiana/Tell_CityAmerica/Indiana/VevayAmerica/Indiana/VincennesAmerica/Indiana/WinamacAmerica/IndianapolisAmerica/InuvikAmerica/IqaluitAmerica/JamaicaAmerica/JujuyAmerica/JuneauAmerica/Kentucky/LouisvilleAmerica/Kentucky/MonticelloAmerica/Knox_INAmerica/KralendijkAmerica/La_PazAmerica/LimaAmerica/Los_AngelesAmerica/LouisvilleAmerica/Lower_PrincesAmerica/MaceioAmerica/ManaguaAmerica/ManausAmerica/MarigotAmerica/MartiniqueAmerica/MatamorosAmerica/MazatlanAmerica/MendozaAmerica/MenomineeAmerica/MeridaAmerica/MetlakatlaAmerica/Mexico_CityAmerica/MiquelonAmerica/MonctonAmerica/MonterreyAmerica/MontevideoAmerica/MontrealAmerica/MontserratAmerica/NassauAmerica/New_YorkAmerica/NipigonAmerica/NomeAmerica/NoronhaAmerica/North_Dakota/BeulahAmerica/North_Dakota/CenterAmerica/North_Dakota/New_SalemAmerica/NuukAmerica/OjinagaAmerica/PanamaAmerica/PangnirtungAmerica/ParamariboAmerica/PhoenixAmerica/Port-au-PrinceAmerica/Port_of_SpainAmerica/Porto_AcreAmerica/Porto_VelhoAmerica/Puerto_RicoAmerica/Punta_ArenasAmerica/Rainy_RiverAmerica/Rankin_InletAmerica/RecifeAmerica/ReginaAmerica/ResoluteAmerica/Rio_BrancoAmerica/RosarioAmerica/Santa_IsabelAmerica/SantaremAmerica/SantiagoAmerica/Santo_DomingoAmerica/Sao_PauloAmerica/ScoresbysundAmerica/ShiprockAmerica/SitkaAmerica/St_BarthelemyAmerica/St_JohnsAmerica/St_KittsAmerica/St_LuciaAmerica/St_ThomasAmerica/St_VincentAmerica/Swift_CurrentAmerica/TegucigalpaAmerica/ThuleAmerica/Thunder_BayAmerica/TijuanaAmerica/TorontoAmerica/TortolaAmerica/VancouverAmerica/VirginAmerica/WhitehorseAmerica/WinnipegAmerica/YakutatAmerica/YellowknifeAntarctica/CaseyAntarctica/DavisAntarctica/DumontDUrvilleAntarctica/MacquarieAntarctica/MawsonAntarctica/McMurdoAntarctica/PalmerAntarctica/RotheraAntarctica/South_PoleAntarctica/SyowaAntarctica/TrollAntarctica/VostokArctic/LongyearbyenAsia/AdenAsia/AlmatyAsia/AmmanAsia/AnadyrAsia/AqtauAsia/AqtobeAsia/AshgabatAsia/AshkhabadAsia/AtyrauAsia/BaghdadAsia/BahrainAsia/BakuAsia/BangkokAsia/BarnaulAsia/BeirutAsia/BishkekAsia/BruneiAsia/CalcuttaAsia/ChitaAsia/ChoibalsanAsia/ChongqingAsia/ChungkingAsia/ColomboAsia/DaccaAsia/DamascusAsia/DhakaAsia/DiliAsia/DubaiAsia/DushanbeAsia/FamagustaAsia/GazaAsia/HanoiAsia/HarbinAsia/HebronAsia/Ho_Chi_MinhAsia/Hong_KongAsia/HovdAsia/IrkutskAsia/IstanbulAsia/JakartaAsia/JayapuraAsia/JerusalemAsia/KabulAsia/KamchatkaAsia/KarachiAsia/KashgarAsia/KathmanduAsia/KatmanduAsia/KhandygaAsia/KolkataAsia/KrasnoyarskAsia/Kuala_LumpurAsia/KuchingAsia/KuwaitAsia/MacaoAsia/MacauAsia/MagadanAsia/MakassarAsia/ManilaAsia/MuscatAsia/NicosiaAsia/NovokuznetskAsia/NovosibirskAsia/OmskAsia/OralAsia/Phnom_PenhAsia/PontianakAsia/PyongyangAsia/QatarAsia/QostanayAsia/QyzylordaAsia/RangoonAsia/RiyadhAsia/SaigonAsia/SakhalinAsia/SamarkandAsia/SeoulAsia/ShanghaiAsia/SingaporeAsia/SrednekolymskAsia/TaipeiAsia/TashkentAsia/TbilisiAsia/TehranAsia/Tel_AvivAsia/ThimbuAsia/ThimphuAsia/TokyoAsia/TomskAsia/Ujung_PandangAsia/UlaanbaatarAsia/Ulan_BatorAsia/UrumqiAsia/Ust-NeraAsia/VientianeAsia/VladivostokAsia/YakutskAsia/YangonAsia/YekaterinburgAsia/YerevanAtlantic/AzoresAtlantic/BermudaAtlantic/CanaryAtlantic/Cape_VerdeAtlantic/FaeroeAtlantic/FaroeAtlantic/Jan_MayenAtlantic/MadeiraAtlantic/ReykjavikAtlantic/South_GeorgiaAtlantic/St_HelenaAtlantic/StanleyAustralia/ACTAustralia/AdelaideAustralia/BrisbaneAustralia/Broken_HillAustralia/CanberraAustralia/CurrieAustralia/DarwinAustralia/EuclaAustralia/HobartAustralia/LHIAustralia/LindemanAustralia/Lord_HoweAustralia/MelbourneAustralia/NSWAustralia/NorthAustralia/PerthAustralia/QueenslandAustralia/SouthAustralia/SydneyAustralia/TasmaniaAustralia/VictoriaAustralia/WestAustralia/YancowinnaBrazil/AcreBrazil/DeNoronhaBrazil/EastBrazil/WestCETCST6CDTCanada/AtlanticCanada/CentralCanada/EasternCanada/MountainCanada/NewfoundlandCanada/PacificCanada/SaskatchewanCanada/YukonChile/ContinentalChile/EasterIslandCubaEETESTEST5EDTEgyptEireEtc/GMTEtc/GMT+0Etc/GMT+1Etc/GMT+10Etc/GMT+11Etc/GMT+12Etc/GMT+2Etc/GMT+3Etc/GMT+4Etc/GMT+5Etc/GMT+6Etc/GMT+7Etc/GMT+8Etc/GMT+9Etc/GMT-0Etc/GMT-1Etc/GMT-10Etc/GMT-11Etc/GMT-12Etc/GMT-13Etc/GMT-14Etc/GMT-2Etc/GMT-3Etc/GMT-4Etc/GMT-5Etc/GMT-6Etc/GMT-7Etc/GMT-8Etc/GMT-9Etc/GMT0Etc/GreenwichEtc/UCTEtc/UTCEtc/UniversalEtc/ZuluEurope/AmsterdamEurope/AndorraEurope/AstrakhanEurope/AthensEurope/BelfastEurope/BelgradeEurope/BerlinEurope/BratislavaEurope/BrusselsEurope/BucharestEurope/BudapestEurope/BusingenEurope/ChisinauEurope/CopenhagenEurope/DublinEurope/GibraltarEurope/GuernseyEurope/HelsinkiEurope/Isle_of_ManEurope/IstanbulEurope/JerseyEurope/KaliningradEurope/KievEurope/KirovEurope/KyivEurope/LisbonEurope/LjubljanaEurope/LondonEurope/LuxembourgEurope/MadridEurope/MaltaEurope/MariehamnEurope/MinskEurope/MonacoEurope/MoscowEurope/NicosiaEurope/OsloEurope/ParisEurope/PodgoricaEurope/PragueEurope/RigaEurope/RomeEurope/SamaraEurope/San_MarinoEurope/SarajevoEurope/SaratovEurope/SimferopolEurope/SkopjeEurope/SofiaEurope/StockholmEurope/TallinnEurope/TiraneEurope/TiraspolEurope/UlyanovskEurope/UzhgorodEurope/VaduzEurope/VaticanEurope/ViennaEurope/VilniusEurope/VolgogradEurope/WarsawEurope/ZagrebEurope/ZaporozhyeEurope/ZurichGBGB-EireGMTGMT+0GMT-0GMT0GreenwichHSTHongkongIcelandIndian/AntananarivoIndian/ChagosIndian/ChristmasIndian/CocosIndian/ComoroIndian/KerguelenIndian/MaheIndian/MaldivesIndian/MauritiusIndian/MayotteIndian/ReunionIranIsraelJamaicaJapanKwajaleinLibyaMETMSTMST7MDTMexico/BajaNorteMexico/BajaSurMexico/GeneralNZNZ-CHATNavajoPRCPST8PDTPacific/ApiaPacific/AucklandPacific/BougainvillePacific/ChathamPacific/ChuukPacific/EasterPacific/EfatePacific/EnderburyPacific/FakaofoPacific/FijiPacific/FunafutiPacific/GalapagosPacific/GambierPacific/GuadalcanalPacific/GuamPacific/HonoluluPacific/JohnstonPacific/KantonPacific/KiritimatiPacific/KosraePacific/KwajaleinPacific/MajuroPacific/MarquesasPacific/MidwayPacific/NauruPacific/NiuePacific/NorfolkPacific/NoumeaPacific/Pago_PagoPacific/PalauPacific/PitcairnPacific/PohnpeiPacific/PonapePacific/Port_MoresbyPacific/RarotongaPacific/SaipanPacific/SamoaPacific/TahitiPacific/TarawaPacific/TongatapuPacific/TrukPacific/WakePacific/WallisPacific/YapPolandPortugalROCROKSingaporeTurkeyUCTUS/AlaskaUS/AleutianUS/ArizonaUS/CentralUS/East-IndianaUS/EasternUS/HawaiiUS/Indiana-StarkeUS/MichiganUS/MountainUS/PacificUS/SamoaUTCUniversalW-SUWETZulu") }, }; }; } diff --git a/provider/src/tzdb.rs b/provider/src/tzdb.rs index c63c47d12..96556b5d9 100644 --- a/provider/src/tzdb.rs +++ b/provider/src/tzdb.rs @@ -19,6 +19,9 @@ use zerovec::{VarZeroVec, ZeroVec}; #[cfg(feature = "datagen")] pub(crate) mod datagen; +#[cfg(test)] +mod cldr_test; + /// A data struct for IANA identifier normalization #[derive(PartialEq, Debug, Clone)] #[cfg_attr( diff --git a/provider/src/tzdb/cldr-timezone.xml b/provider/src/tzdb/cldr-timezone.xml new file mode 100644 index 000000000..6990632e1 --- /dev/null +++ b/provider/src/tzdb/cldr-timezone.xml @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/provider/src/tzdb/cldr_test.rs b/provider/src/tzdb/cldr_test.rs new file mode 100644 index 000000000..8d7e52a6e --- /dev/null +++ b/provider/src/tzdb/cldr_test.rs @@ -0,0 +1,74 @@ +use super::CompiledNormalizer; +use crate::provider::TimeZoneNormalizer; +use alloc::string::String; +use alloc::vec::Vec; +use serde::{self, Deserialize}; + +const CLDR_TIMEZONES: &str = include_str!("cldr-timezone.xml"); + +#[derive(Deserialize, Debug)] +struct Document { + keyword: Keyword, +} + +#[derive(Deserialize, Debug)] +struct Keyword { + key: Key, +} + +#[derive(Deserialize, Debug)] +struct Key { + #[serde(rename = "type")] + tzs: Vec, +} + +#[derive(Deserialize, Debug)] +struct TimeZone { + #[serde(rename = "@alias")] + aliases: Option, + #[serde(rename = "@iana")] + iana: Option, +} + +/// This tests against CLDR's timezones.xml +/// which is known to be closer to the spec for +/// +#[test] +fn test_cldr_timezones() { + let doc: Document = serde_xml_rs::from_str(CLDR_TIMEZONES).unwrap(); + + for tz in doc.keyword.key.tzs { + if let Some(aliases) = tz.aliases { + let aliases: Vec<_> = aliases.split(" ").collect(); + + // The primary string is either the first timezone, or the `iana` field if present + let primary_str = if let Some(iana) = tz.iana.as_ref() { + iana + } else { + aliases[0] + }; + if primary_str.starts_with("Etc") { + // These are handled elsewhere + continue; + } + let primary = CompiledNormalizer + .normalized(primary_str.as_bytes()) + .expect(primary_str); + + // We want to ensure they all canonicalize + for alias in aliases { + if alias == "Canada/East-Saskatchewan" || alias == "US/Pacific-New" { + // These are present in CLDR but not tzdb. Special case as known exceptions. + continue; + } + let normalized = CompiledNormalizer.normalized(alias.as_bytes()).unwrap(); + let canonicalized = CompiledNormalizer.canonicalized(normalized).unwrap(); + + assert_eq!( + canonicalized, primary, + "{alias} should canonicalize to the same thing as {primary_str}" + ); + } + } + } +} diff --git a/provider/src/tzdb/datagen.rs b/provider/src/tzdb/datagen.rs index 1b974d959..75f1750e5 100644 --- a/provider/src/tzdb/datagen.rs +++ b/provider/src/tzdb/datagen.rs @@ -32,6 +32,25 @@ pub struct TzdbDataSource { pub data: ZoneInfoData, } +/// +/// +/// This spec text wants us to ensure that all zones fully contained +/// in a region must canonicalize to an entry that is under zone.tab for +/// that region. +/// +/// These timezones are mentioned in the packrat entries, HOWEVER the packrat +/// entries map to tzdb's canonical timezones, which doesn't include the fact that +/// we treat all zone.tab entries as canonical. There's no easy way to recover this +/// information. Instead, since there are only three of them, we assert that we have the +/// same three, and hardcode overrides. +/// +/// The hardcoded values are taken from +const PACKRAT_OVERRIDES: &[(&str, &str)] = &[ + ("Atlantic/Jan_Mayen", "Arctic/Longyearbyen"), + ("America/Coral_Harbour", "America/Atikokan"), + ("Africa/Timbuktu", "Africa/Bamako"), +]; + impl TzdbDataSource { /// Try to create a tzdb source from a tzdata directory. pub fn try_from_zoneinfo_directory(tzdata_path: &Path) -> Result { @@ -67,15 +86,24 @@ pub enum IanaDataError { #[allow(clippy::expect_used, clippy::unwrap_used, reason = "Datagen only")] impl IanaIdentifierNormalizer<'_> { pub fn build(tzdata_path: &Path) -> Result { - let provider = TzdbDataSource::try_from_zoneinfo_directory(tzdata_path) + let mut provider = TzdbDataSource::try_from_zoneinfo_directory(tzdata_path) .map_err(IanaDataError::Provider)?; - let zonetab_tzs: BTreeSet<_> = provider - .data - .zone_tab - .iter() - .map(|zt| zt.tz.clone()) - .collect(); + // This data includes things like Truk/Chuuk which Temporal requires in its tests + // It also includes the packrat data + let backzone = ZoneInfoData::from_filepath(tzdata_path.join("backzone")).unwrap(); + provider.data.extend(backzone); + + let packrat_overrides: BTreeMap<_, _> = PACKRAT_OVERRIDES.iter().copied().collect(); + + for pack in provider.data.pack_rat { + assert!( + packrat_overrides.contains_key(&*pack.0), + "Found missing packrat entry {}", + pack.0 + ); + } + let mut all_identifiers = BTreeSet::default(); for zone_id in provider.data.zones.keys() { // Add canonical identifiers. @@ -107,24 +135,40 @@ impl IanaIdentifierNormalizer<'_> { to_primary_id_map.insert(norm_vec.binary_search(&"Etc/UTC").unwrap(), utc_index); to_primary_id_map.insert(norm_vec.binary_search(&"Etc/GMT").unwrap(), utc_index); - for (link_from, link_to) in &provider.data.links { - if zonetab_tzs.contains(link_from) { - // https://tc39.es/ecma402/#sec-use-of-iana-time-zone-database - // > Any Link name that is present in the “TZ” column of file zone.tab - // > must be a primary time zone identifier. - // - // So we ignore links entries that link from these timezones - // which results in those timezones considered as primary. - continue; + let mut all_links: BTreeMap<&str, &str> = provider + .data + .links + .iter() + .map(|x| (&**x.0, &**x.1)) + .collect(); + + // https://tc39.es/ecma402/#sec-use-of-iana-time-zone-database + // > Any Link name that is present in the “TZ” column of file zone.tab + // > must be a primary time zone identifier. + // + // So we ignore links entries that link from these timezones + // which results in those timezones considered as primary. + for tz in provider.data.zone_tab { + all_links.remove(&*tz.tz); + } + + // UTC should not map to anything + all_links.remove("UTC"); + + for (link_from, mut link_to) in &all_links { + // Sometimes links have multiple steps. This happens for Chungking => Chongqing => Shanghai + while let Some(new_link_to) = all_links.get(link_to) { + link_to = new_link_to; } - if link_from == "UTC" { - continue; + if let Some(overrided) = packrat_overrides.get(link_from) { + // See comment on PACKRAT_OVERRIDES + link_to = overrided; } - let link_from = norm_vec.binary_search(&&**link_from).unwrap(); - let index = if link_to == "Etc/UTC" || link_to == "Etc/GMT" { + let link_from = norm_vec.binary_search(link_from).unwrap(); + let index = if *link_to == "Etc/UTC" || *link_to == "Etc/GMT" { utc_index } else { - norm_vec.binary_search(&&**link_to).unwrap() + norm_vec.binary_search(link_to).unwrap() }; to_primary_id_map.insert(link_from, index); } diff --git a/tools/bakeddata/src/main.rs b/tools/bakeddata/src/main.rs index eb9895809..4219aaee9 100644 --- a/tools/bakeddata/src/main.rs +++ b/tools/bakeddata/src/main.rs @@ -2,6 +2,7 @@ use databake::{quote, Bake}; use rustc_hash::FxHasher; use std::{ collections::{BTreeMap, BTreeSet, HashMap}, + fmt::Write as _, fs::{self, File}, hash::{Hash, Hasher}, io::{self, BufWriter, Write}, @@ -124,7 +125,20 @@ impl BakedDataProvider for IanaIdentifierNormalizer<'_> { fs::create_dir_all(debug_path)?; let debug_filename = debug_path.join("iana_normalizer.json"); let json = serde_json::to_string_pretty(self).unwrap(); - fs::write(debug_filename, json) + fs::write(debug_filename, json)?; + + let mut human_readable = String::new(); + writeln!(human_readable, "Normalized\n=========").unwrap(); + for ident in self.normalized_identifiers.iter() { + writeln!(human_readable, "{}", ident).unwrap(); + } + writeln!(human_readable, "\nNon canonical identifiers\n=========").unwrap(); + for (from, to) in self.non_canonical_identifiers.iter() { + let from = &self.normalized_identifiers[from as usize]; + let to = &self.normalized_identifiers[to as usize]; + writeln!(human_readable, "{from} => {to}").unwrap(); + } + fs::write(debug_path.join("iana_normalizer.txt"), human_readable) } } diff --git a/zoneinfo/src/lib.rs b/zoneinfo/src/lib.rs index 59934f304..5c62361ad 100644 --- a/zoneinfo/src/lib.rs +++ b/zoneinfo/src/lib.rs @@ -67,7 +67,7 @@ use rule::Rules; use zone::ZoneRecord; /// Well-known zone info file -pub const ZONEINFO_FILES: [&str; 9] = [ +pub const ZONEINFO_FILES: &[&str] = &[ "africa", "antarctica", "asia",