1 // Copyright (C) 2013 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 // AUTOMATICALLY GENERATED FILE - DO NOT EDIT
16 
17 #include "region_data_constants.h"
18 
19 #include <libaddressinput/address_field.h>
20 
21 #include <algorithm>
22 #include <cassert>
23 #include <cstddef>
24 #include <map>
25 #include <string>
26 #include <vector>
27 
28 #include "address_field_util.h"
29 #include "format_element.h"
30 #include "lookup_key.h"
31 #include "util/size.h"
32 
33 namespace i18n {
34 namespace addressinput {
35 namespace {
36 
37 struct RegionData {
38   const char* const region_code;
39   const char* const data;
40 };
41 
42 const RegionData kRegionData[] = {
43   {"AC", "{"
44       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
45       u8R"("zipex":"ASCN 1ZZ",)"
46       u8R"("languages":"en")"
47       "}"},
48   {"AD", "{"
49       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
50       u8R"("zipex":"AD100,AD501,AD700",)"
51       u8R"("posturl":"http://www.correos.es/comun/CodigosPostales/1010_s-CodPostal.asp?Provincia=",)"
52       u8R"("languages":"ca")"
53       "}"},
54   {"AE", "{"
55       u8R"("fmt":"%N%n%O%n%A%n%S",)"
56       u8R"("lfmt":"%N%n%O%n%A%n%S",)"
57       u8R"("require":"AS",)"
58       u8R"("state_name_type":"emirate",)"
59       u8R"("languages":"ar")"
60       "}"},
61   {"AF", "{"
62       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
63       u8R"("zipex":"1001,2601,3801",)"
64       u8R"("languages":"fa~ps~uz-Arab~tk~bal")"
65       "}"},
66   {"AG", "{"
67       u8R"("require":"A",)"
68       u8R"("languages":"en")"
69       "}"},
70   {"AI", "{"
71       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
72       u8R"("zipex":"2640",)"
73       u8R"("languages":"en")"
74       "}"},
75   {"AL", "{"
76       u8R"("fmt":"%N%n%O%n%A%n%Z%n%C",)"
77       u8R"("zipex":"1001,1017,3501",)"
78       u8R"("languages":"sq")"
79       "}"},
80   {"AM", "{"
81       u8R"("fmt":"%N%n%O%n%A%n%Z%n%C%n%S",)"
82       u8R"("lfmt":"%N%n%O%n%A%n%Z%n%C%n%S",)"
83       u8R"("zipex":"375010,0002,0010",)"
84       u8R"("languages":"hy")"
85       "}"},
86   {"AO", "{"
87       u8R"("languages":"pt")"
88       "}"},
89   {"AQ", "{"
90       "}"},
91   {"AR", "{"
92       u8R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)"
93       u8R"("zipex":"C1070AAM,C1000WAM,B1000TBU,X5187XAB",)"
94       u8R"("posturl":"http://www.correoargentino.com.ar/formularios/cpa",)"
95       u8R"("languages":"es")"
96       "}"},
97   {"AS", "{"
98       u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
99       u8R"("require":"ACSZ",)"
100       u8R"("zip_name_type":"zip",)"
101       u8R"("state_name_type":"state",)"
102       u8R"("zipex":"96799",)"
103       u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
104       u8R"("languages":"sm~en")"
105       "}"},
106   {"AT", "{"
107       u8R"("fmt":"%O%n%N%n%A%n%Z %C",)"
108       u8R"("require":"ACZ",)"
109       u8R"("zipex":"1010,3741",)"
110       u8R"("posturl":"http://www.post.at/post_subsite_postleitzahlfinder.php",)"
111       u8R"("languages":"de~hr~sl~hu")"
112       "}"},
113   {"AU", "{"
114       u8R"("fmt":"%O%n%N%n%A%n%C %S %Z",)"
115       u8R"("require":"ACSZ",)"
116       u8R"("state_name_type":"state",)"
117       u8R"("locality_name_type":"suburb",)"
118       u8R"("zipex":"2060,3171,6430,4000,4006,3001",)"
119       u8R"("posturl":"http://www1.auspost.com.au/postcodes/",)"
120       u8R"("languages":"en")"
121       "}"},
122   {"AW", "{"
123       u8R"("languages":"nl~pap")"
124       "}"},
125   {"AX", "{"
126       u8R"("fmt":"%O%n%N%n%A%nAX-%Z %C%nÅLAND",)"
127       u8R"("require":"ACZ",)"
128       u8R"("zipex":"22150,22550,22240,22710,22270,22730,22430",)"
129       u8R"("posturl":"https://www.alandpost.ax/privat/skicka-brev/postnummer-pa-aland/postnummersokning",)"
130       u8R"("languages":"sv")"
131       "}"},
132   {"AZ", "{"
133       u8R"("fmt":"%N%n%O%n%A%nAZ %Z %C",)"
134       u8R"("zipex":"1000",)"
135       u8R"("languages":"az~az-Cyrl")"
136       "}"},
137   {"BA", "{"
138       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
139       u8R"("zipex":"71000",)"
140       u8R"("languages":"bs~bs-Cyrl~hr~sr~sr-Latn")"
141       "}"},
142   {"BB", "{"
143       u8R"("fmt":"%N%n%O%n%A%n%C, %S %Z",)"
144       u8R"("state_name_type":"parish",)"
145       u8R"("zipex":"BB23026,BB22025",)"
146       u8R"("languages":"en")"
147       "}"},
148   {"BD", "{"
149       u8R"("fmt":"%N%n%O%n%A%n%C - %Z",)"
150       u8R"("zipex":"1340,1000",)"
151       u8R"("posturl":"http://www.bangladeshpost.gov.bd/PostCode.asp",)"
152       u8R"("languages":"bn")"
153       "}"},
154   {"BE", "{"
155       u8R"("fmt":"%O%n%N%n%A%n%Z %C",)"
156       u8R"("require":"ACZ",)"
157       u8R"("zipex":"4000,1000",)"
158       u8R"("posturl":"http://www.post.be/site/nl/residential/customerservice/search/postal_codes.html",)"
159       u8R"("languages":"nl~fr~de")"
160       "}"},
161   {"BF", "{"
162       u8R"("fmt":"%N%n%O%n%A%n%C %X",)"
163       u8R"("languages":"fr")"
164       "}"},
165   {"BG", "{"
166       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
167       u8R"("zipex":"1000,1700",)"
168       u8R"("posturl":"http://www.bgpost.bg/?cid=5",)"
169       u8R"("languages":"bg")"
170       "}"},
171   {"BH", "{"
172       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
173       u8R"("zipex":"317",)"
174       u8R"("languages":"ar")"
175       "}"},
176   {"BI", "{"
177       u8R"("languages":"rn~fr~en")"
178       "}"},
179   {"BJ", "{"
180       u8R"("languages":"fr")"
181       "}"},
182   {"BL", "{"
183       u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
184       u8R"("require":"ACZ",)"
185       u8R"("zipex":"97100",)"
186       u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
187       u8R"("languages":"fr")"
188       "}"},
189   {"BM", "{"
190       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
191       u8R"("zipex":"FL 07,HM GX,HM 12",)"
192       u8R"("posturl":"http://www.landvaluation.bm/",)"
193       u8R"("languages":"en")"
194       "}"},
195   {"BN", "{"
196       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
197       u8R"("zipex":"BT2328,KA1131,BA1511",)"
198       u8R"("posturl":"http://www.post.gov.bn/SitePages/postcodes.aspx",)"
199       u8R"("languages":"ms~ms-Arab")"
200       "}"},
201   {"BO", "{"
202       u8R"("languages":"es~qu~ay")"
203       "}"},
204   {"BQ", "{"
205       u8R"("languages":"nl")"
206       "}"},
207   {"BR", "{"
208       u8R"("fmt":"%O%n%N%n%A%n%D%n%C-%S%n%Z",)"
209       u8R"("require":"ASCZ",)"
210       u8R"("state_name_type":"state",)"
211       u8R"("sublocality_name_type":"neighborhood",)"
212       u8R"("zipex":"40301-110,70002-900",)"
213       u8R"("posturl":"http://www.buscacep.correios.com.br/",)"
214       u8R"("languages":"pt")"
215       "}"},
216   {"BS", "{"
217       u8R"("fmt":"%N%n%O%n%A%n%C, %S",)"
218       u8R"("state_name_type":"island",)"
219       u8R"("languages":"en")"
220       "}"},
221   {"BT", "{"
222       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
223       u8R"("zipex":"11001,31101,35003",)"
224       u8R"("posturl":"http://www.bhutanpost.bt/postcodes/",)"
225       u8R"("languages":"dz")"
226       "}"},
227   {"BV", "{"
228       "}"},
229   {"BW", "{"
230       u8R"("languages":"en~tn")"
231       "}"},
232   {"BY", "{"
233       u8R"("fmt":"%S%n%Z %C%n%A%n%O%n%N",)"
234       u8R"("zipex":"223016,225860,220050",)"
235       u8R"("posturl":"http://ex.belpost.by/addressbook/",)"
236       u8R"("languages":"be~ru")"
237       "}"},
238   {"BZ", "{"
239       u8R"("languages":"en")"
240       "}"},
241   {"CA", "{"
242       u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
243       u8R"("require":"ACSZ",)"
244       u8R"("zipex":"H3Z 2Y7,V8X 3X4,T0L 1K0,T0H 1A0,K1A 0B1",)"
245       u8R"("posturl":"https://www.canadapost.ca/cpo/mc/personal/postalcode/fpc.jsf",)"
246       u8R"("languages":"en~fr")"
247       "}"},
248   {"CC", "{"
249       u8R"("fmt":"%O%n%N%n%A%n%C %S %Z",)"
250       u8R"("zipex":"6799",)"
251       u8R"("languages":"en")"
252       "}"},
253   {"CD", "{"
254       u8R"("languages":"sw~lua~fr~ln~kg")"
255       "}"},
256   {"CF", "{"
257       u8R"("languages":"fr~sg")"
258       "}"},
259   {"CG", "{"
260       u8R"("languages":"fr")"
261       "}"},
262   {"CH", "{"
263       u8R"("fmt":"%O%n%N%n%A%nCH-%Z %C",)"
264       u8R"("require":"ACZ",)"
265       u8R"("zipex":"2544,1211,1556,3030",)"
266       u8R"("posturl":"http://www.post.ch/db/owa/pv_plz_pack/pr_main",)"
267       u8R"("languages":"de~gsw~fr~it~rm")"
268       "}"},
269   {"CI", "{"
270       u8R"("fmt":"%N%n%O%n%X %A %C %X",)"
271       u8R"("languages":"fr")"
272       "}"},
273   {"CK", "{"
274       u8R"("languages":"en")"
275       "}"},
276   {"CL", "{"
277       u8R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)"
278       u8R"("zipex":"8340457,8720019,1230000,8329100",)"
279       u8R"("posturl":"http://www.correos.cl/SitePages/home.aspx",)"
280       u8R"("languages":"es")"
281       "}"},
282   {"CM", "{"
283       u8R"("languages":"fr~en")"
284       "}"},
285   {"CN", "{"
286       u8R"("fmt":"%Z%n%S%C%D%n%A%n%O%n%N",)"
287       u8R"("lfmt":"%N%n%O%n%A%n%D%n%C%n%S, %Z",)"
288       u8R"("require":"ACSZ",)"
289       u8R"("sublocality_name_type":"district",)"
290       u8R"("zipex":"266033,317204,100096,100808",)"
291       u8R"("posturl":"http://www.ems.com.cn/serviceguide/you_bian_cha_xun.html",)"
292       u8R"("languages":"zh")"
293       "}"},
294   {"CO", "{"
295       u8R"("fmt":"%N%n%O%n%A%n%C, %S, %Z",)"
296       u8R"("require":"AS",)"
297       u8R"("state_name_type":"department",)"
298       u8R"("zipex":"111221,130001,760011",)"
299       u8R"("posturl":"http://www.codigopostal.gov.co/",)"
300       u8R"("languages":"es")"
301       "}"},
302   {"CR", "{"
303       u8R"("fmt":"%N%n%O%n%A%n%S, %C%n%Z",)"
304       u8R"("require":"ACS",)"
305       u8R"("zipex":"1000,2010,1001",)"
306       u8R"("posturl":"https://www.correos.go.cr/nosotros/codigopostal/busqueda.html",)"
307       u8R"("languages":"es")"
308       "}"},
309   {"CU", "{"
310       u8R"("fmt":"%N%n%O%n%A%n%C %S%n%Z",)"
311       u8R"("zipex":"10700",)"
312       u8R"("languages":"es")"
313       "}"},
314   {"CV", "{"
315       u8R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)"
316       u8R"("state_name_type":"island",)"
317       u8R"("zipex":"7600",)"
318       u8R"("languages":"pt")"
319       "}"},
320   {"CW", "{"
321       u8R"("languages":"pap~nl")"
322       "}"},
323   {"CX", "{"
324       u8R"("fmt":"%O%n%N%n%A%n%C %S %Z",)"
325       u8R"("zipex":"6798",)"
326       u8R"("languages":"en")"
327       "}"},
328   {"CY", "{"
329       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
330       u8R"("zipex":"2008,3304,1900",)"
331       u8R"("languages":"el~tr")"
332       "}"},
333   {"CZ", "{"
334       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
335       u8R"("require":"ACZ",)"
336       u8R"("zipex":"100 00,251 66,530 87,110 00,225 99",)"
337       u8R"("posturl":"http://psc.ceskaposta.cz/CleanForm.action",)"
338       u8R"("languages":"cs")"
339       "}"},
340   {"DE", "{"
341       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
342       u8R"("require":"ACZ",)"
343       u8R"("zipex":"26133,53225",)"
344       u8R"("posturl":"http://www.postdirekt.de/plzserver/",)"
345       u8R"("languages":"de")"
346       "}"},
347   {"DJ", "{"
348       u8R"("languages":"ar~fr")"
349       "}"},
350   {"DK", "{"
351       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
352       u8R"("require":"ACZ",)"
353       u8R"("zipex":"8660,1566",)"
354       u8R"("posturl":"http://www.postdanmark.dk/da/Privat/Kundeservice/postnummerkort/Sider/Find-postnummer.aspx",)"
355       u8R"("languages":"da~de~kl")"
356       "}"},
357   {"DM", "{"
358       u8R"("languages":"en")"
359       "}"},
360   {"DO", "{"
361       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
362       u8R"("zipex":"11903,10101",)"
363       u8R"("posturl":"http://inposdom.gob.do/codigo-postal/",)"
364       u8R"("languages":"es")"
365       "}"},
366   {"DZ", "{"
367       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
368       u8R"("zipex":"40304,16027",)"
369       u8R"("languages":"ar~fr")"
370       "}"},
371   {"EC", "{"
372       u8R"("fmt":"%N%n%O%n%A%n%Z%n%C",)"
373       u8R"("zipex":"090105,092301",)"
374       u8R"("posturl":"http://www.codigopostal.gob.ec/",)"
375       u8R"("languages":"es~qu")"
376       "}"},
377   {"EE", "{"
378       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
379       u8R"("require":"ACZ",)"
380       u8R"("zipex":"69501,11212",)"
381       u8R"("posturl":"https://www.omniva.ee/era/sihtnumbrite_otsing",)"
382       u8R"("languages":"et")"
383       "}"},
384   {"EG", "{"
385       u8R"("fmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
386       u8R"("lfmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
387       u8R"("zipex":"12411,11599",)"
388       u8R"("languages":"ar")"
389       "}"},
390   {"EH", "{"
391       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
392       u8R"("zipex":"70000,72000",)"
393       u8R"("languages":"ar")"
394       "}"},
395   {"ER", "{"
396       u8R"("languages":"ti~en~ar")"
397       "}"},
398   {"ES", "{"
399       u8R"("fmt":"%N%n%O%n%A%n%Z %C %S",)"
400       u8R"("require":"ACSZ",)"
401       u8R"("zipex":"28039,28300,28070",)"
402       u8R"("posturl":"http://www.correos.es/contenido/13-MenuRec2/04-MenuRec24/1010_s-CodPostal.asp",)"
403       u8R"("languages":"es~ca~gl~eu")"
404       "}"},
405   {"ET", "{"
406       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
407       u8R"("zipex":"1000",)"
408       u8R"("languages":"am")"
409       "}"},
410   {"FI", "{"
411       u8R"("fmt":"%O%n%N%n%A%nFI-%Z %C",)"
412       u8R"("require":"ACZ",)"
413       u8R"("zipex":"00550,00011",)"
414       u8R"("posturl":"https://support.posti.fi/fi/tyokalut/postinumerohaku.html",)"
415       u8R"("languages":"fi~sv")"
416       "}"},
417   {"FJ", "{"
418       u8R"("languages":"en~hif~fj")"
419       "}"},
420   {"FK", "{"
421       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
422       u8R"("require":"ACZ",)"
423       u8R"("zipex":"FIQQ 1ZZ",)"
424       u8R"("languages":"en")"
425       "}"},
426   {"FM", "{"
427       u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
428       u8R"("require":"ACSZ",)"
429       u8R"("zip_name_type":"zip",)"
430       u8R"("state_name_type":"state",)"
431       u8R"("zipex":"96941,96944",)"
432       u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
433       u8R"("languages":"en")"
434       "}"},
435   {"FO", "{"
436       u8R"("fmt":"%N%n%O%n%A%nFO%Z %C",)"
437       u8R"("zipex":"100",)"
438       u8R"("posturl":"http://www.postur.fo/",)"
439       u8R"("languages":"fo")"
440       "}"},
441   {"FR", "{"
442       u8R"("fmt":"%O%n%N%n%A%n%Z %C",)"
443       u8R"("require":"ACZ",)"
444       u8R"("zipex":"33380,34092,33506",)"
445       u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
446       u8R"("languages":"fr")"
447       "}"},
448   {"GA", "{"
449       u8R"("languages":"fr")"
450       "}"},
451   {"GB", "{"
452       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
453       u8R"("require":"ACZ",)"
454       u8R"("locality_name_type":"post_town",)"
455       u8R"("zipex":"EC1Y 8SY,GIR 0AA,M2 5BQ,M34 4AB,CR0 2YR,DN16 9AA,W1A 4ZZ,EC1A 1HQ,OX14 4PG,BS18 8HF,NR25 7HG,RH6 0NP,BH23 6AA,B6 5BA,SO23 9AP,PO1 3AX,BFPO 61",)"
456       u8R"("posturl":"http://www.royalmail.com/postcode-finder",)"
457       u8R"("languages":"en~cy~gd~ga")"
458       "}"},
459   {"GD", "{"
460       u8R"("languages":"en")"
461       "}"},
462   {"GE", "{"
463       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
464       u8R"("zipex":"0101",)"
465       u8R"("posturl":"http://www.georgianpost.ge/index.php?page=10",)"
466       u8R"("languages":"ka~ab~os")"
467       "}"},
468   {"GF", "{"
469       u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
470       u8R"("require":"ACZ",)"
471       u8R"("zipex":"97300",)"
472       u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
473       u8R"("languages":"fr")"
474       "}"},
475   {"GG", "{"
476       u8R"("fmt":"%N%n%O%n%A%n%C%nGUERNSEY%n%Z",)"
477       u8R"("require":"ACZ",)"
478       u8R"("zipex":"GY1 1AA,GY2 2BT",)"
479       u8R"("posturl":"http://www.guernseypost.com/postcode_finder/",)"
480       u8R"("languages":"en")"
481       "}"},
482   {"GH", "{"
483       u8R"("languages":"ak~en~ee~gaa")"
484       "}"},
485   {"GI", "{"
486       u8R"("fmt":"%N%n%O%n%A%nGIBRALTAR%n%Z",)"
487       u8R"("require":"A",)"
488       u8R"("zipex":"GX11 1AA",)"
489       u8R"("languages":"en")"
490       "}"},
491   {"GL", "{"
492       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
493       u8R"("require":"ACZ",)"
494       u8R"("zipex":"3900,3950,3911",)"
495       u8R"("languages":"kl")"
496       "}"},
497   {"GM", "{"
498       u8R"("languages":"en")"
499       "}"},
500   {"GN", "{"
501       u8R"("fmt":"%N%n%O%n%Z %A %C",)"
502       u8R"("zipex":"001,200,100",)"
503       u8R"("languages":"fr")"
504       "}"},
505   {"GP", "{"
506       u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
507       u8R"("require":"ACZ",)"
508       u8R"("zipex":"97100",)"
509       u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
510       u8R"("languages":"fr")"
511       "}"},
512   {"GQ", "{"
513       u8R"("languages":"es~fr~pt")"
514       "}"},
515   {"GR", "{"
516       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
517       u8R"("require":"ACZ",)"
518       u8R"("zipex":"151 24,151 10,101 88",)"
519       u8R"("posturl":"http://www.elta.gr/findapostcode.aspx",)"
520       u8R"("languages":"el")"
521       "}"},
522   {"GS", "{"
523       u8R"("fmt":"%N%n%O%n%A%n%n%C%n%Z",)"
524       u8R"("require":"ACZ",)"
525       u8R"("zipex":"SIQQ 1ZZ")"
526       "}"},
527   {"GT", "{"
528       u8R"("fmt":"%N%n%O%n%A%n%Z- %C",)"
529       u8R"("zipex":"09001,01501",)"
530       u8R"("languages":"es~quc")"
531       "}"},
532   {"GU", "{"
533       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
534       u8R"("require":"ACZ",)"
535       u8R"("zip_name_type":"zip",)"
536       u8R"("zipex":"96910,96931",)"
537       u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
538       u8R"("languages":"en~ch")"
539       "}"},
540   {"GW", "{"
541       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
542       u8R"("zipex":"1000,1011",)"
543       u8R"("languages":"pt")"
544       "}"},
545   {"GY", "{"
546       u8R"("languages":"en")"
547       "}"},
548   {"HK", "{"
549       u8R"("fmt":"%S%n%C%n%A%n%O%n%N",)"
550       u8R"("lfmt":"%N%n%O%n%A%n%C%n%S",)"
551       u8R"("require":"AS",)"
552       u8R"("state_name_type":"area",)"
553       u8R"("locality_name_type":"district",)"
554       u8R"("languages":"zh-Hant~en")"
555       "}"},
556   {"HM", "{"
557       u8R"("fmt":"%O%n%N%n%A%n%C %S %Z",)"
558       u8R"("zipex":"7050")"
559       "}"},
560   {"HN", "{"
561       u8R"("fmt":"%N%n%O%n%A%n%C, %S%n%Z",)"
562       u8R"("require":"ACS",)"
563       u8R"("zipex":"31301",)"
564       u8R"("languages":"es")"
565       "}"},
566   {"HR", "{"
567       u8R"("fmt":"%N%n%O%n%A%nHR-%Z %C",)"
568       u8R"("zipex":"10000,21001,10002",)"
569       u8R"("posturl":"http://www.posta.hr/default.aspx?pretpum",)"
570       u8R"("languages":"hr~it")"
571       "}"},
572   {"HT", "{"
573       u8R"("fmt":"%N%n%O%n%A%nHT%Z %C",)"
574       u8R"("zipex":"6120,5310,6110,8510",)"
575       u8R"("languages":"ht~fr")"
576       "}"},
577   {"HU", "{"
578       u8R"("fmt":"%N%n%O%n%C%n%A%n%Z",)"
579       u8R"("require":"ACZ",)"
580       u8R"("zipex":"1037,2380,1540",)"
581       u8R"("posturl":"http://posta.hu/ugyfelszolgalat/iranyitoszam_kereso",)"
582       u8R"("languages":"hu")"
583       "}"},
584   {"ID", "{"
585       u8R"("fmt":"%N%n%O%n%A%n%C%n%S %Z",)"
586       u8R"("require":"AS",)"
587       u8R"("zipex":"40115",)"
588       u8R"("languages":"id")"
589       "}"},
590   {"IE", "{"
591       u8R"("fmt":"%N%n%O%n%A%n%D%n%C%n%S %Z",)"
592       u8R"("zip_name_type":"eircode",)"
593       u8R"("state_name_type":"county",)"
594       u8R"("sublocality_name_type":"townland",)"
595       u8R"("zipex":"A65 F4E2",)"
596       u8R"("posturl":"https://finder.eircode.ie",)"
597       u8R"("languages":"en")"
598       "}"},
599   {"IL", "{"
600       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
601       u8R"("zipex":"9614303",)"
602       u8R"("posturl":"http://www.israelpost.co.il/zipcode.nsf/demozip?openform",)"
603       u8R"("languages":"iw~ar")"
604       "}"},
605   {"IM", "{"
606       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
607       u8R"("require":"ACZ",)"
608       u8R"("zipex":"IM2 1AA,IM99 1PS",)"
609       u8R"("posturl":"https://www.iompost.com/tools-forms/postcode-finder/",)"
610       u8R"("languages":"en~gv")"
611       "}"},
612   {"IN", "{"
613       u8R"("fmt":"%N%n%O%n%A%n%C %Z%n%S",)"
614       u8R"("require":"ACSZ",)"
615       u8R"("zip_name_type":"pin",)"
616       u8R"("state_name_type":"state",)"
617       u8R"("zipex":"110034,110001",)"
618       u8R"("posturl":"https://www.indiapost.gov.in/vas/pages/FindPinCode.aspx",)"
619       u8R"("languages":"en~hi")"
620       "}"},
621   {"IO", "{"
622       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
623       u8R"("require":"ACZ",)"
624       u8R"("zipex":"BBND 1ZZ",)"
625       u8R"("languages":"en")"
626       "}"},
627   {"IQ", "{"
628       u8R"("fmt":"%O%n%N%n%A%n%C, %S%n%Z",)"
629       u8R"("require":"ACS",)"
630       u8R"("zipex":"31001",)"
631       u8R"("languages":"ar~ckb~az-Arab")"
632       "}"},
633   {"IR", "{"
634       u8R"("fmt":"%O%n%N%n%S%n%C, %D%n%A%n%Z",)"
635       u8R"("sublocality_name_type":"neighborhood",)"
636       u8R"("zipex":"11936-12345",)"
637       u8R"("languages":"fa")"
638       "}"},
639   {"IS", "{"
640       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
641       u8R"("zipex":"320,121,220,110",)"
642       u8R"("posturl":"http://www.postur.is/einstaklingar/posthus/postnumer/",)"
643       u8R"("languages":"is")"
644       "}"},
645   {"IT", "{"
646       u8R"("fmt":"%N%n%O%n%A%n%Z %C %S",)"
647       u8R"("require":"ACSZ",)"
648       u8R"("zipex":"00144,47037,39049",)"
649       u8R"("posturl":"http://www.poste.it/online/cercacap/",)"
650       u8R"("languages":"it")"
651       "}"},
652   {"JE", "{"
653       u8R"("fmt":"%N%n%O%n%A%n%C%nJERSEY%n%Z",)"
654       u8R"("require":"ACZ",)"
655       u8R"("zipex":"JE1 1AA,JE2 2BT",)"
656       u8R"("posturl":"http://www.jerseypost.com/tools/postcode-address-finder/",)"
657       u8R"("languages":"en")"
658       "}"},
659   {"JM", "{"
660       u8R"("fmt":"%N%n%O%n%A%n%C%n%S %X",)"
661       u8R"("require":"ACS",)"
662       u8R"("state_name_type":"parish",)"
663       u8R"("languages":"en")"
664       "}"},
665   {"JO", "{"
666       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
667       u8R"("zipex":"11937,11190",)"
668       u8R"("languages":"ar")"
669       "}"},
670   {"JP", "{"
671       u8R"("fmt":"〒%Z%n%S%n%A%n%O%n%N",)"
672       u8R"("lfmt":"%N%n%O%n%A, %S%n%Z",)"
673       u8R"("require":"ASZ",)"
674       u8R"("state_name_type":"prefecture",)"
675       u8R"("zipex":"154-0023,350-1106,951-8073,112-0001,208-0032,231-0012",)"
676       u8R"("posturl":"http://www.post.japanpost.jp/zipcode/",)"
677       u8R"("languages":"ja")"
678       "}"},
679   {"KE", "{"
680       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
681       u8R"("zipex":"20100,00100",)"
682       u8R"("languages":"sw~en")"
683       "}"},
684   {"KG", "{"
685       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
686       u8R"("zipex":"720001",)"
687       u8R"("languages":"ky~ru")"
688       "}"},
689   {"KH", "{"
690       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
691       u8R"("zipex":"12203,14206,12000",)"
692       u8R"("languages":"km")"
693       "}"},
694   {"KI", "{"
695       u8R"("fmt":"%N%n%O%n%A%n%S%n%C",)"
696       u8R"("state_name_type":"island",)"
697       u8R"("languages":"en~gil")"
698       "}"},
699   {"KM", "{"
700       u8R"("languages":"ar~fr~zdj~wni")"
701       "}"},
702   {"KN", "{"
703       u8R"("fmt":"%N%n%O%n%A%n%C, %S",)"
704       u8R"("require":"ACS",)"
705       u8R"("state_name_type":"island",)"
706       u8R"("languages":"en")"
707       "}"},
708   {"KP", "{"
709       u8R"("fmt":"%Z%n%S%n%C%n%A%n%O%n%N",)"
710       u8R"("lfmt":"%N%n%O%n%A%n%C%n%S, %Z",)"
711       u8R"("languages":"ko")"
712       "}"},
713   {"KR", "{"
714       u8R"("fmt":"%S %C%D%n%A%n%O%n%N%n%Z",)"
715       u8R"("lfmt":"%N%n%O%n%A%n%D%n%C%n%S%n%Z",)"
716       u8R"("require":"ACSZ",)"
717       u8R"("state_name_type":"do_si",)"
718       u8R"("sublocality_name_type":"district",)"
719       u8R"("zipex":"03051",)"
720       u8R"("posturl":"http://www.epost.go.kr/search/zipcode/search5.jsp",)"
721       u8R"("languages":"ko")"
722       "}"},
723   {"KW", "{"
724       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
725       u8R"("zipex":"54541,54551,54404,13009",)"
726       u8R"("languages":"ar")"
727       "}"},
728   {"KY", "{"
729       u8R"("fmt":"%N%n%O%n%A%n%S %Z",)"
730       u8R"("require":"AS",)"
731       u8R"("state_name_type":"island",)"
732       u8R"("zipex":"KY1-1100,KY1-1702,KY2-2101",)"
733       u8R"("posturl":"http://www.caymanpost.gov.ky/",)"
734       u8R"("languages":"en")"
735       "}"},
736   {"KZ", "{"
737       u8R"("fmt":"%Z%n%S%n%C%n%A%n%O%n%N",)"
738       u8R"("zipex":"040900,050012",)"
739       u8R"("languages":"ru~kk")"
740       "}"},
741   {"LA", "{"
742       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
743       u8R"("zipex":"01160,01000",)"
744       u8R"("languages":"lo")"
745       "}"},
746   {"LB", "{"
747       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
748       u8R"("zipex":"2038 3054,1107 2810,1000",)"
749       u8R"("languages":"ar")"
750       "}"},
751   {"LC", "{"
752       u8R"("languages":"en")"
753       "}"},
754   {"LI", "{"
755       u8R"("fmt":"%O%n%N%n%A%nFL-%Z %C",)"
756       u8R"("require":"ACZ",)"
757       u8R"("zipex":"9496,9491,9490,9485",)"
758       u8R"("posturl":"http://www.post.ch/db/owa/pv_plz_pack/pr_main",)"
759       u8R"("languages":"de~gsw")"
760       "}"},
761   {"LK", "{"
762       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
763       u8R"("zipex":"20000,00100",)"
764       u8R"("posturl":"http://www.slpost.gov.lk/",)"
765       u8R"("languages":"si~ta")"
766       "}"},
767   {"LR", "{"
768       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
769       u8R"("zipex":"1000",)"
770       u8R"("languages":"en")"
771       "}"},
772   {"LS", "{"
773       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
774       u8R"("zipex":"100",)"
775       u8R"("languages":"st~en")"
776       "}"},
777   {"LT", "{"
778       u8R"("fmt":"%O%n%N%n%A%nLT-%Z %C",)"
779       u8R"("require":"ACZ",)"
780       u8R"("zipex":"04340,03500",)"
781       u8R"("posturl":"http://www.post.lt/lt/?id=316",)"
782       u8R"("languages":"lt")"
783       "}"},
784   {"LU", "{"
785       u8R"("fmt":"%O%n%N%n%A%nL-%Z %C",)"
786       u8R"("require":"ACZ",)"
787       u8R"("zipex":"4750,2998",)"
788       u8R"("posturl":"https://www.post.lu/fr/grandes-entreprises/solutions-postales/rechercher-un-code-postal",)"
789       u8R"("languages":"fr~lb~de")"
790       "}"},
791   {"LV", "{"
792       u8R"("fmt":"%N%n%O%n%A%n%C, %Z",)"
793       u8R"("require":"ACZ",)"
794       u8R"("zipex":"LV-1073,LV-1000",)"
795       u8R"("posturl":"http://www.pasts.lv/lv/uzzinas/nodalas/",)"
796       u8R"("languages":"lv")"
797       "}"},
798   {"LY", "{"
799       u8R"("languages":"ar")"
800       "}"},
801   {"MA", "{"
802       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
803       u8R"("zipex":"53000,10000,20050,16052",)"
804       u8R"("languages":"ar~fr~tzm")"
805       "}"},
806   {"MC", "{"
807       u8R"("fmt":"%N%n%O%n%A%nMC-%Z %C %X",)"
808       u8R"("zipex":"98000,98020,98011,98001",)"
809       u8R"("languages":"fr")"
810       "}"},
811   {"MD", "{"
812       u8R"("fmt":"%N%n%O%n%A%nMD-%Z %C",)"
813       u8R"("zipex":"2012,2019",)"
814       u8R"("languages":"ro")"
815       "}"},
816   {"ME", "{"
817       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
818       u8R"("zipex":"81257,81258,81217,84314,85366",)"
819       u8R"("languages":"sr-Latn")"
820       "}"},
821   {"MF", "{"
822       u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
823       u8R"("require":"ACZ",)"
824       u8R"("zipex":"97100",)"
825       u8R"("posturl":"https://www.laposte.fr/particulier/outils/trouver-un-code-postal",)"
826       u8R"("languages":"fr")"
827       "}"},
828   {"MG", "{"
829       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
830       u8R"("zipex":"501,101",)"
831       u8R"("languages":"mg~fr~en")"
832       "}"},
833   {"MH", "{"
834       u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
835       u8R"("require":"ACSZ",)"
836       u8R"("zip_name_type":"zip",)"
837       u8R"("state_name_type":"state",)"
838       u8R"("zipex":"96960,96970",)"
839       u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
840       u8R"("languages":"en~mh")"
841       "}"},
842   {"MK", "{"
843       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
844       u8R"("zipex":"1314,1321,1443,1062",)"
845       u8R"("languages":"mk~sq")"
846       "}"},
847   {"ML", "{"
848       u8R"("languages":"fr")"
849       "}"},
850   {"MM", "{"
851       u8R"("fmt":"%N%n%O%n%A%n%C, %Z",)"
852       u8R"("zipex":"11181",)"
853       u8R"("languages":"my")"
854       "}"},
855   {"MN", "{"
856       u8R"("fmt":"%N%n%O%n%A%n%C%n%S %Z",)"
857       u8R"("zipex":"65030,65270",)"
858       u8R"("posturl":"http://www.zipcode.mn/",)"
859       u8R"("languages":"mn")"
860       "}"},
861   {"MO", "{"
862       u8R"("fmt":"%A%n%O%n%N",)"
863       u8R"("lfmt":"%N%n%O%n%A",)"
864       u8R"("require":"A",)"
865       u8R"("languages":"zh-Hant~pt")"
866       "}"},
867   {"MP", "{"
868       u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
869       u8R"("require":"ACSZ",)"
870       u8R"("zip_name_type":"zip",)"
871       u8R"("state_name_type":"state",)"
872       u8R"("zipex":"96950,96951,96952",)"
873       u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
874       u8R"("languages":"en")"
875       "}"},
876   {"MQ", "{"
877       u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
878       u8R"("require":"ACZ",)"
879       u8R"("zipex":"97220",)"
880       u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
881       u8R"("languages":"fr")"
882       "}"},
883   {"MR", "{"
884       u8R"("languages":"ar")"
885       "}"},
886   {"MS", "{"
887       u8R"("languages":"en")"
888       "}"},
889   {"MT", "{"
890       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
891       u8R"("zipex":"NXR 01,ZTN 05,GPO 01,BZN 1130,SPB 6031,VCT 1753",)"
892       u8R"("posturl":"https://www.maltapost.com/PostCode/",)"
893       u8R"("languages":"mt~en")"
894       "}"},
895   {"MU", "{"
896       u8R"("fmt":"%N%n%O%n%A%n%Z%n%C",)"
897       u8R"("zipex":"42602",)"
898       u8R"("languages":"en~fr")"
899       "}"},
900   {"MV", "{"
901       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
902       u8R"("zipex":"20026",)"
903       u8R"("posturl":"http://www.maldivespost.com/?lid=10",)"
904       u8R"("languages":"dv")"
905       "}"},
906   {"MW", "{"
907       u8R"("fmt":"%N%n%O%n%A%n%C %X",)"
908       u8R"("languages":"en~ny")"
909       "}"},
910   {"MX", "{"
911       u8R"("fmt":"%N%n%O%n%A%n%D%n%Z %C, %S",)"
912       u8R"("require":"ACSZ",)"
913       u8R"("state_name_type":"state",)"
914       u8R"("sublocality_name_type":"neighborhood",)"
915       u8R"("zipex":"02860,77520,06082",)"
916       u8R"("posturl":"https://www.correosdemexico.gob.mx/SSLServicios/ConsultaCP/Descarga.aspx",)"
917       u8R"("languages":"es")"
918       "}"},
919   {"MY", "{"
920       u8R"("fmt":"%N%n%O%n%A%n%D%n%Z %C%n%S",)"
921       u8R"("require":"ACZ",)"
922       u8R"("state_name_type":"state",)"
923       u8R"("sublocality_name_type":"village_township",)"
924       u8R"("zipex":"43000,50754,88990,50670",)"
925       u8R"("posturl":"http://www.pos.com.my",)"
926       u8R"("languages":"ms")"
927       "}"},
928   {"MZ", "{"
929       u8R"("fmt":"%N%n%O%n%A%n%Z %C%S",)"
930       u8R"("zipex":"1102,1119,3212",)"
931       u8R"("languages":"pt")"
932       "}"},
933   {"NA", "{"
934       u8R"("fmt":"%N%n%O%n%A%n%Cn%Z",)"
935       u8R"("zipex":"10001,10017",)"
936       u8R"("languages":"en")"
937       "}"},
938   {"NC", "{"
939       u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
940       u8R"("require":"ACZ",)"
941       u8R"("zipex":"98814,98800,98810",)"
942       u8R"("posturl":"http://poste.opt.nc/index.php?option=com_content&view=article&id=80&Itemid=131",)"
943       u8R"("languages":"fr")"
944       "}"},
945   {"NE", "{"
946       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
947       u8R"("zipex":"8001",)"
948       u8R"("languages":"fr")"
949       "}"},
950   {"NF", "{"
951       u8R"("fmt":"%O%n%N%n%A%n%C %S %Z",)"
952       u8R"("zipex":"2899",)"
953       u8R"("languages":"en")"
954       "}"},
955   {"NG", "{"
956       u8R"("fmt":"%N%n%O%n%A%n%D%n%C %Z%n%S",)"
957       u8R"("state_name_type":"state",)"
958       u8R"("zipex":"930283,300001,931104",)"
959       u8R"("posturl":"http://www.nigeriapostcodes.com/",)"
960       u8R"("languages":"en")"
961       "}"},
962   {"NI", "{"
963       u8R"("fmt":"%N%n%O%n%A%n%Z%n%C, %S",)"
964       u8R"("state_name_type":"department",)"
965       u8R"("zipex":"52000",)"
966       u8R"("posturl":"http://www.correos.gob.ni/index.php/codigo-postal-2",)"
967       u8R"("languages":"es")"
968       "}"},
969   {"NL", "{"
970       u8R"("fmt":"%O%n%N%n%A%n%Z %C",)"
971       u8R"("require":"ACZ",)"
972       u8R"("zipex":"1234 AB,2490 AA",)"
973       u8R"("posturl":"http://www.postnl.nl/voorthuis/",)"
974       u8R"("languages":"nl~fy")"
975       "}"},
976   {"NO", "{"
977       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
978       u8R"("require":"ACZ",)"
979       u8R"("locality_name_type":"post_town",)"
980       u8R"("zipex":"0025,0107,6631",)"
981       u8R"("posturl":"http://adressesok.posten.no/nb/postal_codes/search",)"
982       u8R"("languages":"no~nn~se")"
983       "}"},
984   {"NP", "{"
985       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
986       u8R"("zipex":"44601",)"
987       u8R"("posturl":"http://www.gpo.gov.np/Home/Postalcode",)"
988       u8R"("languages":"ne")"
989       "}"},
990   {"NR", "{"
991       u8R"("fmt":"%N%n%O%n%A%n%S",)"
992       u8R"("require":"AS",)"
993       u8R"("state_name_type":"district",)"
994       u8R"("languages":"en")"
995       "}"},
996   {"NU", "{"
997       u8R"("languages":"en~niu")"
998       "}"},
999   {"NZ", "{"
1000       u8R"("fmt":"%N%n%O%n%A%n%D%n%C %Z",)"
1001       u8R"("require":"ACZ",)"
1002       u8R"("zipex":"6001,6015,6332,8252,1030",)"
1003       u8R"("posturl":"http://www.nzpost.co.nz/Cultures/en-NZ/OnlineTools/PostCodeFinder/",)"
1004       u8R"("languages":"en~mi")"
1005       "}"},
1006   {"OM", "{"
1007       u8R"("fmt":"%N%n%O%n%A%n%Z%n%C",)"
1008       u8R"("zipex":"133,112,111",)"
1009       u8R"("languages":"ar")"
1010       "}"},
1011   {"PA", "{"
1012       u8R"("fmt":"%N%n%O%n%A%n%C%n%S",)"
1013       u8R"("languages":"es")"
1014       "}"},
1015   {"PE", "{"
1016       u8R"("fmt":"%N%n%O%n%A%n%C %Z%n%S",)"
1017       u8R"("locality_name_type":"district",)"
1018       u8R"("zipex":"LIMA 23,LIMA 42,CALLAO 2,02001",)"
1019       u8R"("posturl":"http://www.serpost.com.pe/cpostal/codigo",)"
1020       u8R"("languages":"es")"
1021       "}"},
1022   {"PF", "{"
1023       u8R"("fmt":"%N%n%O%n%A%n%Z %C %S",)"
1024       u8R"("require":"ACSZ",)"
1025       u8R"("state_name_type":"island",)"
1026       u8R"("zipex":"98709",)"
1027       u8R"("languages":"fr~ty")"
1028       "}"},
1029   {"PG", "{"
1030       u8R"("fmt":"%N%n%O%n%A%n%C %Z %S",)"
1031       u8R"("require":"ACS",)"
1032       u8R"("zipex":"111",)"
1033       u8R"("languages":"tpi~en~ho")"
1034       "}"},
1035   {"PH", "{"
1036       u8R"("fmt":"%N%n%O%n%A%n%D, %C%n%Z %S",)"
1037       u8R"("zipex":"1008,1050,1135,1207,2000,1000",)"
1038       u8R"("posturl":"http://www.philpost.gov.ph/",)"
1039       u8R"("languages":"en")"
1040       "}"},
1041   {"PK", "{"
1042       u8R"("fmt":"%N%n%O%n%A%n%C-%Z",)"
1043       u8R"("zipex":"44000",)"
1044       u8R"("posturl":"http://www.pakpost.gov.pk/postcode.php",)"
1045       u8R"("languages":"ur~en")"
1046       "}"},
1047   {"PL", "{"
1048       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1049       u8R"("require":"ACZ",)"
1050       u8R"("zipex":"00-950,05-470,48-300,32-015,00-940",)"
1051       u8R"("posturl":"http://kody.poczta-polska.pl/",)"
1052       u8R"("languages":"pl~de~csb~lt")"
1053       "}"},
1054   {"PM", "{"
1055       u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
1056       u8R"("require":"ACZ",)"
1057       u8R"("zipex":"97500",)"
1058       u8R"("languages":"fr")"
1059       "}"},
1060   {"PN", "{"
1061       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
1062       u8R"("require":"ACZ",)"
1063       u8R"("zipex":"PCRN 1ZZ",)"
1064       u8R"("languages":"en")"
1065       "}"},
1066   {"PR", "{"
1067       u8R"("fmt":"%N%n%O%n%A%n%C PR %Z",)"
1068       u8R"("require":"ACZ",)"
1069       u8R"("zip_name_type":"zip",)"
1070       u8R"("zipex":"00930",)"
1071       u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
1072       u8R"("languages":"es~en")"
1073       "}"},
1074   {"PS", "{"
1075       u8R"("languages":"ar")"
1076       "}"},
1077   {"PT", "{"
1078       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1079       u8R"("require":"ACZ",)"
1080       u8R"("zipex":"2725-079,1250-096,1201-950,2860-571,1208-148",)"
1081       u8R"("posturl":"http://www.ctt.pt/feapl_2/app/open/tools.jspx?tool=1",)"
1082       u8R"("languages":"pt")"
1083       "}"},
1084   {"PW", "{"
1085       u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
1086       u8R"("require":"ACSZ",)"
1087       u8R"("zip_name_type":"zip",)"
1088       u8R"("state_name_type":"state",)"
1089       u8R"("zipex":"96940",)"
1090       u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
1091       u8R"("languages":"pau~en")"
1092       "}"},
1093   {"PY", "{"
1094       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1095       u8R"("zipex":"1536,1538,1209",)"
1096       u8R"("languages":"gn~es")"
1097       "}"},
1098   {"QA", "{"
1099       u8R"("languages":"ar")"
1100       "}"},
1101   {"RE", "{"
1102       u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
1103       u8R"("require":"ACZ",)"
1104       u8R"("zipex":"97400",)"
1105       u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
1106       u8R"("languages":"fr")"
1107       "}"},
1108   {"RO", "{"
1109       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1110       u8R"("require":"ACZ",)"
1111       u8R"("zipex":"060274,061357,200716",)"
1112       u8R"("posturl":"http://www.posta-romana.ro/zip_codes",)"
1113       u8R"("languages":"ro")"
1114       "}"},
1115   {"RS", "{"
1116       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1117       u8R"("zipex":"106314",)"
1118       u8R"("posturl":"http://www.posta.rs/struktura/lat/aplikacije/pronadji/nadji-postu.asp",)"
1119       u8R"("languages":"sr~sr-Latn~hu~ro~hr~sk~uk")"
1120       "}"},
1121   {"RU", "{"
1122       u8R"("fmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
1123       u8R"("lfmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
1124       u8R"("require":"ACSZ",)"
1125       u8R"("state_name_type":"oblast",)"
1126       u8R"("zipex":"247112,103375,188300",)"
1127       u8R"("posturl":"https://www.pochta.ru/post-index",)"
1128       u8R"("languages":"ru")"
1129       "}"},
1130   {"RW", "{"
1131       u8R"("languages":"rw~en~fr")"
1132       "}"},
1133   {"SA", "{"
1134       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
1135       u8R"("zipex":"11564,11187,11142",)"
1136       u8R"("languages":"ar")"
1137       "}"},
1138   {"SB", "{"
1139       u8R"("languages":"en")"
1140       "}"},
1141   {"SC", "{"
1142       u8R"("fmt":"%N%n%O%n%A%n%C%n%S",)"
1143       u8R"("state_name_type":"island",)"
1144       u8R"("languages":"fr~en")"
1145       "}"},
1146   {"SD", "{"
1147       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
1148       u8R"("locality_name_type":"district",)"
1149       u8R"("zipex":"11042,11113",)"
1150       u8R"("languages":"ar~en")"
1151       "}"},
1152   {"SE", "{"
1153       u8R"("fmt":"%O%n%N%n%A%nSE-%Z %C",)"
1154       u8R"("require":"ACZ",)"
1155       u8R"("locality_name_type":"post_town",)"
1156       u8R"("zipex":"11455,12345,10500",)"
1157       u8R"("posturl":"https://www.postnord.se/online-verktyg/verktyg/sok/sok-postnummer-och-adress",)"
1158       u8R"("languages":"sv~fi")"
1159       "}"},
1160   {"SG", "{"
1161       u8R"("fmt":"%N%n%O%n%A%nSINGAPORE %Z",)"
1162       u8R"("require":"AZ",)"
1163       u8R"("zipex":"546080,308125,408600",)"
1164       u8R"("posturl":"https://www.singpost.com/find-postal-code",)"
1165       u8R"("languages":"en~zh~ms~ta")"
1166       "}"},
1167   {"SH", "{"
1168       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
1169       u8R"("require":"ACZ",)"
1170       u8R"("zipex":"STHL 1ZZ",)"
1171       u8R"("languages":"en")"
1172       "}"},
1173   {"SI", "{"
1174       u8R"("fmt":"%N%n%O%n%A%nSI-%Z %C",)"
1175       u8R"("zipex":"4000,1001,2500",)"
1176       u8R"("languages":"sl")"
1177       "}"},
1178   {"SJ", "{"
1179       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1180       u8R"("require":"ACZ",)"
1181       u8R"("locality_name_type":"post_town",)"
1182       u8R"("zipex":"9170",)"
1183       u8R"("posturl":"http://epab.posten.no/",)"
1184       u8R"("languages":"no")"
1185       "}"},
1186   {"SK", "{"
1187       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1188       u8R"("require":"ACZ",)"
1189       u8R"("zipex":"010 01,023 14,972 48,921 01,975 99",)"
1190       u8R"("posturl":"http://psc.posta.sk",)"
1191       u8R"("languages":"sk")"
1192       "}"},
1193   {"SL", "{"
1194       u8R"("languages":"en")"
1195       "}"},
1196   {"SM", "{"
1197       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1198       u8R"("require":"AZ",)"
1199       u8R"("zipex":"47890,47891,47895,47899",)"
1200       u8R"("posturl":"http://www.poste.it/online/cercacap/",)"
1201       u8R"("languages":"it")"
1202       "}"},
1203   {"SN", "{"
1204       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1205       u8R"("zipex":"12500,46024,16556,10000",)"
1206       u8R"("languages":"wo~fr~ff~srr~dyo~sav~mfv~bjt~snf~knf~bsc~mey~tnr")"
1207       "}"},
1208   {"SO", "{"
1209       u8R"("fmt":"%N%n%O%n%A%n%C, %S %Z",)"
1210       u8R"("require":"ACS",)"
1211       u8R"("zipex":"JH 09010,AD 11010",)"
1212       u8R"("languages":"so")"
1213       "}"},
1214   {"SR", "{"
1215       u8R"("fmt":"%N%n%O%n%A%n%C%n%S",)"
1216       u8R"("languages":"nl")"
1217       "}"},
1218   {"SS", "{"
1219       u8R"("languages":"en")"
1220       "}"},
1221   {"ST", "{"
1222       u8R"("languages":"pt")"
1223       "}"},
1224   {"SV", "{"
1225       u8R"("fmt":"%N%n%O%n%A%n%Z-%C%n%S",)"
1226       u8R"("require":"ACS",)"
1227       u8R"("zipex":"CP 1101",)"
1228       u8R"("languages":"es")"
1229       "}"},
1230   {"SX", "{"
1231       u8R"("languages":"en~nl")"
1232       "}"},
1233   {"SY", "{"
1234       u8R"("locality_name_type":"district",)"
1235       u8R"("languages":"ar~fr")"
1236       "}"},
1237   {"SZ", "{"
1238       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
1239       u8R"("zipex":"H100",)"
1240       u8R"("posturl":"http://www.sptc.co.sz/swazipost/codes/index.php",)"
1241       u8R"("languages":"en~ss")"
1242       "}"},
1243   {"TA", "{"
1244       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
1245       u8R"("zipex":"TDCU 1ZZ",)"
1246       u8R"("languages":"en")"
1247       "}"},
1248   {"TC", "{"
1249       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
1250       u8R"("require":"ACZ",)"
1251       u8R"("zipex":"TKCA 1ZZ",)"
1252       u8R"("languages":"en")"
1253       "}"},
1254   {"TD", "{"
1255       u8R"("languages":"fr~ar")"
1256       "}"},
1257   {"TF", "{"
1258       u8R"("languages":"fr")"
1259       "}"},
1260   {"TG", "{"
1261       u8R"("languages":"fr")"
1262       "}"},
1263   {"TH", "{"
1264       u8R"("fmt":"%N%n%O%n%A%n%D %C%n%S %Z",)"
1265       u8R"("lfmt":"%N%n%O%n%A%n%D, %C%n%S %Z",)"
1266       u8R"("zipex":"10150,10210",)"
1267       u8R"("languages":"th")"
1268       "}"},
1269   {"TJ", "{"
1270       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1271       u8R"("zipex":"735450,734025",)"
1272       u8R"("languages":"tg")"
1273       "}"},
1274   {"TK", "{"
1275       u8R"("languages":"en~tkl")"
1276       "}"},
1277   {"TL", "{"
1278       u8R"("languages":"pt~tet")"
1279       "}"},
1280   {"TM", "{"
1281       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1282       u8R"("zipex":"744000",)"
1283       u8R"("languages":"tk")"
1284       "}"},
1285   {"TN", "{"
1286       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1287       u8R"("zipex":"1002,8129,3100,1030",)"
1288       u8R"("posturl":"http://www.poste.tn/codes.php",)"
1289       u8R"("languages":"ar~fr")"
1290       "}"},
1291   {"TO", "{"
1292       u8R"("languages":"to~en")"
1293       "}"},
1294   {"TR", "{"
1295       u8R"("fmt":"%N%n%O%n%A%n%Z %C/%S",)"
1296       u8R"("require":"ACZ",)"
1297       u8R"("locality_name_type":"district",)"
1298       u8R"("zipex":"01960,06101",)"
1299       u8R"("posturl":"http://postakodu.ptt.gov.tr/",)"
1300       u8R"("languages":"tr")"
1301       "}"},
1302   {"TT", "{"
1303       u8R"("languages":"en")"
1304       "}"},
1305   {"TV", "{"
1306       u8R"("fmt":"%N%n%O%n%A%n%C%n%S",)"
1307       u8R"("state_name_type":"island",)"
1308       u8R"("languages":"tyv")"
1309       "}"},
1310   {"TW", "{"
1311       u8R"("fmt":"%Z%n%S%C%n%A%n%O%n%N",)"
1312       u8R"("lfmt":"%N%n%O%n%A%n%C, %S %Z",)"
1313       u8R"("require":"ACSZ",)"
1314       u8R"("state_name_type":"county",)"
1315       u8R"("zipex":"104,106,10603,40867",)"
1316       u8R"("posturl":"http://www.post.gov.tw/post/internet/f_searchzone/index.jsp?ID=190102",)"
1317       u8R"("languages":"zh-Hant")"
1318       "}"},
1319   {"TZ", "{"
1320       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1321       u8R"("zipex":"6090,34413",)"
1322       u8R"("languages":"sw~en")"
1323       "}"},
1324   {"UA", "{"
1325       u8R"("fmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
1326       u8R"("lfmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
1327       u8R"("require":"ACSZ",)"
1328       u8R"("state_name_type":"oblast",)"
1329       u8R"("zipex":"15432,01055,01001",)"
1330       u8R"("posturl":"http://services.ukrposhta.com/postindex_new/",)"
1331       u8R"("languages":"uk")"
1332       "}"},
1333   {"UG", "{"
1334       u8R"("languages":"sw~en")"
1335       "}"},
1336   {"UM", "{"
1337       u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
1338       u8R"("require":"ACS",)"
1339       u8R"("zip_name_type":"zip",)"
1340       u8R"("state_name_type":"state",)"
1341       u8R"("zipex":"96898",)"
1342       u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
1343       u8R"("languages":"en")"
1344       "}"},
1345   {"US", "{"
1346       u8R"("fmt":"%N%n%O%n%A%n%C, %S %Z",)"
1347       u8R"("require":"ACSZ",)"
1348       u8R"("zip_name_type":"zip",)"
1349       u8R"("state_name_type":"state",)"
1350       u8R"("zipex":"95014,22162-1010",)"
1351       u8R"("posturl":"https://tools.usps.com/go/ZipLookupAction!input.action",)"
1352       u8R"("languages":"en")"
1353       "}"},
1354   {"UY", "{"
1355       u8R"("fmt":"%N%n%O%n%A%n%Z %C %S",)"
1356       u8R"("zipex":"11600",)"
1357       u8R"("posturl":"http://www.correo.com.uy/index.asp?codPag=codPost&switchMapa=codPost",)"
1358       u8R"("languages":"es")"
1359       "}"},
1360   {"UZ", "{"
1361       u8R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)"
1362       u8R"("zipex":"702100,700000",)"
1363       u8R"("posturl":"http://www.pochta.uz/ru/uslugi/indexsearch.html",)"
1364       u8R"("languages":"uz~uz-Cyrl")"
1365       "}"},
1366   {"VA", "{"
1367       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1368       u8R"("zipex":"00120",)"
1369       u8R"("languages":"it")"
1370       "}"},
1371   {"VC", "{"
1372       u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
1373       u8R"("zipex":"VC0100,VC0110,VC0400",)"
1374       u8R"("posturl":"http://www.svgpost.gov.vc/?option=com_content&view=article&id=3&Itemid=16",)"
1375       u8R"("languages":"en")"
1376       "}"},
1377   {"VE", "{"
1378       u8R"("fmt":"%N%n%O%n%A%n%C %Z, %S",)"
1379       u8R"("require":"ACS",)"
1380       u8R"("state_name_type":"state",)"
1381       u8R"("zipex":"1010,3001,8011,1020",)"
1382       u8R"("posturl":"http://postcode.vnpost.vn/services/search.aspx",)"
1383       u8R"("languages":"es")"
1384       "}"},
1385   {"VG", "{"
1386       u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
1387       u8R"("require":"A",)"
1388       u8R"("zipex":"VG1110,VG1150,VG1160",)"
1389       u8R"("languages":"en")"
1390       "}"},
1391   {"VI", "{"
1392       u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
1393       u8R"("require":"ACSZ",)"
1394       u8R"("zip_name_type":"zip",)"
1395       u8R"("state_name_type":"state",)"
1396       u8R"("zipex":"00802-1222,00850-9802",)"
1397       u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
1398       u8R"("languages":"en")"
1399       "}"},
1400   {"VN", "{"
1401       u8R"("fmt":"%N%n%O%n%A%n%C%n%S %Z",)"
1402       u8R"("lfmt":"%N%n%O%n%A%n%C%n%S %Z",)"
1403       u8R"("zipex":"70010,55999",)"
1404       u8R"("posturl":"http://postcode.vnpost.vn/services/search.aspx",)"
1405       u8R"("languages":"vi")"
1406       "}"},
1407   {"VU", "{"
1408       u8R"("languages":"bi~en~fr")"
1409       "}"},
1410   {"WF", "{"
1411       u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
1412       u8R"("require":"ACZ",)"
1413       u8R"("zipex":"98600",)"
1414       u8R"("languages":"fr")"
1415       "}"},
1416   {"WS", "{"
1417       u8R"("languages":"sm~en")"
1418       "}"},
1419   {"XK", "{"
1420       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1421       u8R"("zipex":"10000",)"
1422       u8R"("languages":"sq~sr~sr-Latn")"
1423       "}"},
1424   {"YE", "{"
1425       u8R"("languages":"ar")"
1426       "}"},
1427   {"YT", "{"
1428       u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
1429       u8R"("require":"ACZ",)"
1430       u8R"("zipex":"97600",)"
1431       u8R"("languages":"fr")"
1432       "}"},
1433   {"ZA", "{"
1434       u8R"("fmt":"%N%n%O%n%A%n%D%n%C%n%Z",)"
1435       u8R"("require":"ACZ",)"
1436       u8R"("zipex":"0083,1451,0001",)"
1437       u8R"("posturl":"https://www.postoffice.co.za/Questions/postalcode.html",)"
1438       u8R"("languages":"en~zu~xh~af~nso~tn~st~ts~ss~ve~nr")"
1439       "}"},
1440   {"ZM", "{"
1441       u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
1442       u8R"("zipex":"50100,50101",)"
1443       u8R"("languages":"en")"
1444       "}"},
1445   {"ZW", "{"
1446       u8R"("languages":"sn~en~nd")"
1447       "}"},
1448   };
1449 
1450 }  // namespace
1451 
1452 // static
GetDefaultRegionData()1453 const std::string& RegionDataConstants::GetDefaultRegionData() {
1454   static const std::string kDefaultRegionData(
1455       "{"
1456       u8R"("fmt":"%N%n%O%n%A%n%C",)"
1457       u8R"("require":"AC",)"
1458       u8R"("zip_name_type":"postal",)"
1459       u8R"("state_name_type":"province",)"
1460       u8R"("locality_name_type":"city",)"
1461       u8R"("sublocality_name_type":"suburb")"
1462       "}");
1463   return kDefaultRegionData;
1464 }
1465 
1466 namespace {
1467 
1468 // Binary search over kRegionData[i].region_code values. If a match is found,
1469 // returns true and sets |position_out| to the position of |region_code| in
1470 // kRegionData. If a match is not found, returns false.
FindPositionOfRegionCode(const std::string & region_code,size_t * position_out)1471 bool FindPositionOfRegionCode(const std::string& region_code,
1472                               size_t* position_out) {
1473   assert(position_out != nullptr);
1474   size_t left = 0;  // inclusive.
1475   size_t right = size(kRegionData);  // exclusive.
1476   while (left < right) {
1477     size_t mid = left + (right - left) / 2;
1478     int comparison = region_code.compare(kRegionData[mid].region_code);
1479     if (comparison == 0) {
1480       *position_out = mid;
1481       return true;
1482     } else if (comparison > 0) {
1483       left = mid + 1;
1484     } else {
1485       right = mid;
1486     }
1487   }
1488   return false;
1489 }
1490 
InitRegionCodes()1491 std::vector<std::string> InitRegionCodes() {
1492   std::vector<std::string> region_codes(size(kRegionData));
1493   std::transform(std::begin(kRegionData),
1494                  std::end(kRegionData),
1495                  region_codes.begin(),
1496                  [](const RegionData& region_data) {
1497                    return region_data.region_code;
1498                  });
1499   return region_codes;
1500 }
1501 
InitMaxLookupKeyDepth()1502 const std::map<std::string, size_t> InitMaxLookupKeyDepth() {
1503   std::map<std::string, size_t> max_depth;
1504   for (const auto& region_data : kRegionData) {
1505     std::vector<FormatElement> fields;
1506     // Here region_data.data actually contains the entire JSON blob for this
1507     // region, and not only the format field, but it doesn't really matter when
1508     // just checking whether a particular formatting code (eg. "%C") is present,
1509     // as there isn't anything else in the JSON that erroneously could match a
1510     // formatting code.
1511     ParseFormatRule(region_data.data, &fields);
1512     size_t depth = 1;
1513     for (; depth < size(LookupKey::kHierarchy); ++depth) {
1514       AddressField field = LookupKey::kHierarchy[depth];
1515       // Check to see if a particular field in the hierarchy is used by
1516       // addresses in this country. If not, the maximum depth has been reached.
1517       if (std::find(fields.begin(), fields.end(), FormatElement(field)) ==
1518           fields.end()) {
1519         break;
1520       }
1521     }
1522     max_depth.emplace(region_data.region_code, depth - 1);
1523   }
1524   return max_depth;
1525 }
1526 
1527 }  // namespace
1528 
1529 // static
IsSupported(const std::string & region_code)1530 bool RegionDataConstants::IsSupported(const std::string& region_code) {
1531   size_t unused;
1532   return FindPositionOfRegionCode(region_code, &unused);
1533 }
1534 
1535 // static
GetRegionCodes()1536 const std::vector<std::string>& RegionDataConstants::GetRegionCodes() {
1537   static const std::vector<std::string> kRegionCodes(InitRegionCodes());
1538   return kRegionCodes;
1539 }
1540 
1541 // static
GetRegionData(const std::string & region_code)1542 std::string RegionDataConstants::GetRegionData(
1543     const std::string& region_code) {
1544   static const std::string kEmptyString;
1545   size_t position;
1546   bool found = FindPositionOfRegionCode(region_code, &position);
1547   return found ? kRegionData[position].data : kEmptyString;
1548 }
1549 
1550 // static
GetMaxLookupKeyDepth(const std::string & region_code)1551 size_t RegionDataConstants::GetMaxLookupKeyDepth(
1552     const std::string& region_code) {
1553   static const std::map<std::string, size_t> kMaxDepth(InitMaxLookupKeyDepth());
1554   auto it = kMaxDepth.find(region_code);
1555   return it != kMaxDepth.end() ? it->second : 0;
1556 }
1557 
1558 }  // namespace addressinput
1559 }  // namespace i18n
1560